Mercurial > hg > aboriginal
view sources/patches/busybox-awk.patch @ 358:9829e6cc8637
Update busybox from 1.2.2 to 1.11.0. Toybox i still used for oneit and patch,
but otherwise disabled for the moment. I'll put it back in a bit, but waiting
until toybox is ready to replace busybox makes as much sense as waiting until
tinycc is ready to replace gcc. Get it working first, then swap parts
around...
author | Rob Landley <rob@landley.net> |
---|---|
date | Sun, 06 Jul 2008 06:19:15 -0500 |
parents | |
children |
line wrap: on
line source
diff -d -urpN busybox.0/editors/awk.c busybox.1/editors/awk.c --- busybox.0/editors/awk.c 2008-06-28 19:39:23.000000000 +0200 +++ busybox.1/editors/awk.c 2008-07-01 03:49:27.000000000 +0200 @@ -681,11 +681,6 @@ static ALWAYS_INLINE int isalnum_(int c) return (isalnum(c) || c == '_'); } -static FILE *afopen(const char *path, const char *mode) -{ - return (*path == '-' && *(path+1) == '\0') ? stdin : xfopen(path, mode); -} - /* -------- working with variables (set/get/copy/etc) -------- */ static xhash *iamarray(var *v) @@ -2740,7 +2735,7 @@ static rstream *next_input_file(void) ind = getvar_s(incvar(intvar[ARGIND])); fname = getvar_s(findvar(iamarray(intvar[ARGV]), ind)); if (fname && *fname && !is_assignment(fname)) - F = afopen(fname, "r"); + F = xfopen_stdin(fname); } } while (!F); @@ -2757,8 +2752,9 @@ int awk_main(int argc, char **argv) { unsigned opt; char *opt_F, *opt_W; - llist_t *opt_v = NULL; - int i, j, flen; + llist_t *list_v = NULL; + llist_t *list_f = NULL; + int i, j; var *v; var tv; char **envp; @@ -2816,35 +2812,33 @@ int awk_main(int argc, char **argv) *s1 = '='; } } - opt_complementary = "v::"; - opt = getopt32(argv, "F:v:f:W:", &opt_F, &opt_v, &g_progname, &opt_W); + opt_complementary = "v::f::"; /* -v and -f can occur multiple times */ + opt = getopt32(argv, "F:v:f:W:", &opt_F, &list_v, &list_f, &opt_W); argv += optind; argc -= optind; if (opt & 0x1) setvar_s(intvar[FS], opt_F); // -F - while (opt_v) { /* -v */ - if (!is_assignment(llist_pop(&opt_v))) + while (list_v) { /* -v */ + if (!is_assignment(llist_pop(&list_v))) bb_show_usage(); } - if (opt & 0x4) { // -f - char *s = s; /* die, gcc, die */ - FILE *from_file = afopen(g_progname, "r"); - /* one byte is reserved for some trick in next_token */ - if (fseek(from_file, 0, SEEK_END) == 0) { - flen = ftell(from_file); - s = xmalloc(flen + 4); - fseek(from_file, 0, SEEK_SET); - i = 1 + fread(s + 1, 1, flen, from_file); - } else { + if (list_f) { /* -f */ + do { + char *s = NULL; + FILE *from_file; + + g_progname = llist_pop(&list_f); + from_file = xfopen_stdin(g_progname); + /* one byte is reserved for some trick in next_token */ for (i = j = 1; j > 0; i += j) { s = xrealloc(s, i + 4096); j = fread(s + i, 1, 4094, from_file); } - } - s[i] = '\0'; - fclose(from_file); - parse_program(s + 1); - free(s); + s[i] = '\0'; + fclose(from_file); + parse_program(s + 1); + free(s); + } while (list_f); } else { // no -f: take program from 1st parameter if (!argc) bb_show_usage();