]> sjero.net Git - wget/commitdiff
Print arguments of fnmatch properly; don't use fnmatch if we're not in globbing mode.
authorMicah Cowan <micah@cowan.name>
Sat, 8 Dec 2007 22:21:37 +0000 (14:21 -0800)
committerMicah Cowan <micah@cowan.name>
Sat, 8 Dec 2007 22:21:37 +0000 (14:21 -0800)
src/ChangeLog
src/ftp.c

index 39045d96c70a69b8124847da3f547b4e1cc23d3c..9313ff4696eec5383cfdae3a00d412ca4fc5d4e5 100644 (file)
@@ -1,3 +1,10 @@
+2007-12-08  Hrvoje Niksic  <hniksic@xemacs.org>
+
+       * ftp.c (ftp_retrieve_glob): Print both arguments of fnmatch in
+       fnmatch error message.
+       (ftp_retrieve_glob): Don't match with fnmatch if we're only
+       supposed to get one file.
+
 2007-12-07  Micah Cowan  <micah@cowan.name>
 
        * Makefile.am: Plug in vars to include stuff from
index a9ff9437a2f343be1be6bb2f04d539afe87b0eec..ff5c1e72f896e7e1b028369264868396f1dd8123 100644 (file)
--- a/src/ftp.c
+++ b/src/ftp.c
@@ -1716,31 +1716,47 @@ ftp_retrieve_glob (struct url *u, ccon *con, int action)
     }
   /* Now weed out the files that do not match our globbing pattern.
      If we are dealing with a globbing pattern, that is.  */
-  if (*u->file && (action == GLOB_GLOBALL || action == GLOB_GETONE))
+  if (*u->file)
     {
-      int (*matcher) (const char *, const char *, int)
-        = opt.ignore_case ? fnmatch_nocase : fnmatch;
-      int matchres = 0;
-
-      f = start;
-      while (f)
+      if (action == GLOB_GLOBALL)
         {
-          matchres = matcher (u->file, f->name, 0);
+          int (*matcher) (const char *, const char *, int)
+            = opt.ignore_case ? fnmatch_nocase : fnmatch;
+          int matchres = 0;
+
+          f = start;
+          while (f)
+            {
+              matchres = matcher (u->file, f->name, 0);
+              if (matchres == -1)
+                {
+                  logprintf (LOG_NOTQUIET, _("Error matching %s against %s: %s\n"),
+                             u->file, escnonprint (f->name), strerror (errno));
+                  break;
+                }
+              if (matchres == FNM_NOMATCH)
+                f = delelement (f, &start); /* delete the element from the list */
+              else
+                f = f->next;        /* leave the element in the list */
+            }
           if (matchres == -1)
             {
-              logprintf (LOG_NOTQUIET, "%s: %s\n", con->target,
-                         strerror (errno));
-              break;
+              freefileinfo (start);
+              return RETRBADPATTERN;
             }
-          if (matchres == FNM_NOMATCH)
-            f = delelement (f, &start); /* delete the element from the list */
-          else
-            f = f->next;        /* leave the element in the list */
         }
-      if (matchres == -1)
+      else if (action == GLOB_GETONE)
         {
-          freefileinfo (start);
-          return RETRBADPATTERN;
+          int (*cmp) (const char *, const char *)
+            = opt.ignore_case ? strcasecmp : strcmp;
+          f = start;
+          while (f)
+            {
+              if (0 != cmp(u->file, f->name))
+                f = delelement (f, &start);
+              else
+                f = f->next;
+            }
         }
     }
   if (start)
@@ -1748,7 +1764,7 @@ ftp_retrieve_glob (struct url *u, ccon *con, int action)
       /* Just get everything.  */
       ftp_retrieve_list (u, start, con);
     }
-  else if (!start)
+  else
     {
       if (action == GLOB_GLOBALL)
         {