Browse Source

(exclusion_tag_warning, check_exclusion_tags): Remove static qualifier.
(check_exclusion_tags): account for dirname without terminating
slash.
(dump_dir0): exclusion_tag_all is handled elsewhere.

Sergey Poznyakoff 17 years ago
parent
commit
b0d5935cb0
1 changed files with 10 additions and 4 deletions
  1. 10 4
      src/create.c

+ 10 - 4
src/create.c

@@ -58,7 +58,7 @@ add_exclusion_tag (const char *name, enum exclusion_tag_type type,
   exclusion_tags = tag;
 }
 
-static void
+void
 exclusion_tag_warning (const char *dirname, const char *tagname,
 		       const char *message)
 {
@@ -70,18 +70,19 @@ exclusion_tag_warning (const char *dirname, const char *tagname,
 	   message));
 }
 
-static enum exclusion_tag_type 
+enum exclusion_tag_type 
 check_exclusion_tags (char *dirname, const char **tag_file_name)
 {
   static char *tagname;
   static size_t tagsize;
   struct exclusion_tag *tag;
   size_t dlen = strlen (dirname);
+  int addslash = dirname[dlen-1] != '/';
   char *nptr = NULL;
   
   for (tag = exclusion_tags; tag; tag = tag->next)
     {
-      size_t size = dlen + tag->length + 1;
+      size_t size = dlen + addslash + tag->length + 1;
       if (size > tagsize)
 	{
 	  tagsize = size;
@@ -92,6 +93,8 @@ check_exclusion_tags (char *dirname, const char **tag_file_name)
 	{
 	  strcpy (tagname, dirname);
 	  nptr = tagname + dlen;
+	  if (addslash)
+	    *nptr++ = '/';
 	}
       strcpy (nptr, tag->name);
       if (access (tagname, F_OK) == 0
@@ -1182,8 +1185,11 @@ dump_dir0 (char *directory,
       
       switch (check_exclusion_tags (st->orig_file_name, &tag_file_name))
 	{
-	case exclusion_tag_none:
 	case exclusion_tag_all:
+	  /* Handled in dump_file0 */
+	  break;
+	  
+	case exclusion_tag_none:
 	  {
 	    char const *entry;
 	    size_t entry_len;