10 |
/* BB_AUDIT SUSv3 compliant */ |
/* BB_AUDIT SUSv3 compliant */ |
11 |
/* http://www.opengroup.org/onlinepubs/007904975/utilities/tty.html */ |
/* http://www.opengroup.org/onlinepubs/007904975/utilities/tty.html */ |
12 |
|
|
13 |
#include <stdio.h> |
#include "libbb.h" |
|
#include <stdlib.h> |
|
|
#include <unistd.h> |
|
|
#include "busybox.h" |
|
14 |
|
|
15 |
int tty_main(int argc, char **argv) |
int tty_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; |
16 |
|
int tty_main(int argc, char **argv SKIP_INCLUDE_SUSv2(UNUSED_PARAM)) |
17 |
{ |
{ |
18 |
const char *s; |
const char *s; |
19 |
int silent; /* Note: No longer relevant in SUSv3. */ |
USE_INCLUDE_SUSv2(int silent;) /* Note: No longer relevant in SUSv3. */ |
20 |
int retval; |
int retval; |
21 |
|
|
22 |
xfunc_error_retval = 2; /* SUSv3 requires > 1 for error. */ |
xfunc_error_retval = 2; /* SUSv3 requires > 1 for error. */ |
23 |
|
|
24 |
silent = getopt32(argc, argv, "s"); |
USE_INCLUDE_SUSv2(silent = getopt32(argv, "s");) |
25 |
|
USE_INCLUDE_SUSv2(argc -= optind;) |
26 |
|
SKIP_INCLUDE_SUSv2(argc -= 1;) |
27 |
|
|
28 |
/* gnu tty outputs a warning that it is ignoring all args. */ |
/* gnu tty outputs a warning that it is ignoring all args. */ |
29 |
bb_warn_ignoring_args(argc - optind); |
bb_warn_ignoring_args(argc); |
30 |
|
|
31 |
retval = 0; |
retval = 0; |
32 |
|
|
33 |
if ((s = ttyname(0)) == NULL) { |
s = ttyname(0); |
34 |
/* According to SUSv3, ttyname can on fail with EBADF or ENOTTY. |
if (s == NULL) { |
35 |
|
/* According to SUSv3, ttyname can fail with EBADF or ENOTTY. |
36 |
* We know the file descriptor is good, so failure means not a tty. */ |
* We know the file descriptor is good, so failure means not a tty. */ |
37 |
s = "not a tty"; |
s = "not a tty"; |
38 |
retval = 1; |
retval = 1; |
39 |
} |
} |
40 |
|
USE_INCLUDE_SUSv2(if (!silent) puts(s);) |
41 |
if (!silent) { |
SKIP_INCLUDE_SUSv2(puts(s);) |
|
puts(s); |
|
|
} |
|
42 |
|
|
43 |
fflush_stdout_and_exit(retval); |
fflush_stdout_and_exit(retval); |
44 |
} |
} |