1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-04-14 07:46:28 +02:00

stdbuf: make it mandatory to specify a buffering option

This is consistent with the documented interface and
avoids any ambiguity in a user thinking that stdbuf without options
might reset to a "standard" buffering setup.

* src/stdbuf.c (set_libstdbuf_options): Indicate with the return value
whether any env variables were actually set.
(main): Fail unless some env variables were set.
* tests/misc/stdbuf.sh: Ensure this constraint is enforced.
* NEWS: Mention the small change in behavior.
This commit is contained in:
Pádraig Brady
2013-06-22 03:37:51 +01:00
parent b235223926
commit bc70095df2
3 changed files with 21 additions and 6 deletions

5
NEWS
View File

@@ -41,6 +41,11 @@ GNU coreutils NEWS -*- outline -*-
csplit accepts a new option: --suppressed-matched, to elide the lines
used to identify the split points.
** Changes in behavior
stdbuf now requires at least one buffering mode option to be specified,
as per the documented interface.
** Improvements
stat and tail work better with EFIVARFS, EXOFS, F2FS, SNFS and UBIFS.

View File

@@ -248,12 +248,14 @@ set_LD_PRELOAD (void)
}
}
/* Populate environ with _STDBUF_I=$MODE _STDBUF_O=$MODE _STDBUF_E=$MODE */
/* Populate environ with _STDBUF_I=$MODE _STDBUF_O=$MODE _STDBUF_E=$MODE.
Return TRUE if any environment variables set. */
static void
static bool
set_libstdbuf_options (void)
{
unsigned int i;
bool env_set = false;
size_t i;
for (i = 0; i < ARRAY_CARDINALITY (stdbuf); i++)
{
@@ -278,8 +280,12 @@ set_libstdbuf_options (void)
_("failed to update the environment with %s"),
quote (var));
}
env_set = true;
}
}
return env_set;
}
int
@@ -346,9 +352,11 @@ main (int argc, char **argv)
usage (EXIT_CANCELED);
}
/* FIXME: Should we mandate at least one option? */
set_libstdbuf_options ();
if (! set_libstdbuf_options ())
{
error (0, 0, _("you must specify a buffering mode option"));
usage (EXIT_CANCELED);
}
/* Try to preload libstdbuf first from the same path as
stdbuf is running from. */

View File

@@ -50,6 +50,8 @@ stdbuf -o$SIZE_OFLOW true # size too large
test $? = 125 || fail=1
stdbuf -iL true # line buffering stdin disallowed
test $? = 125 || fail=1
stdbuf true # a buffering mode must be specified
test $? = 125 || fail=1
stdbuf -i0 -o0 -e0 true || fail=1 #check all files
stdbuf -o1 . # invalid command
test $? = 126 || fail=1