svn commit: r280206 - head/bin/pax

Eitan Adler eadler at FreeBSD.org
Wed Mar 18 05:48:08 UTC 2015


Author: eadler
Date: Wed Mar 18 05:48:05 2015
New Revision: 280206
URL: https://svnweb.freebsd.org/changeset/base/280206

Log:
  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
  Submitted by:	Sevan Janiyan
  Reviewed by:	allanjude (doc)

Modified:
  head/bin/pax/ar_io.c
  head/bin/pax/extern.h
  head/bin/pax/options.c
  head/bin/pax/pax.1
  head/bin/pax/pax.c

Modified: head/bin/pax/ar_io.c
==============================================================================
--- head/bin/pax/ar_io.c	Wed Mar 18 05:25:38 2015	(r280205)
+++ head/bin/pax/ar_io.c	Wed Mar 18 05:48:05 2015	(r280206)
@@ -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: head/bin/pax/extern.h
==============================================================================
--- head/bin/pax/extern.h	Wed Mar 18 05:25:38 2015	(r280205)
+++ head/bin/pax/extern.h	Wed Mar 18 05:48:05 2015	(r280206)
@@ -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: head/bin/pax/options.c
==============================================================================
--- head/bin/pax/options.c	Wed Mar 18 05:25:38 2015	(r280205)
+++ head/bin/pax/options.c	Wed Mar 18 05:48:05 2015	(r280206)
@@ -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 */
 	}
@@ -1526,25 +1532,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: head/bin/pax/pax.1
==============================================================================
--- head/bin/pax/pax.1	Wed Mar 18 05:25:38 2015	(r280205)
+++ head/bin/pax/pax.1	Wed Mar 18 05:48:05 2015	(r280206)
@@ -33,7 +33,7 @@
 .\"	@(#)pax.1	8.4 (Berkeley) 4/18/94
 .\" $FreeBSD$
 .\"
-.Dd December 21, 2013
+.Dd March 17, 2015
 .Dt PAX 1
 .Os
 .Sh NAME
@@ -41,7 +41,7 @@
 .Nd read and write file archives and copy directory hierarchies
 .Sh SYNOPSIS
 .Nm
-.Op Fl cdnvz
+.Op Fl cdnvzO
 .Bk -words
 .Op Fl f Ar archive
 .Ek
@@ -68,7 +68,7 @@
 .Op Ar pattern ...\&
 .Nm
 .Fl r
-.Op Fl cdiknuvzDYZ
+.Op Fl cdiknuvzDOYZ
 .Bk -words
 .Op Fl f Ar archive
 .Ek
@@ -104,7 +104,7 @@
 .Op Ar pattern ...\&
 .Nm
 .Fl w
-.Op Fl dituvzHLPX
+.Op Fl dituvzHLOPX
 .Bk -words
 .Op Fl b Ar blocksize
 .Ek
@@ -147,7 +147,7 @@
 .Nm
 .Fl r
 .Fl w
-.Op Fl diklntuvDHLPXYZ
+.Op Fl diklntuvDHLOPXYZ
 .Bk -words
 .Op Fl p Ar string
 .Ar ...\&
@@ -853,6 +853,13 @@ Follow only command line symbolic links 
 system traversal.
 .It Fl L
 Follow all symbolic links to perform a logical file system traversal.
+.It Fl O
+Force the archive to be one volume.
+If a volume ends prematurely,
+.Nm
+will not prompt for a new volume.
+This option can be useful for
+automated tasks where error recovery cannot be performed by a human.
 .It Fl P
 Do not follow symbolic links, perform a physical file system traversal.
 This is the default mode.
@@ -1176,6 +1183,7 @@ The options
 .Fl G ,
 .Fl H ,
 .Fl L ,
+.Fl O ,
 .Fl P ,
 .Fl T ,
 .Fl U ,

Modified: head/bin/pax/pax.c
==============================================================================
--- head/bin/pax/pax.c	Wed Mar 18 05:25:38 2015	(r280205)
+++ head/bin/pax/pax.c	Wed Mar 18 05:48:05 2015	(r280206)
@@ -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 */


More information about the svn-src-all mailing list