summaryrefslogtreecommitdiffstats
path: root/text-utils/line.c
diff options
context:
space:
mode:
authorSami Kerola2014-12-07 11:13:04 +0100
committerKarel Zak2014-12-09 09:19:25 +0100
commitc2e1ebbe84a186f64920e6915838ed92edce5706 (patch)
treea3e4b8c9a364473c89cf80ade26f74206074e00e /text-utils/line.c
parenttextual: improve error messages (diff)
downloadkernel-qcow2-util-linux-c2e1ebbe84a186f64920e6915838ed92edce5706.tar.gz
kernel-qcow2-util-linux-c2e1ebbe84a186f64920e6915838ed92edce5706.tar.xz
kernel-qcow2-util-linux-c2e1ebbe84a186f64920e6915838ed92edce5706.zip
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 <kerolasa@iki.fi>
Diffstat (limited to 'text-utils/line.c')
-rw-r--r--text-utils/line.c64
1 files changed, 49 insertions, 15 deletions
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 <stdio.h>
-#include <unistd.h>
+#include <getopt.h>
+#include <stdio.h>
+#include <unistd.h>
-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;
}