From 3ad2a87991aae26f4041031c27dbbf63d5ec1ca7 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Sun, 19 May 2024 21:04:05 -0500 Subject: [PATCH] Add TOYFLAG_NOBUF and make microcom use it. --- lib/toyflags.h | 1 + main.c | 11 +++++++---- toys/net/microcom.c | 7 +++---- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/toyflags.h b/lib/toyflags.h index ab8e4f5b..928fe0bb 100644 --- a/lib/toyflags.h +++ b/lib/toyflags.h @@ -30,6 +30,7 @@ // Line buffered stdout #define TOYFLAG_LINEBUF (1<<10) +#define TOYFLAG_NOBUF (1<<11) // Error code to return if argument parsing fails (default 1) #define TOYFLAG_ARGFAIL(x) (x<<24) diff --git a/main.c b/main.c index 93cf768e..2cbaf172 100644 --- a/main.c +++ b/main.c @@ -154,8 +154,6 @@ void check_help(char **arg) // Setup toybox global state for this command. void toy_singleinit(struct toy_list *which, char *argv[]) { - char *buf; - toys.which = which; toys.argv = argv; toys.toycount = ARRAY_LEN(toy_list); @@ -168,6 +166,9 @@ void toy_singleinit(struct toy_list *which, char *argv[]) // Setup we only want to do once: skip for multiplexer or NOFORK reentry if (!(CFG_TOYBOX && which == toy_list) && !(which->flags & TOYFLAG_NOFORK)) { + char *buf = 0; + int btype = _IOFBF; + toys.old_umask = umask(0); if (!(which->flags & TOYFLAG_UMASK)) umask(toys.old_umask); @@ -178,8 +179,10 @@ void toy_singleinit(struct toy_list *which, char *argv[]) uselocale(newlocale(LC_CTYPE_MASK, "C.UTF-8", 0) ? : newlocale(LC_CTYPE_MASK, "en_US.UTF-8", 0)); - buf = (which->flags & TOYFLAG_LINEBUF) ? 0 : xmalloc(4096); - setvbuf(stdout, buf, buf ? _IOFBF : _IOLBF, buf ? 4096 : 0); + if (which->flags & TOYFLAG_LINEBUF) btype = _IOLBF; + else if (which->flags & TOYFLAG_NOBUF) btype = _IONBF; + else buf = xmalloc(4096); + setvbuf(stdout, buf, btype, buf ? 4096 : 0); } } diff --git a/toys/net/microcom.c b/toys/net/microcom.c index d805a062..1ee9204e 100644 --- a/toys/net/microcom.c +++ b/toys/net/microcom.c @@ -2,7 +2,7 @@ * * Copyright 2017 The Android Open Source Project. -USE_MICROCOM(NEWTOY(microcom, "<1>1s#=115200X", TOYFLAG_USR|TOYFLAG_BIN)) +USE_MICROCOM(NEWTOY(microcom, "<1>1s#=115200X", TOYFLAG_USR|TOYFLAG_BIN|TOYFLAG_NOBUF)) config MICROCOM bool "microcom" @@ -79,9 +79,8 @@ static void handle_esc(void) } free(filename); close(fd); - } else { - xprintf("Ignoring unknown command."); - } + } else xprintf("Ignoring unknown command."); + xprintf("\r\n"); } -- 2.39.2