yann@1: 2001-11-29 Jakub Jelinek yann@1: yann@1: * sysdeps/generic/glob.c (next_brace_sub): Return NULL if braces yann@1: don't match, fix {{a,b},c} globbing, clean up. yann@1: Patch by Flavio Veloso . yann@1: yann@1: --- libc/sysdeps/generic/glob.c.jj Thu Aug 23 18:49:29 2001 yann@1: +++ libc/sysdeps/generic/glob.c Thu Nov 29 13:17:21 2001 yann@1: @@ -355,42 +355,14 @@ static yann@1: inline yann@1: #endif yann@1: const char * yann@1: -next_brace_sub (begin) yann@1: - const char *begin; yann@1: +next_brace_sub (cp) yann@1: + const char *cp; yann@1: { yann@1: unsigned int depth = 0; yann@1: - const char *cp = begin; yann@1: - yann@1: - while (1) yann@1: - { yann@1: - if (depth == 0) yann@1: - { yann@1: - if (*cp != ',' && *cp != '}' && *cp != '\0') yann@1: - { yann@1: - if (*cp == '{') yann@1: - ++depth; yann@1: - ++cp; yann@1: - continue; yann@1: - } yann@1: - } yann@1: - else yann@1: - { yann@1: - while (*cp != '\0' && (*cp != '}' || depth > 0)) yann@1: - { yann@1: - if (*cp == '}') yann@1: - --depth; yann@1: - ++cp; yann@1: - } yann@1: - if (*cp == '\0') yann@1: - /* An incorrectly terminated brace expression. */ yann@1: - return NULL; yann@1: - yann@1: - continue; yann@1: - } yann@1: - break; yann@1: - } yann@1: - yann@1: - return cp; yann@1: + while (*cp != '\0' && (*cp != '}' || depth--) && (*cp != ',' || depth)) yann@1: + if (*cp++ == '{') yann@1: + depth++; yann@1: + return *cp != '\0' ? cp : NULL; yann@1: } yann@1: yann@1: #endif /* !GLOB_ONLY_P */