• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

systemd / systemd / 14895667988

07 May 2025 08:57PM UTC coverage: 72.225% (-0.007%) from 72.232%
14895667988

push

github

yuwata
network: log_link_message_debug_errno() automatically append %m if necessary

Follow-up for d28746ef5.
Fixes CID#1609753.

0 of 1 new or added line in 1 file covered. (0.0%)

20297 existing lines in 338 files now uncovered.

297407 of 411780 relevant lines covered (72.22%)

695716.85 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

87.5
/src/basic/glyph-util.c
1
/* SPDX-License-Identifier: LGPL-2.1-or-later */
2

3
#include <stdlib.h>
4

5
#include "env-util.h"
6
#include "glyph-util.h"
7
#include "locale-util.h"
8
#include "strv.h"
9

10
bool emoji_enabled(void) {
1,182✔
11
        static int cached_emoji_enabled = -1;
1,182✔
12

13
        if (cached_emoji_enabled < 0) {
1,182✔
14
                int val = getenv_bool("SYSTEMD_EMOJI");
371✔
15
                if (val >= 0)
371✔
UNCOV
16
                        return (cached_emoji_enabled = val);
×
17

18
                const char *term = getenv("TERM");
371✔
19
                if (!term || STR_IN_SET(term, "dumb", "linux"))
371✔
20
                        return (cached_emoji_enabled = false);
371✔
21

UNCOV
22
                cached_emoji_enabled = is_locale_utf8();
×
23
        }
24

25
        return cached_emoji_enabled;
811✔
26
}
27

28
const char* glyph_full(Glyph code, bool force_utf) {
562,917✔
29

30
        /* A list of a number of interesting unicode glyphs we can use to decorate our output. It's probably wise to be
31
         * conservative here, and primarily stick to the glyphs defined in the eurlatgr font, so that display still
32
         * works reasonably well on the Linux console. For details see:
33
         *
34
         * http://git.altlinux.org/people/legion/packages/kbd.git?p=kbd.git;a=blob;f=data/consolefonts/README.eurlatgr
35
         */
36

37
        static const char* const draw_table[2][_GLYPH_MAX] = {
562,917✔
38
                /* ASCII fallback */
39
                [false] = {
40
                        [GLYPH_SPACE]                   = " ",
41
                        [GLYPH_TREE_VERTICAL]           = "| ",
42
                        [GLYPH_TREE_BRANCH]             = "|-",
43
                        [GLYPH_TREE_RIGHT]              = "`-",
44
                        [GLYPH_TREE_SPACE]              = "  ",
45
                        [GLYPH_TREE_TOP]                = ",-",
46
                        [GLYPH_VERTICAL_DOTTED]         = ":",
47
                        [GLYPH_HORIZONTAL_DOTTED]       = "-",
48
                        [GLYPH_HORIZONTAL_FAT]          = "=",
49
                        [GLYPH_TRIANGULAR_BULLET]       = ">",
50
                        [GLYPH_BLACK_CIRCLE]            = "*",
51
                        [GLYPH_WHITE_CIRCLE]            = "*",
52
                        [GLYPH_MULTIPLICATION_SIGN]     = "x",
53
                        [GLYPH_CIRCLE_ARROW]            = "*",
54
                        [GLYPH_BULLET]                  = "*",
55
                        [GLYPH_MU]                      = "u",
56
                        [GLYPH_CHECK_MARK]              = "+",
57
                        [GLYPH_CROSS_MARK]              = "-",
58
                        [GLYPH_LIGHT_SHADE]             = "-",
59
                        [GLYPH_DARK_SHADE]              = "X",
60
                        [GLYPH_FULL_BLOCK]              = "#",
61
                        [GLYPH_SIGMA]                   = "S",
62
                        [GLYPH_ARROW_UP]                = "^",
63
                        [GLYPH_ARROW_DOWN]              = "v",
64
                        [GLYPH_ARROW_LEFT]              = "<-",
65
                        [GLYPH_ARROW_RIGHT]             = "->",
66
                        [GLYPH_ELLIPSIS]                = "...",
67
                        [GLYPH_EXTERNAL_LINK]           = "[LNK]",
68
                        [GLYPH_ECSTATIC_SMILEY]         = ":-]",
69
                        [GLYPH_HAPPY_SMILEY]            = ":-}",
70
                        [GLYPH_SLIGHTLY_HAPPY_SMILEY]   = ":-)",
71
                        [GLYPH_NEUTRAL_SMILEY]          = ":-|",
72
                        [GLYPH_SLIGHTLY_UNHAPPY_SMILEY] = ":-(",
73
                        [GLYPH_UNHAPPY_SMILEY]          = ":-{",
74
                        [GLYPH_DEPRESSED_SMILEY]        = ":-[",
75
                        [GLYPH_LOCK_AND_KEY]            = "o-,",
76
                        [GLYPH_TOUCH]                   = "O=",    /* Yeah, not very convincing, can you do it better? */
77
                        [GLYPH_RECYCLING]               = "~",
78
                        [GLYPH_DOWNLOAD]                = "\\",
79
                        [GLYPH_SPARKLES]                = "*",
80
                        [GLYPH_LOW_BATTERY]             = "!",
81
                        [GLYPH_WARNING_SIGN]            = "!",
82
                        [GLYPH_RED_CIRCLE]              = "o",
83
                        [GLYPH_YELLOW_CIRCLE]           = "o",
84
                        [GLYPH_BLUE_CIRCLE]             = "o",
85
                        [GLYPH_GREEN_CIRCLE]            = "o",
86
                        [GLYPH_SUPERHERO]               = "S",
87
                        [GLYPH_IDCARD]                  = "@",
88
                        [GLYPH_HOME]                    = "^",
89
                },
90

91
                /* UTF-8 */
92
                [true] = {
93
                        /* This exists to allow more consistent handling of optional whitespace */
94
                        [GLYPH_SPACE]                   = " ",
95

96
                        /* The following are multiple glyphs in both ASCII and in UNICODE */
97
                        [GLYPH_TREE_VERTICAL]           = UTF8("│ "),
98
                        [GLYPH_TREE_BRANCH]             = UTF8("├─"),
99
                        [GLYPH_TREE_RIGHT]              = UTF8("└─"),
100
                        [GLYPH_TREE_SPACE]              = UTF8("  "),
101
                        [GLYPH_TREE_TOP]                = UTF8("┌─"),
102

103
                        /* Single glyphs in both cases */
104
                        [GLYPH_VERTICAL_DOTTED]         = UTF8("┆"),
105
                        [GLYPH_HORIZONTAL_DOTTED]       = UTF8("┄"),
106
                        [GLYPH_HORIZONTAL_FAT]          = UTF8("━"),
107
                        [GLYPH_TRIANGULAR_BULLET]       = UTF8("‣"),
108
                        [GLYPH_BLACK_CIRCLE]            = UTF8("●"),
109
                        [GLYPH_WHITE_CIRCLE]            = UTF8("○"),
110
                        [GLYPH_MULTIPLICATION_SIGN]     = UTF8("×"),
111
                        [GLYPH_CIRCLE_ARROW]            = UTF8("↻"),
112
                        [GLYPH_BULLET]                  = UTF8("•"),
113
                        [GLYPH_MU]                      = UTF8("μ"),       /* actually called: GREEK SMALL LETTER MU */
114
                        [GLYPH_CHECK_MARK]              = UTF8("✓"),
115
                        [GLYPH_CROSS_MARK]              = UTF8("✗"),        /* actually called: BALLOT X */
116
                        [GLYPH_LIGHT_SHADE]             = UTF8("░"),
117
                        [GLYPH_DARK_SHADE]              = UTF8("▒"),
118
                        [GLYPH_FULL_BLOCK]              = UTF8("█"),
119
                        [GLYPH_SIGMA]                   = UTF8("Σ"),
120
                        [GLYPH_ARROW_UP]                = UTF8("↑"),       /* actually called: UPWARDS ARROW */
121
                        [GLYPH_ARROW_DOWN]              = UTF8("↓"),       /* actually called: DOWNWARDS ARROW */
122

123
                        /* Single glyph in Unicode, two in ASCII */
124
                        [GLYPH_ARROW_LEFT]              = UTF8("←"),       /* actually called: LEFTWARDS ARROW */
125
                        [GLYPH_ARROW_RIGHT]             = UTF8("→"),       /* actually called: RIGHTWARDS ARROW */
126

127
                        /* Single glyph in Unicode, three in ASCII */
128
                        [GLYPH_ELLIPSIS]                = UTF8("…"),       /* actually called: HORIZONTAL ELLIPSIS */
129

130
                        /* Three glyphs in Unicode, five in ASCII */
131
                        [GLYPH_EXTERNAL_LINK]           = UTF8("[🡕]"),      /* actually called: NORTH EAST SANS-SERIF ARROW, enclosed in [] */
132

133
                        /* These smileys are a single glyph in Unicode, and three in ASCII */
134
                        [GLYPH_ECSTATIC_SMILEY]         = UTF8("😇"),       /* actually called: SMILING FACE WITH HALO */
135
                        [GLYPH_HAPPY_SMILEY]            = UTF8("😀"),       /* actually called: GRINNING FACE */
136
                        [GLYPH_SLIGHTLY_HAPPY_SMILEY]   = UTF8("🙂"),       /* actually called: SLIGHTLY SMILING FACE */
137
                        [GLYPH_NEUTRAL_SMILEY]          = UTF8("😐"),       /* actually called: NEUTRAL FACE */
138
                        [GLYPH_SLIGHTLY_UNHAPPY_SMILEY] = UTF8("🙁"),       /* actually called: SLIGHTLY FROWNING FACE */
139
                        [GLYPH_UNHAPPY_SMILEY]          = UTF8("😨"),       /* actually called: FEARFUL FACE */
140
                        [GLYPH_DEPRESSED_SMILEY]        = UTF8("🤢"),       /* actually called: NAUSEATED FACE */
141

142
                        /* This emoji is a single character cell glyph in Unicode, and three in ASCII */
143
                        [GLYPH_LOCK_AND_KEY]            = UTF8("🔐"),       /* actually called: CLOSED LOCK WITH KEY */
144

145
                        /* This emoji is a single character cell glyph in Unicode, and two in ASCII */
146
                        [GLYPH_TOUCH]                   = UTF8("👆"),       /* actually called: BACKHAND INDEX POINTING UP */
147

148
                        /* These four emojis are single character cell glyphs in Unicode and also in ASCII. */
149
                        [GLYPH_RECYCLING]               = UTF8("♻️"),        /* actually called: UNIVERSAL RECYCLNG SYMBOL */
150
                        [GLYPH_DOWNLOAD]                = UTF8("⤵️"),        /* actually called: RIGHT ARROW CURVING DOWN */
151
                        [GLYPH_SPARKLES]                = UTF8("✨"),
152
                        [GLYPH_LOW_BATTERY]             = UTF8("🪫"),
153
                        [GLYPH_WARNING_SIGN]            = UTF8("⚠️"),
154
                        [GLYPH_COMPUTER_DISK]           = UTF8("💽"),
155
                        [GLYPH_WORLD]                   = UTF8("🌍"),
156

157
                        [GLYPH_RED_CIRCLE]              = UTF8("🔴"),
158
                        [GLYPH_YELLOW_CIRCLE]           = UTF8("🟡"),
159
                        [GLYPH_BLUE_CIRCLE]             = UTF8("🔵"),
160
                        [GLYPH_GREEN_CIRCLE]            = UTF8("🟢"),
161
                        [GLYPH_SUPERHERO]               = UTF8("🦸"),
162
                        [GLYPH_IDCARD]                  = UTF8("🪪"),
163
                        [GLYPH_HOME]                    = UTF8("🏠"),
164
                },
165
        };
166

167
        if (code < 0)
562,917✔
168
                return NULL;
169

170
        assert(code < _GLYPH_MAX);
562,917✔
171
        return draw_table[force_utf || (code >= _GLYPH_FIRST_EMOJI ? emoji_enabled() : is_locale_utf8())][code];
1,116,342✔
172
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc