summaryrefslogtreecommitdiffstats
path: root/lib/libalpm/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libalpm/util.c')
-rw-r--r--lib/libalpm/util.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
index f84fb666..15c1a67c 100644
--- a/lib/libalpm/util.c
+++ b/lib/libalpm/util.c
@@ -1249,6 +1249,37 @@ int _alpm_access(alpm_handle_t *handle, const char *dir, const char *file, int a
return ret;
}
+/** Checks whether a string matches at least one shell wildcard pattern.
+ * Checks for matches with fnmatch. Matches are inverted by prepending
+ * patterns with an exclamation mark. Preceding exclamation marks may be
+ * escaped. Subsequent matches override previous ones.
+ * @param patterns patterns to match against
+ * @param string string to check against pattern
+ * @return 0 if string matches pattern, negative if they don't match and
+ * positive if the last match was inverted
+ */
+int _alpm_fnmatch_patterns(alpm_list_t *patterns, const char *string)
+{
+ alpm_list_t *i;
+ char *pattern;
+ short inverted;
+
+ for(i = alpm_list_last(patterns); i; i = alpm_list_previous(i)) {
+ pattern = i->data;
+
+ inverted = pattern[0] == '!';
+ if(inverted || pattern[0] == '\\') {
+ pattern++;
+ }
+
+ if(_alpm_fnmatch(pattern, string) == 0) {
+ return inverted;
+ }
+ }
+
+ return -1;
+}
+
/** Checks whether a string matches a shell wildcard pattern.
* Wrapper around fnmatch.
* @param pattern pattern to match against