diff options
-rw-r--r-- | lib/toyflags.h | 3 | ||||
-rw-r--r-- | main.c | 7 | ||||
-rw-r--r-- | toys/posix/grep.c | 6 |
3 files changed, 10 insertions, 6 deletions
diff --git a/lib/toyflags.h b/lib/toyflags.h index b158ba88..c8830874 100644 --- a/lib/toyflags.h +++ b/lib/toyflags.h @@ -32,6 +32,9 @@ // Suppress default --help processing #define TOYFLAG_NOHELP (1<<10) +// Line buffered stdout +#define TOYFLAG_LINEBUF (1<<11) + // Error code to return if argument parsing fails (default 1) #define TOYFLAG_ARGFAIL(x) (x<<24) @@ -101,8 +101,8 @@ void toy_singleinit(struct toy_list *which, char *argv[]) // Try user's locale, falling back to C.UTF-8 setlocale(LC_CTYPE, ""); - if (!strcmp("UTF-8", nl_langinfo(CODESET))) setlocale(LC_CTYPE, "C.UTF-8"); - setlinebuf(stdout); + if (strcmp("UTF-8", nl_langinfo(CODESET))) setlocale(LC_CTYPE, "C.UTF-8"); + setvbuf(stdout, 0, (which->flags & TOYFLAG_LINEBUF) ? _IOLBF : _IONBF, 0); } } @@ -213,11 +213,12 @@ void toybox_main(void) xputc('\n'); } +#include <malloc.h> int main(int argc, char *argv[]) { // don't segfault if our environment is crazy if (!*argv) return 127; - +mallopt(M_CHECK_ACTION, 1); // Snapshot stack location so we can detect recursion depth later. // Nommu has special reentry path, !stacktop = "vfork/exec self happened" if (!CFG_TOYBOX_FORK && (0x80 & **argv)) **argv &= 0x7f; diff --git a/toys/posix/grep.c b/toys/posix/grep.c index 9f445fca..fce8d564 100644 --- a/toys/posix/grep.c +++ b/toys/posix/grep.c @@ -10,9 +10,9 @@ * echo hello | grep -f </dev/null * -USE_GREP(NEWTOY(grep, "(line-buffered)(color):;(exclude-dir)*S(exclude)*M(include)*ZzEFHIab(byte-offset)h(no-filename)ino(only-matching)rRsvwcl(files-with-matches)q(quiet)(silent)e*f*C#B#A#m#x[!wx][!EFw]", TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) -USE_EGREP(OLDTOY(egrep, grep, TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) -USE_FGREP(OLDTOY(fgrep, grep, TOYFLAG_BIN|TOYFLAG_ARGFAIL(2))) +USE_GREP(NEWTOY(grep, "(line-buffered)(color):;(exclude-dir)*S(exclude)*M(include)*ZzEFHIab(byte-offset)h(no-filename)ino(only-matching)rRsvwcl(files-with-matches)q(quiet)(silent)e*f*C#B#A#m#x[!wx][!EFw]", TOYFLAG_BIN|TOYFLAG_ARGFAIL(2)|TOYFLAG_LINEBUF)) +USE_EGREP(OLDTOY(egrep, grep, TOYFLAG_BIN|TOYFLAG_ARGFAIL(2)|TOYFLAG_LINEBUF)) +USE_FGREP(OLDTOY(fgrep, grep, TOYFLAG_BIN|TOYFLAG_ARGFAIL(2)|TOYFLAG_LINEBUF)) config GREP bool "grep" |