mirror of
https://github.com/morgan9e/systemd
synced 2026-04-15 00:47:10 +09:00
strv: modernize strv_fnmatch() a bit
This commit is contained in:
committed by
Yu Watanabe
parent
b0c9fd8103
commit
bcfc0e8872
@@ -828,13 +828,26 @@ char** strv_shell_escape(char **l, const char *bad) {
|
||||
return l;
|
||||
}
|
||||
|
||||
bool strv_fnmatch_full(char* const* patterns, const char *s, int flags, size_t *matched_pos) {
|
||||
for (size_t i = 0; patterns && patterns[i]; i++)
|
||||
if (fnmatch(patterns[i], s, flags) == 0) {
|
||||
if (matched_pos)
|
||||
*matched_pos = i;
|
||||
return true;
|
||||
}
|
||||
bool strv_fnmatch_full(
|
||||
char* const* patterns,
|
||||
const char *s,
|
||||
int flags,
|
||||
size_t *ret_matched_pos) {
|
||||
|
||||
assert(s);
|
||||
|
||||
if (patterns)
|
||||
for (size_t i = 0; patterns[i]; i++)
|
||||
/* NB: We treat all fnmatch() errors as equivalent to FNM_NOMATCH, i.e. if fnmatch() fails to
|
||||
* process the pattern for some reason we'll consider this equivalent to non-matching. */
|
||||
if (fnmatch(patterns[i], s, flags) == 0) {
|
||||
if (ret_matched_pos)
|
||||
*ret_matched_pos = i;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (ret_matched_pos)
|
||||
*ret_matched_pos = SIZE_MAX;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -240,7 +240,7 @@ void strv_print(char * const *l);
|
||||
char** strv_reverse(char **l);
|
||||
char** strv_shell_escape(char **l, const char *bad);
|
||||
|
||||
bool strv_fnmatch_full(char* const* patterns, const char *s, int flags, size_t *matched_pos);
|
||||
bool strv_fnmatch_full(char* const* patterns, const char *s, int flags, size_t *ret_matched_pos);
|
||||
static inline bool strv_fnmatch(char* const* patterns, const char *s) {
|
||||
return strv_fnmatch_full(patterns, s, 0, NULL);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user