When we have two match patterns, e.g., because the repository layout changed and we look for old and new style files, we can have the case that one pattern suggests a descend into a subdir but the other pattern would be a direct match. This was missed and only the descent was done. Yet the other way round also has to be covered: We can't just use the direct match because it might be that it's rejected if the type doesn't fit (directory vs. regular file). In this case we should still descent. Remember that we want to descend but continue checking the other pattern first to maybe get a direct match. Introduce a new combined return code YES_AND_RETRY to give the full information to the caller which now can decide to fallback to a descent. While at it, use the stat info for the directory check. Also add tests to ensure that the order of patterns doesn't matter and we handle the above corner cases.
18 lines
570 B
C
18 lines
570 B
C
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
#pragma once
|
|
|
|
#include "sysupdate-forward.h"
|
|
|
|
enum {
|
|
PATTERN_MATCH_NO,
|
|
PATTERN_MATCH_YES,
|
|
PATTERN_MATCH_RETRY,
|
|
PATTERN_MATCH_YES_AND_RETRY,
|
|
};
|
|
|
|
int pattern_match(const char *pattern, const char *s, InstanceMetadata *ret);
|
|
int pattern_match_many(char **patterns, const char *s, InstanceMetadata *ret);
|
|
int pattern_valid(const char *pattern);
|
|
int pattern_format(const char *pattern, const InstanceMetadata *fields, char **ret);
|
|
bool pattern_skip_glob_directory_prefix(const char **pattern);
|