mirror of
https://salsa.debian.org/srivasta/make-dfsg.git
synced 2025-01-30 16:41:44 +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>
|
2011-04-29 Boris Kolpackov <boris@codesynthesis.com>
|
||||||
|
|
||||||
* read.c (eval_makefile): Delay caching of the file name until after
|
* 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 *name;
|
||||||
const char **nlist = 0;
|
const char **nlist = 0;
|
||||||
char *tildep = 0;
|
char *tildep = 0;
|
||||||
|
int globme = 1;
|
||||||
#ifndef NO_ARCHIVES
|
#ifndef NO_ARCHIVES
|
||||||
char *arname = 0;
|
char *arname = 0;
|
||||||
char *memname = 0;
|
char *memname = 0;
|
||||||
|
@ -3109,32 +3110,40 @@ parse_file_seq (char **stringp, unsigned int size, int stopchar,
|
||||||
}
|
}
|
||||||
#endif /* !NO_ARCHIVES */
|
#endif /* !NO_ARCHIVES */
|
||||||
|
|
||||||
switch (glob (name, GLOB_NOSORT|GLOB_ALTDIRFUNC, NULL, &gl))
|
/* glob() is expensive: don't call it unless we need to. */
|
||||||
{
|
if (!(flags & PARSEFS_EXISTS) || strpbrk (name, "?*[") == NULL)
|
||||||
case GLOB_NOSPACE:
|
{
|
||||||
fatal (NILF, _("virtual memory exhausted"));
|
globme = 0;
|
||||||
|
|
||||||
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;
|
i = 1;
|
||||||
nlist = &name;
|
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. */
|
/* For each matched element, add it to the list. */
|
||||||
while (i-- > 0)
|
while (i-- > 0)
|
||||||
|
@ -3174,7 +3183,8 @@ parse_file_seq (char **stringp, unsigned int size, int stopchar,
|
||||||
#endif /* !NO_ARCHIVES */
|
#endif /* !NO_ARCHIVES */
|
||||||
NEWELT (concat (2, prefix, nlist[i]));
|
NEWELT (concat (2, prefix, nlist[i]));
|
||||||
|
|
||||||
globfree (&gl);
|
if (globme)
|
||||||
|
globfree (&gl);
|
||||||
|
|
||||||
#ifndef NO_ARCHIVES
|
#ifndef NO_ARCHIVES
|
||||||
if (arname)
|
if (arname)
|
||||||
|
|
Loading…
Reference in a new issue