summaryrefslogtreecommitdiffstats
path: root/loader/fnmatch-stub.c
diff options
context:
space:
mode:
Diffstat (limited to 'loader/fnmatch-stub.c')
-rw-r--r--loader/fnmatch-stub.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/loader/fnmatch-stub.c b/loader/fnmatch-stub.c
new file mode 100644
index 000000000..88de2221d
--- /dev/null
+++ b/loader/fnmatch-stub.c
@@ -0,0 +1,27 @@
+#include <stdio.h>
+#include <string.h>
+#include <fnmatch.h>
+
+/* A very simplified fnmatch which just supports one
+ * in the string and no [, ? or { */
+int fnmatch(const char *pattern, const char *string, int flags)
+{
+ const char *p, *q, *r;
+
+ if (flags == (FNM_PATHNAME | FNM_PERIOD)
+ && strpbrk (pattern, "[?{") == NULL
+ && (p = strchr (pattern, '*')) != NULL
+ && strchr (p + 1, '*') == NULL)
+ {
+ if (strncmp (string, pattern, p - pattern))
+ return FNM_NOMATCH;
+ q = strstr (string + (p - pattern), p + 1);
+ r = strchr (string + (p - pattern), '/');
+ if (q == NULL || strlen (q) != strlen (p + 1)
+ || (r != NULL && r < q))
+ return FNM_NOMATCH;
+ return 0;
+ }
+ fprintf (stderr, "fnmatch stub does not support '%s' patterns\n", pattern);
+ exit (1);
+}