X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fftp.c;h=ff5c1e72f896e7e1b028369264868396f1dd8123;hp=a9ff9437a2f343be1be6bb2f04d539afe87b0eec;hb=d26ff3ca0d7998696a9657653d0ffae0b59934b6;hpb=6b4d44ff0b01421e764cc8a2c9bf62e08ceea9fb diff --git a/src/ftp.c b/src/ftp.c index a9ff9437..ff5c1e72 100644 --- 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) {