Author: eadler
Date: Fri Apr 17 18:33:59 2015
New Revision: 281661
URL: https://svnweb.freebsd.org/changeset/base/281661

Log:
  MFC r280206:
  
  Implement pax -O option to permit limiting a PAX archive to a single volume.
  
  -O Force the archive to be one volume.  If a volume ends prematurely, pax will
  not prompt for a new volume.
  
  PR:           198481

Modified:
  stable/10/bin/pax/ar_io.c
  stable/10/bin/pax/extern.h
  stable/10/bin/pax/options.c
  stable/10/bin/pax/pax.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/bin/pax/ar_io.c
==============================================================================
--- stable/10/bin/pax/ar_io.c   Fri Apr 17 16:38:59 2015        (r281660)
+++ stable/10/bin/pax/ar_io.c   Fri Apr 17 18:33:59 2015        (r281661)
@@ -82,7 +82,7 @@ static int wr_trail = 1;              /* trailer was
 static int can_unlnk = 0;              /* do we unlink null archives?  */
 const char *arcname;                   /* printable name of archive */
 const char *gzip_program;              /* name of gzip program */
-static pid_t zpid = -1;                        /* pid of child process */
+static pid_t zpid = -1;                /* pid of child process */
 
 static int get_phys(void);
 static void ar_start_gzip(int, const char *, int);
@@ -1123,7 +1123,7 @@ ar_next(void)
        if (sigprocmask(SIG_SETMASK, &o_mask, NULL) < 0)
                syswarn(0, errno, "Unable to restore signal mask");
 
-       if (done || !wr_trail || strcmp(NM_TAR, argv0) == 0)
+       if (done || !wr_trail || Oflag || strcmp(NM_TAR, argv0) == 0)
                return(-1);
 
        tty_prnt("\nATTENTION! %s archive volume change required.\n", argv0);

Modified: stable/10/bin/pax/extern.h
==============================================================================
--- stable/10/bin/pax/extern.h  Fri Apr 17 16:38:59 2015        (r281660)
+++ stable/10/bin/pax/extern.h  Fri Apr 17 18:33:59 2015        (r281661)
@@ -217,6 +217,7 @@ extern int vflag;
 extern int Dflag;
 extern int Hflag;
 extern int Lflag;
+extern int Oflag;
 extern int Xflag;
 extern int Yflag;
 extern int Zflag;

Modified: stable/10/bin/pax/options.c
==============================================================================
--- stable/10/bin/pax/options.c Fri Apr 17 16:38:59 2015        (r281660)
+++ stable/10/bin/pax/options.c Fri Apr 17 18:33:59 2015        (r281661)
@@ -194,7 +194,7 @@ pax_options(int argc, char **argv)
        /*
         * process option flags
         */
-       while 
((c=getopt(argc,argv,"ab:cdf:iklno:p:rs:tuvwx:zB:DE:G:HLPT:U:XYZ"))
+       while 
((c=getopt(argc,argv,"ab:cdf:iklno:p:rs:tuvwx:zB:DE:G:HLOPT:U:XYZ"))
            != -1) {
                switch (c) {
                case 'a':
@@ -447,6 +447,12 @@ pax_options(int argc, char **argv)
                        Lflag = 1;
                        flg |= CLF;
                        break;
+               case 'O':
+                       /*
+                        * Force one volume. Non standard option.
+                        */
+                       Oflag = 1;
+                       break;
                case 'P':
                        /*
                         * do NOT follow symlinks (default)
@@ -584,7 +590,7 @@ tar_options(int argc, char **argv)
 {
        int c;
        int fstdin = 0;
-       int Oflag = 0;
+       int tar_Oflag = 0;
        int nincfiles = 0;
        int incfiles_max = 0;
        struct incfile {
@@ -664,7 +670,7 @@ tar_options(int argc, char **argv)
                        if (opt_add("write_opt=nodir") < 0)
                                tar_usage();
                case 'O':
-                       Oflag = 1;
+                       tar_Oflag = 1;
                        break;
                case 'p':
                        /*
@@ -820,8 +826,8 @@ tar_options(int argc, char **argv)
         * (unless -o specified)
         */
        if (act == ARCHIVE || act == APPND)
-               frmt = &(fsub[Oflag ? F_OTAR : F_TAR]);
-       else if (Oflag) {
+               frmt = &(fsub[tar_Oflag ? F_OTAR : F_TAR]);
+       else if (tar_Oflag) {
                paxwarn(1, "The -O/-o options are only valid when writing an 
archive");
                tar_usage();            /* only valid when writing */
        }
@@ -1524,25 +1530,25 @@ no_op(void)
 void
 pax_usage(void)
 {
-       (void)fputs("usage: pax [-cdnvz] [-E limit] [-f archive] ", stderr);
+       (void)fputs("usage: pax [-cdnOvz] [-E limit] [-f archive] ", stderr);
        (void)fputs("[-s replstr] ... [-U user] ...", stderr);
        (void)fputs("\n    [-G group] ... ", stderr);
        (void)fputs("[-T [from_date][,to_date]] ... ", stderr);
        (void)fputs("[pattern ...]\n", stderr);
-       (void)fputs("       pax -r [-cdiknuvzDYZ] [-E limit] ", stderr);
+       (void)fputs("       pax -r [-cdiknOuvzDYZ] [-E limit] ", stderr);
        (void)fputs("[-f archive] [-o options] ... \n", stderr);
        (void)fputs("      [-p string] ... [-s replstr] ... ", stderr);
        (void)fputs("[-U user] ... [-G group] ...\n        ", stderr);
        (void)fputs("[-T [from_date][,to_date]] ... ", stderr);
        (void)fputs(" [pattern ...]\n", stderr);
-       (void)fputs("       pax -w [-dituvzHLPX] [-b blocksize] ", stderr);
+       (void)fputs("       pax -w [-dituvzHLOPX] [-b blocksize] ", stderr);
        (void)fputs("[ [-a] [-f archive] ] [-x format] \n", stderr);
        (void)fputs("      [-B bytes] [-s replstr] ... ", stderr);
        (void)fputs("[-o options] ... [-U user] ...", stderr);
        (void)fputs("\n    [-G group] ... ", stderr);
        (void)fputs("[-T [from_date][,to_date][/[c][m]]] ... ", stderr);
        (void)fputs("[file ...]\n", stderr);
-       (void)fputs("       pax -r -w [-diklntuvDHLPXYZ] ", stderr);
+       (void)fputs("       pax -r -w [-diklntuvDHLOPXYZ] ", stderr);
        (void)fputs("[-p string] ... [-s replstr] ...", stderr);
        (void)fputs("\n    [-U user] ... [-G group] ... ", stderr);
        (void)fputs("[-T [from_date][,to_date][/[c][m]]] ... ", stderr);

Modified: stable/10/bin/pax/pax.c
==============================================================================
--- stable/10/bin/pax/pax.c     Fri Apr 17 16:38:59 2015        (r281660)
+++ stable/10/bin/pax/pax.c     Fri Apr 17 18:33:59 2015        (r281661)
@@ -85,6 +85,7 @@ int   vflag;                  /* produce verbose output *
 int    Dflag;                  /* same as uflag except inode change time */
 int    Hflag;                  /* follow command line symlinks (write only) */
 int    Lflag;                  /* follow symlinks when writing */
+int    Oflag;                  /* limit to single volume */
 int    Xflag;                  /* archive files with same device id only */
 int    Yflag;                  /* same as Dflg except after name mode */
 int    Zflag;                  /* same as uflg except after name mode */
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "[email protected]"

Reply via email to