Coverage Report

Created: 2025-03-18 06:55

/src/wget2/lib/glob_internal.h
Line
Count
Source (jump to first uncovered line)
1
/* Shared definition for glob and glob_pattern_p.
2
   Copyright (C) 2017-2025 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
31
__glob_pattern_type (const char *pattern, int quote)
32
52.2k
{
33
52.2k
  const char *p;
34
52.2k
  int ret = GLOBPAT_NONE;
35
36
828k
  for (p = pattern; *p != '\0'; ++p)
37
778k
    switch (*p)
38
778k
      {
39
367
      case '?':
40
1.32k
      case '*':
41
1.32k
        return GLOBPAT_SPECIAL;
42
43
10.8k
      case '\\':
44
10.8k
        if (quote)
45
10.8k
          {
46
10.8k
            if (p[1] != '\0')
47
10.6k
              ++p;
48
10.8k
            ret |= GLOBPAT_BACKSLASH;
49
10.8k
          }
50
10.8k
        break;
51
52
1.73k
      case '[':
53
1.73k
        ret |= GLOBPAT_BRACKET;
54
1.73k
        break;
55
56
594
      case ']':
57
594
        if (ret & 4)
58
203
          return GLOBPAT_SPECIAL;
59
391
        break;
60
778k
      }
61
62
50.7k
  return ret;
63
52.2k
}
64
65
#endif /* GLOB_INTERNAL_H  */