[Toybox] [PATCH 1/1] teach head -v and -q

Rob Landley rob at landley.net
Sun May 28 15:05:05 PDT 2017


For future reference, if you do a "git format-patch -1 $COMMIT" and then
attach the file, I can just "git am" it with proper attribution.

Thanks,

Rob

On 05/28/2017 09:03 AM, Ilya Kuzmich wrote:
> Not POSIX, but implemented in coreutils and busybox.
> Tests use sed to compensate for the stdin naming difference.
> 
> Signed-off-by: Ilya Kuzmich <ilya.kuzmich at gmail.com>
> ---
>  tests/head.test   | 10 ++++++++++
>  toys/posix/head.c | 10 +++++++---
>  2 files changed, 17 insertions(+), 3 deletions(-)
> 
> diff --git a/tests/head.test b/tests/head.test
> index 83d9399..6ed027c 100755
> --- a/tests/head.test
> +++ b/tests/head.test
> @@ -11,9 +11,19 @@ testing "-number" "head -2 input && echo yes" "one\ntwo\nyes\n" \
>  	"one\ntwo\nthree\nfour" ""
>  testing "head, default lines" "head" "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n" "" "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12"
>  
> +# coreutils & busybox name stdin as "standard input", toybox uses "-"
> +testing "-v file" "head -v -n 1 input" "==> input <==\none\n" "one\ntwo\n" ""
> +testing "-v stdin" "head -v -n 1 | sed 's/==> standard input <==/==> - <==/'" \
> +	"==> - <==\none\n" "" "one\ntwo\n"
> +
> +testing "file and stdin" "head -n 1 input - | sed 's/==> standard input <==/==> - <==/'" \
> +	"==> input <==\none\n\n==> - <==\nfoo\n" "one\ntwo\n" "foo\nbar\n"
> +
>  echo "foo
>  bar
>  baz" > file1
>  testing "head, multiple files" "head -n 2 input file1" "==> input <==\none\ntwo\n\n==> file1 <==\nfoo\nbar\n" "one\ntwo\nthree\n" ""
> +testing "-q, multiple files" "head -q -n 2 input file1" "one\ntwo\nfoo\nbar\n" \
> +	"one\ntwo\nthree\n" ""
>  rm file1
>  
> diff --git a/toys/posix/head.c b/toys/posix/head.c
> index e3d7886..63eb85b 100644
> --- a/toys/posix/head.c
> +++ b/toys/posix/head.c
> @@ -4,7 +4,7 @@
>   *
>   * See http://opengroup.org/onlinepubs/9699919799/utilities/head.html
>  
> -USE_HEAD(NEWTOY(head, "?n#<0=10", TOYFLAG_USR|TOYFLAG_BIN))
> +USE_HEAD(NEWTOY(head, "?n#<0=10qv", TOYFLAG_USR|TOYFLAG_BIN))
>  
>  config HEAD
>    bool "head"
> @@ -16,6 +16,8 @@ config HEAD
>      stdin. Filename "-" is a synonym for stdin.
>  
>      -n	Number of lines to copy
> +    -q	Never print headers
> +    -v	Always print headers
>  */
>  
>  #define FOR_head
> @@ -30,9 +32,9 @@ static void do_head(int fd, char *name)
>  {
>    int i, len, lines=TT.lines, size=sizeof(toybuf);
>  
> -  if (toys.optc > 1) {
> +  if ((toys.optc > 1 && !(toys.optflags & FLAG_q)) || toys.optflags & FLAG_v) {
>      // Print an extra newline for all but the first file
> -    if (TT.file_no++) xprintf("\n");
> +    if (TT.file_no) xprintf("\n");
>      xprintf("==> %s <==\n", name);
>      xflush();
>    }
> @@ -46,6 +48,8 @@ static void do_head(int fd, char *name)
>  
>      xwrite(1, toybuf, i);
>    }
> +
> +  TT.file_no++;
>  }
>  
>  void head_main(void)
> 



More information about the Toybox mailing list