summaryrefslogtreecommitdiffstats
path: root/source/ap/ash/patches/ash-glob.patch
diff options
context:
space:
mode:
Diffstat (limited to 'source/ap/ash/patches/ash-glob.patch')
-rw-r--r--source/ap/ash/patches/ash-glob.patch445
1 files changed, 0 insertions, 445 deletions
diff --git a/source/ap/ash/patches/ash-glob.patch b/source/ap/ash/patches/ash-glob.patch
deleted file mode 100644
index 70013536e..000000000
--- a/source/ap/ash/patches/ash-glob.patch
+++ /dev/null
@@ -1,445 +0,0 @@
-diff -urN netbsd-sh/expand.c ash-0.3.7.orig/expand.c
---- netbsd-sh/expand.c Tue Mar 14 13:03:45 2000
-+++ ash-0.3.7.orig/expand.c Mon Apr 23 22:16:46 2001
-@@ -54,6 +54,10 @@
- #include <pwd.h>
- #include <stdlib.h>
- #include <stdio.h>
-+#if defined(__GLIBC__) && !defined(GLOB_BROKEN)
-+#include <fnmatch.h>
-+#include <glob.h>
-+#endif
-
- /*
- * Routines to expand arguments to commands. We have to deal with
-@@ -102,17 +106,30 @@
- STATIC int subevalvar __P((char *, char *, int, int, int, int));
- STATIC char *evalvar __P((char *, int));
- STATIC int varisset __P((char *, int));
-+STATIC char *strtodest __P((char *, int, int));
- STATIC void varvalue __P((char *, int, int));
- STATIC void recordregion __P((int, int, int));
- STATIC void removerecordregions __P((int));
- STATIC void ifsbreakup __P((char *, struct arglist *));
- STATIC void ifsfree __P((void));
- STATIC void expandmeta __P((struct strlist *, int));
-+#if defined(__GLIBC__) && !defined(GLOB_BROKEN)
-+STATIC const char *preglob __P((const char *));
-+STATIC void addglob __P((const glob_t *));
-+#else
- STATIC void expmeta __P((char *, char *));
-+#endif
- STATIC void addfname __P((char *));
-+#if defined(__GLIBC__) && !defined(GLOB_BROKEN)
-+STATIC int patmatch __P((char *, char *, int));
-+STATIC int patmatch2 __P((char *, char *, int));
-+STATIC char * _rmescapes __P((char *, int));
-+#else
- STATIC struct strlist *expsort __P((struct strlist *));
- STATIC struct strlist *msort __P((struct strlist *, int));
- STATIC int pmatch __P((char *, char *, int));
-+#define patmatch2 patmatch
-+#endif
- STATIC char *cvtnum __P((int, char *));
-
- /*
-@@ -371,7 +388,7 @@
- * have to rescan starting from the beginning since CTLESC
- * characters have to be processed left to right.
- */
-- CHECKSTRSPACE(8, expdest);
-+ CHECKSTRSPACE(10, expdest);
- USTPUTC('\0', expdest);
- start = stackblock();
- p = expdest - 1;
-@@ -393,7 +410,7 @@
- if (quotes)
- rmescapes(p+2);
- result = arith(p+2);
-- fmtstr(p, 10, "%d", result);
-+ fmtstr(p, 12, "%d", result);
-
- while (*p++)
- ;
-@@ -503,7 +520,7 @@
- int amount;
-
- herefd = -1;
-- argstr(p, 0);
-+ argstr(p, subtype != VSASSIGN && subtype != VSQUESTION ? EXP_CASE : 0);
- STACKSTRNUL(expdest);
- herefd = saveherefd;
- argbackq = saveargbackq;
-@@ -535,7 +552,7 @@
- for (loc = startp; loc < str; loc++) {
- c = *loc;
- *loc = '\0';
-- if (patmatch(str, startp, varflags & VSQUOTE))
-+ if (patmatch2(str, startp, varflags & VSQUOTE))
- goto recordleft;
- *loc = c;
- if ((varflags & VSQUOTE) && *loc == CTLESC)
-@@ -547,7 +564,7 @@
- for (loc = str - 1; loc >= startp;) {
- c = *loc;
- *loc = '\0';
-- if (patmatch(str, startp, varflags & VSQUOTE))
-+ if (patmatch2(str, startp, varflags & VSQUOTE))
- goto recordleft;
- *loc = c;
- loc--;
-@@ -564,7 +581,7 @@
-
- case VSTRIMRIGHT:
- for (loc = str - 1; loc >= startp;) {
-- if (patmatch(str, loc, varflags & VSQUOTE))
-+ if (patmatch2(str, loc, varflags & VSQUOTE))
- goto recordright;
- loc--;
- if ((varflags & VSQUOTE) && loc > startp &&
-@@ -580,7 +597,7 @@
-
- case VSTRIMRIGHTMAX:
- for (loc = startp; loc < str - 1; loc++) {
-- if (patmatch(str, loc, varflags & VSQUOTE))
-+ if (patmatch2(str, loc, varflags & VSQUOTE))
- goto recordright;
- if ((varflags & VSQUOTE) && *loc == CTLESC)
- loc++;
-@@ -819,6 +836,34 @@
-
-
- /*
-+ * Put a string on the stack.
-+ */
-+
-+STATIC char *
-+strtodest(p, quoted, allow_split)
-+ char *p;
-+ int quoted;
-+ int allow_split;
-+{
-+ char const *syntax;
-+
-+ if (allow_split) {
-+ syntax = quoted ? DQSYNTAX : BASESYNTAX;
-+ while (*p) {
-+ if (syntax[(int) *p] == CCTL)
-+ STPUTC(CTLESC, expdest);
-+ STPUTC(*p++, expdest);
-+ }
-+ } else
-+ while (*p)
-+ STPUTC(*p++, expdest);
-+
-+ return p;
-+}
-+
-+
-+
-+/*
- * Add the value of a specialized variable to the stack string.
- */
-
-@@ -834,22 +879,6 @@
- extern int oexitstatus;
- char sep;
- char **ap;
-- char const *syntax;
--
--#define STRTODEST(p) \
-- do {\
-- if (allow_split) { \
-- syntax = quoted? DQSYNTAX : BASESYNTAX; \
-- while (*p) { \
-- if (syntax[(int)*p] == CCTL) \
-- STPUTC(CTLESC, expdest); \
-- STPUTC(*p++, expdest); \
-- } \
-- } else \
-- while (*p) \
-- STPUTC(*p++, expdest); \
-- } while (0)
--
-
- switch (*name) {
- case '$':
-@@ -875,7 +904,7 @@
- case '@':
- if (allow_split && quoted) {
- for (ap = shellparam.p ; (p = *ap++) != NULL ; ) {
-- STRTODEST(p);
-+ p = strtodest(p, quoted, allow_split);
- if (*ap)
- STPUTC('\0', expdest);
- }
-@@ -888,21 +917,20 @@
- else
- sep = ' ';
- for (ap = shellparam.p ; (p = *ap++) != NULL ; ) {
-- STRTODEST(p);
-+ p = strtodest(p, quoted, allow_split);
- if (*ap && sep)
- STPUTC(sep, expdest);
- }
- break;
- case '0':
-- p = arg0;
-- STRTODEST(p);
-+ p = strtodest(arg0, quoted, allow_split);
- break;
- default:
- if (is_digit(*name)) {
- num = atoi(name);
- if (num > 0 && num <= shellparam.nparam) {
-- p = shellparam.p[num - 1];
-- STRTODEST(p);
-+ p = strtodest(shellparam.p[num - 1], quoted,
-+ allow_split);
- }
- }
- break;
-@@ -1054,6 +1082,98 @@
- * should be escapes. The results are stored in the list exparg.
- */
-
-+#if defined(__GLIBC__) && !defined(GLOB_BROKEN)
-+STATIC void
-+expandmeta(str, flag)
-+ struct strlist *str;
-+ int flag;
-+{
-+ const char *p;
-+ glob_t pglob;
-+ /* TODO - EXP_REDIR */
-+
-+ while (str) {
-+ if (fflag)
-+ goto nometa;
-+ p = preglob(str->text);
-+ INTOFF;
-+ switch (glob(p, GLOB_NOMAGIC, 0, &pglob)) {
-+ case 0:
-+ if (!(pglob.gl_flags & GLOB_MAGCHAR))
-+ goto nometa2;
-+ addglob(&pglob);
-+ globfree(&pglob);
-+ INTON;
-+ break;
-+ case GLOB_NOMATCH:
-+nometa2:
-+ globfree(&pglob);
-+ INTON;
-+nometa:
-+ *exparg.lastp = str;
-+ rmescapes(str->text);
-+ exparg.lastp = &str->next;
-+ break;
-+ default: /* GLOB_NOSPACE */
-+ error("Out of space");
-+ }
-+ str = str->next;
-+ }
-+}
-+
-+
-+/*
-+ * Prepare the string for glob(3).
-+ */
-+
-+STATIC const char *
-+preglob(str)
-+ const char *str;
-+{
-+ const char *p;
-+ char *q, *r;
-+ size_t len;
-+
-+ p = str;
-+ while (*p != CTLQUOTEMARK && *p != CTLESC) {
-+ if (*p++ == '\0')
-+ return str;
-+ }
-+ len = p - str;
-+ q = r = stalloc(strlen(str) + 1);
-+ if (len > 0) {
-+ memcpy(q, str, len);
-+ q += len;
-+ }
-+ do {
-+ if (*p == CTLQUOTEMARK)
-+ continue;
-+ if (*p == CTLESC) {
-+ if (*++p != '/')
-+ *q++ = '\\';
-+ }
-+ *q++ = *p;
-+ } while (*++p);
-+ *q = '\0';
-+ return r;
-+}
-+
-+
-+/*
-+ * Add the result of glob(3) to the list.
-+ */
-+
-+STATIC void
-+addglob(pglob)
-+ const glob_t *pglob;
-+{
-+ char **p = pglob->gl_pathv;
-+
-+ do {
-+ addfname(*p);
-+ } while (*++p);
-+}
-+#else
- char *expdir;
-
-
-@@ -1238,6 +1358,7 @@
- if (! atend)
- endname[-1] = '/';
- }
-+#endif
-
-
- /*
-@@ -1260,6 +1381,7 @@
- }
-
-
-+#if !(defined(__GLIBC__) && !defined(GLOB_BROKEN))
- /*
- * Sort the results of file name expansion. It calculates the number of
- * strings to sort and then calls msort (short for merge sort) to do the
-@@ -1321,6 +1443,7 @@
- }
- return list;
- }
-+#endif
-
-
-
-@@ -1328,6 +1451,39 @@
- * Returns true if the pattern matches the string.
- */
-
-+#if defined(__GLIBC__) && !defined(GLOB_BROKEN)
-+STATIC int
-+patmatch(pattern, string, squoted)
-+ char *pattern;
-+ char *string;
-+ int squoted; /* string might have quote chars */
-+ {
-+ const char *p;
-+ char *q;
-+
-+ p = preglob(pattern);
-+ q = squoted ? _rmescapes(string, 1) : string;
-+
-+ return !fnmatch(p, q, 0);
-+}
-+
-+
-+STATIC int
-+patmatch2(pattern, string, squoted)
-+ char *pattern;
-+ char *string;
-+ int squoted; /* string might have quote chars */
-+ {
-+ char *p;
-+ int res;
-+
-+ sstrnleft--;
-+ p = grabstackstr(expdest);
-+ res = patmatch(pattern, string, squoted);
-+ ungrabstackstr(p, expdest);
-+ return res;
-+}
-+#else
- int
- patmatch(pattern, string, squoted)
- char *pattern;
-@@ -1462,6 +1618,7 @@
- return 0;
- return 1;
- }
-+#endif
-
-
-
-@@ -1469,6 +1626,50 @@
- * Remove any CTLESC characters from a string.
- */
-
-+#if defined(__GLIBC__) && !defined(GLOB_BROKEN)
-+void
-+rmescapes(str)
-+ char *str;
-+{
-+ _rmescapes(str, 0);
-+}
-+
-+
-+STATIC char *
-+_rmescapes(str, flag)
-+ char *str;
-+ int flag;
-+{
-+ char *p, *q, *r;
-+
-+ p = str;
-+ while (*p != CTLESC && *p != CTLQUOTEMARK) {
-+ if (*p++ == '\0')
-+ return str;
-+ }
-+ q = p;
-+ r = str;
-+ if (flag) {
-+ size_t len = p - str;
-+ q = r = stalloc(strlen(p) + len + 1);
-+ if (len > 0) {
-+ memcpy(q, str, len);
-+ q += len;
-+ }
-+ }
-+ while (*p) {
-+ if (*p == CTLQUOTEMARK) {
-+ p++;
-+ continue;
-+ }
-+ if (*p == CTLESC)
-+ p++;
-+ *q++ = *p++;
-+ }
-+ *q = '\0';
-+ return r;
-+}
-+#else
- void
- rmescapes(str)
- char *str;
-@@ -1492,6 +1693,7 @@
- }
- *q = '\0';
- }
-+#endif
-
-
-
-
-diff -urN netbsd-sh/expand.h ash-0.3.7.orig/expand.h
---- netbsd-sh/expand.h Fri Jul 9 13:02:06 1999
-+++ ash-0.3.7.orig/expand.h Mon Apr 23 22:16:46 2001
-@@ -64,7 +64,9 @@
- void expandhere __P((union node *, int));
- void expandarg __P((union node *, struct arglist *, int));
- void expari __P((int));
-+#if !(defined(__GLIBC__) && !defined(GLOB_BROKEN))
- int patmatch __P((char *, char *, int));
-+#endif
- void rmescapes __P((char *));
- int casematch __P((union node *, char *));
-