home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume17 / pax / patch02 / text0000.txt < prev   
Encoding:
Text File  |  1989-02-14  |  54.8 KB  |  2,108 lines

  1. This is the second of three official patches to Pax, a freely distributable 
  2. portable archive interchange.  These patches brings the software upto 
  3. release 1.2.  These patches fix a number of bugs and portability problems 
  4. with the initial release of the software.  These three patches (split to
  5. avoid article size limitations) constitute a single logical patch to pax.
  6.  
  7. I would like to thank all those people who reported bug, suggested fixes, 
  8. provided patches and suggested other extensions to pax.  I appologize to 
  9. that I was not able to respond to all the mail that I got about pax, but 
  10. all of the problems that were reported have either been fixed, or are 
  11. still under consideration.
  12.  
  13. Please, if you have any problems with pax, let me know so that they can be
  14. fixed.  Remember, if you find a problem, chances are that others will run
  15. into the same problem as well.  Reporting the problems will allow them to
  16. be fixed to avoid future difficulties and effort.
  17.  
  18. These items were not fixed in the patch, but are scheduled for a future
  19. patch release:
  20.  
  21.     * Put the software configuration under control of a "Configure" script ala
  22.       less and rn.
  23.     * Bring source into line with new POSIX 1003.2 description of pax.
  24.     * Add support for undocumented -C flag to cpio.
  25.     * MS-DOS support
  26.     * MINIX support
  27.     * Add missing tar.5 cpio.5 man pages
  28.  
  29. These items were fixed in these patches:
  30.  
  31.     * Changed misspelling of MERCHANTABILITY.
  32.     * Changed name of syserr to strerror, warn.c.
  33.     * Removed the references to "public domain" in the software.  The 
  34.       software is copyrighted, not public domain.
  35.     * Files are chmod'ed before being moved into the installation 
  36.       directories.  Files are also copied, then linked in the target 
  37.       directory.
  38.     * The variable "min" in regexp.c was changed to "minimum".  It would 
  39.       seem that some copilers define min to be a macro...
  40.     * In buffer.c there was an integer which was getting assigned NULL, 
  41.       rather than 0.
  42.     * If pax was given the -l option, it only successfully linked the 
  43.       from-file and the to-file together if the from-file is already linked 
  44.       to something else.
  45.     * Changed the verbose output file for tar to use stderr, rather than
  46.       stdout.  The verbose output was being interspersed with the archive,
  47.       causing the archive to be unreadable.
  48.     * The LDFLAGS macro is now used in the makefile.  There are also macros 
  49.       for additional libraries which may be needed and one for SHELL which 
  50.       fixes some problems when using the "make lint" facility.
  51.     * Fixed the stupid typo which caused pax/tar/cpio to run out of file
  52.       descriptors on very deep directory trees.
  53.     * Removed all line continuations "\" in preprocessor directives and
  54.       strings.  These were causing problems on certain compilers.
  55.     * Rename two variable which were colloding on compilers that did not
  56.       understand varaiables that were not unique in the first six
  57.       characters.
  58.     * Change the name of openi().  This causes a lot of problems on some
  59.       machines, especially those with shared libraries...
  60.     * Added some changes required for XENIX 286.
  61.     * All references to NULL are now properly cast.
  62.     * Man pages directories are now more compatible with BSD and USG
  63.       installation
  64.     * Other miscellaneous cleanups.
  65.  
  66. Mark H. Colburn                  "Look into a child's eye;
  67. Minnetech Consulting, Inc.        there's no hate and there's no lie;
  68. mark@jhereg.mn.org                there's no black and there's no white."
  69. --------------------------------- CUT HERE ---------------------------------
  70.  
  71. Index: list.c
  72. *** /tmp/,RCSt1a17078    Sun Feb 12 14:07:03 1989
  73. --- list.c    Sun Feb 12 14:02:13 1989
  74. ***************
  75. *** 1,6
  76.   /* $Source: /u/mark/src/pax/RCS/list.c,v $
  77.    *
  78. !  * $Revision: 1.1 $
  79.    *
  80.    * list.c - List all files on an archive
  81.    *
  82.  
  83. --- 1,6 -----
  84.   /* $Source: /u/mark/src/pax/RCS/list.c,v $
  85.    *
  86. !  * $Revision: 1.2 $
  87.    *
  88.    * list.c - List all files on an archive
  89.    *
  90. ***************
  91. *** 27,33
  92.    *
  93.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  94.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  95. !  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  96.    *
  97.    * $Log:    list.c,v $
  98.    * Revision 1.1  88/12/23  18:02:14  mark
  99.  
  100. --- 27,33 -----
  101.    *
  102.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  103.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  104. !  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  105.    *
  106.    * $Log:    list.c,v $
  107.    * Revision 1.2  89/02/12  10:04:43  mark
  108. ***************
  109. *** 30,35
  110.    * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  111.    *
  112.    * $Log:    list.c,v $
  113.    * Revision 1.1  88/12/23  18:02:14  mark
  114.    * Initial revision
  115.    * 
  116.  
  117. --- 30,38 -----
  118.    * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  119.    *
  120.    * $Log:    list.c,v $
  121. +  * Revision 1.2  89/02/12  10:04:43  mark
  122. +  * 1.2 release fixes
  123. +  * 
  124.    * Revision 1.1  88/12/23  18:02:14  mark
  125.    * Initial revision
  126.    * 
  127. ***************
  128. *** 36,42
  129.    */
  130.   
  131.   #ifndef lint
  132. ! static char *ident = "$Id: list.c,v 1.1 88/12/23 18:02:14 mark Rel $";
  133.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  134.   #endif /* ! lint */
  135.   
  136.  
  137. --- 39,45 -----
  138.    */
  139.   
  140.   #ifndef lint
  141. ! static char *ident = "$Id: list.c,v 1.2 89/02/12 10:04:43 mark Exp $";
  142.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  143.   #endif /* ! lint */
  144.   
  145. ***************
  146. *** 384,390
  147.       case S_IFLNK:     /* This file is a symbolic link */
  148.           i = readlink(name, symnam, PATH_MAX - 1);
  149.           if (i < 0) {        /* Could not find symbolic link */
  150. !         warn("can't read symbolic link", syserr());
  151.           } else {         /* Found symbolic link filename */
  152.           symnam[i] = '\0';
  153.           fprintf(msgfile, "x %s symbolic link to %s\n", name, symnam);
  154.  
  155. --- 387,393 -----
  156.       case S_IFLNK:     /* This file is a symbolic link */
  157.           i = readlink(name, symnam, PATH_MAX - 1);
  158.           if (i < 0) {        /* Could not find symbolic link */
  159. !         warn("can't read symbolic link", strerror());
  160.           } else {         /* Found symbolic link filename */
  161.           symnam[i] = '\0';
  162.           fprintf(msgfile, "x %s symbolic link to %s\n", name, symnam);
  163. ***************
  164. *** 395,401
  165.           if ((asb->sb_nlink > 1) && (link = islink(name, asb))) {
  166.           fprintf(msgfile, "%s linked to %s\n", name, link->l_name); 
  167.           } else {
  168. !         fprintf(msgfile, "x %s, %d bytes, %d tape blocks\n", 
  169.               name, asb->sb_size, ROUNDUP(asb->sb_size, 
  170.               BLOCKSIZE) / BLOCKSIZE);
  171.           }
  172.  
  173. --- 398,404 -----
  174.           if ((asb->sb_nlink > 1) && (link = islink(name, asb))) {
  175.           fprintf(msgfile, "%s linked to %s\n", name, link->l_name); 
  176.           } else {
  177. !         fprintf(msgfile, "x %s, %ld bytes, %d tape blocks\n", 
  178.               name, asb->sb_size, ROUNDUP(asb->sb_size, 
  179.               BLOCKSIZE) / BLOCKSIZE);
  180.           }
  181. ***************
  182. *** 406,412
  183.       case S_IFLNK:     /* This file is a symbolic link */
  184.           i = readlink(name, symnam, PATH_MAX - 1);
  185.           if (i < 0) {        /* Could not find symbolic link */
  186. !         warn("can't read symbolic link", syserr());
  187.           } else {         /* Found symbolic link filename */
  188.           symnam[i] = '\0';
  189.           fprintf(msgfile, "a %s symbolic link to %s\n", name, symnam);
  190.  
  191. --- 409,415 -----
  192.       case S_IFLNK:     /* This file is a symbolic link */
  193.           i = readlink(name, symnam, PATH_MAX - 1);
  194.           if (i < 0) {        /* Could not find symbolic link */
  195. !         warn("can't read symbolic link", strerror());
  196.           } else {         /* Found symbolic link filename */
  197.           symnam[i] = '\0';
  198.           fprintf(msgfile, "a %s symbolic link to %s\n", name, symnam);
  199. ***************
  200. *** 418,424
  201.           if ((asb->sb_nlink > 1) && (link = islink(name, asb))) {
  202.           fprintf(msgfile, "link to %s\n", link->l_name); 
  203.           } else {
  204. !         fprintf(msgfile, "%d Blocks\n", 
  205.               ROUNDUP(asb->sb_size, BLOCKSIZE) / BLOCKSIZE);
  206.           }
  207.           break;
  208.  
  209. --- 421,427 -----
  210.           if ((asb->sb_nlink > 1) && (link = islink(name, asb))) {
  211.           fprintf(msgfile, "link to %s\n", link->l_name); 
  212.           } else {
  213. !         fprintf(msgfile, "%ld Blocks\n", 
  214.               ROUNDUP(asb->sb_size, BLOCKSIZE) / BLOCKSIZE);
  215.           }
  216.           break;
  217. ***************
  218. *** 439,445
  219.       case S_IFLNK:     /* This file is a symbolic link */
  220.           i = readlink(name, symnam, PATH_MAX - 1);
  221.           if (i < 0) {        /* Could not find symbolic link */
  222. !         warn("can't read symbolic link", syserr());
  223.           } else {         /* Found symbolic link filename */
  224.           symnam[i] = '\0';
  225.           fprintf(msgfile, " symbolic link to %s", name, symnam);
  226.  
  227. --- 442,448 -----
  228.       case S_IFLNK:     /* This file is a symbolic link */
  229.           i = readlink(name, symnam, PATH_MAX - 1);
  230.           if (i < 0) {        /* Could not find symbolic link */
  231. !         warn("can't read symbolic link", strerror());
  232.           } else {         /* Found symbolic link filename */
  233.           symnam[i] = '\0';
  234.           fprintf(msgfile, " symbolic link to %s", symnam);
  235. ***************
  236. *** 442,448
  237.           warn("can't read symbolic link", syserr());
  238.           } else {         /* Found symbolic link filename */
  239.           symnam[i] = '\0';
  240. !         fprintf(msgfile, " symbolic link to %s", name, symnam);
  241.           }
  242.           break;
  243.   #endif
  244.  
  245. --- 445,451 -----
  246.           warn("can't read symbolic link", strerror());
  247.           } else {         /* Found symbolic link filename */
  248.           symnam[i] = '\0';
  249. !         fprintf(msgfile, " symbolic link to %s", symnam);
  250.           }
  251.           break;
  252.   #endif
  253. ***************
  254. *** 454,460
  255.       }
  256.       fputc('\n', msgfile);
  257.       } else {
  258. !     fprintf(msgfile, "? %s %d blocks\n", name,
  259.           ROUNDUP(asb->sb_size, BLOCKSIZE) / BLOCKSIZE);
  260.       }
  261.   }
  262.  
  263. --- 457,463 -----
  264.       }
  265.       fputc('\n', msgfile);
  266.       } else {
  267. !     fprintf(msgfile, "? %s %ld blocks\n", name,
  268.           ROUNDUP(asb->sb_size, BLOCKSIZE) / BLOCKSIZE);
  269.       }
  270.   }
  271. ***************
  272. *** 518,525
  273.           fprintf(msgfile, "\t        ");
  274.       }
  275.       fprintf(msgfile," %3s %2d %02d:%02d ",
  276. !                    monnames[atm->tm_mon], atm->tm_mday, 
  277. !                atm->tm_hour, atm->tm_min);
  278.       }
  279.       fprintf(msgfile, "%s", name);
  280.       if ((asb->sb_nlink > 1) && (from = islink(name, asb))) {
  281.  
  282. --- 521,528 -----
  283.           fprintf(msgfile, "\t        ");
  284.       }
  285.       fprintf(msgfile," %3s %2d %02d:%02d ",
  286. !             monnames[atm->tm_mon], atm->tm_mday, 
  287. !         atm->tm_hour, atm->tm_min);
  288.       }
  289.       fprintf(msgfile, "%s", name);
  290.       if ((asb->sb_nlink > 1) && (from = islink(name, asb))) {
  291. ***************
  292. *** 532,539
  293.   #endif    /* S_IFLNK */
  294.       putc('\n', msgfile);
  295.   }
  296.   
  297.   
  298.   /* print_mode - fancy file mode display
  299.  
  300. --- 535,540 -----
  301.   #endif    /* S_IFLNK */
  302.       putc('\n', msgfile);
  303.   }
  304.   
  305.   
  306.   /* print_mode - fancy file mode display
  307. Index: mem.c
  308. *** /tmp/,RCSt1a17083    Sun Feb 12 14:07:14 1989
  309. --- mem.c    Sun Feb 12 14:02:14 1989
  310. ***************
  311. *** 1,6
  312.   /* $Source: /u/mark/src/pax/RCS/mem.c,v $
  313.    *
  314. !  * $Revision: 1.1 $
  315.    *
  316.    * mem.c - memory allocation and manipulation functions
  317.    *
  318.  
  319. --- 1,6 -----
  320.   /* $Source: /u/mark/src/pax/RCS/mem.c,v $
  321.    *
  322. !  * $Revision: 1.2 $
  323.    *
  324.    * mem.c - memory allocation and manipulation functions
  325.    *
  326. ***************
  327. *** 28,34
  328.    *
  329.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  330.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  331. !  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  332.    *
  333.    * $Log:    mem.c,v $
  334.    * Revision 1.1  88/12/23  18:02:17  mark
  335.  
  336. --- 28,34 -----
  337.    *
  338.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  339.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  340. !  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  341.    *
  342.    * $Log:    mem.c,v $
  343.    * Revision 1.2  89/02/12  10:04:53  mark
  344. ***************
  345. *** 31,36
  346.    * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  347.    *
  348.    * $Log:    mem.c,v $
  349.    * Revision 1.1  88/12/23  18:02:17  mark
  350.    * Initial revision
  351.    * 
  352.  
  353. --- 31,39 -----
  354.    * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  355.    *
  356.    * $Log:    mem.c,v $
  357. +  * Revision 1.2  89/02/12  10:04:53  mark
  358. +  * 1.2 release fixes
  359. +  * 
  360.    * Revision 1.1  88/12/23  18:02:17  mark
  361.    * Initial revision
  362.    * 
  363. ***************
  364. *** 37,43
  365.    */
  366.   
  367.   #ifndef lint
  368. ! static char *ident = "$Id: mem.c,v 1.1 88/12/23 18:02:17 mark Rel $";
  369.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  370.   #endif /* ! lint */
  371.   
  372.  
  373. --- 40,46 -----
  374.    */
  375.   
  376.   #ifndef lint
  377. ! static char *ident = "$Id: mem.c,v 1.2 89/02/12 10:04:53 mark Exp $";
  378.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  379.   #endif /* ! lint */
  380.   
  381. ***************
  382. *** 65,71
  383.    * RETURNS
  384.    *
  385.    *    Normally returns the pointer to the newly allocated memory.  If
  386. !  *    an error occurss, NULL is returned, and an error message is
  387.    *    printed.
  388.    *
  389.    * ERRORS
  390.  
  391. --- 68,74 -----
  392.    * RETURNS
  393.    *
  394.    *    Normally returns the pointer to the newly allocated memory.  If
  395. !  *    an error occurs, NULL is returned, and an error message is
  396.    *    printed.
  397.    *
  398.    * ERRORS
  399. ***************
  400. *** 87,93
  401.       char           *mem;
  402.       static short    outofmem = 0;
  403.   
  404. !     if ((mem = (char *)malloc(len)) == NULL && !outofmem) {
  405.       outofmem++;
  406.       warn("mem_get()", "Out of memory");
  407.       }
  408.  
  409. --- 90,96 -----
  410.       char           *mem;
  411.       static short    outofmem = 0;
  412.   
  413. !     if ((mem = (char *)malloc(len)) == (char *)NULL && !outofmem) {
  414.       outofmem++;
  415.       warn("mem_get()", "Out of memory");
  416.       }
  417. Index: namelist.c
  418. *** /tmp/,RCSt1a19493    Mon Feb 13 09:15:28 1989
  419. --- namelist.c    Mon Feb 13 09:14:57 1989
  420. ***************
  421. *** 1,6
  422.   /* $Source: /u/mark/src/pax/RCS/namelist.c,v $
  423.    *
  424. !  * $Revision: 1.1 $
  425.    *
  426.    * namelist.c - track filenames given as arguments to tar/cpio/pax
  427.    *
  428.  
  429. --- 1,6 -----
  430.   /* $Source: /u/mark/src/pax/RCS/namelist.c,v $
  431.    *
  432. !  * $Revision: 1.6 $
  433.    *
  434.    * namelist.c - track filenames given as arguments to tar/cpio/pax
  435.    *
  436. ***************
  437. *** 23,29
  438.    * provided that the above copyright notice is duplicated in all such 
  439.    * forms and that any documentation, advertising materials, and other 
  440.    * materials related to such distribution and use acknowledge that the 
  441. !  * software was developed * by Mark H. Colburn and sponsored by The 
  442.    * USENIX Association. 
  443.    *
  444.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  445.  
  446. --- 23,29 -----
  447.    * provided that the above copyright notice is duplicated in all such 
  448.    * forms and that any documentation, advertising materials, and other 
  449.    * materials related to such distribution and use acknowledge that the 
  450. !  * software was developed by Mark H. Colburn and sponsored by The 
  451.    * USENIX Association. 
  452.    *
  453.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  454. ***************
  455. *** 28,34
  456.    *
  457.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  458.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  459. !  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  460.    *
  461.    * $Log:    namelist.c,v $
  462.    * Revision 1.1  88/12/23  18:02:17  mark
  463.  
  464. --- 28,34 -----
  465.    *
  466.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  467.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  468. !  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  469.    *
  470.    * $Log:    namelist.c,v $
  471.    * Revision 1.6  89/02/13  09:14:48  mark
  472. ***************
  473. *** 31,36
  474.    * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  475.    *
  476.    * $Log:    namelist.c,v $
  477.    * Revision 1.1  88/12/23  18:02:17  mark
  478.    * Initial revision
  479.    * 
  480.  
  481. --- 31,51 -----
  482.    * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  483.    *
  484.    * $Log:    namelist.c,v $
  485. +  * Revision 1.6  89/02/13  09:14:48  mark
  486. +  * Fixed problem with directory errors
  487. +  * 
  488. +  * Revision 1.5  89/02/12  12:14:00  mark
  489. +  * Fixed misspellings
  490. +  * 
  491. +  * Revision 1.4  89/02/12  11:25:19  mark
  492. +  * Modifications to compile and link cleanly under USG
  493. +  * 
  494. +  * Revision 1.3  89/02/12  10:40:23  mark
  495. +  * Fixed casting problems
  496. +  * 
  497. +  * Revision 1.2  89/02/12  10:04:57  mark
  498. +  * 1.2 release fixes
  499. +  * 
  500.    * Revision 1.1  88/12/23  18:02:17  mark
  501.    * Initial revision
  502.    * 
  503. ***************
  504. *** 37,43
  505.    */
  506.   
  507.   #ifndef lint
  508. ! static char *ident = "$Id: namelist.c,v 1.1 88/12/23 18:02:17 mark Rel $";
  509.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  510.   #endif /* ! lint */
  511.   
  512.  
  513. --- 52,58 -----
  514.    */
  515.   
  516.   #ifndef lint
  517. ! static char *ident = "$Id: namelist.c,v 1.6 89/02/13 09:14:48 mark Exp $";
  518.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  519.   #endif /* ! lint */
  520.   
  521. ***************
  522. *** 68,73
  523.   };
  524.   
  525.   
  526.   /* Function Prototypes */
  527.   
  528.   #ifndef __STDC__
  529.  
  530. --- 83,93 -----
  531.   };
  532.   
  533.   
  534. + /* Static Variables */
  535. + static struct dirinfo *stack_head = (struct dirinfo *)NULL;
  536.   /* Function Prototypes */
  537.   
  538.   #ifndef __STDC__
  539. ***************
  540. *** 123,129
  541.       if (!p) {
  542.       fatal("cannot allocate memory for namelist entry\n");
  543.       }
  544. !     p->next = (struct nm_list *) NULL;
  545.       p->length = i;
  546.       strncpy(p->name, name, i);
  547.       p->name[i] = '\0';        /* Null term */
  548.  
  549. --- 143,149 -----
  550.       if (!p) {
  551.       fatal("cannot allocate memory for namelist entry\n");
  552.       }
  553. !     p->next = (struct nm_list *)NULL;
  554.       p->length = i;
  555.       strncpy(p->name, name, i);
  556.       p->name[i] = '\0';        /* Null term */
  557. ***************
  558. *** 231,237
  559.       for (nlp = namelist; nlp != 0; nlp = nlp->next) {
  560.       if (!nlp->found) {
  561.           fprintf(stderr, "%s: %s not found in archive\n",
  562. !                myname, nlp->name);
  563.       }
  564.       free(nlp);
  565.       }
  566.  
  567. --- 251,257 -----
  568.       for (nlp = namelist; nlp != 0; nlp = nlp->next) {
  569.       if (!nlp->found) {
  570.           fprintf(stderr, "%s: %s not found in archive\n",
  571. !                 myname, nlp->name);
  572.       }
  573.       free(nlp);
  574.       }
  575. ***************
  576. *** 235,242
  577.       }
  578.       free(nlp);
  579.       }
  580. !     namelist = (struct nm_list *) NULL;
  581. !     namelast = (struct nm_list *) NULL;
  582.   }
  583.   
  584.   
  585.  
  586. --- 255,262 -----
  587.       }
  588.       free(nlp);
  589.       }
  590. !     namelist = (struct nm_list *)NULL;
  591. !     namelast = (struct nm_list *)NULL;
  592.   }
  593.   
  594.   
  595. ***************
  596. *** 326,332
  597.           }
  598.       } else {
  599.           if (in_subdir) {
  600. !         if ((d = readdir(dirp)) != NULL) {
  601.               /* Skip . and .. */
  602.               if (strcmp(d->d_name, ".") == 0 ||
  603.                   strcmp(d->d_name, "..") == 0) {
  604.  
  605. --- 346,352 -----
  606.           }
  607.       } else {
  608.           if (in_subdir) {
  609. !         if ((d = readdir(dirp)) != (struct dirent *)NULL) {
  610.               /* Skip . and .. */
  611.               if (strcmp(d->d_name, ".") == 0 ||
  612.                   strcmp(d->d_name, "..") == 0) {
  613. ***************
  614. *** 345,351
  615.               curr_dir = popdir();
  616.               if (in_subdir) {
  617.               errno = 0;
  618. !             if ((dirp = opendir(curr_dir->dirname)) == NULL) {
  619.                   warn(curr_dir->dirname, "error opening directory (1)");
  620.                   in_subdir--;
  621.               }
  622.  
  623. --- 365,371 -----
  624.               curr_dir = popdir();
  625.               if (in_subdir) {
  626.               errno = 0;
  627. !             if ((dirp=opendir(curr_dir->dirname)) == (DIR *)NULL) {
  628.                   warn(curr_dir->dirname, "error opening directory (1)");
  629.                   in_subdir--;
  630.               }
  631. ***************
  632. *** 360,366
  633.           }
  634.       }
  635.       if ((err = LSTAT(name, statbuf)) < 0) {
  636. !         warn(name, syserr());
  637.           continue;
  638.       }
  639.       if (!names_from_stdin && (statbuf->sb_mode & S_IFMT) == S_IFDIR) {
  640.  
  641. --- 380,386 -----
  642.           }
  643.       }
  644.       if ((err = LSTAT(name, statbuf)) < 0) {
  645. !         warn(name, strerror());
  646.           continue;
  647.       }
  648.       if (!names_from_stdin && (statbuf->sb_mode & S_IFMT) == S_IFDIR) {
  649. ***************
  650. *** 367,373
  651.           if (in_subdir) {
  652.           curr_dir->where = telldir(dirp);
  653.           pushdir(curr_dir);
  654. !         close(dirp);
  655.           } 
  656.           in_subdir++;
  657.   
  658.  
  659. --- 387,393 -----
  660.           if (in_subdir) {
  661.           curr_dir->where = telldir(dirp);
  662.           pushdir(curr_dir);
  663. !         closedir(dirp);
  664.           } 
  665.           in_subdir++;
  666.   
  667. ***************
  668. *** 372,379
  669.           in_subdir++;
  670.   
  671.           /* Build new prototype name */
  672. !         if ((curr_dir = (struct dirinfo *) 
  673. !             mem_get(sizeof(struct dirinfo))) == NULL) {
  674.           exit(2);
  675.           }
  676.           strcpy(curr_dir->dirname, name);
  677.  
  678. --- 392,399 -----
  679.           in_subdir++;
  680.   
  681.           /* Build new prototype name */
  682. !         if ((curr_dir = (struct dirinfo *) mem_get(sizeof(struct dirinfo))) 
  683. !               == (struct dirinfo *)NULL) {
  684.           exit(2);
  685.           }
  686.           strcpy(curr_dir->dirname, name);
  687. ***************
  688. *** 383,393
  689.           }
  690.           curr_dir->dirname[len++] = '/';    /* Now add exactly one back */
  691.           curr_dir->dirname[len] = '\0';/* Make sure null-terminated */
  692. !         errno = 0;
  693. !         if ((dirp = opendir(curr_dir->dirname)) == NULL) {
  694. !         warn(curr_dir->dirname, "error opening directory (2)");
  695. !         }
  696.       }
  697.       } while (err < 0);
  698.       return (0);
  699.  
  700. --- 403,424 -----
  701.           }
  702.           curr_dir->dirname[len++] = '/';    /* Now add exactly one back */
  703.           curr_dir->dirname[len] = '\0';/* Make sure null-terminated */
  704. !             curr_dir->where = 0;
  705. !            
  706. !             errno = 0;
  707. !             do {
  708. !                 if ((dirp = opendir(curr_dir->dirname)) == (DIR *)NULL) {
  709. !                      warn(curr_dir->dirname, "error opening directory (2)");
  710. !                      if (in_subdir > 1) {
  711. !                           curr_dir = popdir();
  712. !                      }
  713. !                      in_subdir--;
  714. !                      err = -1;
  715. !                      continue;
  716. !                 } else {
  717. !                      seekdir(dirp, curr_dir->where);
  718. !         }
  719. !         } while (in_subdir && (! dirp));
  720.       }
  721.       } while (err < 0);
  722.       return (0);
  723. ***************
  724. *** 422,430
  725.   }
  726.   
  727.   
  728. - static struct dirinfo *stack_head = NULL;
  729.   /* pushdir - pushes a directory name on the directory stack
  730.    *
  731.    * DESCRIPTION
  732.  
  733. --- 453,458 -----
  734.   }
  735.   
  736.   
  737.   /* pushdir - pushes a directory name on the directory stack
  738.    *
  739.    * DESCRIPTION
  740. ***************
  741. *** 449,455
  742.   
  743.   #endif
  744.   {
  745. !     if  (stack_head == NULL) {
  746.       stack_head = info;
  747.       stack_head->next = NULL;
  748.       } else {
  749.  
  750. --- 477,483 -----
  751.   
  752.   #endif
  753.   {
  754. !     if  (stack_head == (struct dirinfo *)NULL) {
  755.       stack_head = info;
  756.       stack_head->next = (struct dirinfo *)NULL;
  757.       } else {
  758. ***************
  759. *** 451,457
  760.   {
  761.       if  (stack_head == NULL) {
  762.       stack_head = info;
  763. !     stack_head->next = NULL;
  764.       } else {
  765.       info->next = stack_head;
  766.       stack_head = info;
  767.  
  768. --- 479,485 -----
  769.   {
  770.       if  (stack_head == (struct dirinfo *)NULL) {
  771.       stack_head = info;
  772. !     stack_head->next = (struct dirinfo *)NULL;
  773.       } else {
  774.       info->next = stack_head;
  775.       stack_head = info;
  776. ***************
  777. *** 485,492
  778.   {
  779.       struct dirinfo    *tmp;
  780.   
  781. !     if (stack_head == NULL) {
  782. !     return(NULL);
  783.       } else {
  784.       tmp = stack_head;
  785.       stack_head = stack_head->next;
  786.  
  787. --- 513,520 -----
  788.   {
  789.       struct dirinfo    *tmp;
  790.   
  791. !     if (stack_head == (struct dirinfo *)NULL) {
  792. !     return((struct dirinfo *)NULL);
  793.       } else {
  794.       tmp = stack_head;
  795.       stack_head = stack_head->next;
  796. Index: names.c
  797. *** /tmp/,RCSt1a17093    Sun Feb 12 14:07:34 1989
  798. --- names.c    Sun Feb 12 14:02:17 1989
  799. ***************
  800. *** 1,6
  801.   /* $Source: /u/mark/src/pax/RCS/names.c,v $
  802.    *
  803. !  * $Revision: 1.1 $
  804.    *
  805.    * names.c - Look up user and/or group names. 
  806.    *
  807.  
  808. --- 1,6 -----
  809.   /* $Source: /u/mark/src/pax/RCS/names.c,v $
  810.    *
  811. !  * $Revision: 1.2 $
  812.    *
  813.    * names.c - Look up user and/or group names. 
  814.    *
  815. ***************
  816. *** 27,33
  817.    *
  818.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  819.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  820. !  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  821.    *
  822.    * $Log:    names.c,v $
  823.    * Revision 1.1  88/12/23  18:02:19  mark
  824.  
  825. --- 27,33 -----
  826.    *
  827.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  828.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  829. !  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  830.    *
  831.    * $Log:    names.c,v $
  832.    * Revision 1.2  89/02/12  10:05:05  mark
  833. ***************
  834. *** 30,35
  835.    * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  836.    *
  837.    * $Log:    names.c,v $
  838.    * Revision 1.1  88/12/23  18:02:19  mark
  839.    * Initial revision
  840.    * 
  841.  
  842. --- 30,38 -----
  843.    * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  844.    *
  845.    * $Log:    names.c,v $
  846. +  * Revision 1.2  89/02/12  10:05:05  mark
  847. +  * 1.2 release fixes
  848. +  * 
  849.    * Revision 1.1  88/12/23  18:02:19  mark
  850.    * Initial revision
  851.    * 
  852. ***************
  853. *** 36,42
  854.    */
  855.   
  856.   #ifndef lint
  857. ! static char *ident = "$Id: names.c,v 1.1 88/12/23 18:02:19 mark Rel $";
  858.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  859.   #endif /* ! lint */
  860.   
  861.  
  862. --- 39,45 -----
  863.    */
  864.   
  865.   #ifndef lint
  866. ! static char *ident = "$Id: names.c,v 1.2 89/02/12 10:05:05 mark Exp $";
  867.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  868.   #endif /* ! lint */
  869.   
  870. Index: pass.c
  871. *** /tmp/,RCSt1a17098    Sun Feb 12 14:07:40 1989
  872. --- pass.c    Sun Feb 12 14:02:19 1989
  873. ***************
  874. *** 1,6
  875.   /* $Source: /u/mark/src/pax/RCS/pass.c,v $
  876.    *
  877. !  * $Revision: 1.1 $
  878.    *
  879.    * pass.c - handle the pass option of cpio
  880.    *
  881.  
  882. --- 1,6 -----
  883.   /* $Source: /u/mark/src/pax/RCS/pass.c,v $
  884.    *
  885. !  * $Revision: 1.3 $
  886.    *
  887.    * pass.c - handle the pass option of cpio
  888.    *
  889. ***************
  890. *** 27,33
  891.    *
  892.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  893.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  894. !  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  895.    *
  896.    * $Log:    pass.c,v $
  897.    * Revision 1.1  88/12/23  18:02:20  mark
  898.  
  899. --- 27,33 -----
  900.    *
  901.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  902.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  903. !  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  904.    *
  905.    * $Log:    pass.c,v $
  906.    * Revision 1.3  89/02/12  10:29:51  mark
  907. ***************
  908. *** 30,35
  909.    * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  910.    *
  911.    * $Log:    pass.c,v $
  912.    * Revision 1.1  88/12/23  18:02:20  mark
  913.    * Initial revision
  914.    * 
  915.  
  916. --- 30,41 -----
  917.    * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  918.    *
  919.    * $Log:    pass.c,v $
  920. +  * Revision 1.3  89/02/12  10:29:51  mark
  921. +  * Fixed misspelling of Replstr
  922. +  * 
  923. +  * Revision 1.2  89/02/12  10:05:09  mark
  924. +  * 1.2 release fixes
  925. +  * 
  926.    * Revision 1.1  88/12/23  18:02:20  mark
  927.    * Initial revision
  928.    * 
  929. ***************
  930. *** 36,42
  931.    */
  932.   
  933.   #ifndef lint
  934. ! static char *ident = "$Id: pass.c,v 1.1 88/12/23 18:02:20 mark Rel $";
  935.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  936.   #endif /* ! lint */
  937.   
  938.  
  939. --- 42,48 -----
  940.    */
  941.   
  942.   #ifndef lint
  943. ! static char *ident = "$Id: pass.c,v 1.3 89/02/12 10:29:51 mark Exp $";
  944.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  945.   #endif /* ! lint */
  946.   
  947. ***************
  948. *** 74,80
  949.       int             fd;
  950.       Stat            sb;
  951.   
  952. !     while (name_next(name, &sb) >= 0 && (fd = openi(name, &sb)) >= 0) {
  953.   
  954.       if (rplhead != NULL) {
  955.           rpl_name(name);
  956.  
  957. --- 80,86 -----
  958.       int             fd;
  959.       Stat            sb;
  960.   
  961. !     while (name_next(name, &sb) >= 0 && (fd = openin(name, &sb)) >= 0) {
  962.   
  963.       if (rplhead != (Replstr *)NULL) {
  964.           rpl_name(name);
  965. ***************
  966. *** 76,82
  967.   
  968.       while (name_next(name, &sb) >= 0 && (fd = openi(name, &sb)) >= 0) {
  969.   
  970. !     if (rplhead != NULL) {
  971.           rpl_name(name);
  972.       }
  973.       if (get_disposition("pass", name) || get_newname(name, sizeof(name))) {
  974.  
  975. --- 82,88 -----
  976.   
  977.       while (name_next(name, &sb) >= 0 && (fd = openin(name, &sb)) >= 0) {
  978.   
  979. !     if (rplhead != (Replstr *)NULL) {
  980.           rpl_name(name);
  981.       }
  982.       if (get_disposition("pass", name) || get_newname(name, sizeof(name))) {
  983. ***************
  984. *** 139,147
  985.       return (-1);
  986.       }
  987.       if (asb->sb_nlink > 1) {
  988. -     if (f_link && islink(from, asb) == (Link *) NULL) {
  989. -         linkto(from, asb);
  990. -     }
  991.       linkto(to, asb);
  992.       }
  993.       if ((ofd = openo(to, asb, islink(to, asb), 1)) < 0) {
  994.  
  995. --- 145,150 -----
  996.       return (-1);
  997.       }
  998.       if (asb->sb_nlink > 1) {
  999.       linkto(to, asb);
  1000.       }
  1001.       if (f_link && islink(from, asb) == (Link *)NULL) {
  1002. ***************
  1003. *** 144,150
  1004.       }
  1005.       linkto(to, asb);
  1006.       }
  1007. !     if ((ofd = openo(to, asb, islink(to, asb), 1)) < 0) {
  1008.       return (-1);
  1009.       }
  1010.       if (ofd > 0) {
  1011.  
  1012. --- 147,156 -----
  1013.       if (asb->sb_nlink > 1) {
  1014.       linkto(to, asb);
  1015.       }
  1016. !     if (f_link && islink(from, asb) == (Link *)NULL) {
  1017. !     linkto(from, asb);
  1018. !     }
  1019. !     if ((ofd = openout(to, asb, islink(to, asb), 1)) < 0) {
  1020.       return (-1);
  1021.       }
  1022.       if (ofd > 0) {
  1023. ***************
  1024. *** 151,157
  1025.       passdata(from, ifd, to, ofd);
  1026.       }
  1027.       tstamp[0] = asb->sb_atime;
  1028. !     tstamp[1] = f_modification_time ? asb->sb_mtime : time((time_t *) 0);
  1029.       utime(to, tstamp);
  1030.       return (ifd);
  1031.   }
  1032.  
  1033. --- 157,163 -----
  1034.       passdata(from, ifd, to, ofd);
  1035.       }
  1036.       tstamp[0] = asb->sb_atime;
  1037. !     tstamp[1] = f_mtime ? asb->sb_mtime : time((time_t *) 0);
  1038.       utime(to, tstamp);
  1039.       return (ifd);
  1040.   }
  1041. Index: pathname.c
  1042. *** /tmp/,RCSt1a17103    Sun Feb 12 14:07:46 1989
  1043. --- pathname.c    Sun Feb 12 14:02:21 1989
  1044. ***************
  1045. *** 1,6
  1046.   /* $Source: /u/mark/src/pax/RCS/pathname.c,v $
  1047.    *
  1048. !  * $Revision: 1.1 $
  1049.    *
  1050.    * pathname.c - directory/pathname support functions 
  1051.    *
  1052.  
  1053. --- 1,6 -----
  1054.   /* $Source: /u/mark/src/pax/RCS/pathname.c,v $
  1055.    *
  1056. !  * $Revision: 1.2 $
  1057.    *
  1058.    * pathname.c - directory/pathname support functions 
  1059.    *
  1060. ***************
  1061. *** 26,32
  1062.    *
  1063.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1064.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1065. !  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1066.    *
  1067.    * $Log:    pathname.c,v $
  1068.    * Revision 1.1  88/12/23  18:02:21  mark
  1069.  
  1070. --- 26,32 -----
  1071.    *
  1072.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1073.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1074. !  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1075.    *
  1076.    * $Log:    pathname.c,v $
  1077.    * Revision 1.2  89/02/12  10:05:13  mark
  1078. ***************
  1079. *** 29,34
  1080.    * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1081.    *
  1082.    * $Log:    pathname.c,v $
  1083.    * Revision 1.1  88/12/23  18:02:21  mark
  1084.    * Initial revision
  1085.    * 
  1086.  
  1087. --- 29,37 -----
  1088.    * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1089.    *
  1090.    * $Log:    pathname.c,v $
  1091. +  * Revision 1.2  89/02/12  10:05:13  mark
  1092. +  * 1.2 release fixes
  1093. +  * 
  1094.    * Revision 1.1  88/12/23  18:02:21  mark
  1095.    * Initial revision
  1096.    * 
  1097. ***************
  1098. *** 35,41
  1099.    */
  1100.   
  1101.   #ifndef lint
  1102. ! static char *ident = "$Id: pathname.c,v 1.1 88/12/23 18:02:21 mark Rel $";
  1103.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  1104.   #endif /* ! lint */
  1105.   
  1106.  
  1107. --- 38,44 -----
  1108.    */
  1109.   
  1110.   #ifndef lint
  1111. ! static char *ident = "$Id: pathname.c,v 1.2 89/02/12 10:05:13 mark Exp $";
  1112.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  1113.   #endif /* ! lint */
  1114.   
  1115. ***************
  1116. *** 51,57
  1117.    *
  1118.    *    Dirneed checks to see if a directory of the name pointed to by name
  1119.    *    exists.  If the directory does exist, then dirneed returns 0.  If
  1120. !  *    the directory does not exist and the f_create_dirs flag is set,
  1121.    *    then dirneed will create the needed directory, recursively creating
  1122.    *    any needed intermediate directory.
  1123.    *
  1124.  
  1125. --- 54,60 -----
  1126.    *
  1127.    *    Dirneed checks to see if a directory of the name pointed to by name
  1128.    *    exists.  If the directory does exist, then dirneed returns 0.  If
  1129. !  *    the directory does not exist and the f_dir_create flag is set,
  1130.    *    then dirneed will create the needed directory, recursively creating
  1131.    *    any needed intermediate directory.
  1132.    *
  1133. ***************
  1134. *** 55,61
  1135.    *    then dirneed will create the needed directory, recursively creating
  1136.    *    any needed intermediate directory.
  1137.    *
  1138. !  *    If f_create_dirs is not set, then no directories will be created
  1139.    *    and a value of -1 will be returned if the directory does not
  1140.    *    exist.
  1141.    *
  1142.  
  1143. --- 58,64 -----
  1144.    *    then dirneed will create the needed directory, recursively creating
  1145.    *    any needed intermediate directory.
  1146.    *
  1147. !  *    If f_dir_create is not set, then no directories will be created
  1148.    *    and a value of -1 will be returned if the directory does not
  1149.    *    exist.
  1150.    *
  1151. ***************
  1152. *** 66,72
  1153.    * RETURNS
  1154.    *
  1155.    *    Returns a 0 if the creation of the directory succeeded or if the
  1156. !  *    directory already existed.  If the f_create_dirs flag was not set
  1157.    *    and the named directory does not exist, or the directory creation 
  1158.    *    failed, a -1 will be returned to the calling routine.
  1159.    */
  1160.  
  1161. --- 69,75 -----
  1162.    * RETURNS
  1163.    *
  1164.    *    Returns a 0 if the creation of the directory succeeded or if the
  1165. !  *    directory already existed.  If the f_dir_create flag was not set
  1166.    *    and the named directory does not exist, or the directory creation 
  1167.    *    failed, a -1 will be returned to the calling routine.
  1168.    */
  1169. ***************
  1170. *** 87,93
  1171.       int             ok;
  1172.       static Stat     sb;
  1173.   
  1174. !     last = NULL;
  1175.       for (cp = name; *cp;) {
  1176.       if (*cp++ == '/') {
  1177.           last = cp;
  1178.  
  1179. --- 90,96 -----
  1180.       int             ok;
  1181.       static Stat     sb;
  1182.   
  1183. !     last = (char *)NULL;
  1184.       for (cp = name; *cp;) {
  1185.       if (*cp++ == '/') {
  1186.           last = cp;
  1187. ***************
  1188. *** 93,99
  1189.           last = cp;
  1190.       }
  1191.       }
  1192. !     if (last == NULL) {
  1193.       return (STAT(".", &sb));
  1194.       }
  1195.       *--last = '\0';
  1196.  
  1197. --- 96,102 -----
  1198.           last = cp;
  1199.       }
  1200.       }
  1201. !     if (last == (char *)NULL) {
  1202.       return (STAT(".", &sb));
  1203.       }
  1204.       *--last = '\0';
  1205. ***************
  1206. *** 99,105
  1207.       *--last = '\0';
  1208.       ok = STAT(*name ? name : ".", &sb) == 0
  1209.       ? ((sb.sb_mode & S_IFMT) == S_IFDIR)
  1210. !     : (f_create_dirs && dirneed(name) == 0 && dirmake(name, &sb) == 0);
  1211.       *last = '/';
  1212.       return (ok ? 0 : -1);
  1213.   }
  1214.  
  1215. --- 102,108 -----
  1216.       *--last = '\0';
  1217.       ok = STAT(*name ? name : ".", &sb) == 0
  1218.       ? ((sb.sb_mode & S_IFMT) == S_IFDIR)
  1219. !     : (f_dir_create && dirneed(name) == 0 && dirmake(name, &sb) == 0);
  1220.       *last = '/';
  1221.       return (ok ? 0 : -1);
  1222.   }
  1223. ***************
  1224. *** 176,182
  1225.       if (idx == 0) {
  1226.       element[idx++] = absolute ? "" : "."; 
  1227.       }
  1228. !     element[idx] = NULL;
  1229.       name = begin;
  1230.       if (absolute) {
  1231.       *name++ = '/';
  1232.  
  1233. --- 179,185 -----
  1234.       if (idx == 0) {
  1235.       element[idx++] = absolute ? "" : "."; 
  1236.       }
  1237. !     element[idx] = (char *)NULL;
  1238.       name = begin;
  1239.       if (absolute) {
  1240.       *name++ = '/';
  1241. Index: pax.1
  1242. *** /tmp/,RCSt1a17108    Sun Feb 12 14:07:54 1989
  1243. --- pax.1    Sun Feb 12 14:02:22 1989
  1244. ***************
  1245. *** 1,4
  1246. ! .\" $Id: pax.1,v 1.1 88/12/23 18:02:22 mark Rel $
  1247.   .TH PAX 1 "USENIX Association" ""
  1248.   .SH NAME
  1249.   pax \- portable archive exchange 
  1250.  
  1251. --- 1,4 -----
  1252. ! .\" $Id: pax.1,v 1.2 89/02/12 10:08:47 mark Exp $
  1253.   .TH PAX 1 "USENIX Association" ""
  1254.   .SH NAME
  1255.   pax \- portable archive exchange 
  1256. ***************
  1257. *** 213,218
  1258.   suffix multiplies 
  1259.   .I blocking 
  1260.   by 1048576 (1 megabyte).
  1261.   If not specified,
  1262.   .I blocking 
  1263.   is automatically determined on input and is ignored for 
  1264.  
  1265. --- 213,220 -----
  1266.   suffix multiplies 
  1267.   .I blocking 
  1268.   by 1048576 (1 megabyte).
  1269. + For machines with 16-bit int's (VAXen, XENIX-286, etc.), 
  1270. + the maximum buffer size is 32k-1.
  1271.   If not specified,
  1272.   .I blocking 
  1273.   is automatically determined on input and is ignored for 
  1274. ***************
  1275. *** 219,225
  1276.   .B \-rw.
  1277.   .TP 1i
  1278.   .B \-c
  1279. ! Complement the match sense of the the 
  1280.   .I pattern
  1281.   operands.
  1282.   .TP 1i
  1283.  
  1284. --- 221,227 -----
  1285.   .B \-rw.
  1286.   .TP 1i
  1287.   .B \-c
  1288. ! Complement the match sense of the 
  1289.   .I pattern
  1290.   operands.
  1291.   .TP 1i
  1292. ***************
  1293. *** 352,358
  1294.   .B \-r 
  1295.   option is used.
  1296.   The supported formats are:
  1297. ! .TP 1i
  1298.   .I cpio
  1299.   The extended 
  1300.   .I CPIO
  1301.  
  1302. --- 354,361 -----
  1303.   .B \-r 
  1304.   option is used.
  1305.   The supported formats are:
  1306. ! .RS 1i
  1307. ! .TP 0.75i
  1308.   .I cpio
  1309.   The extended 
  1310.   .I CPIO
  1311. ***************
  1312. *** 359,365
  1313.   interchange format specified in
  1314.   .B "Extended CPIO Format" in 
  1315.   .I "IEEE Std. 1003.1-1988."
  1316. ! .TP 1i
  1317.   .I ustar
  1318.   The extended 
  1319.   .I TAR
  1320.  
  1321. --- 362,368 -----
  1322.   interchange format specified in
  1323.   .B "Extended CPIO Format" in 
  1324.   .I "IEEE Std. 1003.1-1988."
  1325. ! .TP 0.75i
  1326.   .I ustar
  1327.   The extended 
  1328.   .I TAR
  1329. ***************
  1330. *** 540,545
  1331.   format archives, link counts are listed as zero since the 
  1332.   .I ustar
  1333.   archive format does not keep link count information.
  1334.   .SH COPYRIGHT
  1335.   Copyright (c) 1989 Mark H. Colburn.  
  1336.   .br
  1337.  
  1338. --- 543,553 -----
  1339.   format archives, link counts are listed as zero since the 
  1340.   .I ustar
  1341.   archive format does not keep link count information.
  1342. + .PP
  1343. + On 16 bit architectures, the largest buffer size is 32k-1.
  1344. + This is due, in part, to using integers in the buffer allocation schemes,
  1345. + however, on many of these machines, it is not possible to allocate blocks
  1346. + of memory larger than 32k.
  1347.   .SH COPYRIGHT
  1348.   Copyright (c) 1989 Mark H. Colburn.  
  1349.   .br
  1350. ***************
  1351. *** 554,560
  1352.   .PP
  1353.   THE SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1354.   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1355. ! WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1356.   .SH AUTHOR
  1357.   Mark H. Colburn
  1358.   .br
  1359.  
  1360. --- 562,568 -----
  1361.   .PP
  1362.   THE SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1363.   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1364. ! WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1365.   .SH AUTHOR
  1366.   Mark H. Colburn
  1367.   .br
  1368. ***************
  1369. *** 558,564
  1370.   .SH AUTHOR
  1371.   Mark H. Colburn
  1372.   .br
  1373. ! NAPS International
  1374.   .br
  1375.   117 Mackubin Street, Suite 1
  1376.   .br
  1377.  
  1378. --- 566,572 -----
  1379.   .SH AUTHOR
  1380.   Mark H. Colburn
  1381.   .br
  1382. ! Minnetech Consulting, Inc.
  1383.   .br
  1384.   117 Mackubin Street, Suite 1
  1385.   .br
  1386. Index: pax.c
  1387. *** /tmp/,RCSt1a17113    Sun Feb 12 14:08:07 1989
  1388. --- pax.c    Sun Feb 12 14:02:25 1989
  1389. ***************
  1390. *** 1,6
  1391.   /* $Source: /u/mark/src/pax/RCS/pax.c,v $
  1392.    *
  1393. !  * $Revision: 1.1 $
  1394.    *
  1395.    * DESCRIPTION
  1396.    *
  1397.  
  1398. --- 1,6 -----
  1399.   /* $Source: /u/mark/src/pax/RCS/pax.c,v $
  1400.    *
  1401. !  * $Revision: 1.2 $
  1402.    *
  1403.    * DESCRIPTION
  1404.    *
  1405. ***************
  1406. *** 46,52
  1407.    *
  1408.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1409.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1410. !  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1411.    *
  1412.    * $Log:    pax.c,v $
  1413.    * Revision 1.1  88/12/23  18:02:23  mark
  1414.  
  1415. --- 46,52 -----
  1416.    *
  1417.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1418.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1419. !  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1420.    *
  1421.    * $Log:    pax.c,v $
  1422.    * Revision 1.2  89/02/12  10:05:17  mark
  1423. ***************
  1424. *** 49,54
  1425.    * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1426.    *
  1427.    * $Log:    pax.c,v $
  1428.    * Revision 1.1  88/12/23  18:02:23  mark
  1429.    * Initial revision
  1430.    * 
  1431.  
  1432. --- 49,57 -----
  1433.    * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1434.    *
  1435.    * $Log:    pax.c,v $
  1436. +  * Revision 1.2  89/02/12  10:05:17  mark
  1437. +  * 1.2 release fixes
  1438. +  * 
  1439.    * Revision 1.1  88/12/23  18:02:23  mark
  1440.    * Initial revision
  1441.    * 
  1442. ***************
  1443. *** 55,61
  1444.    */
  1445.   
  1446.   #ifndef lint
  1447. ! static char *ident = "$Id: pax.c,v 1.1 88/12/23 18:02:23 mark Rel $";
  1448.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  1449.   #endif /* ! lint */
  1450.   
  1451.  
  1452. --- 58,64 -----
  1453.    */
  1454.   
  1455.   #ifndef lint
  1456. ! static char *ident = "$Id: pax.c,v 1.2 89/02/12 10:05:17 mark Exp $";
  1457.   static char *copyright = "Copyright (c) 1989 Mark H. Colburn.\nAll rights reserved.\n";
  1458.   #endif /* ! lint */
  1459.   
  1460. ***************
  1461. *** 88,94
  1462.   OFFSET          total;            /* Total number of bytes transferred */
  1463.   short           f_access_time;        /* Reset access times of input files */
  1464.   short           areof;            /* End of input volume reached */
  1465. ! short           f_create_dirs;        /* Create missing directories */
  1466.   short           f_append;        /* Add named files to end of archive */
  1467.   short           f_create;        /* create a new archive */
  1468.   short           f_extract;        /* Extract named files from archive */
  1469.  
  1470. --- 91,97 -----
  1471.   OFFSET          total;            /* Total number of bytes transferred */
  1472.   short           f_access_time;        /* Reset access times of input files */
  1473.   short           areof;            /* End of input volume reached */
  1474. ! short           f_dir_create;        /* Create missing directories */
  1475.   short           f_append;        /* Add named files to end of archive */
  1476.   short           f_create;        /* create a new archive */
  1477.   short           f_extract;        /* Extract named files from archive */
  1478. ***************
  1479. *** 104,110
  1480.   short           f_newer;        /* append files to archive if newer */
  1481.   short        f_disposition;        /* ask for file disposition */
  1482.   short           f_reverse_match;    /* Reverse sense of pattern match */
  1483. ! short           f_modification_time;    /* Retain file modification time */
  1484.   short           f_unconditional;    /* Copy unconditionally */
  1485.   time_t          now = 0;        /* Current time */
  1486.   uint            arvolume;        /* Volume number */
  1487.  
  1488. --- 107,113 -----
  1489.   short           f_newer;        /* append files to archive if newer */
  1490.   short        f_disposition;        /* ask for file disposition */
  1491.   short           f_reverse_match;    /* Reverse sense of pattern match */
  1492. ! short           f_mtime;        /* Retain file modification time */
  1493.   short           f_unconditional;    /* Copy unconditionally */
  1494.   time_t          now = 0;        /* Current time */
  1495.   uint            arvolume;        /* Volume number */
  1496. ***************
  1497. *** 110,116
  1498.   uint            arvolume;        /* Volume number */
  1499.   uint            blocksize = BLOCKSIZE;    /* Archive block size */
  1500.   FILE           *msgfile;        /* message outpu file stdout/stderr */
  1501. ! Replstr        *rplhead = NULL;        /* pointer to head of replstr list */
  1502.   Replstr        *rpltail;        /* pointer to tail of replstr list */
  1503.   
  1504.   
  1505.  
  1506. --- 113,119 -----
  1507.   uint            arvolume;        /* Volume number */
  1508.   uint            blocksize = BLOCKSIZE;    /* Archive block size */
  1509.   FILE           *msgfile;        /* message outpu file stdout/stderr */
  1510. ! Replstr        *rplhead = (Replstr *)NULL;    /*  head of replstr list */
  1511.   Replstr        *rpltail;        /* pointer to tail of replstr list */
  1512.   
  1513.   
  1514. ***************
  1515. *** 234,241
  1516.        * of the tar and/or cpio interfaces...
  1517.        */
  1518.       f_unconditional = 1;
  1519. !     f_modification_time = 1;
  1520. !     f_create_dirs = 1;
  1521.       f_list = 1;
  1522.       blocksize = 0;
  1523.       blocking = 0;
  1524.  
  1525. --- 237,244 -----
  1526.        * of the tar and/or cpio interfaces...
  1527.        */
  1528.       f_unconditional = 1;
  1529. !     f_mtime = 1;
  1530. !     f_dir_create = 1;
  1531.       f_list = 1;
  1532.       blocksize = 0;
  1533.       blocking = 0;
  1534. ***************
  1535. *** 258,264
  1536.           f_reverse_match = 1;
  1537.           break;
  1538.       case 'd':
  1539. !         f_create_dirs = 0;
  1540.           break;
  1541.       case 'f':
  1542.           if (blocksize == 0) {
  1543.  
  1544. --- 261,267 -----
  1545.           f_reverse_match = 1;
  1546.           break;
  1547.       case 'd':
  1548. !         f_dir_create = 0;
  1549.           break;
  1550.       case 'f':
  1551.           if (blocksize == 0) {
  1552. ***************
  1553. *** 274,280
  1554.           f_link = 1;
  1555.           break;
  1556.       case 'm':
  1557. !         f_modification_time = 0;
  1558.           break;
  1559.       case 'o':
  1560.           f_owner = 1;
  1561.  
  1562. --- 277,283 -----
  1563.           f_link = 1;
  1564.           break;
  1565.       case 'm':
  1566. !         f_mtime = 0;
  1567.           break;
  1568.       case 'o':
  1569.           f_owner = 1;
  1570. ***************
  1571. *** 358,364
  1572.       } else if (f_pass && optind < n_argc) {
  1573.       dirname = n_argv[--n_argc];
  1574.       if (LSTAT(dirname, &st) < 0) {
  1575. !         fatal(syserr());
  1576.       }
  1577.       if ((st.sb_mode & S_IFMT) != S_IFDIR) {
  1578.           fatal("Not a directory");
  1579.  
  1580. --- 361,367 -----
  1581.       } else if (f_pass && optind < n_argc) {
  1582.       dirname = n_argv[--n_argc];
  1583.       if (LSTAT(dirname, &st) < 0) {
  1584. !         fatal(strerror());
  1585.       }
  1586.       if ((st.sb_mode & S_IFMT) != S_IFDIR) {
  1587.           fatal("Not a directory");
  1588. ***************
  1589. *** 465,471
  1590.           number = number * 10 + *idx++ - '0';
  1591.       switch (*idx++) {
  1592.       case 'b':
  1593. !         result += number * 512;
  1594.           continue;
  1595.       case 'k':
  1596.           result += number * 1024;
  1597.  
  1598. --- 468,474 -----
  1599.           number = number * 10 + *idx++ - '0';
  1600.       switch (*idx++) {
  1601.       case 'b':
  1602. !         result += number * 512L;
  1603.           continue;
  1604.       case 'k':
  1605.           result += number * 1024L;
  1606. ***************
  1607. *** 468,474
  1608.           result += number * 512;
  1609.           continue;
  1610.       case 'k':
  1611. !         result += number * 1024;
  1612.           continue;
  1613.       case 'm':
  1614.           result += number * 1024 * 1024;
  1615.  
  1616. --- 471,477 -----
  1617.           result += number * 512L;
  1618.           continue;
  1619.       case 'k':
  1620. !         result += number * 1024L;
  1621.           continue;
  1622.       case 'm':
  1623.           result += number * 1024L * 1024L;
  1624. ***************
  1625. *** 471,477
  1626.           result += number * 1024;
  1627.           continue;
  1628.       case 'm':
  1629. !         result += number * 1024 * 1024;
  1630.           continue;
  1631.       case '+':
  1632.           result += number;
  1633.  
  1634. --- 474,480 -----
  1635.           result += number * 1024L;
  1636.           continue;
  1637.       case 'm':
  1638. !         result += number * 1024L * 1024L;
  1639.           continue;
  1640.       case '+':
  1641.           result += number;
  1642. ***************
  1643. *** 515,522
  1644.   
  1645.   #endif
  1646.   {
  1647. !     fprintf(stderr, "\
  1648. ! Usage: %s -[cimopuvy] [-f archive] [-s replstr] [-t device] [pattern...]\n",
  1649.       myname);
  1650.       fprintf(stderr, "\
  1651.          %s -r [-cimopuvy] [-f archive] [-s replstr] [-t device] [pattern...]\n",
  1652.  
  1653. --- 518,524 -----
  1654.   
  1655.   #endif
  1656.   {
  1657. !     fprintf(stderr, "Usage: %s -[cimopuvy] [-f archive] [-s replstr] [-t device] [pattern...]\n",
  1658.       myname);
  1659.       fprintf(stderr, "       %s -r [-cimopuvy] [-f archive] [-s replstr] [-t device] [pattern...]\n",
  1660.       myname);
  1661. ***************
  1662. *** 518,525
  1663.       fprintf(stderr, "\
  1664.   Usage: %s -[cimopuvy] [-f archive] [-s replstr] [-t device] [pattern...]\n",
  1665.       myname);
  1666. !     fprintf(stderr, "\
  1667. !        %s -r [-cimopuvy] [-f archive] [-s replstr] [-t device] [pattern...]\n",
  1668.       myname);
  1669.       fprintf(stderr, "\
  1670.          %s -w [-adimuvy] [-b blocking] [-f archive] [-s replstr]\n\
  1671.  
  1672. --- 520,526 -----
  1673.   {
  1674.       fprintf(stderr, "Usage: %s -[cimopuvy] [-f archive] [-s replstr] [-t device] [pattern...]\n",
  1675.       myname);
  1676. !     fprintf(stderr, "       %s -r [-cimopuvy] [-f archive] [-s replstr] [-t device] [pattern...]\n",
  1677.       myname);
  1678.       fprintf(stderr, "       %s -w [-adimuvy] [-b blocking] [-f archive] [-s replstr]\n              [-t device] [-x format] [pathname...]\n",
  1679.       myname);
  1680. ***************
  1681. *** 521,529
  1682.       fprintf(stderr, "\
  1683.          %s -r [-cimopuvy] [-f archive] [-s replstr] [-t device] [pattern...]\n",
  1684.       myname);
  1685. !     fprintf(stderr, "\
  1686. !        %s -w [-adimuvy] [-b blocking] [-f archive] [-s replstr]\n\
  1687. !        [-t device] [-x format] [pathname...]\n",
  1688.       myname);
  1689.       fprintf(stderr, "\
  1690.          %s -r -w [-ilmopuvy] [-s replstr] [pathname...] directory\n",
  1691.  
  1692. --- 522,528 -----
  1693.       myname);
  1694.       fprintf(stderr, "       %s -r [-cimopuvy] [-f archive] [-s replstr] [-t device] [pattern...]\n",
  1695.       myname);
  1696. !     fprintf(stderr, "       %s -w [-adimuvy] [-b blocking] [-f archive] [-s replstr]\n              [-t device] [-x format] [pathname...]\n",
  1697.       myname);
  1698.       fprintf(stderr, "       %s -r -w [-ilmopuvy] [-s replstr] [pathname...] directory\n",
  1699.       myname);
  1700. ***************
  1701. *** 525,532
  1702.          %s -w [-adimuvy] [-b blocking] [-f archive] [-s replstr]\n\
  1703.          [-t device] [-x format] [pathname...]\n",
  1704.       myname);
  1705. !     fprintf(stderr, "\
  1706. !        %s -r -w [-ilmopuvy] [-s replstr] [pathname...] directory\n",
  1707.       myname);
  1708.       exit(1);
  1709.   }
  1710.  
  1711. --- 524,530 -----
  1712.       myname);
  1713.       fprintf(stderr, "       %s -w [-adimuvy] [-b blocking] [-f archive] [-s replstr]\n              [-t device] [-x format] [pathname...]\n",
  1714.       myname);
  1715. !     fprintf(stderr, "       %s -r -w [-ilmopuvy] [-s replstr] [pathname...] directory\n",
  1716.       myname);
  1717.       exit(1);
  1718.   }
  1719. Index: pax.h
  1720. *** /tmp/,RCSt1a17118    Sun Feb 12 14:08:18 1989
  1721. --- pax.h    Sun Feb 12 14:02:26 1989
  1722. ***************
  1723. *** 1,6
  1724.   /* $Source: /u/mark/src/pax/RCS/pax.h,v $
  1725.    *
  1726. !  * $Revision: 1.1 $
  1727.    *
  1728.    * pax.h - defnitions for entire program
  1729.    *
  1730.  
  1731. --- 1,6 -----
  1732.   /* $Source: /u/mark/src/pax/RCS/pax.h,v $
  1733.    *
  1734. !  * $Revision: 1.2 $
  1735.    *
  1736.    * pax.h - defnitions for entire program
  1737.    *
  1738. ***************
  1739. *** 27,33
  1740.    *
  1741.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1742.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1743. !  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1744.    */
  1745.   
  1746.   #ifndef _PAX_H
  1747.  
  1748. --- 27,33 -----
  1749.    *
  1750.    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  1751.    * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  1752. !  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1753.    */
  1754.   
  1755.   #ifndef _PAX_H
  1756. ***************
  1757. *** 53,59
  1758.   #  include <dirent.h>
  1759.   # endif
  1760.   #else
  1761. ! # include <sys/dir.h>
  1762.   # define dirent direct
  1763.   #endif
  1764.   
  1765.  
  1766. --- 53,67 -----
  1767.   #  include <dirent.h>
  1768.   # endif
  1769.   #else
  1770. ! # ifdef hpux
  1771. ! #  include <ndir.h>
  1772. ! # else
  1773. ! #  ifdef XENIX_286
  1774. ! #   include <sys/ndir.h>
  1775. ! #  else XENIX_286
  1776. ! #   include <sys/dir.h>
  1777. ! #  endif XENIX_286
  1778. ! # endif /* hpux */
  1779.   # define dirent direct
  1780.   #endif
  1781.   
  1782. ***************
  1783. *** 74,79
  1784.   #ifdef XENIX
  1785.   #   include <sys/inode.h>
  1786.   #endif
  1787.   
  1788.   #include <pwd.h>
  1789.   #include <grp.h>
  1790.  
  1791. --- 82,90 -----
  1792.   #ifdef XENIX
  1793.   #   include <sys/inode.h>
  1794.   #endif
  1795. + #ifdef XENIX_286
  1796. + #include <sys/param.h>
  1797. + #endif XENIX_286
  1798.   
  1799.   #include <pwd.h>
  1800.   #include <grp.h>
  1801. ***************
  1802. *** 77,82
  1803.   
  1804.   #include <pwd.h>
  1805.   #include <grp.h>
  1806.   #include <sys/file.h>
  1807.   
  1808.   /* Defines */
  1809.  
  1810. --- 88,94 -----
  1811.   
  1812.   #include <pwd.h>
  1813.   #include <grp.h>
  1814. + #ifndef XENIX_286
  1815.   #include <sys/file.h>
  1816.   #endif XENIX_286
  1817.   
  1818. ***************
  1819. *** 78,83
  1820.   #include <pwd.h>
  1821.   #include <grp.h>
  1822.   #include <sys/file.h>
  1823.   
  1824.   /* Defines */
  1825.   
  1826.  
  1827. --- 90,96 -----
  1828.   #include <grp.h>
  1829.   #ifndef XENIX_286
  1830.   #include <sys/file.h>
  1831. + #endif XENIX_286
  1832.   
  1833.   /* Defines */
  1834.   
  1835. ***************
  1836. *** 331,338
  1837.   extern short    f_pass;
  1838.   extern short    f_disposition;
  1839.   extern short    f_reverse_match;
  1840. ! extern short    f_modification_time;
  1841. ! extern short    f_create_dirs;
  1842.   extern short    f_unconditional;
  1843.   extern short    f_newer;
  1844.   extern time_t   now;
  1845.  
  1846. --- 344,351 -----
  1847.   extern short    f_pass;
  1848.   extern short    f_disposition;
  1849.   extern short    f_reverse_match;
  1850. ! extern short    f_mtime;
  1851. ! extern short    f_dir_create;
  1852.   extern short    f_unconditional;
  1853.   extern short    f_newer;
  1854.   extern time_t   now;
  1855. Index: paxdir.c
  1856. *** /tmp/,RCSt1a17123    Sun Feb 12 14:08:27 1989
  1857. --- paxdir.c    Sun Feb 12 14:02:28 1989
  1858. ***************
  1859. *** 213,219
  1860.       struct stat     sbuf;    /* result of fstat() */
  1861.   
  1862.       if ((fd = open(dirname, O_RDONLY)) < 0)
  1863. !     return NULL;        /* errno set by open() */
  1864.   
  1865.       if (fstat(fd, &sbuf) != 0 || !S_ISDIR(sbuf.st_mode)) {
  1866.       close(fd);
  1867.  
  1868. --- 213,219 -----
  1869.       struct stat     sbuf;    /* result of fstat() */
  1870.   
  1871.       if ((fd = open(dirname, O_RDONLY)) < 0)
  1872. !     return ((DIR *)NULL);        /* errno set by open() */
  1873.   
  1874.       if (fstat(fd, &sbuf) != 0 || !S_ISDIR(sbuf.st_mode)) {
  1875.       close(fd);
  1876. ***************
  1877. *** 218,224
  1878.       if (fstat(fd, &sbuf) != 0 || !S_ISDIR(sbuf.st_mode)) {
  1879.       close(fd);
  1880.       errno = ENOTDIR;
  1881. !     return NULL;        /* not a directory */
  1882.       }
  1883.       if ((dirp = (DIR *) malloc(sizeof(DIR))) == NULL
  1884.       || (dirp->dd_buf = (char *) malloc((unsigned) DIRBUF)) == NULL
  1885.  
  1886. --- 218,224 -----
  1887.       if (fstat(fd, &sbuf) != 0 || !S_ISDIR(sbuf.st_mode)) {
  1888.       close(fd);
  1889.       errno = ENOTDIR;
  1890. !     return ((DIR *)NULL);        /* not a directory */
  1891.       }
  1892.       if ((dirp = (DIR *) malloc(sizeof(DIR))) == (DIR *)NULL
  1893.       || (dirp->dd_buf = (char *) malloc((unsigned) DIRBUF)) == (char *)NULL
  1894. ***************
  1895. *** 220,227
  1896.       errno = ENOTDIR;
  1897.       return NULL;        /* not a directory */
  1898.       }
  1899. !     if ((dirp = (DIR *) malloc(sizeof(DIR))) == NULL
  1900. !     || (dirp->dd_buf = (char *) malloc((unsigned) DIRBUF)) == NULL
  1901.       ) {
  1902.       register int    serrno = errno;
  1903.       /* errno set to ENOMEM by sbrk() */
  1904.  
  1905. --- 220,227 -----
  1906.       errno = ENOTDIR;
  1907.       return ((DIR *)NULL);        /* not a directory */
  1908.       }
  1909. !     if ((dirp = (DIR *) malloc(sizeof(DIR))) == (DIR *)NULL
  1910. !     || (dirp->dd_buf = (char *) malloc((unsigned) DIRBUF)) == (char *)NULL
  1911.       ) {
  1912.       register int    serrno = errno;
  1913.       /* errno set to ENOMEM by sbrk() */
  1914. ***************
  1915. *** 226,232
  1916.       register int    serrno = errno;
  1917.       /* errno set to ENOMEM by sbrk() */
  1918.   
  1919. !     if (dirp != NULL)
  1920.           free((pointer) dirp);
  1921.   
  1922.       close(fd);
  1923.  
  1924. --- 226,232 -----
  1925.       register int    serrno = errno;
  1926.       /* errno set to ENOMEM by sbrk() */
  1927.   
  1928. !     if (dirp != (DIR *)NULL)
  1929.           free((pointer) dirp);
  1930.   
  1931.       close(fd);
  1932. ***************
  1933. *** 231,237
  1934.   
  1935.       close(fd);
  1936.       errno = serrno;
  1937. !     return NULL;        /* not enough memory */
  1938.       }
  1939.       dirp->dd_fd = fd;
  1940.       dirp->dd_loc = dirp->dd_size = 0;    /* refill needed */
  1941.  
  1942. --- 231,237 -----
  1943.   
  1944.       close(fd);
  1945.       errno = serrno;
  1946. !     return ((DIR *)NULL);        /* not enough memory */
  1947.       }
  1948.       dirp->dd_fd = fd;
  1949.       dirp->dd_loc = dirp->dd_size = 0;    /* refill needed */
  1950. ***************
  1951. *** 259,265
  1952.   {
  1953.       register int    fd;
  1954.   
  1955. !     if ( dirp == NULL || dirp->dd_buf == NULL ) {
  1956.       errno = EFAULT;
  1957.       return -1;            /* invalid pointer */
  1958.       }
  1959.  
  1960. --- 259,265 -----
  1961.   {
  1962.       register int    fd;
  1963.   
  1964. !     if ( dirp == (DIR *)NULL || dirp->dd_buf == (char *)NULL ) {
  1965.       errno = EFAULT;
  1966.       return -1;            /* invalid pointer */
  1967.       }
  1968. ***************
  1969. *** 290,296
  1970.   {
  1971.       register struct dirent *dp;    /* -> directory data */
  1972.   
  1973. !     if (dirp == NULL || dirp->dd_buf == NULL) {
  1974.       errno = EFAULT;
  1975.       return NULL;        /* invalid pointer */
  1976.       }
  1977.  
  1978. --- 290,296 -----
  1979.   {
  1980.       register struct dirent *dp;    /* -> directory data */
  1981.   
  1982. !     if (dirp == (DIR *)NULL || dirp->dd_buf == (char *)NULL) {
  1983.       errno = EFAULT;
  1984.       return (struct dirent *)NULL;        /* invalid pointer */
  1985.       }
  1986. ***************
  1987. *** 292,298
  1988.   
  1989.       if (dirp == NULL || dirp->dd_buf == NULL) {
  1990.       errno = EFAULT;
  1991. !     return NULL;        /* invalid pointer */
  1992.       }
  1993.       do {
  1994.       if (dirp->dd_loc >= dirp->dd_size)    /* empty or obsolete */
  1995.  
  1996. --- 292,298 -----
  1997.   
  1998.       if (dirp == (DIR *)NULL || dirp->dd_buf == (char *)NULL) {
  1999.       errno = EFAULT;
  2000. !     return (struct dirent *)NULL;        /* invalid pointer */
  2001.       }
  2002.       do {
  2003.       if (dirp->dd_loc >= dirp->dd_size)    /* empty or obsolete */
  2004. ***************
  2005. *** 303,309
  2006.           getdents(dirp->dd_fd, dirp->dd_buf, (unsigned) DIRBUF)
  2007.           ) <= 0
  2008.           )
  2009. !         return NULL;    /* EOF or error */
  2010.   
  2011.       dp = (struct dirent *) & dirp->dd_buf[dirp->dd_loc];
  2012.       dirp->dd_loc += dp->d_reclen;
  2013.  
  2014. --- 303,309 -----
  2015.           getdents(dirp->dd_fd, dirp->dd_buf, (unsigned) DIRBUF)
  2016.           ) <= 0
  2017.           )
  2018. !         return ((struct dirent *)NULL);    /* EOF or error */
  2019.   
  2020.       dp = (struct dirent *) & dirp->dd_buf[dirp->dd_loc];
  2021.       dirp->dd_loc += dp->d_reclen;
  2022. ***************
  2023. *** 340,346
  2024.   {
  2025.       register bool   rewind;    /* "start over when stymied" flag */
  2026.   
  2027. !     if (dirp == NULL || dirp->dd_buf == NULL) {
  2028.       errno = EFAULT;
  2029.       return;            /* invalid pointer */
  2030.       }
  2031.  
  2032. --- 340,346 -----
  2033.   {
  2034.       register bool   rewind;    /* "start over when stymied" flag */
  2035.   
  2036. !     if (dirp == (DIR *)NULL || dirp->dd_buf == (char *)NULL) {
  2037.       errno = EFAULT;
  2038.       return;            /* invalid pointer */
  2039.       }
  2040. ***************
  2041. *** 372,378
  2042.       /* See whether the matching entry is in the current buffer. */
  2043.   
  2044.       if ((dirp->dd_loc < dirp->dd_size    /* valid index */
  2045. !          || readdir(dirp) != NULL    /* next buffer read */
  2046.            && (dirp->dd_loc = 0, true)    /* beginning of buffer set */
  2047.            )
  2048.           && (dp = (struct dirent *) & dirp->dd_buf[dirp->dd_loc])->d_off
  2049.  
  2050. --- 372,378 -----
  2051.       /* See whether the matching entry is in the current buffer. */
  2052.   
  2053.       if ((dirp->dd_loc < dirp->dd_size    /* valid index */
  2054. !          || readdir(dirp) != (struct dirent *)NULL    /* next buffer read */
  2055.            && (dirp->dd_loc = 0, true)    /* beginning of buffer set */
  2056.            )
  2057.           && (dp = (struct dirent *) & dirp->dd_buf[dirp->dd_loc])->d_off
  2058. ***************
  2059. *** 442,448
  2060.   
  2061.   #endif
  2062.   {
  2063. !     if (dirp == NULL || dirp->dd_buf == NULL) {
  2064.       errno = EFAULT;
  2065.       return -1;        /* invalid pointer */
  2066.       }
  2067.  
  2068. --- 442,448 -----
  2069.   
  2070.   #endif
  2071.   {
  2072. !     if (dirp == (DIR *)NULL || dirp->dd_buf == (char *)NULL) {
  2073.       errno = EFAULT;
  2074.       return -1;        /* invalid pointer */
  2075.       }
  2076. ***************
  2077. *** 593,599
  2078.       }
  2079.   #endif
  2080.   
  2081. !     if (buf == NULL
  2082.   #ifdef ATT_SPEC
  2083.       || (unsigned long) buf % sizeof(long) != 0    /* ugh */
  2084.   #endif
  2085.  
  2086. --- 593,599 -----
  2087.       }
  2088.   #endif
  2089.   
  2090. !     if (buf == (char *)NULL
  2091.   #ifdef ATT_SPEC
  2092.       || (unsigned long) buf % sizeof(long) != 0    /* ugh */
  2093.   #endif
  2094. -- 
  2095. Mark H. Colburn                  "Look into a child's eye;
  2096. Minnetech Consulting, Inc.        there's no hate and there's no lie;
  2097. mark@jhereg.mn.org                there's no black and there's no white."
  2098.  
  2099.  
  2100.