1 /* Shared definition for glob and glob_pattern_p. 2 Copyright (C) 2017-2022 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; if not, see 17 <https://www.gnu.org/licenses/>. */ 18 19 #ifndef GLOB_INTERNAL_H 20 # define GLOB_INTERNAL_H 21 22 enum 23 { 24 GLOBPAT_NONE = 0x0, 25 GLOBPAT_SPECIAL = 0x1, 26 GLOBPAT_BACKSLASH = 0x2, 27 GLOBPAT_BRACKET = 0x4 28 }; 29 30 static inline int __glob_pattern_type(const char * pattern,int quote)31__glob_pattern_type (const char *pattern, int quote) 32 { 33 const char *p; 34 int ret = GLOBPAT_NONE; 35 36 for (p = pattern; *p != '\0'; ++p) 37 switch (*p) 38 { 39 case '?': 40 case '*': 41 return GLOBPAT_SPECIAL; 42 43 case '\\': 44 if (quote) 45 { 46 if (p[1] != '\0') 47 ++p; 48 ret |= GLOBPAT_BACKSLASH; 49 } 50 break; 51 52 case '[': 53 ret |= GLOBPAT_BRACKET; 54 break; 55 56 case ']': 57 if (ret & 4) 58 return GLOBPAT_SPECIAL; 59 break; 60 } 61 62 return ret; 63 } 64 65 #endif /* GLOB_INTERNAL_H */ 66