]>
git.ipfire.org Git - thirdparty/util-linux.git/blob - lib/ttyutils.c
2 * No copyright is claimed. This code is in the public domain; do with
5 * Written by Karel Zak <kzak@redhat.com>
13 int get_terminal_width(int default_width
)
17 #if defined(TIOCGWINSZ)
19 if (ioctl (STDOUT_FILENO
, TIOCGWINSZ
, &w_win
) == 0)
21 #elif defined(TIOCGSIZE)
23 if (ioctl (STDOUT_FILENO
, TIOCGSIZE
, &t_win
) == 0)
24 width
= t_win
.ts_cols
;
28 const char *cp
= getenv("COLUMNS");
35 c
= strtol(cp
, &end
, 10);
37 if (errno
== 0 && end
&& *end
== '\0' && end
> cp
&&
38 c
> 0 && c
<= INT_MAX
)
43 return width
> 0 ? width
: default_width
;
46 int get_terminal_name(const char **path
,
62 if (isatty(STDIN_FILENO
))
64 else if (isatty(STDOUT_FILENO
))
66 else if (isatty(STDERR_FILENO
))
76 tty
= strncmp(tty
, "/dev/", 5) == 0 ? tty
+ 5 : tty
;
80 for (p
= tty
; p
&& *p
; p
++) {
95 const char *path
, *name
, *num
;
97 if (get_terminal_name(STDERR_FILENO
, &path
, &name
, &num
) == 0) {
98 fprintf(stderr
, "tty path: %s\n", path
);
99 fprintf(stderr
, "tty name: %s\n", name
);
100 fprintf(stderr
, "tty number: %s\n", num
);
102 fprintf(stderr
, "tty width: %d\n", get_terminal_width(0));