Line | Branch | Exec | Source |
---|---|---|---|
1 | static const struct DirPrefixMap { | ||
2 | const char NONSTRING dir[15]; | ||
3 | uint8_t dir_len; | ||
4 | FileTypeEnum filetype; | ||
5 | } prefixes[] = { | ||
6 | {STRN("/etc/default/"), SH}, | ||
7 | {STRN("/etc/firejail/"), CONFIG}, | ||
8 | {STRN("/etc/nginx/"), NGINX}, | ||
9 | {STRN("/etc/pam.d/"), CONFIG}, | ||
10 | {STRN("/etc/sudoers.d/"), CONFIG}, | ||
11 | }; | ||
12 | |||
13 | 24 | UNITTEST { | |
14 |
2/2✓ Branch 0 (14→3) taken 120 times.
✓ Branch 1 (14→15) taken 24 times.
|
144 | for (size_t i = 0; i < ARRAYLEN(prefixes); i++) { |
15 | 120 | const struct DirPrefixMap *p = &prefixes[i]; | |
16 | 120 | BUG_ON(p->dir_len < STRLEN("/a/b/")); | |
17 | 120 | BUG_ON(p->dir_len > sizeof(prefixes[0].dir)); | |
18 | 120 | BUG_ON(p->dir[0] != '/'); | |
19 | 120 | BUG_ON(p->dir[p->dir_len - 1] != '/'); | |
20 | 120 | BUG_ON(p->filetype >= NR_BUILTIN_FILETYPES); | |
21 | } | ||
22 | 24 | } | |
23 | |||
24 | 97 | static FileTypeEnum filetype_from_dir_prefix(StringView path) | |
25 | { | ||
26 |
2/2✓ Branch 0 (2→7) taken 46 times.
✓ Branch 1 (2→8) taken 51 times.
|
97 | if (path.length < 5) { |
27 | return NONE; | ||
28 | } | ||
29 |
2/2✓ Branch 0 (7→3) taken 223 times.
✓ Branch 1 (7→8) taken 43 times.
|
266 | for (size_t i = 0; i < ARRAYLEN(prefixes); i++) { |
30 | 223 | const struct DirPrefixMap *p = &prefixes[i]; | |
31 |
2/2✓ Branch 0 (4→5) taken 3 times.
✓ Branch 1 (4→6) taken 220 times.
|
223 | if (strview_has_sv_prefix(path, string_view(p->dir, p->dir_len))) { |
32 | 3 | return p->filetype; | |
33 | } | ||
34 | } | ||
35 | return NONE; | ||
36 | } | ||
37 |