Official Patch #1 to Pax
Mark H. Colburn
mark at jhereg.Jhereg.MN.ORG
Mon Feb 13 16:35:02 AEST 1989
This is the first of three official patches to Pax, a freely distributable
portable archive interchange. These patches brings the software upto
release 1.2. These patches fix a number of bugs and portability problems
with the initial release of the software. These three patches (split to
avoid article size limitations) constitute a single logical patch to pax.
I would like to thank all those people who reported bug, suggested fixes,
provided patches and suggested other extensions to pax. I appologize to
that I was not able to respond to all the mail that I got about pax, but
all of the problems that were reported have either been fixed, or are
still under consideration.
Please, if you have any problems with pax, let me know so that they can be
fixed. Remember, if you find a problem, chances are that others will run
into the same problem as well. Reporting the problems will allow them to
be fixed to avoid future difficulties and effort.
These items were not fixed in the patch, but are scheduled for a future
patch release:
* Put the software configuration under control of a "Configure" script ala
less and rn.
* Bring source into line with new POSIX 1003.2 description of pax.
* Add support for undocumented -C flag to cpio.
* MS-DOS support
* MINIX support
* Add missing tar.5 cpio.5 man pages
These items were fixed in these patches:
* Changed misspelling of MERCHANTABILITY.
* Changed name of syserr to strerror, warn.c.
* Removed the references to "public domain" in the software. The
software is copyrighted, not public domain.
* Files are chmod'ed before being moved into the installation
directories. Files are also copied, then linked in the target
directory.
* The variable "min" in regexp.c was changed to "minimum". It would
seem that some copilers define min to be a macro...
* In buffer.c there was an integer which was getting assigned NULL,
rather than 0.
* If pax was given the -l option, it only successfully linked the
from-file and the to-file together if the from-file is already linked
to something else.
* Changed the verbose output file for tar to use stderr, rather than
stdout. The verbose output was being interspersed with the archive,
causing the archive to be unreadable.
* The LDFLAGS macro is now used in the makefile. There are also macros
for additional libraries which may be needed and one for SHELL which
fixes some problems when using the "make lint" facility.
* Fixed the stupid typo which caused pax/tar/cpio to run out of file
descriptors on very deep directory trees.
* Removed all line continuations "\" in preprocessor directives and
strings. These were causing problems on certain compilers.
* Rename two variable which were colloding on compilers that did not
understand varaiables that were not unique in the first six
characters.
* Change the name of openi(). This causes a lot of problems on some
machines, especially those with shared libraries...
* Added some changes required for XENIX 286.
* All references to NULL are now properly cast.
* Man pages directories are now more compatible with BSD and USG
installation
* Other miscellaneous cleanups.
Mark H. Colburn "Look into a child's eye;
Minnetech Consulting, Inc. there's no hate and there's no lie;
mark at jhereg.mn.org there's no black and there's no white."
--------------------------------- CUT HERE ---------------------------------
Index: append.c
*** /tmp/,RCSt1a17023 Sun Feb 12 14:05:27 1989
--- append.c Sun Feb 12 14:01:57 1989
***************
*** 1,6
/* $Source: /u/mark/src/pax/RCS/append.c,v $
*
! * $Revision: 1.1 $
*
* append.c - append to a tape archive.
*
--- 1,6 -----
/* $Source: /u/mark/src/pax/RCS/append.c,v $
*
! * $Revision: 1.2 $
*
* append.c - append to a tape archive.
*
***************
*** 27,33
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: append.c,v $
* Revision 1.1 88/12/23 18:02:00 mark
--- 27,33 -----
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: append.c,v $
* Revision 1.2 89/02/12 10:03:58 mark
***************
*** 30,35
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: append.c,v $
* Revision 1.1 88/12/23 18:02:00 mark
* Initial revision
*
--- 30,38 -----
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: append.c,v $
+ * Revision 1.2 89/02/12 10:03:58 mark
+ * 1.2 release fixes
+ *
* Revision 1.1 88/12/23 18:02:00 mark
* Initial revision
*
***************
*** 36,42
*/
#ifndef lint
! static char *ident = "$Id: append.c,v 1.1 88/12/23 18:02:00 mark Rel $";
static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
#endif /* ! lint */
--- 39,45 -----
*/
#ifndef lint
! static char *ident = "$Id: append.c,v 1.2 89/02/12 10:03:58 mark Exp $";
static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
#endif /* ! lint */
Index: buffer.c
*** /tmp/,RCSt1a17028 Sun Feb 12 14:05:34 1989
--- buffer.c Sun Feb 12 14:02:00 1989
***************
*** 1,6
/* $Source: /u/mark/src/pax/RCS/buffer.c,v $
*
! * $Revision: 1.1 $
*
* buffer.c - Buffer management functions
*
--- 1,6 -----
/* $Source: /u/mark/src/pax/RCS/buffer.c,v $
*
! * $Revision: 1.2 $
*
* buffer.c - Buffer management functions
*
***************
*** 30,36
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: buffer.c,v $
* Revision 1.1 88/12/23 18:02:01 mark
--- 30,36 -----
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* 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
***************
*** 33,38
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: buffer.c,v $
* Revision 1.1 88/12/23 18:02:01 mark
* Initial revision
*
--- 33,41 -----
* 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
+ *
* Revision 1.1 88/12/23 18:02:01 mark
* Initial revision
*
***************
*** 39,45
*/
#ifndef lint
! static char *ident = "$Id: buffer.c,v 1.1 88/12/23 18:02:01 mark Rel $";
static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
#endif /* ! lint */
--- 42,48 -----
*/
#ifndef lint
! static char *ident = "$Id: buffer.c,v 1.2 89/02/12 10:04:02 mark Exp $";
static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
#endif /* ! lint */
***************
*** 114,121
int ofd;
time_t tstamp[2];
! if ((ofd = openo(name, asb, linkp = linkfrom(name, asb), 0)) > 0) {
! if (asb->sb_size || linkp == 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, syserr());
--- 117,124 -----
int ofd;
time_t tstamp[2];
! 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());
***************
*** 118,124
if (asb->sb_size || linkp == 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, syserr());
} else {
passdata(linkp->l_path->p_name, ifd, name, ofd);
close(ifd);
--- 121,127 -----
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);
***************
*** 128,134
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_modification_time ? asb->sb_mtime : time((time_t *) 0);
utime(name, tstamp);
return (0);
}
--- 131,137 -----
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);
utime(name, tstamp);
return (0);
}
***************
*** 181,187
size -= (chunk = size < avail ? (uint) size : avail);
if (oops == 0 && (got = read(fd, buf, (unsigned int) chunk)) < 0) {
oops = -1;
! warn(name, syserr());
got = 0;
}
if (got < chunk) {
--- 184,190 -----
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) {
***************
*** 185,191
got = 0;
}
if (got < chunk) {
! if (oops == NULL) {
oops = -1;
}
warn(name, "Early EOF");
--- 188,194 -----
got = 0;
}
if (got < chunk) {
! if (oops == 0) {
oops = -1;
}
warn(name, "Early EOF");
***************
*** 296,302
* DESCRIPTION
*
* Copies a file from one place to another. Doesn't believe in input
! * file descriptor zero (see description of kludge in openi() comments).
* Closes the provided output file descriptor.
*
* PARAMETERS
--- 299,305 -----
* 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
***************
*** 333,339
total += got;
}
if (got) {
! warn(got < 0 ? from : to, syserr());
} else if (sparse > 0
&& (lseek(ofd, (OFFSET)(-sparse), 1) < 0
|| write(ofd, block, (uint) sparse) != sparse)) {
--- 336,342 -----
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)) {
***************
*** 337,343
} else if (sparse > 0
&& (lseek(ofd, (OFFSET)(-sparse), 1) < 0
|| write(ofd, block, (uint) sparse) != sparse)) {
! warn(to, syserr());
}
}
close(ofd);
--- 340,346 -----
} else if (sparse > 0
&& (lseek(ofd, (OFFSET)(-sparse), 1) < 0
|| write(ofd, block, (uint) sparse) != sparse)) {
! warn(to, strerror());
}
}
close(ofd);
***************
*** 377,384
#endif
{
- extern char *malloc();
-
if (size <= 0) {
fatal("invalid value for blocksize");
}
--- 380,385 -----
#endif
{
if (size <= 0) {
fatal("invalid value for blocksize");
}
***************
*** 382,388
if (size <= 0) {
fatal("invalid value for blocksize");
}
! if ((bufstart = malloc((unsigned) size)) == NULL) {
fatal("Cannot allocate I/O buffer");
}
bufend = bufidx = bufstart;
--- 383,389 -----
if (size <= 0) {
fatal("invalid value for blocksize");
}
! if ((bufstart = malloc((unsigned) size)) == (char *)NULL) {
fatal("Cannot allocate I/O buffer");
}
bufend = bufidx = bufstart;
***************
*** 534,540
uint avail;
corrupt = sparse = 0;
! oops = NULL;
while (size) {
corrupt |= buf_in_avail(&buf, &avail);
size -= (chunk = size < avail ? (uint) size : avail);
--- 535,541 -----
uint avail;
corrupt = sparse = 0;
! oops = (char *)NULL;
while (size) {
corrupt |= buf_in_avail(&buf, &avail);
size -= (chunk = size < avail ? (uint) size : avail);
***************
*** 538,545
while (size) {
corrupt |= buf_in_avail(&buf, &avail);
size -= (chunk = size < avail ? (uint) size : avail);
! if (oops == NULL && (sparse = ar_write(fd, buf, chunk)) < 0) {
! oops = syserr();
}
buf_use(chunk);
}
--- 539,546 -----
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);
}
***************
*** 550,556
warn(name, oops);
} else if (sparse > 0 && (lseek(fd, (OFFSET) - 1, 1) < 0
|| write(fd, "", 1) != 1)) {
! warn(name, syserr());
}
return (fd);
}
--- 551,557 -----
warn(name, oops);
} else if (sparse > 0 && (lseek(fd, (OFFSET) - 1, 1) < 0
|| write(fd, "", 1) != 1)) {
! warn(name, strerror());
}
return (fd);
}
***************
*** 630,636
bufend += got;
} else if (got < 0) {
failed = -1;
! warnarch(syserr(), (OFFSET) 0 - (bufend - bufidx));
} else {
++areof;
}
--- 631,637 -----
bufend += got;
} else if (got < 0) {
failed = -1;
! warnarch(strerror(), (OFFSET) 0 - (bufend - bufidx));
} else {
++areof;
}
Index: config.h
*** /tmp/,RCSt1a17033 Sun Feb 12 14:05:47 1989
--- config.h Sun Feb 12 14:02:01 1989
***************
*** 1,6
/* $Source: /u/mark/src/pax/RCS/config.h,v $
*
! * $Revision: 1.1 $
*
* config.h - configuration options for PAX
*
--- 1,6 -----
/* $Source: /u/mark/src/pax/RCS/config.h,v $
*
! * $Revision: 1.2 $
*
* config.h - configuration options for PAX
*
***************
*** 28,34
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
#ifndef _PAX_CONFIG_H
--- 28,34 -----
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
#ifndef _PAX_CONFIG_H
***************
*** 36,41
/* Defines */
/*
* USG - USG (Unix System V) specific modifications
*
--- 36,52 -----
/* Defines */
+ /* XENIX_286 (SCO ugh, Xenix system V(?) 286, USG with changes...
+ * You will get a warning about DIRSIZ being redefined, ignore it,
+ * complain to SCO about include files that are messed up or send
+ * mail to doug at lentni.UUCP, who can provide some patches to fix
+ * your include files.
+ *
+ * Defining XENIX_286 will automatically define USG.
+ *
+ */
+ #define XENIX_286 /* Running on a XENIX 286 system */
+
/*
* USG - USG (Unix System V) specific modifications
*
***************
*** 130,135
/* #define STRCSPN /* implementation does not have strcspn() */
/*
* END OF CONFIGURATION SECTION
*
* Nothing beyond this point should need to be changed
--- 141,157 -----
/* #define STRCSPN /* implementation does not have strcspn() */
/*
+ * STRERROR - use the strerror function included with pax
+ *
+ * Non-Ansi systems do not have the strerror() function in their C libraries.
+ * For those system define STRERROR and the one provided in misc.c will
+ * be used instead.
+ */
+ #define STRERROR /* implementation does not have strerror() */
+
+ /*
+
+ /*
* END OF CONFIGURATION SECTION
*
* Nothing beyond this point should need to be changed
***************
*** 148,152
# define DIRENT
# endif
#endif
#endif /* _PAX_CONFIG_H */
--- 170,178 -----
# define DIRENT
# endif
#endif
+
+ #ifdef XENIX_286
+ # define USG
+ #endif /* XENIX_286 */
#endif /* _PAX_CONFIG_H */
Index: cpio.1
*** /tmp/,RCSt1a17038 Sun Feb 12 14:05:54 1989
--- cpio.1 Sun Feb 12 14:02:02 1989
***************
*** 1,4
! .\" $Id: cpio.1,v 1.1 88/12/23 18:02:04 mark Rel $
.TH CPIO 1 "USENIX Association" ""
.SH NAME
cpio \- copy file archives in and out
--- 1,4 -----
! .\" $Id: cpio.1,v 1.2 89/02/12 10:08:42 mark Exp $
.TH CPIO 1 "USENIX Association" ""
.SH NAME
cpio \- copy file archives in and out
***************
*** 254,260
.PP
THE SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
.SH AUTHOR
Mark H. Colburn
.br
--- 254,260 -----
.PP
THE SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
.SH AUTHOR
Mark H. Colburn
.br
Index: cpio.c
*** /tmp/,RCSt1a17043 Sun Feb 12 14:06:01 1989
--- cpio.c Sun Feb 12 14:02:03 1989
***************
*** 1,6
/* $Source: /u/mark/src/pax/RCS/cpio.c,v $
*
! * $Revision: 1.1 $
*
* cpio.c - Cpio specific functions for archive handling
*
--- 1,6 -----
/* $Source: /u/mark/src/pax/RCS/cpio.c,v $
*
! * $Revision: 1.2 $
*
* cpio.c - Cpio specific functions for archive handling
*
***************
*** 27,33
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: cpio.c,v $
* Revision 1.1 88/12/23 18:02:05 mark
--- 27,33 -----
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: cpio.c,v $
* Revision 1.2 89/02/12 10:04:13 mark
***************
*** 30,35
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: cpio.c,v $
* Revision 1.1 88/12/23 18:02:05 mark
* Initial revision
*
--- 30,38 -----
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: cpio.c,v $
+ * Revision 1.2 89/02/12 10:04:13 mark
+ * 1.2 release fixes
+ *
* Revision 1.1 88/12/23 18:02:05 mark
* Initial revision
*
***************
*** 36,42
*/
#ifndef lint
! static char *ident = "$Id: cpio.c,v 1.1 88/12/23 18:02:05 mark Rel $";
static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
#endif /* ! lint */
--- 39,45 -----
*/
#ifndef lint
! static char *ident = "$Id: cpio.c,v 1.2 89/02/12 10:04:13 mark Exp $";
static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
#endif /* ! lint */
***************
*** 113,119
/* check to make sure that the argument is a directory */
if (LSTAT(dirname, &st) < 0) {
! fatal(syserr());
}
if ((st.sb_mode & S_IFMT) != S_IFDIR) {
fatal("Not a directory");
--- 116,122 -----
/* check to make sure that the argument is a directory */
if (LSTAT(dirname, &st) < 0) {
! fatal(strerror());
}
if ((st.sb_mode & S_IFMT) != S_IFDIR) {
fatal("Not a directory");
***************
*** 131,137
ar_file = optarg;
break;
case 'd':
! f_create_dirs = 1;
break;
case 'f':
f_reverse_match = 1;
--- 134,140 -----
ar_file = optarg;
break;
case 'd':
! f_dir_create = 1;
break;
case 'f':
f_reverse_match = 1;
***************
*** 140,146
f_link = 1;
break;
case 'm':
! f_modification_time = 1;
break;
case 'r':
f_interactive = 1;
--- 143,149 -----
f_link = 1;
break;
case 'm':
! f_mtime = 1;
break;
case 'r':
f_interactive = 1;
***************
*** 176,182
}
/* print out the total block count transfered */
! fprintf(stderr, "%d Blocks\n", ROUNDUP(total, BLOCKSIZE) / BLOCKSIZE);
exit(0);
/* NOTREACHED */
--- 179,185 -----
}
/* print out the total block count transfered */
! fprintf(stderr, "%ld Blocks\n", ROUNDUP(total, BLOCKSIZE) / BLOCKSIZE);
exit(0);
/* NOTREACHED */
***************
*** 207,217
#endif
{
! fprintf(stderr, "\
! Usage: %s -o[Bacv]\n", myname);
! fprintf(stderr, "\
! %s -i[Bcdmrtuvf] [pattern...]\n", myname);
! fprintf(stderr, "\
! %s -p[adlmruv] directory\n", myname);
exit(1);
}
--- 210,217 -----
#endif
{
! fprintf(stderr, "Usage: %s -o[Bacv]\n", myname);
! fprintf(stderr, " %s -i[Bcdmrtuvf] [pattern...]\n", myname);
! fprintf(stderr, " %s -p[adlmruv] directory\n", myname);
exit(1);
}
Index: create.c
*** /tmp/,RCSt1a17048 Sun Feb 12 14:06:10 1989
--- create.c Sun Feb 12 14:02:05 1989
***************
*** 1,6
/* $Source: /u/mark/src/pax/RCS/create.c,v $
*
! * $Revision: 1.1 $
*
* create.c - Create a tape archive.
*
--- 1,6 -----
/* $Source: /u/mark/src/pax/RCS/create.c,v $
*
! * $Revision: 1.3 $
*
* create.c - Create a tape archive.
*
***************
*** 27,33
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: create.c,v $
* Revision 1.1 88/12/23 18:02:06 mark
--- 27,33 -----
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: create.c,v $
* Revision 1.3 89/02/12 10:29:37 mark
***************
*** 30,35
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: create.c,v $
* Revision 1.1 88/12/23 18:02:06 mark
* Initial revision
*
--- 30,41 -----
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: create.c,v $
+ * Revision 1.3 89/02/12 10:29:37 mark
+ * Fixed misspelling of Replstr
+ *
+ * Revision 1.2 89/02/12 10:04:17 mark
+ * 1.2 release fixes
+ *
* Revision 1.1 88/12/23 18:02:06 mark
* Initial revision
*
***************
*** 36,42
*/
#ifndef lint
! static char *ident = "$Id: create.c,v 1.1 88/12/23 18:02:06 mark Rel $";
static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
#endif /* ! lint */
--- 42,48 -----
*/
#ifndef lint
! static char *ident = "$Id: create.c,v 1.3 89/02/12 10:29:37 mark Exp Locker: mark $";
static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
#endif /* ! lint */
***************
*** 93,99
int fd;
while (name_next(name, &sb) != -1) {
! if ((fd = openi(name, &sb)) < 0) {
/* FIXME: pax wants to exit here??? */
continue;
}
--- 99,105 -----
int fd;
while (name_next(name, &sb) != -1) {
! if ((fd = openin(name, &sb)) < 0) {
/* FIXME: pax wants to exit here??? */
continue;
}
***************
*** 98,104
continue;
}
! if (rplhead != NULL) {
rpl_name(name);
if (strlen(name) == 0) {
continue;
--- 104,110 -----
continue;
}
! if (rplhead != (Replstr *)NULL) {
rpl_name(name);
if (strlen(name) == 0) {
continue;
***************
*** 185,191
#endif
{
char *p;
! char *prefix = NULL;
int i;
int sum;
char hdr[BLOCKSIZE];
--- 191,197 -----
#endif
{
char *p;
! char *prefix = (char *)NULL;
int i;
int sum;
char hdr[BLOCKSIZE];
***************
*** 230,236
sprintf(&hdr[136], "%011lo ", (long) asb->sb_mtime);
strncpy(&hdr[148], " ", 8);
hdr[156] = tartype(asb->sb_mode);
! if (asb->sb_nlink > 1 && (from = linkfrom(name, asb)) != NULL) {
strcpy(&hdr[157], from->l_name);
hdr[156] = LNKTYPE;
}
--- 236,242 -----
sprintf(&hdr[136], "%011lo ", (long) asb->sb_mtime);
strncpy(&hdr[148], " ", 8);
hdr[156] = tartype(asb->sb_mode);
! if (asb->sb_nlink > 1 && (from = linkfrom(name, asb)) != (Link *)NULL) {
strcpy(&hdr[157], from->l_name);
hdr[156] = LNKTYPE;
}
***************
*** 240,246
strcpy(&hdr[297], findgname((int) asb->sb_gid));
sprintf(&hdr[329], "%06o \0", major(asb->sb_rdev));
sprintf(&hdr[337], "%06o \0", minor(asb->sb_rdev));
! if (prefix != NULL) {
strncpy(&hdr[345], prefix, 155);
}
--- 246,252 -----
strcpy(&hdr[297], findgname((int) asb->sb_gid));
sprintf(&hdr[329], "%06o \0", major(asb->sb_rdev));
sprintf(&hdr[337], "%06o \0", minor(asb->sb_rdev));
! if (prefix != (char *)NULL) {
strncpy(&hdr[345], prefix, 155);
}
***************
*** 358,364
USH(asb->sb_uid), USH(asb->sb_gid));
sprintf(header + M_STRLEN + 30, "%06o%06o%011lo%06o%011lo",
USH(asb->sb_nlink), USH(asb->sb_rdev),
! f_modification_time ? asb->sb_mtime : time((time_t *) 0),
namelen, asb->sb_size);
outwrite(header, M_STRLEN + H_STRLEN);
outwrite(name, namelen);
--- 364,370 -----
USH(asb->sb_uid), USH(asb->sb_gid));
sprintf(header + M_STRLEN + 30, "%06o%06o%011lo%06o%011lo",
USH(asb->sb_nlink), USH(asb->sb_rdev),
! f_mtime ? asb->sb_mtime : time((time_t *) 0),
namelen, asb->sb_size);
outwrite(header, M_STRLEN + H_STRLEN);
outwrite(name, namelen);
Index: extract.c
*** /tmp/,RCSt1a17053 Sun Feb 12 14:06:20 1989
--- extract.c Sun Feb 12 14:02:07 1989
***************
*** 1,6
/* $Source: /u/mark/src/pax/RCS/extract.c,v $
*
! * $Revision: 1.1 $
*
* extract.c - Extract files from a tar archive.
*
--- 1,6 -----
/* $Source: /u/mark/src/pax/RCS/extract.c,v $
*
! * $Revision: 1.3 $
*
* extract.c - Extract files from a tar archive.
*
***************
*** 24,30
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: extract.c,v $
* Revision 1.1 88/12/23 18:02:07 mark
--- 24,30 -----
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: extract.c,v $
* Revision 1.3 89/02/12 10:29:43 mark
***************
*** 27,32
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: extract.c,v $
* Revision 1.1 88/12/23 18:02:07 mark
* Initial revision
*
--- 27,38 -----
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: extract.c,v $
+ * Revision 1.3 89/02/12 10:29:43 mark
+ * Fixed misspelling of Replstr
+ *
+ * Revision 1.2 89/02/12 10:04:24 mark
+ * 1.2 release fixes
+ *
* Revision 1.1 88/12/23 18:02:07 mark
* Initial revision
*
***************
*** 33,39
*/
#ifndef lint
! static char *ident = "$Id: extract.c,v 1.1 88/12/23 18:02:07 mark Rel $";
static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
#endif /* ! lint */
--- 39,45 -----
*/
#ifndef lint
! static char *ident = "$Id: extract.c,v 1.3 89/02/12 10:29:43 mark Exp Locker: mark $";
static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
#endif /* ! lint */
***************
*** 113,119
warn(name, "File data is corrupt");
}
} else if (match) {
! if (rplhead != NULL) {
rpl_name(name);
if (strlen(name) == 0) {
continue;
--- 119,125 -----
warn(name, "File data is corrupt");
}
} else if (match) {
! if (rplhead != (Replstr *)NULL) {
rpl_name(name);
if (strlen(name) == 0) {
continue;
Index: fileio.c
*** /tmp/,RCSt1a17058 Sun Feb 12 14:06:30 1989
--- fileio.c Sun Feb 12 14:02:08 1989
***************
*** 1,6
/* $Source: /u/mark/src/pax/RCS/fileio.c,v $
*
! * $Revision: 1.1 $
*
* fileio.c - file I/O functions for all archive interfaces
*
--- 1,6 -----
/* $Source: /u/mark/src/pax/RCS/fileio.c,v $
*
! * $Revision: 1.2 $
*
* fileio.c - file I/O functions for all archive interfaces
*
***************
*** 27,33
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: fileio.c,v $
* Revision 1.1 88/12/23 18:02:09 mark
--- 27,33 -----
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: fileio.c,v $
* Revision 1.2 89/02/12 10:04:31 mark
***************
*** 30,35
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: fileio.c,v $
* Revision 1.1 88/12/23 18:02:09 mark
* Initial revision
*
--- 30,38 -----
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: fileio.c,v $
+ * Revision 1.2 89/02/12 10:04:31 mark
+ * 1.2 release fixes
+ *
* Revision 1.1 88/12/23 18:02:09 mark
* Initial revision
*
***************
*** 36,42
*/
#ifndef lint
! static char *ident = "$Id: fileio.c,v 1.1 88/12/23 18:02:09 mark Rel $";
static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
#endif /* ! lint */
--- 39,45 -----
*/
#ifndef lint
! static char *ident = "$Id: fileio.c,v 1.2 89/02/12 10:04:31 mark Exp $";
static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
#endif /* ! lint */
***************
*** 94,100
}
if (archivefd < 0) {
! warnarch(syserr(), (OFFSET) 0);
return (-1);
}
++arvolume;
--- 97,103 -----
}
if (archivefd < 0) {
! warnarch(strerror(), (OFFSET) 0);
return (-1);
}
++arvolume;
***************
*** 127,133
}
! /* openo - open an output file
*
* DESCRIPTION
*
--- 130,136 -----
}
! /* openout - open an output file
*
* DESCRIPTION
*
***************
*** 153,159
#ifdef __STDC__
! int openo(char *name, Stat *asb, Link *linkp, int ispass)
#else
--- 156,162 -----
#ifdef __STDC__
! int openout(char *name, Stat *asb, Link *linkp, int ispass)
#else
***************
*** 157,163
#else
! int openo(name, asb, linkp, ispass)
char *name;
Stat *asb;
Link *linkp;
--- 160,166 -----
#else
! int openout(name, asb, linkp, ispass)
char *name;
Stat *asb;
Link *linkp;
***************
*** 182,188
} else if ((osb.sb_mode & S_IFMT) == (asb->sb_mode & S_IFMT)) {
operm = osb.sb_mode & S_IPERM;
} else if (REMOVE(name, &osb) < 0) {
! warn(name, syserr());
return (-1);
} else {
exists = 0;
--- 185,191 -----
} else if ((osb.sb_mode & S_IFMT) == (asb->sb_mode & S_IFMT)) {
operm = osb.sb_mode & S_IPERM;
} else if (REMOVE(name, &osb) < 0) {
! warn(name, strerror());
return (-1);
} else {
exists = 0;
***************
*** 193,199
if (asb->sb_ino == osb.sb_ino && asb->sb_dev == osb.sb_dev) {
return (0);
} else if (unlink(name) < 0) {
! warn(name, syserr());
return (-1);
} else {
exists = 0;
--- 196,202 -----
if (asb->sb_ino == osb.sb_ino && asb->sb_dev == osb.sb_dev) {
return (0);
} else if (unlink(name) < 0) {
! warn(name, strerror());
return (-1);
} else {
exists = 0;
***************
*** 201,207
}
if (link(linkp->l_name, name) != 0) {
if (errno == ENOENT) {
! if (f_create_dirs) {
if (dirneed(name) != 0 ||
link(linkp->l_name, name) != 0) {
warn(name, syserr());
--- 204,210 -----
}
if (link(linkp->l_name, name) != 0) {
if (errno == ENOENT) {
! if (f_dir_create) {
if (dirneed(name) != 0 ||
link(linkp->l_name, name) != 0) {
warn(name, strerror());
***************
*** 204,210
if (f_create_dirs) {
if (dirneed(name) != 0 ||
link(linkp->l_name, name) != 0) {
! warn(name, syserr());
return (-1);
}
} else {
--- 207,213 -----
if (f_dir_create) {
if (dirneed(name) != 0 ||
link(linkp->l_name, name) != 0) {
! warn(name, strerror());
return (-1);
}
} else {
***************
*** 213,219
}
return(0);
} else if (errno != EXDEV) {
! warn(name, syserr());
return (-1);
}
} else {
--- 216,222 -----
}
return(0);
} else if (errno != EXDEV) {
! warn(name, strerror());
return (-1);
}
} else {
***************
*** 228,234
if (exists) {
if (asb->sb_rdev == osb.sb_rdev) {
if (perm != operm && chmod(name, (int) perm) < 0) {
! warn(name, syserr());
return (-1);
} else {
break;
--- 231,237 -----
if (exists) {
if (asb->sb_rdev == osb.sb_rdev) {
if (perm != operm && chmod(name, (int) perm) < 0) {
! warn(name, strerror());
return (-1);
} else {
break;
***************
*** 234,240
break;
}
} else if (REMOVE(name, &osb) < 0) {
! warn(name, syserr());
return (-1);
} else {
exists = 0;
--- 237,243 -----
break;
}
} else if (REMOVE(name, &osb) < 0) {
! warn(name, strerror());
return (-1);
} else {
exists = 0;
***************
*** 242,248
}
if (mknod(name, (int) asb->sb_mode, (int) asb->sb_rdev) < 0) {
if (errno == ENOENT) {
! if (f_create_dirs) {
if (dirneed(name) < 0 || mknod(name, (int) asb->sb_mode,
(int) asb->sb_rdev) < 0) {
warn(name, syserr());
--- 245,251 -----
}
if (mknod(name, (int) asb->sb_mode, (int) asb->sb_rdev) < 0) {
if (errno == ENOENT) {
! if (f_dir_create) {
if (dirneed(name) < 0 || mknod(name, (int) asb->sb_mode,
(int) asb->sb_rdev) < 0) {
warn(name, strerror());
***************
*** 245,251
if (f_create_dirs) {
if (dirneed(name) < 0 || mknod(name, (int) asb->sb_mode,
(int) asb->sb_rdev) < 0) {
! warn(name, syserr());
return (-1);
}
} else {
--- 248,254 -----
if (f_dir_create) {
if (dirneed(name) < 0 || mknod(name, (int) asb->sb_mode,
(int) asb->sb_rdev) < 0) {
! warn(name, strerror());
return (-1);
}
} else {
***************
*** 252,258
warn(name, "Directories are not being created (-d option)");
}
} else {
! warn(name, syserr());
return (-1);
}
}
--- 255,261 -----
warn(name, "Directories are not being created (-d option)");
}
} else {
! warn(name, strerror());
return (-1);
}
}
***************
*** 261,267
case S_IFDIR:
if (exists) {
if (perm != operm && chmod(name, (int) perm) < 0) {
! warn(name, syserr());
return (-1);
}
} else if (f_create_dirs) {
--- 264,270 -----
case S_IFDIR:
if (exists) {
if (perm != operm && chmod(name, (int) perm) < 0) {
! warn(name, strerror());
return (-1);
}
} else if (f_dir_create) {
***************
*** 264,270
warn(name, syserr());
return (-1);
}
! } else if (f_create_dirs) {
if (dirmake(name, asb) < 0 || dirneed(name) < 0) {
warn(name, syserr());
return (-1);
--- 267,273 -----
warn(name, strerror());
return (-1);
}
! } else if (f_dir_create) {
if (dirmake(name, asb) < 0 || dirneed(name) < 0) {
warn(name, strerror());
return (-1);
***************
*** 266,272
}
} else if (f_create_dirs) {
if (dirmake(name, asb) < 0 || dirneed(name) < 0) {
! warn(name, syserr());
return (-1);
}
} else {
--- 269,275 -----
}
} else if (f_dir_create) {
if (dirmake(name, asb) < 0 || dirneed(name) < 0) {
! warn(name, strerror());
return (-1);
}
} else {
***************
*** 278,284
fd = 0;
if (exists) {
if (perm != operm && chmod(name, (int) perm) < 0) {
! warn(name, syserr());
return (-1);
}
} else if (mknod(name, (int) asb->sb_mode, 0) < 0) {
--- 281,287 -----
fd = 0;
if (exists) {
if (perm != operm && chmod(name, (int) perm) < 0) {
! warn(name, strerror());
return (-1);
}
} else if (mknod(name, (int) asb->sb_mode, 0) < 0) {
***************
*** 283,289
}
} else if (mknod(name, (int) asb->sb_mode, 0) < 0) {
if (errno == ENOENT) {
! if (f_create_dirs) {
if (dirneed(name) < 0
|| mknod(name, (int) asb->sb_mode, 0) < 0) {
warn(name, syserr());
--- 286,292 -----
}
} else if (mknod(name, (int) asb->sb_mode, 0) < 0) {
if (errno == ENOENT) {
! if (f_dir_create) {
if (dirneed(name) < 0
|| mknod(name, (int) asb->sb_mode, 0) < 0) {
warn(name, strerror());
***************
*** 286,292
if (f_create_dirs) {
if (dirneed(name) < 0
|| mknod(name, (int) asb->sb_mode, 0) < 0) {
! warn(name, syserr());
return (-1);
}
} else {
--- 289,295 -----
if (f_dir_create) {
if (dirneed(name) < 0
|| mknod(name, (int) asb->sb_mode, 0) < 0) {
! warn(name, strerror());
return (-1);
}
} else {
***************
*** 293,299
warn(name, "Directories are not being created (-d option)");
}
} else {
! warn(name, syserr());
return (-1);
}
}
--- 296,302 -----
warn(name, "Directories are not being created (-d option)");
}
} else {
! warn(name, strerror());
return (-1);
}
}
***************
*** 304,310
case S_IFLNK:
if (exists) {
if ((ssize = readlink(name, sname, sizeof(sname))) < 0) {
! warn(name, syserr());
return (-1);
} else if (strncmp(sname, asb->sb_link, ssize) == 0) {
return (0);
--- 307,313 -----
case S_IFLNK:
if (exists) {
if ((ssize = readlink(name, sname, sizeof(sname))) < 0) {
! warn(name, strerror());
return (-1);
} else if (strncmp(sname, asb->sb_link, ssize) == 0) {
return (0);
***************
*** 309,315
} else if (strncmp(sname, asb->sb_link, ssize) == 0) {
return (0);
} else if (REMOVE(name, &osb) < 0) {
! warn(name, syserr());
return (-1);
} else {
exists = 0;
--- 312,318 -----
} else if (strncmp(sname, asb->sb_link, ssize) == 0) {
return (0);
} else if (REMOVE(name, &osb) < 0) {
! warn(name, strerror());
return (-1);
} else {
exists = 0;
***************
*** 317,323
}
if (symlink(asb->sb_link, name) < 0) {
if (errno == ENOENT) {
! if (f_create_dirs) {
if (dirneed(name) < 0 || symlink(asb->sb_link, name) < 0) {
warn(name, syserr());
return (-1);
--- 320,326 -----
}
if (symlink(asb->sb_link, name) < 0) {
if (errno == ENOENT) {
! if (f_dir_create) {
if (dirneed(name) < 0 || symlink(asb->sb_link, name) < 0) {
warn(name, strerror());
return (-1);
***************
*** 319,325
if (errno == ENOENT) {
if (f_create_dirs) {
if (dirneed(name) < 0 || symlink(asb->sb_link, name) < 0) {
! warn(name, syserr());
return (-1);
}
} else {
--- 322,328 -----
if (errno == ENOENT) {
if (f_dir_create) {
if (dirneed(name) < 0 || symlink(asb->sb_link, name) < 0) {
! warn(name, strerror());
return (-1);
}
} else {
***************
*** 326,332
warn(name, "Directories are not being created (-d option)");
}
} else {
! warn(name, syserr());
return (-1);
}
}
--- 329,335 -----
warn(name, "Directories are not being created (-d option)");
}
} else {
! warn(name, strerror());
return (-1);
}
}
***************
*** 338,344
warn(name, "Newer file exists");
return (-1);
} else if (unlink(name) < 0) {
! warn(name, syserr());
return (-1);
} else {
exists = 0;
--- 341,347 -----
warn(name, "Newer file exists");
return (-1);
} else if (unlink(name) < 0) {
! warn(name, strerror());
return (-1);
} else {
exists = 0;
***************
*** 346,352
}
if ((fd = creat(name, (int) perm)) < 0) {
if (errno == ENOENT) {
! if (f_create_dirs) {
if (dirneed(name) < 0 ||
(fd = creat(name, (int) perm)) < 0) {
warn(name, syserr());
--- 349,355 -----
}
if ((fd = creat(name, (int) perm)) < 0) {
if (errno == ENOENT) {
! if (f_dir_create) {
if (dirneed(name) < 0 ||
(fd = creat(name, (int) perm)) < 0) {
warn(name, strerror());
***************
*** 349,355
if (f_create_dirs) {
if (dirneed(name) < 0 ||
(fd = creat(name, (int) perm)) < 0) {
! warn(name, syserr());
return (-1);
}
} else {
--- 352,358 -----
if (f_dir_create) {
if (dirneed(name) < 0 ||
(fd = creat(name, (int) perm)) < 0) {
! warn(name, strerror());
return (-1);
}
} else {
***************
*** 362,368
return(0);
}
} else {
! warn(name, syserr());
return (-1);
}
}
--- 365,371 -----
return(0);
}
} else {
! warn(name, strerror());
return (-1);
}
}
***************
*** 380,386
}
! /* openi - open the next input file
*
* DESCRIPTION
*
--- 383,389 -----
}
! /* openin - open the next input file
*
* DESCRIPTION
*
***************
*** 407,413
#ifdef __STDC__
! int openi(char *name, Stat *asb)
#else
--- 410,416 -----
#ifdef __STDC__
! int openin(char *name, Stat *asb)
#else
***************
*** 411,417
#else
! int openi(name, asb)
char *name; /* name of file to open */
Stat *asb; /* pointer to stat structure for file */
--- 414,420 -----
#else
! int openin(name, asb)
char *name; /* name of file to open */
Stat *asb; /* pointer to stat structure for file */
***************
*** 428,434
case S_IFLNK:
if ((asb->sb_size = readlink(name,
asb->sb_link, sizeof(asb->sb_link) - 1)) < 0) {
! warn(name, syserr());
return(0);
}
asb->sb_link[asb->sb_size] = '\0';
--- 431,437 -----
case S_IFLNK:
if ((asb->sb_size = readlink(name,
asb->sb_link, sizeof(asb->sb_link) - 1)) < 0) {
! warn(name, strerror());
return(0);
}
asb->sb_link[asb->sb_size] = '\0';
***************
*** 439,445
return (0);
}
if ((fd = open(name, O_RDONLY | O_BINARY)) < 0) {
! warn(name, syserr());
}
return (fd);
default:
--- 442,448 -----
return (0);
}
if ((fd = open(name, O_RDONLY | O_BINARY)) < 0) {
! warn(name, strerror());
}
return (fd);
default:
Index: func.h
*** /tmp/,RCSt1a17063 Sun Feb 12 14:06:40 1989
--- func.h Sun Feb 12 14:02:09 1989
***************
*** 1,6
/* $Source: /u/mark/src/pax/RCS/func.h,v $
*
! * $Revision: 1.1 $
*
* func.h - function type and argument declarations
*
--- 1,6 -----
/* $Source: /u/mark/src/pax/RCS/func.h,v $
*
! * $Revision: 1.3 $
*
* func.h - function type and argument declarations
*
***************
*** 27,33
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
#ifndef _PAX_FUNC_H
--- 27,33 -----
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
#ifndef _PAX_FUNC_H
***************
*** 41,47
extern Link *linkto(char *, Stat *);
extern char *mem_get(uint);
extern char *mem_str(char *);
! extern char *syserr(void);
extern int ar_read(void);
extern int buf_read(char *, uint);
extern int buf_skip(OFFSET);
--- 41,47 -----
extern Link *linkto(char *, Stat *);
extern char *mem_get(uint);
extern char *mem_str(char *);
! extern char *strerror(void);
extern int ar_read(void);
extern int buf_read(char *, uint);
extern int buf_skip(OFFSET);
***************
*** 55,62
extern int nameopt(char *);
extern int open_archive(int);
extern int open_tty(void);
! extern int openi(char *, Stat *);
! extern int openo(char *, Stat *, Link *, int);
extern int pass(char *);
extern int passitem(char *, Stat *, int, char *);
extern int read_header(char *, Stat *);
--- 55,62 -----
extern int nameopt(char *);
extern int open_archive(int);
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 *);
***************
*** 86,91
extern char *finduname(int);
extern char *findgname(int);
extern int findgid(char *gname);
#else /* !__STDC__ */
--- 86,92 -----
extern char *finduname(int);
extern char *findgname(int);
extern int findgid(char *gname);
+ extern char *malloc();
#else /* !__STDC__ */
***************
*** 93,99
extern Link *linkto();
extern char *mem_get();
extern char *mem_str();
! extern char *syserr();
extern int ar_read();
extern int buf_read();
extern int buf_skip();
--- 94,100 -----
extern Link *linkto();
extern char *mem_get();
extern char *mem_str();
! extern char *strerror();
extern int ar_read();
extern int buf_read();
extern int buf_skip();
***************
*** 107,114
extern int nameopt();
extern int open_archive();
extern int open_tty();
! extern int openi();
! extern int openo();
extern int pass();
extern int passitem();
extern int read_header();
--- 108,115 -----
extern int nameopt();
extern int open_archive();
extern int open_tty();
! extern int openin();
! extern int openout();
extern int pass();
extern int passitem();
extern int read_header();
Index: limits.h
*** /tmp/,RCSt1a17068 Sun Feb 12 14:06:46 1989
--- limits.h Sun Feb 12 14:02:10 1989
***************
*** 1,6
/* $Source: /u/mark/src/pax/RCS/limits.h,v $
*
! * $Revision: 1.1 $
*
* limits.h - POSIX compatible defnitions for some of <limits.h>
*
--- 1,6 -----
/* $Source: /u/mark/src/pax/RCS/limits.h,v $
*
! * $Revision: 1.2 $
*
* limits.h - POSIX compatible defnitions for some of <limits.h>
*
***************
*** 37,43
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
#ifndef _PAX_LIMITS_H
--- 37,43 -----
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
#ifndef _PAX_LIMITS_H
Index: link.c
*** /tmp/,RCSt1a17073 Sun Feb 12 14:06:52 1989
--- link.c Sun Feb 12 14:02:11 1989
***************
*** 1,6
/* $Source: /u/mark/src/pax/RCS/link.c,v $
*
! * $Revision: 1.1 $
*
* link.c - functions for handling multiple file links
*
--- 1,6 -----
/* $Source: /u/mark/src/pax/RCS/link.c,v $
*
! * $Revision: 1.2 $
*
* link.c - functions for handling multiple file links
*
***************
*** 27,33
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: link.c,v $
* Revision 1.1 88/12/23 18:02:12 mark
--- 27,33 -----
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: link.c,v $
* Revision 1.2 89/02/12 10:04:38 mark
***************
*** 30,35
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: link.c,v $
* Revision 1.1 88/12/23 18:02:12 mark
* Initial revision
*
--- 30,38 -----
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* $Log: link.c,v $
+ * Revision 1.2 89/02/12 10:04:38 mark
+ * 1.2 release fixes
+ *
* Revision 1.1 88/12/23 18:02:12 mark
* Initial revision
*
***************
*** 36,42
*/
#ifndef lint
! static char *ident = "$Id: link.c,v 1.1 88/12/23 18:02:12 mark Rel $";
static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
#endif /* ! lint */
--- 39,45 -----
*/
#ifndef lint
! static char *ident = "$Id: link.c,v 1.2 89/02/12 10:04:38 mark Exp $";
static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
#endif /* ! lint */
***************
*** 116,122
linkp->l_back->l_forw = linkp->l_forw;
}
free((char *) linkp);
! *abase = (Link *) NULL;
} else if (linkp->l_ino == asb->sb_ino && linkp->l_dev == asb->sb_dev) {
/*
* check to see if a file with the name "name" exists in the
--- 119,125 -----
linkp->l_back->l_forw = linkp->l_forw;
}
free((char *) linkp);
! *abase = (Link *)NULL;
} else if (linkp->l_ino == asb->sb_ino && linkp->l_dev == asb->sb_dev) {
/*
* check to see if a file with the name "name" exists in the
***************
*** 191,197
for (linkp = *(LINKHASH(asb->sb_ino)); linkp; linkp = linknext) {
if (linkp->l_ino == asb->sb_ino && linkp->l_dev == asb->sb_dev) {
if (strcmp(name, linkp->l_name) == 0) {
! return ((Link *) NULL);
}
return (linkp);
} else {
--- 194,200 -----
for (linkp = *(LINKHASH(asb->sb_ino)); linkp; linkp = linknext) {
if (linkp->l_ino == asb->sb_ino && linkp->l_dev == asb->sb_dev) {
if (strcmp(name, linkp->l_name) == 0) {
! return ((Link *)NULL);
}
return (linkp);
} else {
***************
*** 243,251
for (linkp = *(LINKHASH(asb->sb_ino)); linkp; linkp = linknext) {
if (linkp->l_ino == asb->sb_ino && linkp->l_dev == asb->sb_dev) {
! if ((path = (Path *) mem_get(sizeof(Path))) == (Path *) NULL ||
! (path->p_name = mem_str(name)) == (char *) NULL) {
! return((Link *) NULL);
}
if (path->p_forw = linkp->l_path) {
if (linkp->l_path->p_forw) {
--- 246,254 -----
for (linkp = *(LINKHASH(asb->sb_ino)); linkp; linkp = linknext) {
if (linkp->l_ino == asb->sb_ino && linkp->l_dev == asb->sb_dev) {
! if ((path = (Path *) mem_get(sizeof(Path))) == (Path *)NULL ||
! (path->p_name = mem_str(name)) == (char *)NULL) {
! return((Link *)NULL);
}
if (path->p_forw = linkp->l_path) {
if (linkp->l_path->p_forw) {
***************
*** 254,260
} else {
linkp->l_path = path;
}
! path->p_back = (Path *) NULL;
return(linkp);
} else {
linknext = linkp->l_forw;
--- 257,263 -----
} else {
linkp->l_path = path;
}
! path->p_back = (Path *)NULL;
return(linkp);
} else {
linknext = linkp->l_forw;
***************
*** 265,273
*/
if ((asb->sb_mode & S_IFMT) == S_IFDIR
! || (linkp = (Link *) mem_get(sizeof(Link))) == NULL
! || (linkp->l_name = mem_str(name)) == NULL) {
! return ((Link *) NULL);
}
linkp->l_dev = asb->sb_dev;
linkp->l_ino = asb->sb_ino;
--- 268,276 -----
*/
if ((asb->sb_mode & S_IFMT) == S_IFDIR
! || (linkp = (Link *) mem_get(sizeof(Link))) == (Link *)NULL
! || (linkp->l_name = mem_str(name)) == (char *)NULL) {
! return ((Link *)NULL);
}
linkp->l_dev = asb->sb_dev;
linkp->l_ino = asb->sb_ino;
***************
*** 273,279
linkp->l_ino = asb->sb_ino;
linkp->l_nlink = asb->sb_nlink - 1;
linkp->l_size = asb->sb_size;
! linkp->l_path = (Path *) NULL;
if (linkp->l_forw = *(abase = LINKHASH(asb->sb_ino))) {
linkp->l_forw->l_back = linkp;
} else {
--- 276,282 -----
linkp->l_ino = asb->sb_ino;
linkp->l_nlink = asb->sb_nlink - 1;
linkp->l_size = asb->sb_size;
! linkp->l_path = (Path *)NULL;
if (linkp->l_forw = *(abase = LINKHASH(asb->sb_ino))) {
linkp->l_forw->l_back = linkp;
} else {
***************
*** 279,285
} else {
*abase = linkp;
}
! linkp->l_back = NULL;
return (linkp);
}
--- 282,288 -----
} else {
*abase = linkp;
}
! linkp->l_back = (Link *)NULL;
return (linkp);
}
--
Mark H. Colburn "Look into a child's eye;
Minnetech Consulting, Inc. there's no hate and there's no lie;
mark at jhereg.mn.org there's no black and there's no white."
More information about the Comp.sources.bugs
mailing list