aboutsummaryrefslogtreecommitdiff
path: root/editors/awk.c
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2006-02-14 16:05:32 +0000
committerRob Landley <rob@landley.net>2006-02-14 16:05:32 +0000
commit46e351d478293e530a5bb448656729b7250616b8 (patch)
tree25ea1b852b45396aa9c000ac8b51bf546d9cfb63 /editors/awk.c
parent5ba53c05fce018ef4b0d79d942f3a40742304685 (diff)
downloadbusybox-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.c18
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)
2614extern int awk_main(int argc, char **argv) 2615extern 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);