* src/libstdbuf.c (apply_mode): Take getenv arg, not result. All callers changed. This is simpler. --- src/libstdbuf.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/src/libstdbuf.c b/src/libstdbuf.c index 169d0d3ee..2b4dbe1f2 100644 --- a/src/libstdbuf.c +++ b/src/libstdbuf.c @@ -44,7 +44,7 @@ size specifies the size of the array; otherwise, size _may_ determine the size of a buffer allocated by the setvbuf function. ... - Obviously some interpret the above to mean setvbuf(....,size) + Obviously some interpret the above to mean setvbuf (..., size) is only a hint from the application which I don't agree with. FreeBSD's libc seems more sensible in this regard. From the man page: @@ -60,7 +60,7 @@ Another issue is that on glibc-2.7 the following doesn't buffer the first write if it's greater than 1 byte. - setvbuf(stdout,buf,_IOFBF,127); + setvbuf (stdout, buf, _IOFBF, 127); Now the POSIX standard says that "allocating a buffer of size bytes does not necessarily imply that all of size bytes are used for the buffer area". @@ -68,12 +68,16 @@ inconsistencies with write sizes and subsequent writes. */ static void -apply_mode (FILE *stream, char const *stream_name, char const *mode) +apply_mode (FILE *stream, char const *stream_name, char const *envvar) { char *buf = nullptr; int setvbuf_mode; unsigned long int size = 0; + char const *mode = getenv (envvar); + if (!mode) + return; + if (*mode == '0') setvbuf_mode = _IONBF; else if (*mode == 'L') @@ -118,13 +122,9 @@ apply_mode (FILE *stream, char const *stream_name, char const *mode) static void __attribute ((constructor)) stdbuf (void) { - char *e_mode = getenv ("_STDBUF_E"); - char *i_mode = getenv ("_STDBUF_I"); - char *o_mode = getenv ("_STDBUF_O"); - if (e_mode) /* Do first so can write errors to stderr */ - apply_mode (stderr, "stderr", e_mode); - if (i_mode) - apply_mode (stdin, "stdin", i_mode); - if (o_mode) - apply_mode (stdout, "stdout", o_mode); + /* Do first so can write errors to stderr. */ + apply_mode (stderr, "stderr", "_STDBUF_E"); + + apply_mode (stdin, "stdin", "_STDBUF_I"); + apply_mode (stdout, "stdout", "_STDBUF_O"); } -- 2.48.1