diff options
author | Rob Landley <rob@landley.net> | 2006-02-14 16:05:32 +0000 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2006-02-14 16:05:32 +0000 |
commit | 46e351d478293e530a5bb448656729b7250616b8 (patch) | |
tree | 25ea1b852b45396aa9c000ac8b51bf546d9cfb63 /editors/awk.c | |
parent | 5ba53c05fce018ef4b0d79d942f3a40742304685 (diff) | |
download | busybox-w32-46e351d478293e530a5bb448656729b7250616b8.tar.gz busybox-w32-46e351d478293e530a5bb448656729b7250616b8.tar.bz2 busybox-w32-46e351d478293e530a5bb448656729b7250616b8.zip |
Patch from awk maintainer (Dmitry Zakhrov) to fix bugs 642, 663, and 667.
Diffstat (limited to 'editors/awk.c')
-rw-r--r-- | editors/awk.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/editors/awk.c b/editors/awk.c index 80ff8c77b..39717afae 100644 --- a/editors/awk.c +++ b/editors/awk.c | |||
@@ -948,7 +948,7 @@ static uint32_t next_token(uint32_t expected) | |||
948 | *(p-1) = '\0'; | 948 | *(p-1) = '\0'; |
949 | tc = TC_VARIABLE; | 949 | tc = TC_VARIABLE; |
950 | /* also consume whitespace between functionname and bracket */ | 950 | /* also consume whitespace between functionname and bracket */ |
951 | skip_spaces(&p); | 951 | if (! (expected & TC_VARIABLE)) skip_spaces(&p); |
952 | if (*p == '(') { | 952 | if (*p == '(') { |
953 | tc = TC_FUNCTION; | 953 | tc = TC_FUNCTION; |
954 | } else { | 954 | } else { |
@@ -1656,6 +1656,7 @@ static int awk_getline(rstream *rsm, var *v) | |||
1656 | } | 1656 | } |
1657 | } else if (c != '\0') { | 1657 | } else if (c != '\0') { |
1658 | s = strchr(b+pp, c); | 1658 | s = strchr(b+pp, c); |
1659 | if (! s) s = memchr(b+pp, '\0', p - pp); | ||
1659 | if (s) { | 1660 | if (s) { |
1660 | so = eo = s-b; | 1661 | so = eo = s-b; |
1661 | eo++; | 1662 | eo++; |
@@ -2614,7 +2615,7 @@ static rstream *next_input_file(void) | |||
2614 | extern int awk_main(int argc, char **argv) | 2615 | extern int awk_main(int argc, char **argv) |
2615 | { | 2616 | { |
2616 | char *s, *s1; | 2617 | char *s, *s1; |
2617 | int i, j, c; | 2618 | int i, j, c, flen; |
2618 | var *v; | 2619 | var *v; |
2619 | static var tv; | 2620 | static var tv; |
2620 | char **envp; | 2621 | char **envp; |
@@ -2682,9 +2683,16 @@ keep_going: | |||
2682 | F = afopen(programname = optarg, "r"); | 2683 | F = afopen(programname = optarg, "r"); |
2683 | s = NULL; | 2684 | s = NULL; |
2684 | /* one byte is reserved for some trick in next_token */ | 2685 | /* one byte is reserved for some trick in next_token */ |
2685 | for (i=j=1; j>0; i+=j) { | 2686 | if (fseek(F, 0, SEEK_END) == 0) { |
2686 | s = (char *)xrealloc(s, i+4096); | 2687 | flen = ftell(F); |
2687 | j = fread(s+i, 1, 4094, F); | 2688 | s = (char *)xmalloc(flen+4); |
2689 | fseek(F, 0, SEEK_SET); | ||
2690 | i = 1 + fread(s+1, 1, flen, F); | ||
2691 | } else { | ||
2692 | for (i=j=1; j>0; i+=j) { | ||
2693 | s = (char *)xrealloc(s, i+4096); | ||
2694 | j = fread(s+i, 1, 4094, F); | ||
2695 | } | ||
2688 | } | 2696 | } |
2689 | s[i] = '\0'; | 2697 | s[i] = '\0'; |
2690 | fclose(F); | 2698 | fclose(F); |