]> git.ipfire.org Git - thirdparty/make.git/commitdiff
Formerly ar.c.~5~
authorRoland McGrath <roland@redhat.com>
Thu, 10 Jun 1993 22:13:54 +0000 (22:13 +0000)
committerRoland McGrath <roland@redhat.com>
Thu, 10 Jun 1993 22:13:54 +0000 (22:13 +0000)
ar.c

diff --git a/ar.c b/ar.c
index 726ceb9a55a1ebfd48d0656dd13468c274e2faa9..29ee43b79a10c07bce79694336856e754bf01f8a 100644 (file)
--- a/ar.c
+++ b/ar.c
@@ -225,6 +225,40 @@ ar_glob_alphacompare (a, b)
   return strcmp (*a, *b);
 }
 
+/* Return nonzero if PATTERN contains any metacharacters.
+   Metacharacters can be quoted with backslashes if QUOTE is nonzero.  */
+static int
+glob_pattern_p (pattern, quote)
+     const char *pattern;
+     const int quote;
+{
+  register const char *p;
+  int open = 0;
+
+  for (p = pattern; *p != '\0'; ++p)
+    switch (*p)
+      {
+      case '?':
+      case '*':
+       return 1;
+
+      case '\\':
+       if (quote)
+         ++p;
+       break;
+
+      case '[':
+       open = 1;
+       break;
+
+      case ']':
+       if (open)
+         return 1;
+       break;
+      }
+
+  return 0;
+}
 
 /* Glob for MEMBER_PATTERN in archive ARNAME.
    Return a malloc'd chain of matching elements (or nil if none).  */
@@ -239,6 +273,9 @@ ar_glob (arname, member_pattern, size)
   struct nameseq *n;
   unsigned int i;
 
+  if (! glob_pattern_p (member_pattern, 1))
+    return 0;
+
   /* Scan the archive for matches.
      ar_glob_match will accumulate them in STATE.chain.  */
   i = strlen (arname);