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>
* 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.
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)
{