summaryrefslogtreecommitdiff
path: root/filesystems/squashfs/patches/patch-action.c
diff options
context:
space:
mode:
Diffstat (limited to 'filesystems/squashfs/patches/patch-action.c')
-rw-r--r--filesystems/squashfs/patches/patch-action.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/filesystems/squashfs/patches/patch-action.c b/filesystems/squashfs/patches/patch-action.c
new file mode 100644
index 00000000000..50f080671e3
--- /dev/null
+++ b/filesystems/squashfs/patches/patch-action.c
@@ -0,0 +1,37 @@
+$NetBSD: patch-action.c,v 1.1 2016/09/09 15:40:17 scole Exp $
+Do not use alloca and strdupa which some platforms may not have
+
+--- action.c.orig 2014-05-10 04:54:13.000000000 +0000
++++ action.c
+@@ -43,6 +43,7 @@
+ #include "mksquashfs.h"
+ #include "action.h"
+ #include "error.h"
++#include "fnm_extmatch.h"
+
+ /*
+ * code to parse actions
+@@ -1953,9 +1954,22 @@ static char *get_start(char *s, int n)
+
+ static int subpathname_fn(struct atom *atom, struct action_data *action_data)
+ {
+- return fnmatch(atom->argv[0], get_start(strdupa(action_data->subpath),
++ /* XXX some platforms might not have alloca, strdupa */
++ int ret_val;
++ char *copy_str;
++
++ if ((copy_str = strdup(action_data->subpath)) == NULL) {
++ fprintf(stderr, "Out of mem\n");
++ exit(1);
++ }
++
++ ret_val = fnmatch(atom->argv[0],get_start(copy_str,
+ count_components(atom->argv[0])),
+ FNM_PATHNAME|FNM_PERIOD|FNM_EXTMATCH) == 0;
++
++ free(copy_str);
++
++ return ret_val;
+ }
+
+ TEST_VAR_FN(filesize, ACTION_REG, action_data->buf->st_size)