Print this page
OS-1626 tar -C support on extract would be nice
*** 559,568 ****
--- 559,569 ----
static void detect_compress(void);
static struct stat stbuf;
static char *myname;
+ static char *xtract_chdir = NULL;
static int checkflag = 0;
static int Xflag, Fflag, iflag, hflag, Bflag, Iflag;
static int rflag, xflag, vflag, tflag, mt, svmt, cflag, mflag, pflag;
static int uflag;
static int errflag;
*** 1136,1147 ****
--- 1137,1162 ----
} else {
Iflag = 1;
argv[argc] = argv[argc+2];
build_table(include_tbl, argv[++argc]);
}
+ } else if (strcmp(argv[argc], "-C") == 0) {
+ if (!argv[argc+1]) {
+ (void) fprintf(stderr, gettext("tar: "
+ "missing argument for -C flag\n"));
+ done(2);
+ } else if (xtract_chdir != NULL) {
+ (void) fprintf(stderr, gettext("tar: "
+ "extract should have only one -C "
+ "flag\n"));
+ done(2);
+ } else {
+ argv[argc] = argv[argc+2];
+ xtract_chdir = argv[++argc];
}
}
+ }
if (strcmp(usefile, "-") == 0) {
mt = dup(0);
++bflag;
/* try to recover from short reads when reading stdin */
++Bflag;
*** 1156,1165 ****
--- 1171,1186 ----
pid = uncompress_file();
wait_pid(pid);
}
}
if (xflag) {
+ if (xtract_chdir != NULL) {
+ if (tar_chdir(xtract_chdir) < 0) {
+ vperror(1, gettext("can't change "
+ "directories to %s"), xtract_chdir);
+ }
+ }
if (Aflag && vflag)
(void) printf(gettext(
"Suppressing absolute pathnames.\n"));
doxtract(argv);