mark@jhereg.Jhereg.MN.ORG (Mark H. Colburn) (02/13/89)
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@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@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@jhereg.mn.org there's no black and there's no white."