]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lib/ttyutils: add get_terminal_name()
authorKarel Zak <kzak@redhat.com>
Thu, 22 Nov 2012 13:36:17 +0000 (14:36 +0100)
committerKarel Zak <kzak@redhat.com>
Thu, 22 Nov 2012 13:40:14 +0000 (14:40 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
include/ttyutils.h
lib/ttyutils.c

index 0bcae1493b97079ebe17d91b48ee701e90c3aa10..93e89348a4c76720f42afd0e7f9eff51337c0733 100644 (file)
@@ -9,7 +9,7 @@
 #endif
 
 extern int get_terminal_width(void);
-
+extern int get_terminal_name(const char **path, const char **name, const char **number);
 
 #define UL_TTY_KEEPCFLAGS      (1 << 1)
 #define UL_TTY_UTF8            (1 << 2)
index 39d0516ca5de6f5bb81c47cbc6fe0d4f235a4660..15d538946cd0dec36e628a55e573390fa4e43af3 100644 (file)
@@ -37,12 +37,53 @@ int get_terminal_width(void)
        return 0;
 }
 
+int get_terminal_name(const char **path,
+                     const char **name,
+                     const char **number)
+{
+       const char *tty;
+       const char *p;
+
+       if (name)
+               *name = NULL;
+       if (path)
+               *path = NULL;
+       if (number)
+               *number = NULL;
+
+       tty = ttyname(STDERR_FILENO);
+       if (!tty)
+               return -1;
+       if (path)
+               *path = tty;
+       tty = strncmp(tty, "/dev/", 5) == 0 ? tty + 5 : tty;
+       if (name)
+               *name = tty;
+       if (number) {
+               for (p = tty; p && *p; p++) {
+                       if (isdigit(*p)) {
+                               *number = p;
+                               break;
+                       }
+               }
+       }
+       return 0;
+}
+
+
 #ifdef TEST_PROGRAM
 # include <stdlib.h>
-
 int main(void)
 {
-       fprintf(stderr, "tty width: %d\n", get_terminal_width());
+       const char *path, *name, *num;
+
+       if (get_terminal_name(&path, &name, &num) == 0) {
+               fprintf(stderr, "tty path:   %s\n", path);
+               fprintf(stderr, "tty name:   %s\n", name);
+               fprintf(stderr, "tty number: %s\n", num);
+       }
+       fprintf(stderr,         "tty width:  %d\n", get_terminal_width());
+
        return EXIT_SUCCESS;
 }
 #endif