Print this page
3474 tar should support -C on extract
Reviewed by: Robert Mustacchi <rm@joyent.com>

*** 19,28 **** --- 19,29 ---- * CDDL HEADER END */ /* * Copyright (c) 1988, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright 2012 Milan Jurik. All rights reserved. + * Copyright (c) 2013, Joyent, Inc. All rights reserved. */ /* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */
*** 559,568 **** --- 560,570 ---- 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 **** --- 1138,1163 ---- } 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 **** --- 1172,1187 ---- 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);