From: Eric Andersen Date: Mon, 4 Dec 2000 18:51:09 +0000 (-0000) Subject: Patch to add in the -X option and fix the --exclude bug, originally by X-Git-Tag: 0_48~76 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=8cede00b9eccb077232030723867566ad5685c6f;p=oweals%2Fbusybox.git Patch to add in the -X option and fix the --exclude bug, originally by Sebastien Huet, and now ported to the latest and greatest by both Arne Bernin and kent robotti . --- diff --git a/Config.h b/Config.h index 0f31ae16b..e07044690 100644 --- a/Config.h +++ b/Config.h @@ -222,7 +222,7 @@ // Enable support for creation of tar files. #define BB_FEATURE_TAR_CREATE // -// Enable support for "--exclude" for excluding files +// Enable support for "--exclude" and "-X" for excluding files #define BB_FEATURE_TAR_EXCLUDE // //// Enable reverse sort diff --git a/applets/usage.c b/applets/usage.c index bab6d21b3..bd2321fbc 100644 --- a/applets/usage.c +++ b/applets/usage.c @@ -1218,6 +1218,7 @@ const char tar_usage[] = #endif #if defined BB_FEATURE_TAR_EXCLUDE "[--exclude File] " + "[-X File]" #endif "[-f tarFile] [FILE(s)] ...\n" #ifndef BB_FEATURE_TRIVIAL_HELP @@ -1234,6 +1235,7 @@ const char tar_usage[] = "\tO\t\textract to stdout\n" #if defined BB_FEATURE_TAR_EXCLUDE "\texclude\t\tfile to exclude\n" + "\tX\t\tfile with names to exclude\n" #endif "\nInformative output:\n" "\tv\t\tverbosely list files processed\n" diff --git a/archival/tar.c b/archival/tar.c index 6d8e633b0..7e56fb99a 100644 --- a/archival/tar.c +++ b/archival/tar.c @@ -147,6 +147,9 @@ extern int tar_main(int argc, char **argv) char** extractList=NULL; #if defined BB_FEATURE_TAR_EXCLUDE int excludeListSize=0; + char *excludeFileName ="-"; + FILE *fileList; + char file[256]; #endif const char *tarName="-"; int listFlag = FALSE; @@ -198,7 +201,7 @@ extern int tar_main(int argc, char **argv) break; #if defined BB_FEATURE_TAR_EXCLUDE case 'e': - if (strcmp(*argv, "exclude")==0) { + if (strcmp(*argv, "xclude")==0) { excludeList=xrealloc( excludeList, sizeof(char**) * (excludeListSize+2)); excludeList[excludeListSize] = *(++argv); if (excludeList[excludeListSize] == NULL) @@ -211,6 +214,30 @@ extern int tar_main(int argc, char **argv) stopIt=TRUE; break; } + case 'X': + if (*excludeFileName != '-') + fatalError("Only one 'X' option allowed\n"); + excludeFileName = *(++argv); + if (excludeFileName == NULL) + fatalError("Option requires an argument: No file specified\n"); + fileList = fopen (excludeFileName, "rt"); + if (! fileList) + fatalError("Exclude file: file not found\n"); + while (!feof(fileList)) { + fscanf(fileList, "%s", file); + excludeList=xrealloc( excludeList, sizeof(char**) * (excludeListSize+2)); + excludeList[excludeListSize] = malloc(sizeof(char) * (strlen(file)+1)); + strcpy(excludeList[excludeListSize],file); + /* Remove leading "/"s */ + if (*excludeList[excludeListSize] == '/') + excludeList[excludeListSize] = (excludeList[excludeListSize])+1; + /* Tack a NULL onto the end of the list */ + excludeList[++excludeListSize] = NULL; + } + + fclose(fileList); + stopIt=TRUE; + break; #endif case '-': break; diff --git a/tar.c b/tar.c index 6d8e633b0..7e56fb99a 100644 --- a/tar.c +++ b/tar.c @@ -147,6 +147,9 @@ extern int tar_main(int argc, char **argv) char** extractList=NULL; #if defined BB_FEATURE_TAR_EXCLUDE int excludeListSize=0; + char *excludeFileName ="-"; + FILE *fileList; + char file[256]; #endif const char *tarName="-"; int listFlag = FALSE; @@ -198,7 +201,7 @@ extern int tar_main(int argc, char **argv) break; #if defined BB_FEATURE_TAR_EXCLUDE case 'e': - if (strcmp(*argv, "exclude")==0) { + if (strcmp(*argv, "xclude")==0) { excludeList=xrealloc( excludeList, sizeof(char**) * (excludeListSize+2)); excludeList[excludeListSize] = *(++argv); if (excludeList[excludeListSize] == NULL) @@ -211,6 +214,30 @@ extern int tar_main(int argc, char **argv) stopIt=TRUE; break; } + case 'X': + if (*excludeFileName != '-') + fatalError("Only one 'X' option allowed\n"); + excludeFileName = *(++argv); + if (excludeFileName == NULL) + fatalError("Option requires an argument: No file specified\n"); + fileList = fopen (excludeFileName, "rt"); + if (! fileList) + fatalError("Exclude file: file not found\n"); + while (!feof(fileList)) { + fscanf(fileList, "%s", file); + excludeList=xrealloc( excludeList, sizeof(char**) * (excludeListSize+2)); + excludeList[excludeListSize] = malloc(sizeof(char) * (strlen(file)+1)); + strcpy(excludeList[excludeListSize],file); + /* Remove leading "/"s */ + if (*excludeList[excludeListSize] == '/') + excludeList[excludeListSize] = (excludeList[excludeListSize])+1; + /* Tack a NULL onto the end of the list */ + excludeList[++excludeListSize] = NULL; + } + + fclose(fileList); + stopIt=TRUE; + break; #endif case '-': break; diff --git a/usage.c b/usage.c index bab6d21b3..bd2321fbc 100644 --- a/usage.c +++ b/usage.c @@ -1218,6 +1218,7 @@ const char tar_usage[] = #endif #if defined BB_FEATURE_TAR_EXCLUDE "[--exclude File] " + "[-X File]" #endif "[-f tarFile] [FILE(s)] ...\n" #ifndef BB_FEATURE_TRIVIAL_HELP @@ -1234,6 +1235,7 @@ const char tar_usage[] = "\tO\t\textract to stdout\n" #if defined BB_FEATURE_TAR_EXCLUDE "\texclude\t\tfile to exclude\n" + "\tX\t\tfile with names to exclude\n" #endif "\nInformative output:\n" "\tv\t\tverbosely list files processed\n"