aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlenn L McGrath <bug1@ihug.co.nz>2001-10-13 06:54:45 +0000
committerGlenn L McGrath <bug1@ihug.co.nz>2001-10-13 06:54:45 +0000
commitd642a679281399cd82d851fb550af683009b99a2 (patch)
treeff2aae7b3fba2c370aa0067fb62a279f834c6fda
parent527880e5cf0a76a53239bfc1da938db5b0d83b36 (diff)
downloadbusybox-d642a679281399cd82d851fb550af683009b99a2.tar.gz
Match subdirectories of included/excluded files
-rw-r--r--archival/tar.c29
-rw-r--r--tar.c29
2 files changed, 34 insertions, 24 deletions
diff --git a/archival/tar.c b/archival/tar.c
index bb66d40cc..018ccdc11 100644
--- a/archival/tar.c
+++ b/archival/tar.c
@@ -501,7 +501,19 @@ static int writeTarFile(const char* tarName, int verboseFlag, char **argv,
}
#endif //tar_create
-void append_file_to_list(char *filename, char ***name_list, int *num_of_entries)
+void append_file_to_list(const char *new_name, char ***list, int *list_count)
+{
+ *list = realloc(*list, sizeof(char *) * (*list_count + 2));
+ if (last_char_is(new_name, '/')) {
+ (*list)[*list_count] = concat_path_file(new_name, "*");
+ } else {
+ (*list)[*list_count] = xstrdup(new_name);
+ }
+ (*list_count)++;
+ (*list)[*list_count] = NULL;
+}
+
+void append_file_list_to_list(char *filename, char ***name_list, int *num_of_entries)
{
FILE *src_stream;
char *line;
@@ -513,13 +525,10 @@ void append_file_to_list(char *filename, char ***name_list, int *num_of_entries)
if (line_ptr) {
*line_ptr = '\0';
}
- *name_list = realloc(*name_list, sizeof(char *) * (*num_of_entries + 2));
- (*name_list)[*num_of_entries] = xstrdup(line);
- (*num_of_entries)++;
+ append_file_to_list(line, name_list, num_of_entries);
free(line);
}
fclose(src_stream);
- (*name_list)[*num_of_entries] = NULL;
}
#ifdef BB_FEATURE_TAR_EXCLUDE
@@ -627,13 +636,12 @@ int tar_main(int argc, char **argv)
/* Exclude or Include files listed in <filename>*/
#ifdef BB_FEATURE_TAR_EXCLUDE
case 'X':
- append_file_to_list(optarg, &exclude_list, &exclude_list_count);
- exclude_list[exclude_list_count] = NULL;
+ append_file_list_to_list(optarg, &exclude_list, &exclude_list_count);
break;
#endif
case 'T':
// by default a list is an include list
- append_file_to_list(optarg, &include_list, &include_list_count);
+ append_file_list_to_list(optarg, &include_list, &include_list_count);
break;
case 'C': // Change to dir <optarg>
@@ -683,11 +691,8 @@ int tar_main(int argc, char **argv)
/* Setup an array of filenames to work with */
while (optind < argc) {
- include_list = realloc(include_list, sizeof(char *) * (include_list_count + 2));
- include_list[include_list_count] = xstrdup(argv[optind]);
- include_list_count++;
+ append_file_to_list(argv[optind], &include_list, &include_list_count);
optind++;
- include_list[include_list_count] = NULL;
}
/* By default the include list is the list we act on */
diff --git a/tar.c b/tar.c
index bb66d40cc..018ccdc11 100644
--- a/tar.c
+++ b/tar.c
@@ -501,7 +501,19 @@ static int writeTarFile(const char* tarName, int verboseFlag, char **argv,
}
#endif //tar_create
-void append_file_to_list(char *filename, char ***name_list, int *num_of_entries)
+void append_file_to_list(const char *new_name, char ***list, int *list_count)
+{
+ *list = realloc(*list, sizeof(char *) * (*list_count + 2));
+ if (last_char_is(new_name, '/')) {
+ (*list)[*list_count] = concat_path_file(new_name, "*");
+ } else {
+ (*list)[*list_count] = xstrdup(new_name);
+ }
+ (*list_count)++;
+ (*list)[*list_count] = NULL;
+}
+
+void append_file_list_to_list(char *filename, char ***name_list, int *num_of_entries)
{
FILE *src_stream;
char *line;
@@ -513,13 +525,10 @@ void append_file_to_list(char *filename, char ***name_list, int *num_of_entries)
if (line_ptr) {
*line_ptr = '\0';
}
- *name_list = realloc(*name_list, sizeof(char *) * (*num_of_entries + 2));
- (*name_list)[*num_of_entries] = xstrdup(line);
- (*num_of_entries)++;
+ append_file_to_list(line, name_list, num_of_entries);
free(line);
}
fclose(src_stream);
- (*name_list)[*num_of_entries] = NULL;
}
#ifdef BB_FEATURE_TAR_EXCLUDE
@@ -627,13 +636,12 @@ int tar_main(int argc, char **argv)
/* Exclude or Include files listed in <filename>*/
#ifdef BB_FEATURE_TAR_EXCLUDE
case 'X':
- append_file_to_list(optarg, &exclude_list, &exclude_list_count);
- exclude_list[exclude_list_count] = NULL;
+ append_file_list_to_list(optarg, &exclude_list, &exclude_list_count);
break;
#endif
case 'T':
// by default a list is an include list
- append_file_to_list(optarg, &include_list, &include_list_count);
+ append_file_list_to_list(optarg, &include_list, &include_list_count);
break;
case 'C': // Change to dir <optarg>
@@ -683,11 +691,8 @@ int tar_main(int argc, char **argv)
/* Setup an array of filenames to work with */
while (optind < argc) {
- include_list = realloc(include_list, sizeof(char *) * (include_list_count + 2));
- include_list[include_list_count] = xstrdup(argv[optind]);
- include_list_count++;
+ append_file_to_list(argv[optind], &include_list, &include_list_count);
optind++;
- include_list[include_list_count] = NULL;
}
/* By default the include list is the list we act on */