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

systemd / systemd / 15232239991

24 May 2025 08:01PM UTC coverage: 72.053% (-0.02%) from 72.07%
15232239991

push

github

web-flow
docs: add man pages for sd_device_enumerator_[new,ref,unref,unrefp] (#37586)

For #20929.

299160 of 415197 relevant lines covered (72.05%)

703671.29 hits per line

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

88.24
/src/shared/install-printf.c
1
/* SPDX-License-Identifier: LGPL-2.1-or-later */
2

3
#include "alloc-util.h"
4
#include "install.h"
5
#include "install-printf.h"
6
#include "specifier.h"
7
#include "string-util.h"
8
#include "unit-name.h"
9

10
static int specifier_prefix_and_instance(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
2✔
11
        const InstallInfo *i = ASSERT_PTR(userdata);
2✔
12
        _cleanup_free_ char *prefix = NULL;
2✔
13
        int r;
2✔
14

15
        r = unit_name_to_prefix_and_instance(i->name, &prefix);
2✔
16
        if (r < 0)
2✔
17
                return r;
18

19
        if (endswith(prefix, "@") && i->default_instance) {
2✔
20
                char *ans;
×
21

22
                ans = strjoin(prefix, i->default_instance);
×
23
                if (!ans)
×
24
                        return -ENOMEM;
25
                *ret = ans;
×
26
        } else
27
                *ret = TAKE_PTR(prefix);
2✔
28

29
        return 0;
30
}
31

32
static int specifier_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
2✔
33
        const InstallInfo *i = ASSERT_PTR(userdata);
2✔
34

35
        if (unit_name_is_valid(i->name, UNIT_NAME_TEMPLATE) && i->default_instance)
2✔
36
                return unit_name_replace_instance(i->name, i->default_instance, ret);
×
37

38
        return strdup_to(ret, i->name);
2✔
39
}
40

41
static int specifier_prefix(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
3✔
42
        const InstallInfo *i = ASSERT_PTR(userdata);
3✔
43

44
        return unit_name_to_prefix(i->name, ret);
3✔
45
}
46

47
static int specifier_instance(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
1✔
48
        const InstallInfo *i = ASSERT_PTR(userdata);
1✔
49
        char *instance;
1✔
50
        int r;
1✔
51

52
        r = unit_name_to_instance(i->name, &instance);
1✔
53
        if (r < 0)
1✔
54
                return r;
1✔
55

56
        if (isempty(instance)) {
1✔
57
                r = free_and_strdup(&instance, strempty(i->default_instance));
2✔
58
                if (r < 0)
1✔
59
                        return r;
60
        }
61

62
        *ret = instance;
1✔
63
        return 0;
1✔
64
}
65

66
static int specifier_last_component(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
1✔
67
        _cleanup_free_ char *prefix = NULL;
1✔
68
        char *dash;
1✔
69
        int r;
1✔
70

71
        assert(ret);
1✔
72

73
        r = specifier_prefix(specifier, data, root, userdata, &prefix);
1✔
74
        if (r < 0)
1✔
75
                return r;
76

77
        dash = strrchr(prefix, '-');
1✔
78
        if (dash)
1✔
79
                return strdup_to(ret, dash + 1);
×
80

81
        *ret = TAKE_PTR(prefix);
1✔
82
        return 0;
1✔
83
}
84

85
int install_name_printf(
914✔
86
                RuntimeScope scope,
87
                const InstallInfo *info,
88
                const char *format,
89
                char **ret) {
90
        /* This is similar to unit_name_printf() */
91

92
        const Specifier table[] = {
914✔
93
                { 'i', specifier_instance,            NULL },
94
                { 'j', specifier_last_component,      NULL },
95
                { 'n', specifier_name,                NULL },
96
                { 'N', specifier_prefix_and_instance, NULL },
97
                { 'p', specifier_prefix,              NULL },
98

99
                COMMON_SYSTEM_SPECIFIERS,
100

101
                COMMON_CREDS_SPECIFIERS(scope),
914✔
102
                {}
103
        };
104

105
        assert(info);
914✔
106
        assert(format);
914✔
107
        assert(ret);
914✔
108

109
        return specifier_printf(format, UNIT_NAME_MAX, table, info->root, info, ret);
914✔
110
}
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