aboutsummaryrefslogtreecommitdiff
path: root/archival
diff options
context:
space:
mode:
Diffstat (limited to 'archival')
-rw-r--r--archival/tar.c51
1 files changed, 26 insertions, 25 deletions
diff --git a/archival/tar.c b/archival/tar.c
index 3a3b7f143..e1beee117 100644
--- a/archival/tar.c
+++ b/archival/tar.c
@@ -246,7 +246,8 @@ extern int tar_main(int argc, char **argv)
#if defined BB_FEATURE_TAR_EXCLUDE
case 'e':
if (strcmp(*argv, "xclude")==0) {
- excludeList=xrealloc( excludeList, sizeof(char**) * (excludeListSize+2));
+ excludeList=xrealloc( excludeList,
+ sizeof(char *) * (excludeListSize+2));
excludeList[excludeListSize] = *(++argv);
if (excludeList[excludeListSize] == NULL)
error_msg_and_die( "Option requires an argument: No file specified\n");
@@ -258,30 +259,30 @@ extern int tar_main(int argc, char **argv)
stopIt=TRUE;
break;
}
- case 'X':
- if (*excludeFileName != '-')
- error_msg_and_die("Only one 'X' option allowed\n");
- excludeFileName = *(++argv);
- if (excludeFileName == NULL)
- error_msg_and_die("Option requires an argument: No file specified\n");
- fileList = fopen (excludeFileName, "rt");
- if (! fileList)
- error_msg_and_die("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;
+ case 'X':
+ if (*excludeFileName != '-')
+ error_msg_and_die("Only one 'X' option allowed\n");
+ excludeFileName = *(++argv);
+ if (excludeFileName == NULL)
+ error_msg_and_die("Option requires an argument: No file specified\n");
+ fileList = fopen (excludeFileName, "r");
+ if (! fileList)
+ error_msg_and_die("Exclude file: file not found\n");
+ while (fgets(file, sizeof(file), fileList) != NULL) {
+ excludeList = xrealloc(excludeList,
+ sizeof(char *) * (excludeListSize+2));
+ if (file[strlen(file)-1] == '\n')
+ file[strlen(file)-1] = '\0';
+ excludeList[excludeListSize] = xstrdup(file);
+ /* Remove leading "/"s */
+ while (*excludeList[excludeListSize] == '/')
+ excludeList[excludeListSize]++;
+ /* Tack a NULL onto the end of the list */
+ excludeList[++excludeListSize] = NULL;
+ }
+ fclose(fileList);
+ stopIt=TRUE;
+ break;
#endif
case '-':
break;