Print arguments of fnmatch properly; don't use fnmatch if we're not in globbing mode.

This commit is contained in:
Micah Cowan 2007-12-08 14:21:37 -08:00
parent 6b4d44ff0b
commit d26ff3ca0d
2 changed files with 42 additions and 19 deletions

View 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> 2007-12-07 Micah Cowan <micah@cowan.name>
* Makefile.am: Plug in vars to include stuff from * Makefile.am: Plug in vars to include stuff from

View File

@ -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. /* Now weed out the files that do not match our globbing pattern.
If we are dealing with a globbing pattern, that is. */ 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) if (action == GLOB_GLOBALL)
= opt.ignore_case ? fnmatch_nocase : fnmatch;
int matchres = 0;
f = start;
while (f)
{ {
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) if (matchres == -1)
{ {
logprintf (LOG_NOTQUIET, "%s: %s\n", con->target, freefileinfo (start);
strerror (errno)); return RETRBADPATTERN;
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) else if (action == GLOB_GETONE)
{ {
freefileinfo (start); int (*cmp) (const char *, const char *)
return RETRBADPATTERN; = 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) if (start)
@ -1748,7 +1764,7 @@ ftp_retrieve_glob (struct url *u, ccon *con, int action)
/* Just get everything. */ /* Just get everything. */
ftp_retrieve_list (u, start, con); ftp_retrieve_list (u, start, con);
} }
else if (!start) else
{ {
if (action == GLOB_GLOBALL) if (action == GLOB_GLOBALL)
{ {