X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fnames.c;h=a19afd7a20c80571ddfc440d0f4a98485f2879a2;hb=ebeb3d4f3058b7bbb92e7ea797cf938ec03ee2ed;hp=3ebf9cb2f25911098a43871ebf98561aed4b34c1;hpb=80e978dc2e3b4f5311cba15bc0876fb52113bd66;p=chaz%2Ftar diff --git a/src/names.c b/src/names.c index 3ebf9cb..a19afd7 100644 --- a/src/names.c +++ b/src/names.c @@ -608,9 +608,11 @@ bool all_names_found (struct tar_stat_info *p) { struct name const *cursor; - size_t len = strlen (p->file_name); - if (occurrence_option == 0 || p->had_trailing_slash) + size_t len; + + if (!p->file_name || occurrence_option == 0 || p->had_trailing_slash) return false; + len = strlen (p->file_name); for (cursor = namelist; cursor; cursor = cursor->next) { if (cursor->regexp @@ -1022,9 +1024,14 @@ safer_name_suffix (char const *file_name, bool link_target) for (p = file_name + prefix_len; *p; ) { - if (p[0] == '.' && p[1] == '.' && (ISSLASH (p[2]) || !p[2])) - prefix_len = p + 2 - file_name; - + if (p[0] == '.') + { + if (p[1] == '.' && (ISSLASH (p[2]) || !p[2])) + prefix_len = p + 2 - file_name; + else if (ISSLASH (p[1])) + prefix_len = p + 1 - file_name; + } + do { char c = *p++; @@ -1069,7 +1076,7 @@ safer_name_suffix (char const *file_name, bool link_target) WARN ((0, 0, _(diagnostic[link_target]))); } - p = "."; + p = ISSLASH (file_name[strlen(file_name)-1]) ? "./" : "."; } return (char *) p;