LCOV - code coverage report
Current view: top level - basic - terminal-util.h (source / functions) Hit Total Coverage
Test: systemd_full.info Lines: 22 22 100.0 %
Date: 2019-08-23 13:36:53 Functions: 22 22 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 30 60 50.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: LGPL-2.1+ */
       2                 :            : #pragma once
       3                 :            : 
       4                 :            : #include <stdarg.h>
       5                 :            : #include <stdbool.h>
       6                 :            : #include <stdio.h>
       7                 :            : #include <syslog.h>
       8                 :            : #include <sys/types.h>
       9                 :            : 
      10                 :            : #include "macro.h"
      11                 :            : #include "time-util.h"
      12                 :            : 
      13                 :            : /* Regular colors */
      14                 :            : #define ANSI_RED     "\x1B[0;31m"
      15                 :            : #define ANSI_GREEN   "\x1B[0;32m"
      16                 :            : #define ANSI_YELLOW  "\x1B[0;33m"
      17                 :            : #define ANSI_BLUE    "\x1B[0;34m"
      18                 :            : #define ANSI_MAGENTA "\x1B[0;35m"
      19                 :            : #define ANSI_GREY    "\x1B[0;38;5;245m"
      20                 :            : 
      21                 :            : /* Bold/highlighted */
      22                 :            : #define ANSI_HIGHLIGHT_RED               "\x1B[0;1;31m"
      23                 :            : #define ANSI_HIGHLIGHT_GREEN             "\x1B[0;1;32m"
      24                 :            : #define ANSI_HIGHLIGHT_YELLOW            "\x1B[0;1;38;5;185m"
      25                 :            : #define ANSI_HIGHLIGHT_BLUE              "\x1B[0;1;34m"
      26                 :            : #define ANSI_HIGHLIGHT_MAGENTA           "\x1B[0;1;35m"
      27                 :            : #define ANSI_HIGHLIGHT_GREY              "\x1B[0;1;38;5;245m"
      28                 :            : #define ANSI_HIGHLIGHT_YELLOW4           "\x1B[0;1;38;5;100m"
      29                 :            : 
      30                 :            : /* Underlined */
      31                 :            : #define ANSI_HIGHLIGHT_RED_UNDERLINE     "\x1B[0;1;4;31m"
      32                 :            : #define ANSI_HIGHLIGHT_GREEN_UNDERLINE   "\x1B[0;1;4;32m"
      33                 :            : #define ANSI_HIGHLIGHT_YELLOW_UNDERLINE  "\x1B[0;1;4;33m"
      34                 :            : #define ANSI_HIGHLIGHT_BLUE_UNDERLINE    "\x1B[0;1;4;34m"
      35                 :            : #define ANSI_HIGHLIGHT_MAGENTA_UNDERLINE "\x1B[0;1;4;35m"
      36                 :            : #define ANSI_HIGHLIGHT_GREY_UNDERLINE    "\x1B[0;1;4;38;5;245m"
      37                 :            : 
      38                 :            : /* Other ANSI codes */
      39                 :            : #define ANSI_UNDERLINE "\x1B[0;4m"
      40                 :            : #define ANSI_HIGHLIGHT "\x1B[0;1;39m"
      41                 :            : #define ANSI_HIGHLIGHT_UNDERLINE "\x1B[0;1;4m"
      42                 :            : 
      43                 :            : /* Reset/clear ANSI styles */
      44                 :            : #define ANSI_NORMAL "\x1B[0m"
      45                 :            : 
      46                 :            : /* Erase characters until the end of the line */
      47                 :            : #define ANSI_ERASE_TO_END_OF_LINE "\x1B[K"
      48                 :            : 
      49                 :            : /* Move cursor up one line */
      50                 :            : #define ANSI_REVERSE_LINEFEED "\x1BM"
      51                 :            : 
      52                 :            : /* Set cursor to top left corner and clear screen */
      53                 :            : #define ANSI_HOME_CLEAR "\x1B[H\x1B[2J"
      54                 :            : 
      55                 :            : int reset_terminal_fd(int fd, bool switch_to_text);
      56                 :            : int reset_terminal(const char *name);
      57                 :            : 
      58                 :            : int open_terminal(const char *name, int mode);
      59                 :            : 
      60                 :            : /* Flags for tweaking the way we become the controlling process of a terminal. */
      61                 :            : typedef enum AcquireTerminalFlags {
      62                 :            :         /* Try to become the controlling process of the TTY. If we can't return -EPERM. */
      63                 :            :         ACQUIRE_TERMINAL_TRY        = 0,
      64                 :            : 
      65                 :            :         /* Tell the kernel to forcibly make us the controlling process of the TTY. Returns -EPERM if the kernel doesn't allow that. */
      66                 :            :         ACQUIRE_TERMINAL_FORCE      = 1,
      67                 :            : 
      68                 :            :         /* If we can't become the controlling process of the TTY right-away, then wait until we can. */
      69                 :            :         ACQUIRE_TERMINAL_WAIT       = 2,
      70                 :            : 
      71                 :            :         /* Pick one of the above, and then OR this flag in, in order to request permissive behaviour, if we can't become controlling process then don't mind */
      72                 :            :         ACQUIRE_TERMINAL_PERMISSIVE = 1 << 2,
      73                 :            : } AcquireTerminalFlags;
      74                 :            : 
      75                 :            : int acquire_terminal(const char *name, AcquireTerminalFlags flags, usec_t timeout);
      76                 :            : int release_terminal(void);
      77                 :            : 
      78                 :            : int terminal_vhangup_fd(int fd);
      79                 :            : int terminal_vhangup(const char *name);
      80                 :            : 
      81                 :            : int chvt(int vt);
      82                 :            : 
      83                 :            : int read_one_char(FILE *f, char *ret, usec_t timeout, bool *need_nl);
      84                 :            : int ask_char(char *ret, const char *replies, const char *text, ...) _printf_(3, 4);
      85                 :            : int ask_string(char **ret, const char *text, ...) _printf_(2, 3);
      86                 :            : 
      87                 :            : int vt_disallocate(const char *name);
      88                 :            : 
      89                 :            : int resolve_dev_console(char **ret);
      90                 :            : int get_kernel_consoles(char ***ret);
      91                 :            : bool tty_is_vc(const char *tty);
      92                 :            : bool tty_is_vc_resolve(const char *tty);
      93                 :            : bool tty_is_console(const char *tty) _pure_;
      94                 :            : int vtnr_from_tty(const char *tty);
      95                 :            : const char *default_term_for_tty(const char *tty);
      96                 :            : 
      97                 :            : int make_console_stdio(void);
      98                 :            : 
      99                 :            : int fd_columns(int fd);
     100                 :            : unsigned columns(void);
     101                 :            : int fd_lines(int fd);
     102                 :            : unsigned lines(void);
     103                 :            : 
     104                 :            : void columns_lines_cache_reset(int _unused_ signum);
     105                 :            : void reset_terminal_feature_caches(void);
     106                 :            : 
     107                 :            : bool on_tty(void);
     108                 :            : bool terminal_is_dumb(void);
     109                 :            : bool colors_enabled(void);
     110                 :            : bool underline_enabled(void);
     111                 :            : bool dev_console_colors_enabled(void);
     112                 :            : 
     113                 :            : #define DEFINE_ANSI_FUNC(name, NAME)                            \
     114                 :            :         static inline const char *ansi_##name(void) {           \
     115                 :            :                 return colors_enabled() ? ANSI_##NAME : "";     \
     116                 :            :         }
     117                 :            : 
     118                 :            : #define DEFINE_ANSI_FUNC_UNDERLINE(name, NAME, REPLACEMENT)             \
     119                 :            :         static inline const char *ansi_##name(void) {                   \
     120                 :            :                 return underline_enabled() ? ANSI_##NAME :              \
     121                 :            :                         colors_enabled() ? ANSI_##REPLACEMENT : "";     \
     122                 :            :         }
     123                 :            : 
     124         [ -  + ]:       1716 : DEFINE_ANSI_FUNC(normal,            NORMAL);
     125         [ -  + ]:       1556 : DEFINE_ANSI_FUNC(highlight,         HIGHLIGHT);
     126         [ -  + ]:          4 : DEFINE_ANSI_FUNC(red,               RED);
     127         [ -  + ]:          4 : DEFINE_ANSI_FUNC(green,             GREEN);
     128         [ -  + ]:          4 : DEFINE_ANSI_FUNC(yellow,            YELLOW);
     129         [ -  + ]:          4 : DEFINE_ANSI_FUNC(blue,              BLUE);
     130         [ -  + ]:          4 : DEFINE_ANSI_FUNC(magenta,           MAGENTA);
     131         [ -  + ]:         20 : DEFINE_ANSI_FUNC(grey,              GREY);
     132         [ -  + ]:          4 : DEFINE_ANSI_FUNC(highlight_red,     HIGHLIGHT_RED);
     133         [ -  + ]:         12 : DEFINE_ANSI_FUNC(highlight_green,   HIGHLIGHT_GREEN);
     134         [ -  + ]:          4 : DEFINE_ANSI_FUNC(highlight_yellow,  HIGHLIGHT_YELLOW);
     135         [ -  + ]:         16 : DEFINE_ANSI_FUNC(highlight_blue,    HIGHLIGHT_BLUE);
     136         [ -  + ]:          8 : DEFINE_ANSI_FUNC(highlight_magenta, HIGHLIGHT_MAGENTA);
     137         [ -  + ]:          4 : DEFINE_ANSI_FUNC(highlight_grey,    HIGHLIGHT_GREY);
     138                 :            : 
     139   [ +  -  -  + ]:        124 : DEFINE_ANSI_FUNC_UNDERLINE(underline,                   UNDERLINE, NORMAL);
     140   [ +  -  -  + ]:          4 : DEFINE_ANSI_FUNC_UNDERLINE(highlight_underline,         HIGHLIGHT_UNDERLINE, HIGHLIGHT);
     141   [ +  -  -  + ]:          4 : DEFINE_ANSI_FUNC_UNDERLINE(highlight_red_underline,     HIGHLIGHT_RED_UNDERLINE, HIGHLIGHT_RED);
     142   [ +  -  -  + ]:          4 : DEFINE_ANSI_FUNC_UNDERLINE(highlight_green_underline,   HIGHLIGHT_GREEN_UNDERLINE, HIGHLIGHT_GREEN);
     143   [ +  -  -  + ]:          4 : DEFINE_ANSI_FUNC_UNDERLINE(highlight_yellow_underline,  HIGHLIGHT_YELLOW_UNDERLINE, HIGHLIGHT_YELLOW);
     144   [ +  -  -  + ]:          4 : DEFINE_ANSI_FUNC_UNDERLINE(highlight_blue_underline,    HIGHLIGHT_BLUE_UNDERLINE, HIGHLIGHT_BLUE);
     145   [ +  -  -  + ]:          4 : DEFINE_ANSI_FUNC_UNDERLINE(highlight_magenta_underline, HIGHLIGHT_MAGENTA_UNDERLINE, HIGHLIGHT_MAGENTA);
     146   [ +  -  -  + ]:          4 : DEFINE_ANSI_FUNC_UNDERLINE(highlight_grey_underline,    HIGHLIGHT_GREY_UNDERLINE, HIGHLIGHT_GREY);
     147                 :            : 
     148                 :            : int get_ctty_devnr(pid_t pid, dev_t *d);
     149                 :            : int get_ctty(pid_t, dev_t *_devnr, char **r);
     150                 :            : 
     151                 :            : int getttyname_malloc(int fd, char **r);
     152                 :            : int getttyname_harder(int fd, char **r);
     153                 :            : 
     154                 :            : int ptsname_malloc(int fd, char **ret);
     155                 :            : 
     156                 :            : int openpt_allocate(int flags, char **ret_slave);
     157                 :            : int openpt_allocate_in_namespace(pid_t pid, int flags, char **ret_slave);
     158                 :            : int open_terminal_in_namespace(pid_t pid, const char *name, int mode);
     159                 :            : 
     160                 :            : int vt_default_utf8(void);
     161                 :            : int vt_reset_keyboard(int fd);
     162                 :            : int vt_restore(int fd);
     163                 :            : int vt_release(int fd, bool restore_vt);
     164                 :            : 
     165                 :            : void get_log_colors(int priority, const char **on, const char **off, const char **highlight);
     166                 :            : 
     167                 :            : /* This assumes there is a 'tty' group */
     168                 :            : #define TTY_MODE 0620

Generated by: LCOV version 1.14