mirror of
https://salsa.debian.org/srivasta/make-dfsg.git
synced 2025-01-30 08:21:56 +00:00
Avoid invoking glob() unless the filename has potential globbing
characters in it, for performance improvements.
This commit is contained in:
parent
15a79d723d
commit
a81ee5209b
2 changed files with 41 additions and 25 deletions
|
@ -1,3 +1,9 @@
|
|||
2011-05-01 Paul Smith <psmith@gnu.org>
|
||||
|
||||
* read.c (parse_file_seq): Don't try to invoke glob() unless there
|
||||
are potential wildcard characters in the filename. Performance
|
||||
enhancement suggested by Michael Meeks <michael.meeks@novell.com>
|
||||
|
||||
2011-04-29 Boris Kolpackov <boris@codesynthesis.com>
|
||||
|
||||
* read.c (eval_makefile): Delay caching of the file name until after
|
||||
|
|
60
read.c
60
read.c
|
@ -2901,6 +2901,7 @@ parse_file_seq (char **stringp, unsigned int size, int stopchar,
|
|||
const char *name;
|
||||
const char **nlist = 0;
|
||||
char *tildep = 0;
|
||||
int globme = 1;
|
||||
#ifndef NO_ARCHIVES
|
||||
char *arname = 0;
|
||||
char *memname = 0;
|
||||
|
@ -3109,32 +3110,40 @@ parse_file_seq (char **stringp, unsigned int size, int stopchar,
|
|||
}
|
||||
#endif /* !NO_ARCHIVES */
|
||||
|
||||
switch (glob (name, GLOB_NOSORT|GLOB_ALTDIRFUNC, NULL, &gl))
|
||||
{
|
||||
case GLOB_NOSPACE:
|
||||
fatal (NILF, _("virtual memory exhausted"));
|
||||
|
||||
case 0:
|
||||
/* Success. */
|
||||
i = gl.gl_pathc;
|
||||
nlist = (const char **)gl.gl_pathv;
|
||||
break;
|
||||
|
||||
case GLOB_NOMATCH:
|
||||
/* If we want only existing items, skip this one. */
|
||||
if (flags & PARSEFS_EXISTS)
|
||||
{
|
||||
i = 0;
|
||||
break;
|
||||
}
|
||||
/* FALLTHROUGH */
|
||||
|
||||
default:
|
||||
/* By default keep this name. */
|
||||
/* glob() is expensive: don't call it unless we need to. */
|
||||
if (!(flags & PARSEFS_EXISTS) || strpbrk (name, "?*[") == NULL)
|
||||
{
|
||||
globme = 0;
|
||||
i = 1;
|
||||
nlist = &name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
switch (glob (name, GLOB_NOSORT|GLOB_ALTDIRFUNC, NULL, &gl))
|
||||
{
|
||||
case GLOB_NOSPACE:
|
||||
fatal (NILF, _("virtual memory exhausted"));
|
||||
|
||||
case 0:
|
||||
/* Success. */
|
||||
i = gl.gl_pathc;
|
||||
nlist = (const char **)gl.gl_pathv;
|
||||
break;
|
||||
|
||||
case GLOB_NOMATCH:
|
||||
/* If we want only existing items, skip this one. */
|
||||
if (flags & PARSEFS_EXISTS)
|
||||
{
|
||||
i = 0;
|
||||
break;
|
||||
}
|
||||
/* FALLTHROUGH */
|
||||
|
||||
default:
|
||||
/* By default keep this name. */
|
||||
i = 1;
|
||||
nlist = &name;
|
||||
break;
|
||||
}
|
||||
|
||||
/* For each matched element, add it to the list. */
|
||||
while (i-- > 0)
|
||||
|
@ -3174,7 +3183,8 @@ parse_file_seq (char **stringp, unsigned int size, int stopchar,
|
|||
#endif /* !NO_ARCHIVES */
|
||||
NEWELT (concat (2, prefix, nlist[i]));
|
||||
|
||||
globfree (&gl);
|
||||
if (globme)
|
||||
globfree (&gl);
|
||||
|
||||
#ifndef NO_ARCHIVES
|
||||
if (arname)
|
||||
|
|
Loading…
Reference in a new issue