polynomial-c 14/05/07 08:23:13 Added: bash-4.3-extglob-directory.patch Log: Added another upstream fix. Removed old (Portage version: 2.2.10/cvs/Linux x86_64, signed Manifest commit with key 0x981CA6FC)
Revision Changes Path 1.1 app-shells/bash/files/bash-4.3-extglob-directory.patch file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-shells/bash/files/bash-4.3-extglob-directory.patch?rev=1.1&view=markup plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/app-shells/bash/files/bash-4.3-extglob-directory.patch?rev=1.1&content-type=text/plain Index: bash-4.3-extglob-directory.patch =================================================================== *** ../bash-4.3-patched/lib/glob/glob.c 2014-03-28 10:54:23.000000000 -0400 --- lib/glob/glob.c 2014-05-02 10:24:28.000000000 -0400 *************** *** 124,127 **** --- 124,129 ---- extern wchar_t *glob_patscan_wc __P((wchar_t *, wchar_t *, int)); + extern char *glob_dirscan __P((char *, int)); + /* Compile `glob_loop.c' for single-byte characters. */ #define CHAR unsigned char *************** *** 188,191 **** --- 190,196 ---- pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */ /* we should check for invalid extglob pattern here */ + if (pe == 0) + return 0; + /* if pe != se we have more of the pattern at the end of the extglob pattern. Check the easy case first ( */ *************** *** 1016,1020 **** char **result; unsigned int result_size; ! char *directory_name, *filename, *dname; unsigned int directory_len; int free_dirname; /* flag */ --- 1021,1025 ---- char **result; unsigned int result_size; ! char *directory_name, *filename, *dname, *fn; unsigned int directory_len; int free_dirname; /* flag */ *************** *** 1032,1035 **** --- 1037,1052 ---- /* Find the filename. */ filename = strrchr (pathname, '/'); + #if defined (EXTENDED_GLOB) + if (filename && extended_glob) + { + fn = glob_dirscan (pathname, '/'); + #if DEBUG_MATCHING + if (fn != filename) + fprintf (stderr, "glob_filename: glob_dirscan: fn (%s) != filename (%s)\n", fn ? fn : "(null)", filename); + #endif + filename = fn; + } + #endif + if (filename == NULL) { *** ../bash-4.3-patched/lib/glob/gmisc.c 2014-03-28 10:54:23.000000000 -0400 --- lib/glob/gmisc.c 2014-05-02 09:35:57.000000000 -0400 *************** *** 43,46 **** --- 43,48 ---- #define WRPAREN L')' + extern char *glob_patscan __P((char *, char *, int)); + /* Return 1 of the first character of WSTRING could match the first character of pattern WPAT. Wide character version. */ *************** *** 376,377 **** --- 378,410 ---- return matlen; } + + /* Skip characters in PAT and return the final occurrence of DIRSEP. This + is only called when extended_glob is set, so we have to skip over extglob + patterns x(...) */ + char * + glob_dirscan (pat, dirsep) + char *pat; + int dirsep; + { + char *p, *d, *pe, *se; + + d = pe = se = 0; + for (p = pat; p && *p; p++) + { + if (extglob_pattern_p (p)) + { + if (se == 0) + se = p + strlen (p) - 1; + pe = glob_patscan (p + 2, se, 0); + if (pe == 0) + continue; + else if (*pe == 0) + break; + p = pe - 1; /* will do increment above */ + continue; + } + if (*p == dirsep) + d = p; + } + return d; + }
