Bash-4.3 patch 8
This commit is contained in:
parent
01657c6474
commit
7137b2df58
3 changed files with 36 additions and 26 deletions
|
|
@ -179,42 +179,50 @@ extglob_skipname (pat, dname, flags)
|
|||
char *pat, *dname;
|
||||
int flags;
|
||||
{
|
||||
char *pp, *pe, *t;
|
||||
int n, r;
|
||||
char *pp, *pe, *t, *se;
|
||||
int n, r, negate;
|
||||
|
||||
negate = *pat == '!';
|
||||
pp = pat + 2;
|
||||
pe = pp + strlen (pp) - 1; /*(*/
|
||||
if (*pe != ')')
|
||||
return 0;
|
||||
if ((t = strchr (pp, '|')) == 0) /* easy case first */
|
||||
se = pp + strlen (pp) - 1; /* end of string */
|
||||
pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */
|
||||
/* we should check for invalid extglob pattern here */
|
||||
/* if pe != se we have more of the pattern at the end of the extglob
|
||||
pattern. Check the easy case first ( */
|
||||
if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0)
|
||||
{
|
||||
*pe = '\0';
|
||||
#if defined (HANDLE_MULTIBYTE)
|
||||
r = mbskipname (pp, dname, flags);
|
||||
#else
|
||||
r = skipname (pp, dname, flags); /*(*/
|
||||
#endif
|
||||
*pe = ')';
|
||||
return r;
|
||||
}
|
||||
|
||||
/* check every subpattern */
|
||||
while (t = glob_patscan (pp, pe, '|'))
|
||||
{
|
||||
n = t[-1];
|
||||
t[-1] = '\0';
|
||||
#if defined (HANDLE_MULTIBYTE)
|
||||
r = mbskipname (pp, dname, flags);
|
||||
#else
|
||||
r = skipname (pp, dname, flags);
|
||||
#endif
|
||||
t[-1] = n;
|
||||
if (r == 0) /* if any pattern says not skip, we don't skip */
|
||||
return r;
|
||||
pp = t;
|
||||
} /*(*/
|
||||
|
||||
if (pp == pe) /* glob_patscan might find end of pattern */
|
||||
/* glob_patscan might find end of pattern */
|
||||
if (pp == se)
|
||||
return r;
|
||||
|
||||
*pe = '\0';
|
||||
# if defined (HANDLE_MULTIBYTE)
|
||||
r = mbskipname (pp, dname, flags); /*(*/
|
||||
# else
|
||||
r = skipname (pp, dname, flags); /*(*/
|
||||
# endif
|
||||
*pe = ')';
|
||||
return r;
|
||||
/* but if it doesn't then we didn't match a leading dot */
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -277,20 +285,23 @@ wextglob_skipname (pat, dname, flags)
|
|||
int flags;
|
||||
{
|
||||
#if EXTENDED_GLOB
|
||||
wchar_t *pp, *pe, *t, n;
|
||||
int r;
|
||||
wchar_t *pp, *pe, *t, n, *se;
|
||||
int r, negate;
|
||||
|
||||
negate = *pat == L'!';
|
||||
pp = pat + 2;
|
||||
pe = pp + wcslen (pp) - 1; /*(*/
|
||||
if (*pe != L')')
|
||||
return 0;
|
||||
if ((t = wcschr (pp, L'|')) == 0)
|
||||
se = pp + wcslen (pp) - 1; /*(*/
|
||||
pe = glob_patscan_wc (pp, se, 0);
|
||||
|
||||
if (pe == se && *pe == ')' && (t = wcschr (pp, L'|')) == 0)
|
||||
{
|
||||
*pe = L'\0';
|
||||
r = wchkname (pp, dname); /*(*/
|
||||
*pe = L')';
|
||||
return r;
|
||||
}
|
||||
|
||||
/* check every subpattern */
|
||||
while (t = glob_patscan_wc (pp, pe, '|'))
|
||||
{
|
||||
n = t[-1];
|
||||
|
|
@ -305,10 +316,8 @@ wextglob_skipname (pat, dname, flags)
|
|||
if (pp == pe) /* glob_patscan_wc might find end of pattern */
|
||||
return r;
|
||||
|
||||
*pe = L'\0';
|
||||
r = wchkname (pp, dname); /*(*/
|
||||
*pe = L')';
|
||||
return r;
|
||||
/* but if it doesn't then we didn't match a leading dot */
|
||||
return 0;
|
||||
#else
|
||||
return (wchkname (pat, dname));
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -210,6 +210,7 @@ extglob_pattern_p (pat)
|
|||
case '+':
|
||||
case '!':
|
||||
case '@':
|
||||
case '?':
|
||||
return (pat[1] == LPAREN);
|
||||
default:
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -25,6 +25,6 @@
|
|||
regexp `^#define[ ]*PATCHLEVEL', since that's what support/mkversion.sh
|
||||
looks for to find the patch level (for the sccs version string). */
|
||||
|
||||
#define PATCHLEVEL 7
|
||||
#define PATCHLEVEL 8
|
||||
|
||||
#endif /* _PATCHLEVEL_H_ */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue