home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
419b.lha
/
pax_v1.1
/
pax.diff
< prev
next >
Wrap
Text File
|
1990-09-27
|
86KB
|
4,049 lines
Prereq: 1
diff -c pax/PATCHLEVEL pax.amiga/PATCHLEVEL
*** pax/PATCHLEVEL Sat Feb 18 12:52:01 1989
--- pax.amiga/PATCHLEVEL Fri Oct 6 04:20:44 1989
***************
*** 1,2
! Patchlevel 1
$Id: PATCHLEVEL,v 1.2 89/02/12 10:09:03 mark Exp $
--- 1,2 -----
! Patchlevel 1a
$Id: PATCHLEVEL,v 1.2 89/02/12 10:09:03 mark Exp $
diff -c pax/Makefile pax.amiga/Makefile
*** pax/Makefile Mon Mar 13 11:31:27 1989
--- pax.amiga/Makefile Sun Sep 24 19:15:35 1989
***************
*** 26,34
# Set CFLAGS to whatever makes your C compiler happy. Be sure to include
# the definition of $(POSIX) in the flag.
#
! CFLAGS = -O $(POSIX)
! CC = cc
! P = &
#
# Set LIBS to any additional libraries that you need linked in with pax.
--- 26,36 -----
# Set CFLAGS to whatever makes your C compiler happy. Be sure to include
# the definition of $(POSIX) in the flag.
#
! CFLAGS = -O $(POSIX) -i:h/ -cf
! CC = lc
! RM = delete
! #RM = rm -f
! P =
#
# Set LIBS to any additional libraries that you need linked in with pax.
***************
*** 33,39
#
# Set LIBS to any additional libraries that you need linked in with pax.
#
! LIBS = -lgetopt
#
# Set LFLAGS to whatever makes your linker happy
--- 35,41 -----
#
# Set LIBS to any additional libraries that you need linked in with pax.
#
! LIBS = -lgetopt
#
# Set LFLAGS to whatever makes your linker happy
***************
*** 44,50
# Set COPY to the name of the command to use to copy pax to cpio and
# tar. Usually it is 'ln'.
#
! COPY=ln
#
# Set LINTFLAGS to whatever makes your implementation of lint happy. If
--- 46,52 -----
# Set COPY to the name of the command to use to copy pax to cpio and
# tar. Usually it is 'ln'.
#
! COPY=copy
#
# Set LINTFLAGS to whatever makes your implementation of lint happy. If
***************
*** 57,63
# BINDIR - points to the directory in which you want the final pax, tar and
# cpio binaries installed in.
#
! BINDIR = /usr/local/bin
#
# MANDIR - specify the directory in which the man pages will be installed
--- 59,65 -----
# BINDIR - points to the directory in which you want the final pax, tar and
# cpio binaries installed in.
#
! BINDIR = local:bin
#
# MANDIR - specify the directory in which the man pages will be installed
***************
*** 83,89
# to this directory and choose the DIROBJ lines. Please note that this
# version of dirent has been modified to work as a stand-alone.
#
! DIRENT=
#DIRENT= -ldirent
#DIROBJ= msd_dir.obj msd_dio.obj getopt.obj
--- 85,91 -----
# to this directory and choose the DIROBJ lines. Please note that this
# version of dirent has been modified to work as a stand-alone.
#
! DIRENT= :lib/local.lib
#DIRENT= -ldirent
#DIROBJ= msd_dir.obj msd_dio.obj getopt.obj
***************
*** 118,124
ln $(BINDIR)/pax $(BINDIR)/tar
ln $(BINDIR)/pax $(BINDIR)/cpio
cp $(PMAN1) $(MAN1)
! # cp $(PMAN5) $(MAN5)
clean:
rm -f $(OBJECT)
--- 120,126 -----
ln $(BINDIR)/pax $(BINDIR)/tar
ln $(BINDIR)/pax $(BINDIR)/cpio
cp $(PMAN1) $(MAN1)
! # cp $(PMAN5) $(MAN5)
clean:
$(RM) $(OBJECT)
***************
*** 121,128
# cp $(PMAN5) $(MAN5)
clean:
! rm -f $(OBJECT)
! rm -f $(PROGS) a.out *.BAK *.bak
lint:
lint $(LINTFLAGS) $(SOURCE)
--- 123,130 -----
# cp $(PMAN5) $(MAN5)
clean:
! $(RM) $(OBJECT)
! $(RM) $(PROGS) a.out *.BAK *.bak
lint:
lint $(LINTFLAGS) $(SOURCE)
***************
*** 128,135
lint $(LINTFLAGS) $(SOURCE)
pax :$P $(OBJECT)
! $(CC) $(CFLAGS) $(LDFLAGS) -o pax $(OBJECT) $(DIRENT) $(LIBS)
! : link @linkit
tar: pax
rm -f tar
--- 130,138 -----
lint $(LINTFLAGS) $(SOURCE)
pax :$P $(OBJECT)
! blink with pax.lnk
! # $(CC) $(CFLAGS) $(LDFLAGS) -o pax $(OBJECT) $(DIRENT) $(LIBS)
! # : link @linkit
tar: pax
$(RM) tar
***************
*** 132,138
: link @linkit
tar: pax
! rm -f tar
$(COPY) pax tar
cpio: pax
--- 135,141 -----
# : link @linkit
tar: pax
! $(RM) tar
$(COPY) pax tar
cpio: pax
***************
*** 136,142
$(COPY) pax tar
cpio: pax
! rm -f cpio
$(COPY) pax cpio
$(OBJECT): $(HEADERS)
--- 139,145 -----
$(COPY) pax tar
cpio: pax
! $(RM) cpio
$(COPY) pax cpio
$(OBJECT): $(HEADERS)
diff -c pax/buffer.c pax.amiga/buffer.c
*** pax/buffer.c Sat Feb 18 12:59:39 1989
--- pax.amiga/buffer.c Sun Sep 24 22:15:42 1989
***************
*** 6,16
*
* DESCRIPTION
*
! * These functions handle buffer manipulations for the archiving
! * formats. Functions are provided to get memory for buffers,
! * flush buffers, read and write buffers and de-allocate buffers.
! * Several housekeeping functions are provided as well to get some
! * information about how full buffers are, etc.
*
* AUTHOR
*
--- 6,16 -----
*
* DESCRIPTION
*
! * These functions handle buffer manipulations for the archiving
! * formats. Functions are provided to get memory for buffers,
! * flush buffers, read and write buffers and de-allocate buffers.
! * Several housekeeping functions are provided as well to get some
! * information about how full buffers are, etc.
*
* AUTHOR
*
***************
*** 14,20
*
* AUTHOR
*
! * Mark H. Colburn, NAPS International (mark@jhereg.mn.org)
*
* Sponsored by The USENIX Association for public distribution.
*
--- 14,20 -----
*
* AUTHOR
*
! * Mark H. Colburn, NAPS International (mark@jhereg.mn.org)
*
* Sponsored by The USENIX Association for public distribution.
*
***************
*** 32,38
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
! * $Log: buffer.c,v $
* Revision 1.2 89/02/12 10:04:02 mark
* 1.2 release fixes
*
--- 32,38 -----
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
! * $Log: buffer.c,v $
* Revision 1.2 89/02/12 10:04:02 mark
* 1.2 release fixes
*
***************
*** 50,55
/* Headers */
#include "pax.h"
/* Function Prototypes */
--- 50,58 -----
/* Headers */
#include "pax.h"
+ #ifdef AMIGA
+ # include "local.h"
+ #endif
/* Function Prototypes */
***************
*** 51,57
#include "pax.h"
-
/* Function Prototypes */
#ifdef __STDC__
--- 54,59 -----
# include "local.h"
#endif
/* Function Prototypes */
#ifdef __STDC__
***************
*** 81,90
*
* DESCRIPTION
*
! * Inentry reads an archive entry from the archive file and writes it
! * out the the named file. If we are in PASS mode during archive
! * processing, the pass() function is called, otherwise we will
! * extract from the archive file.
*
* Inentry actaully calls indata to process the actual data to the
* file.
--- 83,92 -----
*
* DESCRIPTION
*
! * Inentry reads an archive entry from the archive file and writes it
! * out the the named file. If we are in PASS mode during archive
! * processing, the pass() function is called, otherwise we will
! * extract from the archive file.
*
* Inentry actually calls indata to process the data to the
* file.
***************
*** 86,93
* processing, the pass() function is called, otherwise we will
* extract from the archive file.
*
! * Inentry actaully calls indata to process the actual data to the
! * file.
*
* PARAMETERS
*
--- 88,95 -----
* processing, the pass() function is called, otherwise we will
* extract from the archive file.
*
! * Inentry actually calls indata to process the data to the
! * file.
*
* PARAMETERS
*
***************
*** 91,99
*
* PARAMETERS
*
! * char *name - name of the file to extract from the archive
! * Stat *asb - stat block of the file to be extracted from the
! * archive.
*
* RETURNS
*
--- 93,101 -----
*
* PARAMETERS
*
! * char *name - name of the file to extract from the archive
! * Stat *asb - stat block of the file to be extracted from the
! * archive.
*
* RETURNS
*
***************
*** 97,103
*
* RETURNS
*
! * Returns zero if successful, -1 otherwise.
*/
#ifdef __STDC__
--- 99,105 -----
*
* RETURNS
*
! * Returns zero if successful, -1 otherwise.
*/
#ifdef __STDC__
***************
*** 119,132
if ((ofd = openout(name, asb, linkp = linkfrom(name, asb), 0)) > 0) {
if (asb->sb_size || linkp == (Link *)NULL || linkp->l_size == 0) {
! close(indata(ofd, asb->sb_size, name));
! } else if ((ifd = open(linkp->l_path->p_name, O_RDONLY)) < 0) {
! warn(linkp->l_path->p_name, strerror());
! } else {
! passdata(linkp->l_path->p_name, ifd, name, ofd);
! close(ifd);
! close(ofd);
! }
} else {
return(buf_skip((OFFSET) asb->sb_size) >= 0);
}
--- 121,134 -----
if ((ofd = openout(name, asb, linkp = linkfrom(name, asb), 0)) > 0) {
if (asb->sb_size || linkp == (Link *)NULL || linkp->l_size == 0) {
! close(indata(ofd, asb->sb_size, name));
! } else if ((ifd = open(linkp->l_path->p_name, O_RDONLY)) < 0) {
! warn(linkp->l_path->p_name, strerror());
! } else {
! passdata(linkp->l_path->p_name, ifd, name, ofd);
! close(ifd);
! close(ofd);
! }
} else {
return(buf_skip((OFFSET) asb->sb_size) >= 0);
}
***************
*** 128,134
close(ofd);
}
} else {
! return(buf_skip((OFFSET) asb->sb_size) >= 0);
}
tstamp[0] = (!f_pass && f_access_time) ? asb->sb_atime : time((time_t *) 0);
tstamp[1] = f_mtime ? asb->sb_mtime : time((time_t *) 0);
--- 130,136 -----
close(ofd);
}
} else {
! return(buf_skip((OFFSET) asb->sb_size) >= 0);
}
tstamp[0] = (!f_pass && f_access_time) ? asb->sb_atime : time((time_t *) 0);
tstamp[1] = f_mtime ? asb->sb_mtime : time((time_t *) 0);
***************
*** 141,151
*
* DESCRIPTION
*
! * Outdata transfers data from the named file to the archive buffer.
! * It knows about the file padding which is required by tar, but no
! * by cpio. Outdata continues after file read errors, padding with
! * null characters if neccessary. Closes the input file descriptor
! * when finished.
*
* PARAMETERS
*
--- 143,153 -----
*
* DESCRIPTION
*
! * Outdata transfers data from the named file to the archive buffer.
! * It knows about the file padding which is required by tar, but not
! * by cpio. Outdata continues after file read errors, padding with
! * null characters if neccessary. Closes the input file descriptor
! * when finished.
*
* PARAMETERS
*
***************
*** 149,157
*
* PARAMETERS
*
! * int fd - file descriptor of file to read data from
! * char *name - name of file
! * OFFSET size - size of the file
*
*/
--- 151,159 -----
*
* PARAMETERS
*
! * int fd - file descriptor of file to read data from
! * char *name - name of file
! * OFFSET size - size of the file
*
*/
***************
*** 172,178
int got;
int oops;
uint avail;
! int pad;
char *buf;
oops = got = 0;
--- 174,180 -----
int got;
int oops;
uint avail;
! int pad;
char *buf;
oops = got = 0;
***************
*** 177,183
oops = got = 0;
if (pad = (size % BLOCKSIZE)) {
! pad = (BLOCKSIZE - pad);
}
while (size) {
avail = buf_out_avail(&buf);
--- 179,185 -----
oops = got = 0;
if (pad = (size % BLOCKSIZE)) {
! pad = (BLOCKSIZE - pad);
}
while (size) {
avail = buf_out_avail(&buf);
***************
*** 180,202
pad = (BLOCKSIZE - pad);
}
while (size) {
! avail = buf_out_avail(&buf);
! size -= (chunk = size < avail ? (uint) size : avail);
! if (oops == 0 && (got = read(fd, buf, (unsigned int) chunk)) < 0) {
! oops = -1;
! warn(name, strerror());
! got = 0;
! }
! if (got < chunk) {
! if (oops == 0) {
! oops = -1;
! }
! warn(name, "Early EOF");
! while (got < chunk) {
! buf[got++] = '\0';
! }
! }
! buf_use(chunk);
}
close(fd);
if (ar_format == TAR) {
--- 182,204 -----
pad = (BLOCKSIZE - pad);
}
while (size) {
! avail = buf_out_avail(&buf);
! size -= (chunk = size < avail ? (uint) size : avail);
! if (oops == 0 && (got = read(fd, buf, (unsigned int) chunk)) < 0) {
! oops = -1;
! warn(name, strerror());
! got = 0;
! }
! if (got < chunk) {
! if (oops == 0) {
! oops = -1;
! }
! warn(name, "Early EOF");
! while (got < chunk) {
! buf[got++] = '\0';
! }
! }
! buf_use(chunk);
}
close(fd);
if (ar_format == TAR) {
***************
*** 200,206
}
close(fd);
if (ar_format == TAR) {
! buf_pad((OFFSET) pad);
}
}
--- 202,208 -----
}
close(fd);
if (ar_format == TAR) {
! buf_pad((OFFSET) pad);
}
}
***************
*** 209,217
*
* DESCRIPTION
*
! * Write out an End-Of-Tape record. We actually zero at least one
! * record, through the end of the block. Old tar writes garbage after
! * two zeroed records -- and PDtar used to.
*/
#ifdef __STDC__
--- 211,219 -----
*
* DESCRIPTION
*
! * Write out an End-Of-Tape record. We actually zero at least one
! * record, through the end of the block. Old tar writes garbage after
! * two zeroed records -- and PDtar used to.
*/
#ifdef __STDC__
***************
*** 228,235
char header[M_STRLEN + H_STRLEN + 1];
if (ar_format == TAR) {
! /* write out two zero blocks for trailer */
! pad = 2 * BLOCKSIZE;
} else {
if (pad = (total + M_STRLEN + H_STRLEN + TRAILZ) % BLOCKSIZE) {
pad = BLOCKSIZE - pad;
--- 230,237 -----
char header[M_STRLEN + H_STRLEN + 1];
if (ar_format == TAR) {
! /* write out two zero blocks for trailer */
! pad = 2 * BLOCKSIZE;
} else {
if (pad = (total + M_STRLEN + H_STRLEN + TRAILZ) % BLOCKSIZE) {
pad = BLOCKSIZE - pad;
***************
*** 231,244
/* write out two zero blocks for trailer */
pad = 2 * BLOCKSIZE;
} else {
! if (pad = (total + M_STRLEN + H_STRLEN + TRAILZ) % BLOCKSIZE) {
! pad = BLOCKSIZE - pad;
! }
! strcpy(header, M_ASCII);
! sprintf(header + M_STRLEN, H_PRINT, 0, 0,
! 0, 0, 0, 1, 0, (time_t) 0, TRAILZ, pad);
! outwrite(header, M_STRLEN + H_STRLEN);
! outwrite(TRAILER, TRAILZ);
}
buf_pad((OFFSET) pad);
outflush();
--- 233,246 -----
/* write out two zero blocks for trailer */
pad = 2 * BLOCKSIZE;
} else {
! if (pad = (total + M_STRLEN + H_STRLEN + TRAILZ) % BLOCKSIZE) {
! pad = BLOCKSIZE - pad;
! }
! strcpy(header, M_ASCII);
! sprintf(header + M_STRLEN, H_PRINT, 0, 0,
! 0, 0, 0, 1, 0, (time_t) 0, TRAILZ, pad);
! outwrite(header, M_STRLEN + H_STRLEN);
! outwrite(TRAILER, TRAILZ);
}
buf_pad((OFFSET) pad);
outflush();
***************
*** 244,250
outflush();
}
!
/* outwrite - write archive data
*
* DESCRIPTION
--- 246,252 -----
outflush();
}
!
/* outwrite - write archive data
*
* DESCRIPTION
***************
*** 249,257
*
* DESCRIPTION
*
! * Writes out data in the archive buffer to the archive file. The
! * buffer index and the total byte count are incremented by the number
! * of data bytes written.
*
* PARAMETERS
*
--- 251,259 -----
*
* DESCRIPTION
*
! * Writes out data in the archive buffer to the archive file. The
! * buffer index and the total byte count are incremented by the number
! * of data bytes written.
*
* PARAMETERS
*
***************
*** 254,262
* of data bytes written.
*
* PARAMETERS
! *
! * char *idx - pointer to data to write
! * uint len - length of the data to write
*/
#ifdef __STDC__
--- 256,264 -----
* of data bytes written.
*
* PARAMETERS
! *
! * char *idx - pointer to data to write
! * uint len - length of the data to write
*/
#ifdef __STDC__
***************
*** 266,273
#else
void outwrite(idx, len)
! char *idx; /* pointer to data to write */
! uint len; /* length of data to write */
#endif
{
--- 268,275 -----
#else
void outwrite(idx, len)
! char *idx; /* pointer to data to write */
! uint len; /* length of data to write */
#endif
{
***************
*** 277,295
endx = idx + len;
while (want = endx - idx) {
! if (bufend - bufidx < 0) {
! fatal("Buffer overlow in out_write\n");
! }
! if ((have = bufend - bufidx) == 0) {
! outflush();
! }
! if (have > want) {
! have = want;
! }
! memcpy(bufidx, idx, (int) have);
! bufidx += have;
! idx += have;
! total += have;
}
}
--- 279,297 -----
endx = idx + len;
while (want = endx - idx) {
! if (bufend - bufidx < 0) {
! fatal("Buffer overlow in out_write\n");
! }
! if ((have = bufend - bufidx) == 0) {
! outflush();
! }
! if (have > want) {
! have = want;
! }
! memcpy(bufidx, idx, (int) have);
! bufidx += have;
! idx += have;
! total += have;
}
}
***************
*** 298,306
*
* DESCRIPTION
*
! * Copies a file from one place to another. Doesn't believe in input
! * file descriptor zero (see description of kludge in openin() comments).
! * Closes the provided output file descriptor.
*
* PARAMETERS
*
--- 300,308 -----
*
* DESCRIPTION
*
! * Copies a file from one place to another. Doesn't believe in input
! * file descriptor zero (see description of kludge in openin() comments).
! * Closes the provided output file descriptor.
*
* PARAMETERS
*
***************
*** 304,313
*
* PARAMETERS
*
! * char *from - input file name (old file)
! * int ifd - input file descriptor
! * char *to - output file name (new file)
! * int ofd - output file descriptor
*/
#ifdef __STDC__
--- 306,315 -----
*
* PARAMETERS
*
! * char *from - input file name (old file)
! * int ifd - input file descriptor
! * char *to - output file name (new file)
! * int ofd - output file descriptor
*/
#ifdef __STDC__
***************
*** 329,347
char block[BUFSIZ];
if (ifd) {
! lseek(ifd, (OFFSET) 0, 0);
! sparse = 0;
! while ((got = read(ifd, block, sizeof(block))) > 0
! && (sparse = ar_write(ofd, block, (uint) got)) >= 0) {
! total += got;
! }
! if (got) {
! warn(got < 0 ? from : to, strerror());
! } else if (sparse > 0
! && (lseek(ofd, (OFFSET)(-sparse), 1) < 0
! || write(ofd, block, (uint) sparse) != sparse)) {
! warn(to, strerror());
! }
}
close(ofd);
}
--- 331,341 -----
char block[BUFSIZ];
if (ifd) {
! lseek(ifd, (OFFSET) 0, 0);
! sparse = 0;
! while ((got = read(ifd, block, sizeof(block))) > 0
! && (sparse = ar_write(ofd, block, (uint) got)) >= 0) {
! total += got;
}
if (got) {
warn(got < 0 ? from : to, strerror());
***************
*** 343,348
warn(to, strerror());
}
}
close(ofd);
}
--- 337,350 -----
&& (sparse = ar_write(ofd, block, (uint) got)) >= 0) {
total += got;
}
+ if (got) {
+ warn(got < 0 ? from : to, strerror());
+ } else if (sparse > 0
+ && (lseek(ofd, (OFFSET)(-sparse), 1) < 0
+ || write(ofd, block, (uint) sparse) != sparse)) {
+ warn(to, strerror());
+ }
+ }
close(ofd);
}
***************
*** 351,360
*
* DESCRIPTION
*
! * buf_allocate allocates an I/O buffer using malloc. The resulting
! * buffer is used for all data buffering throughout the program.
! * Buf_allocate must be called prior to any use of the buffer or any
! * of the buffering calls.
*
* PARAMETERS
*
--- 353,362 -----
*
* DESCRIPTION
*
! * buf_allocate allocates an I/O buffer using malloc. The resulting
! * buffer is used for all data buffering throughout the program.
! * Buf_allocate must be called prior to any use of the buffer or any
! * of the buffering calls.
*
* PARAMETERS
*
***************
*** 358,364
*
* PARAMETERS
*
! * int size - size of the I/O buffer to request
*
* ERRORS
*
--- 360,366 -----
*
* PARAMETERS
*
! * int size - size of the I/O buffer to request
*
* ERRORS
*
***************
*** 362,371
*
* ERRORS
*
! * If an invalid size is given for a buffer or if a buffer of the
! * required size cannot be allocated, then the function prints out an
! * error message and returns a non-zero exit status to the calling
! * process, terminating the program.
*
*/
--- 364,373 -----
*
* ERRORS
*
! * If an invalid size is given for a buffer or if a buffer of the
! * required size cannot be allocated, then the function prints out an
! * error message and returns a non-zero exit status to the calling
! * process, terminating the program.
*
*/
***************
*** 381,387
#endif
{
if (size <= 0) {
! fatal("invalid value for blocksize");
}
if ((bufstart = malloc((unsigned) size)) == (char *)NULL) {
fatal("Cannot allocate I/O buffer");
--- 383,389 -----
#endif
{
if (size <= 0) {
! fatal("invalid value for blocksize");
}
#ifndef AMIGA
if ((bufstart = malloc((unsigned) size)) == (char *)NULL) {
***************
*** 383,388
if (size <= 0) {
fatal("invalid value for blocksize");
}
if ((bufstart = malloc((unsigned) size)) == (char *)NULL) {
fatal("Cannot allocate I/O buffer");
}
--- 385,391 -----
if (size <= 0) {
fatal("invalid value for blocksize");
}
+ #ifndef AMIGA
if ((bufstart = malloc((unsigned) size)) == (char *)NULL) {
fatal("Cannot allocate I/O buffer");
}
***************
*** 384,390
fatal("invalid value for blocksize");
}
if ((bufstart = malloc((unsigned) size)) == (char *)NULL) {
! fatal("Cannot allocate I/O buffer");
}
bufend = bufidx = bufstart;
bufend += size;
--- 387,393 -----
}
#ifndef AMIGA
if ((bufstart = malloc((unsigned) size)) == (char *)NULL) {
! fatal("Cannot allocate I/O buffer");
}
#else
/* try to allocate CHIP memory first, to speed o/p to archive device */
***************
*** 386,391
if ((bufstart = malloc((unsigned) size)) == (char *)NULL) {
fatal("Cannot allocate I/O buffer");
}
bufend = bufidx = bufstart;
bufend += size;
}
--- 389,408 -----
if ((bufstart = malloc((unsigned) size)) == (char *)NULL) {
fatal("Cannot allocate I/O buffer");
}
+ #else
+ /* try to allocate CHIP memory first, to speed o/p to archive device */
+ /* (CHIP memory is accessible to the dma controller:
+ * a buffer allocated in it will be transferred in one operation
+ * rather than being split and copied in 512 byte chunks.
+ */
+ if ((bufstart = chipalloc((unsigned) size)) == (char *) NULL) {
+ /* couldn't get chip: get any */
+ if((bufstart = malloc((unsigned)size)) == (char *) NULL) {
+ fatal("Cannot allocate I/O buffer");
+ }
+ }
+ #endif /* AMIGA */
+
bufend = bufidx = bufstart;
bufend += size;
}
***************
*** 395,402
*
* DESCRIPTION
*
! * Buf_skip skips past archive data. It is used when the length of
! * the archive data is known, and we do not wish to process the data.
*
* PARAMETERS
*
--- 412,419 -----
*
* DESCRIPTION
*
! * Buf_skip skips past archive data. It is used when the length of
! * the archive data is known, and we do not wish to process the data.
*
* PARAMETERS
*
***************
*** 400,406
*
* PARAMETERS
*
! * OFFSET len - number of bytes to skip
*
* RETURNS
*
--- 417,423 -----
*
* PARAMETERS
*
! * OFFSET len - number of bytes to skip
*
* RETURNS
*
***************
*** 404,411
*
* RETURNS
*
! * Returns zero under normal circumstances, -1 if unreadable data is
! * encountered.
*/
#ifdef __STDC__
--- 421,428 -----
*
* RETURNS
*
! * Returns zero under normal circumstances, -1 if unreadable data is
! * encountered.
*/
#ifdef __STDC__
***************
*** 423,440
int corrupt = 0;
while (len) {
! if (bufend - bufidx < 0) {
! fatal("Buffer overlow in buf_skip\n");
! }
! while ((chunk = bufend - bufidx) == 0) {
! corrupt |= ar_read();
! }
! if (chunk > len) {
! chunk = len;
! }
! bufidx += chunk;
! len -= chunk;
! total += chunk;
}
return (corrupt);
}
--- 440,457 -----
int corrupt = 0;
while (len) {
! if (bufend - bufidx < 0) {
! fatal("Buffer overlow in buf_skip\n");
! }
! while ((chunk = bufend - bufidx) == 0) {
! corrupt |= ar_read();
! }
! if (chunk > len) {
! chunk = len;
! }
! bufidx += chunk;
! len -= chunk;
! total += chunk;
}
return (corrupt);
}
***************
*** 444,451
*
* DESCRIPTION
*
! * Reads len number of characters from the input archive and
! * stores them in the buffer pointed at by dst.
*
* PARAMETERS
*
--- 461,468 -----
*
* DESCRIPTION
*
! * Reads len number of characters from the input archive and
! * stores them in the buffer pointed at by dst.
*
* PARAMETERS
*
***************
*** 449,456
*
* PARAMETERS
*
! * char *dst - pointer to buffer to store data into
! * uint len - length of data to read
*
* RETURNS
*
--- 466,473 -----
*
* PARAMETERS
*
! * char *dst - pointer to buffer to store data into
! * uint len - length of data to read
*
* RETURNS
*
***************
*** 454,461
*
* RETURNS
*
! * Returns zero with valid data, -1 if unreadable portions were
! * replaced by null characters.
*/
#ifdef __STDC__
--- 471,478 -----
*
* RETURNS
*
! * Returns zero with valid data, -1 if unreadable portions were
! * replaced by null characters.
*/
#ifdef __STDC__
***************
*** 476,495
char *endx = dst + len;
while (want = endx - dst) {
! if (bufend - bufidx < 0) {
! fatal("Buffer overlow in buf_read\n");
! }
! while ((have = bufend - bufidx) == 0) {
! have = 0;
! corrupt |= ar_read();
! }
! if (have > want) {
! have = want;
! }
! memcpy(dst, bufidx, have);
! bufidx += have;
! dst += have;
! total += have;
}
return (corrupt);
}
--- 493,512 -----
char *endx = dst + len;
while (want = endx - dst) {
! if (bufend - bufidx < 0) {
! fatal("Buffer overlow in buf_read\n");
! }
! while ((have = bufend - bufidx) == 0) {
! have = 0;
! corrupt |= ar_read();
! }
! if (have > want) {
! have = want;
! }
! memcpy(dst, bufidx, have);
! bufidx += have;
! dst += have;
! total += have;
}
return (corrupt);
}
***************
*** 499,507
*
* DESCRIPTION
*
! * Indata writes size bytes of data from the archive buffer to the output
! * file specified by fd. The filename which is being written, pointed
! * to by name is provided only for diagnostics.
*
* PARAMETERS
*
--- 516,524 -----
*
* DESCRIPTION
*
! * Indata writes size bytes of data from the archive buffer to the output
! * file specified by fd. The filename which is being written, pointed
! * to by name is provided only for diagnostics.
*
* PARAMETERS
*
***************
*** 505,513
*
* PARAMETERS
*
! * int fd - output file descriptor
! * OFFSET size - number of bytes to write to output file
! * char *name - name of file which corresponds to fd
*
* RETURNS
*
--- 522,530 -----
*
* PARAMETERS
*
! * int fd - output file descriptor
! * OFFSET size - number of bytes to write to output file
! * char *name - name of file which corresponds to fd
*
* RETURNS
*
***************
*** 511,517
*
* RETURNS
*
! * Returns given file descriptor.
*/
#ifdef __STDC__
--- 528,534 -----
*
* RETURNS
*
! * Returns given file descriptor.
*/
#ifdef __STDC__
***************
*** 537,548
corrupt = sparse = 0;
oops = (char *)NULL;
while (size) {
! corrupt |= buf_in_avail(&buf, &avail);
! size -= (chunk = size < avail ? (uint) size : avail);
! if (oops == (char *)NULL && (sparse = ar_write(fd, buf, chunk)) < 0) {
! oops = strerror();
! }
! buf_use(chunk);
}
if (corrupt) {
warn(name, "Corrupt archive data");
--- 554,565 -----
corrupt = sparse = 0;
oops = (char *)NULL;
while (size) {
! corrupt |= buf_in_avail(&buf, &avail);
! size -= (chunk = size < avail ? (uint) size : avail);
! if (oops == (char *)NULL && (sparse = ar_write(fd, buf, chunk)) < 0) {
! oops = strerror();
! }
! buf_use(chunk);
}
if (corrupt) {
warn(name, "Corrupt archive data");
***************
*** 545,551
buf_use(chunk);
}
if (corrupt) {
! warn(name, "Corrupt archive data");
}
if (oops) {
warn(name, oops);
--- 562,568 -----
buf_use(chunk);
}
if (corrupt) {
! warn(name, "Corrupt archive data");
}
if (oops) {
warn(name, oops);
***************
*** 548,554
warn(name, "Corrupt archive data");
}
if (oops) {
! warn(name, oops);
} else if (sparse > 0 && (lseek(fd, (OFFSET) - 1, 1) < 0
|| write(fd, "", 1) != 1)) {
warn(name, strerror());
--- 565,571 -----
warn(name, "Corrupt archive data");
}
if (oops) {
! warn(name, oops);
} else if (sparse > 0 && (lseek(fd, (OFFSET) - 1, 1) < 0
|| write(fd, "", 1) != 1)) {
warn(name, strerror());
***************
*** 550,557
if (oops) {
warn(name, oops);
} else if (sparse > 0 && (lseek(fd, (OFFSET) - 1, 1) < 0
! || write(fd, "", 1) != 1)) {
! warn(name, strerror());
}
return (fd);
}
--- 567,574 -----
if (oops) {
warn(name, oops);
} else if (sparse > 0 && (lseek(fd, (OFFSET) - 1, 1) < 0
! || write(fd, "", 1) != 1)) {
! warn(name, strerror());
}
return (fd);
}
***************
*** 561,568
*
* DESCRIPTION
*
! * The output buffer is written, if there is anything in it, to the
! * archive file.
*/
#ifdef __STDC__
--- 578,585 -----
*
* DESCRIPTION
*
! * The output buffer is written, if there is anything in it, to the
! * archive file.
*/
#ifdef __STDC__
***************
*** 580,592
uint len;
/* if (bufidx - buf > 0) */
! for (buf = bufstart; len = bufidx - buf;) {
! if ((got = WRITE(archivefd, buf, MIN(len, blocksize))) > 0) {
! buf += got;
! } else if (got < 0) {
! next(AR_WRITE);
! }
! }
bufend = (bufidx = bufstart) + blocksize;
}
--- 597,609 -----
uint len;
/* if (bufidx - buf > 0) */
! for (buf = bufstart; len = bufidx - buf;) {
! if ((got = WRITE(archivefd, buf, MIN(len, blocksize))) > 0) {
! buf += got;
! } else if (got <= 0) {
! next(AR_WRITE);
! }
! }
bufend = (bufidx = bufstart) + blocksize;
}
***************
*** 595,603
*
* DESCRIPTION
*
! * Remembers mid-buffer read failures and reports them the next time
! * through. Replaces unreadable data with null characters. Resets
! * the buffer pointers as appropriate.
*
* RETURNS
*
--- 612,620 -----
*
* DESCRIPTION
*
! * Remembers mid-buffer read failures and reports them the next time
! * through. Replaces unreadable data with null characters. Resets
! * the buffer pointers as appropriate.
*
* RETURNS
*
***************
*** 601,607
*
* RETURNS
*
! * Returns zero with valid data, -1 otherwise.
*/
#ifdef __STDC__
--- 618,624 -----
*
* RETURNS
*
! * Returns zero with valid data, -1 otherwise.
*/
#ifdef __STDC__
***************
*** 619,641
bufend = bufidx = bufstart;
if (!failed) {
! if (areof) {
! if (total == 0) {
! fatal("No input");
! } else {
! next(AR_READ);
! }
! }
! while (!failed && !areof && bufstart + blocksize - bufend >= blocksize) {
! if ((got = READ(archivefd, bufend, (unsigned int) blocksize)) > 0) {
! bufend += got;
! } else if (got < 0) {
! failed = -1;
! warnarch(strerror(), (OFFSET) 0 - (bufend - bufidx));
! } else {
! ++areof;
! }
! }
}
if (failed && bufend == bufstart) {
failed = 0;
--- 636,647 -----
bufend = bufidx = bufstart;
if (!failed) {
! if (areof) {
! if (total == 0) {
! fatal("No input");
! } else {
! next(AR_READ);
! }
}
while (!failed && !areof && bufstart + blocksize - bufend >= blocksize) {
if ((got = READ(archivefd, bufend, (unsigned int) blocksize)) > 0) {
***************
*** 637,642
}
}
}
if (failed && bufend == bufstart) {
failed = 0;
for (got = 0; got < blocksize; ++got) {
--- 643,659 -----
next(AR_READ);
}
}
+ while (!failed && !areof && bufstart + blocksize - bufend >= blocksize) {
+ if ((got = READ(archivefd, bufend, (unsigned int) blocksize)) > 0) {
+ bufend += got;
+ } else if (got < 0) {
+ failed = -1;
+ warnarch(strerror(), (OFFSET) 0 - (bufend - bufidx));
+ } else {
+ ++areof;
+ }
+ }
+ }
if (failed && bufend == bufstart) {
failed = 0;
for (got = 0; got < blocksize; ++got) {
***************
*** 638,648
}
}
if (failed && bufend == bufstart) {
! failed = 0;
! for (got = 0; got < blocksize; ++got) {
! *bufend++ = '\0';
! }
! return (-1);
}
return (0);
}
--- 655,665 -----
}
}
if (failed && bufend == bufstart) {
! failed = 0;
! for (got = 0; got < blocksize; ++got) {
! *bufend++ = '\0';
! }
! return (-1);
}
return (0);
}
***************
*** 652,659
*
* DESCRIPTION
*
! * Writes len bytes of data data from the specified buffer to the
! * specified file. Seeks past sparse blocks.
*
* PARAMETERS
*
--- 669,676 -----
*
* DESCRIPTION
*
! * Writes len bytes of data data from the specified buffer to the
! * specified file. Seeks past sparse blocks.
*
* PARAMETERS
*
***************
*** 657,665
*
* PARAMETERS
*
! * int fd - file to write to
! * char *buf - buffer to get data from
! * uint len - number of bytes to transfer
*
* RETURNS
*
--- 674,682 -----
*
* PARAMETERS
*
! * int fd - file to write to
! * char *buf - buffer to get data from
! * uint len - number of bytes to transfer
*
* RETURNS
*
***************
*** 663,670
*
* RETURNS
*
! * Returns 0 if the block was written, the given length for a sparse
! * block or -1 if unsuccessful.
*/
#ifdef __STDC__
--- 680,687 -----
*
* RETURNS
*
! * Returns 0 if the block was written, the given length for a sparse
! * block or -1 if unsuccessful.
*/
#ifdef __STDC__
***************
*** 673,679
#else
! static int ar_write(fd, buf, len)
int fd;
char *buf;
uint len;
--- 690,696 -----
#else
! static int r_write(fd, buf, len)
int fd;
char *buf;
uint len;
***************
*** 685,693
bend = (bidx = buf) + len;
while (bidx < bend) {
! if (*bidx++) {
! return (WRITE(fd, buf, len) == len ? 0 : -1);
! }
}
return (LSEEK(fd, (OFFSET) len, 1) < 0 ? -1 : len);
}
--- 702,710 -----
bend = (bidx = buf) + len;
while (bidx < bend) {
! if (*bidx++) {
! return (WRITE(fd, buf, len) == len ? 0 : -1);
! }
}
return (LSEEK(fd, (OFFSET) len, 1) < 0 ? -1 : (int) len);
}
***************
*** 689,695
return (WRITE(fd, buf, len) == len ? 0 : -1);
}
}
! return (LSEEK(fd, (OFFSET) len, 1) < 0 ? -1 : len);
}
--- 706,712 -----
return (WRITE(fd, buf, len) == len ? 0 : -1);
}
}
! return (LSEEK(fd, (OFFSET) len, 1) < 0 ? -1 : (int) len);
}
***************
*** 697,704
*
* DESCRIPTION
*
! * Buf_pad writes len zero bytes to the archive buffer in order to
! * pad it.
*
* PARAMETERS
*
--- 714,721 -----
*
* DESCRIPTION
*
! * Buf_pad writes len zero bytes to the archive buffer in order to
! * pad it.
*
* PARAMETERS
*
***************
*** 702,708
*
* PARAMETERS
*
! * OFFSET pad - number of zero bytes to pad
*
*/
--- 719,725 -----
*
* PARAMETERS
*
! * OFFSET pad - number of zero bytes to pad
*
*/
***************
*** 721,737
int have;
while (pad) {
! if ((have = bufend - bufidx) > pad) {
! have = pad;
! }
! for (idx = 0; idx < have; ++idx) {
! *bufidx++ = '\0';
! }
! total += have;
! pad -= have;
! if (bufend - bufidx == 0) {
! outflush();
! }
}
}
--- 738,754 -----
int have;
while (pad) {
! if ((have = bufend - bufidx) > pad) {
! have = pad;
! }
! for (idx = 0; idx < have; ++idx) {
! *bufidx++ = '\0';
! }
! total += have;
! pad -= have;
! if (bufend - bufidx == 0) {
! outflush();
! }
}
}
***************
*** 740,747
*
* DESCRIPTION
*
! * Buf_use marks space in the buffer as being used; advancing both the
! * buffer index (bufidx) and the total byte count (total).
*
* PARAMETERS
*
--- 757,764 -----
*
* DESCRIPTION
*
! * Buf_use marks space in the buffer as being used; advancing both the
! * buffer index (bufidx) and the total byte count (total).
*
* PARAMETERS
*
***************
*** 745,751
*
* PARAMETERS
*
! * uint len - Amount of space to allocate in the buffer
*/
#ifdef __STDC__
--- 762,768 -----
*
* PARAMETERS
*
! * uint len - Amount of space to allocate in the buffer
*/
#ifdef __STDC__
***************
*** 768,776
*
* DESCRIPTION
*
! * Buf_in_avail fills the archive buffer, and points the bufp
! * parameter at the start of the data. The lenp parameter is
! * modified to contain the number of bytes which were read.
*
* PARAMETERS
*
--- 785,793 -----
*
* DESCRIPTION
*
! * Buf_in_avail fills the archive buffer, and points the bufp
! * parameter at the start of the data. The lenp parameter is
! * modified to contain the number of bytes which were read.
*
* PARAMETERS
*
***************
*** 774,782
*
* PARAMETERS
*
! * char **bufp - pointer to the buffer to read data into
! * uint *lenp - pointer to the number of bytes which were read
! * (returned to the caller)
*
* RETURNS
*
--- 791,799 -----
*
* PARAMETERS
*
! * char **bufp - pointer to the buffer to read data into
! * uint *lenp - pointer to the number of bytes which were read
! * (returned to the caller)
*
* RETURNS
*
***************
*** 780,788
*
* RETURNS
*
! * Stores a pointer to the data and its length in given locations.
! * Returns zero with valid data, -1 if unreadable portions were
! * replaced with nulls.
*
* ERRORS
*
--- 797,805 -----
*
* RETURNS
*
! * Stores a pointer to the data and its length in given locations.
! * Returns zero with valid data, -1 if unreadable portions were
! * replaced with nulls.
*
* ERRORS
*
***************
*** 786,793
*
* ERRORS
*
! * If an error occurs in ar_read, the error code is returned to the
! * calling function.
*
*/
--- 803,810 -----
*
* ERRORS
*
! * If an error occurs in ar_read, the error code is returned to the
! * calling function.
*
*/
***************
*** 807,813
int corrupt = 0;
while ((have = bufend - bufidx) == 0) {
! corrupt |= ar_read();
}
*bufp = bufidx;
*lenp = have;
--- 824,830 -----
int corrupt = 0;
while ((have = bufend - bufidx) == 0) {
! corrupt |= ar_read();
}
*bufp = bufidx;
*lenp = have;
***************
*** 819,826
*
* DESCRIPTION
*
! * Stores a buffer pointer at a given location. Returns the number
! * of bytes available.
*
* PARAMETERS
*
--- 836,843 -----
*
* DESCRIPTION
*
! * Stores a buffer pointer at a given location. Returns the number
! * of bytes available.
*
* PARAMETERS
*
***************
*** 824,830
*
* PARAMETERS
*
! * char **bufp - pointer to the buffer which is to be stored
*
* RETURNS
*
--- 841,847 -----
*
* PARAMETERS
*
! * char **bufp - pointer to the buffer which is to be stored
*
* RETURNS
*
***************
*** 828,834
*
* RETURNS
*
! * The number of bytes which are available in the buffer.
*
*/
--- 845,851 -----
*
* RETURNS
*
! * The number of bytes which are available in the buffer.
*
*/
***************
*** 843,849
#endif
{
! int have;
if (bufend - bufidx < 0) {
fatal("Buffer overlow in buf_out_avail\n");
--- 860,866 -----
#endif
{
! uint have;
if (bufend - bufidx < 0) {
fatal("Buffer overlow in buf_out_avail\n");
***************
*** 846,852
int have;
if (bufend - bufidx < 0) {
! fatal("Buffer overlow in buf_out_avail\n");
}
if ((have = bufend - bufidx) == 0) {
outflush();
--- 863,869 -----
uint have;
if (bufend - bufidx < 0) {
! fatal("Buffer overlow in buf_out_avail\n");
}
if ((have = bufend - bufidx) == 0) {
outflush();
***************
*** 849,855
fatal("Buffer overlow in buf_out_avail\n");
}
if ((have = bufend - bufidx) == 0) {
! outflush();
}
*bufp = bufidx;
return (have);
--- 866,872 -----
fatal("Buffer overlow in buf_out_avail\n");
}
if ((have = bufend - bufidx) == 0) {
! outflush();
}
*bufp = bufidx;
return (have);
***************
*** 853,856
}
*bufp = bufidx;
return (have);
- }
--- 870,872 -----
}
*bufp = bufidx;
return (have);
diff -c pax/config.h pax.amiga/config.h
*** pax/config.h Sat Feb 18 13:26:52 1989
--- pax.amiga/config.h Wed Sep 20 06:38:43 1989
***************
*** 51,56
* USG - USG (Unix System V) specific modifications
*
* Define USG if you are running Unix System V or some similar variant
*/
/*#define USG /* Running on a USG System */
--- 51,57 -----
* USG - USG (Unix System V) specific modifications
*
* Define USG if you are running Unix System V or some similar variant
+ *
*/
/*#define USG /* Running on a USG System */
***************
*** 55,61
/*#define USG /* Running on a USG System */
/*
! * BSD - BSD (Berkely) specific modifications
*
* Define BSD if you are running some version of BSD Unix
*/
--- 56,62 -----
/*#define USG /* Running on a USG System */
/*
! * BSD - BSD (Berkeley) specific modifications
*
* Define BSD if you are running some version of BSD Unix
*/
***************
*** 59,65
*
* Define BSD if you are running some version of BSD Unix
*/
! #define BSD /* Running on a BSD System */
/*
* DEF_AR_FILE - tar only (required)
--- 60,66 -----
*
* Define BSD if you are running some version of BSD Unix
*/
! /*#define BSD /* Running on a BSD System */
/*
* DEF_AR_FILE - tar only (required)
***************
*** 68,74
* device. Normally this would be a tape drive, but it may be a disk drive
* on those systems that don't have tape drives.
*/
! #define DEF_AR_FILE "-" /* The default archive on your system */
/*
* TTY - device which interactive queries should be directed to (required)
--- 69,75 -----
* device. Normally this would be a tape drive, but it may be a disk drive
* on those systems that don't have tape drives.
*/
! #define DEF_AR_FILE "rdf:" /* The default archive on your system */
/*
* TTY - device which interactive queries should be directed to (required)
***************
*** 77,83
* received from. On most unix systems, this should be /dev/tty, however, on
* some systems, such as MS-DOS, it my need to be different (e.g. "con:").
*/
! #define TTY "/dev/tty" /* for most versions of UNIX */
/*#define TTY "/dev/con" /* For MS-DOS */
/*
--- 78,85 -----
* received from. On most unix systems, this should be /dev/tty, however, on
* some systems, such as MS-DOS, it my need to be different (e.g. "con:").
*/
! /*#define TTY "/dev/tty" /* for most versions of UNIX */
! #define TTY "*" /* For Amiga */
/*#define TTY "/dev/con" /* For MS-DOS */
/*
***************
*** 107,114
* OFFSET is the type which is returned by lseek(). It is different on
* some systems. Most define it to be off_t, but some define it to be long.
*/
! #define OFFSET off_t /* for most BSD, USG and other systems */
! /* #define OFFSET long /* for most of the rest of them... */
/*
* VOID - compiler support for VOID types
--- 109,116 -----
* OFFSET is the type which is returned by lseek(). It is different on
* some systems. Most define it to be off_t, but some define it to be long.
*/
! /*#define OFFSET off_t /* for most BSD, USG and other systems */
! #define OFFSET long /* for most of the rest of them... */
/*
* VOID - compiler support for VOID types
***************
*** 128,134
* Some systems have signal defines to return an int *, other return a
* void *. Please choose the correct value for your system.
*/
! /*#define SIG_T void /* signal defined as "void (*signal)()" */
#define SIG_T int /* signal defined as "int (*signal)()" */
/*
--- 130,136 -----
* Some systems have signal defines to return an int *, other return a
* void *. Please choose the correct value for your system.
*/
! /*define SIG_T void /* signal defined as "void (*signal)()" */
#define SIG_T int /* signal defined as "int (*signal)()" */
/*
***************
*** 138,144
* For those system define STRCSPN and the one provided in regexp.c will
* be used.
*/
! #define STRCSPN /* implementation does not have strcspn() */
/*
* STRERROR - use the strerror function included with pax
--- 140,146 -----
* For those system define STRCSPN and the one provided in regexp.c will
* be used.
*/
! /*#define STRCSPN /* implementation does not have strcspn() */
/*
* STRERROR - use the strerror function included with pax
***************
*** 147,153
* For those system define STRERROR and the one provided in misc.c will
* be used instead.
*/
! #define STRERROR /* implementation does not have strerror() */
/*
--- 149,155 -----
* For those system define STRERROR and the one provided in misc.c will
* be used instead.
*/
! /*#define STRERROR /* implementation does not have strerror() */
/*
diff -c pax/cpio.c pax.amiga/cpio.c
*** pax/cpio.c Sat Feb 18 12:59:42 1989
--- pax.amiga/cpio.c Thu Sep 14 16:52:13 1989
***************
*** 78,84
#ifdef __STDC__
! int do_cpio(int argc, char **argv)
#else
--- 78,84 -----
#ifdef __STDC__
! void do_cpio(int argc, char **argv)
#else
***************
*** 82,88
#else
! int do_cpio(argc, argv)
int argc;
char **argv;
--- 82,88 -----
#else
! void do_cpio(argc, argv)
int argc;
char **argv;
diff -c pax/extract.c pax.amiga/extract.c
*** pax/extract.c Sat Feb 18 12:49:24 1989
--- pax.amiga/extract.c Mon Sep 25 03:47:33 1989
***************
*** 92,98
#ifdef __STDC__
! int read_archive(void)
#else
--- 92,98 -----
#ifdef __STDC__
! void read_archive(void)
#else
***************
*** 96,102
#else
! int read_archive()
#endif
{
--- 96,102 -----
#else
! void read_archive()
#endif
{
***************
*** 363,368
}
#endif /* S_IFLNK */
/* destroy absolute pathnames for security reasons */
if (name[0] == '/') {
if (name[1]) {
--- 363,385 -----
}
#endif /* S_IFLNK */
+ #if AMIGA
+ /* strip any initial volume name */
+ {
+ static int Vwarned_once = 0;
+ register char *p = name;
+ while(*p && *p != ':' && *p != '/')
+ p++;
+ if(*p && *p == ':'){
+ strcpy(name, p);
+ if (!Vwarned_once++) {
+ fprintf(stderr,
+ "Removing volume specification from absolute path names in archive.\n");
+ }
+ }
+ }
+ #else /* AMIGA */
+
/* destroy absolute pathnames for security reasons */
if (name[0] == '/') {
if (name[1]) {
***************
*** 373,378
name[0] = '.';
}
}
asb->sb_atime = asb->sb_ctime = asb->sb_mtime;
if (asb->sb_nlink > 1) {
linkto(name, asb);
--- 390,396 -----
name[0] = '.';
}
}
+ #endif /* AMIGA */
asb->sb_atime = asb->sb_ctime = asb->sb_mtime;
if (asb->sb_nlink > 1) {
linkto(name, asb);
diff -c pax/func.h pax.amiga/func.h
*** pax/func.h Sat Feb 18 12:59:45 1989
--- pax.amiga/func.h Sun Sep 24 20:48:53 1989
***************
*** 48,54
extern int buf_skip(OFFSET);
extern int create_archive(void);
extern int dirneed(char *);
! extern int read_archive(void);
extern int inentry(char *, Stat *);
extern int lineget(FILE *, char *);
extern int name_match(char *);
--- 48,54 -----
extern int buf_skip(OFFSET);
extern int create_archive(void);
extern int dirneed(char *);
! extern void read_archive(void);
extern int inentry(char *, Stat *);
extern int lineget(FILE *, char *);
extern int name_match(char *);
***************
*** 58,64
extern int open_tty(void);
extern int openin(char *, Stat *);
extern int openout(char *, Stat *, Link *, int);
! extern int pass(char *);
extern int passitem(char *, Stat *, int, char *);
extern int read_header(char *, Stat *);
extern int wildmat(char *, char *);
--- 58,64 -----
extern int open_tty(void);
extern int openin(char *, Stat *);
extern int openout(char *, Stat *, Link *, int);
! extern void pass(char *);
extern int passitem(char *, Stat *, int, char *);
extern int read_header(char *, Stat *);
extern int wildmat(char *, char *);
***************
*** 74,80
extern void outwrite(char *, uint);
extern void passdata(char *, int, char *, int);
extern void print_entry(char *, Stat *);
! extern void warn();
extern void warnarch(char *, OFFSET);
extern void write_eot(void);
extern void get_archive_type(void);
--- 74,80 -----
extern void outwrite(char *, uint);
extern void passdata(char *, int, char *, int);
extern void print_entry(char *, Stat *);
! extern void warn(char *what, char *why);
extern void warnarch(char *, OFFSET);
extern void write_eot(void);
extern void get_archive_type(void);
***************
*** 78,86
extern void warnarch(char *, OFFSET);
extern void write_eot(void);
extern void get_archive_type(void);
! extern struct group *getgrgid();
! extern struct group *getgrnam();
! extern struct passwd *getpwuid();
extern char *getenv(char *);
#ifndef MSDOS
extern SIG_T (*signal())();
--- 78,84 -----
extern void warnarch(char *, OFFSET);
extern void write_eot(void);
extern void get_archive_type(void);
! extern int get_header(char *name, Stat *asb);
extern char *getenv(char *);
#ifndef MSDOS
extern SIG_T (*signal())();
***************
*** 89,94
extern char *finduname(int);
extern char *findgname(int);
extern int findgid(char *gname);
extern char *malloc(uint);
#else /* !__STDC__ */
--- 87,93 -----
extern char *finduname(int);
extern char *findgname(int);
extern int findgid(char *gname);
+ /*
extern char *malloc(uint);
/**/
extern void *malloc(uint);
***************
*** 90,96
extern char *findgname(int);
extern int findgid(char *gname);
extern char *malloc(uint);
!
#else /* !__STDC__ */
extern Link *linkfrom();
--- 89,112 -----
extern int findgid(char *gname);
/*
extern char *malloc(uint);
! /**/
! extern void *malloc(uint);
! #ifdef AMIGA
! #include "local.h"
! extern char getopt(int ac, char **av, char *fmt);
! extern void do_pax(int argc, char **argv);
! extern void do_tar(int argc, char **argv);
! extern void do_cpio(int argc, char **argv);
! extern void append_archive(void);
! extern void add_replstr(char * arg);
! extern void append_archive(void);
! extern void rpl_name(char *name);
! extern int get_disposition(char *mode, char *name);
! extern int get_newname(char *name, int size);
! extern int dirmake(char *name, Stat *asb);
! extern int dirneed(char *name);
! extern int finduid(char *uname);
! #endif
#else /* !__STDC__ */
extern Link *linkfrom();
***************
*** 104,110
extern int buf_skip();
extern int create_archive();
extern int dirneed();
! extern int read_archive();
extern int inentry();
extern int lineget();
extern int name_match();
--- 120,126 -----
extern int buf_skip();
extern int create_archive();
extern int dirneed();
! extern void read_archive();
extern int inentry();
extern int lineget();
extern int name_match();
***************
*** 114,120
extern int open_tty();
extern int openin();
extern int openout();
! extern int pass();
extern int passitem();
extern int read_header();
extern int wildmat();
--- 130,136 -----
extern int open_tty();
extern int openin();
extern int openout();
! extern void pass();
extern int passitem();
extern int read_header();
extern int wildmat();
diff -c pax/list.c pax.amiga/list.c
*** pax/list.c Sat Feb 18 12:59:47 1989
--- pax.amiga/list.c Sun Sep 24 21:03:46 1989
***************
*** 122,127
int i;
long sum;
long recsum;
Link *link;
char *p;
char hdrbuf[BLOCKSIZE];
--- 122,128 -----
int i;
long sum;
long recsum;
+ #ifdef notdef
Link *link;
#endif
char *p;
***************
*** 123,128
long sum;
long recsum;
Link *link;
char *p;
char hdrbuf[BLOCKSIZE];
--- 124,130 -----
long recsum;
#ifdef notdef
Link *link;
+ #endif
char *p;
char hdrbuf[BLOCKSIZE];
***************
*** 222,227
break;
#endif
case CHRTYPE:
asb->sb_mode |= S_IFCHR;
break;
case DIRTYPE:
--- 224,230 -----
break;
#endif
case CHRTYPE:
+ #ifdef S_IFCHR
asb->sb_mode |= S_IFCHR;
break;
#endif
***************
*** 224,229
case CHRTYPE:
asb->sb_mode |= S_IFCHR;
break;
case DIRTYPE:
asb->sb_mode |= S_IFDIR;
break;
--- 227,233 -----
#ifdef S_IFCHR
asb->sb_mode |= S_IFCHR;
break;
+ #endif
case DIRTYPE:
asb->sb_mode |= S_IFDIR;
break;
***************
*** 320,326
struct tm *atm;
Link *from;
struct passwd *pwp;
- struct group *grp;
if (f_list && f_verbose) {
fprintf(msgfile, "%-7o", asb->sb_mode);
--- 324,329 -----
struct tm *atm;
Link *from;
struct passwd *pwp;
if (f_list && f_verbose) {
***************
*** 322,327
struct passwd *pwp;
struct group *grp;
if (f_list && f_verbose) {
fprintf(msgfile, "%-7o", asb->sb_mode);
atm = localtime(&asb->sb_mtime);
--- 325,331 -----
Link *from;
struct passwd *pwp;
+
if (f_list && f_verbose) {
fprintf(msgfile, "%-7o", asb->sb_mode);
atm = localtime(&asb->sb_mtime);
***************
*** 375,381
#endif
{
struct tm *atm;
- int i;
int mode;
char *symnam = "NULL";
Link *link;
--- 379,384 -----
#endif
{
struct tm *atm;
int mode;
#if defined(S_IFLNK)
int i;
***************
*** 377,382
struct tm *atm;
int i;
int mode;
char *symnam = "NULL";
Link *link;
--- 380,387 -----
{
struct tm *atm;
int mode;
+ #if defined(S_IFLNK)
+ int i;
char *symnam = "NULL";
#endif
Link *link;
***************
*** 378,383
int i;
int mode;
char *symnam = "NULL";
Link *link;
if ((mode = asb->sb_mode & S_IFMT) == S_IFDIR) {
--- 383,389 -----
#if defined(S_IFLNK)
int i;
char *symnam = "NULL";
+ #endif
Link *link;
if ((mode = asb->sb_mode & S_IFMT) == S_IFDIR) {
***************
*** 515,520
#ifdef S_IFBLK
case S_IFBLK:
#endif
case S_IFCHR:
fprintf(msgfile, "\t%3d, %3d",
major(asb->sb_rdev), minor(asb->sb_rdev));
--- 521,527 -----
#ifdef S_IFBLK
case S_IFBLK:
#endif
+ #ifdef S_IFCHR
case S_IFCHR:
fprintf(msgfile, "\t%3d, %3d",
major(asb->sb_rdev), minor(asb->sb_rdev));
***************
*** 519,524
fprintf(msgfile, "\t%3d, %3d",
major(asb->sb_rdev), minor(asb->sb_rdev));
break;
case S_IFREG:
fprintf(msgfile, "\t%8ld", (long) asb->sb_size);
break;
--- 526,532 -----
fprintf(msgfile, "\t%3d, %3d",
major(asb->sb_rdev), minor(asb->sb_rdev));
break;
+ #endif
case S_IFREG:
fprintf(msgfile, "\t%8ld", (long) asb->sb_size);
break;
***************
*** 584,589
putc('b', msgfile);
break;
#endif
case S_IFCHR:
putc('c', msgfile);
break;
--- 592,598 -----
putc('b', msgfile);
break;
#endif
+ #ifdef S_IFCHR
case S_IFCHR:
putc('c', msgfile);
break;
***************
*** 587,592
case S_IFCHR:
putc('c', msgfile);
break;
#ifdef S_IFIFO
case S_IFIFO:
putc('p', msgfile);
--- 596,602 -----
case S_IFCHR:
putc('c', msgfile);
break;
+ #endif
#ifdef S_IFIFO
case S_IFIFO:
putc('p', msgfile);
diff -c pax/namelist.c pax.amiga/namelist.c
*** pax/namelist.c Sat Feb 18 12:59:48 1989
--- pax.amiga/namelist.c Sun Sep 24 04:06:30 1989
***************
*** 78,83
struct dirinfo {
char dirname[PATH_MAX + 1]; /* name of directory */
OFFSET where; /* current location in directory */
struct dirinfo *next;
};
--- 78,84 -----
struct dirinfo {
char dirname[PATH_MAX + 1]; /* name of directory */
+ #ifndef AMIGA
OFFSET where; /* current location in directory */
#else
DIR *where;
***************
*** 79,84
struct dirinfo {
char dirname[PATH_MAX + 1]; /* name of directory */
OFFSET where; /* current location in directory */
struct dirinfo *next;
};
--- 80,88 -----
char dirname[PATH_MAX + 1]; /* name of directory */
#ifndef AMIGA
OFFSET where; /* current location in directory */
+ #else
+ DIR *where;
+ #endif
struct dirinfo *next;
};
***************
*** 137,143
{
int i; /* Length of string */
struct nm_list *p; /* Current struct pointer */
- char *malloc();
i = strlen(name);
p = (struct nm_list *) malloc((unsigned) (i + sizeof(struct nm_list)));
--- 141,146 -----
{
int i; /* Length of string */
struct nm_list *p; /* Current struct pointer */
i = strlen(name);
p = (struct nm_list *) malloc((unsigned) (i + sizeof(struct nm_list)));
***************
*** 365,370
in_subdir--;
curr_dir = popdir();
if (in_subdir) {
errno = 0;
if ((dirp=opendir(curr_dir->dirname)) == (DIR *)NULL) {
warn(curr_dir->dirname, "error opening directory (1)");
--- 368,374 -----
in_subdir--;
curr_dir = popdir();
if (in_subdir) {
+ #ifndef AMIGA
errno = 0;
if ((dirp=opendir(curr_dir->dirname)) == (DIR *)NULL) {
warn(curr_dir->dirname, "error opening directory (1)");
***************
*** 371,376
in_subdir--;
}
seekdir(dirp, curr_dir->where);
}
continue;
}
--- 375,383 -----
in_subdir--;
}
seekdir(dirp, curr_dir->where);
+ #else
+ dirp = curr_dir->where;
+ #endif
}
continue;
}
***************
*** 386,391
}
if (!names_from_stdin && (statbuf->sb_mode & S_IFMT) == S_IFDIR) {
if (in_subdir) {
curr_dir->where = telldir(dirp);
pushdir(curr_dir);
closedir(dirp);
--- 393,399 -----
}
if (!names_from_stdin && (statbuf->sb_mode & S_IFMT) == S_IFDIR) {
if (in_subdir) {
+ #ifndef AMIGA
curr_dir->where = telldir(dirp);
#else
curr_dir->where = dirp;
***************
*** 387,392
if (!names_from_stdin && (statbuf->sb_mode & S_IFMT) == S_IFDIR) {
if (in_subdir) {
curr_dir->where = telldir(dirp);
pushdir(curr_dir);
closedir(dirp);
}
--- 395,403 -----
if (in_subdir) {
#ifndef AMIGA
curr_dir->where = telldir(dirp);
+ #else
+ curr_dir->where = dirp;
+ #endif
pushdir(curr_dir);
#ifndef AMIGA
closedir(dirp);
***************
*** 388,393
if (in_subdir) {
curr_dir->where = telldir(dirp);
pushdir(curr_dir);
closedir(dirp);
}
in_subdir++;
--- 399,405 -----
curr_dir->where = dirp;
#endif
pushdir(curr_dir);
+ #ifndef AMIGA
closedir(dirp);
#endif
}
***************
*** 389,394
curr_dir->where = telldir(dirp);
pushdir(curr_dir);
closedir(dirp);
}
in_subdir++;
--- 401,407 -----
pushdir(curr_dir);
#ifndef AMIGA
closedir(dirp);
+ #endif
}
in_subdir++;
***************
*** 417,422
err = -1;
continue;
} else {
seekdir(dirp, curr_dir->where);
}
} while (in_subdir && (! dirp));
--- 430,436 -----
err = -1;
continue;
} else {
+ #ifndef AMIGA
seekdir(dirp, curr_dir->where);
#else
if(curr_dir->where)
***************
*** 418,423
continue;
} else {
seekdir(dirp, curr_dir->where);
}
} while (in_subdir && (! dirp));
}
--- 432,441 -----
} else {
#ifndef AMIGA
seekdir(dirp, curr_dir->where);
+ #else
+ if(curr_dir->where)
+ dirp = curr_dir->where;
+ #endif
}
} while (in_subdir && (! dirp));
}
diff -c pax/names.c pax.amiga/names.c
*** pax/names.c Sat Feb 18 12:59:50 1989
--- pax.amiga/names.c Wed Sep 20 06:07:47 1989
***************
*** 56,62
/* Internal Identifiers */
! #ifndef MSDOS
static int saveuid = -993;
static char saveuname[TUNMLEN];
static int my_uid = -993;
--- 56,62 -----
/* Internal Identifiers */
! #if !defined(MSDOS) || !defined(AMIGA)
static int saveuid = -993;
static char saveuname[TUNMLEN];
static int my_uid = -993;
diff -c pax/pass.c pax.amiga/pass.c
*** pax/pass.c Sat Feb 18 12:50:51 1989
--- pax.amiga/pass.c Sun Sep 24 20:20:05 1989
***************
*** 67,73
#ifdef __STDC__
! int pass(char *dirname)
#else
--- 67,73 -----
#ifdef __STDC__
! void pass(char *dirname)
#else
***************
*** 71,77
#else
! int pass(dirname)
char *dirname;
#endif
--- 71,77 -----
#else
! void pass(dirname)
char *dirname;
#endif
diff -c pax/pathname.c pax.amiga/pathname.c
*** pax/pathname.c Sat Feb 18 12:50:54 1989
--- pax.amiga/pathname.c Sun Sep 24 20:22:03 1989
***************
*** 74,79
* failed, a -1 will be returned to the calling routine.
*/
#ifdef __STDC__
int dirneed(char *name)
--- 74,85 -----
* failed, a -1 will be returned to the calling routine.
*/
+ #ifdef AMIGA
+ # define CURDIR ""
+ #else
+ # define CURDIR "."
+ #endif
+
#ifdef __STDC__
int dirneed(char *name)
***************
*** 97,103
}
}
if (last == (char *)NULL) {
! return (STAT(".", &sb));
}
*--last = '\0';
ok = STAT(*name ? name : ".", &sb) == 0
--- 103,109 -----
}
}
if (last == (char *)NULL) {
! return (STAT(CURDIR, &sb));
}
*--last = '\0';
ok = STAT(*name ? name : CURDIR, &sb) == 0
***************
*** 100,106
return (STAT(".", &sb));
}
*--last = '\0';
! ok = STAT(*name ? name : ".", &sb) == 0
? ((sb.sb_mode & S_IFMT) == S_IFDIR)
: (f_dir_create && dirneed(name) == 0 && dirmake(name, &sb) == 0);
*last = '/';
--- 106,112 -----
return (STAT(CURDIR, &sb));
}
*--last = '\0';
! ok = STAT(*name ? name : CURDIR, &sb) == 0
? ((sb.sb_mode & S_IFMT) == S_IFDIR)
: (f_dir_create && dirneed(name) == 0 && dirmake(name, &sb) == 0);
*last = '/';
***************
*** 136,141
#endif
{
char *name;
char *item;
int idx;
--- 142,152 -----
#endif
{
+
+ #ifdef AMIGA
+ return begin;
+ #else
+
char *name;
char *item;
int idx;
***************
*** 191,196
}
*--name = '\0';
return (idx);
}
--- 202,208 -----
}
*--name = '\0';
return (idx);
+ #endif
}
***************
*** 198,204
*
* DESCRIPTION
*
! * Dirmake makes a directory with the appropritate permissions.
*
* PARAMETERS
*
--- 210,216 -----
*
* DESCRIPTION
*
! * Dirmake makes a directory with the appropriate permissions.
*
* PARAMETERS
*
***************
*** 223,228
#endif
{
if (mkdir(name, (int) (asb->sb_mode & S_IPOPN)) < 0) {
return (-1);
}
--- 235,241 -----
#endif
{
+ #ifndef AMIGA
if (mkdir(name, (int) (asb->sb_mode & S_IPOPN)) < 0) {
return (-1);
}
***************
*** 226,231
if (mkdir(name, (int) (asb->sb_mode & S_IPOPN)) < 0) {
return (-1);
}
if (asb->sb_mode & S_IPEXE) {
chmod(name, (int) (asb->sb_mode & S_IPERM));
}
--- 239,249 -----
if (mkdir(name, (int) (asb->sb_mode & S_IPOPN)) < 0) {
return (-1);
}
+ #else
+ if (mkdir(name)) {
+ return -1;
+ }
+
if (asb->sb_mode & S_IPEXE) {
chmod(name, (int) (asb->sb_mode & S_IPERM));
}
***************
*** 229,234
if (asb->sb_mode & S_IPEXE) {
chmod(name, (int) (asb->sb_mode & S_IPERM));
}
if (f_owner) {
chown(name, (int) asb->sb_uid, (int) asb->sb_gid);
}
--- 247,253 -----
if (asb->sb_mode & S_IPEXE) {
chmod(name, (int) (asb->sb_mode & S_IPERM));
}
+ #endif
if (f_owner) {
chown(name, (int) asb->sb_uid, (int) asb->sb_gid);
}
diff -c pax/pax.c pax.amiga/pax.c
*** pax/pax.c Sat Feb 18 12:59:52 1989
--- pax.amiga/pax.c Sun Sep 24 20:29:28 1989
***************
*** 149,154
*/
#ifdef __STDC__
int main(int argc, char **argv)
--- 149,160 -----
*/
#ifdef __STDC__
+ #ifdef AMIGA
+ void
+ #else
+ int
+ #endif
+ main(int argc, char **argv)
#else
***************
*** 150,157
#ifdef __STDC__
- int main(int argc, char **argv)
-
#else
int main(argc, argv)
--- 156,161 -----
#endif
main(int argc, char **argv)
#else
int main(argc, argv)
***************
*** 182,188
*tmp = '\0';
}
#else
! /* strip the pathname off of the name of the executable */
if ((myname = strrchr(argv[0], '/')) != (char *)NULL) {
myname++;
} else {
--- 186,192 -----
*tmp = '\0';
}
#else
! /* strip the pathname off the name of the executable */
if ((myname = strrchr(argv[0], '/')) != (char *)NULL) {
myname++;
} else {
***************
*** 190,196
}
#endif
! /* set upt for collecting other command line arguments */
name_init(argc, argv);
/* get all our necessary information */
--- 194,200 -----
}
#endif
! /* set up for collecting other command line arguments */
name_init(argc, argv);
/* get all our necessary information */
***************
*** 230,237
*
* RETURNS
*
! * Normally returns 0. If an error occurs, -1 is returned
! * and state is set to reflect the error.
*
*/
--- 234,240 -----
*
* RETURNS
*
! * Nothing
*
*/
***************
*** 237,243
#ifdef __STDC__
! int do_pax(int ac, char **av)
#else
--- 240,246 -----
#ifdef __STDC__
! void do_pax(int ac, char **av)
#else
***************
*** 241,247
#else
! int do_pax(ac, av)
int ac; /* argument counter */
char **av; /* arguments */
--- 244,250 -----
#else
! void do_pax(ac, av)
int ac; /* argument counter */
char **av; /* arguments */
***************
*** 409,415
usage();
}
- return (0);
}
--- 412,417 -----
usage();
}
}
diff -c pax/pax.h pax.amiga/pax.h
*** pax/pax.h Sat Feb 18 12:59:53 1989
--- pax.amiga/pax.h Wed Sep 20 06:38:48 1989
***************
*** 38,43
#include "config.h"
#include "limits.h"
#include <stdio.h>
#include <errno.h>
#include <signal.h>
#include <ctype.h>
--- 38,48 -----
#include "config.h"
#include "limits.h"
#include <stdio.h>
+
+ #ifndef V7
+ # include <fcntl.h>
+ #endif
+
#include <errno.h>
#include <signal.h>
#include <ctype.h>
***************
*** 41,46
#include <errno.h>
#include <signal.h>
#include <ctype.h>
#include <sys/types.h>
#ifndef MSDOS
#include <sys/ioctl.h>
--- 46,52 -----
#include <errno.h>
#include <signal.h>
#include <ctype.h>
+ #ifndef AMIGA
#include <sys/types.h>
#ifndef MSDOS
#include <sys/ioctl.h>
***************
*** 46,51
#include <sys/ioctl.h>
#endif
#include <sys/stat.h>
#include "regexp.h"
#if defined(DIRENT) || defined(_POSIX_SOURCE)
--- 52,63 -----
#include <sys/ioctl.h>
#endif
#include <sys/stat.h>
+ #else /* AMIGA */
+ #include "sys/stat.h"
+ #include <stdlib.h>
+ #include <stddef.h>
+ #endif /* AMIGA */
+
#include "regexp.h"
#if defined(DIRENT) || defined(_POSIX_SOURCE)
***************
*** 55,62
# include <dirent.h>
# endif
#else
! # ifdef hpux
! # include <ndir.h>
# else
# ifdef XENIX_286
# include <sys/ndir.h>
--- 67,74 -----
# include <dirent.h>
# endif
#else
! # if defined(hpux) || defined(AMIGA)
! # include "ndir.h"
# else
# ifdef XENIX_286
# include <sys/ndir.h>
***************
*** 67,73
# define dirent direct
#endif
! #ifndef MSDOS
#ifndef major
# include <sys/sysmacros.h>
#endif /* major */
--- 79,85 -----
# define dirent direct
#endif
! #if !defined(MSDOS) && !defined(AMIGA)
#ifndef major
# include <sys/sysmacros.h>
#endif /* major */
***************
*** 79,88
# include <time.h>
#endif /* SYSTIME */
- #ifndef V7
- # include <fcntl.h>
- #endif
-
#ifdef XENIX
# include <sys/inode.h>
#endif
--- 91,96 -----
# include <time.h>
#endif /* SYSTIME */
#ifdef XENIX
# include <sys/inode.h>
#endif
***************
*** 87,93
# include <sys/inode.h>
#endif
#ifdef XENIX_286
! #include <sys/param.h>
#endif /* XENIX_286 */
--- 95,101 -----
# include <sys/inode.h>
#endif
#ifdef XENIX_286
! # include <sys/param.h>
#endif /* XENIX_286 */
***************
*** 91,98
#endif /* XENIX_286 */
! #ifndef MSDOS
!
#include <pwd.h>
#include <grp.h>
--- 99,105 -----
#endif /* XENIX_286 */
! #if !defined(MSDOS) && !defined(AMIGA)
#include <pwd.h>
#include <grp.h>
***************
*** 97,103
#include <grp.h>
#ifndef XENIX_286
! #include <sys/file.h>
#endif /* XENIX_286 */
#else
--- 104,110 -----
#include <grp.h>
#ifndef XENIX_286
! # include <sys/file.h>
#endif /* XENIX_286 */
#else /* MSDOS | AMIGA */
***************
*** 100,107
#include <sys/file.h>
#endif /* XENIX_286 */
! #else
! #include <io.h>
#define major(x) (0)
#define minor(x) (0)
#define makedev(x,y) (0)
--- 107,116 -----
# include <sys/file.h>
#endif /* XENIX_286 */
! #else /* MSDOS | AMIGA */
! # ifndef AMIGA
! # include <io.h>
! # endif /* AMIGA */
#define major(x) (0)
#define minor(x) (0)
#define makedev(x,y) (0)
***************
*** 339,345
/*
* This has to be included here to insure that all of the type
! * delcarations are declared for the prototypes.
*/
#include "func.h"
--- 348,354 -----
/*
* This has to be included here to insure that all of the type
! * declarations are declared for the prototypes.
*/
#include "func.h"
***************
*** 399,403
extern int sys_nerr;
extern char *sys_errlist[];
extern int errno;
-
#endif /* _PAX_H */
--- 408,411 -----
extern int sys_nerr;
extern char *sys_errlist[];
extern int errno;
#endif /* _PAX_H */
diff -c pax/port.c pax.amiga/port.c
*** pax/port.c Mon Mar 13 11:28:21 1989
--- pax.amiga/port.c Sun Sep 24 21:51:15 1989
***************
*** 52,57
#include "pax.h"
/*
* Some computers are not so crass as to align themselves into the BSD or USG
* camps. If a system supplies all of the routines we fake here, add it to
--- 52,66 -----
#include "pax.h"
+ #ifdef AMIGA
+ # include <exec/types.h>
+ # include <exec/memory.h>
+ # include <libraries/dos.h>
+ # include <libraries/dosextens.h>
+ # include <proto/exec.h>
+ # include <proto/dos.h>
+ #endif AMIGA
+
/*
* Some computers are not so crass as to align themselves into the BSD or USG
* camps. If a system supplies all of the routines we fake here, add it to
***************
*** 59,65
*/
#if !defined(mc300) && !defined(mc500) && !defined(mc700) && !defined(BSD) \
! && !defined(MSDOS)
/* mkdir - make a directory
*
--- 68,74 -----
*/
#if !defined(mc300) && !defined(mc500) && !defined(mc700) && !defined(BSD) \
! && !defined(MSDOS) && !defined(AMIGA)
/* mkdir - make a directory
*
***************
*** 193,199
#endif /* MASSCOMP, BSD */
! #ifdef MSDOS
static struct passwd npwd = {"", "", 0, 0, 0, "", "", "", ""};
static char gmem1[] = "";
--- 202,208 -----
#endif /* MASSCOMP, BSD */
! #if defined(MSDOS) || defined(AMIGA)
static struct passwd npwd = {"", "", 0, 0, 0, "", "", "", ""};
static char gmem1[] = "";
***************
*** 245,247
}
#endif
--- 254,272 -----
}
#endif
+ #ifdef AMIGA
+ char *
+ chipalloc(unsigned size)
+ {
+ struct MemList *x =
+ (struct MemList *)AllocMem((long)size+sizeof(struct MemList), MEMF_CHIP | MEMF_PUBLIC);
+ struct Task *p = FindTask(0L);
+
+ if(x == (struct MemList *)NULL)
+ return NULL;
+ x->ml_NumEntries = 1;
+ x->ml_ME[0].me_Addr = (APTR)(((long)x) + sizeof(struct MemList));
+ x->ml_ME[0].me_Length = size;
+ AddHead(&p->tc_MemEntry, &x->ml_Node);
+ return (char *)(x->ml_ME[0].me_Addr);
+ }
diff -c pax/port.h pax.amiga/port.h
*** pax/port.h Sat Feb 18 12:51:39 1989
--- pax.amiga/port.h Sun Sep 24 19:15:12 1989
***************
*** 83,89
/*
* Map ANSI C compatible functions to V7 functions
*/
!
# define memcpy(a,b,n) bcopy((b),(a),(n))
# define memset(a,b,n) bzero((a),(n))
# define strrchr(s,c) rindex(s,c)
--- 83,89 -----
/*
* Map ANSI C compatible functions to V7 functions
*/
! #ifndef __STDC__
# define memcpy(a,b,n) bcopy((b),(a),(n))
# define memset(a,b,n) bzero((a),(n))
# define strrchr(s,c) rindex(s,c)
***************
*** 88,93
# define memset(a,b,n) bzero((a),(n))
# define strrchr(s,c) rindex(s,c)
# define strchr(s,c) index(s,c)
!
#endif /* USG */
#endif /* _PAX_PORT_H */
--- 88,96 -----
# define memset(a,b,n) bzero((a),(n))
# define strrchr(s,c) rindex(s,c)
# define strchr(s,c) index(s,c)
! #else
! # include <string.h>
! #endif
#endif /* USG */
#ifdef AMIGA
typedef long off_t;
***************
*** 90,93
# define strchr(s,c) index(s,c)
#endif /* USG */
#endif /* _PAX_PORT_H */
--- 92,114 -----
# include <string.h>
#endif
#endif /* USG */
+ #ifdef AMIGA
+ typedef long off_t;
+ #endif
+ #if defined(MSDOS) || defined(AMIGA)
+ #ifdef __STDC__
+ struct passwd *getpwuid(int x);
+ struct passwd *getpwnam(char *s);
+ struct group *getgrgid(int x);
+ struct group *getgrnam(char *s);
+ int setgrent(void);
+ int getuid(void);
+ int getgid(void);
+ int link(char *f, char *t);
+ int chown(char *n, int uid, int gid);
+ #ifdef AMIGA
+ char *chipalloc(unsigned size);
+ #endif /* AMIGA */
+ #endif /* __STDC__ */
+ #endif /* MSDOS || AMIGA */
#endif /* _PAX_PORT_H */
diff -c pax/regexp.c pax.amiga/regexp.c
*** pax/regexp.c Sat Feb 18 12:59:57 1989
--- pax.amiga/regexp.c Sun Sep 24 21:51:59 1989
***************
*** 189,194
#ifndef STATIC
#define STATIC static
#endif
STATIC char *reg();
STATIC char *regbranch();
STATIC char *regpiece();
--- 189,214 -----
#ifndef STATIC
#define STATIC static
#endif
+ #ifdef __STDC__
+ static char *reg(int paren,
+ int *flagp);
+ static char *regbranch(int *flagp);
+ static char *regpiece(int *flagp);
+ static char *regatom(int *flagp);
+ static char *regnode(int op);
+ static void regc(int b);
+ static void reginsert(int op,
+ char *opnd);
+ static void regtail(char *p,
+ char *val);
+ static void regoptail(char *p,
+ char *val);
+ static int regtry(struct regexp *prog,
+ char *string);
+ static int regmatch(char *prog);
+ static int regrepeat(char *p);
+ static char *regnext(register char *p);
+ #else
STATIC char *reg();
STATIC char *regbranch();
STATIC char *regpiece();
***************
*** 199,204
STATIC void reginsert();
STATIC void regtail();
STATIC void regoptail();
#ifdef STRCSPN
STATIC int strcspn();
#endif
--- 219,225 -----
STATIC void reginsert();
STATIC void regtail();
STATIC void regoptail();
+ #endif
#ifdef STRCSPN
STATIC int strcspn();
#endif
***************
*** 226,232
register char *longest;
register int len;
int flags;
- extern char *malloc();
if (exp == (char *)NULL)
FAIL("NULL argument");
--- 247,252 -----
register char *longest;
register int len;
int flags;
if (exp == (char *)NULL)
FAIL("NULL argument");
***************
*** 416,422
{
register char *ret;
register char op;
! register char *nxt;
int flags;
ret = regatom(&flags);
--- 436,442 -----
{
register char *ret;
register char op;
! /* register char *nxt; /* not used: PC */
int flags;
ret = regatom(&flags);
***************
*** 564,570
- regnode - emit a node
*/
static char *regnode(op)
! char op;
{
register char *ret;
register char *ptr;
--- 584,590 -----
- regnode - emit a node
*/
static char *regnode(op)
! int op;
{
register char *ret;
register char *ptr;
***************
*** 587,593
- regc - emit (if appropriate) a byte of code
*/
static void regc(b)
! char b;
{
if (regcode != ®dummy)
*regcode++ = b;
--- 607,613 -----
- regc - emit (if appropriate) a byte of code
*/
static void regc(b)
! int b;
{
if (regcode != ®dummy)
*regcode++ = b;
***************
*** 601,607
* Means relocating the operand.
*/
static void reginsert(op, opnd)
! char op;
char *opnd;
{
register char *src;
--- 621,627 -----
* Means relocating the operand.
*/
static void reginsert(op, opnd)
! int op;
char *opnd;
{
register char *src;
***************
*** 689,694
#ifdef DEBUG
int regnarrate = 0;
void regdump();
STATIC char *regprop();
#endif
--- 709,718 -----
#ifdef DEBUG
int regnarrate = 0;
+ #ifdef __STDC__
+ static char *regprop(char *op);
+ void regdump(regexp *r);
+ #else
void regdump();
static char *regprop();
#endif
***************
*** 690,696
#ifdef DEBUG
int regnarrate = 0;
void regdump();
! STATIC char *regprop();
#endif
/*
--- 714,721 -----
void regdump(regexp *r);
#else
void regdump();
! static char *regprop();
! #endif
#endif
/*
diff -c pax/regexp.h pax.amiga/regexp.h
*** pax/regexp.h Mon Feb 6 11:48:59 1989
--- pax.amiga/regexp.h Fri Sep 15 04:58:27 1989
***************
*** 25,30
* number; the start node begins in the second byte.
*/
#define MAGIC 0234
extern regexp *regcomp();
extern int regexec();
--- 25,40 -----
* number; the start node begins in the second byte.
*/
#define MAGIC 0234
+ #ifdef __STDC__
+ /* Prototypes for functions defined in regexp.c */
+ extern struct regexp *regcomp(char *exp);
+ extern int regexec(register struct regexp *prog,
+ register char *string);
+ extern void regsub(struct regexp *prog,
+ char *source,
+ char *dest);
+ extern void regerror(char *s);
+ #else
extern regexp *regcomp();
extern int regexec();
***************
*** 30,34
extern int regexec();
extern void regsub();
extern void regerror();
!
#endif /* _PAX_REGEXP_H */
--- 40,44 -----
extern int regexec();
extern void regsub();
extern void regerror();
! #endif
#endif /* _PAX_REGEXP_H */
diff -c pax/tar.c pax.amiga/tar.c
*** pax/tar.c Sat Feb 18 12:59:59 1989
--- pax.amiga/tar.c Sun Sep 24 20:27:46 1989
***************
*** 82,88
*
* RETURNS
*
! * zero
*/
#ifdef __STDC__
--- 82,88 -----
*
* RETURNS
*
! * Nothing
*/
#ifdef __STDC__
***************
*** 87,93
#ifdef __STDC__
! int do_tar(int argc, char **argv)
#else
--- 87,93 -----
#ifdef __STDC__
! void do_tar(int argc, char **argv)
#else
***************
*** 91,97
#else
! int do_tar(argc, argv)
int argc; /* argument count (argc from main) */
char **argv; /* argument list (argv from main) */
--- 91,97 -----
#else
! void do_tar(argc, argv)
int argc; /* argument count (argc from main) */
char **argv; /* argument list (argv from main) */
***************
*** 188,193
/* set the blocking factor, if not set by the user */
if (blocking == 0) {
#ifdef MSDOS
blocking = 20;
#else
--- 188,196 -----
/* set the blocking factor, if not set by the user */
if (blocking == 0) {
+ #ifdef AMIGA
+ blocking = 22;
+ #else
#ifdef MSDOS
blocking = 20;
#else
***************
*** 202,207
blocking = 20;
#endif /* USG */
#endif
}
blocksize = blocking * BLOCKSIZE;
buf_allocate((OFFSET) blocksize);
--- 205,211 -----
blocking = 20;
#endif /* USG */
#endif
+ #endif;
}
blocksize = blocking * BLOCKSIZE;
buf_allocate((OFFSET) blocksize);
***************
*** 224,230
linkleft(); /* report any unresolved links */
}
- return (0);
}
--- 228,233 -----
linkleft(); /* report any unresolved links */
}
}
diff -c pax/ttyio.c pax.amiga/ttyio.c
*** pax/ttyio.c Sat Feb 18 13:00:00 1989
--- pax.amiga/ttyio.c Sun Sep 17 06:35:45 1989
***************
*** 94,99
#ifdef MSDOS
setmode(fd, O_TEXT);
#endif
if (isatty(fd)) {
return (fd);
}
--- 94,100 -----
#ifdef MSDOS
setmode(fd, O_TEXT);
#endif
+
if (isatty(fd)) {
return (fd);
}