]>
Commit | Line | Data |
---|---|---|
63cccae4 KZ |
1 | /* |
2 | * line - read one line | |
3 | * | |
4 | * Gunnar Ritter, Freiburg i. Br., Germany, December 2000. | |
5 | * | |
6 | * Public Domain. | |
7 | */ | |
8 | ||
ba0c9030 SK |
9 | /* |
10 | * This command is deprecated. The utility is in maintenance mode, | |
11 | * meaning we keep them in source tree for backward compatibility | |
12 | * only. Do not waste time making this command better, unless the | |
13 | * fix is about security or other very critical issue. | |
14 | * | |
15 | * See Documentation/deprecated.txt for more information. | |
16 | */ | |
17 | ||
c2e1ebbe SK |
18 | #include <getopt.h> |
19 | #include <stdio.h> | |
20 | #include <unistd.h> | |
63cccae4 | 21 | |
c2e1ebbe SK |
22 | #include "c.h" |
23 | #include "closestream.h" | |
24 | #include "nls.h" | |
25 | #include "widechar.h" | |
63cccae4 | 26 | |
86be6a32 | 27 | static void __attribute__((__noreturn__)) usage(void) |
63cccae4 | 28 | { |
86be6a32 | 29 | FILE *out = stdout; |
c2e1ebbe SK |
30 | fputs(USAGE_HEADER, out); |
31 | fprintf(out, _(" %s [options]\n"), program_invocation_short_name); | |
451dbcfa BS |
32 | |
33 | fputs(USAGE_SEPARATOR, out); | |
34 | fputs(_("Read one line.\n"), out); | |
35 | ||
c2e1ebbe SK |
36 | fputs(USAGE_OPTIONS, out); |
37 | fputs(USAGE_HELP, out); | |
38 | fputs(USAGE_VERSION, out); | |
39 | fprintf(out, USAGE_MAN_TAIL("line(1)")); | |
86be6a32 | 40 | exit(EXIT_SUCCESS); |
c2e1ebbe SK |
41 | } |
42 | ||
43 | int main(int argc, char **argv) | |
44 | { | |
45 | wint_t c; | |
46 | int opt; | |
47 | int status = EXIT_SUCCESS; | |
48 | ||
49 | static const struct option longopts[] = { | |
50 | {"version", no_argument, NULL, 'V'}, | |
51 | {"help", no_argument, NULL, 'h'}, | |
52 | {NULL, 0, NULL, 0} | |
53 | }; | |
54 | ||
55 | setlocale(LC_ALL, ""); | |
56 | bindtextdomain(PACKAGE, LOCALEDIR); | |
57 | textdomain(PACKAGE); | |
58 | atexit(close_stdout); | |
59 | ||
60 | while ((opt = getopt_long(argc, argv, "Vh", longopts, NULL)) != -1) | |
61 | switch (opt) { | |
62 | case 'V': | |
63 | printf(UTIL_LINUX_VERSION); | |
64 | return EXIT_SUCCESS; | |
65 | case 'h': | |
86be6a32 | 66 | usage(); |
c2e1ebbe | 67 | default: |
677ec86c | 68 | errtryhelp(EXIT_FAILURE); |
c2e1ebbe | 69 | } |
63cccae4 | 70 | |
e03f29b6 | 71 | setvbuf(stdin, NULL, _IONBF, 0); |
63cccae4 | 72 | for (;;) { |
c2e1ebbe SK |
73 | c = getwchar(); |
74 | if (c == WEOF) { | |
75 | status = EXIT_FAILURE; | |
63cccae4 KZ |
76 | break; |
77 | } | |
78 | if (c == '\n') | |
79 | break; | |
c2e1ebbe | 80 | putwchar(c); |
63cccae4 | 81 | } |
c2e1ebbe | 82 | putwchar(L'\n'); |
63cccae4 | 83 | |
63cccae4 KZ |
84 | return status; |
85 | } |