[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] stdbuf: make it mandatory to specify a buffering option
From: |
Pádraig Brady |
Subject: |
[PATCH] stdbuf: make it mandatory to specify a buffering option |
Date: |
Sat, 22 Jun 2013 03:48:34 +0100 |
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.
---
src/stdbuf.c | 17 +++++++++++------
tests/misc/stdbuf.sh | 2 ++
2 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/src/stdbuf.c b/src/stdbuf.c
index 38e9bee..a7eb0a0 100644
--- a/src/stdbuf.c
+++ b/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,8 @@ main (int argc, char **argv)
usage (EXIT_CANCELED);
}
- /* FIXME: Should we mandate at least one option? */
-
- set_libstdbuf_options ();
+ if (! set_libstdbuf_options ())
+ error (EXIT_CANCELED, 0, _("you must specify a buffering mode option"));
/* Try to preload libstdbuf first from the same path as
stdbuf is running from. */
diff --git a/tests/misc/stdbuf.sh b/tests/misc/stdbuf.sh
index 12347ec..650e8e7 100755
--- a/tests/misc/stdbuf.sh
+++ b/tests/misc/stdbuf.sh
@@ -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
--
1.7.7.6
- [PATCH] stdbuf: make it mandatory to specify a buffering option,
Pádraig Brady <=