X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fnames.c;h=57f894686d68142f683182a93c916f1ba78bfe8e;hb=fc264a87a852ddb6a9d06cdc418680d02a0a74f3;hp=5553021f1954e458ffa680e9a6c0c234d8be7816;hpb=463d99453f51ac4ae875d9bae97418671e7a62bc;p=chaz%2Ftar diff --git a/src/names.c b/src/names.c index 5553021..57f8946 100644 --- a/src/names.c +++ b/src/names.c @@ -935,7 +935,7 @@ new_name (const char *file_name, const char *name) bool excluded_name (char const *name) { - return excluded_filename (excluded, name + FILESYSTEM_PREFIX_LEN (name)); + return excluded_filename (excluded, name + FILE_SYSTEM_PREFIX_LEN (name)); } /* Hash tables of strings. */ @@ -1001,7 +1001,22 @@ is_avoided_name (char const *name) { return hash_string_lookup (avoided_name_table, name); } + + +static Hash_table *prefix_table[2]; + +/* Return true if file names of some members in the archive were stripped off + their leading components. We could have used + return prefix_table[0] || prefix_table[1] + but the following seems to be safer: */ +bool +removed_prefixes_p (void) +{ + return (prefix_table[0] && hash_get_n_entries (prefix_table[0]) != 0) + || (prefix_table[1] && hash_get_n_entries (prefix_table[1]) != 0); +} + /* Return a safer suffix of FILE_NAME, or "." if it has no safer suffix. Check for fully specified file names and other atrocities. Warn the user if we do not return NAME. If LINK_TARGET is 1, @@ -1019,7 +1034,7 @@ safer_name_suffix (char const *file_name, bool link_target) /* Skip file system prefixes, leading file name components that contain "..", and leading slashes. */ - size_t prefix_len = FILESYSTEM_PREFIX_LEN (file_name); + size_t prefix_len = FILE_SYSTEM_PREFIX_LEN (file_name); for (p = file_name + prefix_len; *p; ) { @@ -1041,7 +1056,6 @@ safer_name_suffix (char const *file_name, bool link_target) if (prefix_len) { - static Hash_table *prefix_table[2]; char *prefix = alloca (prefix_len + 1); memcpy (prefix, file_name, prefix_len); prefix[prefix_len] = '\0'; @@ -1053,7 +1067,7 @@ safer_name_suffix (char const *file_name, bool link_target) N_("Removing leading `%s' from member names"), N_("Removing leading `%s' from hard link targets") }; - WARN ((0, 0, "%s", _(diagnostic[link_target]), prefix)); + WARN ((0, 0, _(diagnostic[link_target]), prefix)); } } } @@ -1083,7 +1097,7 @@ safer_name_suffix (char const *file_name, bool link_target) size_t stripped_prefix_len (char const *file_name, size_t num) { - char const *p = file_name + FILESYSTEM_PREFIX_LEN (file_name); + char const *p = file_name + FILE_SYSTEM_PREFIX_LEN (file_name); while (ISSLASH (*p)) p++; while (*p) @@ -1105,7 +1119,7 @@ stripped_prefix_len (char const *file_name, size_t num) bool contains_dot_dot (char const *name) { - char const *p = name + FILESYSTEM_PREFIX_LEN (name); + char const *p = name + FILE_SYSTEM_PREFIX_LEN (name); for (;; p++) {