diff options
Diffstat (limited to 'usr.bin/awk/b.c.diff')
| -rw-r--r-- | usr.bin/awk/b.c.diff | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/usr.bin/awk/b.c.diff b/usr.bin/awk/b.c.diff new file mode 100644 index 000000000000..525fcbc37dc5 --- /dev/null +++ b/usr.bin/awk/b.c.diff @@ -0,0 +1,53 @@ +$FreeBSD$ + +Index: b.c +=================================================================== +RCS file: /home/ncvs/src/contrib/one-true-awk/b.c,v +retrieving revision 1.1.1.8 +diff -u -p -r1.1.1.8 b.c +--- b.c 16 May 2005 19:11:31 -0000 1.1.1.8 ++++ b.c 16 May 2005 19:12:40 -0000 +@@ -282,9 +282,21 @@ int quoted(char **pp) /* pick up next th + return c; + } + ++static int collate_range_cmp(int a, int b) ++{ ++ static char s[2][2]; ++ ++ if ((uschar)a == (uschar)b) ++ return 0; ++ s[0][0] = a; ++ s[1][0] = b; ++ return (strcoll(s[0], s[1])); ++} ++ + char *cclenter(const char *argp) /* add a character class */ + { + int i, c, c2; ++ int j; + uschar *p = (uschar *) argp; + uschar *op, *bp; + static uschar *buf = 0; +@@ -303,15 +315,18 @@ char *cclenter(const char *argp) /* add + c2 = *p++; + if (c2 == '\\') + c2 = quoted((char **) &p); +- if (c > c2) { /* empty; ignore */ ++ if (collate_range_cmp(c, c2) > 0) { + bp--; + i--; + continue; + } +- while (c < c2) { ++ for (j = 0; j < NCHARS; j++) { ++ if ((collate_range_cmp(c, j) > 0) || ++ collate_range_cmp(j, c2) > 0) ++ continue; + if (!adjbuf((char **) &buf, &bufsz, bp-buf+2, 100, (char **) &bp, "cclenter1")) + FATAL("out of space for character class [%.10s...] 2", p); +- *bp++ = ++c; ++ *bp++ = j; + i++; + } + continue; |
