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);