SCCS-vsn: lib/libc/gen/glob.c 5.16
*/
#if defined(LIBC_SCCS) && !defined(lint)
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)glob.c 5.15 (Berkeley) %G%";
+static char sccsid[] = "@(#)glob.c 5.16 (Berkeley) %G%";
#endif /* LIBC_SCCS and not lint */
/*
#endif /* LIBC_SCCS and not lint */
/*
break;
case STAR:
pglob->gl_flags |= GLOB_MAGCHAR;
break;
case STAR:
pglob->gl_flags |= GLOB_MAGCHAR;
+ /* collapse adjacent stars to one,
+ * to avoid exponential behavior
+ */
+ if (bufnext == patbuf || bufnext[-1] != M_ALL)
+ *bufnext++ = M_ALL;
break;
default:
*bufnext++ = CHAR(c);
break;
default:
*bufnext++ = CHAR(c);
case M_ALL:
if (pat == patend)
return(1);
case M_ALL:
if (pat == patend)
return(1);
- for (; *name != EOS; ++name)
- if (match(name, pat, patend))
- return(1);
+ do
+ if (match(name, pat, patend))
+ return(1);
+ while (*name++ != EOS);
return(0);
case M_ONE:
if (*name++ == EOS)
return(0);
case M_ONE:
if (*name++ == EOS)