source: branches/3.2/mindi-busybox/coreutils/tty.c @ 3232

Last change on this file since 3232 was 3232, checked in by bruno, 6 years ago
  • Update mindi-busybox to 1.21.1
File size: 1.5 KB
Line 
1/* vi: set sw=4 ts=4: */
2/*
3 * tty implementation for busybox
4 *
5 * Copyright (C) 2003  Manuel Novoa III  <mjn3@codepoet.org>
6 *
7 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
8 */
9
10/* BB_AUDIT SUSv4 compliant */
11/* http://www.opengroup.org/onlinepubs/9699919799/utilities/tty.html */
12
13//usage:#define tty_trivial_usage
14//usage:       ""
15//usage:#define tty_full_usage "\n\n"
16//usage:       "Print file name of stdin's terminal"
17//usage:    IF_INCLUDE_SUSv2( "\n"
18//usage:     "\n    -s  Print nothing, only return exit status"
19//usage:    )
20//usage:
21//usage:#define tty_example_usage
22//usage:       "$ tty\n"
23//usage:       "/dev/tty2\n"
24
25#include "libbb.h"
26
27int tty_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
28int tty_main(int argc UNUSED_PARAM, char **argv)
29{
30    const char *s;
31    IF_INCLUDE_SUSv2(int silent;)  /* Note: No longer relevant in SUSv3. */
32    int retval;
33
34    xfunc_error_retval = 2;  /* SUSv3 requires > 1 for error. */
35
36    IF_INCLUDE_SUSv2(silent = getopt32(argv, "s");)
37    IF_INCLUDE_SUSv2(argv += optind;)
38    IF_NOT_INCLUDE_SUSv2(argv += 1;)
39
40    /* gnu tty outputs a warning that it is ignoring all args. */
41    bb_warn_ignoring_args(argv[0]);
42
43    retval = EXIT_SUCCESS;
44
45    s = xmalloc_ttyname(STDIN_FILENO);
46    if (s == NULL) {
47    /* According to SUSv3, ttyname can fail with EBADF or ENOTTY.
48     * We know the file descriptor is good, so failure means not a tty. */
49        s = "not a tty";
50        retval = EXIT_FAILURE;
51    }
52    IF_INCLUDE_SUSv2(if (!silent) puts(s);)
53    IF_NOT_INCLUDE_SUSv2(puts(s);)
54
55    fflush_stdout_and_exit(retval);
56}
Note: See TracBrowser for help on using the repository browser.