1/* Copyright (C) 1991-2005 Free Software Foundation, Inc. 2 3 This file is part of GNU Bash, the Bourne Again SHell. 4 5 Bash is free software; you can redistribute it and/or modify it under 6 the terms of the GNU General Public License as published by the Free 7 Software Foundation; either version 2, or (at your option) any later 8 version. 9 10 Bash is distributed in the hope that it will be useful, but WITHOUT ANY 11 WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13 for more details. 14 15 You should have received a copy of the GNU General Public License along 16 with Bash; see the file COPYING. If not, write to the Free Software 17 Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ 18 19static int INTERNAL_GLOB_PATTERN_P __P((const CHAR *)); 20 21/* Return nonzero if PATTERN has any special globbing chars in it. 22 Compiled twice, once each for single-byte and multibyte characters. */ 23static int 24INTERNAL_GLOB_PATTERN_P (pattern) 25 const CHAR *pattern; 26{ 27 register const CHAR *p; 28 register CHAR c; 29 int bopen; 30 31 p = pattern; 32 bopen = 0; 33 34 while ((c = *p++) != L('\0')) 35 switch (c) 36 { 37 case L('?'): 38 case L('*'): 39 return 1; 40 41 case L('['): /* Only accept an open brace if there is a close */ 42 bopen++; /* brace to match it. Bracket expressions must be */ 43 continue; /* complete, according to Posix.2 */ 44 case L(']'): 45 if (bopen) 46 return 1; 47 continue; 48 49 case L('+'): /* extended matching operators */ 50 case L('@'): 51 case L('!'): 52 if (*p == L('(')) /*) */ 53 return 1; 54 continue; 55 56 case L('\\'): 57 if (*p++ == L('\0')) 58 return 0; 59 } 60 61 return 0; 62} 63 64#undef INTERNAL_GLOB_PATTERN_P 65#undef L 66#undef INT 67#undef CHAR 68