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:
5
NEWS
5
NEWS
@@ -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.
|
||||
|
||||
20
src/stdbuf.c
20
src/stdbuf.c
@@ -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. */
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user