From c2e1ebbe84a186f64920e6915838ed92edce5706 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 7 Dec 2014 10:13:04 +0000 Subject: line: use util-linux conventions This change add --help and --version print outs, checking at exit the stdout write was successful, and as a minor thing the command is made to use wide char functions to read and write inputs. Signed-off-by: Sami Kerola --- text-utils/line.c | 64 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 49 insertions(+), 15 deletions(-) (limited to 'text-utils/line.c') diff --git a/text-utils/line.c b/text-utils/line.c index 636122e01..80daa3476 100644 --- a/text-utils/line.c +++ b/text-utils/line.c @@ -15,31 +15,65 @@ * See Documentation/deprecated.txt for more information. */ -#include -#include +#include +#include +#include -static int status; /* exit status */ +#include "c.h" +#include "closestream.h" +#include "nls.h" +#include "widechar.h" -static void -doline(int fd) +static void __attribute__((__noreturn__)) usage(FILE *out) { - char c; + fputs(USAGE_HEADER, out); + fprintf(out, _(" %s [options]\n"), program_invocation_short_name); + fputs(USAGE_OPTIONS, out); + fputs(USAGE_HELP, out); + fputs(USAGE_VERSION, out); + fprintf(out, USAGE_MAN_TAIL("line(1)")); + exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); +} + +int main(int argc, char **argv) +{ + wint_t c; + int opt; + int status = EXIT_SUCCESS; + + static const struct option longopts[] = { + {"version", no_argument, NULL, 'V'}, + {"help", no_argument, NULL, 'h'}, + {NULL, 0, NULL, 0} + }; + + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); + atexit(close_stdout); + + while ((opt = getopt_long(argc, argv, "Vh", longopts, NULL)) != -1) + switch (opt) { + case 'V': + printf(UTIL_LINUX_VERSION); + return EXIT_SUCCESS; + case 'h': + usage(stdout); + default: + usage(stderr); + } for (;;) { - if (read(fd, &c, 1) <= 0) { - status = 1; + c = getwchar(); + if (c == WEOF) { + status = EXIT_FAILURE; break; } if (c == '\n') break; - putchar(c); + putwchar(c); } - putchar('\n'); -} + putwchar(L'\n'); -int -main(void) -{ - doline(0); return status; } -- cgit v1.2.3-55-g7522