char** excludeList=NULL;
char** extractList=NULL;
const char *tarName="-";
+ const char *cwd=NULL;
#if defined BB_FEATURE_TAR_EXCLUDE
int excludeListSize=0;
FILE *fileList;
while (
#ifndef BB_FEATURE_TAR_EXCLUDE
- (opt = getopt(argc, argv, "cxtzvOf:p"))
+ (opt = getopt(argc, argv, "cxtzvOf:pC:"))
#else
- (opt = getopt_long(argc, argv, "cxtzvOf:X:p", longopts, NULL))
+ (opt = getopt_long(argc, argv, "cxtzvOf:X:pC:", longopts, NULL))
#endif
> 0) {
switch (opt) {
#endif
case 'p':
break;
+ case 'C':
+ cwd = xgetcwd((char *)cwd);
+ if (chdir(optarg)) {
+ printf("cd: %s: %s\n", optarg, strerror(errno));
+ return EXIT_FAILURE;
+ }
+ break;
default:
show_usage();
}
#endif
}
+ if (cwd)
+ chdir(cwd);
if (status == TRUE)
return EXIT_SUCCESS;
else
if (extractFlag==TRUE && tostdoutFlag==FALSE) {
/* Create the path to the file, just in case it isn't there...
* This should not screw up path permissions or anything. */
- create_path(header->name, 0777);
+ char *dir = dirname (header->name);
+ make_directory (dir, -1, FILEUTILS_RECUR);
+ free (dir);
if ((outFd=open(header->name, O_CREAT|O_TRUNC|O_WRONLY,
header->mode & ~S_IFMT)) < 0) {
error_msg(io_error, header->name, strerror(errno));
if (extractFlag==FALSE || tostdoutFlag==TRUE)
return( TRUE);
- if (create_path(header->name, header->mode) != TRUE) {
- perror_msg("%s: Cannot mkdir", header->name);
+ if (make_directory(header->name, header->mode, FILEUTILS_RECUR) < 0) {
return( FALSE);
}
/* make the final component, just in case it was