X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/fa9a999ca095aa54a91653403771ef01d706a527..01ce4cb6c05b9d2d05143d9b55111c344d8b6692:/package/busybox/patches/920-awx.patch diff --git a/package/busybox/patches/920-awx.patch b/package/busybox/patches/920-awx.patch index 4373893e8..2abab323e 100644 --- a/package/busybox/patches/920-awx.patch +++ b/package/busybox/patches/920-awx.patch @@ -1,6 +1,7 @@ -diff -purN bb.old/editors/awk.c bb.dev/editors/awk.c ---- bb.old/editors/awk.c 2007-05-20 04:17:05.002197784 +0200 -+++ bb.dev/editors/awk.c 2007-05-20 07:03:57.436076472 +0200 +Index: busybox-1.4.2/editors/awk.c +=================================================================== +--- busybox-1.4.2.orig/editors/awk.c 2007-06-04 13:21:35.202625056 +0200 ++++ busybox-1.4.2/editors/awk.c 2007-06-04 13:21:37.927210856 +0200 @@ -30,6 +30,11 @@ /* these flags are static, don't change them when value is changed */ #define VF_DONTTOUCH (VF_ARRAY | VF_SPECIAL | VF_WALK | VF_CHILD | VF_DIRTY) @@ -13,7 +14,7 @@ diff -purN bb.old/editors/awk.c bb.dev/editors/awk.c /* Variable */ typedef struct var_s { unsigned short type; /* flags */ -@@ -50,10 +55,15 @@ typedef struct chain_s { +@@ -50,10 +55,15 @@ char *programname; } chain; @@ -30,7 +31,7 @@ diff -purN bb.old/editors/awk.c bb.dev/editors/awk.c } func; /* I/O stream */ -@@ -1312,7 +1322,8 @@ static void parse_program(char *p) +@@ -1312,7 +1322,8 @@ next_token(TC_FUNCTION); pos++; f = newfunc(t.string); @@ -40,7 +41,7 @@ diff -purN bb.old/editors/awk.c bb.dev/editors/awk.c f->nargs = 0; while (next_token(TC_VARIABLE | TC_SEQTERM) & TC_VARIABLE) { v = findvar(ahash, t.string); -@@ -1321,7 +1332,7 @@ static void parse_program(char *p) +@@ -1321,7 +1332,7 @@ if (next_token(TC_COMMA | TC_SEQTERM) & TC_SEQTERM) break; } @@ -49,7 +50,7 @@ diff -purN bb.old/editors/awk.c bb.dev/editors/awk.c chain_group(); clear_array(ahash); -@@ -2260,7 +2271,8 @@ static var *evaluate(node *op, var *res) +@@ -2260,7 +2271,8 @@ break; case XC( OC_FUNC ): @@ -59,7 +60,7 @@ diff -purN bb.old/editors/awk.c bb.dev/editors/awk.c runtime_error(EMSG_UNDEF_FUNC); X.v = R.v = nvalloc(op->r.f->nargs+1); -@@ -2277,7 +2289,11 @@ static var *evaluate(node *op, var *res) +@@ -2277,7 +2289,11 @@ fnargs = X.v; L.s = programname; @@ -72,7 +73,7 @@ diff -purN bb.old/editors/awk.c bb.dev/editors/awk.c programname = L.s; nvfree(fnargs); -@@ -2637,6 +2653,11 @@ static rstream *next_input_file(void) +@@ -2637,6 +2653,11 @@ return &rsm; } @@ -84,7 +85,7 @@ diff -purN bb.old/editors/awk.c bb.dev/editors/awk.c int awk_main(int argc, char **argv) { int i, j, flen; -@@ -2693,6 +2714,10 @@ int awk_main(int argc, char **argv) +@@ -2693,6 +2714,10 @@ free(s); } @@ -95,10 +96,11 @@ diff -purN bb.old/editors/awk.c bb.dev/editors/awk.c programname = NULL; while((c = getopt(argc, argv, "F:v:f:W:")) != EOF) { switch (c) { -diff -purN bb.old/editors/awx.c bb.dev/editors/awx.c ---- bb.old/editors/awx.c 1970-01-01 01:00:00.000000000 +0100 -+++ bb.dev/editors/awx.c 2007-05-20 08:07:26.759971216 +0200 -@@ -0,0 +1,625 @@ +Index: busybox-1.4.2/editors/awx.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ busybox-1.4.2/editors/awx.c 2007-06-04 13:21:37.928210704 +0200 +@@ -0,0 +1,633 @@ +/* + * awk web extension + * @@ -150,11 +152,11 @@ diff -purN bb.old/editors/awx.c bb.dev/editors/awx.c +static char *translate_line(char *line) +{ + char *tok[MAX_TR * 3]; -+ char *l, *p, *p2, *res; ++ char *l, *p, *p2 = NULL, *res; + int len = 0, _pos = 0, i, tr_abort = 0; + static char *backlog = NULL; + -+ if (backlog) { ++ if (backlog && line) { + backlog = xrealloc(backlog, strlen(backlog) + strlen(line) + 1); + sprintf(backlog + strlen(backlog), line); + l = backlog; @@ -170,17 +172,14 @@ diff -purN bb.old/editors/awx.c bb.dev/editors/awx.c + + p2 = strstr(p, TR_END); + if (p2 == NULL) { -+ p2 = backlog; -+ backlog = xstrdup(l); -+ if (p2) -+ free(p2); ++ p2 = xstrdup(l); + tr_abort = 1; + break; + } + + *p = 0; -+ *p2 = 0; + len += strlen((tok[_pos++] = l)); ++ *p2 = 0; + len += strlen((tok[_pos++] = translate_lookup(p + strlen(TR_START)))); + + l = p2; @@ -195,10 +194,12 @@ diff -purN bb.old/editors/awx.c bb.dev/editors/awx.c + strcat(p, tok[i]); + p += strlen(tok[i]); + } -+ if (!tr_abort && backlog) { ++ if (backlog) { + free(backlog); + backlog = NULL; + } ++ if (tr_abort && p2) ++ backlog = p2; + + return res; +} @@ -338,9 +339,9 @@ diff -purN bb.old/editors/awx.c bb.dev/editors/awx.c + chain *initseq = NULL; + chain tmp; + func *f; -+ var *v, tv; ++ var *v, *tv; + -+ zero_out_var(&tv); ++ tv = nvalloc(1); + memset(&tmp, 0, sizeof(tmp)); + pos = p; + t.lineno = 1; @@ -374,7 +375,8 @@ diff -purN bb.old/editors/awx.c bb.dev/editors/awx.c + } + } + if (initseq && initseq->first) -+ evaluate(initseq->first, &tv); ++ tv = evaluate(initseq->first, tv); ++ nvfree(tv); +} + + @@ -416,11 +418,10 @@ diff -purN bb.old/editors/awx.c bb.dev/editors/awx.c +} + +/* parse an awk expression */ -+static var *parse_awk(char *str) ++static var *parse_awk(char *str, var *tv) +{ + chain body; + node *n; -+ var *tv = xzalloc(sizeof(*tv)); + + memset(&body, 0, sizeof(body)); + pos = str; @@ -450,36 +451,41 @@ diff -purN bb.old/editors/awx.c bb.dev/editors/awx.c +static void render_element(struct template_cb *tcb, struct template_element *e) +{ + var *v; -+ char *s; ++ char *s, *s2; ++ int i; ++ + if (!e || !e->var) + return; + lineno = e->line; + switch (e->t) { + case T_TEXT: -+ s = strdup(e->var); ++ s = malloc(strlen(e->var) + 2); ++ strcpy(s, e->var); + print_translate(s); + free(s); + break; + case T_CODE: -+ s = strdup(e->var); -+ v = parse_awk(s); -+ free(s); -+ s = strdup(getvar_s(v)); -+ print_translate(s); ++ s = malloc(strlen(e->var) + 2); ++ strcpy(s, e->var); ++ v = nvalloc(1); ++ s2 = strdup(getvar_s(parse_awk(s, v))); ++ nvfree(v); ++ print_translate(s2); + free(s); ++ free(s2); + break; + case T_IF: -+ s = strdup(e->var); -+ v = parse_awk(s); ++ s = malloc(strlen(e->var) + 2); ++ strcpy(s, e->var); ++ v = nvalloc(1); ++ i = istrue(parse_awk(s, v)); ++ nvfree(v); + free(s); -+ if (!v) -+ return; -+ if (istrue(v)) ++ ++ if (i) + execute_template(tcb, e->sub); + else if (e->sub2) + execute_template(tcb, e->sub2); -+ -+ clrvar(v); + break; + case T_FOR: { + v = newvar(e->var); @@ -487,6 +493,7 @@ diff -purN bb.old/editors/awx.c bb.dev/editors/awx.c + while (hashwalk_next(v)) { + execute_template(tcb, e->sub); + } ++ clrvar(v); + } + break; + default: @@ -503,10 +510,13 @@ diff -purN bb.old/editors/awx.c bb.dev/editors/awx.c + char *oldprg; + int oldlnr; + ++ if (!filename) ++ return; ++ + oldlnr = lineno; + oldprg = programname; + programname = filename; -+ ++ + f = fopen(filename, "r"); + if (!f) + return; @@ -724,9 +734,10 @@ diff -purN bb.old/editors/awx.c bb.dev/editors/awx.c + return awk_main(argc, argv); +} + -diff -purN bb.old/editors/awx_parser.h bb.dev/editors/awx_parser.h ---- bb.old/editors/awx_parser.h 1970-01-01 01:00:00.000000000 +0100 -+++ bb.dev/editors/awx_parser.h 2007-05-20 08:30:30.010685144 +0200 +Index: busybox-1.4.2/editors/awx_parser.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ busybox-1.4.2/editors/awx_parser.h 2007-06-04 13:21:37.928210704 +0200 @@ -0,0 +1,38 @@ +#ifndef __TEMPLATE_PARSER_H +#define __TEMPLATE_PARSER_H @@ -766,9 +777,10 @@ diff -purN bb.old/editors/awx_parser.h bb.dev/editors/awx_parser.h +void free_template(struct template_cb *cb, struct template_element *e); + +#endif -diff -purN bb.old/editors/awx_parser.l bb.dev/editors/awx_parser.l ---- bb.old/editors/awx_parser.l 1970-01-01 01:00:00.000000000 +0100 -+++ bb.dev/editors/awx_parser.l 2007-05-20 08:30:55.698779960 +0200 +Index: busybox-1.4.2/editors/awx_parser.l +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ busybox-1.4.2/editors/awx_parser.l 2007-06-04 13:21:37.929210552 +0200 @@ -0,0 +1,302 @@ +%{ +#include @@ -834,7 +846,7 @@ diff -purN bb.old/editors/awx_parser.l bb.dev/editors/awx_parser.l +{ + struct template_element *ptr; + -+ ptr = xzalloc(sizeof(*ptr)); ++ ptr = xzalloc(sizeof(struct template_element)); + ptr->parent = parent; + return ptr; +} @@ -1034,7 +1046,7 @@ diff -purN bb.old/editors/awx_parser.l bb.dev/editors/awx_parser.l + buflen = 4096; + textbuf = xzalloc(buflen); + -+ head = xzalloc(sizeof(*head)); ++ head = xzalloc(sizeof(struct template_element)); + head->t = T_TEXT; + cur = head; + @@ -1047,7 +1059,7 @@ diff -purN bb.old/editors/awx_parser.l bb.dev/editors/awx_parser.l +void free_template(struct template_cb *cb, struct template_element *e) +{ + struct template_element *next; -+ ++ return; + if (!e) + return; + @@ -1072,10 +1084,11 @@ diff -purN bb.old/editors/awx_parser.l bb.dev/editors/awx_parser.l + free(e); + return free_template(cb, next); +} -diff -purN bb.old/editors/Config.in bb.dev/editors/Config.in ---- bb.old/editors/Config.in 2007-05-20 04:17:05.003197632 +0200 -+++ bb.dev/editors/Config.in 2007-05-20 04:16:47.180907032 +0200 -@@ -12,6 +12,13 @@ config AWK +Index: busybox-1.4.2/editors/Config.in +=================================================================== +--- busybox-1.4.2.orig/editors/Config.in 2007-06-04 13:21:31.486190040 +0200 ++++ busybox-1.4.2/editors/Config.in 2007-06-04 13:21:37.929210552 +0200 +@@ -12,6 +12,13 @@ Awk is used as a pattern scanning and processing language. This is the BusyBox implementation of that programming language. @@ -1089,10 +1102,11 @@ diff -purN bb.old/editors/Config.in bb.dev/editors/Config.in config FEATURE_AWK_MATH bool "Enable math functions (requires libm)" default y -diff -purN bb.old/editors/Kbuild bb.dev/editors/Kbuild ---- bb.old/editors/Kbuild 2007-03-18 17:59:37.000000000 +0100 -+++ bb.dev/editors/Kbuild 2007-05-20 05:13:45.363264328 +0200 -@@ -10,3 +10,12 @@ lib-$(CONFIG_ED) += ed.o +Index: busybox-1.4.2/editors/Kbuild +=================================================================== +--- busybox-1.4.2.orig/editors/Kbuild 2007-06-04 13:21:31.492189128 +0200 ++++ busybox-1.4.2/editors/Kbuild 2007-06-04 13:21:37.929210552 +0200 +@@ -10,3 +10,12 @@ lib-$(CONFIG_PATCH) += patch.o lib-$(CONFIG_SED) += sed.o lib-$(CONFIG_VI) += vi.o @@ -1105,10 +1119,11 @@ diff -purN bb.old/editors/Kbuild bb.dev/editors/Kbuild +editors/awx_parser.o: editors/awx_parser.c FORCE + $(call cmd,force_checksrc) + $(call if_changed_rule,cc_o_c) -diff -purN bb.old/include/applets.h bb.dev/include/applets.h ---- bb.old/include/applets.h 2007-05-20 04:17:05.003197632 +0200 -+++ bb.dev/include/applets.h 2007-05-20 04:16:47.180907032 +0200 -@@ -60,6 +60,7 @@ USE_ARP(APPLET(arp, _BB_DIR_SBIN, _BB_SU +Index: busybox-1.4.2/include/applets.h +=================================================================== +--- busybox-1.4.2.orig/include/applets.h 2007-06-04 13:21:36.732392496 +0200 ++++ busybox-1.4.2/include/applets.h 2007-06-04 13:21:37.929210552 +0200 +@@ -60,6 +60,7 @@ USE_ARPING(APPLET(arping, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) USE_ASH(APPLET_NOUSAGE(ash, ash, _BB_DIR_BIN, _BB_SUID_NEVER)) USE_AWK(APPLET(awk, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) @@ -1116,9 +1131,10 @@ diff -purN bb.old/include/applets.h bb.dev/include/applets.h USE_BASENAME(APPLET(basename, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) USE_BBCONFIG(APPLET(bbconfig, _BB_DIR_BIN, _BB_SUID_NEVER)) //USE_BBSH(APPLET(bbsh, _BB_DIR_BIN, _BB_SUID_NEVER)) -diff -purN bb.old/include/cgi.h bb.dev/include/cgi.h ---- bb.old/include/cgi.h 1970-01-01 01:00:00.000000000 +0100 -+++ bb.dev/include/cgi.h 2007-05-20 04:16:47.180907032 +0200 +Index: busybox-1.4.2/include/cgi.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ busybox-1.4.2/include/cgi.h 2007-06-04 13:21:37.929210552 +0200 @@ -0,0 +1,8 @@ +#ifndef CGI_H +#define CGI_H @@ -1128,9 +1144,10 @@ diff -purN bb.old/include/cgi.h bb.dev/include/cgi.h +int cgi_init(var_handler); + +#endif -diff -purN bb.old/libbb/cgi.c bb.dev/libbb/cgi.c ---- bb.old/libbb/cgi.c 1970-01-01 01:00:00.000000000 +0100 -+++ bb.dev/libbb/cgi.c 2007-05-20 04:16:47.181906880 +0200 +Index: busybox-1.4.2/libbb/cgi.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ busybox-1.4.2/libbb/cgi.c 2007-06-04 13:21:37.930210400 +0200 @@ -0,0 +1,457 @@ +/* -------------------------------------------------------------------------- + * functions for processing cgi form data @@ -1589,10 +1606,11 @@ diff -purN bb.old/libbb/cgi.c bb.dev/libbb/cgi.c + + return retval; +} -diff -purN bb.old/libbb/Kbuild bb.dev/libbb/Kbuild ---- bb.old/libbb/Kbuild 2007-05-20 04:17:05.004197480 +0200 -+++ bb.dev/libbb/Kbuild 2007-05-20 04:16:47.181906880 +0200 -@@ -118,3 +118,6 @@ lib-$(CONFIG_GREP) += xregcomp.o +Index: busybox-1.4.2/libbb/Kbuild +=================================================================== +--- busybox-1.4.2.orig/libbb/Kbuild 2007-06-04 13:21:37.710243840 +0200 ++++ busybox-1.4.2/libbb/Kbuild 2007-06-04 13:21:37.930210400 +0200 +@@ -118,3 +118,6 @@ lib-$(CONFIG_MDEV) += xregcomp.o lib-$(CONFIG_LESS) += xregcomp.o lib-$(CONFIG_DEVFSD) += xregcomp.o