Coverage Report

Created: 2024-03-08 06:32

/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-2024 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.5k
{
33
52.5k
  const char *p;
34
52.5k
  int ret = GLOBPAT_NONE;
35
36
792k
  for (p = pattern; *p != '\0'; ++p)
37
741k
    switch (*p)
38
741k
      {
39
741
      case '?':
40
1.42k
      case '*':
41
1.42k
        return GLOBPAT_SPECIAL;
42
43
2.53k
      case '\\':
44
2.53k
        if (quote)
45
2.53k
          {
46
2.53k
            if (p[1] != '\0')
47
2.02k
              ++p;
48
2.53k
            ret |= GLOBPAT_BACKSLASH;
49
2.53k
          }
50
2.53k
        break;
51
52
990
      case '[':
53
990
        ret |= GLOBPAT_BRACKET;
54
990
        break;
55
56
724
      case ']':
57
724
        if (ret & 4)
58
334
          return GLOBPAT_SPECIAL;
59
390
        break;
60
741k
      }
61
62
50.8k
  return ret;
63
52.5k
}
64
65
#endif /* GLOB_INTERNAL_H  */