]> Dogcows Code - chaz/tar/blobdiff - src/names.c
Updated
[chaz/tar] / src / names.c
index 5fdc43321a2eed92af7b445fb12d005def7b1d31..a19afd7a20c80571ddfc440d0f4a98485f2879a2 100644 (file)
@@ -20,9 +20,7 @@
 #include "system.h"
 
 #include <fnmatch.h>
-#include <grp.h>
 #include <hash.h>
-#include <pwd.h>
 #include <quotearg.h>
 
 #include "common.h"
@@ -610,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
@@ -1024,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++;
@@ -1071,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;
This page took 0.021187 seconds and 4 git commands to generate.