memdup:
    7|  9.97k|void* memdup(const void *p, size_t l) {
    8|  9.97k|        void *ret;
    9|       |
   10|  9.97k|        assert(l == 0 || p);
  ------------------
  |  |   72|  9.97k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  9.97k|        do {                                                            \
  |  |  |  |   59|  9.97k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  19.9k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 9.97k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 9.97k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 9.97k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  9.97k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  9.97k|        } while (false)
  |  |  ------------------
  ------------------
   11|       |
   12|  9.97k|        ret = malloc(l ?: 1);
  ------------------
  |  Branch (12:22): [True: 9.97k, False: 0]
  ------------------
   13|  9.97k|        if (!ret)
  ------------------
  |  Branch (13:13): [True: 0, False: 0]
  ------------------
   14|      0|                return NULL;
   15|       |
   16|      0|        return memcpy_safe(ret, p, l);
   17|      0|}
memdup_suffix0:
   19|    216|void* memdup_suffix0(const void *p, size_t l) {
   20|    216|        void *ret;
   21|       |
   22|    216|        assert(l == 0 || p);
  ------------------
  |  |   72|    216|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    216|        do {                                                            \
  |  |  |  |   59|    216|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    432|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 216]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 216]
  |  |  |  |  |  |  |  Branch (95:44): [True: 216, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    216|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    216|        } while (false)
  |  |  ------------------
  ------------------
   23|       |
   24|       |        /* The same as memdup() but place a safety NUL byte after the allocated memory */
   25|       |
   26|    216|        if (_unlikely_(l == SIZE_MAX)) /* prevent overflow */
  ------------------
  |  |   95|    216|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:23): [True: 0, False: 216]
  |  |  ------------------
  ------------------
   27|      0|                return NULL;
   28|       |
   29|    216|        ret = malloc(l + 1);
   30|    216|        if (!ret)
  ------------------
  |  Branch (30:13): [True: 0, False: 216]
  ------------------
   31|      0|                return NULL;
   32|       |
   33|    216|        ((uint8_t*) ret)[l] = 0;
   34|    216|        return memcpy_safe(ret, p, l);
   35|    216|}
greedy_realloc:
   40|  18.9M|                size_t size) {
   41|       |
   42|  18.9M|        size_t newalloc;
   43|  18.9M|        void *q;
   44|       |
   45|  18.9M|        assert(p);
  ------------------
  |  |   72|  18.9M|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  18.9M|        do {                                                            \
  |  |  |  |   59|  18.9M|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  18.9M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 18.9M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  18.9M|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  18.9M|        } while (false)
  |  |  ------------------
  ------------------
   46|       |
   47|       |        /* We use malloc_usable_size() for determining the current allocated size. On all systems we care
   48|       |         * about this should be safe to rely on. Should there ever arise the need to avoid relying on this we
   49|       |         * can instead locally fall back to realloc() on every call, rounded up to the next exponent of 2 or
   50|       |         * so. */
   51|       |
   52|  18.9M|        if (*p && (size == 0 || (MALLOC_SIZEOF_SAFE(*p) / size >= need)))
  ------------------
  |  |  198|  16.9M|        malloc_sizeof_safe((void**) &__builtin_choose_expr(__builtin_constant_p(x), (void*) { NULL }, (x)))
  ------------------
  |  Branch (52:13): [True: 16.9M, False: 1.93M]
  |  Branch (52:20): [True: 0, False: 16.9M]
  |  Branch (52:33): [True: 16.9M, False: 18.9k]
  ------------------
   53|  16.9M|                return *p;
   54|       |
   55|  1.95M|        if (_unlikely_(need > SIZE_MAX/2)) /* Overflow check */
  ------------------
  |  |   95|  1.95M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:23): [True: 0, False: 1.95M]
  |  |  ------------------
  ------------------
   56|      0|                return NULL;
   57|  1.95M|        newalloc = need * 2;
   58|       |
   59|  1.95M|        if (!MUL_ASSIGN_SAFE(&newalloc, size))
  ------------------
  |  |  273|  1.95M|#define MUL_ASSIGN_SAFE(a, b) __MUL_ASSIGN_SAFE(UNIQ, a, b)
  |  |  ------------------
  |  |  |  |  275|  1.95M|        ({                                                      \
  |  |  |  |  276|  1.95M|                const typeof(a) UNIQ_T(A, q) = (a);             \
  |  |  |  |  277|  1.95M|                MUL_SAFE(UNIQ_T(A, q), *UNIQ_T(A, q), b);       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  272|  1.95M|#define MUL_SAFE(ret, a, b) (!__builtin_mul_overflow(a, b, ret))
  |  |  |  |  ------------------
  |  |  |  |  278|  1.95M|        })
  |  |  ------------------
  ------------------
  |  Branch (59:13): [True: 0, False: 1.95M]
  ------------------
   60|      0|                return NULL;
   61|       |
   62|  1.95M|        if (newalloc < 64) /* Allocate at least 64 bytes */
  ------------------
  |  Branch (62:13): [True: 1.93M, False: 21.5k]
  ------------------
   63|  1.93M|                newalloc = 64;
   64|       |
   65|  1.95M|        q = realloc(*p, newalloc);
   66|  1.95M|        if (!q)
  ------------------
  |  Branch (66:13): [True: 0, False: 1.95M]
  ------------------
   67|      0|                return NULL;
   68|       |
   69|  1.95M|        return *p = q;
   70|  1.95M|}
expand_to_usable:
  128|  16.9M|void *expand_to_usable(void *ptr, size_t newsize _unused_) {
  129|  16.9M|        return ptr;
  130|  16.9M|}
malloc_sizeof_safe:
  132|  16.9M|size_t malloc_sizeof_safe(void **xp) {
  133|  16.9M|        if (_unlikely_(!xp || !*xp))
  ------------------
  |  |   95|  33.9M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:23): [True: 0, False: 16.9M]
  |  |  |  Branch (95:44): [True: 0, False: 16.9M]
  |  |  |  Branch (95:44): [True: 0, False: 16.9M]
  |  |  ------------------
  ------------------
  134|      0|                return 0;
  135|       |
  136|  16.9M|        size_t sz = malloc_usable_size(*xp);
  137|  16.9M|        *xp = expand_to_usable(*xp, sz);
  138|       |        /* GCC doesn't see the _returns_nonnull_ when built with ubsan, so yet another hint to make it doubly
  139|       |         * clear that expand_to_usable won't return NULL.
  140|       |         * See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79265 */
  141|  16.9M|        if (!*xp)
  ------------------
  |  Branch (141:13): [True: 0, False: 16.9M]
  ------------------
  142|      0|                assert_not_reached();
  ------------------
  |  |   76|      0|        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  143|  16.9M|        return sz;
  144|  16.9M|}

bond.c:freep:
   78|  8.02k|static inline void freep(void *p) {
   79|  8.02k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  8.02k|        ({                                      \
  |  |  405|  8.02k|                free(memory);                   \
  |  |  406|  8.02k|                (typeof(memory)) NULL;          \
  |  |  407|  8.02k|        })
  ------------------
   80|  8.02k|}
l2tp-tunnel.c:freep:
   78|  5.94k|static inline void freep(void *p) {
   79|  5.94k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  5.94k|        ({                                      \
  |  |  405|  5.94k|                free(memory);                   \
  |  |  406|  5.94k|                (typeof(memory)) NULL;          \
  |  |  407|  5.94k|        })
  ------------------
   80|  5.94k|}
l2tp-tunnel.c:malloc_multiply:
   88|  59.3k|_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t need, size_t size) {
   89|  59.3k|        if (size_multiply_overflow(size, need))
  ------------------
  |  Branch (89:13): [True: 0, False: 59.3k]
  ------------------
   90|      0|                return NULL;
   91|       |
   92|  59.3k|        return malloc(size * need ?: 1);
  ------------------
  |  Branch (92:23): [True: 59.3k, False: 0]
  ------------------
   93|  59.3k|}
l2tp-tunnel.c:size_multiply_overflow:
   84|  59.3k|static inline bool size_multiply_overflow(size_t size, size_t need) {
   85|  59.3k|        return _unlikely_(need != 0 && size > (SIZE_MAX / need));
  ------------------
  |  |   95|   118k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:44): [True: 59.3k, False: 0]
  |  |  |  Branch (95:44): [True: 0, False: 59.3k]
  |  |  ------------------
  ------------------
   86|  59.3k|}
macsec.c:malloc_multiply:
   88|  9.09k|_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t need, size_t size) {
   89|  9.09k|        if (size_multiply_overflow(size, need))
  ------------------
  |  Branch (89:13): [True: 0, False: 9.09k]
  ------------------
   90|      0|                return NULL;
   91|       |
   92|  9.09k|        return malloc(size * need ?: 1);
  ------------------
  |  Branch (92:23): [True: 9.09k, False: 0]
  ------------------
   93|  9.09k|}
macsec.c:size_multiply_overflow:
   84|  9.09k|static inline bool size_multiply_overflow(size_t size, size_t need) {
   85|  9.09k|        return _unlikely_(need != 0 && size > (SIZE_MAX / need));
  ------------------
  |  |   95|  18.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:44): [True: 9.09k, False: 0]
  |  |  |  Branch (95:44): [True: 0, False: 9.09k]
  |  |  ------------------
  ------------------
   86|  9.09k|}
macsec.c:freep:
   78|  9.81k|static inline void freep(void *p) {
   79|  9.81k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  9.81k|        ({                                      \
  |  |  405|  9.81k|                free(memory);                   \
  |  |  406|  9.81k|                (typeof(memory)) NULL;          \
  |  |  407|  9.81k|        })
  ------------------
   80|  9.81k|}
netdev.c:freep:
   78|  13.0k|static inline void freep(void *p) {
   79|  13.0k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  13.0k|        ({                                      \
  |  |  405|  13.0k|                free(memory);                   \
  |  |  406|  13.0k|                (typeof(memory)) NULL;          \
  |  |  407|  13.0k|        })
  ------------------
   80|  13.0k|}
netdev.c:malloc_multiply:
   88|  13.0k|_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t need, size_t size) {
   89|  13.0k|        if (size_multiply_overflow(size, need))
  ------------------
  |  Branch (89:13): [True: 0, False: 13.0k]
  ------------------
   90|      0|                return NULL;
   91|       |
   92|  13.0k|        return malloc(size * need ?: 1);
  ------------------
  |  Branch (92:23): [True: 13.0k, False: 0]
  ------------------
   93|  13.0k|}
netdev.c:size_multiply_overflow:
   84|  13.0k|static inline bool size_multiply_overflow(size_t size, size_t need) {
   85|  13.0k|        return _unlikely_(need != 0 && size > (SIZE_MAX / need));
  ------------------
  |  |   95|  26.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:44): [True: 13.0k, False: 0]
  |  |  |  Branch (95:44): [True: 0, False: 13.0k]
  |  |  ------------------
  ------------------
   86|  13.0k|}
vlan.c:freep:
   78|  69.7k|static inline void freep(void *p) {
   79|  69.7k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  69.7k|        ({                                      \
  |  |  405|  69.7k|                free(memory);                   \
  |  |  406|  69.7k|                (typeof(memory)) NULL;          \
  |  |  407|  69.7k|        })
  ------------------
   80|  69.7k|}
vlan.c:malloc_multiply:
   88|  23.7k|_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t need, size_t size) {
   89|  23.7k|        if (size_multiply_overflow(size, need))
  ------------------
  |  Branch (89:13): [True: 0, False: 23.7k]
  ------------------
   90|      0|                return NULL;
   91|       |
   92|  23.7k|        return malloc(size * need ?: 1);
  ------------------
  |  Branch (92:23): [True: 23.7k, False: 0]
  ------------------
   93|  23.7k|}
vlan.c:size_multiply_overflow:
   84|  23.7k|static inline bool size_multiply_overflow(size_t size, size_t need) {
   85|  23.7k|        return _unlikely_(need != 0 && size > (SIZE_MAX / need));
  ------------------
  |  |   95|  47.5k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:44): [True: 23.7k, False: 0]
  |  |  |  Branch (95:44): [True: 0, False: 23.7k]
  |  |  ------------------
  ------------------
   86|  23.7k|}
wireguard.c:freep:
   78|  79.6k|static inline void freep(void *p) {
   79|  79.6k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  79.6k|        ({                                      \
  |  |  405|  79.6k|                free(memory);                   \
  |  |  406|  79.6k|                (typeof(memory)) NULL;          \
  |  |  407|  79.6k|        })
  ------------------
   80|  79.6k|}
wireguard.c:malloc_multiply:
   88|  39.1k|_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t need, size_t size) {
   89|  39.1k|        if (size_multiply_overflow(size, need))
  ------------------
  |  Branch (89:13): [True: 0, False: 39.1k]
  ------------------
   90|      0|                return NULL;
   91|       |
   92|  39.1k|        return malloc(size * need ?: 1);
  ------------------
  |  Branch (92:23): [True: 39.1k, False: 0]
  ------------------
   93|  39.1k|}
wireguard.c:size_multiply_overflow:
   84|  39.1k|static inline bool size_multiply_overflow(size_t size, size_t need) {
   85|  39.1k|        return _unlikely_(need != 0 && size > (SIZE_MAX / need));
  ------------------
  |  |   95|  78.3k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:44): [True: 39.1k, False: 0]
  |  |  |  Branch (95:44): [True: 0, False: 39.1k]
  |  |  ------------------
  ------------------
   86|  39.1k|}
networkd-manager.c:malloc_multiply:
   88|  13.0k|_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t need, size_t size) {
   89|  13.0k|        if (size_multiply_overflow(size, need))
  ------------------
  |  Branch (89:13): [True: 0, False: 13.0k]
  ------------------
   90|      0|                return NULL;
   91|       |
   92|  13.0k|        return malloc(size * need ?: 1);
  ------------------
  |  Branch (92:23): [True: 13.0k, False: 0]
  ------------------
   93|  13.0k|}
networkd-manager.c:size_multiply_overflow:
   84|  13.0k|static inline bool size_multiply_overflow(size_t size, size_t need) {
   85|  13.0k|        return _unlikely_(need != 0 && size > (SIZE_MAX / need));
  ------------------
  |  |   95|  26.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:44): [True: 13.0k, False: 0]
  |  |  |  Branch (95:44): [True: 0, False: 13.0k]
  |  |  ------------------
  ------------------
   86|  13.0k|}
networkd-route.c:malloc_multiply:
   88|  20.2k|_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t need, size_t size) {
   89|  20.2k|        if (size_multiply_overflow(size, need))
  ------------------
  |  Branch (89:13): [True: 0, False: 20.2k]
  ------------------
   90|      0|                return NULL;
   91|       |
   92|  20.2k|        return malloc(size * need ?: 1);
  ------------------
  |  Branch (92:23): [True: 20.2k, False: 0]
  ------------------
   93|  20.2k|}
networkd-route.c:size_multiply_overflow:
   84|  20.2k|static inline bool size_multiply_overflow(size_t size, size_t need) {
   85|  20.2k|        return _unlikely_(need != 0 && size > (SIZE_MAX / need));
  ------------------
  |  |   95|  40.5k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:44): [True: 20.2k, False: 0]
  |  |  |  Branch (95:44): [True: 0, False: 20.2k]
  |  |  ------------------
  ------------------
   86|  20.2k|}
condition.c:malloc_multiply:
   88|  2.25k|_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t need, size_t size) {
   89|  2.25k|        if (size_multiply_overflow(size, need))
  ------------------
  |  Branch (89:13): [True: 0, False: 2.25k]
  ------------------
   90|      0|                return NULL;
   91|       |
   92|  2.25k|        return malloc(size * need ?: 1);
  ------------------
  |  Branch (92:23): [True: 2.25k, False: 0]
  ------------------
   93|  2.25k|}
condition.c:size_multiply_overflow:
   84|  2.25k|static inline bool size_multiply_overflow(size_t size, size_t need) {
   85|  2.25k|        return _unlikely_(need != 0 && size > (SIZE_MAX / need));
  ------------------
  |  |   95|  4.50k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:44): [True: 2.25k, False: 0]
  |  |  |  Branch (95:44): [True: 0, False: 2.25k]
  |  |  ------------------
  ------------------
   86|  2.25k|}
condition.c:freep:
   78|  5.04k|static inline void freep(void *p) {
   79|  5.04k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  5.04k|        ({                                      \
  |  |  405|  5.04k|                free(memory);                   \
  |  |  406|  5.04k|                (typeof(memory)) NULL;          \
  |  |  407|  5.04k|        })
  ------------------
   80|  5.04k|}
conf-parser.c:freep:
   78|  2.10M|static inline void freep(void *p) {
   79|  2.10M|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  2.10M|        ({                                      \
  |  |  405|  2.10M|                free(memory);                   \
  |  |  406|  2.10M|                (typeof(memory)) NULL;          \
  |  |  407|  2.10M|        })
  ------------------
   80|  2.10M|}
conf-parser.c:memdup_multiply:
   95|  9.97k|_alloc_(2, 3) static inline void *memdup_multiply(const void *p, size_t need, size_t size) {
   96|  9.97k|        if (size_multiply_overflow(size, need))
  ------------------
  |  Branch (96:13): [True: 0, False: 9.97k]
  ------------------
   97|      0|                return NULL;
   98|       |
   99|  9.97k|        return memdup(p, size * need);
  100|  9.97k|}
conf-parser.c:size_multiply_overflow:
   84|  11.7k|static inline bool size_multiply_overflow(size_t size, size_t need) {
   85|  11.7k|        return _unlikely_(need != 0 && size > (SIZE_MAX / need));
  ------------------
  |  |   95|  23.4k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:44): [True: 11.7k, False: 0]
  |  |  |  Branch (95:44): [True: 0, False: 11.7k]
  |  |  ------------------
  ------------------
   86|  11.7k|}
conf-parser.c:malloc_multiply:
   88|  1.72k|_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t need, size_t size) {
   89|  1.72k|        if (size_multiply_overflow(size, need))
  ------------------
  |  Branch (89:13): [True: 0, False: 1.72k]
  ------------------
   90|      0|                return NULL;
   91|       |
   92|  1.72k|        return malloc(size * need ?: 1);
  ------------------
  |  Branch (92:23): [True: 1.72k, False: 0]
  ------------------
   93|  1.72k|}
creds-util.c:freep:
   78|  2.15k|static inline void freep(void *p) {
   79|  2.15k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  2.15k|        ({                                      \
  |  |  405|  2.15k|                free(memory);                   \
  |  |  406|  2.15k|                (typeof(memory)) NULL;          \
  |  |  407|  2.15k|        })
  ------------------
   80|  2.15k|}
dns-domain.c:freep:
   78|  5.91k|static inline void freep(void *p) {
   79|  5.91k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  5.91k|        ({                                      \
  |  |  405|  5.91k|                free(memory);                   \
  |  |  406|  5.91k|                (typeof(memory)) NULL;          \
  |  |  407|  5.91k|        })
  ------------------
   80|  5.91k|}
group-record.c:malloc_multiply:
   88|     70|_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t need, size_t size) {
   89|     70|        if (size_multiply_overflow(size, need))
  ------------------
  |  Branch (89:13): [True: 0, False: 70]
  ------------------
   90|      0|                return NULL;
   91|       |
   92|     70|        return malloc(size * need ?: 1);
  ------------------
  |  Branch (92:23): [True: 70, False: 0]
  ------------------
   93|     70|}
group-record.c:size_multiply_overflow:
   84|     70|static inline bool size_multiply_overflow(size_t size, size_t need) {
   85|     70|        return _unlikely_(need != 0 && size > (SIZE_MAX / need));
  ------------------
  |  |   95|    140|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:44): [True: 70, False: 0]
  |  |  |  Branch (95:44): [True: 0, False: 70]
  |  |  ------------------
  ------------------
   86|     70|}
hostname-setup.c:freep:
   78|    210|static inline void freep(void *p) {
   79|    210|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|    210|        ({                                      \
  |  |  405|    210|                free(memory);                   \
  |  |  406|    210|                (typeof(memory)) NULL;          \
  |  |  407|    210|        })
  ------------------
   80|    210|}
ip-protocol-list.c:freep:
   78|  2.05k|static inline void freep(void *p) {
   79|  2.05k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  2.05k|        ({                                      \
  |  |  405|  2.05k|                free(memory);                   \
  |  |  406|  2.05k|                (typeof(memory)) NULL;          \
  |  |  407|  2.05k|        })
  ------------------
   80|  2.05k|}
socket-netlink.c:freep:
   78|  47.4k|static inline void freep(void *p) {
   79|  47.4k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  47.4k|        ({                                      \
  |  |  405|  47.4k|                free(memory);                   \
  |  |  406|  47.4k|                (typeof(memory)) NULL;          \
  |  |  407|  47.4k|        })
  ------------------
   80|  47.4k|}
user-record-nss.c:freep:
   78|  1.70k|static inline void freep(void *p) {
   79|  1.70k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  1.70k|        ({                                      \
  |  |  405|  1.70k|                free(memory);                   \
  |  |  406|  1.70k|                (typeof(memory)) NULL;          \
  |  |  407|  1.70k|        })
  ------------------
   80|  1.70k|}
user-record-nss.c:malloc_multiply:
   88|     30|_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t need, size_t size) {
   89|     30|        if (size_multiply_overflow(size, need))
  ------------------
  |  Branch (89:13): [True: 0, False: 30]
  ------------------
   90|      0|                return NULL;
   91|       |
   92|     30|        return malloc(size * need ?: 1);
  ------------------
  |  Branch (92:23): [True: 30, False: 0]
  ------------------
   93|     30|}
user-record-nss.c:size_multiply_overflow:
   84|     30|static inline bool size_multiply_overflow(size_t size, size_t need) {
   85|     30|        return _unlikely_(need != 0 && size > (SIZE_MAX / need));
  ------------------
  |  |   95|     60|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:44): [True: 30, False: 0]
  |  |  |  Branch (95:44): [True: 0, False: 30]
  |  |  ------------------
  ------------------
   86|     30|}
user-record.c:malloc_multiply:
   88|     84|_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t need, size_t size) {
   89|     84|        if (size_multiply_overflow(size, need))
  ------------------
  |  Branch (89:13): [True: 0, False: 84]
  ------------------
   90|      0|                return NULL;
   91|       |
   92|     84|        return malloc(size * need ?: 1);
  ------------------
  |  Branch (92:23): [True: 84, False: 0]
  ------------------
   93|     84|}
user-record.c:size_multiply_overflow:
   84|     84|static inline bool size_multiply_overflow(size_t size, size_t need) {
   85|     84|        return _unlikely_(need != 0 && size > (SIZE_MAX / need));
   86|     84|}
userdb-dropin.c:freep:
   78|    835|static inline void freep(void *p) {
   79|    835|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|    835|        ({                                      \
  |  |  405|    835|                free(memory);                   \
  |  |  406|    835|                (typeof(memory)) NULL;          \
  |  |  407|    835|        })
  ------------------
   80|    835|}
userdb.c:malloc_multiply:
   88|    835|_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t need, size_t size) {
   89|    835|        if (size_multiply_overflow(size, need))
  ------------------
  |  Branch (89:13): [True: 0, False: 835]
  ------------------
   90|      0|                return NULL;
   91|       |
   92|    835|        return malloc(size * need ?: 1);
  ------------------
  |  Branch (92:23): [True: 835, False: 0]
  ------------------
   93|    835|}
userdb.c:size_multiply_overflow:
   84|    835|static inline bool size_multiply_overflow(size_t size, size_t need) {
   85|    835|        return _unlikely_(need != 0 && size > (SIZE_MAX / need));
  ------------------
  |  |   95|  1.67k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:44): [True: 835, False: 0]
  |  |  |  Branch (95:44): [True: 0, False: 835]
  |  |  ------------------
  ------------------
   86|    835|}
userdb.c:freep:
   78|    148|static inline void freep(void *p) {
   79|    148|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|    148|        ({                                      \
  |  |  405|    148|                free(memory);                   \
  |  |  406|    148|                (typeof(memory)) NULL;          \
  |  |  407|    148|        })
  ------------------
   80|    148|}
chase.c:freep:
   78|   989k|static inline void freep(void *p) {
   79|   989k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|   989k|        ({                                      \
  |  |  405|   989k|                free(memory);                   \
  |  |  406|   989k|                (typeof(memory)) NULL;          \
  |  |  407|   989k|        })
  ------------------
   80|   989k|}
conf-files.c:freep:
   78|   115k|static inline void freep(void *p) {
   79|   115k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|   115k|        ({                                      \
  |  |  405|   115k|                free(memory);                   \
  |  |  406|   115k|                (typeof(memory)) NULL;          \
  |  |  407|   115k|        })
  ------------------
   80|   115k|}
escape.c:malloc_multiply:
   88|    533|_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t need, size_t size) {
   89|    533|        if (size_multiply_overflow(size, need))
  ------------------
  |  Branch (89:13): [True: 0, False: 533]
  ------------------
   90|      0|                return NULL;
   91|       |
   92|    533|        return malloc(size * need ?: 1);
  ------------------
  |  Branch (92:23): [True: 533, False: 0]
  ------------------
   93|    533|}
escape.c:size_multiply_overflow:
   84|    533|static inline bool size_multiply_overflow(size_t size, size_t need) {
   85|    533|        return _unlikely_(need != 0 && size > (SIZE_MAX / need));
  ------------------
  |  |   95|  1.06k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:44): [True: 533, False: 0]
  |  |  |  Branch (95:44): [True: 0, False: 533]
  |  |  ------------------
  ------------------
   86|    533|}
extract-word.c:freep:
   78|   127k|static inline void freep(void *p) {
   79|   127k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|   127k|        ({                                      \
  |  |  405|   127k|                free(memory);                   \
  |  |  406|   127k|                (typeof(memory)) NULL;          \
  |  |  407|   127k|        })
  ------------------
   80|   127k|}
fileio.c:freep:
   78|  1.81M|static inline void freep(void *p) {
   79|  1.81M|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  1.81M|        ({                                      \
  |  |  405|  1.81M|                free(memory);                   \
  |  |  406|  1.81M|                (typeof(memory)) NULL;          \
  |  |  407|  1.81M|        })
  ------------------
   80|  1.81M|}
hashmap.c:freep:
   78|  46.1k|static inline void freep(void *p) {
   79|  46.1k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  46.1k|        ({                                      \
  |  |  405|  46.1k|                free(memory);                   \
  |  |  406|  46.1k|                (typeof(memory)) NULL;          \
  |  |  407|  46.1k|        })
  ------------------
   80|  46.1k|}
hexdecoct.c:freep:
   78|  15.8k|static inline void freep(void *p) {
   79|  15.8k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  15.8k|        ({                                      \
  |  |  405|  15.8k|                free(memory);                   \
  |  |  406|  15.8k|                (typeof(memory)) NULL;          \
  |  |  407|  15.8k|        })
  ------------------
   80|  15.8k|}
in-addr-util.c:freep:
   78|  43.4k|static inline void freep(void *p) {
   79|  43.4k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  43.4k|        ({                                      \
  |  |  405|  43.4k|                free(memory);                   \
  |  |  406|  43.4k|                (typeof(memory)) NULL;          \
  |  |  407|  43.4k|        })
  ------------------
   80|  43.4k|}
log.c:freep:
   78|  28.8k|static inline void freep(void *p) {
   79|  28.8k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  28.8k|        ({                                      \
  |  |  405|  28.8k|                free(memory);                   \
  |  |  406|  28.8k|                (typeof(memory)) NULL;          \
  |  |  407|  28.8k|        })
  ------------------
   80|  28.8k|}
parse-util.c:freep:
   78|  29.0k|static inline void freep(void *p) {
   79|  29.0k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  29.0k|        ({                                      \
  |  |  405|  29.0k|                free(memory);                   \
  |  |  406|  29.0k|                (typeof(memory)) NULL;          \
  |  |  407|  29.0k|        })
  ------------------
   80|  29.0k|}
path-util.c:freep:
   78|  18.6k|static inline void freep(void *p) {
   79|  18.6k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  18.6k|        ({                                      \
  |  |  405|  18.6k|                free(memory);                   \
  |  |  406|  18.6k|                (typeof(memory)) NULL;          \
  |  |  407|  18.6k|        })
  ------------------
   80|  18.6k|}
path-util.c:GREEDY_ALLOC_ROUND_UP:
  111|   241k|static inline size_t GREEDY_ALLOC_ROUND_UP(size_t l) {
  112|   241k|        size_t m;
  113|       |
  114|       |        /* Round up allocation sizes a bit to some reasonable, likely larger value. This is supposed to be
  115|       |         * used for cases which are likely called in an allocation loop of some form, i.e. that repetitively
  116|       |         * grow stuff, for example strv_extend() and suchlike.
  117|       |         *
  118|       |         * Note the difference to GREEDY_REALLOC() here, as this helper operates on a single size value only,
  119|       |         * and rounds up to next multiple of 2, needing no further counter.
  120|       |         *
  121|       |         * Note the benefits of direct ALIGN_POWER2() usage: type-safety for size_t, sane handling for very
  122|       |         * small (i.e. <= 2) and safe handling for very large (i.e. > SSIZE_MAX) values. */
  123|       |
  124|   241k|        if (l <= 2)
  ------------------
  |  Branch (124:13): [True: 0, False: 241k]
  ------------------
  125|      0|                return 2; /* Never allocate less than 2 of something.  */
  126|       |
  127|   241k|        m = ALIGN_POWER2(l);
  128|   241k|        if (m == 0) /* overflow? */
  ------------------
  |  Branch (128:13): [True: 0, False: 241k]
  ------------------
  129|      0|                return l;
  130|       |
  131|   241k|        return m;
  132|   241k|}
process-util.c:freep:
   78|    144|static inline void freep(void *p) {
   79|    144|        *(void**)p = mfree(*(void**) p);
   80|    144|}
rlimit-util.c:free_many:
  209|     84|static inline void free_many(void **p, size_t n) {
  210|     84|        assert(p || n == 0);
  ------------------
  |  |   72|     84|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     84|        do {                                                            \
  |  |  |  |   59|     84|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     84|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 84]
  |  |  |  |  |  |  |  Branch (95:44): [True: 84, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     84|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     84|        } while (false)
  |  |  ------------------
  ------------------
  211|       |
  212|     84|        FOREACH_ARRAY(i, p, n)
  ------------------
  |  |  463|     84|        _FOREACH_ARRAY(i, array, num, UNIQ_T(m, UNIQ), UNIQ_T(end, UNIQ))
  |  |  ------------------
  |  |  |  |  457|     84|        for (typeof(array[0]) *i = (array), *end = ({                   \
  |  |  |  |  458|     84|                                typeof(num) m = (num);                  \
  |  |  |  |  459|     84|                                (i && m > 0) ? i + m : NULL;            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (459:34): [True: 84, False: 0]
  |  |  |  |  |  Branch (459:39): [True: 84, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  460|  1.42k|                        }); end && i < end; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (460:29): [True: 1.42k, False: 0]
  |  |  |  |  |  Branch (460:36): [True: 1.34k, False: 84]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  213|  1.34k|                *i = mfree(*i);
  ------------------
  |  |  404|  1.34k|        ({                                      \
  |  |  405|  1.34k|                free(memory);                   \
  |  |  406|  1.34k|                (typeof(memory)) NULL;          \
  |  |  407|  1.34k|        })
  ------------------
  214|     84|}
string-util.c:freep:
   78|  98.1k|static inline void freep(void *p) {
   79|  98.1k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  98.1k|        ({                                      \
  |  |  405|  98.1k|                free(memory);                   \
  |  |  406|  98.1k|                (typeof(memory)) NULL;          \
  |  |  407|  98.1k|        })
  ------------------
   80|  98.1k|}
string-util.c:GREEDY_ALLOC_ROUND_UP:
  111|  98.1k|static inline size_t GREEDY_ALLOC_ROUND_UP(size_t l) {
  112|  98.1k|        size_t m;
  113|       |
  114|       |        /* Round up allocation sizes a bit to some reasonable, likely larger value. This is supposed to be
  115|       |         * used for cases which are likely called in an allocation loop of some form, i.e. that repetitively
  116|       |         * grow stuff, for example strv_extend() and suchlike.
  117|       |         *
  118|       |         * Note the difference to GREEDY_REALLOC() here, as this helper operates on a single size value only,
  119|       |         * and rounds up to next multiple of 2, needing no further counter.
  120|       |         *
  121|       |         * Note the benefits of direct ALIGN_POWER2() usage: type-safety for size_t, sane handling for very
  122|       |         * small (i.e. <= 2) and safe handling for very large (i.e. > SSIZE_MAX) values. */
  123|       |
  124|  98.1k|        if (l <= 2)
  ------------------
  |  Branch (124:13): [True: 290, False: 97.8k]
  ------------------
  125|    290|                return 2; /* Never allocate less than 2 of something.  */
  126|       |
  127|  97.8k|        m = ALIGN_POWER2(l);
  128|  97.8k|        if (m == 0) /* overflow? */
  ------------------
  |  Branch (128:13): [True: 0, False: 97.8k]
  ------------------
  129|      0|                return l;
  130|       |
  131|  97.8k|        return m;
  132|  97.8k|}
strv.c:malloc_multiply:
   88|  23.8k|_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t need, size_t size) {
   89|  23.8k|        if (size_multiply_overflow(size, need))
  ------------------
  |  Branch (89:13): [True: 0, False: 23.8k]
  ------------------
   90|      0|                return NULL;
   91|       |
   92|  23.8k|        return malloc(size * need ?: 1);
  ------------------
  |  Branch (92:23): [True: 23.8k, False: 0]
  ------------------
   93|  23.8k|}
strv.c:size_multiply_overflow:
   84|  23.8k|static inline bool size_multiply_overflow(size_t size, size_t need) {
   85|  23.8k|        return _unlikely_(need != 0 && size > (SIZE_MAX / need));
  ------------------
  |  |   95|  47.7k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:44): [True: 23.8k, False: 0]
  |  |  |  Branch (95:44): [True: 0, False: 23.8k]
  |  |  ------------------
  ------------------
   86|  23.8k|}
strv.c:GREEDY_ALLOC_ROUND_UP:
  111|  97.9k|static inline size_t GREEDY_ALLOC_ROUND_UP(size_t l) {
  112|  97.9k|        size_t m;
  113|       |
  114|       |        /* Round up allocation sizes a bit to some reasonable, likely larger value. This is supposed to be
  115|       |         * used for cases which are likely called in an allocation loop of some form, i.e. that repetitively
  116|       |         * grow stuff, for example strv_extend() and suchlike.
  117|       |         *
  118|       |         * Note the difference to GREEDY_REALLOC() here, as this helper operates on a single size value only,
  119|       |         * and rounds up to next multiple of 2, needing no further counter.
  120|       |         *
  121|       |         * Note the benefits of direct ALIGN_POWER2() usage: type-safety for size_t, sane handling for very
  122|       |         * small (i.e. <= 2) and safe handling for very large (i.e. > SSIZE_MAX) values. */
  123|       |
  124|  97.9k|        if (l <= 2)
  ------------------
  |  Branch (124:13): [True: 24.7k, False: 73.2k]
  ------------------
  125|  24.7k|                return 2; /* Never allocate less than 2 of something.  */
  126|       |
  127|  73.2k|        m = ALIGN_POWER2(l);
  128|  73.2k|        if (m == 0) /* overflow? */
  ------------------
  |  Branch (128:13): [True: 0, False: 73.2k]
  ------------------
  129|      0|                return l;
  130|       |
  131|  73.2k|        return m;
  132|  73.2k|}
user-util.c:freep:
   78|    835|static inline void freep(void *p) {
   79|    835|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|    835|        ({                                      \
  |  |  405|    835|                free(memory);                   \
  |  |  406|    835|                (typeof(memory)) NULL;          \
  |  |  407|    835|        })
  ------------------
   80|    835|}
virt.c:freep:
   78|    930|static inline void freep(void *p) {
   79|    930|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|    930|        ({                                      \
  |  |  405|    930|                free(memory);                   \
  |  |  406|    930|                (typeof(memory)) NULL;          \
  |  |  407|    930|        })
  ------------------
   80|    930|}
sd-json.c:freep:
   78|  2.52k|static inline void freep(void *p) {
   79|  2.52k|        *(void**)p = mfree(*(void**) p);
  ------------------
  |  |  404|  2.52k|        ({                                      \
  |  |  405|  2.52k|                free(memory);                   \
  |  |  406|  2.52k|                (typeof(memory)) NULL;          \
  |  |  407|  2.52k|        })
  ------------------
   80|  2.52k|}
sd-json.c:malloc_multiply:
   88|  6.83k|_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t need, size_t size) {
   89|  6.83k|        if (size_multiply_overflow(size, need))
  ------------------
  |  Branch (89:13): [True: 0, False: 6.83k]
  ------------------
   90|      0|                return NULL;
   91|       |
   92|  6.83k|        return malloc(size * need ?: 1);
  ------------------
  |  Branch (92:23): [True: 6.83k, False: 0]
  ------------------
   93|  6.83k|}
sd-json.c:size_multiply_overflow:
   84|  6.83k|static inline bool size_multiply_overflow(size_t size, size_t need) {
   85|  6.83k|        return _unlikely_(need != 0 && size > (SIZE_MAX / need));
  ------------------
  |  |   95|  13.6k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:44): [True: 6.83k, False: 0]
  |  |  |  Branch (95:44): [True: 0, False: 6.83k]
  |  |  ------------------
  ------------------
   86|  6.83k|}
sd-varlink.c:size_multiply_overflow:
   84|    835|static inline bool size_multiply_overflow(size_t size, size_t need) {
   85|    835|        return _unlikely_(need != 0 && size > (SIZE_MAX / need));
  ------------------
  |  |   95|  1.67k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:44): [True: 835, False: 0]
  |  |  |  Branch (95:44): [True: 0, False: 835]
  |  |  ------------------
  ------------------
   86|    835|}
sd-varlink.c:malloc_multiply:
   88|    835|_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t need, size_t size) {
   89|    835|        if (size_multiply_overflow(size, need))
  ------------------
  |  Branch (89:13): [True: 0, False: 835]
  ------------------
   90|      0|                return NULL;
   91|       |
   92|    835|        return malloc(size * need ?: 1);
  ------------------
  |  Branch (92:23): [True: 835, False: 0]
  ------------------
   93|    835|}

uname_architecture:
    9|     57|Architecture uname_architecture(void) {
   10|       |
   11|       |        /* Return a sanitized enum identifying the architecture we are running on. This
   12|       |         * is based on uname(), and the user may hence control what this returns by using
   13|       |         * personality(). This puts the user in control on systems that can run binaries
   14|       |         * of multiple architectures.
   15|       |         *
   16|       |         * We do not translate the string returned by uname() 1:1. Instead we try to
   17|       |         * clean it up and break down the confusion on x86 and arm in particular.
   18|       |         *
   19|       |         * We try to distinguish CPUs, not CPU features, i.e. actual architectures that
   20|       |         * have genuinely different code. */
   21|       |
   22|     57|        static const struct {
   23|     57|                const char *machine;
   24|     57|                Architecture arch;
   25|     57|        } arch_map[] = {
   26|       |#if defined(__aarch64__) || defined(__arm__)
   27|       |                { "aarch64",    ARCHITECTURE_ARM64    },
   28|       |                { "aarch64_be", ARCHITECTURE_ARM64_BE },
   29|       |                { "armv8l",     ARCHITECTURE_ARM      },
   30|       |                { "armv8b",     ARCHITECTURE_ARM_BE   },
   31|       |                { "armv7ml",    ARCHITECTURE_ARM      },
   32|       |                { "armv7mb",    ARCHITECTURE_ARM_BE   },
   33|       |                { "armv7l",     ARCHITECTURE_ARM      },
   34|       |                { "armv7b",     ARCHITECTURE_ARM_BE   },
   35|       |                { "armv6l",     ARCHITECTURE_ARM      },
   36|       |                { "armv6b",     ARCHITECTURE_ARM_BE   },
   37|       |                { "armv5tl",    ARCHITECTURE_ARM      },
   38|       |                { "armv5tel",   ARCHITECTURE_ARM      },
   39|       |                { "armv5tejl",  ARCHITECTURE_ARM      },
   40|       |                { "armv5tejb",  ARCHITECTURE_ARM_BE   },
   41|       |                { "armv5teb",   ARCHITECTURE_ARM_BE   },
   42|       |                { "armv5tb",    ARCHITECTURE_ARM_BE   },
   43|       |                { "armv4tl",    ARCHITECTURE_ARM      },
   44|       |                { "armv4tb",    ARCHITECTURE_ARM_BE   },
   45|       |                { "armv4l",     ARCHITECTURE_ARM      },
   46|       |                { "armv4b",     ARCHITECTURE_ARM_BE   },
   47|       |
   48|       |#elif defined(__alpha__)
   49|       |                { "alpha" ,     ARCHITECTURE_ALPHA    },
   50|       |
   51|       |#elif defined(__arc__)
   52|       |                { "arc",        ARCHITECTURE_ARC      },
   53|       |                { "arceb",      ARCHITECTURE_ARC_BE   },
   54|       |
   55|       |#elif defined(__cris__)
   56|       |                { "crisv32",    ARCHITECTURE_CRIS     },
   57|       |
   58|       |#elif defined(__i386__) || defined(__x86_64__)
   59|       |                { "x86_64",     ARCHITECTURE_X86_64   },
   60|     57|                { "i686",       ARCHITECTURE_X86      },
   61|     57|                { "i586",       ARCHITECTURE_X86      },
   62|     57|                { "i486",       ARCHITECTURE_X86      },
   63|     57|                { "i386",       ARCHITECTURE_X86      },
   64|       |
   65|       |#elif defined(__ia64__)
   66|       |                { "ia64",       ARCHITECTURE_IA64     },
   67|       |
   68|       |#elif defined(__hppa__) || defined(__hppa64__)
   69|       |                { "parisc64",   ARCHITECTURE_PARISC64 },
   70|       |                { "parisc",     ARCHITECTURE_PARISC   },
   71|       |
   72|       |#elif defined(__loongarch_lp64)
   73|       |                { "loongarch64", ARCHITECTURE_LOONGARCH64 },
   74|       |
   75|       |#elif defined(__m68k__)
   76|       |                { "m68k",       ARCHITECTURE_M68K     },
   77|       |
   78|       |#elif defined(__mips__) || defined(__mips64__)
   79|       |                { "mips64",     ARCHITECTURE_MIPS64   },
   80|       |                { "mips",       ARCHITECTURE_MIPS     },
   81|       |
   82|       |#elif defined(__nios2__)
   83|       |                { "nios2",      ARCHITECTURE_NIOS2    },
   84|       |
   85|       |#elif defined(__powerpc__) || defined(__powerpc64__)
   86|       |                { "ppc64le",    ARCHITECTURE_PPC64_LE },
   87|       |                { "ppc64",      ARCHITECTURE_PPC64    },
   88|       |                { "ppcle",      ARCHITECTURE_PPC_LE   },
   89|       |                { "ppc",        ARCHITECTURE_PPC      },
   90|       |
   91|       |#elif defined(__riscv)
   92|       |                { "riscv64",    ARCHITECTURE_RISCV64  },
   93|       |                { "riscv32",    ARCHITECTURE_RISCV32  },
   94|       |#  if __SIZEOF_POINTER__ == 4
   95|       |                { "riscv",      ARCHITECTURE_RISCV32  },
   96|       |#  elif __SIZEOF_POINTER__ == 8
   97|       |                { "riscv",      ARCHITECTURE_RISCV64  },
   98|       |#  endif
   99|       |
  100|       |#elif defined(__s390__) || defined(__s390x__)
  101|       |                { "s390x",      ARCHITECTURE_S390X    },
  102|       |                { "s390",       ARCHITECTURE_S390     },
  103|       |
  104|       |#elif defined(__sh__) || defined(__sh64__)
  105|       |                { "sh5",        ARCHITECTURE_SH64     },
  106|       |                { "sh4a",       ARCHITECTURE_SH       },
  107|       |                { "sh4",        ARCHITECTURE_SH       },
  108|       |                { "sh3",        ARCHITECTURE_SH       },
  109|       |                { "sh2a",       ARCHITECTURE_SH       },
  110|       |                { "sh2",        ARCHITECTURE_SH       },
  111|       |
  112|       |#elif defined(__sparc__)
  113|       |                { "sparc64",    ARCHITECTURE_SPARC64  },
  114|       |                { "sparc",      ARCHITECTURE_SPARC    },
  115|       |
  116|       |#elif defined(__tilegx__)
  117|       |                { "tilegx",     ARCHITECTURE_TILEGX   },
  118|       |
  119|       |#else
  120|       |#  error "Please register your architecture here!"
  121|       |#endif
  122|     57|        };
  123|       |
  124|     57|        static Architecture cached = _ARCHITECTURE_INVALID;
  125|     57|        struct utsname u;
  126|       |
  127|     57|        if (cached != _ARCHITECTURE_INVALID)
  ------------------
  |  Branch (127:13): [True: 56, False: 1]
  ------------------
  128|     56|                return cached;
  129|       |
  130|      1|        assert_se(uname(&u) >= 0);
  ------------------
  |  |   65|      1|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      1|        } while (false)
  |  |  ------------------
  ------------------
  131|       |
  132|      1|        FOREACH_ELEMENT(entry, arch_map)
  ------------------
  |  |  466|      1|        FOREACH_ARRAY(i, array, ELEMENTSOF(array))
  |  |  ------------------
  |  |  |  |  463|      1|        _FOREACH_ARRAY(i, array, num, UNIQ_T(m, UNIQ), UNIQ_T(end, UNIQ))
  |  |  |  |  ------------------
  |  |  |  |  |  |  457|      1|        for (typeof(array[0]) *i = (array), *end = ({                   \
  |  |  |  |  |  |  458|      1|                                typeof(num) m = (num);                  \
  |  |  |  |  |  |  459|      1|                                (i && m > 0) ? i + m : NULL;            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (459:34): [True: 1, False: 0]
  |  |  |  |  |  |  |  Branch (459:39): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  460|      1|                        }); end && i < end; i++)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (460:29): [True: 1, False: 0]
  |  |  |  |  |  |  |  Branch (460:36): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  133|      1|                if (streq(entry->machine, u.machine))
  ------------------
  |  |   46|      1|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  134|      1|                        return cached = entry->arch;
  135|       |
  136|      0|        assert_not_reached();
  ------------------
  |  |   76|      0|        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  137|      0|        return _ARCHITECTURE_INVALID;
  138|      1|}

invoked_by_systemd:
   41|  13.0k|bool invoked_by_systemd(void) {
   42|  13.0k|        int r;
   43|       |
   44|       |        /* If the process is directly executed by PID1 (e.g. ExecStart= or generator), systemd-importd,
   45|       |         * or systemd-homed, then $SYSTEMD_EXEC_PID= is set, and read the command line. */
   46|  13.0k|        const char *e = getenv("SYSTEMD_EXEC_PID");
   47|  13.0k|        if (!e)
  ------------------
  |  Branch (47:13): [True: 13.0k, False: 0]
  ------------------
   48|  13.0k|                return false;
   49|       |
   50|      0|        if (streq(e, "*"))
  ------------------
  |  |   46|      0|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   51|       |                /* For testing. */
   52|      0|                return true;
   53|       |
   54|      0|        pid_t p;
   55|      0|        r = parse_pid(e, &p);
   56|      0|        if (r < 0) {
  ------------------
  |  Branch (56:13): [True: 0, False: 0]
  ------------------
   57|       |                /* We know that systemd sets the variable correctly. Something else must have set it. */
   58|      0|                log_debug_errno(r, "Failed to parse \"SYSTEMD_EXEC_PID=%s\", ignoring: %m", e);
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
   59|      0|                return false;
   60|      0|        }
   61|       |
   62|      0|        return getpid_cached() == p;
   63|      0|}

log_set_assert_return_is_critical:
   16|  13.0k|void log_set_assert_return_is_critical(bool b) {
   17|  13.0k|        assert_return_is_critical = b;
   18|  13.0k|}

chaseat:
   86|  96.2k|int chaseat(int dir_fd, const char *path, ChaseFlags flags, char **ret_path, int *ret_fd) {
   87|  96.2k|        _cleanup_free_ char *buffer = NULL, *done = NULL;
  ------------------
  |  |   82|  96.2k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  96.2k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
   88|  96.2k|        _cleanup_close_ int fd = -EBADF, root_fd = -EBADF;
  ------------------
  |  |   60|  96.2k|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|  96.2k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
   89|  96.2k|        unsigned max_follow = CHASE_MAX; /* how many symlinks to follow before giving up and returning ELOOP */
  ------------------
  |  |   36|  96.2k|#define CHASE_MAX 32
  ------------------
   90|  96.2k|        bool exists = true, append_trail_slash = false;
   91|  96.2k|        struct stat st; /* stat obtained from fd */
   92|  96.2k|        const char *todo;
   93|  96.2k|        int r;
   94|       |
   95|  96.2k|        assert(!FLAGS_SET(flags, CHASE_PREFIX_ROOT));
  ------------------
  |  |   72|  96.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  96.2k|        do {                                                            \
  |  |  |  |   59|  96.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  96.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 96.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  96.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  96.2k|        } while (false)
  |  |  ------------------
  ------------------
   96|  96.2k|        assert(!FLAGS_SET(flags, CHASE_MUST_BE_DIRECTORY|CHASE_MUST_BE_REGULAR));
  ------------------
  |  |   72|  96.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  96.2k|        do {                                                            \
  |  |  |  |   59|  96.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  96.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 96.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  96.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  96.2k|        } while (false)
  |  |  ------------------
  ------------------
   97|  96.2k|        assert(!FLAGS_SET(flags, CHASE_STEP|CHASE_EXTRACT_FILENAME));
  ------------------
  |  |   72|  96.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  96.2k|        do {                                                            \
  |  |  |  |   59|  96.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  96.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 96.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  96.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  96.2k|        } while (false)
  |  |  ------------------
  ------------------
   98|  96.2k|        assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
  ------------------
  |  |   72|  96.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  96.2k|        do {                                                            \
  |  |  |  |   59|  96.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  96.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 96.2k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 96.2k, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  96.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  96.2k|        } while (false)
  |  |  ------------------
  ------------------
   99|       |
  100|       |        /* Either the file may be missing, or we return an fd to the final object, but both make no sense */
  101|  96.2k|        if (FLAGS_SET(flags, CHASE_NONEXISTENT))
  ------------------
  |  |  414|  96.2k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 96.2k]
  |  |  ------------------
  ------------------
  102|  96.2k|                assert(!ret_fd);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  103|       |
  104|  96.2k|        if (FLAGS_SET(flags, CHASE_STEP))
  ------------------
  |  |  414|  96.2k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 96.2k]
  |  |  ------------------
  ------------------
  105|  96.2k|                assert(!ret_fd);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  106|       |
  107|  96.2k|        if (isempty(path))
  ------------------
  |  Branch (107:13): [True: 0, False: 96.2k]
  ------------------
  108|      0|                path = ".";
  109|       |
  110|       |        /* This function resolves symlinks of the path relative to the given directory file descriptor. If
  111|       |         * CHASE_AT_RESOLVE_IN_ROOT is specified and a directory file descriptor is provided, symlinks
  112|       |         * are resolved relative to the given directory file descriptor. Otherwise, they are resolved
  113|       |         * relative to the root directory of the host.
  114|       |         *
  115|       |         * Note that when a positive directory file descriptor is provided and CHASE_AT_RESOLVE_IN_ROOT is
  116|       |         * specified and we find an absolute symlink, it is resolved relative to given directory file
  117|       |         * descriptor and not the root of the host. Also, when following relative symlinks, this functions
  118|       |         * ensures they cannot be used to "escape" the given directory file descriptor. If a positive
  119|       |         * directory file descriptor is provided, the "path" parameter is always interpreted relative to the
  120|       |         * given directory file descriptor, even if it is absolute. If the given directory file descriptor is
  121|       |         * AT_FDCWD and "path" is absolute, it is interpreted relative to the root directory of the host.
  122|       |         *
  123|       |         * When "dir_fd" points to a non-root directory and CHASE_AT_RESOLVE_IN_ROOT is set, this function
  124|       |         * always returns a relative path in "ret_path", even if "path" is an absolute path, because openat()
  125|       |         * like functions generally ignore the directory fd if they are provided with an absolute path. When
  126|       |         * CHASE_AT_RESOLVE_IN_ROOT is not set, then this returns relative path to the specified file
  127|       |         * descriptor if all resolved symlinks are relative, otherwise absolute path will be returned. When
  128|       |         * "dir_fd" is AT_FDCWD and "path" is an absolute path, we return an absolute path in "ret_path"
  129|       |         * because otherwise, if the caller passes the returned relative path to another openat() like
  130|       |         * function, it would be resolved relative to the current working directory instead of to "/".
  131|       |         *
  132|       |         * Summary about the result path:
  133|       |         * - "dir_fd" points to the root directory
  134|       |         *    → result will be absolute
  135|       |         * - "dir_fd" points to a non-root directory, and CHASE_AT_RESOLVE_IN_ROOT is set
  136|       |         *    → relative
  137|       |         * - "dir_fd" points to a non-root directory, and CHASE_AT_RESOLVE_IN_ROOT is not set
  138|       |         *    → relative when all resolved symlinks are relative, otherwise absolute
  139|       |         * - "dir_fd" is AT_FDCWD, and "path" is absolute
  140|       |         *    → absolute
  141|       |         * - "dir_fd" is AT_FDCWD, and "path" is relative
  142|       |         *    → relative when all resolved symlinks are relative, otherwise absolute
  143|       |         *
  144|       |         * Algorithmically this operates on two path buffers: "done" are the components of the path we
  145|       |         * already processed and resolved symlinks, "." and ".." of. "todo" are the components of the path we
  146|       |         * still need to process. On each iteration, we move one component from "todo" to "done", processing
  147|       |         * its special meaning each time. We always keep an O_PATH fd to the component we are currently
  148|       |         * processing, thus keeping lookup races to a minimum.
  149|       |         *
  150|       |         * Suggested usage: whenever you want to canonicalize a path, use this function. Pass the absolute
  151|       |         * path you got as-is: fully qualified and relative to your host's root. Optionally, specify the
  152|       |         * "dir_fd" parameter to tell this function what to do when encountering a symlink with an absolute
  153|       |         * path as directory: resolve it relative to the given directory file descriptor.
  154|       |         *
  155|       |         * There are five ways to invoke this function:
  156|       |         *
  157|       |         * 1. Without CHASE_STEP or ret_fd: in this case the path is resolved and the normalized path is
  158|       |         *    returned in `ret_path`. The return value is < 0 on error. If CHASE_NONEXISTENT is also set, 0
  159|       |         *    is returned if the file doesn't exist, > 0 otherwise. If CHASE_NONEXISTENT is not set, >= 0 is
  160|       |         *    returned if the destination was found, -ENOENT if it wasn't.
  161|       |         *
  162|       |         * 2. With ret_fd: in this case the destination is opened after chasing it as O_PATH and this file
  163|       |         *    descriptor is returned as return value. This is useful to open files relative to some root
  164|       |         *    directory. Note that the returned O_PATH file descriptors must be converted into a regular one
  165|       |         *    (using fd_reopen() or such) before it can be used for reading/writing. ret_fd may not be
  166|       |         *    combined with CHASE_NONEXISTENT.
  167|       |         *
  168|       |         * 3. With CHASE_STEP: in this case only a single step of the normalization is executed, i.e. only
  169|       |         *    the first symlink or ".." component of the path is resolved, and the resulting path is
  170|       |         *    returned. This is useful if a caller wants to trace the path through the file system verbosely.
  171|       |         *    Returns < 0 on error, > 0 if the path is fully normalized, and == 0 for each normalization
  172|       |         *    step. This may be combined with CHASE_NONEXISTENT, in which case 1 is returned when a component
  173|       |         *    is not found.
  174|       |         *
  175|       |         * 4. With CHASE_SAFE: in this case the path must not contain unsafe transitions, i.e. transitions
  176|       |         *    from unprivileged to privileged files or directories. In such cases the return value is
  177|       |         *    -ENOLINK. If CHASE_WARN is also set, a warning describing the unsafe transition is emitted.
  178|       |         *    CHASE_WARN cannot be used in PID 1.
  179|       |         *
  180|       |         * 5. With CHASE_NO_AUTOFS: in this case if an autofs mount point is encountered, path normalization
  181|       |         *    is aborted and -EREMOTE is returned. If CHASE_WARN is also set, a warning showing the path of
  182|       |         *    the mount point is emitted. CHASE_WARN cannot be used in PID 1.
  183|       |         */
  184|       |
  185|  96.2k|        if (FLAGS_SET(flags, CHASE_AT_RESOLVE_IN_ROOT)) {
  ------------------
  |  |  414|  96.2k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 96.2k]
  |  |  ------------------
  ------------------
  186|       |                /* If we get AT_FDCWD or dir_fd points to "/", then we always resolve symlinks relative to
  187|       |                 * the host's root. Hence, CHASE_AT_RESOLVE_IN_ROOT is meaningless. */
  188|       |
  189|      0|                r = dir_fd_is_root_or_cwd(dir_fd);
  190|      0|                if (r < 0)
  ------------------
  |  Branch (190:21): [True: 0, False: 0]
  ------------------
  191|      0|                        return r;
  192|      0|                if (r > 0)
  ------------------
  |  Branch (192:21): [True: 0, False: 0]
  ------------------
  193|      0|                        flags &= ~CHASE_AT_RESOLVE_IN_ROOT;
  194|      0|        }
  195|       |
  196|  96.2k|        if (!(flags &
  ------------------
  |  Branch (196:13): [True: 96.2k, False: 0]
  ------------------
  197|  96.2k|              (CHASE_AT_RESOLVE_IN_ROOT|CHASE_NONEXISTENT|CHASE_NO_AUTOFS|CHASE_SAFE|CHASE_STEP|
  198|  96.2k|               CHASE_PROHIBIT_SYMLINKS|CHASE_MKDIR_0755|CHASE_PARENT)) &&
  199|  96.2k|            !ret_path && ret_fd) {
  ------------------
  |  Branch (199:13): [True: 0, False: 96.2k]
  |  Branch (199:26): [True: 0, False: 0]
  ------------------
  200|       |
  201|       |                /* Shortcut the ret_fd case if the caller isn't interested in the actual path and has no root
  202|       |                 * set and doesn't care about any of the other special features we provide either. */
  203|      0|                r = openat(dir_fd, path, O_PATH|O_CLOEXEC|(FLAGS_SET(flags, CHASE_NOFOLLOW) ? O_NOFOLLOW : 0));
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  204|      0|                if (r < 0)
  ------------------
  |  Branch (204:21): [True: 0, False: 0]
  ------------------
  205|      0|                        return -errno;
  206|       |
  207|      0|                *ret_fd = r;
  208|      0|                return 0;
  209|      0|        }
  210|       |
  211|  96.2k|        buffer = strdup(path);
  212|  96.2k|        if (!buffer)
  ------------------
  |  Branch (212:13): [True: 0, False: 96.2k]
  ------------------
  213|      0|                return -ENOMEM;
  214|       |
  215|       |        /* If we receive an absolute path together with AT_FDCWD, we need to return an absolute path, because
  216|       |         * a relative path would be interpreted relative to the current working directory. Also, let's make
  217|       |         * the result absolute when the file descriptor of the root directory is specified. */
  218|  96.2k|        r = chaseat_needs_absolute(dir_fd, path);
  219|  96.2k|        if (r < 0)
  ------------------
  |  Branch (219:13): [True: 0, False: 96.2k]
  ------------------
  220|      0|                return r;
  221|       |
  222|  96.2k|        bool need_absolute = r;
  223|  96.2k|        if (need_absolute) {
  ------------------
  |  Branch (223:13): [True: 96.2k, False: 0]
  ------------------
  224|  96.2k|                done = strdup("/");
  225|  96.2k|                if (!done)
  ------------------
  |  Branch (225:21): [True: 0, False: 96.2k]
  ------------------
  226|      0|                        return -ENOMEM;
  227|  96.2k|        }
  228|       |
  229|       |        /* If a positive directory file descriptor is provided, always resolve the given path relative to it,
  230|       |         * regardless of whether it is absolute or not. If we get AT_FDCWD, follow regular openat()
  231|       |         * semantics, if the path is relative, resolve against the current working directory. Otherwise,
  232|       |         * resolve against root. */
  233|  96.2k|        fd = openat(dir_fd, done ?: ".", O_CLOEXEC|O_DIRECTORY|O_PATH);
  ------------------
  |  Branch (233:29): [True: 96.2k, False: 0]
  ------------------
  234|      0|        if (fd < 0)
  ------------------
  |  Branch (234:13): [True: 0, False: 0]
  ------------------
  235|      0|                return -errno;
  236|       |
  237|      0|        if (fstat(fd, &st) < 0)
  ------------------
  |  Branch (237:13): [True: 0, False: 0]
  ------------------
  238|      0|                return -errno;
  239|       |
  240|       |        /* If we get AT_FDCWD, we always resolve symlinks relative to the host's root. Only if a positive
  241|       |         * directory file descriptor is provided we will look at CHASE_AT_RESOLVE_IN_ROOT to determine
  242|       |         * whether to resolve symlinks in it or not. */
  243|  96.2k|        if (dir_fd >= 0 && FLAGS_SET(flags, CHASE_AT_RESOLVE_IN_ROOT))
  ------------------
  |  |  414|  96.2k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 96.2k]
  |  |  ------------------
  ------------------
  |  Branch (243:13): [True: 96.2k, False: 18.4E]
  ------------------
  244|      0|                root_fd = openat(dir_fd, ".", O_CLOEXEC|O_DIRECTORY|O_PATH);
  245|      0|        else
  246|      0|                root_fd = open("/", O_CLOEXEC|O_DIRECTORY|O_PATH);
  247|      0|        if (root_fd < 0)
  ------------------
  |  Branch (247:13): [True: 0, False: 0]
  ------------------
  248|      0|                return -errno;
  249|       |
  250|      0|        if (ENDSWITH_SET(buffer, "/", "/.")) {
  ------------------
  |  |  161|      0|        endswith_strv(p, STRV_MAKE(__VA_ARGS__))
  |  |  ------------------
  |  |  |  |  154|      0|#define STRV_MAKE(...) ((char**) ((const char*[]) { __VA_ARGS__, NULL }))
  |  |  ------------------
  |  |  |  Branch (161:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  251|      0|                flags |= CHASE_MUST_BE_DIRECTORY;
  252|      0|                if (FLAGS_SET(flags, CHASE_TRAIL_SLASH))
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  253|      0|                        append_trail_slash = true;
  254|  96.2k|        } else if (dot_or_dot_dot(buffer) || endswith(buffer, "/.."))
  ------------------
  |  Branch (254:20): [True: 18.4E, False: 96.2k]
  |  Branch (254:46): [True: 0, False: 96.2k]
  ------------------
  255|      0|                flags |= CHASE_MUST_BE_DIRECTORY;
  256|       |
  257|      0|        if (FLAGS_SET(flags, CHASE_PARENT))
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  258|      0|                flags |= CHASE_MUST_BE_DIRECTORY;
  259|       |
  260|   333k|        for (todo = buffer;;) {
  261|   333k|                _cleanup_free_ char *first = NULL;
  ------------------
  |  |   82|   333k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|   333k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  262|   333k|                _cleanup_close_ int child = -EBADF;
  ------------------
  |  |   60|   333k|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|   333k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  263|   333k|                struct stat st_child;
  264|   333k|                const char *e;
  265|       |
  266|   333k|                r = path_find_first_component(&todo, /* accept_dot_dot= */ true, &e);
  267|   333k|                if (r < 0)
  ------------------
  |  Branch (267:21): [True: 0, False: 333k]
  ------------------
  268|      0|                        return r;
  269|   333k|                if (r == 0) /* We reached the end. */
  ------------------
  |  Branch (269:21): [True: 0, False: 333k]
  ------------------
  270|      0|                        break;
  271|       |
  272|   333k|                first = strndup(e, r);
  273|   333k|                if (!first)
  ------------------
  |  Branch (273:21): [True: 0, False: 333k]
  ------------------
  274|      0|                        return -ENOMEM;
  275|       |
  276|       |                /* Two dots? Then chop off the last bit of what we already found out. */
  277|   333k|                if (streq(first, "..")) {
  ------------------
  |  |   46|   333k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 0, False: 333k]
  |  |  ------------------
  ------------------
  278|      0|                        _cleanup_free_ char *parent = NULL;
  ------------------
  |  |   82|      0|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  279|      0|                        _cleanup_close_ int fd_parent = -EBADF;
  ------------------
  |  |   60|      0|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  280|      0|                        struct stat st_parent;
  281|       |
  282|       |                        /* If we already are at the top, then going up will not change anything. This is
  283|       |                         * in-line with how the kernel handles this. */
  284|      0|                        if (empty_or_root(done) && FLAGS_SET(flags, CHASE_AT_RESOLVE_IN_ROOT)) {
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (284:29): [True: 0, False: 0]
  ------------------
  285|      0|                                if (FLAGS_SET(flags, CHASE_STEP))
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  286|      0|                                        goto chased_one;
  287|      0|                                continue;
  288|      0|                        }
  289|       |
  290|      0|                        fd_parent = openat(fd, "..", O_CLOEXEC|O_NOFOLLOW|O_PATH|O_DIRECTORY);
  291|      0|                        if (fd_parent < 0)
  ------------------
  |  Branch (291:29): [True: 0, False: 0]
  ------------------
  292|      0|                                return -errno;
  293|       |
  294|      0|                        if (fstat(fd_parent, &st_parent) < 0)
  ------------------
  |  Branch (294:29): [True: 0, False: 0]
  ------------------
  295|      0|                                return -errno;
  296|       |
  297|       |                        /* If we opened the same directory, that _may_ indicate that we're at the host root
  298|       |                         * directory. Let's confirm that in more detail with dir_fd_is_root(). And if so,
  299|       |                         * going up won't change anything. */
  300|      0|                        if (stat_inode_same(&st_parent, &st)) {
  ------------------
  |  Branch (300:29): [True: 0, False: 0]
  ------------------
  301|      0|                                r = dir_fd_is_root(fd);
  302|      0|                                if (r < 0)
  ------------------
  |  Branch (302:37): [True: 0, False: 0]
  ------------------
  303|      0|                                        return r;
  304|      0|                                if (r > 0) {
  ------------------
  |  Branch (304:37): [True: 0, False: 0]
  ------------------
  305|      0|                                        if (FLAGS_SET(flags, CHASE_STEP))
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  306|      0|                                                goto chased_one;
  307|      0|                                        continue;
  308|      0|                                }
  309|      0|                        }
  310|       |
  311|      0|                        r = path_extract_directory(done, &parent);
  312|      0|                        if (r >= 0) {
  ------------------
  |  Branch (312:29): [True: 0, False: 0]
  ------------------
  313|      0|                                assert(!need_absolute || path_is_absolute(parent));
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  314|      0|                                free_and_replace(done, parent);
  ------------------
  |  |   49|      0|        free_and_replace_full(a, b, free)
  |  |  ------------------
  |  |  |  |   10|      0|        ({                                      \
  |  |  |  |   11|      0|                typeof(a)* _a = &(a);           \
  |  |  |  |   12|      0|                typeof(b)* _b = &(b);           \
  |  |  |  |   13|      0|                free_func(*_a);                 \
  |  |  |  |   14|      0|                *_a = *_b;                      \
  |  |  |  |   15|      0|                *_b = NULL;                     \
  |  |  |  |   16|      0|                0;                              \
  |  |  |  |   17|      0|        })
  |  |  ------------------
  ------------------
  315|      0|                        } else if (r == -EDESTADDRREQ) {
  ------------------
  |  Branch (315:36): [True: 0, False: 0]
  ------------------
  316|       |                                /* 'done' contains filename only (i.e. no slash). */
  317|      0|                                assert(!need_absolute);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  318|      0|                                done = mfree(done);
  ------------------
  |  |  404|      0|        ({                                      \
  |  |  405|      0|                free(memory);                   \
  |  |  406|      0|                (typeof(memory)) NULL;          \
  |  |  407|      0|        })
  ------------------
  319|      0|                        } else if (r == -EADDRNOTAVAIL) {
  ------------------
  |  Branch (319:36): [True: 0, False: 0]
  ------------------
  320|       |                                /* 'done' is "/". This branch should be already handled in the above. */
  321|      0|                                assert(!FLAGS_SET(flags, CHASE_AT_RESOLVE_IN_ROOT));
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  322|      0|                                assert_not_reached();
  ------------------
  |  |   76|      0|        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  323|      0|                        } else if (r == -EINVAL) {
  ------------------
  |  Branch (323:36): [True: 0, False: 0]
  ------------------
  324|       |                                /* 'done' is an empty string, ends with '..', or an invalid path. */
  325|      0|                                assert(!need_absolute);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  326|      0|                                assert(!FLAGS_SET(flags, CHASE_AT_RESOLVE_IN_ROOT));
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  327|       |
  328|      0|                                if (!path_is_valid(done))
  ------------------
  |  Branch (328:37): [True: 0, False: 0]
  ------------------
  329|      0|                                        return -EINVAL;
  330|       |
  331|       |                                /* If we're at the top of "dir_fd", start appending ".." to "done". */
  332|      0|                                if (!path_extend(&done, ".."))
  ------------------
  |  |   69|      0|#define path_extend(x, ...) path_extend_internal(x, __VA_ARGS__, POINTER_MAX)
  |  |  ------------------
  |  |  |  |  159|      0|#define POINTER_MAX ((void*) UINTPTR_MAX)
  |  |  ------------------
  ------------------
  |  Branch (332:37): [True: 0, False: 0]
  ------------------
  333|      0|                                        return -ENOMEM;
  334|      0|                        } else
  335|      0|                                return r;
  336|       |
  337|      0|                        if (FLAGS_SET(flags, CHASE_STEP))
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  338|      0|                                goto chased_one;
  339|       |
  340|      0|                        if (FLAGS_SET(flags, CHASE_SAFE) &&
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  341|      0|                            unsafe_transition(&st, &st_parent))
  ------------------
  |  Branch (341:29): [True: 0, False: 0]
  ------------------
  342|      0|                                return log_unsafe_transition(fd, fd_parent, path, flags);
  343|       |
  344|       |                        /* If the path ends on a "..", and CHASE_PARENT is specified then our current 'fd' is
  345|       |                         * the child of the returned normalized path, not the parent as requested. To correct
  346|       |                         * this we have to go *two* levels up. */
  347|      0|                        if (FLAGS_SET(flags, CHASE_PARENT) && isempty(todo)) {
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (347:63): [True: 0, False: 0]
  ------------------
  348|      0|                                _cleanup_close_ int fd_grandparent = -EBADF;
  ------------------
  |  |   60|      0|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  349|      0|                                struct stat st_grandparent;
  350|       |
  351|      0|                                fd_grandparent = openat(fd_parent, "..", O_CLOEXEC|O_NOFOLLOW|O_PATH|O_DIRECTORY);
  352|      0|                                if (fd_grandparent < 0)
  ------------------
  |  Branch (352:37): [True: 0, False: 0]
  ------------------
  353|      0|                                        return -errno;
  354|       |
  355|      0|                                if (fstat(fd_grandparent, &st_grandparent) < 0)
  ------------------
  |  Branch (355:37): [True: 0, False: 0]
  ------------------
  356|      0|                                        return -errno;
  357|       |
  358|      0|                                if (FLAGS_SET(flags, CHASE_SAFE) &&
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  359|      0|                                    unsafe_transition(&st_parent, &st_grandparent))
  ------------------
  |  Branch (359:37): [True: 0, False: 0]
  ------------------
  360|      0|                                        return log_unsafe_transition(fd_parent, fd_grandparent, path, flags);
  361|       |
  362|      0|                                st = st_grandparent;
  363|      0|                                close_and_replace(fd, fd_grandparent);
  ------------------
  |  |  103|      0|        ({                                      \
  |  |  104|      0|                int *_fdp_ = &(a);              \
  |  |  105|      0|                safe_close(*_fdp_);             \
  |  |  106|      0|                *_fdp_ = TAKE_FD(b);            \
  |  |  ------------------
  |  |  |  |   99|      0|#define TAKE_FD(fd) TAKE_GENERIC(fd, int, -EBADF)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|      0|                0;                              \
  |  |  108|      0|        })
  ------------------
  364|      0|                                break;
  365|      0|                        }
  366|       |
  367|       |                        /* update fd and stat */
  368|      0|                        st = st_parent;
  369|      0|                        close_and_replace(fd, fd_parent);
  ------------------
  |  |  103|      0|        ({                                      \
  |  |  104|      0|                int *_fdp_ = &(a);              \
  |  |  105|      0|                safe_close(*_fdp_);             \
  |  |  106|      0|                *_fdp_ = TAKE_FD(b);            \
  |  |  ------------------
  |  |  |  |   99|      0|#define TAKE_FD(fd) TAKE_GENERIC(fd, int, -EBADF)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|      0|                0;                              \
  |  |  108|      0|        })
  ------------------
  370|      0|                        continue;
  371|      0|                }
  372|       |
  373|       |                /* Otherwise let's see what this is. */
  374|   333k|                child = r = RET_NERRNO(openat(fd, first, O_CLOEXEC|O_NOFOLLOW|O_PATH));
  375|   333k|                if (r < 0) {
  ------------------
  |  Branch (375:21): [True: 96.2k, False: 237k]
  ------------------
  376|  96.2k|                        if (r != -ENOENT)
  ------------------
  |  Branch (376:29): [True: 0, False: 96.2k]
  ------------------
  377|      0|                                return r;
  378|       |
  379|  96.2k|                        if (!isempty(todo) && !path_is_safe(todo)) /* Refuse parent/mkdir handling if suffix contains ".." or something weird */
  ------------------
  |  Branch (379:29): [True: 93.1k, False: 3.15k]
  |  Branch (379:47): [True: 0, False: 93.1k]
  ------------------
  380|      0|                                return r;
  381|       |
  382|  96.2k|                        if (FLAGS_SET(flags, CHASE_MKDIR_0755) && (!isempty(todo) || !(flags & (CHASE_PARENT|CHASE_NONEXISTENT)))) {
  ------------------
  |  |  414|   192k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 96.2k]
  |  |  ------------------
  ------------------
  |  Branch (382:68): [True: 0, False: 0]
  |  Branch (382:86): [True: 0, False: 0]
  ------------------
  383|      0|                                child = xopenat_full(fd,
  384|      0|                                                     first,
  385|      0|                                                     O_DIRECTORY|O_CREAT|O_EXCL|O_NOFOLLOW|O_PATH|O_CLOEXEC,
  386|      0|                                                     /* xopen_flags = */ 0,
  387|      0|                                                     0755);
  388|      0|                                if (child < 0)
  ------------------
  |  Branch (388:37): [True: 0, False: 0]
  ------------------
  389|      0|                                        return child;
  390|  96.2k|                        } else if (FLAGS_SET(flags, CHASE_PARENT) && isempty(todo)) {
  ------------------
  |  |  414|   192k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 96.2k]
  |  |  ------------------
  ------------------
  |  Branch (390:70): [True: 0, False: 0]
  ------------------
  391|      0|                                if (!path_extend(&done, first))
  ------------------
  |  |   69|      0|#define path_extend(x, ...) path_extend_internal(x, __VA_ARGS__, POINTER_MAX)
  |  |  ------------------
  |  |  |  |  159|      0|#define POINTER_MAX ((void*) UINTPTR_MAX)
  |  |  ------------------
  ------------------
  |  Branch (391:37): [True: 0, False: 0]
  ------------------
  392|      0|                                        return -ENOMEM;
  393|       |
  394|      0|                                break;
  395|  96.2k|                        } else if (FLAGS_SET(flags, CHASE_NONEXISTENT)) {
  ------------------
  |  |  414|  96.2k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 96.2k]
  |  |  ------------------
  ------------------
  396|      0|                                if (!path_extend(&done, first, todo))
  ------------------
  |  |   69|      0|#define path_extend(x, ...) path_extend_internal(x, __VA_ARGS__, POINTER_MAX)
  |  |  ------------------
  |  |  |  |  159|      0|#define POINTER_MAX ((void*) UINTPTR_MAX)
  |  |  ------------------
  ------------------
  |  Branch (396:37): [True: 0, False: 0]
  ------------------
  397|      0|                                        return -ENOMEM;
  398|       |
  399|      0|                                exists = false;
  400|      0|                                break;
  401|      0|                        } else
  402|  96.2k|                                return r;
  403|  96.2k|                }
  404|       |
  405|   237k|                if (fstat(child, &st_child) < 0)
  ------------------
  |  Branch (405:21): [True: 0, False: 237k]
  ------------------
  406|      0|                        return -errno;
  407|       |
  408|   237k|                if (FLAGS_SET(flags, CHASE_SAFE) &&
  ------------------
  |  |  414|   474k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 237k]
  |  |  ------------------
  ------------------
  409|   237k|                    unsafe_transition(&st, &st_child))
  ------------------
  |  Branch (409:21): [True: 0, False: 0]
  ------------------
  410|      0|                        return log_unsafe_transition(fd, child, path, flags);
  411|       |
  412|   237k|                if (FLAGS_SET(flags, CHASE_NO_AUTOFS) &&
  ------------------
  |  |  414|   474k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 237k]
  |  |  ------------------
  ------------------
  413|   237k|                    fd_is_fs_type(child, AUTOFS_SUPER_MAGIC) > 0)
  ------------------
  |  Branch (413:21): [True: 0, False: 0]
  ------------------
  414|      0|                        return log_autofs_mount_point(child, path, flags);
  415|       |
  416|   237k|                if (S_ISLNK(st_child.st_mode) && !(FLAGS_SET(flags, CHASE_NOFOLLOW) && isempty(todo))) {
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (416:88): [True: 0, False: 0]
  ------------------
  417|      0|                        _cleanup_free_ char *destination = NULL;
  ------------------
  |  |   82|      0|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  418|       |
  419|      0|                        if (FLAGS_SET(flags, CHASE_PROHIBIT_SYMLINKS))
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  420|      0|                                return log_prohibited_symlink(child, flags);
  421|       |
  422|       |                        /* This is a symlink, in this case read the destination. But let's make sure we
  423|       |                         * don't follow symlinks without bounds. */
  424|      0|                        if (--max_follow <= 0)
  ------------------
  |  Branch (424:29): [True: 0, False: 0]
  ------------------
  425|      0|                                return -ELOOP;
  426|       |
  427|      0|                        r = readlinkat_malloc(fd, first, &destination);
  428|      0|                        if (r < 0)
  ------------------
  |  Branch (428:29): [True: 0, False: 0]
  ------------------
  429|      0|                                return r;
  430|      0|                        if (isempty(destination))
  ------------------
  |  Branch (430:29): [True: 0, False: 0]
  ------------------
  431|      0|                                return -EINVAL;
  432|       |
  433|      0|                        if (path_is_absolute(destination)) {
  ------------------
  |  Branch (433:29): [True: 0, False: 0]
  ------------------
  434|       |
  435|       |                                /* An absolute destination. Start the loop from the beginning, but use the
  436|       |                                 * root file descriptor as base. */
  437|       |
  438|      0|                                safe_close(fd);
  439|      0|                                fd = fd_reopen(root_fd, O_CLOEXEC|O_PATH|O_DIRECTORY);
  440|      0|                                if (fd < 0)
  ------------------
  |  Branch (440:37): [True: 0, False: 0]
  ------------------
  441|      0|                                        return fd;
  442|       |
  443|      0|                                if (fstat(fd, &st) < 0)
  ------------------
  |  Branch (443:37): [True: 0, False: 0]
  ------------------
  444|      0|                                        return -errno;
  445|       |
  446|      0|                                if (FLAGS_SET(flags, CHASE_SAFE) &&
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  447|      0|                                    unsafe_transition(&st_child, &st))
  ------------------
  |  Branch (447:37): [True: 0, False: 0]
  ------------------
  448|      0|                                        return log_unsafe_transition(child, fd, path, flags);
  449|       |
  450|       |                                /* When CHASE_AT_RESOLVE_IN_ROOT is not set, now the chased path may be
  451|       |                                 * outside of the specified dir_fd. Let's make the result absolute. */
  452|      0|                                if (!FLAGS_SET(flags, CHASE_AT_RESOLVE_IN_ROOT))
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (452:37): [True: 0, False: 0]
  ------------------
  453|      0|                                        need_absolute = true;
  454|       |
  455|      0|                                r = free_and_strdup(&done, need_absolute ? "/" : NULL);
  ------------------
  |  Branch (455:60): [True: 0, False: 0]
  ------------------
  456|      0|                                if (r < 0)
  ------------------
  |  Branch (456:37): [True: 0, False: 0]
  ------------------
  457|      0|                                        return r;
  458|      0|                        }
  459|       |
  460|       |                        /* Prefix what's left to do with what we just read, and start the loop again, but
  461|       |                         * remain in the current directory. */
  462|      0|                        if (!path_extend(&destination, todo))
  ------------------
  |  |   69|      0|#define path_extend(x, ...) path_extend_internal(x, __VA_ARGS__, POINTER_MAX)
  |  |  ------------------
  |  |  |  |  159|      0|#define POINTER_MAX ((void*) UINTPTR_MAX)
  |  |  ------------------
  ------------------
  |  Branch (462:29): [True: 0, False: 0]
  ------------------
  463|      0|                                return -ENOMEM;
  464|       |
  465|      0|                        free_and_replace(buffer, destination);
  ------------------
  |  |   49|      0|        free_and_replace_full(a, b, free)
  |  |  ------------------
  |  |  |  |   10|      0|        ({                                      \
  |  |  |  |   11|      0|                typeof(a)* _a = &(a);           \
  |  |  |  |   12|      0|                typeof(b)* _b = &(b);           \
  |  |  |  |   13|      0|                free_func(*_a);                 \
  |  |  |  |   14|      0|                *_a = *_b;                      \
  |  |  |  |   15|      0|                *_b = NULL;                     \
  |  |  |  |   16|      0|                0;                              \
  |  |  |  |   17|      0|        })
  |  |  ------------------
  ------------------
  466|      0|                        todo = buffer;
  467|       |
  468|      0|                        if (FLAGS_SET(flags, CHASE_STEP))
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  469|      0|                                goto chased_one;
  470|       |
  471|      0|                        continue;
  472|      0|                }
  473|       |
  474|       |                /* If this is not a symlink, then let's just add the name we read to what we already verified. */
  475|   237k|                if (!path_extend(&done, first))
  ------------------
  |  |   69|   237k|#define path_extend(x, ...) path_extend_internal(x, __VA_ARGS__, POINTER_MAX)
  |  |  ------------------
  |  |  |  |  159|   237k|#define POINTER_MAX ((void*) UINTPTR_MAX)
  |  |  ------------------
  ------------------
  |  Branch (475:21): [True: 0, False: 237k]
  ------------------
  476|      0|                        return -ENOMEM;
  477|       |
  478|   237k|                if (FLAGS_SET(flags, CHASE_PARENT) && isempty(todo))
  ------------------
  |  |  414|   474k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 237k]
  |  |  ------------------
  ------------------
  |  Branch (478:55): [True: 0, False: 0]
  ------------------
  479|      0|                        break;
  480|       |
  481|       |                /* And iterate again, but go one directory further down. */
  482|   237k|                st = st_child;
  483|   237k|                close_and_replace(fd, child);
  ------------------
  |  |  103|   237k|        ({                                      \
  |  |  104|   237k|                int *_fdp_ = &(a);              \
  |  |  105|   237k|                safe_close(*_fdp_);             \
  |  |  106|   237k|                *_fdp_ = TAKE_FD(b);            \
  |  |  ------------------
  |  |  |  |   99|   237k|#define TAKE_FD(fd) TAKE_GENERIC(fd, int, -EBADF)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|   237k|        ({                                                       \
  |  |  |  |  |  |  381|   237k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|   237k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|   237k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|   237k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|   237k|                _var_;                                           \
  |  |  |  |  |  |  386|   237k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|   237k|                0;                              \
  |  |  108|   237k|        })
  ------------------
  484|   237k|        }
  485|       |
  486|  18.4E|        if (FLAGS_SET(flags, CHASE_MUST_BE_DIRECTORY)) {
  ------------------
  |  |  414|  18.4E|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 18.4E]
  |  |  ------------------
  ------------------
  487|      0|                r = stat_verify_directory(&st);
  488|      0|                if (r < 0)
  ------------------
  |  Branch (488:21): [True: 0, False: 0]
  ------------------
  489|      0|                        return r;
  490|      0|        }
  491|       |
  492|  18.4E|        if (FLAGS_SET(flags, CHASE_MUST_BE_REGULAR)) {
  ------------------
  |  |  414|  18.4E|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 18.4E]
  |  |  ------------------
  ------------------
  493|      0|                r = stat_verify_regular(&st);
  494|      0|                if (r < 0)
  ------------------
  |  Branch (494:21): [True: 0, False: 0]
  ------------------
  495|      0|                        return r;
  496|      0|        }
  497|       |
  498|  18.4E|        if (ret_path) {
  ------------------
  |  Branch (498:13): [True: 0, False: 18.4E]
  ------------------
  499|      0|                if (FLAGS_SET(flags, CHASE_EXTRACT_FILENAME) && done) {
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (499:65): [True: 0, False: 0]
  ------------------
  500|      0|                        _cleanup_free_ char *f = NULL;
  ------------------
  |  |   82|      0|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  501|       |
  502|      0|                        r = path_extract_filename(done, &f);
  503|      0|                        if (r < 0 && r != -EADDRNOTAVAIL)
  ------------------
  |  Branch (503:29): [True: 0, False: 0]
  |  Branch (503:38): [True: 0, False: 0]
  ------------------
  504|      0|                                return r;
  505|       |
  506|       |                        /* If we get EADDRNOTAVAIL we clear done and it will get reinitialized by the next block. */
  507|      0|                        free_and_replace(done, f);
  ------------------
  |  |   49|      0|        free_and_replace_full(a, b, free)
  |  |  ------------------
  |  |  |  |   10|      0|        ({                                      \
  |  |  |  |   11|      0|                typeof(a)* _a = &(a);           \
  |  |  |  |   12|      0|                typeof(b)* _b = &(b);           \
  |  |  |  |   13|      0|                free_func(*_a);                 \
  |  |  |  |   14|      0|                *_a = *_b;                      \
  |  |  |  |   15|      0|                *_b = NULL;                     \
  |  |  |  |   16|      0|                0;                              \
  |  |  |  |   17|      0|        })
  |  |  ------------------
  ------------------
  508|      0|                }
  509|       |
  510|      0|                if (!done) {
  ------------------
  |  Branch (510:21): [True: 0, False: 0]
  ------------------
  511|      0|                        assert(!need_absolute || FLAGS_SET(flags, CHASE_EXTRACT_FILENAME));
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  512|      0|                        done = strdup(".");
  513|      0|                        if (!done)
  ------------------
  |  Branch (513:29): [True: 0, False: 0]
  ------------------
  514|      0|                                return -ENOMEM;
  515|      0|                }
  516|       |
  517|      0|                if (append_trail_slash)
  ------------------
  |  Branch (517:21): [True: 0, False: 0]
  ------------------
  518|      0|                        if (!strextend(&done, "/"))
  ------------------
  |  |  174|      0|#define strextend(x, ...) strextend_with_separator_internal(x, NULL, __VA_ARGS__, NULL)
  ------------------
  |  Branch (518:29): [True: 0, False: 0]
  ------------------
  519|      0|                                return -ENOMEM;
  520|       |
  521|      0|                *ret_path = TAKE_PTR(done);
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  522|      0|        }
  523|       |
  524|  18.4E|        if (ret_fd) {
  ------------------
  |  Branch (524:13): [True: 0, False: 18.4E]
  ------------------
  525|       |                /* Return the O_PATH fd we currently are looking to the caller. It can translate it to a
  526|       |                 * proper fd by opening /proc/self/fd/xyz. */
  527|       |
  528|      0|                assert(fd >= 0);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  529|      0|                *ret_fd = TAKE_FD(fd);
  ------------------
  |  |   99|      0|#define TAKE_FD(fd) TAKE_GENERIC(fd, int, -EBADF)
  |  |  ------------------
  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  386|      0|        })
  |  |  ------------------
  ------------------
  530|      0|        }
  531|       |
  532|  18.4E|        if (FLAGS_SET(flags, CHASE_STEP))
  ------------------
  |  |  414|  18.4E|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 18.4E]
  |  |  ------------------
  ------------------
  533|      0|                return 1;
  534|       |
  535|  18.4E|        return exists;
  536|       |
  537|      0|chased_one:
  538|      0|        if (ret_path) {
  ------------------
  |  Branch (538:13): [True: 0, False: 0]
  ------------------
  539|      0|                const char *e;
  540|       |
  541|      0|                if (!done) {
  ------------------
  |  Branch (541:21): [True: 0, False: 0]
  ------------------
  542|      0|                        assert(!need_absolute);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  543|      0|                        done = strdup(append_trail_slash ? "./" : ".");
  ------------------
  |  Branch (543:39): [True: 0, False: 0]
  ------------------
  544|      0|                        if (!done)
  ------------------
  |  Branch (544:29): [True: 0, False: 0]
  ------------------
  545|      0|                                return -ENOMEM;
  546|      0|                }
  547|       |
  548|       |                /* todo may contain slashes at the beginning. */
  549|      0|                r = path_find_first_component(&todo, /* accept_dot_dot= */ true, &e);
  550|      0|                if (r < 0)
  ------------------
  |  Branch (550:21): [True: 0, False: 0]
  ------------------
  551|      0|                        return r;
  552|      0|                if (r == 0)
  ------------------
  |  Branch (552:21): [True: 0, False: 0]
  ------------------
  553|      0|                        *ret_path = TAKE_PTR(done);
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  554|      0|                else {
  555|      0|                        char *c;
  556|       |
  557|      0|                        c = path_join(done, e);
  ------------------
  |  |   70|      0|#define path_join(...) path_extend_internal(NULL, __VA_ARGS__, POINTER_MAX)
  |  |  ------------------
  |  |  |  |  159|      0|#define POINTER_MAX ((void*) UINTPTR_MAX)
  |  |  ------------------
  ------------------
  558|      0|                        if (!c)
  ------------------
  |  Branch (558:29): [True: 0, False: 0]
  ------------------
  559|      0|                                return -ENOMEM;
  560|       |
  561|      0|                        *ret_path = c;
  562|      0|                }
  563|      0|        }
  564|       |
  565|      0|        return 0;
  566|      0|}
chase:
  589|  96.2k|int chase(const char *path, const char *root, ChaseFlags flags, char **ret_path, int *ret_fd) {
  590|  96.2k|        _cleanup_free_ char *root_abs = NULL, *absolute = NULL, *p = NULL;
  ------------------
  |  |   82|  96.2k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  96.2k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  591|  96.2k|        _cleanup_close_ int fd = -EBADF, pfd = -EBADF;
  ------------------
  |  |   60|  96.2k|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|  96.2k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  592|  96.2k|        int r;
  593|       |
  594|  96.2k|        assert(path);
  ------------------
  |  |   72|  96.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  96.2k|        do {                                                            \
  |  |  |  |   59|  96.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  96.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 96.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  96.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  96.2k|        } while (false)
  |  |  ------------------
  ------------------
  595|       |
  596|  96.2k|        if (isempty(path))
  ------------------
  |  Branch (596:13): [True: 0, False: 96.2k]
  ------------------
  597|      0|                return -EINVAL;
  598|       |
  599|  96.2k|        r = empty_or_root_to_null(&root);
  600|  96.2k|        if (r < 0)
  ------------------
  |  Branch (600:13): [True: 0, False: 96.2k]
  ------------------
  601|      0|                return r;
  602|       |
  603|       |        /* A root directory of "/" or "" is identical to "/". */
  604|  96.2k|        if (empty_or_root(root)) {
  ------------------
  |  Branch (604:13): [True: 96.2k, False: 0]
  ------------------
  605|  96.2k|                root = "/";
  606|       |
  607|       |                /* When the root directory is "/", we will drop CHASE_AT_RESOLVE_IN_ROOT in chaseat(),
  608|       |                 * hence below is not necessary, but let's shortcut. */
  609|  96.2k|                flags &= ~CHASE_AT_RESOLVE_IN_ROOT;
  610|       |
  611|  96.2k|        } else {
  612|      0|                r = path_make_absolute_cwd(root, &root_abs);
  613|      0|                if (r < 0)
  ------------------
  |  Branch (613:21): [True: 0, False: 0]
  ------------------
  614|      0|                        return r;
  615|       |
  616|       |                /* Simplify the root directory, so that it has no duplicate slashes and nothing at the
  617|       |                 * end. While we won't resolve the root path we still simplify it. */
  618|      0|                root = path_simplify(root_abs);
  619|       |
  620|      0|                assert(path_is_absolute(root));
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  621|      0|                assert(!empty_or_root(root));
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  622|       |
  623|      0|                if (FLAGS_SET(flags, CHASE_PREFIX_ROOT)) {
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  624|      0|                        absolute = path_join(root, path);
  ------------------
  |  |   70|      0|#define path_join(...) path_extend_internal(NULL, __VA_ARGS__, POINTER_MAX)
  |  |  ------------------
  |  |  |  |  159|      0|#define POINTER_MAX ((void*) UINTPTR_MAX)
  |  |  ------------------
  ------------------
  625|      0|                        if (!absolute)
  ------------------
  |  Branch (625:29): [True: 0, False: 0]
  ------------------
  626|      0|                                return -ENOMEM;
  627|      0|                }
  628|       |
  629|      0|                flags |= CHASE_AT_RESOLVE_IN_ROOT;
  630|      0|        }
  631|       |
  632|  96.2k|        if (!absolute) {
  ------------------
  |  Branch (632:13): [True: 96.2k, False: 0]
  ------------------
  633|  96.2k|                r = path_make_absolute_cwd(path, &absolute);
  634|  96.2k|                if (r < 0)
  ------------------
  |  Branch (634:21): [True: 0, False: 96.2k]
  ------------------
  635|      0|                        return r;
  636|  96.2k|        }
  637|       |
  638|  96.2k|        path = path_startswith(absolute, root);
  639|  96.2k|        if (!path)
  ------------------
  |  Branch (639:13): [True: 0, False: 96.2k]
  ------------------
  640|      0|                return log_full_errno(FLAGS_SET(flags, CHASE_WARN) ? LOG_WARNING : LOG_DEBUG,
  ------------------
  |  |  204|      0|        ({                                                              \
  |  |  205|      0|                int _error = (error);                                   \
  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  ------------------
  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  ------------------
  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  195|      0|        })
  |  |  ------------------
  |  |  208|      0|        })
  ------------------
  641|  96.2k|                                      SYNTHETIC_ERRNO(ECHRNG),
  642|  96.2k|                                      "Specified path '%s' is outside of specified root directory '%s', refusing to resolve.",
  643|  96.2k|                                      absolute, root);
  644|       |
  645|  96.2k|        fd = open(root, O_CLOEXEC|O_DIRECTORY|O_PATH);
  646|  96.2k|        if (fd < 0)
  ------------------
  |  Branch (646:13): [True: 0, False: 96.2k]
  ------------------
  647|      0|                return -errno;
  648|       |
  649|  96.2k|        r = chaseat(fd, path, flags & ~CHASE_PREFIX_ROOT, ret_path ? &p : NULL, ret_fd ? &pfd : NULL);
  ------------------
  |  Branch (649:59): [True: 96.2k, False: 0]
  |  Branch (649:81): [True: 92.3k, False: 3.94k]
  ------------------
  650|  96.2k|        if (r < 0)
  ------------------
  |  Branch (650:13): [True: 96.2k, False: 0]
  ------------------
  651|  96.2k|                return r;
  652|       |
  653|      0|        if (ret_path) {
  ------------------
  |  Branch (653:13): [True: 0, False: 0]
  ------------------
  654|      0|                if (!FLAGS_SET(flags, CHASE_EXTRACT_FILENAME)) {
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (654:21): [True: 0, False: 0]
  ------------------
  655|       |
  656|       |                        /* When "root" points to the root directory, the result of chaseat() is always
  657|       |                         * absolute, hence it is not necessary to prefix with the root. When "root" points to
  658|       |                         * a non-root directory, the result path is always normalized and relative, hence
  659|       |                         * we can simply call path_join() and not necessary to call path_simplify().
  660|       |                         * As a special case, chaseat() may return "." or "./", which are normalized too,
  661|       |                         * but we need to drop "." before merging with root. */
  662|       |
  663|      0|                        if (empty_or_root(root))
  ------------------
  |  Branch (663:29): [True: 0, False: 0]
  ------------------
  664|      0|                                assert(path_is_absolute(p));
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  665|      0|                        else {
  666|      0|                                char *q;
  667|       |
  668|      0|                                assert(!path_is_absolute(p));
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  669|       |
  670|      0|                                q = path_join(root, p + STR_IN_SET(p, ".", "./"));
  ------------------
  |  |   70|      0|#define path_join(...) path_extend_internal(NULL, __VA_ARGS__, POINTER_MAX)
  |  |  ------------------
  |  |  |  |  159|      0|#define POINTER_MAX ((void*) UINTPTR_MAX)
  |  |  ------------------
  ------------------
  671|      0|                                if (!q)
  ------------------
  |  Branch (671:37): [True: 0, False: 0]
  ------------------
  672|      0|                                        return -ENOMEM;
  673|       |
  674|      0|                                free_and_replace(p, q);
  ------------------
  |  |   49|      0|        free_and_replace_full(a, b, free)
  |  |  ------------------
  |  |  |  |   10|      0|        ({                                      \
  |  |  |  |   11|      0|                typeof(a)* _a = &(a);           \
  |  |  |  |   12|      0|                typeof(b)* _b = &(b);           \
  |  |  |  |   13|      0|                free_func(*_a);                 \
  |  |  |  |   14|      0|                *_a = *_b;                      \
  |  |  |  |   15|      0|                *_b = NULL;                     \
  |  |  |  |   16|      0|                0;                              \
  |  |  |  |   17|      0|        })
  |  |  ------------------
  ------------------
  675|      0|                        }
  676|      0|                }
  677|       |
  678|      0|                *ret_path = TAKE_PTR(p);
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  679|      0|        }
  680|       |
  681|      0|        if (ret_fd)
  ------------------
  |  Branch (681:13): [True: 0, False: 0]
  ------------------
  682|      0|                *ret_fd = TAKE_FD(pfd);
  ------------------
  |  |   99|      0|#define TAKE_FD(fd) TAKE_GENERIC(fd, int, -EBADF)
  |  |  ------------------
  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  386|      0|        })
  |  |  ------------------
  ------------------
  683|       |
  684|      0|        return r;
  685|      0|}
chase_and_open:
  768|  23.0k|                char **ret_path) {
  769|       |
  770|  23.0k|        _cleanup_close_ int path_fd = -EBADF;
  ------------------
  |  |   60|  23.0k|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|  23.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  771|  23.0k|        _cleanup_free_ char *p = NULL, *fname = NULL;
  ------------------
  |  |   82|  23.0k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  23.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  772|  23.0k|        int r;
  773|       |
  774|  23.0k|        assert(!(chase_flags & (CHASE_NONEXISTENT|CHASE_STEP)));
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
  775|       |
  776|  23.0k|        if (empty_or_root(root) && !ret_path &&
  ------------------
  |  Branch (776:13): [True: 23.0k, False: 0]
  |  Branch (776:36): [True: 23.0k, False: 0]
  ------------------
  777|  23.0k|            (chase_flags & (CHASE_NO_AUTOFS|CHASE_SAFE|CHASE_PROHIBIT_SYMLINKS|CHASE_PARENT|CHASE_MKDIR_0755)) == 0)
  ------------------
  |  Branch (777:13): [True: 23.0k, False: 0]
  ------------------
  778|       |                /* Shortcut this call if none of the special features of this call are requested */
  779|  23.0k|                return xopenat_full(AT_FDCWD, path,
  780|  23.0k|                                    open_flags | (FLAGS_SET(chase_flags, CHASE_NOFOLLOW) ? O_NOFOLLOW : 0),
  ------------------
  |  |  414|  23.0k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 23.0k]
  |  |  ------------------
  ------------------
  781|  23.0k|                                    /* xopen_flags = */ 0,
  782|  23.0k|                                    MODE_INVALID);
  ------------------
  |  |  313|  23.0k|#define MODE_INVALID            ((mode_t) -1)
  ------------------
  783|       |
  784|      0|        r = chase(path, root, CHASE_PARENT|chase_flags, &p, &path_fd);
  785|      0|        if (r < 0)
  ------------------
  |  Branch (785:13): [True: 0, False: 0]
  ------------------
  786|      0|                return r;
  787|      0|        assert(path_fd >= 0);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  788|       |
  789|      0|        if (!FLAGS_SET(chase_flags, CHASE_PARENT) &&
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (789:13): [True: 0, False: 0]
  ------------------
  790|      0|            !FLAGS_SET(chase_flags, CHASE_EXTRACT_FILENAME)) {
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (790:13): [True: 0, False: 0]
  ------------------
  791|      0|                r = chase_extract_filename(p, root, &fname);
  792|      0|                if (r < 0)
  ------------------
  |  Branch (792:21): [True: 0, False: 0]
  ------------------
  793|      0|                        return r;
  794|      0|        }
  795|       |
  796|      0|        r = xopenat_full(path_fd, strempty(fname), open_flags|O_NOFOLLOW, /* xopen_flags = */ 0, MODE_INVALID);
  ------------------
  |  |  313|      0|#define MODE_INVALID            ((mode_t) -1)
  ------------------
  797|      0|        if (r < 0)
  ------------------
  |  Branch (797:13): [True: 0, False: 0]
  ------------------
  798|      0|                return r;
  799|       |
  800|      0|        if (ret_path)
  ------------------
  |  Branch (800:13): [True: 0, False: 0]
  ------------------
  801|      0|                *ret_path = TAKE_PTR(p);
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  802|       |
  803|      0|        return r;
  804|      0|}
chase_and_opendir:
  806|  92.3k|int chase_and_opendir(const char *path, const char *root, ChaseFlags chase_flags, char **ret_path, DIR **ret_dir) {
  807|  92.3k|        _cleanup_close_ int path_fd = -EBADF;
  ------------------
  |  |   60|  92.3k|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|  92.3k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  808|  92.3k|        _cleanup_free_ char *p = NULL;
  ------------------
  |  |   82|  92.3k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  92.3k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  809|  92.3k|        DIR *d;
  810|  92.3k|        int r;
  811|       |
  812|  92.3k|        assert(!(chase_flags & (CHASE_NONEXISTENT|CHASE_STEP)));
  ------------------
  |  |   72|  92.3k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  92.3k|        do {                                                            \
  |  |  |  |   59|  92.3k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  92.3k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 92.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  92.3k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  92.3k|        } while (false)
  |  |  ------------------
  ------------------
  813|  92.3k|        assert(ret_dir);
  ------------------
  |  |   72|  92.3k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  92.3k|        do {                                                            \
  |  |  |  |   59|  92.3k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  92.3k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 92.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  92.3k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  92.3k|        } while (false)
  |  |  ------------------
  ------------------
  814|       |
  815|  92.3k|        if (empty_or_root(root) && !ret_path &&
  ------------------
  |  Branch (815:13): [True: 92.3k, False: 0]
  |  Branch (815:36): [True: 0, False: 92.3k]
  ------------------
  816|  92.3k|            (chase_flags & (CHASE_NO_AUTOFS|CHASE_SAFE|CHASE_PROHIBIT_SYMLINKS|CHASE_PARENT|CHASE_MKDIR_0755)) == 0) {
  ------------------
  |  Branch (816:13): [True: 0, False: 0]
  ------------------
  817|       |                /* Shortcut this call if none of the special features of this call are requested */
  818|      0|                d = opendir(path);
  819|      0|                if (!d)
  ------------------
  |  Branch (819:21): [True: 0, False: 0]
  ------------------
  820|      0|                        return -errno;
  821|       |
  822|      0|                *ret_dir = d;
  823|      0|                return 0;
  824|      0|        }
  825|       |
  826|  92.3k|        r = chase(path, root, chase_flags, ret_path ? &p : NULL, &path_fd);
  ------------------
  |  Branch (826:44): [True: 92.3k, False: 0]
  ------------------
  827|  92.3k|        if (r < 0)
  ------------------
  |  Branch (827:13): [True: 92.3k, False: 0]
  ------------------
  828|  92.3k|                return r;
  829|      0|        assert(path_fd >= 0);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  830|       |
  831|      0|        d = xopendirat(path_fd, ".", O_NOFOLLOW);
  832|      0|        if (!d)
  ------------------
  |  Branch (832:13): [True: 0, False: 0]
  ------------------
  833|      0|                return -errno;
  834|       |
  835|      0|        if (ret_path)
  ------------------
  |  Branch (835:13): [True: 0, False: 0]
  ------------------
  836|      0|                *ret_path = TAKE_PTR(p);
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  837|       |
  838|      0|        *ret_dir = d;
  839|      0|        return 0;
  840|      0|}
chase_and_stat:
  842|  13.0k|int chase_and_stat(const char *path, const char *root, ChaseFlags chase_flags, char **ret_path, struct stat *ret_stat) {
  843|  13.0k|        _cleanup_close_ int path_fd = -EBADF;
  ------------------
  |  |   60|  13.0k|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|  13.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  844|  13.0k|        _cleanup_free_ char *p = NULL;
  ------------------
  |  |   82|  13.0k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  13.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  845|  13.0k|        int r;
  846|       |
  847|  13.0k|        assert(path);
  ------------------
  |  |   72|  13.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.0k|        do {                                                            \
  |  |  |  |   59|  13.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  13.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.0k|        } while (false)
  |  |  ------------------
  ------------------
  848|  13.0k|        assert(!(chase_flags & (CHASE_NONEXISTENT|CHASE_STEP)));
  ------------------
  |  |   72|  13.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.0k|        do {                                                            \
  |  |  |  |   59|  13.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  13.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.0k|        } while (false)
  |  |  ------------------
  ------------------
  849|  13.0k|        assert(ret_stat);
  ------------------
  |  |   72|  13.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.0k|        do {                                                            \
  |  |  |  |   59|  13.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  13.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.0k|        } while (false)
  |  |  ------------------
  ------------------
  850|       |
  851|  13.0k|        if (empty_or_root(root) && !ret_path &&
  ------------------
  |  Branch (851:13): [True: 13.0k, False: 0]
  |  Branch (851:36): [True: 13.0k, False: 0]
  ------------------
  852|  13.0k|            (chase_flags & (CHASE_NO_AUTOFS|CHASE_SAFE|CHASE_PROHIBIT_SYMLINKS|CHASE_PARENT|CHASE_MKDIR_0755)) == 0)
  ------------------
  |  Branch (852:13): [True: 13.0k, False: 0]
  ------------------
  853|       |                /* Shortcut this call if none of the special features of this call are requested */
  854|  13.0k|                return RET_NERRNO(fstatat(AT_FDCWD, path, ret_stat,
  855|  13.0k|                                          FLAGS_SET(chase_flags, CHASE_NOFOLLOW) ? AT_SYMLINK_NOFOLLOW : 0));
  ------------------
  |  |  414|  13.0k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 13.0k]
  |  |  ------------------
  ------------------
  856|       |
  857|      0|        r = chase(path, root, chase_flags, ret_path ? &p : NULL, &path_fd);
  ------------------
  |  Branch (857:44): [True: 0, False: 0]
  ------------------
  858|      0|        if (r < 0)
  ------------------
  |  Branch (858:13): [True: 0, False: 0]
  ------------------
  859|      0|                return r;
  860|      0|        assert(path_fd >= 0);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  861|       |
  862|      0|        if (fstat(path_fd, ret_stat) < 0)
  ------------------
  |  Branch (862:13): [True: 0, False: 0]
  ------------------
  863|      0|                return -errno;
  864|       |
  865|      0|        if (ret_path)
  ------------------
  |  Branch (865:13): [True: 0, False: 0]
  ------------------
  866|      0|                *ret_path = TAKE_PTR(p);
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  867|       |
  868|      0|        return 0;
  869|      0|}
chase_and_fopen_unlocked:
  906|  23.0k|                FILE **ret_file) {
  907|       |
  908|  23.0k|        _cleanup_free_ char *final_path = NULL;
  ------------------
  |  |   82|  23.0k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  23.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  909|  23.0k|        _cleanup_close_ int fd = -EBADF;
  ------------------
  |  |   60|  23.0k|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|  23.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  910|  23.0k|        int mode_flags, r;
  911|       |
  912|  23.0k|        assert(path);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
  913|  23.0k|        assert(!(chase_flags & (CHASE_NONEXISTENT|CHASE_STEP|CHASE_PARENT)));
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
  914|  23.0k|        assert(open_flags);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
  915|  23.0k|        assert(ret_file);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
  916|       |
  917|  23.0k|        mode_flags = fopen_mode_to_flags(open_flags);
  918|  23.0k|        if (mode_flags < 0)
  ------------------
  |  Branch (918:13): [True: 0, False: 23.0k]
  ------------------
  919|      0|                return mode_flags;
  920|       |
  921|  23.0k|        fd = chase_and_open(path, root, chase_flags, mode_flags, ret_path ? &final_path : NULL);
  ------------------
  |  Branch (921:66): [True: 0, False: 23.0k]
  ------------------
  922|  23.0k|        if (fd < 0)
  ------------------
  |  Branch (922:13): [True: 0, False: 23.0k]
  ------------------
  923|      0|                return fd;
  924|       |
  925|  23.0k|        r = take_fdopen_unlocked(&fd, open_flags, ret_file);
  926|  23.0k|        if (r < 0)
  ------------------
  |  Branch (926:13): [True: 0, False: 23.0k]
  ------------------
  927|      0|                return r;
  928|       |
  929|  23.0k|        if (ret_path)
  ------------------
  |  Branch (929:13): [True: 0, False: 23.0k]
  ------------------
  930|      0|                *ret_path = TAKE_PTR(final_path);
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  931|       |
  932|  23.0k|        return 0;
  933|  23.0k|}
chase.c:chaseat_needs_absolute:
   79|  96.2k|static int chaseat_needs_absolute(int dir_fd, const char *path) {
   80|  96.2k|        if (dir_fd < 0)
  ------------------
  |  Branch (80:13): [True: 0, False: 96.2k]
  ------------------
   81|      0|                return path_is_absolute(path);
   82|       |
   83|  96.2k|        return dir_fd_is_root(dir_fd);
   84|  96.2k|}
chase.c:empty_or_root_to_null:
  568|  96.2k|static int empty_or_root_to_null(const char **path) {
  569|  96.2k|        int r;
  570|       |
  571|  96.2k|        assert(path);
  ------------------
  |  |   72|  96.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  96.2k|        do {                                                            \
  |  |  |  |   59|  96.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  96.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 96.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  96.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  96.2k|        } while (false)
  |  |  ------------------
  ------------------
  572|       |
  573|       |        /* This nullifies the input path when the path is empty or points to "/". */
  574|       |
  575|  96.2k|        if (empty_or_root(*path)) {
  ------------------
  |  Branch (575:13): [True: 96.2k, False: 0]
  ------------------
  576|  96.2k|                *path = NULL;
  577|  96.2k|                return 0;
  578|  96.2k|        }
  579|       |
  580|      0|        r = path_is_root(*path);
  581|      0|        if (r < 0)
  ------------------
  |  Branch (581:13): [True: 0, False: 0]
  ------------------
  582|      0|                return r;
  583|      0|        if (r > 0)
  ------------------
  |  Branch (583:13): [True: 0, False: 0]
  ------------------
  584|      0|                *path = NULL;
  585|       |
  586|      0|        return 0;
  587|      0|}

netdev_unref:
   45|  23.0k|        scope type *name##_unref(type *p) {                      \
   46|  23.0k|                if (!p)                                          \
  ------------------
  |  Branch (46:21): [True: 0, False: 23.0k]
  ------------------
   47|  23.0k|                        return NULL;                             \
   48|  23.0k|                                                                 \
   49|  23.0k|                assert(p->n_ref > 0);                            \
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
   50|  23.0k|                p->n_ref--;                                      \
   51|  23.0k|                if (p->n_ref > 0)                                \
  ------------------
  |  Branch (51:21): [True: 0, False: 23.0k]
  ------------------
   52|  23.0k|                        return NULL;                             \
   53|  23.0k|                                                                 \
   54|  23.0k|                return free_func(p);                             \
   55|  23.0k|        }
route_unref:
   45|  20.2k|        scope type *name##_unref(type *p) {                      \
   46|  20.2k|                if (!p)                                          \
  ------------------
  |  Branch (46:21): [True: 0, False: 20.2k]
  ------------------
   47|  20.2k|                        return NULL;                             \
   48|  20.2k|                                                                 \
   49|  20.2k|                assert(p->n_ref > 0);                            \
  ------------------
  |  |   72|  20.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  20.2k|        do {                                                            \
  |  |  |  |   59|  20.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  20.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 20.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  20.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  20.2k|        } while (false)
  |  |  ------------------
  ------------------
   50|  20.2k|                p->n_ref--;                                      \
   51|  20.2k|                if (p->n_ref > 0)                                \
  ------------------
  |  Branch (51:21): [True: 0, False: 20.2k]
  ------------------
   52|  20.2k|                        return NULL;                             \
   53|  20.2k|                                                                 \
   54|  20.2k|                return free_func(p);                             \
   55|  20.2k|        }
group_record_unref:
   45|    490|        scope type *name##_unref(type *p) {                      \
   46|    490|                if (!p)                                          \
  ------------------
  |  Branch (46:21): [True: 420, False: 70]
  ------------------
   47|    490|                        return NULL;                             \
   48|    490|                                                                 \
   49|    490|                assert(p->n_ref > 0);                            \
  ------------------
  |  |   72|     70|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     70|        do {                                                            \
  |  |  |  |   59|     70|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     70|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 70]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     70|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     70|        } while (false)
  |  |  ------------------
  ------------------
   50|     70|                p->n_ref--;                                      \
   51|     70|                if (p->n_ref > 0)                                \
  ------------------
  |  Branch (51:21): [True: 0, False: 70]
  ------------------
   52|     70|                        return NULL;                             \
   53|     70|                                                                 \
   54|     70|                return free_func(p);                             \
   55|     70|        }
sd_resolve_unref:
   45|  13.0k|        scope type *name##_unref(type *p) {                      \
   46|  13.0k|                if (!p)                                          \
  ------------------
  |  Branch (46:21): [True: 13.0k, False: 0]
  ------------------
   47|  13.0k|                        return NULL;                             \
   48|  13.0k|                                                                 \
   49|  13.0k|                assert(p->n_ref > 0);                            \
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
   50|      0|                p->n_ref--;                                      \
   51|      0|                if (p->n_ref > 0)                                \
  ------------------
  |  Branch (51:21): [True: 0, False: 0]
  ------------------
   52|      0|                        return NULL;                             \
   53|      0|                                                                 \
   54|      0|                return free_func(p);                             \
   55|      0|        }
sd_resolve_query_unref:
   45|  12.0k|        scope type *name##_unref(type *p) {                      \
   46|  12.0k|                if (!p)                                          \
  ------------------
  |  Branch (46:21): [True: 12.0k, False: 0]
  ------------------
   47|  12.0k|                        return NULL;                             \
   48|  12.0k|                                                                 \
   49|  12.0k|                assert(p->n_ref > 0);                            \
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
   50|      0|                p->n_ref--;                                      \
   51|      0|                if (p->n_ref > 0)                                \
  ------------------
  |  Branch (51:21): [True: 0, False: 0]
  ------------------
   52|      0|                        return NULL;                             \
   53|      0|                                                                 \
   54|      0|                return free_func(p);                             \
   55|      0|        }
sd_event_source_unref:
   45|  49.5k|        scope type *name##_unref(type *p) {                      \
   46|  49.5k|                if (!p)                                          \
  ------------------
  |  Branch (46:21): [True: 49.5k, False: 0]
  ------------------
   47|  49.5k|                        return NULL;                             \
   48|  49.5k|                                                                 \
   49|  49.5k|                assert(p->n_ref > 0);                            \
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
   50|      0|                p->n_ref--;                                      \
   51|      0|                if (p->n_ref > 0)                                \
  ------------------
  |  Branch (51:21): [True: 0, False: 0]
  ------------------
   52|      0|                        return NULL;                             \
   53|      0|                                                                 \
   54|      0|                return free_func(p);                             \
   55|      0|        }
sd_device_monitor_unref:
   45|  13.0k|        scope type *name##_unref(type *p) {                      \
   46|  13.0k|                if (!p)                                          \
  ------------------
  |  Branch (46:21): [True: 13.0k, False: 0]
  ------------------
   47|  13.0k|                        return NULL;                             \
   48|  13.0k|                                                                 \
   49|  13.0k|                assert(p->n_ref > 0);                            \
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
   50|      0|                p->n_ref--;                                      \
   51|      0|                if (p->n_ref > 0)                                \
  ------------------
  |  Branch (51:21): [True: 0, False: 0]
  ------------------
   52|      0|                        return NULL;                             \
   53|      0|                                                                 \
   54|      0|                return free_func(p);                             \
   55|      0|        }
sd-json.c:json_source_ref:
   31|  14.6k|        scope type *name##_ref(type *p) {                       \
   32|  14.6k|                if (!p)                                         \
  ------------------
  |  Branch (32:21): [True: 14.6k, False: 0]
  ------------------
   33|  14.6k|                        return NULL;                            \
   34|  14.6k|                                                                \
   35|  14.6k|                /* For type check. */                           \
   36|  14.6k|                unsigned *q = &p->n_ref;                        \
   37|      0|                assert(*q > 0);                                 \
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
   38|      0|                assert_se(*q < UINT_MAX);                       \
  ------------------
  |  |   65|      0|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
   39|      0|                                                                \
   40|      0|                (*q)++;                                         \
   41|      0|                return p;                                       \
   42|  14.6k|        }
sd-json.c:json_source_unref:
   45|  27.9k|        scope type *name##_unref(type *p) {                      \
   46|  27.9k|                if (!p)                                          \
  ------------------
  |  Branch (46:21): [True: 27.9k, False: 0]
  ------------------
   47|  27.9k|                        return NULL;                             \
   48|  27.9k|                                                                 \
   49|  27.9k|                assert(p->n_ref > 0);                            \
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
   50|      0|                p->n_ref--;                                      \
   51|      0|                if (p->n_ref > 0)                                \
  ------------------
  |  Branch (51:21): [True: 0, False: 0]
  ------------------
   52|      0|                        return NULL;                             \
   53|      0|                                                                 \
   54|      0|                return free_func(p);                             \
  ------------------
  |  |  157|      0|DEFINE_PRIVATE_TRIVIAL_REF_UNREF_FUNC(JsonSource, json_source, mfree);
  |  |  ------------------
  |  |  |  |  404|      0|        ({                                      \
  |  |  |  |  405|      0|                free(memory);                   \
  |  |  |  |  406|      0|                (typeof(memory)) NULL;          \
  |  |  |  |  407|      0|        })
  |  |  ------------------
  ------------------
   55|      0|        }
sd_varlink_unref:
   45|    835|        scope type *name##_unref(type *p) {                      \
   46|    835|                if (!p)                                          \
  ------------------
  |  Branch (46:21): [True: 0, False: 835]
  ------------------
   47|    835|                        return NULL;                             \
   48|    835|                                                                 \
   49|    835|                assert(p->n_ref > 0);                            \
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
   50|    835|                p->n_ref--;                                      \
   51|    835|                if (p->n_ref > 0)                                \
  ------------------
  |  Branch (51:21): [True: 0, False: 835]
  ------------------
   52|    835|                        return NULL;                             \
   53|    835|                                                                 \
   54|    835|                return free_func(p);                             \
   55|    835|        }
sd_varlink_server_unref:
   45|  13.0k|        scope type *name##_unref(type *p) {                      \
   46|  13.0k|                if (!p)                                          \
  ------------------
  |  Branch (46:21): [True: 13.0k, False: 0]
  ------------------
   47|  13.0k|                        return NULL;                             \
   48|  13.0k|                                                                 \
   49|  13.0k|                assert(p->n_ref > 0);                            \
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
   50|      0|                p->n_ref--;                                      \
   51|      0|                if (p->n_ref > 0)                                \
  ------------------
  |  Branch (51:21): [True: 0, False: 0]
  ------------------
   52|      0|                        return NULL;                             \
   53|      0|                                                                 \
   54|      0|                return free_func(p);                             \
   55|      0|        }
sd_netlink_unref:
   45|  26.1k|        scope type *name##_unref(type *p) {                      \
   46|  26.1k|                if (!p)                                          \
  ------------------
  |  Branch (46:21): [True: 26.1k, False: 0]
  ------------------
   47|  26.1k|                        return NULL;                             \
   48|  26.1k|                                                                 \
   49|  26.1k|                assert(p->n_ref > 0);                            \
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
   50|      0|                p->n_ref--;                                      \
   51|      0|                if (p->n_ref > 0)                                \
  ------------------
  |  Branch (51:21): [True: 0, False: 0]
  ------------------
   52|      0|                        return NULL;                             \
   53|      0|                                                                 \
   54|      0|                return free_func(p);                             \
   55|      0|        }

conf_files_list_strv:
  145|  23.0k|                const char * const *dirs) {
  146|       |
  147|  23.0k|        _cleanup_hashmap_free_ Hashmap *fh = NULL;
  ------------------
  |  |  367|  23.0k|#define _cleanup_hashmap_free_ _cleanup_(hashmap_freep)
  |  |  ------------------
  |  |  |  |   78|  23.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  148|  23.0k|        _cleanup_set_free_ Set *masked = NULL;
  ------------------
  |  |  119|  23.0k|#define _cleanup_set_free_ _cleanup_(set_freep)
  |  |  ------------------
  |  |  |  |   78|  23.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  149|  23.0k|        int r;
  150|       |
  151|  23.0k|        assert(ret);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
  152|       |
  153|  92.3k|        STRV_FOREACH(p, dirs) {
  ------------------
  |  |   10|  23.0k|        _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |    7|   115k|        for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (7:41): [True: 115k, False: 0]
  |  |  |  |  |  Branch (7:52): [True: 92.3k, False: 23.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  154|  92.3k|                _cleanup_closedir_ DIR *dir = NULL;
  ------------------
  |  |   63|  92.3k|#define _cleanup_closedir_ _cleanup_(closedirp)
  |  |  ------------------
  |  |  |  |   78|  92.3k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  155|  92.3k|                _cleanup_free_ char *path = NULL;
  ------------------
  |  |   82|  92.3k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  92.3k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  156|       |
  157|  92.3k|                r = chase_and_opendir(*p, root, CHASE_PREFIX_ROOT, &path, &dir);
  158|  92.3k|                if (r < 0) {
  ------------------
  |  Branch (158:21): [True: 92.3k, False: 0]
  ------------------
  159|  92.3k|                        if (r != -ENOENT)
  ------------------
  |  Branch (159:29): [True: 0, False: 92.3k]
  ------------------
  160|  92.3k|                                log_debug_errno(r, "Failed to chase and open directory '%s', ignoring: %m", *p);
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  161|  92.3k|                        continue;
  162|  92.3k|                }
  163|       |
  164|      0|                r = files_add(dir, path, &fh, &masked, suffix, flags);
  165|      0|                if (r == -ENOMEM)
  ------------------
  |  Branch (165:21): [True: 0, False: 0]
  ------------------
  166|      0|                        return r;
  167|      0|                if (r < 0)
  ------------------
  |  Branch (167:21): [True: 0, False: 0]
  ------------------
  168|      0|                        log_debug_errno(r, "Failed to search for files in '%s', ignoring: %m", path);
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  169|      0|        }
  170|       |
  171|  23.0k|        return copy_and_sort_files_from_hashmap(fh, ret);
  172|  23.0k|}
conf_files_list_dropins:
  349|  23.0k|                const char * const *dirs) {
  350|       |
  351|  23.0k|        _cleanup_strv_free_ char **dropin_dirs = NULL;
  ------------------
  |  |   21|  23.0k|#define _cleanup_strv_free_ _cleanup_(strv_freep)
  |  |  ------------------
  |  |  |  |   78|  23.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  352|  23.0k|        const char *suffix;
  353|  23.0k|        int r;
  354|       |
  355|  23.0k|        assert(ret);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
  356|  23.0k|        assert(dropin_dirname);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
  357|  23.0k|        assert(dirs);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
  358|       |
  359|  23.0k|        suffix = strjoina("/", dropin_dirname);
  ------------------
  |  |   94|  23.0k|        ({                                                              \
  |  |   95|  23.0k|                const char *_appendees_[] = { a, __VA_ARGS__ };         \
  |  |   96|  23.0k|                char *_d_, *_p_;                                        \
  |  |   97|  23.0k|                size_t _len_ = 0;                                       \
  |  |   98|  23.0k|                size_t _i_;                                             \
  |  |   99|  69.2k|                for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
  |  |  ------------------
  |  |  |  |  134|   138k|        (__builtin_choose_expr(                                         \
  |  |  |  |  135|   138k|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  |  |  136|   138k|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  |  |  137|   138k|                VOID_0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  128|  69.2k|#  define VOID_0 ((void)0)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (99:31): [True: 46.1k, False: 23.0k]
  |  |  |  Branch (99:64): [True: 46.1k, False: 0]
  |  |  ------------------
  |  |  100|  46.1k|                        _len_ += strlen(_appendees_[_i_]);              \
  |  |  101|  23.0k|                _p_ = _d_ = newa(char, _len_ + 1);                      \
  |  |  ------------------
  |  |  |  |   29|  23.0k|        ({                                                              \
  |  |  |  |   30|  23.0k|                size_t _n_ = (n);                                       \
  |  |  |  |   31|  23.0k|                assert_se(MUL_ASSIGN_SAFE(&_n_, sizeof(t)));            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  23.0k|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  23.0k|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   32|  23.0k|                (t*) alloca_safe(_n_);                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|  23.0k|        ({                                                              \
  |  |  |  |  |  |   23|  23.0k|                size_t _nn_ = (n);                                      \
  |  |  |  |  |  |   24|  23.0k|                assert(_nn_ <= ALLOCA_MAX);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  23.0k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   25|  23.0k|                alloca(_nn_ == 0 ? 1 : _nn_);                           \
  |  |  |  |  |  |   26|  23.0k|        })                                                              \
  |  |  |  |  ------------------
  |  |  |  |   33|  23.0k|        })
  |  |  ------------------
  |  |  102|  69.2k|                for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
  |  |  ------------------
  |  |  |  |  134|   138k|        (__builtin_choose_expr(                                         \
  |  |  |  |  135|   138k|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  |  |  136|   138k|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  |  |  137|   138k|                VOID_0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  128|  69.2k|#  define VOID_0 ((void)0)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (102:31): [True: 46.1k, False: 23.0k]
  |  |  |  Branch (102:64): [True: 46.1k, False: 0]
  |  |  ------------------
  |  |  103|  46.1k|                        _p_ = stpcpy(_p_, _appendees_[_i_]);            \
  |  |  104|  23.0k|                *_p_ = 0;                                               \
  |  |  105|  23.0k|                _d_;                                                    \
  |  |  106|  23.0k|        })
  ------------------
  360|  23.0k|        r = strv_extend_strv_concat(&dropin_dirs, dirs, suffix);
  361|  23.0k|        if (r < 0)
  ------------------
  |  Branch (361:13): [True: 0, False: 23.0k]
  ------------------
  362|      0|                return r;
  363|       |
  364|  23.0k|        return conf_files_list_strv(ret, ".conf", root, 0, (const char* const*) dropin_dirs);
  365|  23.0k|}
conf-files.c:copy_and_sort_files_from_hashmap:
  120|  23.0k|static int copy_and_sort_files_from_hashmap(Hashmap *fh, char ***ret) {
  121|  23.0k|        _cleanup_free_ char **sv = NULL;
  ------------------
  |  |   82|  23.0k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  23.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  122|  23.0k|        char **files;
  123|  23.0k|        int r;
  124|       |
  125|  23.0k|        assert(ret);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
  126|       |
  127|  23.0k|        r = hashmap_dump_sorted(fh, (void***) &sv, /* ret_n = */ NULL);
  128|  23.0k|        if (r < 0)
  ------------------
  |  Branch (128:13): [True: 0, False: 23.0k]
  ------------------
  129|      0|                return r;
  130|       |
  131|       |        /* The entries in the array given by hashmap_dump_sorted() are still owned by the hashmap. */
  132|  23.0k|        files = strv_copy(sv);
  133|  23.0k|        if (!files)
  ------------------
  |  Branch (133:13): [True: 0, False: 23.0k]
  ------------------
  134|      0|                return -ENOMEM;
  135|       |
  136|  23.0k|        *ret = files;
  137|  23.0k|        return 0;
  138|  23.0k|}

safe_dlclose:
    6|  1.67k|void* safe_dlclose(void *dl) {
    7|  1.67k|        if (!dl)
  ------------------
  |  Branch (7:13): [True: 1.67k, False: 0]
  ------------------
    8|  1.67k|                return NULL;
    9|       |
   10|      0|        assert_se(dlclose(dl) == 0);
  ------------------
  |  |   65|      0|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
   11|      0|        return NULL;
   12|  1.67k|}

userdb.c:dlclosep:
   10|  1.67k|static inline void dlclosep(void **dlp) {
   11|  1.67k|        safe_dlclose(*dlp);
   12|  1.67k|}

is_efi_boot:
  307|      2|bool is_efi_boot(void) {
  308|      2|        static int cache = -1;
  309|       |
  310|      2|        if (cache < 0) {
  ------------------
  |  Branch (310:13): [True: 1, False: 1]
  ------------------
  311|      1|                if (detect_container() > 0)
  ------------------
  |  Branch (311:21): [True: 1, False: 0]
  ------------------
  312|      1|                        cache = false;
  313|      0|                else {
  314|      0|                        cache = access("/sys/firmware/efi/", F_OK) >= 0;
  315|      0|                        if (!cache && errno != ENOENT)
  ------------------
  |  Branch (315:29): [True: 0, False: 0]
  |  Branch (315:39): [True: 0, False: 0]
  ------------------
  316|      0|                                log_debug_errno(errno, "Unable to test whether /sys/firmware/efi/ exists, assuming EFI not available: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  317|      0|                }
  318|      1|        }
  319|       |
  320|      2|        return cache;
  321|      2|}

getenv_bool:
  991|  26.1k|int getenv_bool(const char *p) {
  992|  26.1k|        const char *e;
  993|       |
  994|  26.1k|        e = getenv(p);
  995|  26.1k|        if (!e)
  ------------------
  |  Branch (995:13): [True: 26.1k, False: 0]
  ------------------
  996|  26.1k|                return -ENXIO;
  997|       |
  998|      0|        return parse_boolean(e);
  999|  26.1k|}

chase.c:RET_NERRNO:
   58|   346k|static inline int RET_NERRNO(int ret) {
   59|       |
   60|       |        /* Helper to wrap system calls in to make them return negative errno errors. This brings system call
   61|       |         * error handling in sync with how we usually handle errors in our own code, i.e. with immediate
   62|       |         * returning of negative errno. Usage is like this:
   63|       |         *
   64|       |         *     …
   65|       |         *     r = RET_NERRNO(unlink(t));
   66|       |         *     …
   67|       |         *
   68|       |         * or
   69|       |         *
   70|       |         *     …
   71|       |         *     fd = RET_NERRNO(open("/etc/fstab", O_RDONLY|O_CLOEXEC));
   72|       |         *     …
   73|       |         */
   74|       |
   75|   346k|        if (ret < 0)
  ------------------
  |  Branch (75:13): [True: 96.2k, False: 250k]
  ------------------
   76|  96.2k|                return negative_errno();
   77|       |
   78|   250k|        return ret;
   79|   346k|}
chase.c:negative_errno:
   49|  96.2k|static inline int negative_errno(void) {
   50|       |        /* This helper should be used to shut up gcc if you know 'errno' is
   51|       |         * negative. Instead of "return -errno;", use "return negative_errno();"
   52|       |         * It will suppress bogus gcc warnings in case it assumes 'errno' might
   53|       |         * be 0 and thus the caller's error-handling might not be triggered. */
   54|  96.2k|        assert_return(errno > 0, -EINVAL);
  ------------------
  |  |   18|  96.2k|        do {                                                            \
  |  |   19|  96.2k|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|  96.2k|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|  96.2k|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 96.2k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|  96.2k|        ? (true)                                                        \
  |  |  |  |   15|  96.2k|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 96.2k]
  |  |  ------------------
  |  |   20|  96.2k|                        return (r);                                     \
  |  |   21|  96.2k|        } while (false)
  ------------------
   55|  96.2k|        return -errno;
   56|  96.2k|}
fd-util.c:_reset_errno_:
   23|   662k|static inline void _reset_errno_(int *saved_errno) {
   24|   662k|        if (*saved_errno < 0) /* Invalidated by UNPROTECT_ERRNO? */
  ------------------
  |  Branch (24:13): [True: 0, False: 662k]
  ------------------
   25|      0|                return;
   26|       |
   27|   662k|        errno = *saved_errno;
   28|   662k|}
fileio.c:errno_or_else:
   91|  1.92k|static inline int errno_or_else(int fallback) {
   92|       |        /* To be used when invoking library calls where errno handling is not defined clearly: we return
   93|       |         * errno if it is set, and the specified error otherwise. The idea is that the caller initializes
   94|       |         * errno to zero before doing an API call, and then uses this helper to retrieve a somewhat useful
   95|       |         * error code */
   96|  1.92k|        if (errno > 0)
  ------------------
  |  Branch (96:13): [True: 1.92k, False: 0]
  ------------------
   97|  1.92k|                return -errno;
   98|       |
   99|      0|        return -ABS(fallback);
  ------------------
  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  ------------------
  100|  1.92k|}
fileio.c:RET_NERRNO:
   58|  4.02k|static inline int RET_NERRNO(int ret) {
   59|       |
   60|       |        /* Helper to wrap system calls in to make them return negative errno errors. This brings system call
   61|       |         * error handling in sync with how we usually handle errors in our own code, i.e. with immediate
   62|       |         * returning of negative errno. Usage is like this:
   63|       |         *
   64|       |         *     …
   65|       |         *     r = RET_NERRNO(unlink(t));
   66|       |         *     …
   67|       |         *
   68|       |         * or
   69|       |         *
   70|       |         *     …
   71|       |         *     fd = RET_NERRNO(open("/etc/fstab", O_RDONLY|O_CLOEXEC));
   72|       |         *     …
   73|       |         */
   74|       |
   75|  4.02k|        if (ret < 0)
  ------------------
  |  Branch (75:13): [True: 3.94k, False: 72]
  ------------------
   76|  3.94k|                return negative_errno();
   77|       |
   78|     72|        return ret;
   79|  4.02k|}
fileio.c:negative_errno:
   49|  3.94k|static inline int negative_errno(void) {
   50|       |        /* This helper should be used to shut up gcc if you know 'errno' is
   51|       |         * negative. Instead of "return -errno;", use "return negative_errno();"
   52|       |         * It will suppress bogus gcc warnings in case it assumes 'errno' might
   53|       |         * be 0 and thus the caller's error-handling might not be triggered. */
   54|  3.94k|        assert_return(errno > 0, -EINVAL);
  ------------------
  |  |   18|  3.94k|        do {                                                            \
  |  |   19|  3.94k|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|  3.94k|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|  3.94k|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 3.94k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|  3.94k|        ? (true)                                                        \
  |  |  |  |   15|  3.94k|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 3.94k]
  |  |  ------------------
  |  |   20|  3.94k|                        return (r);                                     \
  |  |   21|  3.94k|        } while (false)
  ------------------
   55|  3.94k|        return -errno;
   56|  3.94k|}
in-addr-util.c:errno_or_else:
   91|  75.6k|static inline int errno_or_else(int fallback) {
   92|       |        /* To be used when invoking library calls where errno handling is not defined clearly: we return
   93|       |         * errno if it is set, and the specified error otherwise. The idea is that the caller initializes
   94|       |         * errno to zero before doing an API call, and then uses this helper to retrieve a somewhat useful
   95|       |         * error code */
   96|  75.6k|        if (errno > 0)
  ------------------
  |  Branch (96:13): [True: 0, False: 75.6k]
  ------------------
   97|      0|                return -errno;
   98|       |
   99|  75.6k|        return -ABS(fallback);
  ------------------
  |  |  172|  75.6k|#  define ABS(a) __builtin_llabs(a)
  ------------------
  100|  75.6k|}
log.c:_reset_errno_:
   23|  44.6k|static inline void _reset_errno_(int *saved_errno) {
   24|  44.6k|        if (*saved_errno < 0) /* Invalidated by UNPROTECT_ERRNO? */
  ------------------
  |  Branch (24:13): [True: 0, False: 44.6k]
  ------------------
   25|      0|                return;
   26|       |
   27|  44.6k|        errno = *saved_errno;
   28|  44.6k|}
namespace-util.c:RET_NERRNO:
   58|      1|static inline int RET_NERRNO(int ret) {
   59|       |
   60|       |        /* Helper to wrap system calls in to make them return negative errno errors. This brings system call
   61|       |         * error handling in sync with how we usually handle errors in our own code, i.e. with immediate
   62|       |         * returning of negative errno. Usage is like this:
   63|       |         *
   64|       |         *     …
   65|       |         *     r = RET_NERRNO(unlink(t));
   66|       |         *     …
   67|       |         *
   68|       |         * or
   69|       |         *
   70|       |         *     …
   71|       |         *     fd = RET_NERRNO(open("/etc/fstab", O_RDONLY|O_CLOEXEC));
   72|       |         *     …
   73|       |         */
   74|       |
   75|      1|        if (ret < 0)
  ------------------
  |  Branch (75:13): [True: 0, False: 1]
  ------------------
   76|      0|                return negative_errno();
   77|       |
   78|      1|        return ret;
   79|      1|}
tmpfile-util.c:RET_NERRNO:
   58|  13.0k|static inline int RET_NERRNO(int ret) {
   59|       |
   60|       |        /* Helper to wrap system calls in to make them return negative errno errors. This brings system call
   61|       |         * error handling in sync with how we usually handle errors in our own code, i.e. with immediate
   62|       |         * returning of negative errno. Usage is like this:
   63|       |         *
   64|       |         *     …
   65|       |         *     r = RET_NERRNO(unlink(t));
   66|       |         *     …
   67|       |         *
   68|       |         * or
   69|       |         *
   70|       |         *     …
   71|       |         *     fd = RET_NERRNO(open("/etc/fstab", O_RDONLY|O_CLOEXEC));
   72|       |         *     …
   73|       |         */
   74|       |
   75|  13.0k|        if (ret < 0)
  ------------------
  |  Branch (75:13): [True: 0, False: 13.0k]
  ------------------
   76|      0|                return negative_errno();
   77|       |
   78|  13.0k|        return ret;
   79|  13.0k|}
sd-varlink.c:RET_NERRNO:
   58|    835|static inline int RET_NERRNO(int ret) {
   59|       |
   60|       |        /* Helper to wrap system calls in to make them return negative errno errors. This brings system call
   61|       |         * error handling in sync with how we usually handle errors in our own code, i.e. with immediate
   62|       |         * returning of negative errno. Usage is like this:
   63|       |         *
   64|       |         *     …
   65|       |         *     r = RET_NERRNO(unlink(t));
   66|       |         *     …
   67|       |         *
   68|       |         * or
   69|       |         *
   70|       |         *     …
   71|       |         *     fd = RET_NERRNO(open("/etc/fstab", O_RDONLY|O_CLOEXEC));
   72|       |         *     …
   73|       |         */
   74|       |
   75|    835|        if (ret < 0)
  ------------------
  |  Branch (75:13): [True: 835, False: 0]
  ------------------
   76|    835|                return negative_errno();
   77|       |
   78|      0|        return ret;
   79|    835|}
sd-varlink.c:negative_errno:
   49|    835|static inline int negative_errno(void) {
   50|       |        /* This helper should be used to shut up gcc if you know 'errno' is
   51|       |         * negative. Instead of "return -errno;", use "return negative_errno();"
   52|       |         * It will suppress bogus gcc warnings in case it assumes 'errno' might
   53|       |         * be 0 and thus the caller's error-handling might not be triggered. */
   54|    835|        assert_return(errno > 0, -EINVAL);
  ------------------
  |  |   18|    835|        do {                                                            \
  |  |   19|    835|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|    835|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|    835|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 835, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|    835|        ? (true)                                                        \
  |  |  |  |   15|    835|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 835]
  |  |  ------------------
  |  |   20|    835|                        return (r);                                     \
  |  |   21|    835|        } while (false)
  ------------------
   55|    835|        return -errno;
   56|    835|}

cescape_char:
   13|   119k|int cescape_char(char c, char *buf) {
   14|   119k|        char *buf_old = buf;
   15|       |
   16|       |        /* Needs space for 4 characters in the buffer */
   17|       |
   18|   119k|        switch (c) {
   19|       |
   20|    417|                case '\a':
  ------------------
  |  Branch (20:17): [True: 417, False: 118k]
  ------------------
   21|    417|                        *(buf++) = '\\';
   22|    417|                        *(buf++) = 'a';
   23|    417|                        break;
   24|    451|                case '\b':
  ------------------
  |  Branch (24:17): [True: 451, False: 118k]
  ------------------
   25|    451|                        *(buf++) = '\\';
   26|    451|                        *(buf++) = 'b';
   27|    451|                        break;
   28|    194|                case '\f':
  ------------------
  |  Branch (28:17): [True: 194, False: 118k]
  ------------------
   29|    194|                        *(buf++) = '\\';
   30|    194|                        *(buf++) = 'f';
   31|    194|                        break;
   32|      0|                case '\n':
  ------------------
  |  Branch (32:17): [True: 0, False: 119k]
  ------------------
   33|      0|                        *(buf++) = '\\';
   34|      0|                        *(buf++) = 'n';
   35|      0|                        break;
   36|      0|                case '\r':
  ------------------
  |  Branch (36:17): [True: 0, False: 119k]
  ------------------
   37|      0|                        *(buf++) = '\\';
   38|      0|                        *(buf++) = 'r';
   39|      0|                        break;
   40|    196|                case '\t':
  ------------------
  |  Branch (40:17): [True: 196, False: 118k]
  ------------------
   41|    196|                        *(buf++) = '\\';
   42|    196|                        *(buf++) = 't';
   43|    196|                        break;
   44|    205|                case '\v':
  ------------------
  |  Branch (44:17): [True: 205, False: 118k]
  ------------------
   45|    205|                        *(buf++) = '\\';
   46|    205|                        *(buf++) = 'v';
   47|    205|                        break;
   48|    196|                case '\\':
  ------------------
  |  Branch (48:17): [True: 196, False: 118k]
  ------------------
   49|    196|                        *(buf++) = '\\';
   50|    196|                        *(buf++) = '\\';
   51|    196|                        break;
   52|    269|                case '"':
  ------------------
  |  Branch (52:17): [True: 269, False: 118k]
  ------------------
   53|    269|                        *(buf++) = '\\';
   54|    269|                        *(buf++) = '"';
   55|    269|                        break;
   56|    476|                case '\'':
  ------------------
  |  Branch (56:17): [True: 476, False: 118k]
  ------------------
   57|    476|                        *(buf++) = '\\';
   58|    476|                        *(buf++) = '\'';
   59|    476|                        break;
   60|       |
   61|   116k|                default:
  ------------------
  |  Branch (61:17): [True: 116k, False: 2.40k]
  ------------------
   62|       |                        /* For special chars we prefer octal over
   63|       |                         * hexadecimal encoding, simply because glib's
   64|       |                         * g_strescape() does the same */
   65|   116k|                        if ((c < ' ') || (c >= 127)) {
  ------------------
  |  Branch (65:29): [True: 1.22k, False: 115k]
  |  Branch (65:42): [True: 516, False: 114k]
  ------------------
   66|  1.74k|                                *(buf++) = '\\';
   67|  1.74k|                                *(buf++) = octchar((unsigned char) c >> 6);
   68|  1.74k|                                *(buf++) = octchar((unsigned char) c >> 3);
   69|  1.74k|                                *(buf++) = octchar((unsigned char) c);
   70|  1.74k|                        } else
   71|   114k|                                *(buf++) = c;
   72|   116k|                        break;
   73|   119k|        }
   74|       |
   75|   119k|        return buf - buf_old;
   76|   119k|}
cescape_length:
   78|    533|char* cescape_length(const char *s, size_t n) {
   79|    533|        const char *f;
   80|    533|        char *r, *t;
   81|       |
   82|       |        /* Does C style string escaping. May be reversed with cunescape(). */
   83|       |
   84|    533|        assert(s || n == 0);
  ------------------
  |  |   72|    533|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    533|        do {                                                            \
  |  |  |  |   59|    533|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    533|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 533]
  |  |  |  |  |  |  |  Branch (95:44): [True: 533, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    533|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    533|        } while (false)
  |  |  ------------------
  ------------------
   85|       |
   86|    533|        if (n == SIZE_MAX)
  ------------------
  |  Branch (86:13): [True: 533, False: 0]
  ------------------
   87|    533|                n = strlen(s);
   88|       |
   89|    533|        if (n > (SIZE_MAX - 1) / 4)
  ------------------
  |  Branch (89:13): [True: 0, False: 533]
  ------------------
   90|      0|                return NULL;
   91|       |
   92|    533|        r = new(char, n*4 + 1);
  ------------------
  |  |   17|    533|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
   93|    533|        if (!r)
  ------------------
  |  Branch (93:13): [True: 0, False: 533]
  ------------------
   94|      0|                return NULL;
   95|       |
   96|   119k|        for (f = s, t = r; f < s + n; f++)
  ------------------
  |  Branch (96:28): [True: 119k, False: 533]
  ------------------
   97|   119k|                t += cescape_char(*f, t);
   98|       |
   99|    533|        *t = 0;
  100|       |
  101|    533|        return r;
  102|    533|}
cunescape_one:
  104|  10.9k|int cunescape_one(const char *p, size_t length, char32_t *ret, bool *eight_bit, bool accept_nul) {
  105|  10.9k|        int r = 1;
  106|       |
  107|  10.9k|        assert(p);
  ------------------
  |  |   72|  10.9k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  10.9k|        do {                                                            \
  |  |  |  |   59|  10.9k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  10.9k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 10.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  10.9k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  10.9k|        } while (false)
  |  |  ------------------
  ------------------
  108|  10.9k|        assert(ret);
  ------------------
  |  |   72|  10.9k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  10.9k|        do {                                                            \
  |  |  |  |   59|  10.9k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  10.9k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 10.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  10.9k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  10.9k|        } while (false)
  |  |  ------------------
  ------------------
  109|       |
  110|       |        /* Unescapes C style. Returns the unescaped character in ret.
  111|       |         * Sets *eight_bit to true if the escaped sequence either fits in
  112|       |         * one byte in UTF-8 or is a non-unicode literal byte and should
  113|       |         * instead be copied directly.
  114|       |         */
  115|       |
  116|  10.9k|        if (length != SIZE_MAX && length < 1)
  ------------------
  |  Branch (116:13): [True: 0, False: 10.9k]
  |  Branch (116:35): [True: 0, False: 0]
  ------------------
  117|      0|                return -EINVAL;
  118|       |
  119|  10.9k|        switch (p[0]) {
  120|       |
  121|    201|        case 'a':
  ------------------
  |  Branch (121:9): [True: 201, False: 10.7k]
  ------------------
  122|    201|                *ret = '\a';
  123|    201|                break;
  124|    194|        case 'b':
  ------------------
  |  Branch (124:9): [True: 194, False: 10.7k]
  ------------------
  125|    194|                *ret = '\b';
  126|    194|                break;
  127|    201|        case 'f':
  ------------------
  |  Branch (127:9): [True: 201, False: 10.7k]
  ------------------
  128|    201|                *ret = '\f';
  129|    201|                break;
  130|    200|        case 'n':
  ------------------
  |  Branch (130:9): [True: 200, False: 10.7k]
  ------------------
  131|    200|                *ret = '\n';
  132|    200|                break;
  133|    199|        case 'r':
  ------------------
  |  Branch (133:9): [True: 199, False: 10.7k]
  ------------------
  134|    199|                *ret = '\r';
  135|    199|                break;
  136|    202|        case 't':
  ------------------
  |  Branch (136:9): [True: 202, False: 10.7k]
  ------------------
  137|    202|                *ret = '\t';
  138|    202|                break;
  139|    194|        case 'v':
  ------------------
  |  Branch (139:9): [True: 194, False: 10.7k]
  ------------------
  140|    194|                *ret = '\v';
  141|    194|                break;
  142|    642|        case '\\':
  ------------------
  |  Branch (142:9): [True: 642, False: 10.2k]
  ------------------
  143|    642|                *ret = '\\';
  144|    642|                break;
  145|    360|        case '"':
  ------------------
  |  Branch (145:9): [True: 360, False: 10.5k]
  ------------------
  146|    360|                *ret = '"';
  147|    360|                break;
  148|    207|        case '\'':
  ------------------
  |  Branch (148:9): [True: 207, False: 10.7k]
  ------------------
  149|    207|                *ret = '\'';
  150|    207|                break;
  151|       |
  152|    231|        case 's':
  ------------------
  |  Branch (152:9): [True: 231, False: 10.6k]
  ------------------
  153|       |                /* This is an extension of the XDG syntax files */
  154|    231|                *ret = ' ';
  155|    231|                break;
  156|       |
  157|  1.16k|        case 'x': {
  ------------------
  |  Branch (157:9): [True: 1.16k, False: 9.75k]
  ------------------
  158|       |                /* hexadecimal encoding */
  159|  1.16k|                int a, b;
  160|       |
  161|  1.16k|                if (length != SIZE_MAX && length < 3)
  ------------------
  |  Branch (161:21): [True: 0, False: 1.16k]
  |  Branch (161:43): [True: 0, False: 0]
  ------------------
  162|      0|                        return -EINVAL;
  163|       |
  164|  1.16k|                a = unhexchar(p[1]);
  165|  1.16k|                if (a < 0)
  ------------------
  |  Branch (165:21): [True: 242, False: 919]
  ------------------
  166|    242|                        return -EINVAL;
  167|       |
  168|    919|                b = unhexchar(p[2]);
  169|    919|                if (b < 0)
  ------------------
  |  Branch (169:21): [True: 198, False: 721]
  ------------------
  170|    198|                        return -EINVAL;
  171|       |
  172|       |                /* Don't allow NUL bytes */
  173|    721|                if (a == 0 && b == 0 && !accept_nul)
  ------------------
  |  Branch (173:21): [True: 518, False: 203]
  |  Branch (173:31): [True: 194, False: 324]
  |  Branch (173:41): [True: 194, False: 0]
  ------------------
  174|    194|                        return -EINVAL;
  175|       |
  176|    527|                *ret = (a << 4U) | b;
  177|    527|                *eight_bit = true;
  178|    527|                r = 3;
  179|    527|                break;
  180|    721|        }
  181|       |
  182|  1.04k|        case 'u': {
  ------------------
  |  Branch (182:9): [True: 1.04k, False: 9.86k]
  ------------------
  183|       |                /* C++11 style 16-bit unicode */
  184|       |
  185|  1.04k|                int a[4];
  186|  1.04k|                size_t i;
  187|  1.04k|                uint32_t c;
  188|       |
  189|  1.04k|                if (length != SIZE_MAX && length < 5)
  ------------------
  |  Branch (189:21): [True: 0, False: 1.04k]
  |  Branch (189:43): [True: 0, False: 0]
  ------------------
  190|      0|                        return -EINVAL;
  191|       |
  192|  4.33k|                for (i = 0; i < 4; i++) {
  ------------------
  |  Branch (192:29): [True: 3.53k, False: 809]
  ------------------
  193|  3.53k|                        a[i] = unhexchar(p[1 + i]);
  194|  3.53k|                        if (a[i] < 0)
  ------------------
  |  Branch (194:29): [True: 238, False: 3.29k]
  ------------------
  195|    238|                                return a[i];
  196|  3.53k|                }
  197|       |
  198|    809|                c = ((uint32_t) a[0] << 12U) | ((uint32_t) a[1] << 8U) | ((uint32_t) a[2] << 4U) | (uint32_t) a[3];
  199|       |
  200|       |                /* Don't allow 0 chars */
  201|    809|                if (c == 0 && !accept_nul)
  ------------------
  |  Branch (201:21): [True: 195, False: 614]
  |  Branch (201:31): [True: 195, False: 0]
  ------------------
  202|    195|                        return -EINVAL;
  203|       |
  204|    614|                *ret = c;
  205|    614|                r = 5;
  206|    614|                break;
  207|    809|        }
  208|       |
  209|  1.93k|        case 'U': {
  ------------------
  |  Branch (209:9): [True: 1.93k, False: 8.98k]
  ------------------
  210|       |                /* C++11 style 32-bit unicode */
  211|       |
  212|  1.93k|                int a[8];
  213|  1.93k|                size_t i;
  214|  1.93k|                char32_t c;
  215|       |
  216|  1.93k|                if (length != SIZE_MAX && length < 9)
  ------------------
  |  Branch (216:21): [True: 0, False: 1.93k]
  |  Branch (216:43): [True: 0, False: 0]
  ------------------
  217|      0|                        return -EINVAL;
  218|       |
  219|  15.5k|                for (i = 0; i < 8; i++) {
  ------------------
  |  Branch (219:29): [True: 13.8k, False: 1.69k]
  ------------------
  220|  13.8k|                        a[i] = unhexchar(p[1 + i]);
  221|  13.8k|                        if (a[i] < 0)
  ------------------
  |  Branch (221:29): [True: 245, False: 13.6k]
  ------------------
  222|    245|                                return a[i];
  223|  13.8k|                }
  224|       |
  225|  1.69k|                c = ((uint32_t) a[0] << 28U) | ((uint32_t) a[1] << 24U) | ((uint32_t) a[2] << 20U) | ((uint32_t) a[3] << 16U) |
  226|  1.69k|                    ((uint32_t) a[4] << 12U) | ((uint32_t) a[5] <<  8U) | ((uint32_t) a[6] <<  4U) |  (uint32_t) a[7];
  227|       |
  228|       |                /* Don't allow 0 chars */
  229|  1.69k|                if (c == 0 && !accept_nul)
  ------------------
  |  Branch (229:21): [True: 194, False: 1.49k]
  |  Branch (229:31): [True: 194, False: 0]
  ------------------
  230|    194|                        return -EINVAL;
  231|       |
  232|       |                /* Don't allow invalid code points */
  233|  1.49k|                if (!unichar_is_valid(c))
  ------------------
  |  Branch (233:21): [True: 898, False: 598]
  ------------------
  234|    898|                        return -EINVAL;
  235|       |
  236|    598|                *ret = c;
  237|    598|                r = 9;
  238|    598|                break;
  239|  1.49k|        }
  240|       |
  241|    794|        case '0':
  ------------------
  |  Branch (241:9): [True: 794, False: 10.1k]
  ------------------
  242|  1.14k|        case '1':
  ------------------
  |  Branch (242:9): [True: 346, False: 10.5k]
  ------------------
  243|  1.38k|        case '2':
  ------------------
  |  Branch (243:9): [True: 240, False: 10.6k]
  ------------------
  244|  2.33k|        case '3':
  ------------------
  |  Branch (244:9): [True: 958, False: 9.95k]
  ------------------
  245|  2.84k|        case '4':
  ------------------
  |  Branch (245:9): [True: 505, False: 10.4k]
  ------------------
  246|  3.16k|        case '5':
  ------------------
  |  Branch (246:9): [True: 322, False: 10.5k]
  ------------------
  247|  3.52k|        case '6':
  ------------------
  |  Branch (247:9): [True: 364, False: 10.5k]
  ------------------
  248|  3.73k|        case '7': {
  ------------------
  |  Branch (248:9): [True: 202, False: 10.7k]
  ------------------
  249|       |                /* octal encoding */
  250|  3.73k|                int a, b, c;
  251|  3.73k|                char32_t m;
  252|       |
  253|  3.73k|                if (length != SIZE_MAX && length < 3)
  ------------------
  |  Branch (253:21): [True: 0, False: 3.73k]
  |  Branch (253:43): [True: 0, False: 0]
  ------------------
  254|      0|                        return -EINVAL;
  255|       |
  256|  3.73k|                a = unoctchar(p[0]);
  257|  3.73k|                if (a < 0)
  ------------------
  |  Branch (257:21): [True: 0, False: 3.73k]
  ------------------
  258|      0|                        return -EINVAL;
  259|       |
  260|  3.73k|                b = unoctchar(p[1]);
  261|  3.73k|                if (b < 0)
  ------------------
  |  Branch (261:21): [True: 876, False: 2.85k]
  ------------------
  262|    876|                        return -EINVAL;
  263|       |
  264|  2.85k|                c = unoctchar(p[2]);
  265|  2.85k|                if (c < 0)
  ------------------
  |  Branch (265:21): [True: 373, False: 2.48k]
  ------------------
  266|    373|                        return -EINVAL;
  267|       |
  268|       |                /* don't allow NUL bytes */
  269|  2.48k|                if (a == 0 && b == 0 && c == 0 && !accept_nul)
  ------------------
  |  Branch (269:21): [True: 747, False: 1.73k]
  |  Branch (269:31): [True: 408, False: 339]
  |  Branch (269:41): [True: 196, False: 212]
  |  Branch (269:51): [True: 196, False: 0]
  ------------------
  270|    196|                        return -EINVAL;
  271|       |
  272|       |                /* Don't allow bytes above 255 */
  273|  2.28k|                m = ((uint32_t) a << 6U) | ((uint32_t) b << 3U) | (uint32_t) c;
  274|  2.28k|                if (m > 255)
  ------------------
  |  Branch (274:21): [True: 337, False: 1.94k]
  ------------------
  275|    337|                        return -EINVAL;
  276|       |
  277|  1.94k|                *ret = m;
  278|  1.94k|                *eight_bit = true;
  279|  1.94k|                r = 3;
  280|  1.94k|                break;
  281|  2.28k|        }
  282|       |
  283|    211|        default:
  ------------------
  |  Branch (283:9): [True: 211, False: 10.7k]
  ------------------
  284|    211|                return -EINVAL;
  285|  10.9k|        }
  286|       |
  287|  6.51k|        return r;
  288|  10.9k|}

conf-parser.c:cescape:
   39|    533|static inline char* cescape(const char *s) {
   40|    533|        return cescape_length(s, SIZE_MAX);
   41|    533|}

ether_addr_compare:
   93|  4.85k|int ether_addr_compare(const struct ether_addr *a, const struct ether_addr *b) {
   94|  4.85k|        return memcmp(a, b, ETH_ALEN);
   95|  4.85k|}
parse_hw_addr_full:
  167|  7.08k|int parse_hw_addr_full(const char *s, size_t expected_len, struct hw_addr_data *ret) {
  168|  7.08k|        size_t field_size, max_len, len = 0;
  169|  7.08k|        uint8_t bytes[HW_ADDR_MAX_SIZE];
  170|  7.08k|        char sep;
  171|  7.08k|        int r;
  172|       |
  173|  7.08k|        assert(s);
  ------------------
  |  |   72|  7.08k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  7.08k|        do {                                                            \
  |  |  |  |   59|  7.08k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  7.08k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 7.08k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  7.08k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  7.08k|        } while (false)
  |  |  ------------------
  ------------------
  174|  7.08k|        assert(expected_len <= HW_ADDR_MAX_SIZE || expected_len == SIZE_MAX);
  ------------------
  |  |   72|  7.08k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  7.08k|        do {                                                            \
  |  |  |  |   59|  7.08k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  7.08k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 7.08k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 7.08k, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  7.08k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  7.08k|        } while (false)
  |  |  ------------------
  ------------------
  175|  7.08k|        assert(ret);
  ------------------
  |  |   72|  7.08k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  7.08k|        do {                                                            \
  |  |  |  |   59|  7.08k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  7.08k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 7.08k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  7.08k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  7.08k|        } while (false)
  |  |  ------------------
  ------------------
  176|       |
  177|       |        /* This accepts the following formats:
  178|       |         *
  179|       |         * Dot separated 2 bytes format: xxyy.zzaa.bbcc
  180|       |         * Colon separated 1 bytes format: xx:yy:zz:aa:bb:cc
  181|       |         * Hyphen separated 1 bytes format: xx-yy-zz-aa-bb-cc
  182|       |         *
  183|       |         * Moreover, if expected_len == 0, 4, or 16, this also accepts:
  184|       |         *
  185|       |         * IPv4 format: used by IPv4 tunnel, e.g. ipgre
  186|       |         * IPv6 format: used by IPv6 tunnel, e.g. ip6gre
  187|       |         *
  188|       |         * The expected_len argument controls the length of acceptable addresses:
  189|       |         *
  190|       |         * 0: accepts 4 (AF_INET), 16 (AF_INET6), 6 (ETH_ALEN), or 20 (INFINIBAND_ALEN).
  191|       |         * SIZE_MAX: accepts arbitrary length, but at least one separator must be included.
  192|       |         * Otherwise: accepts addresses with matching length.
  193|       |         */
  194|       |
  195|  7.08k|        if (IN_SET(expected_len, 0, sizeof(struct in_addr), sizeof(struct in6_addr))) {
  ------------------
  |  |  361|  7.08k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 0, False: 7.08k]
  |  |  ------------------
  |  |  362|  7.08k|                bool _found = false;                                    \
  |  |  363|  7.08k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  7.08k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  7.08k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  7.08k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  7.08k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  7.08k|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 7.08k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 7.08k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 7.08k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|  7.08k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 7.08k, False: 0]
  |  |  ------------------
  |  |  372|  7.08k|                        ;                                               \
  |  |  373|  7.08k|                }                                                       \
  |  |  374|  7.08k|                _found;                                                 \
  |  |  375|  7.08k|        })
  ------------------
  196|      0|                union in_addr_union a;
  197|      0|                int family;
  198|       |
  199|      0|                if (expected_len == 0)
  ------------------
  |  Branch (199:21): [True: 0, False: 0]
  ------------------
  200|      0|                        r = in_addr_from_string_auto(s, &family, &a);
  201|      0|                else {
  202|      0|                        family = expected_len == sizeof(struct in_addr) ? AF_INET : AF_INET6;
  ------------------
  |  Branch (202:34): [True: 0, False: 0]
  ------------------
  203|      0|                        r = in_addr_from_string(family, s, &a);
  204|      0|                }
  205|      0|                if (r >= 0) {
  ------------------
  |  Branch (205:21): [True: 0, False: 0]
  ------------------
  206|      0|                        ret->length = FAMILY_ADDRESS_SIZE(family);
  207|      0|                        memcpy(ret->bytes, a.bytes, ret->length);
  208|      0|                        return 0;
  209|      0|                }
  210|      0|        }
  211|       |
  212|  7.08k|        max_len =
  213|  7.08k|                expected_len == 0 ? INFINIBAND_ALEN :
  ------------------
  |  Branch (213:17): [True: 0, False: 7.08k]
  ------------------
  214|  7.08k|                expected_len == SIZE_MAX ? HW_ADDR_MAX_SIZE : expected_len;
  ------------------
  |  |   12|      0|#define HW_ADDR_MAX_SIZE 32
  ------------------
  |  Branch (214:17): [True: 0, False: 7.08k]
  ------------------
  215|  7.08k|        sep = s[strspn(s, HEXDIGITS)];
  ------------------
  |  |   25|  7.08k|#define HEXDIGITS           DIGITS "abcdefABCDEF"
  |  |  ------------------
  |  |  |  |   20|  7.08k|#define DIGITS              "0123456789"
  |  |  ------------------
  ------------------
  216|       |
  217|  7.08k|        if (sep == '.')
  ------------------
  |  Branch (217:13): [True: 4.40k, False: 2.67k]
  ------------------
  218|  4.40k|                field_size = 2;
  219|  2.67k|        else if (IN_SET(sep, ':', '-'))
  ------------------
  |  |  361|  2.67k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 1.44k, False: 1.23k]
  |  |  ------------------
  |  |  362|  2.67k|                bool _found = false;                                    \
  |  |  363|  2.67k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  2.67k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  2.67k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  2.67k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  2.67k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  2.67k|                switch (x) {                                            \
  |  |  368|  1.44k|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|    795|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|    795|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|    795|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|  1.44k|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|  1.44k|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 650, False: 2.02k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 795, False: 1.88k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|  1.44k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|  1.44k|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|  1.44k|                        _found = true;                                  \
  |  |  370|  1.44k|                        break;                                          \
  |  |  371|  1.23k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 1.23k, False: 1.44k]
  |  |  ------------------
  |  |  372|  1.23k|                        ;                                               \
  |  |  373|  2.67k|                }                                                       \
  |  |  374|  2.67k|                _found;                                                 \
  |  |  375|  2.67k|        })
  ------------------
  220|  1.44k|                field_size = 1;
  221|  1.23k|        else
  222|  1.23k|                return -EINVAL;
  223|       |
  224|  5.85k|        if (max_len % field_size != 0)
  ------------------
  |  Branch (224:13): [True: 0, False: 5.85k]
  ------------------
  225|      0|                return -EINVAL;
  226|       |
  227|  16.7k|        for (size_t i = 0; i < max_len / field_size; i++) {
  ------------------
  |  Branch (227:28): [True: 16.5k, False: 209]
  ------------------
  228|  16.5k|                r = parse_hw_addr_one_field(&s, sep, field_size, bytes + i * field_size);
  229|  16.5k|                if (r < 0)
  ------------------
  |  Branch (229:21): [True: 1.26k, False: 15.2k]
  ------------------
  230|  1.26k|                        return r;
  231|  15.2k|                if (r == 0) {
  ------------------
  |  Branch (231:21): [True: 4.37k, False: 10.8k]
  ------------------
  232|  4.37k|                        len = (i + 1) * field_size;
  233|  4.37k|                        break;
  234|  4.37k|                }
  235|  15.2k|        }
  236|       |
  237|  4.58k|        if (len == 0)
  ------------------
  |  Branch (237:13): [True: 209, False: 4.37k]
  ------------------
  238|    209|                return -EINVAL;
  239|       |
  240|  4.37k|        if (expected_len == 0) {
  ------------------
  |  Branch (240:13): [True: 0, False: 4.37k]
  ------------------
  241|      0|                if (!IN_SET(len, 4, 16, ETH_ALEN, INFINIBAND_ALEN))
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  336|      0|#define  CASE_F_4(X, ...) case X:  CASE_F_3( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (336:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (241:21): [True: 0, False: 0]
  ------------------
  242|      0|                        return -EINVAL;
  243|  4.37k|        } else if (expected_len != SIZE_MAX) {
  ------------------
  |  Branch (243:20): [True: 4.37k, False: 0]
  ------------------
  244|  4.37k|                if (len != expected_len)
  ------------------
  |  Branch (244:21): [True: 479, False: 3.89k]
  ------------------
  245|    479|                        return -EINVAL;
  246|  4.37k|        }
  247|       |
  248|  3.89k|        ret->length = len;
  249|  3.89k|        memcpy(ret->bytes, bytes, ret->length);
  250|  3.89k|        return 0;
  251|  4.37k|}
parse_ether_addr:
  253|  5.85k|int parse_ether_addr(const char *s, struct ether_addr *ret) {
  254|  5.85k|        struct hw_addr_data a;
  255|  5.85k|        int r;
  256|       |
  257|  5.85k|        assert(s);
  ------------------
  |  |   72|  5.85k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.85k|        do {                                                            \
  |  |  |  |   59|  5.85k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.85k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.85k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.85k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.85k|        } while (false)
  |  |  ------------------
  ------------------
  258|  5.85k|        assert(ret);
  ------------------
  |  |   72|  5.85k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.85k|        do {                                                            \
  |  |  |  |   59|  5.85k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.85k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.85k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.85k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.85k|        } while (false)
  |  |  ------------------
  ------------------
  259|       |
  260|  5.85k|        r = parse_hw_addr_full(s, ETH_ALEN, &a);
  261|  5.85k|        if (r < 0)
  ------------------
  |  Branch (261:13): [True: 2.21k, False: 3.63k]
  ------------------
  262|  2.21k|                return r;
  263|       |
  264|  3.63k|        *ret = a.ether;
  265|  3.63k|        return 0;
  266|  5.85k|}
ether-addr-util.c:ether_addr_hash_func:
   97|    533|static void ether_addr_hash_func(const struct ether_addr *p, struct siphash *state) {
   98|    533|        siphash24_compress_typesafe(*p, state);
  ------------------
  |  |   20|    533|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
   99|    533|}
ether-addr-util.c:parse_hw_addr_one_field:
  109|  16.5k|static int parse_hw_addr_one_field(const char **s, char sep, size_t len, uint8_t *buf) {
  110|  16.5k|        const char *hex = HEXDIGITS, *p;
  ------------------
  |  |   25|  16.5k|#define HEXDIGITS           DIGITS "abcdefABCDEF"
  |  |  ------------------
  |  |  |  |   20|  16.5k|#define DIGITS              "0123456789"
  |  |  ------------------
  ------------------
  111|  16.5k|        uint16_t data = 0;
  112|  16.5k|        bool cont;
  113|       |
  114|  16.5k|        assert(s);
  ------------------
  |  |   72|  16.5k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  16.5k|        do {                                                            \
  |  |  |  |   59|  16.5k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  16.5k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 16.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  16.5k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  16.5k|        } while (false)
  |  |  ------------------
  ------------------
  115|  16.5k|        assert(*s);
  ------------------
  |  |   72|  16.5k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  16.5k|        do {                                                            \
  |  |  |  |   59|  16.5k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  16.5k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 16.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  16.5k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  16.5k|        } while (false)
  |  |  ------------------
  ------------------
  116|  16.5k|        assert(IN_SET(len, 1, 2));
  ------------------
  |  |   72|  16.5k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  16.5k|        do {                                                            \
  |  |  |  |   59|  16.5k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  16.5k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 16.5k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 16.5k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 12.3k, False: 4.12k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 4.12k, False: 12.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  16.5k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  16.5k|        } while (false)
  |  |  ------------------
  ------------------
  117|  16.5k|        assert(buf);
  ------------------
  |  |   72|  16.5k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  16.5k|        do {                                                            \
  |  |  |  |   59|  16.5k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  16.5k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 16.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  16.5k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  16.5k|        } while (false)
  |  |  ------------------
  ------------------
  118|       |
  119|  16.5k|        p = *s;
  120|       |
  121|  34.9k|        for (size_t i = 0; i < len * 2; i++) {
  ------------------
  |  Branch (121:28): [True: 33.0k, False: 1.94k]
  ------------------
  122|  33.0k|                const char *hexoff;
  123|  33.0k|                size_t x;
  124|       |
  125|  33.0k|                if (*p == '\0' || *p == sep) {
  ------------------
  |  Branch (125:21): [True: 4.27k, False: 28.7k]
  |  Branch (125:35): [True: 10.0k, False: 18.7k]
  ------------------
  126|  14.3k|                        if (i == 0)
  ------------------
  |  Branch (126:29): [True: 709, False: 13.5k]
  ------------------
  127|    709|                                return -EINVAL;
  128|  13.5k|                        break;
  129|  14.3k|                }
  130|       |
  131|  18.7k|                hexoff = strchr(hex, *p);
  132|  18.7k|                if (!hexoff)
  ------------------
  |  Branch (132:21): [True: 273, False: 18.4k]
  ------------------
  133|    273|                        return -EINVAL;
  134|       |
  135|  18.4k|                assert(hexoff >= hex);
  ------------------
  |  |   72|  18.4k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  18.4k|        do {                                                            \
  |  |  |  |   59|  18.4k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  18.4k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 18.4k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  18.4k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  18.4k|        } while (false)
  |  |  ------------------
  ------------------
  136|  18.4k|                x = hexoff - hex;
  137|  18.4k|                if (x >= 16)
  ------------------
  |  Branch (137:21): [True: 1.88k, False: 16.5k]
  ------------------
  138|  1.88k|                        x -= 6; /* A-F */
  139|       |
  140|  18.4k|                assert(x < 16);
  ------------------
  |  |   72|  18.4k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  18.4k|        do {                                                            \
  |  |  |  |   59|  18.4k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  18.4k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 18.4k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  18.4k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  18.4k|        } while (false)
  |  |  ------------------
  ------------------
  141|  18.4k|                data <<= 4;
  142|  18.4k|                data += x;
  143|       |
  144|  18.4k|                p++;
  145|  18.4k|        }
  146|       |
  147|  15.5k|        if (*p != '\0' && *p != sep)
  ------------------
  |  Branch (147:13): [True: 11.1k, False: 4.37k]
  |  Branch (147:27): [True: 287, False: 10.8k]
  ------------------
  148|    287|                return -EINVAL;
  149|       |
  150|  15.2k|        switch (len) {
  151|  3.39k|        case 1:
  ------------------
  |  Branch (151:9): [True: 3.39k, False: 11.8k]
  ------------------
  152|  3.39k|                buf[0] = data;
  153|  3.39k|                break;
  154|  11.8k|        case 2:
  ------------------
  |  Branch (154:9): [True: 11.8k, False: 3.39k]
  ------------------
  155|  11.8k|                buf[0] = (data & 0xff00) >> 8;
  156|  11.8k|                buf[1] = data & 0xff;
  157|  11.8k|                break;
  158|      0|        default:
  ------------------
  |  Branch (158:9): [True: 0, False: 15.2k]
  ------------------
  159|      0|                assert_not_reached();
  ------------------
  |  |   76|      0|        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  160|  15.2k|        }
  161|       |
  162|  15.2k|        cont = *p == sep;
  163|  15.2k|        *s = p + cont;
  164|  15.2k|        return cont;
  165|  15.2k|}

bond.c:ether_addr_is_null:
   79|    602|static inline bool ether_addr_is_null(const struct ether_addr *addr) {
   80|    602|        return ether_addr_equal(addr, &ETHER_ADDR_NULL);
  ------------------
  |  |   77|    602|#define ETHER_ADDR_NULL ((const struct ether_addr){})
  ------------------
   81|    602|}
bond.c:ether_addr_equal:
   73|    602|static inline bool ether_addr_equal(const struct ether_addr *a, const struct ether_addr *b) {
   74|    602|        return ether_addr_compare(a, b) == 0;
   75|    602|}
macsec.c:ether_addr_is_null:
   79|  3.92k|static inline bool ether_addr_is_null(const struct ether_addr *addr) {
   80|  3.92k|        return ether_addr_equal(addr, &ETHER_ADDR_NULL);
  ------------------
  |  |   77|  3.92k|#define ETHER_ADDR_NULL ((const struct ether_addr){})
  ------------------
   81|  3.92k|}
macsec.c:ether_addr_equal:
   73|  3.92k|static inline bool ether_addr_equal(const struct ether_addr *a, const struct ether_addr *b) {
   74|  3.92k|        return ether_addr_compare(a, b) == 0;
   75|  3.92k|}

extract_first_word:
   10|   127k|int extract_first_word(const char **p, char **ret, const char *separators, ExtractFlags flags) {
   11|   127k|        _cleanup_free_ char *s = NULL;
  ------------------
  |  |   82|   127k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|   127k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
   12|   127k|        size_t sz = 0;
   13|   127k|        char quote = 0;                 /* 0 or ' or " */
   14|   127k|        bool backslash = false;         /* whether we've just seen a backslash */
   15|   127k|        char c;
   16|   127k|        int r;
   17|       |
   18|   127k|        assert(p);
  ------------------
  |  |   72|   127k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   127k|        do {                                                            \
  |  |  |  |   59|   127k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   127k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 127k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   127k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   127k|        } while (false)
  |  |  ------------------
  ------------------
   19|   127k|        assert(ret);
  ------------------
  |  |   72|   127k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   127k|        do {                                                            \
  |  |  |  |   59|   127k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   127k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 127k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   127k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   127k|        } while (false)
  |  |  ------------------
  ------------------
   20|   127k|        assert(!FLAGS_SET(flags, EXTRACT_KEEP_QUOTE | EXTRACT_UNQUOTE));
  ------------------
  |  |   72|   127k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   127k|        do {                                                            \
  |  |  |  |   59|   127k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   127k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 127k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   127k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   127k|        } while (false)
  |  |  ------------------
  ------------------
   21|       |
   22|       |        /* Bail early if called after last value or with no input */
   23|   127k|        if (!*p)
  ------------------
  |  Branch (23:13): [True: 10.6k, False: 116k]
  ------------------
   24|  10.6k|                goto finish;
   25|   116k|        c = **p;
   26|       |
   27|   116k|        if (!separators)
  ------------------
  |  Branch (27:13): [True: 42.4k, False: 74.2k]
  ------------------
   28|  42.4k|                separators = WHITESPACE;
  ------------------
  |  |   15|  42.4k|#define WHITESPACE          " \t\n\r"
  ------------------
   29|       |
   30|       |        /* Parses the first word of a string, and returns it in
   31|       |         * *ret. Removes all quotes in the process. When parsing fails
   32|       |         * (because of an uneven number of quotes or similar), leaves
   33|       |         * the pointer *p at the first invalid character. */
   34|       |
   35|   116k|        if (flags & EXTRACT_DONT_COALESCE_SEPARATORS)
  ------------------
  |  Branch (35:13): [True: 29.6k, False: 87.0k]
  ------------------
   36|  29.6k|                if (!GREEDY_REALLOC(s, sz+1))
  ------------------
  |  |  139|  29.6k|        greedy_realloc((void**) &(array), (need), sizeof((array)[0]))
  ------------------
  |  Branch (36:21): [True: 0, False: 29.6k]
  ------------------
   37|      0|                        return -ENOMEM;
   38|       |
   39|   117k|        for (;; (*p)++, c = **p) {
   40|   117k|                if (c == 0)
  ------------------
  |  Branch (40:21): [True: 409, False: 116k]
  ------------------
   41|    409|                        goto finish_force_terminate;
   42|   116k|                else if (strchr(separators, c)) {
  ------------------
  |  Branch (42:26): [True: 1.33k, False: 115k]
  ------------------
   43|  1.33k|                        if (flags & EXTRACT_DONT_COALESCE_SEPARATORS) {
  ------------------
  |  Branch (43:29): [True: 830, False: 504]
  ------------------
   44|    830|                                if (!(flags & EXTRACT_RETAIN_SEPARATORS))
  ------------------
  |  Branch (44:37): [True: 481, False: 349]
  ------------------
   45|    481|                                        (*p)++;
   46|    830|                                goto finish_force_next;
   47|    830|                        }
   48|   115k|                } else {
   49|       |                        /* We found a non-blank character, so we will always
   50|       |                         * want to return a string (even if it is empty),
   51|       |                         * allocate it here. */
   52|   115k|                        if (!GREEDY_REALLOC(s, sz+1))
  ------------------
  |  |  139|   115k|        greedy_realloc((void**) &(array), (need), sizeof((array)[0]))
  ------------------
  |  Branch (52:29): [True: 0, False: 115k]
  ------------------
   53|      0|                                return -ENOMEM;
   54|   115k|                        break;
   55|   115k|                }
   56|   117k|        }
   57|       |
   58|   137k|        for (;; (*p)++, c = **p) {
   59|   137k|                if (backslash) {
  ------------------
  |  Branch (59:21): [True: 13.2k, False: 124k]
  ------------------
   60|  13.2k|                        if (!GREEDY_REALLOC(s, sz+7))
  ------------------
  |  |  139|  13.2k|        greedy_realloc((void**) &(array), (need), sizeof((array)[0]))
  ------------------
  |  Branch (60:29): [True: 0, False: 13.2k]
  ------------------
   61|      0|                                return -ENOMEM;
   62|       |
   63|  13.2k|                        if (c == 0) {
  ------------------
  |  Branch (63:29): [True: 1.09k, False: 12.1k]
  ------------------
   64|  1.09k|                                if ((flags & EXTRACT_UNESCAPE_RELAX) &&
  ------------------
  |  Branch (64:37): [True: 0, False: 1.09k]
  ------------------
   65|  1.09k|                                    (quote == 0 || flags & EXTRACT_RELAX)) {
  ------------------
  |  Branch (65:38): [True: 0, False: 0]
  |  Branch (65:52): [True: 0, False: 0]
  ------------------
   66|       |                                        /* If we find an unquoted trailing backslash and we're in
   67|       |                                         * EXTRACT_UNESCAPE_RELAX mode, keep it verbatim in the
   68|       |                                         * output.
   69|       |                                         *
   70|       |                                         * Unbalanced quotes will only be allowed in EXTRACT_RELAX
   71|       |                                         * mode, EXTRACT_UNESCAPE_RELAX mode does not allow them.
   72|       |                                         */
   73|      0|                                        s[sz++] = '\\';
   74|      0|                                        goto finish_force_terminate;
   75|      0|                                }
   76|  1.09k|                                if (flags & EXTRACT_RELAX)
  ------------------
  |  Branch (76:37): [True: 0, False: 1.09k]
  ------------------
   77|      0|                                        goto finish_force_terminate;
   78|  1.09k|                                return -EINVAL;
   79|  1.09k|                        }
   80|       |
   81|  12.1k|                        if (flags & (EXTRACT_CUNESCAPE|EXTRACT_UNESCAPE_SEPARATORS)) {
  ------------------
  |  Branch (81:29): [True: 10.9k, False: 1.26k]
  ------------------
   82|  10.9k|                                bool eight_bit = false;
   83|  10.9k|                                char32_t u;
   84|       |
   85|  10.9k|                                if ((flags & EXTRACT_CUNESCAPE) &&
  ------------------
  |  Branch (85:37): [True: 10.9k, False: 0]
  ------------------
   86|  10.9k|                                    (r = cunescape_one(*p, SIZE_MAX, &u, &eight_bit, false)) >= 0) {
  ------------------
  |  Branch (86:37): [True: 6.51k, False: 4.39k]
  ------------------
   87|       |                                        /* A valid escaped sequence */
   88|  6.51k|                                        assert(r >= 1);
  ------------------
  |  |   72|  6.51k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  6.51k|        do {                                                            \
  |  |  |  |   59|  6.51k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  6.51k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 6.51k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  6.51k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  6.51k|        } while (false)
  |  |  ------------------
  ------------------
   89|       |
   90|  6.51k|                                        (*p) += r - 1;
   91|       |
   92|  6.51k|                                        if (eight_bit)
  ------------------
  |  Branch (92:45): [True: 2.47k, False: 4.04k]
  ------------------
   93|  2.47k|                                                s[sz++] = u;
   94|  4.04k|                                        else
   95|  4.04k|                                                sz += utf8_encode_unichar(s + sz, u);
   96|  6.51k|                                } else if ((flags & EXTRACT_UNESCAPE_SEPARATORS) &&
  ------------------
  |  Branch (96:44): [True: 0, False: 4.39k]
  ------------------
   97|  4.39k|                                           (strchr(separators, **p) || **p == '\\'))
  ------------------
  |  Branch (97:45): [True: 0, False: 0]
  |  Branch (97:72): [True: 0, False: 0]
  ------------------
   98|       |                                        /* An escaped separator char or the escape char itself */
   99|      0|                                        s[sz++] = c;
  100|  4.39k|                                else if (flags & EXTRACT_UNESCAPE_RELAX) {
  ------------------
  |  Branch (100:42): [True: 0, False: 4.39k]
  ------------------
  101|      0|                                        s[sz++] = '\\';
  102|      0|                                        s[sz++] = c;
  103|      0|                                } else
  104|  4.39k|                                        return -EINVAL;
  105|  10.9k|                        } else
  106|  1.26k|                                s[sz++] = c;
  107|       |
  108|  7.78k|                        backslash = false;
  109|       |
  110|   124k|                } else if (quote != 0) {     /* inside either single or double quotes */
  ------------------
  |  Branch (110:28): [True: 1.33k, False: 123k]
  ------------------
  111|  2.65k|                        for (;; (*p)++, c = **p) {
  112|  2.65k|                                if (c == 0) {
  ------------------
  |  Branch (112:37): [True: 465, False: 2.18k]
  ------------------
  113|    465|                                        if (flags & EXTRACT_RELAX)
  ------------------
  |  Branch (113:45): [True: 0, False: 465]
  ------------------
  114|      0|                                                goto finish_force_terminate;
  115|    465|                                        return -EINVAL;
  116|  2.18k|                                } else if (c == quote) {        /* found the end quote */
  ------------------
  |  Branch (116:44): [True: 404, False: 1.78k]
  ------------------
  117|    404|                                        quote = 0;
  118|    404|                                        if (flags & EXTRACT_UNQUOTE)
  ------------------
  |  Branch (118:45): [True: 404, False: 0]
  ------------------
  119|    404|                                                break;
  120|  1.78k|                                } else if (c == '\\' && !(flags & EXTRACT_RETAIN_ESCAPE)) {
  ------------------
  |  Branch (120:44): [True: 468, False: 1.31k]
  |  Branch (120:57): [True: 468, False: 0]
  ------------------
  121|    468|                                        backslash = true;
  122|    468|                                        break;
  123|    468|                                }
  124|       |
  125|  1.31k|                                if (!GREEDY_REALLOC(s, sz+2))
  ------------------
  |  |  139|  1.31k|        greedy_realloc((void**) &(array), (need), sizeof((array)[0]))
  ------------------
  |  Branch (125:37): [True: 0, False: 1.31k]
  ------------------
  126|      0|                                        return -ENOMEM;
  127|       |
  128|  1.31k|                                s[sz++] = c;
  129|       |
  130|  1.31k|                                if (quote == 0)
  ------------------
  |  Branch (130:37): [True: 0, False: 1.31k]
  ------------------
  131|      0|                                        break;
  132|  1.31k|                        }
  133|       |
  134|   123k|                } else {
  135|   630k|                        for (;; (*p)++, c = **p) {
  136|   630k|                                if (c == 0)
  ------------------
  |  Branch (136:37): [True: 35.6k, False: 595k]
  ------------------
  137|  35.6k|                                        goto finish_force_terminate;
  138|   595k|                                else if (IN_SET(c, '\'', '"') && (flags & (EXTRACT_KEEP_QUOTE | EXTRACT_UNQUOTE))) {
  ------------------
  |  |  361|  1.19M|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 2.59k, False: 592k]
  |  |  ------------------
  |  |  362|  1.19M|                bool _found = false;                                    \
  |  |  363|  1.19M|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  1.19M|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  1.19M|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  1.19M|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|   595k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  1.19M|                switch (x) {                                            \
  |  |  368|  2.59k|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|  1.37k|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|  1.37k|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|  1.37k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|  2.59k|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|  2.59k|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 1.21k, False: 594k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 1.37k, False: 593k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|  2.59k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|  2.59k|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|  2.59k|                        _found = true;                                  \
  |  |  370|  2.59k|                        break;                                          \
  |  |  371|   592k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 592k, False: 2.59k]
  |  |  ------------------
  |  |  372|   592k|                        ;                                               \
  |  |  373|  1.19M|                }                                                       \
  |  |  374|  1.19M|                _found;                                                 \
  |  |  375|   595k|        })
  ------------------
  |  Branch (138:66): [True: 876, False: 1.71k]
  ------------------
  139|    876|                                        quote = c;
  140|    876|                                        if (flags & EXTRACT_UNQUOTE)
  ------------------
  |  Branch (140:45): [True: 876, False: 0]
  ------------------
  141|    876|                                                break;
  142|   594k|                                } else if (c == '\\' && !(flags & EXTRACT_RETAIN_ESCAPE)) {
  ------------------
  |  Branch (142:44): [True: 12.8k, False: 581k]
  |  Branch (142:57): [True: 12.8k, False: 0]
  ------------------
  143|  12.8k|                                        backslash = true;
  144|  12.8k|                                        break;
  145|   581k|                                } else if (strchr(separators, c)) {
  ------------------
  |  Branch (145:44): [True: 73.8k, False: 507k]
  ------------------
  146|  73.8k|                                        if (flags & EXTRACT_DONT_COALESCE_SEPARATORS) {
  ------------------
  |  Branch (146:45): [True: 4.62k, False: 69.2k]
  ------------------
  147|  4.62k|                                                if (!(flags & EXTRACT_RETAIN_SEPARATORS))
  ------------------
  |  Branch (147:53): [True: 4.56k, False: 55]
  ------------------
  148|  4.56k|                                                        (*p)++;
  149|  4.62k|                                                goto finish_force_next;
  150|  4.62k|                                        }
  151|  69.2k|                                        if (!(flags & EXTRACT_RETAIN_SEPARATORS))
  ------------------
  |  Branch (151:45): [True: 69.1k, False: 48]
  ------------------
  152|       |                                                /* Skip additional coalesced separators. */
  153|   139k|                                                for (;; (*p)++, c = **p) {
  154|   139k|                                                        if (c == 0)
  ------------------
  |  Branch (154:61): [True: 262, False: 139k]
  ------------------
  155|    262|                                                                goto finish_force_terminate;
  156|   139k|                                                        if (!strchr(separators, c))
  ------------------
  |  Branch (156:61): [True: 68.8k, False: 70.3k]
  ------------------
  157|  68.8k|                                                                break;
  158|   139k|                                                }
  159|  68.9k|                                        goto finish;
  160|       |
  161|  69.2k|                                }
  162|       |
  163|   507k|                                if (!GREEDY_REALLOC(s, sz+2))
  ------------------
  |  |  139|   507k|        greedy_realloc((void**) &(array), (need), sizeof((array)[0]))
  ------------------
  |  Branch (163:37): [True: 0, False: 507k]
  ------------------
  164|      0|                                        return -ENOMEM;
  165|       |
  166|   507k|                                s[sz++] = c;
  167|       |
  168|   507k|                                if (quote != 0)
  ------------------
  |  Branch (168:37): [True: 0, False: 507k]
  ------------------
  169|      0|                                        break;
  170|   507k|                        }
  171|   123k|                }
  172|   137k|        }
  173|       |
  174|  36.3k|finish_force_terminate:
  175|  36.3k|        *p = NULL;
  176|   115k|finish:
  177|   115k|        if (!s) {
  ------------------
  |  Branch (177:13): [True: 10.8k, False: 105k]
  ------------------
  178|  10.8k|                *p = NULL;
  179|  10.8k|                *ret = NULL;
  180|  10.8k|                return 0;
  181|  10.8k|        }
  182|       |
  183|   110k|finish_force_next:
  184|   110k|        s[sz] = 0;
  185|   110k|        *ret = TAKE_PTR(s);
  ------------------
  |  |  388|   110k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|   110k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|   110k|        ({                                                       \
  |  |  |  |  |  |  381|   110k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|   110k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|   110k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|   110k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|   110k|                _var_;                                           \
  |  |  |  |  |  |  386|   110k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  186|       |
  187|   110k|        return 1;
  188|   115k|}

close_nointr:
   35|   623k|int close_nointr(int fd) {
   36|   623k|        assert(fd >= 0);
  ------------------
  |  |   72|   623k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   623k|        do {                                                            \
  |  |  |  |   59|   623k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   623k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 623k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   623k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   623k|        } while (false)
  |  |  ------------------
  ------------------
   37|       |
   38|   623k|        if (close(fd) >= 0)
  ------------------
  |  Branch (38:13): [True: 623k, False: 0]
  ------------------
   39|   623k|                return 0;
   40|       |
   41|       |        /*
   42|       |         * Just ignore EINTR; a retry loop is the wrong thing to do on
   43|       |         * Linux.
   44|       |         *
   45|       |         * http://lkml.indiana.edu/hypermail/linux/kernel/0509.1/0877.html
   46|       |         * https://bugzilla.gnome.org/show_bug.cgi?id=682819
   47|       |         * http://utcc.utoronto.ca/~cks/space/blog/unix/CloseEINTR
   48|       |         * https://sites.google.com/site/michaelsafyan/software-engineering/checkforeintrwheninvokingclosethinkagain
   49|       |         */
   50|      0|        if (errno == EINTR)
  ------------------
  |  Branch (50:13): [True: 0, False: 0]
  ------------------
   51|      0|                return 0;
   52|       |
   53|      0|        return -errno;
   54|      0|}
safe_close:
   56|  1.42M|int safe_close(int fd) {
   57|       |        /*
   58|       |         * Like close_nointr() but cannot fail. Guarantees errno is unchanged. Is a noop for negative fds,
   59|       |         * and returns -EBADF, so that it can be used in this syntax:
   60|       |         *
   61|       |         * fd = safe_close(fd);
   62|       |         */
   63|       |
   64|  1.42M|        if (fd >= 0) {
  ------------------
  |  Branch (64:13): [True: 623k, False: 797k]
  ------------------
   65|   623k|                PROTECT_ERRNO;
  ------------------
  |  |   31|   623k|        _cleanup_(_reset_errno_) _unused_ int _saved_errno_ = errno
  |  |  ------------------
  |  |  |  |   78|   623k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
   66|       |
   67|       |                /* The kernel might return pretty much any error code
   68|       |                 * via close(), but the fd will be closed anyway. The
   69|       |                 * only condition we want to check for here is whether
   70|       |                 * the fd was invalid at all... */
   71|       |
   72|   623k|                assert_se(close_nointr(fd) != -EBADF);
  ------------------
  |  |   65|   623k|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   623k|        do {                                                            \
  |  |  |  |   59|   623k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   623k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 623k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   623k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   623k|        } while (false)
  |  |  ------------------
  ------------------
   73|   623k|        }
   74|       |
   75|  1.42M|        return -EBADF;
   76|  1.42M|}
close_many:
   92|  2.50k|void close_many(const int fds[], size_t n_fds) {
   93|  2.50k|        assert(fds || n_fds == 0);
  ------------------
  |  |   72|  2.50k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.50k|        do {                                                            \
  |  |  |  |   59|  2.50k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.01k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.50k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 2.50k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 2.50k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.50k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.50k|        } while (false)
  |  |  ------------------
  ------------------
   94|       |
   95|  2.50k|        FOREACH_ARRAY(fd, fds, n_fds)
  ------------------
  |  |  463|  2.50k|        _FOREACH_ARRAY(i, array, num, UNIQ_T(m, UNIQ), UNIQ_T(end, UNIQ))
  |  |  ------------------
  |  |  |  |  457|  2.50k|        for (typeof(array[0]) *i = (array), *end = ({                   \
  |  |  |  |  458|  2.50k|                                typeof(num) m = (num);                  \
  |  |  |  |  459|  2.50k|                                (i && m > 0) ? i + m : NULL;            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (459:34): [True: 0, False: 2.50k]
  |  |  |  |  |  Branch (459:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  460|  2.50k|                        }); end && i < end; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (460:29): [True: 0, False: 2.50k]
  |  |  |  |  |  Branch (460:36): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|      0|                safe_close(*fd);
   97|  2.50k|}
fclose_nointr:
  113|  38.3k|int fclose_nointr(FILE *f) {
  114|  38.3k|        assert(f);
  ------------------
  |  |   72|  38.3k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  38.3k|        do {                                                            \
  |  |  |  |   59|  38.3k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  38.3k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 38.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  38.3k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  38.3k|        } while (false)
  |  |  ------------------
  ------------------
  115|       |
  116|       |        /* Same as close_nointr(), but for fclose() */
  117|       |
  118|  38.3k|        errno = 0; /* Extra safety: if the FILE* object is not encapsulating an fd, it might not set errno
  119|       |                    * correctly. Let's hence initialize it to zero first, so that we aren't confused by any
  120|       |                    * prior errno here */
  121|  38.3k|        if (fclose(f) == 0)
  ------------------
  |  Branch (121:13): [True: 38.3k, False: 0]
  ------------------
  122|  38.3k|                return 0;
  123|       |
  124|      0|        if (errno == EINTR)
  ------------------
  |  Branch (124:13): [True: 0, False: 0]
  ------------------
  125|      0|                return 0;
  126|       |
  127|      0|        return errno_or_else(EIO);
  128|      0|}
safe_fclose:
  130|  63.2k|FILE* safe_fclose(FILE *f) {
  131|       |
  132|       |        /* Same as safe_close(), but for fclose() */
  133|       |
  134|  63.2k|        if (f) {
  ------------------
  |  Branch (134:13): [True: 38.3k, False: 24.9k]
  ------------------
  135|  38.3k|                PROTECT_ERRNO;
  ------------------
  |  |   31|  38.3k|        _cleanup_(_reset_errno_) _unused_ int _saved_errno_ = errno
  |  |  ------------------
  |  |  |  |   78|  38.3k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  136|       |
  137|  38.3k|                assert_se(fclose_nointr(f) != -EBADF);
  ------------------
  |  |   65|  38.3k|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  38.3k|        do {                                                            \
  |  |  |  |   59|  38.3k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  38.3k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 38.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  38.3k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  38.3k|        } while (false)
  |  |  ------------------
  ------------------
  138|  38.3k|        }
  139|       |
  140|  63.2k|        return NULL;
  141|  63.2k|}
fdname_is_valid:
  627|  1.01k|bool fdname_is_valid(const char *s) {
  628|  1.01k|        const char *p;
  629|       |
  630|       |        /* Validates a name for $LISTEN_FDNAMES. We basically allow
  631|       |         * everything ASCII that's not a control character. Also, as
  632|       |         * special exception the ":" character is not allowed, as we
  633|       |         * use that as field separator in $LISTEN_FDNAMES.
  634|       |         *
  635|       |         * Note that the empty string is explicitly allowed
  636|       |         * here. However, we limit the length of the names to 255
  637|       |         * characters. */
  638|       |
  639|  1.01k|        if (!s)
  ------------------
  |  Branch (639:13): [True: 0, False: 1.01k]
  ------------------
  640|      0|                return false;
  641|       |
  642|  3.08k|        for (p = s; *p; p++) {
  ------------------
  |  Branch (642:21): [True: 2.83k, False: 253]
  ------------------
  643|  2.83k|                if (*p < ' ')
  ------------------
  |  Branch (643:21): [True: 211, False: 2.62k]
  ------------------
  644|    211|                        return false;
  645|  2.62k|                if (*p >= 127)
  ------------------
  |  Branch (645:21): [True: 195, False: 2.42k]
  ------------------
  646|    195|                        return false;
  647|  2.42k|                if (*p == ':')
  ------------------
  |  Branch (647:21): [True: 353, False: 2.07k]
  ------------------
  648|    353|                        return false;
  649|  2.42k|        }
  650|       |
  651|    253|        return p - s <= FDNAME_MAX;
  ------------------
  |  |   11|    253|#define FDNAME_MAX 255
  ------------------
  652|  1.01k|}
fd_move_above_stdio:
  712|    835|int fd_move_above_stdio(int fd) {
  713|    835|        int flags, copy;
  714|    835|        PROTECT_ERRNO;
  ------------------
  |  |   31|    835|        _cleanup_(_reset_errno_) _unused_ int _saved_errno_ = errno
  |  |  ------------------
  |  |  |  |   78|    835|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  715|       |
  716|       |        /* Moves the specified file descriptor if possible out of the range [0…2], i.e. the range of
  717|       |         * stdin/stdout/stderr. If it can't be moved outside of this range the original file descriptor is
  718|       |         * returned. This call is supposed to be used for long-lasting file descriptors we allocate in our code that
  719|       |         * might get loaded into foreign code, and where we want ensure our fds are unlikely used accidentally as
  720|       |         * stdin/stdout/stderr of unrelated code.
  721|       |         *
  722|       |         * Note that this doesn't fix any real bugs, it just makes it less likely that our code will be affected by
  723|       |         * buggy code from others that mindlessly invokes 'fprintf(stderr, …' or similar in places where stderr has
  724|       |         * been closed before.
  725|       |         *
  726|       |         * This function is written in a "best-effort" and "least-impact" style. This means whenever we encounter an
  727|       |         * error we simply return the original file descriptor, and we do not touch errno. */
  728|       |
  729|    835|        if (fd < 0 || fd > 2)
  ------------------
  |  Branch (729:13): [True: 0, False: 835]
  |  Branch (729:23): [True: 835, False: 0]
  ------------------
  730|    835|                return fd;
  731|       |
  732|      0|        flags = fcntl(fd, F_GETFD, 0);
  733|      0|        if (flags < 0)
  ------------------
  |  Branch (733:13): [True: 0, False: 0]
  ------------------
  734|      0|                return fd;
  735|       |
  736|      0|        if (flags & FD_CLOEXEC)
  ------------------
  |  Branch (736:13): [True: 0, False: 0]
  ------------------
  737|      0|                copy = fcntl(fd, F_DUPFD_CLOEXEC, 3);
  738|      0|        else
  739|      0|                copy = fcntl(fd, F_DUPFD, 3);
  740|      0|        if (copy < 0)
  ------------------
  |  Branch (740:13): [True: 0, False: 0]
  ------------------
  741|      0|                return fd;
  742|       |
  743|      0|        assert(copy > 2);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  744|       |
  745|      0|        (void) close(fd);
  746|      0|        return copy;
  747|      0|}
path_is_root_at:
 1057|  96.2k|int path_is_root_at(int dir_fd, const char *path) {
 1058|  96.2k|        _cleanup_close_ int fd = -EBADF, pfd = -EBADF;
  ------------------
  |  |   60|  96.2k|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|  96.2k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1059|       |
 1060|  96.2k|        assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
  ------------------
  |  |   72|  96.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  96.2k|        do {                                                            \
  |  |  |  |   59|  96.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  96.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 96.2k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 96.2k, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  96.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  96.2k|        } while (false)
  |  |  ------------------
  ------------------
 1061|       |
 1062|  96.2k|        if (!isempty(path)) {
  ------------------
  |  Branch (1062:13): [True: 0, False: 96.2k]
  ------------------
 1063|      0|                fd = openat(dir_fd, path, O_PATH|O_DIRECTORY|O_CLOEXEC);
 1064|      0|                if (fd < 0)
  ------------------
  |  Branch (1064:21): [True: 0, False: 0]
  ------------------
 1065|      0|                        return errno == ENOTDIR ? false : -errno;
  ------------------
  |  Branch (1065:32): [True: 0, False: 0]
  ------------------
 1066|       |
 1067|      0|                dir_fd = fd;
 1068|      0|        }
 1069|       |
 1070|  96.2k|        pfd = openat(dir_fd, "..", O_PATH|O_DIRECTORY|O_CLOEXEC);
 1071|  96.2k|        if (pfd < 0)
  ------------------
  |  Branch (1071:13): [True: 0, False: 96.2k]
  ------------------
 1072|      0|                return errno == ENOTDIR ? false : -errno;
  ------------------
  |  Branch (1072:24): [True: 0, False: 0]
  ------------------
 1073|       |
 1074|       |        /* Even if the parent directory has the same inode, the fd may not point to the root directory "/",
 1075|       |         * and we also need to check that the mount ids are the same. Otherwise, a construct like the
 1076|       |         * following could be used to trick us:
 1077|       |         *
 1078|       |         * $ mkdir /tmp/x /tmp/x/y
 1079|       |         * $ mount --bind /tmp/x /tmp/x/y
 1080|       |         */
 1081|       |
 1082|  96.2k|        return fds_are_same_mount(dir_fd, pfd);
 1083|  96.2k|}
fds_are_same_mount:
 1085|  96.2k|int fds_are_same_mount(int fd1, int fd2) {
 1086|  96.2k|        struct statx sx1 = {}, sx2 = {}; /* explicitly initialize the struct to make msan silent. */
 1087|  96.2k|        int r;
 1088|       |
 1089|  96.2k|        assert(fd1 >= 0);
  ------------------
  |  |   72|  96.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  96.2k|        do {                                                            \
  |  |  |  |   59|  96.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  96.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 96.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  96.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  96.2k|        } while (false)
  |  |  ------------------
  ------------------
 1090|  96.2k|        assert(fd2 >= 0);
  ------------------
  |  |   72|  96.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  96.2k|        do {                                                            \
  |  |  |  |   59|  96.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  96.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 96.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  96.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  96.2k|        } while (false)
  |  |  ------------------
  ------------------
 1091|       |
 1092|  96.2k|        if (statx(fd1, "", AT_EMPTY_PATH, STATX_TYPE|STATX_INO|STATX_MNT_ID, &sx1) < 0)
  ------------------
  |  |  309|  96.2k|#define AT_EMPTY_PATH           0x1000
  ------------------
  |  Branch (1092:13): [True: 0, False: 96.2k]
  ------------------
 1093|      0|                return -errno;
 1094|       |
 1095|  96.2k|        if (statx(fd2, "", AT_EMPTY_PATH, STATX_TYPE|STATX_INO|STATX_MNT_ID, &sx2) < 0)
  ------------------
  |  |  309|  96.2k|#define AT_EMPTY_PATH           0x1000
  ------------------
  |  Branch (1095:13): [True: 0, False: 96.2k]
  ------------------
 1096|      0|                return -errno;
 1097|       |
 1098|       |        /* First, compare inode. If these are different, the fd does not point to the root directory "/". */
 1099|  96.2k|        if (!statx_inode_same(&sx1, &sx2))
  ------------------
  |  Branch (1099:13): [True: 0, False: 96.2k]
  ------------------
 1100|      0|                return false;
 1101|       |
 1102|       |        /* Note, statx() does not provide the mount ID and path_get_mnt_id_at() does not work when an old
 1103|       |         * kernel is used. In that case, let's assume that we do not have such spurious mount points in an
 1104|       |         * early boot stage, and silently skip the following check. */
 1105|       |
 1106|  96.2k|        if (!FLAGS_SET(sx1.stx_mask, STATX_MNT_ID)) {
  ------------------
  |  |  414|  96.2k|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (1106:13): [True: 0, False: 96.2k]
  ------------------
 1107|      0|                int mntid;
 1108|       |
 1109|      0|                r = path_get_mnt_id_at_fallback(fd1, "", &mntid);
 1110|      0|                if (r < 0)
  ------------------
  |  Branch (1110:21): [True: 0, False: 0]
  ------------------
 1111|      0|                        return r;
 1112|      0|                assert(mntid >= 0);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 1113|       |
 1114|      0|                sx1.stx_mnt_id = mntid;
 1115|      0|                sx1.stx_mask |= STATX_MNT_ID;
 1116|      0|        }
 1117|       |
 1118|  96.2k|        if (!FLAGS_SET(sx2.stx_mask, STATX_MNT_ID)) {
  ------------------
  |  |  414|  96.2k|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (1118:13): [True: 0, False: 96.2k]
  ------------------
 1119|      0|                int mntid;
 1120|       |
 1121|      0|                r = path_get_mnt_id_at_fallback(fd2, "", &mntid);
 1122|      0|                if (r < 0)
  ------------------
  |  Branch (1122:21): [True: 0, False: 0]
  ------------------
 1123|      0|                        return r;
 1124|      0|                assert(mntid >= 0);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 1125|       |
 1126|      0|                sx2.stx_mnt_id = mntid;
 1127|      0|                sx2.stx_mask |= STATX_MNT_ID;
 1128|      0|        }
 1129|       |
 1130|  96.2k|        return statx_mount_same(&sx1, &sx2);
 1131|  96.2k|}

networkd-manager.c:closep:
   45|  13.0k|static inline void closep(int *fd) {
   46|  13.0k|        safe_close(*fd);
   47|  13.0k|}
fuzz-netdev-parser.c:fclosep:
   53|  13.0k|static inline void fclosep(FILE **f) {
   54|  13.0k|        safe_fclose(*f);
   55|  13.0k|}
conf-parser.c:fclosep:
   53|  46.1k|static inline void fclosep(FILE **f) {
   54|  46.1k|        safe_fclose(*f);
   55|  46.1k|}
userdb-dropin.c:fclosep:
   53|    835|static inline void fclosep(FILE **f) {
   54|    835|        safe_fclose(*f);
   55|    835|}
chase.c:closep:
   45|   869k|static inline void closep(int *fd) {
   46|   869k|        safe_close(*fd);
   47|   869k|}
chase.c:dir_fd_is_root:
  128|  96.2k|static inline int dir_fd_is_root(int dir_fd) {
  129|  96.2k|        return path_is_root_at(dir_fd, NULL);
  130|  96.2k|}
fd-util.c:closep:
   45|   192k|static inline void closep(int *fd) {
   46|   192k|        safe_close(*fd);
   47|   192k|}
fileio.c:fclosep:
   53|  3.12k|static inline void fclosep(FILE **f) {
   54|  3.12k|        safe_fclose(*f);
   55|  3.12k|}
fileio.c:closep:
   45|  4.80k|static inline void closep(int *fd) {
   46|  4.80k|        safe_close(*fd);
   47|  4.80k|}
fs-util.c:closep:
   45|  23.0k|static inline void closep(int *fd) {
   46|  23.0k|        safe_close(*fd);
   47|  23.0k|}
tmpfile-util.c:closep:
   45|  13.0k|static inline void closep(int *fd) {
   46|  13.0k|        safe_close(*fd);
   47|  13.0k|}
id128-util.c:closep:
   45|     13|static inline void closep(int *fd) {
   46|     13|        safe_close(*fd);
   47|     13|}

fdopen_unlocked:
   48|  23.0k|int fdopen_unlocked(int fd, const char *options, FILE **ret) {
   49|  23.0k|        assert(ret);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
   50|       |
   51|  23.0k|        FILE *f = fdopen(fd, options);
   52|  23.0k|        if (!f)
  ------------------
  |  Branch (52:13): [True: 0, False: 23.0k]
  ------------------
   53|      0|                return -errno;
   54|       |
   55|  23.0k|        (void) __fsetlocking(f, FSETLOCKING_BYCALLER);
   56|       |
   57|  23.0k|        *ret = f;
   58|  23.0k|        return 0;
   59|  23.0k|}
take_fdopen_unlocked:
   61|  23.0k|int take_fdopen_unlocked(int *fd, const char *options, FILE **ret) {
   62|  23.0k|        int r;
   63|       |
   64|  23.0k|        assert(fd);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
   65|       |
   66|  23.0k|        r = fdopen_unlocked(*fd, options, ret);
   67|  23.0k|        if (r < 0)
  ------------------
  |  Branch (67:13): [True: 0, False: 23.0k]
  ------------------
   68|      0|                return r;
   69|       |
   70|  23.0k|        *fd = -EBADF;
   71|       |
   72|  23.0k|        return 0;
   73|  23.0k|}
take_fdopen:
   75|  13.0k|FILE* take_fdopen(int *fd, const char *options) {
   76|  13.0k|        assert(fd);
  ------------------
  |  |   72|  13.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.0k|        do {                                                            \
  |  |  |  |   59|  13.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  13.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.0k|        } while (false)
  |  |  ------------------
  ------------------
   77|       |
   78|  13.0k|        FILE *f = fdopen(*fd, options);
   79|  13.0k|        if (!f)
  ------------------
  |  Branch (79:13): [True: 0, False: 13.0k]
  ------------------
   80|      0|                return NULL;
   81|       |
   82|  13.0k|        *fd = -EBADF;
   83|       |
   84|  13.0k|        return f;
   85|  13.0k|}
read_one_line_file_at:
  415|      3|int read_one_line_file_at(int dir_fd, const char *filename, char **ret) {
  416|      3|        _cleanup_fclose_ FILE *f = NULL;
  ------------------
  |  |   61|      3|#define _cleanup_fclose_ _cleanup_(fclosep)
  |  |  ------------------
  |  |  |  |   78|      3|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  417|      3|        int r;
  418|       |
  419|      3|        assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
  ------------------
  |  |   72|      3|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      3|        do {                                                            \
  |  |  |  |   59|      3|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      6|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 3]
  |  |  |  |  |  |  |  Branch (95:44): [True: 3, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      3|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      3|        } while (false)
  |  |  ------------------
  ------------------
  420|      3|        assert(filename);
  ------------------
  |  |   72|      3|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      3|        do {                                                            \
  |  |  |  |   59|      3|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      3|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      3|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      3|        } while (false)
  |  |  ------------------
  ------------------
  421|      3|        assert(ret);
  ------------------
  |  |   72|      3|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      3|        do {                                                            \
  |  |  |  |   59|      3|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      3|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      3|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      3|        } while (false)
  |  |  ------------------
  ------------------
  422|       |
  423|      3|        r = fopen_unlocked_at(dir_fd, filename, "re", 0, &f);
  424|      3|        if (r < 0)
  ------------------
  |  Branch (424:13): [True: 1, False: 2]
  ------------------
  425|      1|                return r;
  426|       |
  427|      2|        return read_line(f, LONG_LINE_MAX, ret);
  ------------------
  |  |    6|      2|#define LONG_LINE_MAX (1U*1024U*1024U)
  ------------------
  428|      3|}
read_virtual_file_at:
  472|     81|                size_t *ret_size) {
  473|       |
  474|     81|        _cleanup_free_ char *buf = NULL;
  ------------------
  |  |   82|     81|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|     81|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  475|     81|        size_t n, size;
  476|     81|        int n_retries;
  477|     81|        bool truncated = false;
  478|       |
  479|       |        /* Virtual filesystems such as sysfs or procfs use kernfs, and kernfs can work with two sorts of
  480|       |         * virtual files. One sort uses "seq_file", and the results of the first read are buffered for the
  481|       |         * second read. The other sort uses "raw" reads which always go direct to the device. In the latter
  482|       |         * case, the content of the virtual file must be retrieved with a single read otherwise a second read
  483|       |         * might get the new value instead of finding EOF immediately. That's the reason why the usage of
  484|       |         * fread(3) is prohibited in this case as it always performs a second call to read(2) looking for
  485|       |         * EOF. See issue #13585.
  486|       |         *
  487|       |         * max_size specifies a limit on the bytes read. If max_size is SIZE_MAX, the full file is read. If
  488|       |         * the full file is too large to read, an error is returned. For other values of max_size, *partial
  489|       |         * contents* may be returned. (Though the read is still done using one syscall.) Returns 0 on
  490|       |         * partial success, 1 if untruncated contents were read.
  491|       |         *
  492|       |         * Rule: for kernfs files using "seq_file" → use regular read_full_file_at()
  493|       |         *       for kernfs files using "raw" → use read_virtual_file_at()
  494|       |         */
  495|       |
  496|     81|        assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
  ------------------
  |  |   72|     81|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     81|        do {                                                            \
  |  |  |  |   59|     81|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    162|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 81]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 81]
  |  |  |  |  |  |  |  Branch (95:44): [True: 81, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     81|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     81|        } while (false)
  |  |  ------------------
  ------------------
  497|     81|        assert(max_size <= READ_VIRTUAL_BYTES_MAX || max_size == SIZE_MAX);
  ------------------
  |  |   72|     81|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     81|        do {                                                            \
  |  |  |  |   59|     81|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    162|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 81]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 81]
  |  |  |  |  |  |  |  Branch (95:44): [True: 81, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     81|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     81|        } while (false)
  |  |  ------------------
  ------------------
  498|       |
  499|     81|        _cleanup_close_ int fd = -EBADF;
  ------------------
  |  |   60|     81|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|     81|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  500|     81|        if (isempty(filename))
  ------------------
  |  Branch (500:13): [True: 0, False: 81]
  ------------------
  501|      0|                fd = fd_reopen(ASSERT_FD(dir_fd), O_RDONLY | O_NOCTTY | O_CLOEXEC);
  ------------------
  |  |  162|      0|        ({                                      \
  |  |  163|      0|                int _fd_ = (fd);                \
  |  |  164|      0|                assert(_fd_ >= 0);              \
  |  |  ------------------
  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      0|                _fd_;                           \
  |  |  166|      0|        })
  ------------------
  502|     81|        else
  503|     81|                fd = RET_NERRNO(openat(dir_fd, filename, O_RDONLY | O_NOCTTY | O_CLOEXEC));
  504|     81|        if (fd < 0)
  ------------------
  |  Branch (504:13): [True: 9, False: 72]
  ------------------
  505|      9|                return fd;
  506|       |
  507|       |        /* Limit the number of attempts to read the number of bytes returned by fstat(). */
  508|     72|        n_retries = 3;
  509|       |
  510|     72|        for (;;) {
  511|     72|                struct stat st;
  512|       |
  513|     72|                if (fstat(fd, &st) < 0)
  ------------------
  |  Branch (513:21): [True: 0, False: 72]
  ------------------
  514|      0|                        return -errno;
  515|       |
  516|     72|                if (!S_ISREG(st.st_mode))
  ------------------
  |  Branch (516:21): [True: 0, False: 72]
  ------------------
  517|      0|                        return -EBADF;
  518|       |
  519|       |                /* Be prepared for files from /proc which generally report a file size of 0. */
  520|     72|                assert_cc(READ_VIRTUAL_BYTES_MAX < SSIZE_MAX);
  ------------------
  |  |  142|     72|#define assert_cc(expr) _Static_assert(expr, #expr)
  ------------------
  521|     72|                if (st.st_size > 0 && n_retries > 1) {
  ------------------
  |  Branch (521:21): [True: 0, False: 72]
  |  Branch (521:39): [True: 0, False: 0]
  ------------------
  522|       |                        /* Let's use the file size if we have more than 1 attempt left. On the last attempt
  523|       |                         * we'll ignore the file size */
  524|       |
  525|      0|                        if (st.st_size > SSIZE_MAX) { /* Avoid overflow with 32-bit size_t and 64-bit off_t. */
  ------------------
  |  Branch (525:29): [True: 0, False: 0]
  ------------------
  526|       |
  527|      0|                                if (max_size == SIZE_MAX)
  ------------------
  |  Branch (527:37): [True: 0, False: 0]
  ------------------
  528|      0|                                        return -EFBIG;
  529|       |
  530|      0|                                size = max_size;
  531|      0|                        } else {
  532|      0|                                size = MIN((size_t) st.st_size, max_size);
  ------------------
  |  |  220|      0|#define MIN(a, b) __MIN(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  222|      0|        ({                                              \
  |  |  |  |  223|      0|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  224|      0|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  225|      0|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (225:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  226|      0|        })
  |  |  ------------------
  ------------------
  533|       |
  534|      0|                                if (size > READ_VIRTUAL_BYTES_MAX)
  ------------------
  |  |   46|      0|#define READ_VIRTUAL_BYTES_MAX (4U * U64_MB - UINT64_C(2))
  |  |  ------------------
  |  |  |  |  159|      0|#define U64_MB (UINT64_C(1024) * U64_KB)
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|      0|#define U64_KB UINT64_C(1024)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (534:37): [True: 0, False: 0]
  ------------------
  535|      0|                                        return -EFBIG;
  536|      0|                        }
  537|       |
  538|      0|                        n_retries--;
  539|     72|                } else if (n_retries > 1) {
  ------------------
  |  Branch (539:28): [True: 72, False: 0]
  ------------------
  540|       |                        /* Files in /proc are generally smaller than the page size so let's start with
  541|       |                         * a page size buffer from malloc and only use the max buffer on the final try. */
  542|     72|                        size = MIN3(page_size() - 1, READ_VIRTUAL_BYTES_MAX, max_size);
  ------------------
  |  |  238|     72|        ({                                              \
  |  |  239|     72|                const typeof(x) _c = MIN(x, y);         \
  |  |  ------------------
  |  |  |  |  220|     72|#define MIN(a, b) __MIN(UNIQ, (a), UNIQ, (b))
  |  |  |  |  ------------------
  |  |  |  |  |  |  222|     72|        ({                                              \
  |  |  |  |  |  |  223|     72|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  |  |  224|     72|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  |  |  225|     72|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  144|     72|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|     72|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  139|     72|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  144|     72|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|     72|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  139|     72|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  144|     72|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|     72|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  139|     72|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  144|     72|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|     72|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  139|     72|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (225:17): [True: 72, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  226|     72|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  240|     72|                MIN(_c, z);                             \
  |  |  ------------------
  |  |  |  |  220|     72|#define MIN(a, b) __MIN(UNIQ, (a), UNIQ, (b))
  |  |  |  |  ------------------
  |  |  |  |  |  |  222|     72|        ({                                              \
  |  |  |  |  |  |  223|     72|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  |  |  224|     72|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  |  |  225|     72|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  144|     72|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|     72|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  139|     72|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  144|     72|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|     72|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  139|     72|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  144|     72|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|     72|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  139|     72|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  144|     72|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|     72|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  139|     72|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (225:17): [True: 72, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  226|     72|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  241|     72|        })
  ------------------
  543|     72|                        n_retries = 1;
  544|     72|                } else {
  545|      0|                        size = MIN(READ_VIRTUAL_BYTES_MAX, max_size);
  ------------------
  |  |  220|      0|#define MIN(a, b) __MIN(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  222|      0|        ({                                              \
  |  |  |  |  223|      0|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  224|      0|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  225|      0|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (225:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  226|      0|        })
  |  |  ------------------
  ------------------
  546|      0|                        n_retries = 0;
  547|      0|                }
  548|       |
  549|     72|                buf = malloc(size + 1);
  550|     72|                if (!buf)
  ------------------
  |  Branch (550:21): [True: 0, False: 72]
  ------------------
  551|      0|                        return -ENOMEM;
  552|       |
  553|       |                /* Use a bigger allocation if we got it anyway, but not more than the limit. */
  554|     72|                size = MIN3(MALLOC_SIZEOF_SAFE(buf) - 1, max_size, READ_VIRTUAL_BYTES_MAX);
  ------------------
  |  |  238|     72|        ({                                              \
  |  |  239|     72|                const typeof(x) _c = MIN(x, y);         \
  |  |  ------------------
  |  |  |  |  220|     72|#define MIN(a, b) __MIN(UNIQ, (a), UNIQ, (b))
  |  |  |  |  ------------------
  |  |  |  |  |  |  222|     72|        ({                                              \
  |  |  |  |  |  |  223|     72|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  |  |  224|     72|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  |  |  225|     72|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  144|     72|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|     72|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  139|     72|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  144|     72|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|     72|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  139|     72|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  144|     72|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|     72|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  139|     72|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  144|     72|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|     72|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  139|     72|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (225:17): [True: 72, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  226|     72|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  240|     72|                MIN(_c, z);                             \
  |  |  ------------------
  |  |  |  |  220|     72|#define MIN(a, b) __MIN(UNIQ, (a), UNIQ, (b))
  |  |  |  |  ------------------
  |  |  |  |  |  |  222|     72|        ({                                              \
  |  |  |  |  |  |  223|     72|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  |  |  224|     72|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  |  |  225|     72|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  144|     72|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|     72|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  139|     72|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  144|     72|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|     72|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  139|     72|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  144|     72|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|     72|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  139|     72|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  144|     72|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|     72|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  139|     72|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (225:17): [True: 72, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  226|     72|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  241|     72|        })
  ------------------
  555|       |
  556|     72|                for (;;) {
  557|     72|                        ssize_t k;
  558|       |
  559|       |                        /* Read one more byte so we can detect whether the content of the
  560|       |                         * file has already changed or the guessed size for files from /proc
  561|       |                         * wasn't large enough . */
  562|     72|                        k = read(fd, buf, size + 1);
  563|     72|                        if (k >= 0) {
  ------------------
  |  Branch (563:29): [True: 72, False: 0]
  ------------------
  564|     72|                                n = k;
  565|     72|                                break;
  566|     72|                        }
  567|       |
  568|      0|                        if (errno != EINTR)
  ------------------
  |  Branch (568:29): [True: 0, False: 0]
  ------------------
  569|      0|                                return -errno;
  570|      0|                }
  571|       |
  572|       |                /* Consider a short read as EOF */
  573|     72|                if (n <= size)
  ------------------
  |  Branch (573:21): [True: 72, False: 0]
  ------------------
  574|     72|                        break;
  575|       |
  576|       |                /* If a maximum size is specified and we already read more we know the file is larger, and
  577|       |                 * can handle this as truncation case. Note that if the size of what we read equals the
  578|       |                 * maximum size then this doesn't mean truncation, the file might or might not end on that
  579|       |                 * byte. We need to rerun the loop in that case, with a larger buffer size, so that we read
  580|       |                 * at least one more byte to be able to distinguish EOF from truncation. */
  581|      0|                if (max_size != SIZE_MAX && n > max_size) {
  ------------------
  |  Branch (581:21): [True: 0, False: 0]
  |  Branch (581:45): [True: 0, False: 0]
  ------------------
  582|      0|                        n = size; /* Make sure we never use more than what we sized the buffer for (so that
  583|       |                                   * we have one free byte in it for the trailing NUL we add below). */
  584|      0|                        truncated = true;
  585|      0|                        break;
  586|      0|                }
  587|       |
  588|       |                /* We have no further attempts left? Then the file is apparently larger than our limits. Give up. */
  589|      0|                if (n_retries <= 0)
  ------------------
  |  Branch (589:21): [True: 0, False: 0]
  ------------------
  590|      0|                        return -EFBIG;
  591|       |
  592|       |                /* Hmm... either we read too few bytes from /proc or less likely the content of the file
  593|       |                 * might have been changed (and is now bigger) while we were processing, let's try again
  594|       |                 * either with the new file size. */
  595|       |
  596|      0|                if (lseek(fd, 0, SEEK_SET) < 0)
  ------------------
  |  Branch (596:21): [True: 0, False: 0]
  ------------------
  597|      0|                        return -errno;
  598|       |
  599|      0|                buf = mfree(buf);
  ------------------
  |  |  404|      0|        ({                                      \
  |  |  405|      0|                free(memory);                   \
  |  |  406|      0|                (typeof(memory)) NULL;          \
  |  |  407|      0|        })
  ------------------
  600|      0|        }
  601|       |
  602|     72|        if (ret_contents) {
  ------------------
  |  Branch (602:13): [True: 72, False: 0]
  ------------------
  603|       |
  604|       |                /* Safety check: if the caller doesn't want to know the size of what we just read it will
  605|       |                 * rely on the trailing NUL byte. But if there's an embedded NUL byte, then we should refuse
  606|       |                 * operation as otherwise there'd be ambiguity about what we just read. */
  607|     72|                if (!ret_size && memchr(buf, 0, n))
  ------------------
  |  Branch (607:21): [True: 0, False: 72]
  |  Branch (607:34): [True: 0, False: 0]
  ------------------
  608|      0|                        return -EBADMSG;
  609|       |
  610|     72|                if (n < size) {
  ------------------
  |  Branch (610:21): [True: 72, False: 0]
  ------------------
  611|     72|                        char *p;
  612|       |
  613|       |                        /* Return rest of the buffer to libc */
  614|     72|                        p = realloc(buf, n + 1);
  615|     72|                        if (!p)
  ------------------
  |  Branch (615:29): [True: 0, False: 72]
  ------------------
  616|      0|                                return -ENOMEM;
  617|     72|                        buf = p;
  618|     72|                }
  619|       |
  620|     72|                buf[n] = 0;
  621|     72|                *ret_contents = TAKE_PTR(buf);
  ------------------
  |  |  388|     72|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|     72|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|     72|        ({                                                       \
  |  |  |  |  |  |  381|     72|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|     72|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|     72|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|     72|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|     72|                _var_;                                           \
  |  |  |  |  |  |  386|     72|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  622|     72|        }
  623|       |
  624|     72|        if (ret_size)
  ------------------
  |  Branch (624:13): [True: 72, False: 0]
  ------------------
  625|     72|                *ret_size = n;
  626|       |
  627|     72|        return !truncated;
  628|     72|}
read_full_stream_full:
  637|  2.12k|                size_t *ret_size) {
  638|       |
  639|  2.12k|        _cleanup_free_ char *buf = NULL;
  ------------------
  |  |   82|  2.12k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  2.12k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  640|  2.12k|        size_t n, n_next = 0, l, expected_decoded_size = size;
  641|  2.12k|        int fd, r;
  642|       |
  643|  2.12k|        assert(f);
  ------------------
  |  |   72|  2.12k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.12k|        do {                                                            \
  |  |  |  |   59|  2.12k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.12k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.12k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.12k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.12k|        } while (false)
  |  |  ------------------
  ------------------
  644|  2.12k|        assert(ret_contents);
  ------------------
  |  |   72|  2.12k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.12k|        do {                                                            \
  |  |  |  |   59|  2.12k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.12k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.12k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.12k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.12k|        } while (false)
  |  |  ------------------
  ------------------
  645|  2.12k|        assert(!FLAGS_SET(flags, READ_FULL_FILE_UNBASE64 | READ_FULL_FILE_UNHEX));
  ------------------
  |  |   72|  2.12k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.12k|        do {                                                            \
  |  |  |  |   59|  2.12k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.12k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.12k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.12k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.12k|        } while (false)
  |  |  ------------------
  ------------------
  646|  2.12k|        assert(size != SIZE_MAX || !FLAGS_SET(flags, READ_FULL_FILE_FAIL_WHEN_LARGER));
  ------------------
  |  |   72|  2.12k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.12k|        do {                                                            \
  |  |  |  |   59|  2.12k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.12k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.12k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 2.12k, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.12k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.12k|        } while (false)
  |  |  ------------------
  ------------------
  647|       |
  648|  2.12k|        if (offset != UINT64_MAX && offset > LONG_MAX) /* fseek() can only deal with "long" offsets */
  ------------------
  |  Branch (648:13): [True: 0, False: 2.12k]
  |  Branch (648:37): [True: 0, False: 0]
  ------------------
  649|      0|                return -ERANGE;
  650|       |
  651|  2.12k|        if ((flags & (READ_FULL_FILE_UNBASE64 | READ_FULL_FILE_UNHEX)) != 0) {
  ------------------
  |  Branch (651:13): [True: 2.12k, False: 0]
  ------------------
  652|  2.12k|                if (size <= SIZE_MAX / READ_FULL_FILE_ENCODED_STRING_AMPLIFICATION_BOUNDARY)
  ------------------
  |  |   35|  2.12k|#define READ_FULL_FILE_ENCODED_STRING_AMPLIFICATION_BOUNDARY 3
  ------------------
  |  Branch (652:21): [True: 2.12k, False: 0]
  ------------------
  653|  2.12k|                        size *= READ_FULL_FILE_ENCODED_STRING_AMPLIFICATION_BOUNDARY;
  ------------------
  |  |   35|  2.12k|#define READ_FULL_FILE_ENCODED_STRING_AMPLIFICATION_BOUNDARY 3
  ------------------
  654|      0|                else
  655|      0|                        size = SIZE_MAX;
  656|  2.12k|        }
  657|       |
  658|  2.12k|        fd = fileno(f);
  659|  2.12k|        if (fd >= 0) { /* If the FILE* object is backed by an fd (as opposed to memory or such, see
  ------------------
  |  Branch (659:13): [True: 2.12k, False: 0]
  ------------------
  660|       |                        * fmemopen()), let's optimize our buffering */
  661|  2.12k|                struct stat st;
  662|       |
  663|  2.12k|                if (fstat(fd, &st) < 0)
  ------------------
  |  Branch (663:21): [True: 0, False: 2.12k]
  ------------------
  664|      0|                        return -errno;
  665|       |
  666|  2.12k|                if (S_ISREG(st.st_mode)) {
  667|       |
  668|       |                        /* Try to start with the right file size if we shall read the file in full. Note
  669|       |                         * that we increase the size to read here by one, so that the first read attempt
  670|       |                         * already makes us notice the EOF. If the reported size of the file is zero, we
  671|       |                         * avoid this logic however, since quite likely it might be a virtual file in procfs
  672|       |                         * that all report a zero file size. */
  673|       |
  674|    198|                        if (st.st_size > 0 &&
  ------------------
  |  Branch (674:29): [True: 198, False: 0]
  ------------------
  675|    198|                            (size == SIZE_MAX || FLAGS_SET(flags, READ_FULL_FILE_FAIL_WHEN_LARGER))) {
  ------------------
  |  |  414|    198|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 198, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (675:30): [True: 0, False: 198]
  ------------------
  676|       |
  677|    198|                                uint64_t rsize =
  678|    198|                                        LESS_BY((uint64_t) st.st_size, offset == UINT64_MAX ? 0 : offset);
  ------------------
  |  |  280|    198|#define LESS_BY(a, b) __LESS_BY(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  282|    198|        ({                                              \
  |  |  |  |  283|    198|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  284|    396|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (284:50): [True: 198, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  285|    198|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? UNIQ_T(A, aq) - UNIQ_T(B, bq) : 0; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    198|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    198|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    198|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? UNIQ_T(A, aq) - UNIQ_T(B, bq) : 0; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    198|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    198|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    198|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? UNIQ_T(A, aq) - UNIQ_T(B, bq) : 0; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    198|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    198|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    198|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? UNIQ_T(A, aq) - UNIQ_T(B, bq) : 0; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    198|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    198|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    198|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (285:17): [True: 198, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  286|    198|        })
  |  |  ------------------
  ------------------
  679|       |
  680|    198|                                if (rsize < SIZE_MAX) /* overflow check */
  ------------------
  |  Branch (680:37): [True: 198, False: 0]
  ------------------
  681|    198|                                        n_next = rsize + 1;
  682|    198|                        }
  683|       |
  684|    198|                        if (flags & READ_FULL_FILE_WARN_WORLD_READABLE)
  ------------------
  |  Branch (684:29): [True: 198, False: 0]
  ------------------
  685|    198|                                (void) warn_file_is_world_accessible(filename, &st, NULL, 0);
  686|    198|                }
  687|  2.12k|        }
  688|       |
  689|       |        /* If we don't know how much to read, figure it out now. If we shall read a part of the file, then
  690|       |         * allocate the requested size. If we shall load the full file start with LINE_MAX. Note that if
  691|       |         * READ_FULL_FILE_FAIL_WHEN_LARGER we consider the specified size a safety limit, and thus also start
  692|       |         * with LINE_MAX, under assumption the file is most likely much shorter. */
  693|  2.12k|        if (n_next == 0)
  ------------------
  |  Branch (693:13): [True: 1.92k, False: 198]
  ------------------
  694|  1.92k|                n_next = size != SIZE_MAX && !FLAGS_SET(flags, READ_FULL_FILE_FAIL_WHEN_LARGER) ? size : LINE_MAX;
  ------------------
  |  |  414|  1.92k|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (694:26): [True: 1.92k, False: 0]
  |  Branch (694:46): [True: 0, False: 1.92k]
  ------------------
  695|       |
  696|       |        /* Never read more than we need to determine that our own limit is hit */
  697|  2.12k|        if (n_next > READ_FULL_BYTES_MAX)
  ------------------
  |  |   33|  2.12k|#define READ_FULL_BYTES_MAX (64U * U64_MB - UINT64_C(1))
  |  |  ------------------
  |  |  |  |  159|  2.12k|#define U64_MB (UINT64_C(1024) * U64_KB)
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  2.12k|#define U64_KB UINT64_C(1024)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (697:13): [True: 0, False: 2.12k]
  ------------------
  698|      0|                n_next = READ_FULL_BYTES_MAX + 1;
  ------------------
  |  |   33|      0|#define READ_FULL_BYTES_MAX (64U * U64_MB - UINT64_C(1))
  |  |  ------------------
  |  |  |  |  159|      0|#define U64_MB (UINT64_C(1024) * U64_KB)
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|      0|#define U64_KB UINT64_C(1024)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  699|       |
  700|  2.12k|        if (offset != UINT64_MAX && fseek(f, offset, SEEK_SET) < 0)
  ------------------
  |  Branch (700:13): [True: 0, False: 2.12k]
  |  Branch (700:37): [True: 0, False: 0]
  ------------------
  701|      0|                return -errno;
  702|       |
  703|  2.12k|        n = l = 0;
  704|  2.12k|        for (;;) {
  705|  2.12k|                char *t;
  706|  2.12k|                size_t k;
  707|       |
  708|       |                /* If we shall fail when reading overly large data, then read exactly one byte more than the
  709|       |                 * specified size at max, since that'll tell us if there's anymore data beyond the limit. */
  710|  2.12k|                if (FLAGS_SET(flags, READ_FULL_FILE_FAIL_WHEN_LARGER) && n_next > size)
  ------------------
  |  |  414|  4.24k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 2.12k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (710:74): [True: 2.12k, False: 0]
  ------------------
  711|  2.12k|                        n_next = size + 1;
  712|       |
  713|  2.12k|                if (flags & READ_FULL_FILE_SECURE) {
  ------------------
  |  Branch (713:21): [True: 2.12k, False: 0]
  ------------------
  714|  2.12k|                        t = malloc(n_next + 1);
  715|  2.12k|                        if (!t) {
  ------------------
  |  Branch (715:29): [True: 0, False: 2.12k]
  ------------------
  716|      0|                                r = -ENOMEM;
  717|      0|                                goto finalize;
  718|      0|                        }
  719|  2.12k|                        memcpy_safe(t, buf, n);
  720|  2.12k|                        explicit_bzero_safe(buf, n);
  721|  2.12k|                        free(buf);
  722|  2.12k|                } else {
  723|      0|                        t = realloc(buf, n_next + 1);
  724|      0|                        if (!t)
  ------------------
  |  Branch (724:29): [True: 0, False: 0]
  ------------------
  725|      0|                                return -ENOMEM;
  726|      0|                }
  727|       |
  728|  2.12k|                buf = t;
  729|       |                /* Unless a size has been explicitly specified, try to read as much as fits into the memory
  730|       |                 * we allocated (minus 1, to leave one byte for the safety NUL byte) */
  731|  2.12k|                n = size == SIZE_MAX ? MALLOC_SIZEOF_SAFE(buf) - 1 : n_next;
  ------------------
  |  |  198|      0|        malloc_sizeof_safe((void**) &__builtin_choose_expr(__builtin_constant_p(x), (void*) { NULL }, (x)))
  ------------------
  |  Branch (731:21): [True: 0, False: 2.12k]
  ------------------
  732|       |
  733|  2.12k|                errno = 0;
  734|  2.12k|                k = fread(buf + l, 1, n - l, f);
  735|       |
  736|  2.12k|                assert(k <= n - l);
  ------------------
  |  |   72|  2.12k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.12k|        do {                                                            \
  |  |  |  |   59|  2.12k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.12k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.12k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.12k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.12k|        } while (false)
  |  |  ------------------
  ------------------
  737|  2.12k|                l += k;
  738|       |
  739|  2.12k|                if (ferror(f)) {
  ------------------
  |  Branch (739:21): [True: 1.92k, False: 198]
  ------------------
  740|  1.92k|                        r = errno_or_else(EIO);
  741|  1.92k|                        goto finalize;
  742|  1.92k|                }
  743|    198|                if (feof(f))
  ------------------
  |  Branch (743:21): [True: 0, False: 198]
  ------------------
  744|      0|                        break;
  745|       |
  746|    198|                if (size != SIZE_MAX && !FLAGS_SET(flags, READ_FULL_FILE_FAIL_WHEN_LARGER)) { /* If we got asked to read some specific size, we already sized the buffer right, hence leave */
  ------------------
  |  |  414|    198|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (746:21): [True: 198, False: 0]
  |  Branch (746:41): [True: 0, False: 198]
  ------------------
  747|      0|                        assert(l == size);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  748|      0|                        break;
  749|      0|                }
  750|       |
  751|    198|                assert(k > 0); /* we can't have read zero bytes because that would have been EOF */
  ------------------
  |  |   72|    198|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    198|        do {                                                            \
  |  |  |  |   59|    198|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    198|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 198]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    198|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    198|        } while (false)
  |  |  ------------------
  ------------------
  752|       |
  753|    198|                if (FLAGS_SET(flags, READ_FULL_FILE_FAIL_WHEN_LARGER) && l > size) {
  ------------------
  |  |  414|    396|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 198, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (753:74): [True: 198, False: 0]
  ------------------
  754|    198|                        r = -E2BIG;
  755|    198|                        goto finalize;
  756|    198|                }
  757|       |
  758|      0|                if (n >= READ_FULL_BYTES_MAX) {
  ------------------
  |  |   33|      0|#define READ_FULL_BYTES_MAX (64U * U64_MB - UINT64_C(1))
  |  |  ------------------
  |  |  |  |  159|      0|#define U64_MB (UINT64_C(1024) * U64_KB)
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|      0|#define U64_KB UINT64_C(1024)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (758:21): [True: 0, False: 0]
  ------------------
  759|      0|                        r = -E2BIG;
  760|      0|                        goto finalize;
  761|      0|                }
  762|       |
  763|      0|                n_next = MIN(n * 2, READ_FULL_BYTES_MAX);
  ------------------
  |  |  220|      0|#define MIN(a, b) __MIN(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  222|      0|        ({                                              \
  |  |  |  |  223|      0|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  224|      0|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  225|      0|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (225:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  226|      0|        })
  |  |  ------------------
  ------------------
  764|      0|        }
  765|       |
  766|      0|        if (flags & (READ_FULL_FILE_UNBASE64 | READ_FULL_FILE_UNHEX)) {
  ------------------
  |  Branch (766:13): [True: 0, False: 0]
  ------------------
  767|      0|                _cleanup_free_ void *decoded = NULL;
  ------------------
  |  |   82|      0|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  768|      0|                size_t decoded_size;
  769|       |
  770|      0|                buf[l++] = 0;
  771|      0|                if (flags & READ_FULL_FILE_UNBASE64)
  ------------------
  |  Branch (771:21): [True: 0, False: 0]
  ------------------
  772|      0|                        r = unbase64mem_full(buf, l, flags & READ_FULL_FILE_SECURE, &decoded, &decoded_size);
  773|      0|                else
  774|      0|                        r = unhexmem_full(buf, l, flags & READ_FULL_FILE_SECURE, &decoded, &decoded_size);
  775|      0|                if (r < 0)
  ------------------
  |  Branch (775:21): [True: 0, False: 0]
  ------------------
  776|      0|                        goto finalize;
  777|       |
  778|      0|                if (flags & READ_FULL_FILE_SECURE)
  ------------------
  |  Branch (778:21): [True: 0, False: 0]
  ------------------
  779|      0|                        explicit_bzero_safe(buf, n);
  780|      0|                free_and_replace(buf, decoded);
  ------------------
  |  |   49|      0|        free_and_replace_full(a, b, free)
  |  |  ------------------
  |  |  |  |   10|      0|        ({                                      \
  |  |  |  |   11|      0|                typeof(a)* _a = &(a);           \
  |  |  |  |   12|      0|                typeof(b)* _b = &(b);           \
  |  |  |  |   13|      0|                free_func(*_a);                 \
  |  |  |  |   14|      0|                *_a = *_b;                      \
  |  |  |  |   15|      0|                *_b = NULL;                     \
  |  |  |  |   16|      0|                0;                              \
  |  |  |  |   17|      0|        })
  |  |  ------------------
  ------------------
  781|      0|                n = l = decoded_size;
  782|       |
  783|      0|                if (FLAGS_SET(flags, READ_FULL_FILE_FAIL_WHEN_LARGER) && l > expected_decoded_size) {
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (783:74): [True: 0, False: 0]
  ------------------
  784|      0|                        r = -E2BIG;
  785|      0|                        goto finalize;
  786|      0|                }
  787|      0|        }
  788|       |
  789|      0|        if (!ret_size) {
  ------------------
  |  Branch (789:13): [True: 0, False: 0]
  ------------------
  790|       |                /* Safety check: if the caller doesn't want to know the size of what we just read it will rely on the
  791|       |                 * trailing NUL byte. But if there's an embedded NUL byte, then we should refuse operation as otherwise
  792|       |                 * there'd be ambiguity about what we just read. */
  793|       |
  794|      0|                if (memchr(buf, 0, l)) {
  ------------------
  |  Branch (794:21): [True: 0, False: 0]
  ------------------
  795|      0|                        r = -EBADMSG;
  796|      0|                        goto finalize;
  797|      0|                }
  798|      0|        }
  799|       |
  800|      0|        buf[l] = 0;
  801|      0|        *ret_contents = TAKE_PTR(buf);
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  802|       |
  803|      0|        if (ret_size)
  ------------------
  |  Branch (803:13): [True: 0, False: 0]
  ------------------
  804|      0|                *ret_size = l;
  805|       |
  806|      0|        return 0;
  807|       |
  808|  2.12k|finalize:
  809|  2.12k|        if (flags & READ_FULL_FILE_SECURE)
  ------------------
  |  Branch (809:13): [True: 2.12k, False: 0]
  ------------------
  810|  2.12k|                explicit_bzero_safe(buf, n);
  811|       |
  812|  2.12k|        return r;
  813|      0|}
read_full_file_full:
  823|  3.11k|                size_t *ret_size) {
  824|       |
  825|  3.11k|        _cleanup_fclose_ FILE *f = NULL;
  ------------------
  |  |   61|  3.11k|#define _cleanup_fclose_ _cleanup_(fclosep)
  |  |  ------------------
  |  |  |  |   78|  3.11k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  826|  3.11k|        XfopenFlags xflags = XFOPEN_UNLOCKED;
  827|  3.11k|        int r;
  828|       |
  829|  3.11k|        assert(filename);
  ------------------
  |  |   72|  3.11k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.11k|        do {                                                            \
  |  |  |  |   59|  3.11k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.11k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.11k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.11k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.11k|        } while (false)
  |  |  ------------------
  ------------------
  830|  3.11k|        assert(ret_contents);
  ------------------
  |  |   72|  3.11k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.11k|        do {                                                            \
  |  |  |  |   59|  3.11k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.11k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.11k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.11k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.11k|        } while (false)
  |  |  ------------------
  ------------------
  831|       |
  832|  3.11k|        if (FLAGS_SET(flags, READ_FULL_FILE_CONNECT_SOCKET) && /* If this is enabled, let's try to connect to it */
  ------------------
  |  |  414|  6.23k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 3.11k, False: 0]
  |  |  ------------------
  ------------------
  833|  3.11k|            offset == UINT64_MAX)                              /* Seeking is not supported on AF_UNIX sockets */
  ------------------
  |  Branch (833:13): [True: 3.11k, False: 0]
  ------------------
  834|  3.11k|                xflags |= XFOPEN_SOCKET;
  835|       |
  836|  3.11k|        r = xfopenat_full(dir_fd, filename, "re", 0, xflags, bind_name, &f);
  837|  3.11k|        if (r < 0)
  ------------------
  |  Branch (837:13): [True: 998, False: 2.12k]
  ------------------
  838|    998|                return r;
  839|       |
  840|  2.12k|        return read_full_stream_full(f, filename, offset, size, flags, ret_contents, ret_size);
  841|  3.11k|}
get_proc_field:
  888|      1|int get_proc_field(const char *path, const char *key, char **ret) {
  889|      1|        _cleanup_fclose_ FILE *f = NULL;
  ------------------
  |  |   61|      1|#define _cleanup_fclose_ _cleanup_(fclosep)
  |  |  ------------------
  |  |  |  |   78|      1|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  890|      1|        int r;
  891|       |
  892|       |        /* Retrieve one field from a file like /proc/self/status. "key" matches the beginning of the line
  893|       |         * and should not include whitespace or the delimiter (':').
  894|       |         * Whitespaces after the ':' will be skipped. Only the first element is returned
  895|       |         * (i.e. for /proc/meminfo line "MemTotal: 1024 kB" -> return "1024"). */
  896|       |
  897|      1|        assert(path);
  ------------------
  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      1|        } while (false)
  |  |  ------------------
  ------------------
  898|      1|        assert(key);
  ------------------
  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      1|        } while (false)
  |  |  ------------------
  ------------------
  899|       |
  900|      1|        r = fopen_unlocked(path, "re", &f);
  901|      1|        if (r == -ENOENT && proc_mounted() == 0)
  ------------------
  |  Branch (901:13): [True: 0, False: 1]
  |  Branch (901:29): [True: 0, False: 0]
  ------------------
  902|      0|                return -ENOSYS;
  903|      1|        if (r < 0)
  ------------------
  |  Branch (903:13): [True: 0, False: 1]
  ------------------
  904|      0|                return r;
  905|       |
  906|      8|        for (;;) {
  907|      8|                 _cleanup_free_ char *line = NULL;
  ------------------
  |  |   82|      8|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|      8|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  908|       |
  909|      8|                 r = read_line(f, LONG_LINE_MAX, &line);
  ------------------
  |  |    6|      8|#define LONG_LINE_MAX (1U*1024U*1024U)
  ------------------
  910|      8|                 if (r < 0)
  ------------------
  |  Branch (910:22): [True: 0, False: 8]
  ------------------
  911|      0|                         return r;
  912|      8|                 if (r == 0)
  ------------------
  |  Branch (912:22): [True: 0, False: 8]
  ------------------
  913|      0|                         return -ENODATA;
  914|       |
  915|      8|                 char *l = startswith(line, key);
  916|      8|                 if (l && *l == ':') {
  ------------------
  |  Branch (916:22): [True: 1, False: 7]
  |  Branch (916:27): [True: 1, False: 0]
  ------------------
  917|      1|                         if (ret) {
  ------------------
  |  Branch (917:30): [True: 1, False: 0]
  ------------------
  918|      1|                                 char *s = strdupcspn(skip_leading_chars(l + 1, " \t"), WHITESPACE);
  ------------------
  |  |   15|      1|#define WHITESPACE          " \t\n\r"
  ------------------
  919|      1|                                 if (!s)
  ------------------
  |  Branch (919:38): [True: 0, False: 1]
  ------------------
  920|      0|                                         return -ENOMEM;
  921|       |
  922|      1|                                 *ret = s;
  923|      1|                         }
  924|       |
  925|      1|                         return 0;
  926|      1|                 }
  927|      8|        }
  928|      1|}
fopen_mode_to_flags:
  947|  23.8k|int fopen_mode_to_flags(const char *mode) {
  948|  23.8k|        const char *p;
  949|  23.8k|        int flags;
  950|       |
  951|  23.8k|        assert(mode);
  ------------------
  |  |   72|  23.8k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.8k|        do {                                                            \
  |  |  |  |   59|  23.8k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.8k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.8k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.8k|        } while (false)
  |  |  ------------------
  ------------------
  952|       |
  953|  23.8k|        if ((p = startswith(mode, "r+")))
  ------------------
  |  Branch (953:13): [True: 0, False: 23.8k]
  ------------------
  954|      0|                flags = O_RDWR;
  955|  23.8k|        else if ((p = startswith(mode, "r")))
  ------------------
  |  Branch (955:18): [True: 23.8k, False: 0]
  ------------------
  956|  23.8k|                flags = O_RDONLY;
  957|      0|        else if ((p = startswith(mode, "w+")))
  ------------------
  |  Branch (957:18): [True: 0, False: 0]
  ------------------
  958|      0|                flags = O_RDWR|O_CREAT|O_TRUNC;
  959|      0|        else if ((p = startswith(mode, "w")))
  ------------------
  |  Branch (959:18): [True: 0, False: 0]
  ------------------
  960|      0|                flags = O_WRONLY|O_CREAT|O_TRUNC;
  961|      0|        else if ((p = startswith(mode, "a+")))
  ------------------
  |  Branch (961:18): [True: 0, False: 0]
  ------------------
  962|      0|                flags = O_RDWR|O_CREAT|O_APPEND;
  963|      0|        else if ((p = startswith(mode, "a")))
  ------------------
  |  Branch (963:18): [True: 0, False: 0]
  ------------------
  964|      0|                flags = O_WRONLY|O_CREAT|O_APPEND;
  965|      0|        else
  966|      0|                return -EINVAL;
  967|       |
  968|  47.7k|        for (; *p != 0; p++) {
  ------------------
  |  Branch (968:16): [True: 23.8k, False: 23.8k]
  ------------------
  969|       |
  970|  23.8k|                switch (*p) {
  971|       |
  972|  23.8k|                case 'e':
  ------------------
  |  Branch (972:17): [True: 23.8k, False: 0]
  ------------------
  973|  23.8k|                        flags |= O_CLOEXEC;
  974|  23.8k|                        break;
  975|       |
  976|      0|                case 'x':
  ------------------
  |  Branch (976:17): [True: 0, False: 23.8k]
  ------------------
  977|      0|                        flags |= O_EXCL;
  978|      0|                        break;
  979|       |
  980|      0|                case 'm':
  ------------------
  |  Branch (980:17): [True: 0, False: 23.8k]
  ------------------
  981|       |                        /* ignore this here, fdopen() might care later though */
  982|      0|                        break;
  983|       |
  984|      0|                case 'c': /* not sure what to do about this one */
  ------------------
  |  Branch (984:17): [True: 0, False: 23.8k]
  ------------------
  985|      0|                default:
  ------------------
  |  Branch (985:17): [True: 0, False: 23.8k]
  ------------------
  986|      0|                        return -EINVAL;
  987|  23.8k|                }
  988|  23.8k|        }
  989|       |
  990|  23.8k|        return flags;
  991|  23.8k|}
xfopenat_full:
 1075|  3.12k|                FILE **ret) {
 1076|       |
 1077|  3.12k|        FILE *f = NULL;  /* avoid false maybe-uninitialized warning */
 1078|  3.12k|        int r;
 1079|       |
 1080|  3.12k|        assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
  ------------------
  |  |   72|  3.12k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.12k|        do {                                                            \
  |  |  |  |   59|  3.12k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  6.24k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.12k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 3.12k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 3.12k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.12k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.12k|        } while (false)
  |  |  ------------------
  ------------------
 1081|  3.12k|        assert(path);
  ------------------
  |  |   72|  3.12k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.12k|        do {                                                            \
  |  |  |  |   59|  3.12k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.12k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.12k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.12k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.12k|        } while (false)
  |  |  ------------------
  ------------------
 1082|  3.12k|        assert(mode);
  ------------------
  |  |   72|  3.12k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.12k|        do {                                                            \
  |  |  |  |   59|  3.12k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.12k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.12k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.12k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.12k|        } while (false)
  |  |  ------------------
  ------------------
 1083|  3.12k|        assert(ret);
  ------------------
  |  |   72|  3.12k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.12k|        do {                                                            \
  |  |  |  |   59|  3.12k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.12k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.12k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.12k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.12k|        } while (false)
  |  |  ------------------
  ------------------
 1084|       |
 1085|  3.12k|        r = xfopenat_regular(dir_fd, path, mode, open_flags, &f);
 1086|  3.12k|        if (r == -ENXIO && FLAGS_SET(flags, XFOPEN_SOCKET)) {
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1086:13): [True: 0, False: 3.12k]
  ------------------
 1087|       |                /* ENXIO is what Linux returns if we open a node that is an AF_UNIX socket */
 1088|      0|                r = xfopenat_unix_socket(dir_fd, path, bind_name, &f);
 1089|      0|                if (IN_SET(r, -ENOTSOCK, -EINVAL))
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
 1090|      0|                        return -ENXIO; /* propagate original error if this is not a socket after all */
 1091|      0|        }
 1092|  3.12k|        if (r < 0)
  ------------------
  |  Branch (1092:13): [True: 999, False: 2.12k]
  ------------------
 1093|    999|                return r;
 1094|       |
 1095|  2.12k|        if (FLAGS_SET(flags, XFOPEN_UNLOCKED))
  ------------------
  |  |  414|  2.12k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 2.12k, False: 0]
  |  |  ------------------
  ------------------
 1096|  2.12k|                (void) __fsetlocking(f, FSETLOCKING_BYCALLER);
 1097|       |
 1098|  2.12k|        *ret = f;
 1099|  2.12k|        return 0;
 1100|  3.12k|}
search_and_open:
 1207|    788|                char **ret_path) {
 1208|       |
 1209|    788|        _cleanup_strv_free_ char **copy = NULL;
  ------------------
  |  |   21|    788|#define _cleanup_strv_free_ _cleanup_(strv_freep)
  |  |  ------------------
  |  |  |  |   78|    788|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1210|       |
 1211|    788|        assert(path);
  ------------------
  |  |   72|    788|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    788|        do {                                                            \
  |  |  |  |   59|    788|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    788|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 788]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    788|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    788|        } while (false)
  |  |  ------------------
  ------------------
 1212|       |
 1213|    788|        copy = strv_copy((char**) search);
 1214|    788|        if (!copy)
  ------------------
  |  Branch (1214:13): [True: 0, False: 788]
  ------------------
 1215|      0|                return -ENOMEM;
 1216|       |
 1217|    788|        return search_and_open_internal(path, mode, root, copy, ret_fd, ret_path);
 1218|    788|}
search_and_fopen_nulstr:
 1285|    788|                char **ret_path) {
 1286|       |
 1287|    788|        _cleanup_strv_free_ char **l = NULL;
  ------------------
  |  |   21|    788|#define _cleanup_strv_free_ _cleanup_(strv_freep)
  |  |  ------------------
  |  |  |  |   78|    788|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1288|       |
 1289|    788|        assert(path);
  ------------------
  |  |   72|    788|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    788|        do {                                                            \
  |  |  |  |   59|    788|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    788|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 788]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    788|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    788|        } while (false)
  |  |  ------------------
  ------------------
 1290|    788|        assert(mode || !ret_file);
  ------------------
  |  |   72|    788|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    788|        do {                                                            \
  |  |  |  |   59|    788|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    788|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 788]
  |  |  |  |  |  |  |  Branch (95:44): [True: 788, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    788|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    788|        } while (false)
  |  |  ------------------
  ------------------
 1291|       |
 1292|    788|        l = strv_split_nulstr(search);
 1293|    788|        if (!l)
  ------------------
  |  Branch (1293:13): [True: 0, False: 788]
  ------------------
 1294|      0|                return -ENOMEM;
 1295|       |
 1296|    788|        return search_and_fopen_internal(path, mode, root, l, ret_file, ret_path);
 1297|    788|}
read_line_full:
 1442|  1.80M|int read_line_full(FILE *f, size_t limit, ReadLineFlags flags, char **ret) {
 1443|  1.80M|        _cleanup_free_ char *buffer = NULL;
  ------------------
  |  |   82|  1.80M|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  1.80M|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1444|  1.80M|        size_t n = 0, count = 0;
 1445|  1.80M|        int r;
 1446|       |
 1447|  1.80M|        assert(f);
  ------------------
  |  |   72|  1.80M|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.80M|        do {                                                            \
  |  |  |  |   59|  1.80M|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.80M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.80M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.80M|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.80M|        } while (false)
  |  |  ------------------
  ------------------
 1448|       |
 1449|       |        /* Something like a bounded version of getline().
 1450|       |         *
 1451|       |         * Considers EOF, \n, \r and \0 end of line delimiters (or combinations of these), and does not include these
 1452|       |         * delimiters in the string returned. Specifically, recognizes the following combinations of markers as line
 1453|       |         * endings:
 1454|       |         *
 1455|       |         *     • \n        (UNIX)
 1456|       |         *     • \r        (old MacOS)
 1457|       |         *     • \0        (C strings)
 1458|       |         *     • \n\0
 1459|       |         *     • \r\0
 1460|       |         *     • \r\n      (Windows)
 1461|       |         *     • \n\r
 1462|       |         *     • \r\n\0
 1463|       |         *     • \n\r\0
 1464|       |         *
 1465|       |         * Returns the number of bytes read from the files (i.e. including delimiters — this hence usually differs from
 1466|       |         * the number of characters in the returned string). When EOF is hit, 0 is returned.
 1467|       |         *
 1468|       |         * The input parameter limit is the maximum numbers of characters in the returned string, i.e. excluding
 1469|       |         * delimiters. If the limit is hit we fail and return -ENOBUFS.
 1470|       |         *
 1471|       |         * If a line shall be skipped ret may be initialized as NULL. */
 1472|       |
 1473|  1.80M|        if (ret) {
  ------------------
  |  Branch (1473:13): [True: 1.80M, False: 0]
  ------------------
 1474|  1.80M|                if (!GREEDY_REALLOC(buffer, 1))
  ------------------
  |  |  139|  1.80M|        greedy_realloc((void**) &(array), (need), sizeof((array)[0]))
  ------------------
  |  Branch (1474:21): [True: 0, False: 1.80M]
  ------------------
 1475|      0|                        return -ENOMEM;
 1476|  1.80M|        }
 1477|       |
 1478|  1.80M|        {
 1479|  1.80M|                _unused_ _cleanup_(funlockfilep) FILE *flocked = f;
  ------------------
  |  |   96|  1.80M|#define _unused_ __attribute__((__unused__))
  ------------------
 1480|  1.80M|                EndOfLineMarker previous_eol = EOL_NONE;
 1481|  1.80M|                flockfile(f);
 1482|       |
 1483|  19.9M|                for (;;) {
 1484|  19.9M|                        EndOfLineMarker eol;
 1485|  19.9M|                        char c;
 1486|       |
 1487|  19.9M|                        if (n >= limit)
  ------------------
  |  Branch (1487:29): [True: 0, False: 19.9M]
  ------------------
 1488|      0|                                return -ENOBUFS;
 1489|       |
 1490|  19.9M|                        if (count >= INT_MAX) /* We couldn't return the counter anymore as "int", hence refuse this */
  ------------------
  |  Branch (1490:29): [True: 0, False: 19.9M]
  ------------------
 1491|      0|                                return -ENOBUFS;
 1492|       |
 1493|  19.9M|                        r = safe_fgetc(f, &c);
 1494|  19.9M|                        if (r < 0)
  ------------------
  |  Branch (1494:29): [True: 0, False: 19.9M]
  ------------------
 1495|      0|                                return r;
 1496|  19.9M|                        if (r == 0) /* EOF is definitely EOL */
  ------------------
  |  Branch (1496:29): [True: 45.8k, False: 19.9M]
  ------------------
 1497|  45.8k|                                break;
 1498|       |
 1499|  19.9M|                        eol = categorize_eol(c, flags);
 1500|       |
 1501|  19.9M|                        if (FLAGS_SET(previous_eol, EOL_ZERO) ||
  ------------------
  |  |  414|  39.9M|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 398k, False: 19.5M]
  |  |  ------------------
  ------------------
 1502|  19.9M|                            (eol == EOL_NONE && previous_eol != EOL_NONE) ||
  ------------------
  |  Branch (1502:30): [True: 17.1M, False: 2.39M]
  |  Branch (1502:49): [True: 735k, False: 16.4M]
  ------------------
 1503|  19.9M|                            (eol != EOL_NONE && (previous_eol & eol) != 0)) {
  ------------------
  |  Branch (1503:30): [True: 2.39M, False: 16.4M]
  |  Branch (1503:49): [True: 630k, False: 1.76M]
  ------------------
 1504|       |                                /* Previous char was a NUL? This is not an EOL, but the previous char was? This type of
 1505|       |                                 * EOL marker has been seen right before?  In either of these three cases we are
 1506|       |                                 * done. But first, let's put this character back in the queue. (Note that we have to
 1507|       |                                 * cast this to (unsigned char) here as ungetc() expects a positive 'int', and if we
 1508|       |                                 * are on an architecture where 'char' equals 'signed char' we need to ensure we don't
 1509|       |                                 * pass a negative value here. That said, to complicate things further ungetc() is
 1510|       |                                 * actually happy with most negative characters and implicitly casts them back to
 1511|       |                                 * positive ones as needed, except for \xff (aka -1, aka EOF), which it refuses. What a
 1512|       |                                 * godawful API!) */
 1513|  1.76M|                                assert_se(ungetc((unsigned char) c, f) != EOF);
  ------------------
  |  |   65|  1.76M|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.76M|        do {                                                            \
  |  |  |  |   59|  1.76M|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.76M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.76M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.76M|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.76M|        } while (false)
  |  |  ------------------
  ------------------
 1514|  1.76M|                                break;
 1515|  1.76M|                        }
 1516|       |
 1517|  18.1M|                        count++;
 1518|       |
 1519|  18.1M|                        if (eol != EOL_NONE) {
  ------------------
  |  Branch (1519:29): [True: 1.76M, False: 16.4M]
  ------------------
 1520|       |                                /* If we are on a tty, we can't shouldn't wait for more input, because that
 1521|       |                                 * generally means waiting for the user, interactively. In the case of a TTY
 1522|       |                                 * we expect only \n as the single EOL marker, so we are in the lucky
 1523|       |                                 * position that there is no need to wait. We check this condition last, to
 1524|       |                                 * avoid isatty() check if not necessary. */
 1525|       |
 1526|  1.76M|                                if ((flags & (READ_LINE_IS_A_TTY|READ_LINE_NOT_A_TTY)) == 0) {
  ------------------
  |  Branch (1526:37): [True: 1.76M, False: 4.28k]
  ------------------
 1527|  1.76M|                                        int fd;
 1528|       |
 1529|  1.76M|                                        fd = fileno(f);
 1530|  1.76M|                                        if (fd < 0) /* Maybe an fmemopen() stream? Handle this gracefully,
  ------------------
  |  Branch (1530:45): [True: 0, False: 1.76M]
  ------------------
 1531|       |                                                     * and don't call isatty() on an invalid fd */
 1532|      0|                                                flags |= READ_LINE_NOT_A_TTY;
 1533|  1.76M|                                        else
 1534|  1.76M|                                                flags |= isatty_safe(fd) ? READ_LINE_IS_A_TTY : READ_LINE_NOT_A_TTY;
  ------------------
  |  Branch (1534:58): [True: 0, False: 1.76M]
  ------------------
 1535|  1.76M|                                }
 1536|  1.76M|                                if (FLAGS_SET(flags, READ_LINE_IS_A_TTY))
  ------------------
  |  |  414|  1.76M|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 1.76M]
  |  |  ------------------
  ------------------
 1537|      0|                                        break;
 1538|  1.76M|                        }
 1539|       |
 1540|  18.1M|                        if (eol != EOL_NONE) {
  ------------------
  |  Branch (1540:29): [True: 1.76M, False: 16.4M]
  ------------------
 1541|  1.76M|                                previous_eol |= eol;
 1542|  1.76M|                                continue;
 1543|  1.76M|                        }
 1544|       |
 1545|  16.4M|                        if (ret) {
  ------------------
  |  Branch (1545:29): [True: 16.4M, False: 0]
  ------------------
 1546|  16.4M|                                if (!GREEDY_REALLOC(buffer, n + 2))
  ------------------
  |  |  139|  16.4M|        greedy_realloc((void**) &(array), (need), sizeof((array)[0]))
  ------------------
  |  Branch (1546:37): [True: 0, False: 16.4M]
  ------------------
 1547|      0|                                        return -ENOMEM;
 1548|       |
 1549|  16.4M|                                buffer[n] = c;
 1550|  16.4M|                        }
 1551|       |
 1552|  16.4M|                        n++;
 1553|  16.4M|                }
 1554|  1.80M|        }
 1555|       |
 1556|  1.80M|        if (ret) {
  ------------------
  |  Branch (1556:13): [True: 1.80M, False: 0]
  ------------------
 1557|  1.80M|                buffer[n] = 0;
 1558|       |
 1559|  1.80M|                *ret = TAKE_PTR(buffer);
  ------------------
  |  |  388|  1.80M|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  1.80M|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  1.80M|        ({                                                       \
  |  |  |  |  |  |  381|  1.80M|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  1.80M|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  1.80M|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  1.80M|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  1.80M|                _var_;                                           \
  |  |  |  |  |  |  386|  1.80M|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1560|  1.80M|        }
 1561|       |
 1562|  1.80M|        return (int) count;
 1563|  1.80M|}
safe_fgetc:
 1589|  19.9M|int safe_fgetc(FILE *f, char *ret) {
 1590|  19.9M|        int k;
 1591|       |
 1592|  19.9M|        assert(f);
  ------------------
  |  |   72|  19.9M|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  19.9M|        do {                                                            \
  |  |  |  |   59|  19.9M|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  19.9M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 19.9M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  19.9M|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  19.9M|        } while (false)
  |  |  ------------------
  ------------------
 1593|       |
 1594|       |        /* A safer version of plain fgetc(): let's propagate the error that happened while reading as such, and
 1595|       |         * separate the EOF condition from the byte read, to avoid those confusion signed/unsigned issues fgetc()
 1596|       |         * has. */
 1597|       |
 1598|  19.9M|        errno = 0;
 1599|  19.9M|        k = fgetc(f);
 1600|  19.9M|        if (k == EOF) {
  ------------------
  |  Branch (1600:13): [True: 45.8k, False: 19.9M]
  ------------------
 1601|  45.8k|                if (ferror(f))
  ------------------
  |  Branch (1601:21): [True: 0, False: 45.8k]
  ------------------
 1602|      0|                        return errno_or_else(EIO);
 1603|       |
 1604|  45.8k|                if (ret)
  ------------------
  |  Branch (1604:21): [True: 45.8k, False: 0]
  ------------------
 1605|  45.8k|                        *ret = 0;
 1606|       |
 1607|  45.8k|                return 0;
 1608|  45.8k|        }
 1609|       |
 1610|  19.9M|        if (ret)
  ------------------
  |  Branch (1610:13): [True: 19.9M, False: 0]
  ------------------
 1611|  19.9M|                *ret = k;
 1612|       |
 1613|  19.9M|        return 1;
 1614|  19.9M|}
warn_file_is_world_accessible:
 1616|  10.1k|int warn_file_is_world_accessible(const char *filename, struct stat *st, const char *unit, unsigned line) {
 1617|  10.1k|        struct stat _st;
 1618|       |
 1619|  10.1k|        if (!filename)
  ------------------
  |  Branch (1619:13): [True: 0, False: 10.1k]
  ------------------
 1620|      0|                return 0;
 1621|       |
 1622|  10.1k|        if (!st) {
  ------------------
  |  Branch (1622:13): [True: 9.97k, False: 198]
  ------------------
 1623|  9.97k|                if (stat(filename, &_st) < 0)
  ------------------
  |  Branch (1623:21): [True: 0, False: 9.97k]
  ------------------
 1624|      0|                        return -errno;
 1625|  9.97k|                st = &_st;
 1626|  9.97k|        }
 1627|       |
 1628|  10.1k|        if ((st->st_mode & S_IRWXO) == 0)
  ------------------
  |  Branch (1628:13): [True: 9.97k, False: 198]
  ------------------
 1629|  9.97k|                return 0;
 1630|       |
 1631|    198|        if (unit)
  ------------------
  |  Branch (1631:13): [True: 0, False: 198]
  ------------------
 1632|      0|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|      0|        ({                                                              \
  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|      0|        })
  ------------------
 1633|    198|                           "%s has %04o mode that is too permissive, please adjust the ownership and access mode.",
 1634|    198|                           filename, st->st_mode & 07777);
 1635|    198|        else
 1636|    198|                log_warning("%s has %04o mode that is too permissive, please adjust the ownership and access mode.",
  ------------------
  |  |  223|    198|#define log_warning(...)   log_full(LOG_WARNING, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|    198|        ({                                                             \
  |  |  |  |  212|    198|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|    198|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|    198|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|    198|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|    198|        do {                                                            \
  |  |  |  |  |  |  |  |   59|    198|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|    198|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 198]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|    198|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|    198|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|    198|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|    198|        ({                                                              \
  |  |  |  |  |  |  190|    198|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|    198|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 198]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|    198|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|    198|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|    396|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|    198|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|    198|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 198]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    198|        })
  |  |  |  |  ------------------
  |  |  |  |  215|    198|        })
  |  |  ------------------
  ------------------
 1637|    198|                            filename, st->st_mode & 07777);
 1638|    198|        return 0;
 1639|  10.1k|}
fileio.c:xfopenat_regular:
  993|  3.12k|static int xfopenat_regular(int dir_fd, const char *path, const char *mode, int open_flags, FILE **ret) {
  994|  3.12k|        FILE *f;
  995|       |
  996|       |        /* A combination of fopen() with openat() */
  997|       |
  998|  3.12k|        assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
  ------------------
  |  |   72|  3.12k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.12k|        do {                                                            \
  |  |  |  |   59|  3.12k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  6.24k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.12k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 3.12k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 3.12k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.12k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.12k|        } while (false)
  |  |  ------------------
  ------------------
  999|  3.12k|        assert(path);
  ------------------
  |  |   72|  3.12k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.12k|        do {                                                            \
  |  |  |  |   59|  3.12k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.12k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.12k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.12k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.12k|        } while (false)
  |  |  ------------------
  ------------------
 1000|  3.12k|        assert(mode);
  ------------------
  |  |   72|  3.12k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.12k|        do {                                                            \
  |  |  |  |   59|  3.12k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.12k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.12k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.12k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.12k|        } while (false)
  |  |  ------------------
  ------------------
 1001|  3.12k|        assert(ret);
  ------------------
  |  |   72|  3.12k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.12k|        do {                                                            \
  |  |  |  |   59|  3.12k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.12k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.12k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.12k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.12k|        } while (false)
  |  |  ------------------
  ------------------
 1002|       |
 1003|  3.12k|        if (dir_fd == AT_FDCWD && open_flags == 0)
  ------------------
  |  |  308|  6.24k|#define AT_FDCWD                -100
  ------------------
  |  Branch (1003:13): [True: 3.12k, False: 0]
  |  Branch (1003:35): [True: 3.12k, False: 0]
  ------------------
 1004|  3.12k|                f = fopen(path, mode);
 1005|      0|        else {
 1006|      0|                _cleanup_close_ int fd = -EBADF;
  ------------------
  |  |   60|      0|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1007|      0|                int mode_flags;
 1008|       |
 1009|      0|                mode_flags = fopen_mode_to_flags(mode);
 1010|      0|                if (mode_flags < 0)
  ------------------
  |  Branch (1010:21): [True: 0, False: 0]
  ------------------
 1011|      0|                        return mode_flags;
 1012|       |
 1013|      0|                fd = openat(dir_fd, path, mode_flags | open_flags);
 1014|      0|                if (fd < 0)
  ------------------
  |  Branch (1014:21): [True: 0, False: 0]
  ------------------
 1015|      0|                        return -errno;
 1016|       |
 1017|      0|                f = take_fdopen(&fd, mode);
 1018|      0|        }
 1019|  3.12k|        if (!f)
  ------------------
  |  Branch (1019:13): [True: 999, False: 2.12k]
  ------------------
 1020|    999|                return -errno;
 1021|       |
 1022|  2.12k|        *ret = f;
 1023|  2.12k|        return 0;
 1024|  3.12k|}
fileio.c:search_and_open_internal:
 1138|    788|                char **ret_path) {
 1139|       |
 1140|    788|        int r;
 1141|       |
 1142|    788|        assert(!ret_fd || !FLAGS_SET(mode, O_CREAT)); /* We don't support O_CREAT for this */
  ------------------
  |  |   72|    788|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    788|        do {                                                            \
  |  |  |  |   59|    788|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.57k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 788]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 788]
  |  |  |  |  |  |  |  Branch (95:44): [True: 788, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    788|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    788|        } while (false)
  |  |  ------------------
  ------------------
 1143|    788|        assert(path);
  ------------------
  |  |   72|    788|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    788|        do {                                                            \
  |  |  |  |   59|    788|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    788|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 788]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    788|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    788|        } while (false)
  |  |  ------------------
  ------------------
 1144|       |
 1145|    788|        if (path_is_absolute(path)) {
  ------------------
  |  Branch (1145:13): [True: 0, False: 788]
  ------------------
 1146|      0|                _cleanup_close_ int fd = -EBADF;
  ------------------
  |  |   60|      0|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1147|       |
 1148|      0|                if (ret_fd)
  ------------------
  |  Branch (1148:21): [True: 0, False: 0]
  ------------------
 1149|       |                        /* We only specify 0777 here to appease static analyzers, it's never used since we
 1150|       |                         * don't support O_CREAT here */
 1151|      0|                        r = fd = RET_NERRNO(open(path, mode, 0777));
 1152|      0|                else
 1153|      0|                        r = RET_NERRNO(access(path, mode));
 1154|      0|                if (r < 0)
  ------------------
  |  Branch (1154:21): [True: 0, False: 0]
  ------------------
 1155|      0|                        return r;
 1156|       |
 1157|      0|                if (ret_path) {
  ------------------
  |  Branch (1157:21): [True: 0, False: 0]
  ------------------
 1158|      0|                        r = path_simplify_alloc(path, ret_path);
 1159|      0|                        if (r < 0)
  ------------------
  |  Branch (1159:29): [True: 0, False: 0]
  ------------------
 1160|      0|                                return r;
 1161|      0|                }
 1162|       |
 1163|      0|                if (ret_fd)
  ------------------
  |  Branch (1163:21): [True: 0, False: 0]
  ------------------
 1164|      0|                        *ret_fd = TAKE_FD(fd);
  ------------------
  |  |   99|      0|#define TAKE_FD(fd) TAKE_GENERIC(fd, int, -EBADF)
  |  |  ------------------
  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  386|      0|        })
  |  |  ------------------
  ------------------
 1165|       |
 1166|      0|                return 0;
 1167|      0|        }
 1168|       |
 1169|    788|        if (!path_strv_resolve_uniq(search, root))
  ------------------
  |  Branch (1169:13): [True: 0, False: 788]
  ------------------
 1170|      0|                return -ENOMEM;
 1171|       |
 1172|  3.94k|        STRV_FOREACH(i, search) {
  ------------------
  |  |   10|    788|        _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |    7|  4.72k|        for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (7:41): [True: 4.72k, False: 0]
  |  |  |  |  |  Branch (7:52): [True: 3.94k, False: 788]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1173|  3.94k|                _cleanup_close_ int fd = -EBADF;
  ------------------
  |  |   60|  3.94k|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|  3.94k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1174|  3.94k|                _cleanup_free_ char *p = NULL;
  ------------------
  |  |   82|  3.94k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  3.94k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1175|       |
 1176|  3.94k|                p = path_join(root, *i, path);
  ------------------
  |  |   70|  3.94k|#define path_join(...) path_extend_internal(NULL, __VA_ARGS__, POINTER_MAX)
  |  |  ------------------
  |  |  |  |  159|  3.94k|#define POINTER_MAX ((void*) UINTPTR_MAX)
  |  |  ------------------
  ------------------
 1177|  3.94k|                if (!p)
  ------------------
  |  Branch (1177:21): [True: 0, False: 3.94k]
  ------------------
 1178|      0|                        return -ENOMEM;
 1179|       |
 1180|  3.94k|                if (ret_fd)
  ------------------
  |  Branch (1180:21): [True: 3.94k, False: 0]
  ------------------
 1181|       |                        /* as above, 0777 is static analyzer appeasement */
 1182|  3.94k|                        r = fd = RET_NERRNO(open(p, mode, 0777));
 1183|      0|                else
 1184|      0|                        r = RET_NERRNO(access(p, F_OK));
 1185|  3.94k|                if (r >= 0) {
  ------------------
  |  Branch (1185:21): [True: 0, False: 3.94k]
  ------------------
 1186|      0|                        if (ret_path)
  ------------------
  |  Branch (1186:29): [True: 0, False: 0]
  ------------------
 1187|      0|                                *ret_path = path_simplify(TAKE_PTR(p));
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1188|       |
 1189|      0|                        if (ret_fd)
  ------------------
  |  Branch (1189:29): [True: 0, False: 0]
  ------------------
 1190|      0|                                *ret_fd = TAKE_FD(fd);
  ------------------
  |  |   99|      0|#define TAKE_FD(fd) TAKE_GENERIC(fd, int, -EBADF)
  |  |  ------------------
  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  386|      0|        })
  |  |  ------------------
  ------------------
 1191|       |
 1192|      0|                        return 0;
 1193|      0|                }
 1194|  3.94k|                if (r != -ENOENT)
  ------------------
  |  Branch (1194:21): [True: 0, False: 3.94k]
  ------------------
 1195|      0|                        return r;
 1196|  3.94k|        }
 1197|       |
 1198|    788|        return -ENOENT;
 1199|    788|}
fileio.c:search_and_fopen_internal:
 1226|    788|                char **ret_path) {
 1227|       |
 1228|    788|        _cleanup_free_ char *found_path = NULL;
  ------------------
  |  |   82|    788|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    788|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1229|    788|        _cleanup_close_ int fd = -EBADF;
  ------------------
  |  |   60|    788|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|    788|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1230|    788|        int r;
 1231|       |
 1232|    788|        assert(path);
  ------------------
  |  |   72|    788|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    788|        do {                                                            \
  |  |  |  |   59|    788|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    788|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 788]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    788|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    788|        } while (false)
  |  |  ------------------
  ------------------
 1233|    788|        assert(mode || !ret_file);
  ------------------
  |  |   72|    788|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    788|        do {                                                            \
  |  |  |  |   59|    788|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    788|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 788]
  |  |  |  |  |  |  |  Branch (95:44): [True: 788, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    788|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    788|        } while (false)
  |  |  ------------------
  ------------------
 1234|       |
 1235|    788|        r = search_and_open(
 1236|    788|                        path,
 1237|    788|                        mode ? fopen_mode_to_flags(mode) : 0,
  ------------------
  |  Branch (1237:25): [True: 788, False: 0]
  ------------------
 1238|    788|                        root,
 1239|    788|                        search,
 1240|    788|                        ret_file ? &fd : NULL,
  ------------------
  |  Branch (1240:25): [True: 788, False: 0]
  ------------------
 1241|    788|                        ret_path ? &found_path : NULL);
  ------------------
  |  Branch (1241:25): [True: 788, False: 0]
  ------------------
 1242|    788|        if (r < 0)
  ------------------
  |  Branch (1242:13): [True: 788, False: 0]
  ------------------
 1243|    788|                return r;
 1244|       |
 1245|      0|        if (ret_file) {
  ------------------
  |  Branch (1245:13): [True: 0, False: 0]
  ------------------
 1246|      0|                FILE *f = take_fdopen(&fd, mode);
 1247|      0|                if (!f)
  ------------------
  |  Branch (1247:21): [True: 0, False: 0]
  ------------------
 1248|      0|                        return -errno;
 1249|       |
 1250|      0|                *ret_file = f;
 1251|      0|        }
 1252|       |
 1253|      0|        if (ret_path)
  ------------------
  |  Branch (1253:13): [True: 0, False: 0]
  ------------------
 1254|      0|                *ret_path = TAKE_PTR(found_path);
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1255|       |
 1256|      0|        return 0;
 1257|      0|}
fileio.c:categorize_eol:
 1425|  19.9M|static EndOfLineMarker categorize_eol(char c, ReadLineFlags flags) {
 1426|       |
 1427|  19.9M|        if (!FLAGS_SET(flags, READ_LINE_ONLY_NUL)) {
  ------------------
  |  |  414|  19.9M|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (1427:13): [True: 19.9M, False: 0]
  ------------------
 1428|  19.9M|                if (c == '\n')
  ------------------
  |  Branch (1428:21): [True: 771k, False: 19.1M]
  ------------------
 1429|   771k|                        return EOL_TEN;
 1430|  19.1M|                if (c == '\r')
  ------------------
  |  Branch (1430:21): [True: 1.23M, False: 17.9M]
  ------------------
 1431|  1.23M|                        return EOL_THIRTEEN;
 1432|  19.1M|        }
 1433|       |
 1434|  17.9M|        if (c == '\0')
  ------------------
  |  Branch (1434:13): [True: 704k, False: 17.2M]
  ------------------
 1435|   704k|                return EOL_ZERO;
 1436|       |
 1437|  17.2M|        return EOL_NONE;
 1438|  17.9M|}

condition.c:read_full_virtual_file:
   79|      1|static inline int read_full_virtual_file(const char *filename, char **ret_contents, size_t *ret_size) {
   80|      1|        return read_virtual_file(filename, SIZE_MAX, ret_contents, ret_size);
   81|      1|}
condition.c:read_virtual_file:
   76|      9|static inline int read_virtual_file(const char *filename, size_t max_size, char **ret_contents, size_t *ret_size) {
   77|      9|        return read_virtual_file_at(AT_FDCWD, filename, max_size, ret_contents, ret_size);
  ------------------
  |  |  308|      9|#define AT_FDCWD                -100
  ------------------
   78|      9|}
conf-parser.c:read_line:
  144|  1.80M|static inline int read_line(FILE *f, size_t limit, char **ret) {
  145|  1.80M|        return read_line_full(f, limit, 0, ret);
  146|  1.80M|}
fileio.c:fopen_unlocked_at:
  112|      4|static inline int fopen_unlocked_at(int dir_fd, const char *path, const char *mode, int open_flags, FILE **ret) {
  113|      4|        return xfopenat_full(dir_fd, path, mode, open_flags, XFOPEN_UNLOCKED, NULL, ret);
  114|      4|}
fileio.c:read_line:
  144|     10|static inline int read_line(FILE *f, size_t limit, char **ret) {
  145|     10|        return read_line_full(f, limit, 0, ret);
  146|     10|}
fileio.c:fopen_unlocked:
  115|      1|static inline int fopen_unlocked(const char *path, const char *mode, FILE **ret) {
  116|      1|        return fopen_unlocked_at(AT_FDCWD, path, mode, 0, ret);
  ------------------
  |  |  308|      1|#define AT_FDCWD                -100
  ------------------
  117|      1|}
process-util.c:read_virtual_file:
   76|     72|static inline int read_virtual_file(const char *filename, size_t max_size, char **ret_contents, size_t *ret_size) {
   77|     72|        return read_virtual_file_at(AT_FDCWD, filename, max_size, ret_contents, ret_size);
   78|     72|}
virt.c:read_one_line_file:
   61|      3|static inline int read_one_line_file(const char *filename, char **ret) {
   62|      3|        return read_one_line_file_at(AT_FDCWD, filename, ret);
   63|      3|}

stat_warn_permissions:
  339|  23.0k|int stat_warn_permissions(const char *path, const struct stat *st) {
  340|  23.0k|        assert(path);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
  341|  23.0k|        assert(st);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
  342|       |
  343|       |        /* Don't complain if we are reading something that is not a file, for example /dev/null */
  344|  23.0k|        if (!S_ISREG(st->st_mode))
  ------------------
  |  Branch (344:13): [True: 0, False: 23.0k]
  ------------------
  345|      0|                return 0;
  346|       |
  347|  23.0k|        if (st->st_mode & 0111)
  ------------------
  |  Branch (347:13): [True: 0, False: 23.0k]
  ------------------
  348|  23.0k|                log_warning("Configuration file %s is marked executable. Please remove executable permission bits. Proceeding anyway.", path);
  ------------------
  |  |  223|      0|#define log_warning(...)   log_full(LOG_WARNING, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
  349|       |
  350|  23.0k|        if (st->st_mode & 0002)
  ------------------
  |  Branch (350:13): [True: 0, False: 23.0k]
  ------------------
  351|  23.0k|                log_warning("Configuration file %s is marked world-writable. Please remove world writability permission bits. Proceeding anyway.", path);
  ------------------
  |  |  223|      0|#define log_warning(...)   log_full(LOG_WARNING, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
  352|       |
  353|  23.0k|        if (getpid_cached() == 1 && (st->st_mode & 0044) != 0044)
  ------------------
  |  Branch (353:13): [True: 0, False: 23.0k]
  |  Branch (353:37): [True: 0, False: 0]
  ------------------
  354|  23.0k|                log_warning("Configuration file %s is marked world-inaccessible. This has no effect as configuration data is accessible via APIs without restrictions. Proceeding anyway.", path);
  ------------------
  |  |  223|      0|#define log_warning(...)   log_full(LOG_WARNING, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
  355|       |
  356|  23.0k|        return 0;
  357|  23.0k|}
openat_report_new:
 1093|  23.0k|int openat_report_new(int dirfd, const char *pathname, int flags, mode_t mode, bool *ret_newly_created) {
 1094|  23.0k|        int fd;
 1095|       |
 1096|       |        /* Just like openat(), but adds one thing: optionally returns whether we created the file anew or if
 1097|       |         * it already existed before. This is only relevant if O_CREAT is set without O_EXCL, and thus will
 1098|       |         * shortcut to openat() otherwise.
 1099|       |         *
 1100|       |         * Note that this routine is a bit more strict with symlinks than regular openat() is. If O_NOFOLLOW
 1101|       |         * is not specified, then we'll follow the symlink when opening an existing file but we will *not*
 1102|       |         * follow it when creating a new one (because that's a terrible UNIX misfeature and generally a
 1103|       |         * security hole). */
 1104|       |
 1105|  23.0k|        if (!FLAGS_SET(flags, O_CREAT) || FLAGS_SET(flags, O_EXCL)) {
  ------------------
  |  |  414|  46.1k|        ((~(v) & (flags)) == 0)
  ------------------
                      if (!FLAGS_SET(flags, O_CREAT) || FLAGS_SET(flags, O_EXCL)) {
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1105:13): [True: 23.0k, False: 0]
  ------------------
 1106|  23.0k|                fd = openat(dirfd, pathname, flags, mode);
 1107|  23.0k|                if (fd < 0)
  ------------------
  |  Branch (1107:21): [True: 0, False: 23.0k]
  ------------------
 1108|      0|                        return -errno;
 1109|       |
 1110|  23.0k|                if (ret_newly_created)
  ------------------
  |  Branch (1110:21): [True: 23.0k, False: 0]
  ------------------
 1111|  23.0k|                        *ret_newly_created = FLAGS_SET(flags, O_CREAT);
  ------------------
  |  |  414|  23.0k|        ((~(v) & (flags)) == 0)
  ------------------
 1112|  23.0k|                return fd;
 1113|  23.0k|        }
 1114|       |
 1115|      0|        for (unsigned attempts = 7;;) {
 1116|       |                /* First, attempt to open without O_CREAT/O_EXCL, i.e. open existing file */
 1117|      0|                fd = openat(dirfd, pathname, flags & ~(O_CREAT | O_EXCL), mode);
 1118|      0|                if (fd >= 0) {
  ------------------
  |  Branch (1118:21): [True: 0, False: 0]
  ------------------
 1119|      0|                        if (ret_newly_created)
  ------------------
  |  Branch (1119:29): [True: 0, False: 0]
  ------------------
 1120|      0|                                *ret_newly_created = false;
 1121|      0|                        return fd;
 1122|      0|                }
 1123|      0|                if (errno != ENOENT)
  ------------------
  |  Branch (1123:21): [True: 0, False: 0]
  ------------------
 1124|      0|                        return -errno;
 1125|       |
 1126|       |                /* So the file didn't exist yet, hence create it with O_CREAT/O_EXCL/O_NOFOLLOW. */
 1127|      0|                fd = openat(dirfd, pathname, flags | O_CREAT | O_EXCL | O_NOFOLLOW, mode);
 1128|      0|                if (fd >= 0) {
  ------------------
  |  Branch (1128:21): [True: 0, False: 0]
  ------------------
 1129|      0|                        if (ret_newly_created)
  ------------------
  |  Branch (1129:29): [True: 0, False: 0]
  ------------------
 1130|      0|                                *ret_newly_created = true;
 1131|      0|                        return fd;
 1132|      0|                }
 1133|      0|                if (errno != EEXIST)
  ------------------
  |  Branch (1133:21): [True: 0, False: 0]
  ------------------
 1134|      0|                        return -errno;
 1135|       |
 1136|       |                /* Hmm, so now we got EEXIST? Then someone might have created the file between the first and
 1137|       |                 * second call to openat(). Let's try again but with a limit so we don't spin forever. */
 1138|       |
 1139|      0|                if (--attempts == 0) /* Give up eventually, somebody is playing with us */
  ------------------
  |  Branch (1139:21): [True: 0, False: 0]
  ------------------
 1140|      0|                        return -EEXIST;
 1141|      0|        }
 1142|      0|}
xopenat_full:
 1144|  23.0k|int xopenat_full(int dir_fd, const char *path, int open_flags, XOpenFlags xopen_flags, mode_t mode) {
 1145|  23.0k|        _cleanup_close_ int fd = -EBADF;
  ------------------
  |  |   60|  23.0k|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|  23.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1146|  23.0k|        bool made_dir = false, made_file = false;
 1147|  23.0k|        int r;
 1148|       |
 1149|  23.0k|        assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  46.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 23.0k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 23.0k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
 1150|       |
 1151|       |        /* An inode cannot be both a directory and a regular file at the same time. */
 1152|  23.0k|        assert(!(FLAGS_SET(open_flags, O_DIRECTORY) && FLAGS_SET(xopen_flags, XO_REGULAR)));
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 23.0k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
 1153|       |
 1154|       |        /* This is like openat(), but has a few tricks up its sleeves, extending behaviour:
 1155|       |         *
 1156|       |         *   • O_DIRECTORY|O_CREAT is supported, which causes a directory to be created, and immediately
 1157|       |         *     opened. When used with the XO_SUBVOLUME flag this will even create a btrfs subvolume.
 1158|       |         *
 1159|       |         *   • If O_CREAT is used with XO_LABEL, any created file will be immediately relabelled.
 1160|       |         *
 1161|       |         *   • If the path is specified NULL or empty, behaves like fd_reopen().
 1162|       |         *
 1163|       |         *   • If XO_NOCOW is specified will turn on the NOCOW btrfs flag on the file, if available.
 1164|       |         *
 1165|       |         *   • if XO_REGULAR is specified will return an error if inode is not a regular file.
 1166|       |         *
 1167|       |         *   • If mode is specified as MODE_INVALID, we'll use 0755 for dirs, and 0644 for regular files.
 1168|       |         */
 1169|       |
 1170|  23.0k|        if (mode == MODE_INVALID)
  ------------------
  |  |  313|  23.0k|#define MODE_INVALID            ((mode_t) -1)
  ------------------
  |  Branch (1170:13): [True: 23.0k, False: 13]
  ------------------
 1171|  23.0k|                mode = (open_flags & O_DIRECTORY) ? 0755 : 0644;
  ------------------
  |  Branch (1171:24): [True: 0, False: 23.0k]
  ------------------
 1172|       |
 1173|  23.0k|        if (isempty(path)) {
  ------------------
  |  Branch (1173:13): [True: 0, False: 23.0k]
  ------------------
 1174|      0|                assert(!FLAGS_SET(open_flags, O_CREAT|O_EXCL));
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 1175|       |
 1176|      0|                if (FLAGS_SET(xopen_flags, XO_REGULAR)) {
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1177|      0|                        r = fd_verify_regular(dir_fd);
 1178|      0|                        if (r < 0)
  ------------------
  |  Branch (1178:29): [True: 0, False: 0]
  ------------------
 1179|      0|                                return r;
 1180|      0|                }
 1181|       |
 1182|      0|                return fd_reopen(dir_fd, open_flags & ~O_NOFOLLOW);
 1183|      0|        }
 1184|       |
 1185|  23.0k|        bool call_label_ops_post = false;
 1186|       |
 1187|  23.0k|        if (FLAGS_SET(open_flags, O_CREAT) && FLAGS_SET(xopen_flags, XO_LABEL)) {
  ------------------
  |  |  414|  46.1k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 23.0k]
  |  |  ------------------
  ------------------
                      if (FLAGS_SET(open_flags, O_CREAT) && FLAGS_SET(xopen_flags, XO_LABEL)) {
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1188|      0|                r = label_ops_pre(dir_fd, path, FLAGS_SET(open_flags, O_DIRECTORY) ? S_IFDIR : S_IFREG);
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1189|      0|                if (r < 0)
  ------------------
  |  Branch (1189:21): [True: 0, False: 0]
  ------------------
 1190|      0|                        return r;
 1191|       |
 1192|      0|                call_label_ops_post = true;
 1193|      0|        }
 1194|       |
 1195|  23.0k|        if (FLAGS_SET(open_flags, O_DIRECTORY|O_CREAT)) {
  ------------------
  |  |  414|  23.0k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 23.0k]
  |  |  ------------------
  ------------------
 1196|      0|                if (FLAGS_SET(xopen_flags, XO_SUBVOLUME))
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1197|      0|                        r = btrfs_subvol_make_fallback(dir_fd, path, mode);
 1198|      0|                else
 1199|      0|                        r = RET_NERRNO(mkdirat(dir_fd, path, mode));
 1200|      0|                if (r == -EEXIST) {
  ------------------
  |  Branch (1200:21): [True: 0, False: 0]
  ------------------
 1201|      0|                        if (FLAGS_SET(open_flags, O_EXCL))
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1202|      0|                                return -EEXIST;
 1203|      0|                } else if (r < 0)
  ------------------
  |  Branch (1203:28): [True: 0, False: 0]
  ------------------
 1204|      0|                        return r;
 1205|      0|                else
 1206|      0|                        made_dir = true;
 1207|       |
 1208|      0|                open_flags &= ~(O_EXCL|O_CREAT);
 1209|      0|        }
 1210|       |
 1211|  23.0k|        if (FLAGS_SET(xopen_flags, XO_REGULAR)) {
  ------------------
  |  |  414|  23.0k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 23.0k]
  |  |  ------------------
  ------------------
 1212|       |                /* Guarantee we return a regular fd only, and don't open the file unless we verified it
 1213|       |                 * first */
 1214|       |
 1215|      0|                if (FLAGS_SET(open_flags, O_PATH)) {
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1216|      0|                        fd = openat(dir_fd, path, open_flags, mode);
 1217|      0|                        if (fd < 0) {
  ------------------
  |  Branch (1217:29): [True: 0, False: 0]
  ------------------
 1218|      0|                                r = -errno;
 1219|      0|                                goto error;
 1220|      0|                        }
 1221|       |
 1222|      0|                        r = fd_verify_regular(fd);
 1223|      0|                        if (r < 0)
  ------------------
  |  Branch (1223:29): [True: 0, False: 0]
  ------------------
 1224|      0|                                goto error;
 1225|       |
 1226|      0|                } else if (FLAGS_SET(open_flags, O_CREAT|O_EXCL)) {
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1227|       |                        /* In O_EXCL mode we can just create the thing, everything is dealt with for us */
 1228|      0|                        fd = openat(dir_fd, path, open_flags, mode);
 1229|      0|                        if (fd < 0) {
  ------------------
  |  Branch (1229:29): [True: 0, False: 0]
  ------------------
 1230|      0|                                r = -errno;
 1231|      0|                                goto error;
 1232|      0|                        }
 1233|       |
 1234|      0|                        made_file = true;
 1235|      0|                } else {
 1236|       |                        /* Otherwise pin the inode first via O_PATH */
 1237|      0|                        _cleanup_close_ int inode_fd = openat(dir_fd, path, O_PATH|O_CLOEXEC|(open_flags & O_NOFOLLOW));
  ------------------
  |  |   60|      0|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1238|      0|                        if (inode_fd < 0) {
  ------------------
  |  Branch (1238:29): [True: 0, False: 0]
  ------------------
 1239|      0|                                if (errno != ENOENT || !FLAGS_SET(open_flags, O_CREAT)) {
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (1239:37): [True: 0, False: 0]
  |  Branch (1239:56): [True: 0, False: 0]
  ------------------
 1240|      0|                                        r = -errno;
 1241|      0|                                        goto error;
 1242|      0|                                }
 1243|       |
 1244|       |                                /* Doesn't exist yet, then try to create it */
 1245|      0|                                fd = openat(dir_fd, path, open_flags|O_CREAT|O_EXCL, mode);
 1246|      0|                                if (fd < 0) {
  ------------------
  |  Branch (1246:37): [True: 0, False: 0]
  ------------------
 1247|      0|                                        r = -errno;
 1248|      0|                                        goto error;
 1249|      0|                                }
 1250|       |
 1251|      0|                                made_file = true;
 1252|      0|                        } else {
 1253|       |                                /* OK, we pinned it. Now verify it's actually a regular file, and then reopen it */
 1254|      0|                                r = fd_verify_regular(inode_fd);
 1255|      0|                                if (r < 0)
  ------------------
  |  Branch (1255:37): [True: 0, False: 0]
  ------------------
 1256|      0|                                        goto error;
 1257|       |
 1258|      0|                                fd = fd_reopen(inode_fd, open_flags & ~(O_NOFOLLOW|O_CREAT));
 1259|      0|                                if (fd < 0) {
  ------------------
  |  Branch (1259:37): [True: 0, False: 0]
  ------------------
 1260|      0|                                        r = fd;
 1261|      0|                                        goto error;
 1262|      0|                                }
 1263|      0|                        }
 1264|      0|                }
 1265|  23.0k|        } else {
 1266|  23.0k|                fd = openat_report_new(dir_fd, path, open_flags, mode, &made_file);
 1267|  23.0k|                if (fd < 0) {
  ------------------
  |  Branch (1267:21): [True: 0, False: 23.0k]
  ------------------
 1268|      0|                        r = fd;
 1269|      0|                        goto error;
 1270|      0|                }
 1271|  23.0k|        }
 1272|       |
 1273|  23.0k|        if (call_label_ops_post) {
  ------------------
  |  Branch (1273:13): [True: 0, False: 23.0k]
  ------------------
 1274|      0|                call_label_ops_post = false;
 1275|       |
 1276|      0|                r = label_ops_post(fd, /* path= */ NULL, made_file || made_dir);
  ------------------
  |  Branch (1276:58): [True: 0, False: 0]
  |  Branch (1276:71): [True: 0, False: 0]
  ------------------
 1277|      0|                if (r < 0)
  ------------------
  |  Branch (1277:21): [True: 0, False: 0]
  ------------------
 1278|      0|                        goto error;
 1279|      0|        }
 1280|       |
 1281|  23.0k|        if (FLAGS_SET(xopen_flags, XO_NOCOW)) {
  ------------------
  |  |  414|  23.0k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 23.0k]
  |  |  ------------------
  ------------------
 1282|      0|                r = chattr_fd(fd, FS_NOCOW_FL, FS_NOCOW_FL);
 1283|      0|                if (r < 0 && !ERRNO_IS_IOCTL_NOT_SUPPORTED(r))
  ------------------
  |  Branch (1283:21): [True: 0, False: 0]
  |  Branch (1283:30): [True: 0, False: 0]
  ------------------
 1284|      0|                        goto error;
 1285|      0|        }
 1286|       |
 1287|  23.0k|        return TAKE_FD(fd);
  ------------------
  |  |   99|  23.0k|#define TAKE_FD(fd) TAKE_GENERIC(fd, int, -EBADF)
  |  |  ------------------
  |  |  |  |  380|  23.0k|        ({                                                       \
  |  |  |  |  381|  23.0k|                type *_pvar_ = &(var);                           \
  |  |  |  |  382|  23.0k|                type _var_ = *_pvar_;                            \
  |  |  |  |  383|  23.0k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  384|  23.0k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  385|  23.0k|                _var_;                                           \
  |  |  |  |  386|  23.0k|        })
  |  |  ------------------
  ------------------
 1288|       |
 1289|      0|error:
 1290|      0|        if (call_label_ops_post)
  ------------------
  |  Branch (1290:13): [True: 0, False: 0]
  ------------------
 1291|      0|                (void) label_ops_post(fd >= 0 ? fd : dir_fd, fd >= 0 ? NULL : path, made_dir || made_file);
  ------------------
  |  Branch (1291:39): [True: 0, False: 0]
  |  Branch (1291:62): [True: 0, False: 0]
  |  Branch (1291:85): [True: 0, False: 0]
  |  Branch (1291:97): [True: 0, False: 0]
  ------------------
 1292|       |
 1293|      0|        if (made_dir || made_file)
  ------------------
  |  Branch (1293:13): [True: 0, False: 0]
  |  Branch (1293:25): [True: 0, False: 0]
  ------------------
 1294|      0|                (void) unlinkat(dir_fd, path, made_dir ? AT_REMOVEDIR : 0);
  ------------------
  |  Branch (1294:47): [True: 0, False: 0]
  ------------------
 1295|       |
 1296|      0|        return r;
 1297|  23.0k|}

id128-util.c:xopenat:
  121|     13|static inline int xopenat(int dir_fd, const char *path, int open_flags) {
  122|     13|        return xopenat_full(dir_fd, path, open_flags, 0, 0);
  123|     13|}

string_hash_func:
   12|  1.88k|void string_hash_func(const char *p, struct siphash *state) {
   13|  1.88k|        siphash24_compress(p, strlen(p) + 1, state);
   14|  1.88k|}
path_hash_func:
   34|  9.97k|void path_hash_func(const char *q, struct siphash *state) {
   35|  9.97k|        bool add_slash = false;
   36|       |
   37|  9.97k|        assert(q);
  ------------------
  |  |   72|  9.97k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  9.97k|        do {                                                            \
  |  |  |  |   59|  9.97k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  9.97k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 9.97k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  9.97k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  9.97k|        } while (false)
  |  |  ------------------
  ------------------
   38|  9.97k|        assert(state);
  ------------------
  |  |   72|  9.97k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  9.97k|        do {                                                            \
  |  |  |  |   59|  9.97k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  9.97k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 9.97k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  9.97k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  9.97k|        } while (false)
  |  |  ------------------
  ------------------
   39|       |
   40|       |        /* Calculates a hash for a path in a way this duplicate inner slashes don't make a differences, and also
   41|       |         * whether there's a trailing slash or not. This fits well with the semantics of path_compare(), which does
   42|       |         * similar checks and also doesn't care for trailing slashes. Note that relative and absolute paths (i.e. those
   43|       |         * which begin in a slash or not) will hash differently though. */
   44|       |
   45|       |        /* if path is absolute, add one "/" to the hash. */
   46|  9.97k|        if (path_is_absolute(q))
  ------------------
  |  Branch (46:13): [True: 9.97k, False: 0]
  ------------------
   47|  9.97k|                siphash24_compress_byte('/', state);
  ------------------
  |  |   18|  9.97k|#define siphash24_compress_byte(byte, state) siphash24_compress((const uint8_t[]) { (byte) }, 1, (state))
  ------------------
   48|       |
   49|  29.9k|        for (;;) {
   50|  29.9k|                const char *e;
   51|  29.9k|                int r;
   52|       |
   53|  29.9k|                r = path_find_first_component(&q, true, &e);
   54|  29.9k|                if (r == 0)
  ------------------
  |  Branch (54:21): [True: 9.97k, False: 19.9k]
  ------------------
   55|  9.97k|                        return;
   56|       |
   57|  19.9k|                if (add_slash)
  ------------------
  |  Branch (57:21): [True: 9.97k, False: 9.97k]
  ------------------
   58|  9.97k|                        siphash24_compress_byte('/', state);
  ------------------
  |  |   18|  9.97k|#define siphash24_compress_byte(byte, state) siphash24_compress((const uint8_t[]) { (byte) }, 1, (state))
  ------------------
   59|       |
   60|  19.9k|                if (r < 0) {
  ------------------
  |  Branch (60:21): [True: 0, False: 19.9k]
  ------------------
   61|       |                        /* if a component is invalid, then add remaining part as a string. */
   62|      0|                        string_hash_func(q, state);
   63|      0|                        return;
   64|      0|                }
   65|       |
   66|       |                /* Add this component to the hash. */
   67|  19.9k|                siphash24_compress(e, r, state);
   68|       |
   69|  19.9k|                add_slash = true;
   70|  19.9k|        }
   71|  9.97k|}
trivial_hash_func:
   83|  5.59k|void trivial_hash_func(const void *p, struct siphash *state) {
   84|  5.59k|        siphash24_compress_typesafe(p, state);
  ------------------
  |  |   20|  5.59k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
   85|  5.59k|}
trivial_compare_func:
   87|  2.46k|int trivial_compare_func(const void *a, const void *b) {
   88|  2.46k|        return CMP(a, b);
  ------------------
  |  |  288|  2.46k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  2.46k|        ({                                              \
  |  |  |  |  291|  2.46k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  2.46k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  2.46k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  2.46k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  2.46k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  2.46k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  2.46k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  2.46k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  2.46k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 746, False: 1.72k]
  |  |  |  |  ------------------
  |  |  |  |  294|  2.46k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  1.72k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  1.72k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  1.72k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  1.72k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  1.72k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  1.72k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 662, False: 1.06k]
  |  |  |  |  ------------------
  |  |  |  |  295|  2.46k|        })
  |  |  ------------------
  ------------------
   89|  2.46k|}
uint64_hash_func:
  105|  4.88k|void uint64_hash_func(const uint64_t *p, struct siphash *state) {
  106|  4.88k|        siphash24_compress_typesafe(*p, state);
  ------------------
  |  |   20|  4.88k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
  107|  4.88k|}
uint64_compare_func:
  109|  3.28k|int uint64_compare_func(const uint64_t *a, const uint64_t *b) {
  110|  3.28k|        return CMP(*a, *b);
  ------------------
  |  |  288|  3.28k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  3.28k|        ({                                              \
  |  |  |  |  291|  3.28k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  3.28k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  3.28k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.28k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.28k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.28k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.28k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.28k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.28k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 794, False: 2.49k]
  |  |  |  |  ------------------
  |  |  |  |  294|  3.28k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  2.49k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  2.49k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  2.49k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  2.49k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  2.49k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  2.49k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 386, False: 2.10k]
  |  |  |  |  ------------------
  |  |  |  |  295|  3.28k|        })
  |  |  ------------------
  ------------------
  111|  3.28k|}

l2tp-tunnel.c:__unique_prefix_static_free_wrapper15:
   28|  53.2k|        static void UNIQ_T(wrapper_name, uq)(void *a) {                 \
   29|  53.2k|                type *_a = a;                                           \
   30|  53.2k|                func(_a);                                               \
   31|  53.2k|        }
macsec.c:__unique_prefix_static_free_wrapper15:
   28|    362|        static void UNIQ_T(wrapper_name, uq)(void *a) {                 \
   29|    362|                type *_a = a;                                           \
   30|    362|                func(_a);                                               \
   31|    362|        }
macsec.c:__unique_prefix_static_free_wrapper18:
   28|     89|        static void UNIQ_T(wrapper_name, uq)(void *a) {                 \
   29|     89|                type *_a = a;                                           \
   30|     89|                func(_a);                                               \
   31|     89|        }
macsec.c:__unique_prefix_static_free_wrapper16:
   28|    583|        static void UNIQ_T(wrapper_name, uq)(void *a) {                 \
   29|    583|                type *_a = a;                                           \
   30|    583|                func(_a);                                               \
   31|    583|        }
vlan.c:__unique_prefix_static_free_wrapper17:
   28|  23.7k|        static void UNIQ_T(wrapper_name, uq)(void *a) {                 \
   29|  23.7k|                type *_a = a;                                           \
   30|  23.7k|                func(_a);                                               \
   31|  23.7k|        }
wireguard.c:__unique_prefix_static_free_wrapper16:
   28|  9.04k|        static void UNIQ_T(wrapper_name, uq)(void *a) {                 \
   29|  9.04k|                type *_a = a;                                           \
   30|  9.04k|                func(_a);                                               \
   31|  9.04k|        }
networkd-route.c:__unique_prefix_static_free_wrapper41:
   28|  4.51k|        static void UNIQ_T(wrapper_name, uq)(void *a) {                 \
   29|  4.51k|                type *_a = a;                                           \
   30|  4.51k|                func(_a);                                               \
   31|  4.51k|        }
ether-addr-util.c:__unique_prefix_static_free_wrapper16:
   28|    375|        static void UNIQ_T(wrapper_name, uq)(void *a) {                 \
   29|    375|                type *_a = a;                                           \
   30|    375|                func(_a);                                               \
   31|    375|        }
hash-funcs.c:__unique_prefix_static_free_key_wrapper7:
   28|  9.97k|        static void UNIQ_T(wrapper_name, uq)(void *a) {                 \
   29|  9.97k|                type *_a = a;                                           \
   30|  9.97k|                func(_a);                                               \
   31|  9.97k|        }
hash-funcs.c:__unique_prefix_static_free_value_wrapper7:
   28|  9.97k|        static void UNIQ_T(wrapper_name, uq)(void *a) {                 \
   29|  9.97k|                type *_a = a;                                           \
   30|  9.97k|                func(_a);                                               \
   31|  9.97k|        }

_hashmap_iterate:
  708|   110k|bool _hashmap_iterate(HashmapBase *h, Iterator *i, void **value, const void **key) {
  709|   110k|        struct hashmap_base_entry *e;
  710|   110k|        void *data;
  711|   110k|        unsigned idx;
  712|       |
  713|   110k|        idx = hashmap_iterate_entry(h, i);
  714|   110k|        if (idx == IDX_NIL) {
  ------------------
  |  |  111|   110k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  |  Branch (714:13): [True: 41.3k, False: 68.8k]
  ------------------
  715|  41.3k|                if (value)
  ------------------
  |  Branch (715:21): [True: 41.3k, False: 0]
  ------------------
  716|  41.3k|                        *value = NULL;
  717|  41.3k|                if (key)
  ------------------
  |  Branch (717:21): [True: 22.7k, False: 18.5k]
  ------------------
  718|  22.7k|                        *key = NULL;
  719|       |
  720|  41.3k|                return false;
  721|  41.3k|        }
  722|       |
  723|  68.8k|        e = bucket_at(h, idx);
  724|  68.8k|        data = entry_value(h, e);
  725|  68.8k|        if (value)
  ------------------
  |  Branch (725:13): [True: 68.8k, False: 0]
  ------------------
  726|  68.8k|                *value = data;
  727|  68.8k|        if (key)
  ------------------
  |  Branch (727:13): [True: 0, False: 68.8k]
  ------------------
  728|      0|                *key = e->key;
  729|       |
  730|  68.8k|        return true;
  731|   110k|}
hashmap_new:
  804|  9.98k|Hashmap *hashmap_new(const struct hash_ops *hash_ops) {
  805|  9.98k|        return (Hashmap*)        hashmap_base_new(hash_ops, HASHMAP_TYPE_PLAIN);
  806|  9.98k|}
ordered_hashmap_new:
  808|    441|OrderedHashmap *ordered_hashmap_new(const struct hash_ops *hash_ops) {
  809|    441|        return (OrderedHashmap*) hashmap_base_new(hash_ops, HASHMAP_TYPE_ORDERED);
  810|    441|}
hashmap_ensure_allocated:
  835|  22.0k|int hashmap_ensure_allocated(Hashmap **h, const struct hash_ops *hash_ops) {
  836|  22.0k|        return hashmap_base_ensure_allocated((HashmapBase**)h, hash_ops, HASHMAP_TYPE_PLAIN);
  837|  22.0k|}
ordered_hashmap_ensure_allocated:
  839|  69.6k|int ordered_hashmap_ensure_allocated(OrderedHashmap **h, const struct hash_ops *hash_ops) {
  840|  69.6k|        return hashmap_base_ensure_allocated((HashmapBase**)h, hash_ops, HASHMAP_TYPE_ORDERED);
  841|  69.6k|}
set_ensure_allocated:
  843|  45.8k|int set_ensure_allocated(Set **s, const struct hash_ops *hash_ops) {
  844|  45.8k|        return hashmap_base_ensure_allocated((HashmapBase**)s, hash_ops, HASHMAP_TYPE_SET);
  845|  45.8k|}
hashmap_ensure_put:
  847|  22.0k|int hashmap_ensure_put(Hashmap **h, const struct hash_ops *hash_ops, const void *key, void *value) {
  848|  22.0k|        int r;
  849|       |
  850|  22.0k|        r = hashmap_ensure_allocated(h, hash_ops);
  851|  22.0k|        if (r < 0)
  ------------------
  |  Branch (851:13): [True: 0, False: 22.0k]
  ------------------
  852|      0|                return r;
  853|       |
  854|  22.0k|        return hashmap_put(*h, key, value);
  855|  22.0k|}
ordered_hashmap_ensure_put:
  857|  69.6k|int ordered_hashmap_ensure_put(OrderedHashmap **h, const struct hash_ops *hash_ops, const void *key, void *value) {
  858|  69.6k|        int r;
  859|       |
  860|  69.6k|        r = ordered_hashmap_ensure_allocated(h, hash_ops);
  861|  69.6k|        if (r < 0)
  ------------------
  |  Branch (861:13): [True: 0, False: 69.6k]
  ------------------
  862|      0|                return r;
  863|       |
  864|  69.6k|        return ordered_hashmap_put(*h, key, value);
  865|  69.6k|}
_hashmap_free:
  905|   361k|HashmapBase* _hashmap_free(HashmapBase *h) {
  906|   361k|        if (h) {
  ------------------
  |  Branch (906:13): [True: 16.0k, False: 345k]
  ------------------
  907|  16.0k|                _hashmap_clear(h);
  908|  16.0k|                hashmap_free_no_clear(h);
  909|  16.0k|        }
  910|       |
  911|   361k|        return NULL;
  912|   361k|}
_hashmap_clear:
  914|  16.0k|void _hashmap_clear(HashmapBase *h) {
  915|  16.0k|        if (!h)
  ------------------
  |  Branch (915:13): [True: 0, False: 16.0k]
  ------------------
  916|      0|                return;
  917|       |
  918|  16.0k|        if (h->hash_ops->free_key || h->hash_ops->free_value) {
  ------------------
  |  Branch (918:13): [True: 12.0k, False: 3.95k]
  |  Branch (918:38): [True: 3.33k, False: 621]
  ------------------
  919|       |
  920|       |                /* If destructor calls are defined, let's destroy things defensively: let's take the item out of the
  921|       |                 * hash table, and only then call the destructor functions. If these destructors then try to unregister
  922|       |                 * themselves from our hash table a second time, the entry is already gone. */
  923|       |
  924|   113k|                while (_hashmap_size(h) > 0) {
  ------------------
  |  Branch (924:24): [True: 97.7k, False: 15.4k]
  ------------------
  925|  97.7k|                        void *k = NULL;
  926|  97.7k|                        void *v;
  927|       |
  928|  97.7k|                        v = _hashmap_first_key_and_value(h, true, &k);
  929|       |
  930|  97.7k|                        if (h->hash_ops->free_key)
  ------------------
  |  Branch (930:29): [True: 34.3k, False: 63.3k]
  ------------------
  931|  34.3k|                                h->hash_ops->free_key(k);
  932|       |
  933|  97.7k|                        if (h->hash_ops->free_value)
  ------------------
  |  Branch (933:29): [True: 73.3k, False: 24.4k]
  ------------------
  934|  73.3k|                                h->hash_ops->free_value(v);
  935|  97.7k|                }
  936|  15.4k|        }
  937|       |
  938|  16.0k|        if (h->has_indirect) {
  ------------------
  |  Branch (938:13): [True: 2.45k, False: 13.5k]
  ------------------
  939|  2.45k|                free(h->indirect.storage);
  940|  2.45k|                h->has_indirect = false;
  941|  2.45k|        }
  942|       |
  943|  16.0k|        h->n_direct_entries = 0;
  944|  16.0k|        reset_direct_storage(h);
  945|       |
  946|  16.0k|        if (h->type == HASHMAP_TYPE_ORDERED) {
  ------------------
  |  Branch (946:13): [True: 2.45k, False: 13.5k]
  ------------------
  947|  2.45k|                OrderedHashmap *lh = (OrderedHashmap*) h;
  948|  2.45k|                lh->iterate_list_head = lh->iterate_list_tail = IDX_NIL;
  ------------------
  |  |  111|  2.45k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  949|  2.45k|        }
  950|       |
  951|  16.0k|        base_set_dirty(h);
  952|  16.0k|}
hashmap_put:
 1243|  94.7k|int hashmap_put(Hashmap *h, const void *key, void *value) {
 1244|  94.7k|        struct swap_entries swap;
 1245|  94.7k|        struct plain_hashmap_entry *e;
 1246|  94.7k|        unsigned hash, idx;
 1247|       |
 1248|  94.7k|        assert(h);
  ------------------
  |  |   72|  94.7k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  94.7k|        do {                                                            \
  |  |  |  |   59|  94.7k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  94.7k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 94.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  94.7k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  94.7k|        } while (false)
  |  |  ------------------
  ------------------
 1249|       |
 1250|  94.7k|        hash = bucket_hash(h, key);
  ------------------
  |  |  347|  94.7k|#define bucket_hash(h, p) base_bucket_hash(HASHMAP_BASE(h), p)
  |  |  ------------------
  |  |  |  |   46|  94.7k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|  94.7k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  94.7k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   38|  94.7k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  94.7k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   47|  94.7k|                (HashmapBase*)(h), \
  |  |  |  |   48|  94.7k|                (void)0)
  |  |  ------------------
  ------------------
 1251|  94.7k|        idx = bucket_scan(h, hash, key);
  ------------------
  |  | 1241|  94.7k|#define bucket_scan(h, idx, key) base_bucket_scan(HASHMAP_BASE(h), idx, key)
  |  |  ------------------
  |  |  |  |   46|  94.7k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|  94.7k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  94.7k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   38|  94.7k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  94.7k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   47|  94.7k|                (HashmapBase*)(h), \
  |  |  |  |   48|  94.7k|                (void)0)
  |  |  ------------------
  ------------------
 1252|  94.7k|        if (idx != IDX_NIL) {
  ------------------
  |  |  111|  94.7k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  |  Branch (1252:13): [True: 1.85k, False: 92.9k]
  ------------------
 1253|  1.85k|                e = plain_bucket_at(h, idx);
 1254|  1.85k|                if (e->value == value)
  ------------------
  |  Branch (1254:21): [True: 1.06k, False: 794]
  ------------------
 1255|  1.06k|                        return 0;
 1256|    794|                return -EEXIST;
 1257|  1.85k|        }
 1258|       |
 1259|  92.9k|        e = &bucket_at_swap(&swap, IDX_PUT)->p;
  ------------------
  |  |  106|  92.9k|#define IDX_PUT             (_IDX_SWAP_BEGIN + 0)
  |  |  ------------------
  |  |  |  |  105|  92.9k|#define _IDX_SWAP_BEGIN     (UINT_MAX - 3)
  |  |  ------------------
  ------------------
 1260|  92.9k|        e->b.key = key;
 1261|  92.9k|        e->value = value;
 1262|  92.9k|        return hashmap_put_boldly(h, hash, &swap, true);
  ------------------
  |  | 1072|  92.9k|        hashmap_base_put_boldly(HASHMAP_BASE(h), idx, swap, may_resize)
  |  |  ------------------
  |  |  |  |   46|  92.9k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|  92.9k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  92.9k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   38|  92.9k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  92.9k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   47|  92.9k|                (HashmapBase*)(h), \
  |  |  |  |   48|  92.9k|                (void)0)
  |  |  ------------------
  ------------------
 1263|  94.7k|}
set_put:
 1265|  45.8k|int set_put(Set *s, const void *key) {
 1266|  45.8k|        struct swap_entries swap;
 1267|  45.8k|        struct hashmap_base_entry *e;
 1268|  45.8k|        unsigned hash, idx;
 1269|       |
 1270|  45.8k|        assert(s);
  ------------------
  |  |   72|  45.8k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  45.8k|        do {                                                            \
  |  |  |  |   59|  45.8k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  45.8k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 45.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  45.8k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  45.8k|        } while (false)
  |  |  ------------------
  ------------------
 1271|       |
 1272|  45.8k|        hash = bucket_hash(s, key);
  ------------------
  |  |  347|  45.8k|#define bucket_hash(h, p) base_bucket_hash(HASHMAP_BASE(h), p)
  |  |  ------------------
  |  |  |  |   46|  45.8k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|  45.8k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  45.8k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   38|  45.8k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  45.8k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   47|  45.8k|                (HashmapBase*)(h), \
  |  |  |  |   48|  45.8k|                (void)0)
  |  |  ------------------
  ------------------
 1273|  45.8k|        idx = bucket_scan(s, hash, key);
  ------------------
  |  | 1241|  45.8k|#define bucket_scan(h, idx, key) base_bucket_scan(HASHMAP_BASE(h), idx, key)
  |  |  ------------------
  |  |  |  |   46|  45.8k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|  45.8k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  45.8k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   38|  45.8k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  45.8k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   47|  45.8k|                (HashmapBase*)(h), \
  |  |  |  |   48|  45.8k|                (void)0)
  |  |  ------------------
  ------------------
 1274|  45.8k|        if (idx != IDX_NIL)
  ------------------
  |  |  111|  45.8k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  |  Branch (1274:13): [True: 20.8k, False: 25.0k]
  ------------------
 1275|  20.8k|                return 0;
 1276|       |
 1277|  25.0k|        e = &bucket_at_swap(&swap, IDX_PUT)->p.b;
  ------------------
  |  |  106|  25.0k|#define IDX_PUT             (_IDX_SWAP_BEGIN + 0)
  |  |  ------------------
  |  |  |  |  105|  25.0k|#define _IDX_SWAP_BEGIN     (UINT_MAX - 3)
  |  |  ------------------
  ------------------
 1278|  25.0k|        e->key = key;
 1279|  25.0k|        return hashmap_put_boldly(s, hash, &swap, true);
  ------------------
  |  | 1072|  25.0k|        hashmap_base_put_boldly(HASHMAP_BASE(h), idx, swap, may_resize)
  |  |  ------------------
  |  |  |  |   46|  25.0k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|  25.0k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  25.0k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   38|  25.0k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  25.0k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   47|  25.0k|                (HashmapBase*)(h), \
  |  |  |  |   48|  25.0k|                (void)0)
  |  |  ------------------
  ------------------
 1280|  45.8k|}
set_ensure_put:
 1282|  45.8k|int set_ensure_put(Set **s, const struct hash_ops *hash_ops, const void *key) {
 1283|  45.8k|        int r;
 1284|       |
 1285|  45.8k|        r = set_ensure_allocated(s, hash_ops);
 1286|  45.8k|        if (r < 0)
  ------------------
  |  Branch (1286:13): [True: 0, False: 45.8k]
  ------------------
 1287|      0|                return r;
 1288|       |
 1289|  45.8k|        return set_put(*s, key);
 1290|  45.8k|}
set_ensure_consume:
 1292|  24.1k|int set_ensure_consume(Set **s, const struct hash_ops *hash_ops, void *key) {
 1293|  24.1k|        int r;
 1294|       |
 1295|  24.1k|        r = set_ensure_put(s, hash_ops, key);
 1296|  24.1k|        if (r <= 0) {
  ------------------
  |  Branch (1296:13): [True: 4.23k, False: 19.8k]
  ------------------
 1297|  4.23k|                if (hash_ops && hash_ops->free_key)
  ------------------
  |  Branch (1297:21): [True: 4.23k, False: 0]
  |  Branch (1297:33): [True: 4.23k, False: 0]
  ------------------
 1298|  4.23k|                        hash_ops->free_key(key);
 1299|      0|                else
 1300|      0|                        free(key);
 1301|  4.23k|        }
 1302|       |
 1303|  24.1k|        return r;
 1304|  24.1k|}
_hashmap_get:
 1358|   128k|void* _hashmap_get(HashmapBase *h, const void *key) {
 1359|   128k|        struct hashmap_base_entry *e;
 1360|   128k|        unsigned hash, idx;
 1361|       |
 1362|   128k|        if (!h)
  ------------------
  |  Branch (1362:13): [True: 5.53k, False: 122k]
  ------------------
 1363|  5.53k|                return NULL;
 1364|       |
 1365|   122k|        hash = bucket_hash(h, key);
  ------------------
  |  |  347|   122k|#define bucket_hash(h, p) base_bucket_hash(HASHMAP_BASE(h), p)
  |  |  ------------------
  |  |  |  |   46|   122k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|   122k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   122k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   38|   122k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   39|   122k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   47|   122k|                (HashmapBase*)(h), \
  |  |  |  |   48|   122k|                (void)0)
  |  |  ------------------
  ------------------
 1366|   122k|        idx = bucket_scan(h, hash, key);
  ------------------
  |  | 1241|   122k|#define bucket_scan(h, idx, key) base_bucket_scan(HASHMAP_BASE(h), idx, key)
  |  |  ------------------
  |  |  |  |   46|   122k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|   122k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   122k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   38|   122k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   39|   122k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   47|   122k|                (HashmapBase*)(h), \
  |  |  |  |   48|   122k|                (void)0)
  |  |  ------------------
  ------------------
 1367|   122k|        if (idx == IDX_NIL)
  ------------------
  |  |  111|   122k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  |  Branch (1367:13): [True: 77.4k, False: 45.5k]
  ------------------
 1368|  77.4k|                return NULL;
 1369|       |
 1370|  45.5k|        e = bucket_at(h, idx);
 1371|  45.5k|        return entry_value(h, e);
 1372|   122k|}
_hashmap_remove:
 1403|  84.7k|void* _hashmap_remove(HashmapBase *h, const void *key) {
 1404|  84.7k|        struct hashmap_base_entry *e;
 1405|  84.7k|        unsigned hash, idx;
 1406|  84.7k|        void *data;
 1407|       |
 1408|  84.7k|        if (!h)
  ------------------
  |  Branch (1408:13): [True: 0, False: 84.7k]
  ------------------
 1409|      0|                return NULL;
 1410|       |
 1411|  84.7k|        hash = bucket_hash(h, key);
  ------------------
  |  |  347|  84.7k|#define bucket_hash(h, p) base_bucket_hash(HASHMAP_BASE(h), p)
  |  |  ------------------
  |  |  |  |   46|  84.7k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|  84.7k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  84.7k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   38|  84.7k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  84.7k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   47|  84.7k|                (HashmapBase*)(h), \
  |  |  |  |   48|  84.7k|                (void)0)
  |  |  ------------------
  ------------------
 1412|  84.7k|        idx = bucket_scan(h, hash, key);
  ------------------
  |  | 1241|  84.7k|#define bucket_scan(h, idx, key) base_bucket_scan(HASHMAP_BASE(h), idx, key)
  |  |  ------------------
  |  |  |  |   46|  84.7k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|  84.7k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  84.7k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   38|  84.7k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  84.7k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   47|  84.7k|                (HashmapBase*)(h), \
  |  |  |  |   48|  84.7k|                (void)0)
  |  |  ------------------
  ------------------
 1413|  84.7k|        if (idx == IDX_NIL)
  ------------------
  |  |  111|  84.7k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  |  Branch (1413:13): [True: 67.2k, False: 17.5k]
  ------------------
 1414|  67.2k|                return NULL;
 1415|       |
 1416|  17.5k|        e = bucket_at(h, idx);
 1417|  17.5k|        data = entry_value(h, e);
 1418|  17.5k|        remove_entry(h, idx);
  ------------------
  |  |  574|  17.5k|#define remove_entry(h, idx) base_remove_entry(HASHMAP_BASE(h), idx)
  |  |  ------------------
  |  |  |  |   46|  17.5k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|  17.5k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  17.5k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   38|  17.5k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  17.5k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   47|  17.5k|                (HashmapBase*)(h), \
  |  |  |  |   48|  17.5k|                (void)0)
  |  |  ------------------
  ------------------
 1419|       |
 1420|  17.5k|        return data;
 1421|  84.7k|}
_hashmap_remove_value:
 1541|  19.0k|void* _hashmap_remove_value(HashmapBase *h, const void *key, void *value) {
 1542|  19.0k|        struct hashmap_base_entry *e;
 1543|  19.0k|        unsigned hash, idx;
 1544|       |
 1545|  19.0k|        if (!h)
  ------------------
  |  Branch (1545:13): [True: 16.6k, False: 2.40k]
  ------------------
 1546|  16.6k|                return NULL;
 1547|       |
 1548|  2.40k|        hash = bucket_hash(h, key);
  ------------------
  |  |  347|  2.40k|#define bucket_hash(h, p) base_bucket_hash(HASHMAP_BASE(h), p)
  |  |  ------------------
  |  |  |  |   46|  2.40k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|  2.40k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.40k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   38|  2.40k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  2.40k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   47|  2.40k|                (HashmapBase*)(h), \
  |  |  |  |   48|  2.40k|                (void)0)
  |  |  ------------------
  ------------------
 1549|  2.40k|        idx = bucket_scan(h, hash, key);
  ------------------
  |  | 1241|  2.40k|#define bucket_scan(h, idx, key) base_bucket_scan(HASHMAP_BASE(h), idx, key)
  |  |  ------------------
  |  |  |  |   46|  2.40k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|  2.40k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.40k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   38|  2.40k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  2.40k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   47|  2.40k|                (HashmapBase*)(h), \
  |  |  |  |   48|  2.40k|                (void)0)
  |  |  ------------------
  ------------------
 1550|  2.40k|        if (idx == IDX_NIL)
  ------------------
  |  |  111|  2.40k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  |  Branch (1550:13): [True: 1.59k, False: 807]
  ------------------
 1551|  1.59k|                return NULL;
 1552|       |
 1553|    807|        e = bucket_at(h, idx);
 1554|    807|        if (entry_value(h, e) != value)
  ------------------
  |  Branch (1554:13): [True: 807, False: 0]
  ------------------
 1555|    807|                return NULL;
 1556|       |
 1557|      0|        remove_entry(h, idx);
  ------------------
  |  |  574|      0|#define remove_entry(h, idx) base_remove_entry(HASHMAP_BASE(h), idx)
  |  |  ------------------
  |  |  |  |   46|      0|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|      0|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   38|      0|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      0|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   47|      0|                (HashmapBase*)(h), \
  |  |  |  |   48|      0|                (void)0)
  |  |  ------------------
  ------------------
 1558|       |
 1559|      0|        return value;
 1560|    807|}
_hashmap_first_key_and_value:
 1571|   110k|void* _hashmap_first_key_and_value(HashmapBase *h, bool remove, void **ret_key) {
 1572|   110k|        struct hashmap_base_entry *e;
 1573|   110k|        void *key, *data;
 1574|   110k|        unsigned idx;
 1575|       |
 1576|   110k|        idx = find_first_entry(h);
 1577|   110k|        if (idx == IDX_NIL) {
  ------------------
  |  |  111|   110k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  |  Branch (1577:13): [True: 13.0k, False: 97.7k]
  ------------------
 1578|  13.0k|                if (ret_key)
  ------------------
  |  Branch (1578:21): [True: 0, False: 13.0k]
  ------------------
 1579|      0|                        *ret_key = NULL;
 1580|  13.0k|                return NULL;
 1581|  13.0k|        }
 1582|       |
 1583|  97.7k|        e = bucket_at(h, idx);
 1584|  97.7k|        key = (void*) e->key;
 1585|  97.7k|        data = entry_value(h, e);
 1586|       |
 1587|  97.7k|        if (remove)
  ------------------
  |  Branch (1587:13): [True: 97.7k, False: 0]
  ------------------
 1588|  97.7k|                remove_entry(h, idx);
  ------------------
  |  |  574|  97.7k|#define remove_entry(h, idx) base_remove_entry(HASHMAP_BASE(h), idx)
  |  |  ------------------
  |  |  |  |   46|  97.7k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|  97.7k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  97.7k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   38|  97.7k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  97.7k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   47|  97.7k|                (HashmapBase*)(h), \
  |  |  |  |   48|  97.7k|                (void)0)
  |  |  ------------------
  ------------------
 1589|       |
 1590|  97.7k|        if (ret_key)
  ------------------
  |  Branch (1590:13): [True: 97.7k, False: 0]
  ------------------
 1591|  97.7k|                *ret_key = key;
 1592|       |
 1593|  97.7k|        return data;
 1594|   110k|}
_hashmap_size:
 1596|   227k|unsigned _hashmap_size(HashmapBase *h) {
 1597|   227k|        if (!h)
  ------------------
  |  Branch (1597:13): [True: 111k, False: 116k]
  ------------------
 1598|   111k|                return 0;
 1599|       |
 1600|   116k|        return n_entries(h);
 1601|   227k|}
_hashmap_dump_sorted:
 2203|  23.0k|int _hashmap_dump_sorted(HashmapBase *h, void ***ret, size_t *ret_n) {
 2204|  23.0k|        _cleanup_free_ void **entries = NULL;
  ------------------
  |  |   82|  23.0k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  23.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 2205|  23.0k|        size_t n;
 2206|  23.0k|        int r;
 2207|       |
 2208|  23.0k|        r = _hashmap_dump_entries_sorted(h, &entries, &n);
 2209|  23.0k|        if (r < 0)
  ------------------
  |  Branch (2209:13): [True: 0, False: 23.0k]
  ------------------
 2210|      0|                return r;
 2211|       |
 2212|       |        /* Reuse the array. */
 2213|  23.0k|        FOREACH_ARRAY(e, entries, n)
  ------------------
  |  |  463|  23.0k|        _FOREACH_ARRAY(i, array, num, UNIQ_T(m, UNIQ), UNIQ_T(end, UNIQ))
  |  |  ------------------
  |  |  |  |  457|  23.0k|        for (typeof(array[0]) *i = (array), *end = ({                   \
  |  |  |  |  458|  23.0k|                                typeof(num) m = (num);                  \
  |  |  |  |  459|  23.0k|                                (i && m > 0) ? i + m : NULL;            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (459:34): [True: 0, False: 23.0k]
  |  |  |  |  |  Branch (459:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  460|  23.0k|                        }); end && i < end; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (460:29): [True: 0, False: 23.0k]
  |  |  |  |  |  Branch (460:36): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2214|      0|                *e = entry_value(h, *(struct hashmap_base_entry**) e);
 2215|       |
 2216|  23.0k|        *ret = TAKE_PTR(entries);
  ------------------
  |  |  388|  23.0k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  23.0k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  23.0k|        ({                                                       \
  |  |  |  |  |  |  381|  23.0k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  23.0k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  23.0k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  23.0k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  23.0k|                _var_;                                           \
  |  |  |  |  |  |  386|  23.0k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2217|  23.0k|        if (ret_n)
  ------------------
  |  Branch (2217:13): [True: 0, False: 23.0k]
  ------------------
 2218|      0|                *ret_n = n;
 2219|  23.0k|        return 0;
 2220|  23.0k|}
hashmap.c:hashmap_iterate_entry:
  682|   207k|static unsigned hashmap_iterate_entry(HashmapBase *h, Iterator *i) {
  683|   207k|        if (!h) {
  ------------------
  |  Branch (683:13): [True: 39.3k, False: 168k]
  ------------------
  684|  39.3k|                i->idx = IDX_NIL;
  ------------------
  |  |  111|  39.3k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  685|  39.3k|                return IDX_NIL;
  ------------------
  |  |  111|  39.3k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  686|  39.3k|        }
  687|       |
  688|       |#if ENABLE_DEBUG_HASHMAP
  689|       |        if (i->idx == IDX_FIRST) {
  690|       |                i->put_count = h->debug.put_count;
  691|       |                i->rem_count = h->debug.rem_count;
  692|       |        } else {
  693|       |                /* While iterating, must not add any new entries */
  694|       |                assert(i->put_count == h->debug.put_count);
  695|       |                /* ... or remove entries other than the current one */
  696|       |                assert(i->rem_count == h->debug.rem_count ||
  697|       |                       (i->rem_count == h->debug.rem_count - 1 &&
  698|       |                        i->prev_idx == h->debug.last_rem_idx));
  699|       |                /* Reset our removals counter */
  700|       |                i->rem_count = h->debug.rem_count;
  701|       |        }
  702|       |#endif
  703|       |
  704|   168k|        return h->type == HASHMAP_TYPE_ORDERED ? hashmap_iterate_in_insertion_order((OrderedHashmap*) h, i)
  ------------------
  |  Branch (704:16): [True: 125k, False: 43.4k]
  ------------------
  705|   168k|                                               : hashmap_iterate_in_internal_order(h, i);
  706|   207k|}
hashmap.c:hashmap_iterate_in_insertion_order:
  576|   125k|static unsigned hashmap_iterate_in_insertion_order(OrderedHashmap *h, Iterator *i) {
  577|   125k|        struct ordered_hashmap_entry *e;
  578|   125k|        unsigned idx;
  579|       |
  580|   125k|        assert(h);
  ------------------
  |  |   72|   125k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   125k|        do {                                                            \
  |  |  |  |   59|   125k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   125k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 125k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   125k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   125k|        } while (false)
  |  |  ------------------
  ------------------
  581|   125k|        assert(i);
  ------------------
  |  |   72|   125k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   125k|        do {                                                            \
  |  |  |  |   59|   125k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   125k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 125k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   125k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   125k|        } while (false)
  |  |  ------------------
  ------------------
  582|       |
  583|   125k|        if (i->idx == IDX_NIL)
  ------------------
  |  |  111|   125k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  |  Branch (583:13): [True: 1.88k, False: 123k]
  ------------------
  584|  1.88k|                goto at_end;
  585|       |
  586|   123k|        if (i->idx == IDX_FIRST && h->iterate_list_head == IDX_NIL)
  ------------------
  |  |  110|   246k|#define IDX_FIRST           (UINT_MAX - 1) /* special index for freshly initialized iterators */
  ------------------
                      if (i->idx == IDX_FIRST && h->iterate_list_head == IDX_NIL)
  ------------------
  |  |  111|  56.2k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  |  Branch (586:13): [True: 56.2k, False: 66.9k]
  |  Branch (586:36): [True: 50, False: 56.1k]
  ------------------
  587|     50|                goto at_end;
  588|       |
  589|   123k|        if (i->idx == IDX_FIRST) {
  ------------------
  |  |  110|   123k|#define IDX_FIRST           (UINT_MAX - 1) /* special index for freshly initialized iterators */
  ------------------
  |  Branch (589:13): [True: 56.1k, False: 66.9k]
  ------------------
  590|  56.1k|                idx = h->iterate_list_head;
  591|  56.1k|                e = ordered_bucket_at(h, idx);
  592|  66.9k|        } else {
  593|  66.9k|                idx = i->idx;
  594|  66.9k|                e = ordered_bucket_at(h, idx);
  595|       |                /*
  596|       |                 * We allow removing the current entry while iterating, but removal may cause
  597|       |                 * a backward shift. The next entry may thus move one bucket to the left.
  598|       |                 * To detect when it happens, we remember the key pointer of the entry we were
  599|       |                 * going to iterate next. If it does not match, there was a backward shift.
  600|       |                 */
  601|  66.9k|                if (e->p.b.key != i->next_key) {
  ------------------
  |  Branch (601:21): [True: 216, False: 66.7k]
  ------------------
  602|    216|                        idx = prev_idx(HASHMAP_BASE(h), idx);
  ------------------
  |  |   46|    216|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|    216|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|    216|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|    216|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|    216|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|    216|                (HashmapBase*)(h), \
  |  |   48|    216|                (void)0)
  ------------------
  603|    216|                        e = ordered_bucket_at(h, idx);
  604|    216|                }
  605|  66.9k|                assert(e->p.b.key == i->next_key);
  ------------------
  |  |   72|  66.9k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  66.9k|        do {                                                            \
  |  |  |  |   59|  66.9k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  66.9k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 66.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  66.9k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  66.9k|        } while (false)
  |  |  ------------------
  ------------------
  606|  66.9k|        }
  607|       |
  608|       |#if ENABLE_DEBUG_HASHMAP
  609|       |        i->prev_idx = idx;
  610|       |#endif
  611|       |
  612|   123k|        if (e->iterate_next != IDX_NIL) {
  ------------------
  |  |  111|   123k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  |  Branch (612:13): [True: 120k, False: 2.69k]
  ------------------
  613|   120k|                struct ordered_hashmap_entry *n;
  614|   120k|                i->idx = e->iterate_next;
  615|   120k|                n = ordered_bucket_at(h, i->idx);
  616|   120k|                i->next_key = n->p.b.key;
  617|   120k|        } else
  618|  2.69k|                i->idx = IDX_NIL;
  ------------------
  |  |  111|  2.69k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  619|       |
  620|   123k|        return idx;
  621|       |
  622|  1.93k|at_end:
  623|  1.93k|        i->idx = IDX_NIL;
  ------------------
  |  |  111|  1.93k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  624|  1.93k|        return IDX_NIL;
  ------------------
  |  |  111|  1.93k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  625|   123k|}
hashmap.c:hashmap_iterate_in_internal_order:
  627|  43.4k|static unsigned hashmap_iterate_in_internal_order(HashmapBase *h, Iterator *i) {
  628|  43.4k|        unsigned idx;
  629|       |
  630|  43.4k|        assert(h);
  ------------------
  |  |   72|  43.4k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  43.4k|        do {                                                            \
  |  |  |  |   59|  43.4k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  43.4k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 43.4k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  43.4k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  43.4k|        } while (false)
  |  |  ------------------
  ------------------
  631|  43.4k|        assert(i);
  ------------------
  |  |   72|  43.4k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  43.4k|        do {                                                            \
  |  |  |  |   59|  43.4k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  43.4k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 43.4k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  43.4k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  43.4k|        } while (false)
  |  |  ------------------
  ------------------
  632|       |
  633|  43.4k|        if (i->idx == IDX_NIL)
  ------------------
  |  |  111|  43.4k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  |  Branch (633:13): [True: 0, False: 43.4k]
  ------------------
  634|      0|                goto at_end;
  635|       |
  636|  43.4k|        if (i->idx == IDX_FIRST) {
  ------------------
  |  |  110|  43.4k|#define IDX_FIRST           (UINT_MAX - 1) /* special index for freshly initialized iterators */
  ------------------
  |  Branch (636:13): [True: 43.4k, False: 0]
  ------------------
  637|       |                /* fast forward to the first occupied bucket */
  638|  43.4k|                if (h->has_indirect) {
  ------------------
  |  Branch (638:21): [True: 29.9k, False: 13.4k]
  ------------------
  639|  29.9k|                        i->idx = skip_free_buckets(h, h->indirect.idx_lowest_entry);
  640|  29.9k|                        h->indirect.idx_lowest_entry = i->idx;
  641|  29.9k|                } else
  642|  13.4k|                        i->idx = skip_free_buckets(h, 0);
  643|       |
  644|  43.4k|                if (i->idx == IDX_NIL)
  ------------------
  |  |  111|  43.4k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  |  Branch (644:21): [True: 0, False: 43.4k]
  ------------------
  645|      0|                        goto at_end;
  646|  43.4k|        } else {
  647|      0|                struct hashmap_base_entry *e;
  648|       |
  649|      0|                assert(i->idx > 0);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  650|       |
  651|      0|                e = bucket_at(h, i->idx);
  652|       |                /*
  653|       |                 * We allow removing the current entry while iterating, but removal may cause
  654|       |                 * a backward shift. The next entry may thus move one bucket to the left.
  655|       |                 * To detect when it happens, we remember the key pointer of the entry we were
  656|       |                 * going to iterate next. If it does not match, there was a backward shift.
  657|       |                 */
  658|      0|                if (e->key != i->next_key)
  ------------------
  |  Branch (658:21): [True: 0, False: 0]
  ------------------
  659|      0|                        e = bucket_at(h, --i->idx);
  660|       |
  661|      0|                assert(e->key == i->next_key);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  662|      0|        }
  663|       |
  664|  43.4k|        idx = i->idx;
  665|       |#if ENABLE_DEBUG_HASHMAP
  666|       |        i->prev_idx = idx;
  667|       |#endif
  668|       |
  669|  43.4k|        i->idx = skip_free_buckets(h, i->idx + 1);
  670|  43.4k|        if (i->idx != IDX_NIL)
  ------------------
  |  |  111|  43.4k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  |  Branch (670:13): [True: 30.0k, False: 13.3k]
  ------------------
  671|  30.0k|                i->next_key = bucket_at(h, i->idx)->key;
  672|  13.3k|        else
  673|  13.3k|                i->idx = IDX_NIL;
  ------------------
  |  |  111|  13.3k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  674|       |
  675|  43.4k|        return idx;
  676|       |
  677|      0|at_end:
  678|      0|        i->idx = IDX_NIL;
  ------------------
  |  |  111|      0|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  679|      0|        return IDX_NIL;
  ------------------
  |  |  111|      0|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  680|  43.4k|}
hashmap.c:skip_free_buckets:
  445|  86.8k|static unsigned skip_free_buckets(HashmapBase *h, unsigned idx) {
  446|  86.8k|        dib_raw_t *dibs;
  447|       |
  448|  86.8k|        dibs = dib_raw_ptr(h);
  449|       |
  450|   194k|        for ( ; idx < n_buckets(h); idx++)
  ------------------
  |  Branch (450:17): [True: 180k, False: 13.3k]
  ------------------
  451|   180k|                if (dibs[idx] != DIB_RAW_FREE)
  ------------------
  |  |  126|   180k|#define DIB_RAW_FREE     ((dib_raw_t)0xffU)   /* a free bucket */
  ------------------
  |  Branch (451:21): [True: 73.5k, False: 107k]
  ------------------
  452|  73.5k|                        return idx;
  453|       |
  454|  13.3k|        return IDX_NIL;
  ------------------
  |  |  111|  13.3k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  455|  86.8k|}
hashmap.c:dib_raw_ptr:
  408|  1.37M|static dib_raw_t* dib_raw_ptr(HashmapBase *h) {
  409|  1.37M|        return (dib_raw_t*)
  410|  1.37M|                ((uint8_t*) storage_ptr(h) + hashmap_type_info[h->type].entry_size * n_buckets(h));
  411|  1.37M|}
hashmap.c:storage_ptr:
  325|  4.60M|static void* storage_ptr(HashmapBase *h) {
  326|  4.60M|        return h->has_indirect ? h->indirect.storage
  ------------------
  |  Branch (326:16): [True: 4.29M, False: 306k]
  ------------------
  327|  4.60M|                               : h->direct.storage;
  328|  4.60M|}
hashmap.c:bucket_at:
  373|  3.22M|static struct hashmap_base_entry* bucket_at(HashmapBase *h, unsigned idx) {
  374|  3.22M|        return CAST_ALIGN_PTR(
  ------------------
  |  |  146|  3.22M|        ({                                                      \
  |  |  147|  3.22M|                const void *_p = (p);                           \
  |  |  148|  3.22M|                assert(((uintptr_t) _p) % alignof(t) == 0); \
  |  |  ------------------
  |  |  |  |   72|  3.22M|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|  3.22M|        do {                                                            \
  |  |  |  |  |  |   59|  3.22M|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   95|  3.22M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.22M]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   60|  3.22M|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   61|  3.22M|        } while (false)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|  3.22M|                (t *) _p;                                       \
  |  |  150|  3.22M|        })
  ------------------
  375|  3.22M|                        struct hashmap_base_entry,
  376|  3.22M|                        (uint8_t *) storage_ptr(h) + idx * hashmap_type_info[h->type].entry_size);
  377|  3.22M|}
hashmap.c:entry_value:
  506|   230k|static void* entry_value(HashmapBase *h, struct hashmap_base_entry *e) {
  507|   230k|        switch (h->type) {
  508|       |
  509|  41.7k|        case HASHMAP_TYPE_PLAIN:
  ------------------
  |  Branch (509:9): [True: 41.7k, False: 188k]
  ------------------
  510|   206k|        case HASHMAP_TYPE_ORDERED:
  ------------------
  |  Branch (510:9): [True: 164k, False: 66.1k]
  ------------------
  511|   206k|                return ((struct plain_hashmap_entry*)e)->value;
  512|       |
  513|  24.4k|        case HASHMAP_TYPE_SET:
  ------------------
  |  Branch (513:9): [True: 24.4k, False: 206k]
  ------------------
  514|  24.4k|                return (void*) e->key;
  515|       |
  516|      0|        default:
  ------------------
  |  Branch (516:9): [True: 0, False: 230k]
  ------------------
  517|      0|                assert_not_reached();
  ------------------
  |  |   76|      0|        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  518|   230k|        }
  519|   230k|}
hashmap.c:hashmap_base_new:
  771|  16.0k|static struct HashmapBase* hashmap_base_new(const struct hash_ops *hash_ops, enum HashmapType type) {
  772|  16.0k|        HashmapBase *h;
  773|  16.0k|        const struct hashmap_type_info *hi = &hashmap_type_info[type];
  774|       |
  775|  16.0k|        bool use_pool = mempool_enabled && mempool_enabled();  /* mempool_enabled is a weak symbol */
  ------------------
  |  Branch (775:25): [True: 16.0k, False: 0]
  |  Branch (775:44): [True: 16.0k, False: 0]
  ------------------
  776|       |
  777|  16.0k|        h = use_pool ? mempool_alloc0_tile(hi->mempool) : malloc0(hi->head_size);
  ------------------
  |  |   46|  16.0k|#define malloc0(n) (calloc(1, (n) ?: 1))
  |  |  ------------------
  |  |  |  Branch (46:31): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (777:13): [True: 16.0k, False: 0]
  ------------------
  778|  16.0k|        if (!h)
  ------------------
  |  Branch (778:13): [True: 0, False: 16.0k]
  ------------------
  779|      0|                return NULL;
  780|       |
  781|  16.0k|        h->type = type;
  782|  16.0k|        h->from_pool = use_pool;
  783|  16.0k|        h->hash_ops = hash_ops ?: &trivial_hash_ops;
  ------------------
  |  Branch (783:23): [True: 15.6k, False: 441]
  ------------------
  784|       |
  785|  16.0k|        if (type == HASHMAP_TYPE_ORDERED) {
  ------------------
  |  Branch (785:13): [True: 2.45k, False: 18.4E]
  ------------------
  786|  2.45k|                OrderedHashmap *lh = (OrderedHashmap*)h;
  787|  2.45k|                lh->iterate_list_head = lh->iterate_list_tail = IDX_NIL;
  ------------------
  |  |  111|  2.45k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  788|  2.45k|        }
  789|       |
  790|    441|        reset_direct_storage(h);
  791|       |
  792|    441|        static pthread_once_t once = PTHREAD_ONCE_INIT;
  793|    441|        assert_se(pthread_once(&once, shared_hash_key_initialize) == 0);
  ------------------
  |  |   65|    441|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    441|        do {                                                            \
  |  |  |  |   59|    441|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    441|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 441]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    441|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    441|        } while (false)
  |  |  ------------------
  ------------------
  794|       |
  795|       |#if ENABLE_DEBUG_HASHMAP
  796|       |        assert_se(pthread_mutex_lock(&hashmap_debug_list_mutex) == 0);
  797|       |        LIST_PREPEND(debug_list, hashmap_debug_list, &h->debug);
  798|       |        assert_se(pthread_mutex_unlock(&hashmap_debug_list_mutex) == 0);
  799|       |#endif
  800|       |
  801|    441|        return h;
  802|  16.0k|}
hashmap.c:shared_hash_key_initialize:
  767|      1|static void shared_hash_key_initialize(void) {
  768|      1|        random_bytes(shared_hash_key, sizeof(shared_hash_key));
  769|      1|}
hashmap.c:hashmap_base_ensure_allocated:
  817|   137k|                                         enum HashmapType type) {
  818|   137k|        HashmapBase *q;
  819|       |
  820|   137k|        assert(h);
  ------------------
  |  |   72|   137k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   137k|        do {                                                            \
  |  |  |  |   59|   137k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   137k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 137k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   137k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   137k|        } while (false)
  |  |  ------------------
  ------------------
  821|       |
  822|   137k|        if (*h) {
  ------------------
  |  Branch (822:13): [True: 131k, False: 5.62k]
  ------------------
  823|   131k|                assert((*h)->hash_ops == (hash_ops ?: &trivial_hash_ops));
  ------------------
  |  |   72|   131k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   131k|        do {                                                            \
  |  |  |  |   59|   131k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   131k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 131k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 131k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   131k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   131k|        } while (false)
  |  |  ------------------
  ------------------
  824|   131k|                return 0;
  825|   131k|        }
  826|       |
  827|  5.62k|        q = hashmap_base_new(hash_ops, type);
  828|  5.62k|        if (!q)
  ------------------
  |  Branch (828:13): [True: 0, False: 5.62k]
  ------------------
  829|      0|                return -ENOMEM;
  830|       |
  831|  5.62k|        *h = q;
  832|  5.62k|        return 1;
  833|  5.62k|}
hashmap.c:hashmap_free_no_clear:
  887|  16.0k|static void hashmap_free_no_clear(HashmapBase *h) {
  888|  16.0k|        assert(!h->has_indirect);
  ------------------
  |  |   72|  16.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  16.0k|        do {                                                            \
  |  |  |  |   59|  16.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  16.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 16.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  16.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  16.0k|        } while (false)
  |  |  ------------------
  ------------------
  889|  16.0k|        assert(h->n_direct_entries == 0);
  ------------------
  |  |   72|  16.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  16.0k|        do {                                                            \
  |  |  |  |   59|  16.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  16.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 16.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  16.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  16.0k|        } while (false)
  |  |  ------------------
  ------------------
  890|       |
  891|       |#if ENABLE_DEBUG_HASHMAP
  892|       |        assert_se(pthread_mutex_lock(&hashmap_debug_list_mutex) == 0);
  893|       |        LIST_REMOVE(debug_list, hashmap_debug_list, &h->debug);
  894|       |        assert_se(pthread_mutex_unlock(&hashmap_debug_list_mutex) == 0);
  895|       |#endif
  896|       |
  897|  16.0k|        if (h->from_pool) {
  ------------------
  |  Branch (897:13): [True: 16.0k, False: 0]
  ------------------
  898|       |                /* Ensure that the object didn't get migrated between threads. */
  899|  16.0k|                assert_se(is_main_thread());
  ------------------
  |  |   65|  16.0k|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  16.0k|        do {                                                            \
  |  |  |  |   59|  16.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  16.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 16.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  16.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  16.0k|        } while (false)
  |  |  ------------------
  ------------------
  900|  16.0k|                mempool_free_tile(hashmap_type_info[h->type].mempool, h);
  901|  16.0k|        } else
  902|      0|                free(h);
  903|  16.0k|}
hashmap.c:reset_direct_storage:
  757|  32.0k|static void reset_direct_storage(HashmapBase *h) {
  758|  32.0k|        const struct hashmap_type_info *hi = &hashmap_type_info[h->type];
  759|  32.0k|        void *p;
  760|       |
  761|  32.0k|        assert(!h->has_indirect);
  ------------------
  |  |   72|  32.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  32.0k|        do {                                                            \
  |  |  |  |   59|  32.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  32.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 32.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  32.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  32.0k|        } while (false)
  |  |  ------------------
  ------------------
  762|       |
  763|  32.0k|        p = mempset(h->direct.storage, 0, hi->entry_size * hi->n_direct_buckets);
  764|  32.0k|        memset(p, DIB_RAW_INIT, sizeof(dib_raw_t) * hi->n_direct_buckets);
  ------------------
  |  |  127|  32.0k|#define DIB_RAW_INIT     ((char)DIB_RAW_FREE) /* a byte to memset a DIB store with when initializing */
  |  |  ------------------
  |  |  |  |  126|  32.0k|#define DIB_RAW_FREE     ((dib_raw_t)0xffU)   /* a free bucket */
  |  |  ------------------
  ------------------
  765|  32.0k|}
hashmap.c:base_set_dirty:
  349|   249k|static void base_set_dirty(HashmapBase *h) {
  350|   249k|        h->dirty = true;
  351|   249k|}
hashmap.c:base_bucket_hash:
  335|   501k|static unsigned base_bucket_hash(HashmapBase *h, const void *p) {
  336|   501k|        struct siphash state;
  337|   501k|        uint64_t hash;
  338|       |
  339|   501k|        siphash24_init(&state, hash_key(h));
  340|       |
  341|   501k|        h->hash_ops->hash(p, &state);
  342|       |
  343|   501k|        hash = siphash24_finalize(&state);
  344|       |
  345|   501k|        return (unsigned) (hash % n_buckets(h));
  346|   501k|}
hashmap.c:hash_key:
  330|   501k|static uint8_t* hash_key(HashmapBase *h) {
  331|   501k|        return h->has_indirect ? h->indirect.hash_key
  ------------------
  |  Branch (331:16): [True: 434k, False: 66.6k]
  ------------------
  332|   501k|                               : shared_hash_key;
  333|   501k|}
hashmap.c:base_bucket_scan:
 1217|   350k|static unsigned base_bucket_scan(HashmapBase *h, unsigned idx, const void *key) {
 1218|   350k|        struct hashmap_base_entry *e;
 1219|   350k|        unsigned dib, distance;
 1220|   350k|        dib_raw_t *dibs = dib_raw_ptr(h);
 1221|       |
 1222|   350k|        assert(idx < n_buckets(h));
  ------------------
  |  |   72|   350k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   350k|        do {                                                            \
  |  |  |  |   59|   350k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   350k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 350k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   350k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   350k|        } while (false)
  |  |  ------------------
  ------------------
 1223|       |
 1224|   590k|        for (distance = 0; ; distance++) {
 1225|   590k|                if (dibs[idx] == DIB_RAW_FREE)
  ------------------
  |  |  126|   590k|#define DIB_RAW_FREE     ((dib_raw_t)0xffU)   /* a free bucket */
  ------------------
  |  Branch (1225:21): [True: 194k, False: 396k]
  ------------------
 1226|   194k|                        return IDX_NIL;
  ------------------
  |  |  111|   194k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
 1227|       |
 1228|   396k|                dib = bucket_calculate_dib(h, idx, dibs[idx]);
 1229|       |
 1230|   396k|                if (dib < distance)
  ------------------
  |  Branch (1230:21): [True: 70.2k, False: 326k]
  ------------------
 1231|  70.2k|                        return IDX_NIL;
  ------------------
  |  |  111|  70.2k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
 1232|   326k|                if (dib == distance) {
  ------------------
  |  Branch (1232:21): [True: 229k, False: 97.3k]
  ------------------
 1233|   229k|                        e = bucket_at(h, idx);
 1234|   229k|                        if (h->hash_ops->compare(e->key, key) == 0)
  ------------------
  |  Branch (1234:29): [True: 86.5k, False: 142k]
  ------------------
 1235|  86.5k|                                return idx;
 1236|   229k|                }
 1237|       |
 1238|   239k|                idx = next_idx(h, idx);
 1239|   239k|        }
 1240|   350k|}
hashmap.c:bucket_calculate_dib:
  418|   752k|static unsigned bucket_calculate_dib(HashmapBase *h, unsigned idx, dib_raw_t raw_dib) {
  419|   752k|        unsigned initial_bucket;
  420|       |
  421|   752k|        if (raw_dib == DIB_RAW_FREE)
  ------------------
  |  |  126|   752k|#define DIB_RAW_FREE     ((dib_raw_t)0xffU)   /* a free bucket */
  ------------------
  |  Branch (421:13): [True: 0, False: 752k]
  ------------------
  422|      0|                return DIB_FREE;
  ------------------
  |  |  129|      0|#define DIB_FREE UINT_MAX
  ------------------
  423|       |
  424|   752k|        if (_likely_(raw_dib < DIB_RAW_OVERFLOW))
  ------------------
  |  |   83|   752k|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  ------------------
  |  |  |  Branch (83:21): [True: 752k, False: 0]
  |  |  ------------------
  ------------------
  425|   752k|                return raw_dib;
  426|       |
  427|       |        /*
  428|       |         * Having an overflow DIB value is very unlikely. The hash function
  429|       |         * would have to be bad. For example, in a table of size 2^24 filled
  430|       |         * to load factor 0.9 the maximum observed DIB is only about 60.
  431|       |         * In theory (assuming I used Maxima correctly), for an infinite size
  432|       |         * hash table with load factor 0.8 the probability of a given entry
  433|       |         * having DIB > 40 is 1.9e-8.
  434|       |         * This returns the correct DIB value by recomputing the hash value in
  435|       |         * the unlikely case. XXX Hitting this case could be a hint to rehash.
  436|       |         */
  437|      0|        initial_bucket = bucket_hash(h, bucket_at(h, idx)->key);
  ------------------
  |  |  347|      0|#define bucket_hash(h, p) base_bucket_hash(HASHMAP_BASE(h), p)
  |  |  ------------------
  |  |  |  |   46|      0|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|      0|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   38|      0|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      0|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   47|      0|                (HashmapBase*)(h), \
  |  |  |  |   48|      0|                (void)0)
  |  |  ------------------
  ------------------
  438|      0|        return bucket_distance(h, idx, initial_bucket);
  439|   752k|}
hashmap.c:next_idx:
  498|   881k|static unsigned next_idx(HashmapBase *h, unsigned idx) {
  499|   881k|        return (idx + 1U) % n_buckets(h);
  500|   881k|}
hashmap.c:plain_bucket_at:
  379|  1.85k|static struct plain_hashmap_entry* plain_bucket_at(Hashmap *h, unsigned idx) {
  380|  1.85k|        return (struct plain_hashmap_entry*) bucket_at(HASHMAP_BASE(h), idx);
  ------------------
  |  |   46|  1.85k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  1.85k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  1.85k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  1.85k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  1.85k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  1.85k|                (HashmapBase*)(h), \
  |  |   48|  1.85k|                (void)0)
  ------------------
  381|  1.85k|}
hashmap.c:bucket_at_swap:
  391|  1.24M|static struct ordered_hashmap_entry* bucket_at_swap(struct swap_entries *swap, unsigned idx) {
  392|  1.24M|        return &swap->e[idx - _IDX_SWAP_BEGIN];
  ------------------
  |  |  105|  1.24M|#define _IDX_SWAP_BEGIN     (UINT_MAX - 3)
  ------------------
  393|  1.24M|}
hashmap.c:hashmap_base_put_boldly:
 1024|   117k|                                   struct swap_entries *swap, bool may_resize) {
 1025|   117k|        struct ordered_hashmap_entry *new_entry;
 1026|   117k|        int r;
 1027|       |
 1028|   117k|        assert(idx < n_buckets(h));
  ------------------
  |  |   72|   117k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   117k|        do {                                                            \
  |  |  |  |   59|   117k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   117k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 117k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   117k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   117k|        } while (false)
  |  |  ------------------
  ------------------
 1029|       |
 1030|   117k|        new_entry = bucket_at_swap(swap, IDX_PUT);
  ------------------
  |  |  106|   117k|#define IDX_PUT             (_IDX_SWAP_BEGIN + 0)
  |  |  ------------------
  |  |  |  |  105|   117k|#define _IDX_SWAP_BEGIN     (UINT_MAX - 3)
  |  |  ------------------
  ------------------
 1031|       |
 1032|   117k|        if (may_resize) {
  ------------------
  |  Branch (1032:13): [True: 117k, False: 0]
  ------------------
 1033|   117k|                r = resize_buckets(h, 1);
 1034|   117k|                if (r < 0)
  ------------------
  |  Branch (1034:21): [True: 0, False: 117k]
  ------------------
 1035|      0|                        return r;
 1036|   117k|                if (r > 0)
  ------------------
  |  Branch (1036:21): [True: 5.76k, False: 112k]
  ------------------
 1037|  5.76k|                        idx = bucket_hash(h, new_entry->p.b.key);
  ------------------
  |  |  347|  5.76k|#define bucket_hash(h, p) base_bucket_hash(HASHMAP_BASE(h), p)
  |  |  ------------------
  |  |  |  |   46|  5.76k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|  5.76k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.76k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   38|  5.76k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  5.76k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   47|  5.76k|                (HashmapBase*)(h), \
  |  |  |  |   48|  5.76k|                (void)0)
  |  |  ------------------
  ------------------
 1038|   117k|        }
 1039|   117k|        assert(n_entries(h) < n_buckets(h));
  ------------------
  |  |   72|   117k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   117k|        do {                                                            \
  |  |  |  |   59|   117k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   117k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 117k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   117k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   117k|        } while (false)
  |  |  ------------------
  ------------------
 1040|       |
 1041|   117k|        if (h->type == HASHMAP_TYPE_ORDERED) {
  ------------------
  |  Branch (1041:13): [True: 70.8k, False: 47.0k]
  ------------------
 1042|  70.8k|                OrderedHashmap *lh = (OrderedHashmap*) h;
 1043|       |
 1044|  70.8k|                new_entry->iterate_next = IDX_NIL;
  ------------------
  |  |  111|  70.8k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
 1045|  70.8k|                new_entry->iterate_previous = lh->iterate_list_tail;
 1046|       |
 1047|  70.8k|                if (lh->iterate_list_tail != IDX_NIL) {
  ------------------
  |  |  111|  70.8k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  |  Branch (1047:21): [True: 68.4k, False: 2.45k]
  ------------------
 1048|  68.4k|                        struct ordered_hashmap_entry *old_tail;
 1049|       |
 1050|  68.4k|                        old_tail = ordered_bucket_at(lh, lh->iterate_list_tail);
 1051|  68.4k|                        assert(old_tail->iterate_next == IDX_NIL);
  ------------------
  |  |   72|  68.4k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  68.4k|        do {                                                            \
  |  |  |  |   59|  68.4k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  68.4k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 68.4k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  68.4k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  68.4k|        } while (false)
  |  |  ------------------
  ------------------
 1052|  68.4k|                        old_tail->iterate_next = IDX_PUT;
  ------------------
  |  |  106|  68.4k|#define IDX_PUT             (_IDX_SWAP_BEGIN + 0)
  |  |  ------------------
  |  |  |  |  105|  68.4k|#define _IDX_SWAP_BEGIN     (UINT_MAX - 3)
  |  |  ------------------
  ------------------
 1053|  68.4k|                }
 1054|       |
 1055|  70.8k|                lh->iterate_list_tail = IDX_PUT;
  ------------------
  |  |  106|  70.8k|#define IDX_PUT             (_IDX_SWAP_BEGIN + 0)
  |  |  ------------------
  |  |  |  |  105|  70.8k|#define _IDX_SWAP_BEGIN     (UINT_MAX - 3)
  |  |  ------------------
  ------------------
 1056|  70.8k|                if (lh->iterate_list_head == IDX_NIL)
  ------------------
  |  |  111|  70.8k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  |  Branch (1056:21): [True: 2.45k, False: 68.4k]
  ------------------
 1057|  2.45k|                        lh->iterate_list_head = IDX_PUT;
  ------------------
  |  |  106|  2.45k|#define IDX_PUT             (_IDX_SWAP_BEGIN + 0)
  |  |  ------------------
  |  |  |  |  105|  2.45k|#define _IDX_SWAP_BEGIN     (UINT_MAX - 3)
  |  |  ------------------
  ------------------
 1058|  70.8k|        }
 1059|       |
 1060|   117k|        assert_se(hashmap_put_robin_hood(h, idx, swap) == false);
  ------------------
  |  |   65|   117k|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   117k|        do {                                                            \
  |  |  |  |   59|   117k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   117k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 117k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   117k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   117k|        } while (false)
  |  |  ------------------
  ------------------
 1061|       |
 1062|   117k|        n_entries_inc(h);
 1063|       |#if ENABLE_DEBUG_HASHMAP
 1064|       |        h->debug.max_entries = MAX(h->debug.max_entries, n_entries(h));
 1065|       |#endif
 1066|       |
 1067|   117k|        base_set_dirty(h);
 1068|       |
 1069|   117k|        return 1;
 1070|   117k|}
hashmap.c:hashmap_put_robin_hood:
  966|   261k|                                   struct swap_entries *swap) {
  967|   261k|        dib_raw_t raw_dib, *dibs;
  968|   261k|        unsigned dib, distance;
  969|       |
  970|       |#if ENABLE_DEBUG_HASHMAP
  971|       |        h->debug.put_count++;
  972|       |#endif
  973|       |
  974|   261k|        dibs = dib_raw_ptr(h);
  975|       |
  976|   561k|        for (distance = 0; ; distance++) {
  977|   561k|                raw_dib = dibs[idx];
  978|   561k|                if (IN_SET(raw_dib, DIB_RAW_FREE, DIB_RAW_REHASH)) {
  ------------------
  |  |  361|   561k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 261k, False: 299k]
  |  |  ------------------
  |  |  362|   561k|                bool _found = false;                                    \
  |  |  363|   561k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|   561k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|   561k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|   561k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|   561k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|   561k|                switch (x) {                                            \
  |  |  368|   261k|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|   228k|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|   228k|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|   228k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|   261k|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|   261k|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 32.1k, False: 528k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 228k, False: 332k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|   261k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|   261k|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|   261k|                        _found = true;                                  \
  |  |  370|   261k|                        break;                                          \
  |  |  371|   299k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 299k, False: 261k]
  |  |  ------------------
  |  |  372|   299k|                        ;                                               \
  |  |  373|   561k|                }                                                       \
  |  |  374|   561k|                _found;                                                 \
  |  |  375|   561k|        })
  ------------------
  979|   261k|                        if (raw_dib == DIB_RAW_REHASH)
  ------------------
  |  |  125|   261k|#define DIB_RAW_REHASH   ((dib_raw_t)0xfeU)   /* entry yet to be rehashed during in-place resize */
  ------------------
  |  Branch (979:29): [True: 32.1k, False: 228k]
  ------------------
  980|  32.1k|                                bucket_move_entry(h, swap, idx, IDX_TMP);
  ------------------
  |  |  107|  32.1k|#define IDX_TMP             (_IDX_SWAP_BEGIN + 1)
  |  |  ------------------
  |  |  |  |  105|  32.1k|#define _IDX_SWAP_BEGIN     (UINT_MAX - 3)
  |  |  ------------------
  ------------------
  981|       |
  982|   261k|                        if (h->has_indirect && h->indirect.idx_lowest_entry > idx)
  ------------------
  |  Branch (982:29): [True: 239k, False: 21.4k]
  |  Branch (982:48): [True: 0, False: 239k]
  ------------------
  983|      0|                                h->indirect.idx_lowest_entry = idx;
  984|       |
  985|   261k|                        bucket_set_dib(h, idx, distance);
  986|   261k|                        bucket_move_entry(h, swap, IDX_PUT, idx);
  ------------------
  |  |  106|   261k|#define IDX_PUT             (_IDX_SWAP_BEGIN + 0)
  |  |  ------------------
  |  |  |  |  105|   261k|#define _IDX_SWAP_BEGIN     (UINT_MAX - 3)
  |  |  ------------------
  ------------------
  987|   261k|                        if (raw_dib == DIB_RAW_REHASH) {
  ------------------
  |  |  125|   261k|#define DIB_RAW_REHASH   ((dib_raw_t)0xfeU)   /* entry yet to be rehashed during in-place resize */
  ------------------
  |  Branch (987:29): [True: 32.1k, False: 228k]
  ------------------
  988|  32.1k|                                bucket_move_entry(h, swap, IDX_TMP, IDX_PUT);
  ------------------
  |  |  107|  32.1k|#define IDX_TMP             (_IDX_SWAP_BEGIN + 1)
  |  |  ------------------
  |  |  |  |  105|  32.1k|#define _IDX_SWAP_BEGIN     (UINT_MAX - 3)
  |  |  ------------------
  ------------------
                                              bucket_move_entry(h, swap, IDX_TMP, IDX_PUT);
  ------------------
  |  |  106|  32.1k|#define IDX_PUT             (_IDX_SWAP_BEGIN + 0)
  |  |  ------------------
  |  |  |  |  105|  32.1k|#define _IDX_SWAP_BEGIN     (UINT_MAX - 3)
  |  |  ------------------
  ------------------
  989|  32.1k|                                return true;
  990|  32.1k|                        }
  991|       |
  992|   228k|                        return false;
  993|   261k|                }
  994|       |
  995|   299k|                dib = bucket_calculate_dib(h, idx, raw_dib);
  996|       |
  997|   299k|                if (dib < distance) {
  ------------------
  |  Branch (997:21): [True: 126k, False: 173k]
  ------------------
  998|       |                        /* Found a wealthier entry. Go Robin Hood! */
  999|   126k|                        bucket_set_dib(h, idx, distance);
 1000|       |
 1001|       |                        /* swap the entries */
 1002|   126k|                        bucket_move_entry(h, swap, idx, IDX_TMP);
  ------------------
  |  |  107|   126k|#define IDX_TMP             (_IDX_SWAP_BEGIN + 1)
  |  |  ------------------
  |  |  |  |  105|   126k|#define _IDX_SWAP_BEGIN     (UINT_MAX - 3)
  |  |  ------------------
  ------------------
 1003|   126k|                        bucket_move_entry(h, swap, IDX_PUT, idx);
  ------------------
  |  |  106|   126k|#define IDX_PUT             (_IDX_SWAP_BEGIN + 0)
  |  |  ------------------
  |  |  |  |  105|   126k|#define _IDX_SWAP_BEGIN     (UINT_MAX - 3)
  |  |  ------------------
  ------------------
 1004|   126k|                        bucket_move_entry(h, swap, IDX_TMP, IDX_PUT);
  ------------------
  |  |  107|   126k|#define IDX_TMP             (_IDX_SWAP_BEGIN + 1)
  |  |  ------------------
  |  |  |  |  105|   126k|#define _IDX_SWAP_BEGIN     (UINT_MAX - 3)
  |  |  ------------------
  ------------------
                                      bucket_move_entry(h, swap, IDX_TMP, IDX_PUT);
  ------------------
  |  |  106|   126k|#define IDX_PUT             (_IDX_SWAP_BEGIN + 0)
  |  |  ------------------
  |  |  |  |  105|   126k|#define _IDX_SWAP_BEGIN     (UINT_MAX - 3)
  |  |  ------------------
  ------------------
 1005|       |
 1006|   126k|                        distance = dib;
 1007|   126k|                }
 1008|       |
 1009|   299k|                idx = next_idx(h, idx);
 1010|   299k|        }
 1011|   261k|}
hashmap.c:bucket_move_entry:
  463|   870k|                              unsigned from, unsigned to) {
  464|   870k|        struct hashmap_base_entry *e_from, *e_to;
  465|       |
  466|   870k|        assert(from != to);
  ------------------
  |  |   72|   870k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   870k|        do {                                                            \
  |  |  |  |   59|   870k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   870k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 870k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   870k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   870k|        } while (false)
  |  |  ------------------
  ------------------
  467|       |
  468|   870k|        e_from = bucket_at_virtual(h, swap, from);
  469|   870k|        e_to   = bucket_at_virtual(h, swap, to);
  470|       |
  471|   870k|        memcpy(e_to, e_from, hashmap_type_info[h->type].entry_size);
  472|       |
  473|   870k|        if (h->type == HASHMAP_TYPE_ORDERED) {
  ------------------
  |  Branch (473:13): [True: 630k, False: 240k]
  ------------------
  474|   630k|                OrderedHashmap *lh = (OrderedHashmap*) h;
  475|   630k|                struct ordered_hashmap_entry *le, *le_to;
  476|       |
  477|   630k|                le_to = (struct ordered_hashmap_entry*) e_to;
  478|       |
  479|   630k|                if (le_to->iterate_next != IDX_NIL) {
  ------------------
  |  |  111|   630k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  |  Branch (479:21): [True: 553k, False: 76.6k]
  ------------------
  480|   553k|                        le = (struct ordered_hashmap_entry*)
  481|   553k|                             bucket_at_virtual(h, swap, le_to->iterate_next);
  482|   553k|                        le->iterate_previous = to;
  483|   553k|                }
  484|       |
  485|   630k|                if (le_to->iterate_previous != IDX_NIL) {
  ------------------
  |  |  111|   630k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  |  Branch (485:21): [True: 619k, False: 10.4k]
  ------------------
  486|   619k|                        le = (struct ordered_hashmap_entry*)
  487|   619k|                             bucket_at_virtual(h, swap, le_to->iterate_previous);
  488|   619k|                        le->iterate_next = to;
  489|   619k|                }
  490|       |
  491|   630k|                if (lh->iterate_list_head == from)
  ------------------
  |  Branch (491:21): [True: 10.4k, False: 619k]
  ------------------
  492|  10.4k|                        lh->iterate_list_head = to;
  493|   630k|                if (lh->iterate_list_tail == from)
  ------------------
  |  Branch (493:21): [True: 76.6k, False: 553k]
  ------------------
  494|  76.6k|                        lh->iterate_list_tail = to;
  495|   630k|        }
  496|   870k|}
hashmap.c:bucket_at_virtual:
  398|  2.91M|                                                    unsigned idx) {
  399|  2.91M|        if (idx < _IDX_SWAP_BEGIN)
  ------------------
  |  |  105|  2.91M|#define _IDX_SWAP_BEGIN     (UINT_MAX - 3)
  ------------------
  |  Branch (399:13): [True: 1.93M, False: 977k]
  ------------------
  400|  1.93M|                return bucket_at(h, idx);
  401|       |
  402|   977k|        if (idx < _IDX_SWAP_END)
  ------------------
  |  |  108|   977k|#define _IDX_SWAP_END       (_IDX_SWAP_BEGIN + 2)
  |  |  ------------------
  |  |  |  |  105|   977k|#define _IDX_SWAP_BEGIN     (UINT_MAX - 3)
  |  |  ------------------
  ------------------
  |  Branch (402:13): [True: 977k, False: 0]
  ------------------
  403|   977k|                return &bucket_at_swap(swap, idx)->p.b;
  404|       |
  405|      0|        assert_not_reached();
  ------------------
  |  |   76|      0|        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|      0|}
hashmap.c:bucket_set_dib:
  441|   558k|static void bucket_set_dib(HashmapBase *h, unsigned idx, unsigned dib) {
  442|   558k|        dib_raw_ptr(h)[idx] = dib != DIB_FREE ? MIN(dib, DIB_RAW_OVERFLOW) : DIB_RAW_FREE;
  ------------------
  |  |  129|   558k|#define DIB_FREE UINT_MAX
  ------------------
                      dib_raw_ptr(h)[idx] = dib != DIB_FREE ? MIN(dib, DIB_RAW_OVERFLOW) : DIB_RAW_FREE;
  ------------------
  |  |  220|   442k|#define MIN(a, b) __MIN(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  222|   442k|        ({                                              \
  |  |  |  |  223|   442k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  224|   442k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  225|   442k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|   442k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|   442k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|   442k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|   442k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|   442k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|   442k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|   442k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|   442k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|   442k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|   442k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|   442k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|   442k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (225:17): [True: 442k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  226|   442k|        })
  |  |  ------------------
  ------------------
                      dib_raw_ptr(h)[idx] = dib != DIB_FREE ? MIN(dib, DIB_RAW_OVERFLOW) : DIB_RAW_FREE;
  ------------------
  |  |  126|   673k|#define DIB_RAW_FREE     ((dib_raw_t)0xffU)   /* a free bucket */
  ------------------
  |  Branch (442:31): [True: 442k, False: 115k]
  ------------------
  443|   558k|}
hashmap.c:n_entries_inc:
  311|   117k|static void n_entries_inc(HashmapBase *h) {
  312|   117k|        if (h->has_indirect)
  ------------------
  |  Branch (312:13): [True: 96.4k, False: 21.4k]
  ------------------
  313|  96.4k|                h->indirect.n_entries++;
  314|  21.4k|        else
  315|  21.4k|                h->n_direct_entries++;
  316|   117k|}
hashmap.c:base_remove_entry:
  521|   115k|static void base_remove_entry(HashmapBase *h, unsigned idx) {
  522|   115k|        unsigned left, right, prev, dib;
  523|   115k|        dib_raw_t raw_dib, *dibs;
  524|       |
  525|   115k|        dibs = dib_raw_ptr(h);
  526|   115k|        assert(dibs[idx] != DIB_RAW_FREE);
  ------------------
  |  |   72|   115k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   115k|        do {                                                            \
  |  |  |  |   59|   115k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   115k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 115k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   115k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   115k|        } while (false)
  |  |  ------------------
  ------------------
  527|       |
  528|       |#if ENABLE_DEBUG_HASHMAP
  529|       |        h->debug.rem_count++;
  530|       |        h->debug.last_rem_idx = idx;
  531|       |#endif
  532|       |
  533|   115k|        left = idx;
  534|       |        /* Find the stop bucket ("right"). It is either free or has DIB == 0. */
  535|   170k|        for (right = next_idx(h, left); ; right = next_idx(h, right)) {
  536|   170k|                raw_dib = dibs[right];
  537|   170k|                if (IN_SET(raw_dib, 0, DIB_RAW_FREE))
  ------------------
  |  |  361|   170k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 115k, False: 55.5k]
  |  |  ------------------
  |  |  362|   170k|                bool _found = false;                                    \
  |  |  363|   170k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|   170k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|   170k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|   170k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|   170k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|   170k|                switch (x) {                                            \
  |  |  368|   115k|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|  30.2k|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|  30.2k|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|  30.2k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|   115k|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|   115k|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 85.0k, False: 85.7k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 30.2k, False: 140k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|   115k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|   115k|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|   115k|                        _found = true;                                  \
  |  |  370|   115k|                        break;                                          \
  |  |  371|  55.5k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 55.5k, False: 115k]
  |  |  ------------------
  |  |  372|  55.5k|                        ;                                               \
  |  |  373|   170k|                }                                                       \
  |  |  374|   170k|                _found;                                                 \
  |  |  375|   170k|        })
  ------------------
  538|   115k|                        break;
  539|       |
  540|       |                /* The buckets are not supposed to be all occupied and with DIB > 0.
  541|       |                 * That would mean we could make everyone better off by shifting them
  542|       |                 * backward. This scenario is impossible. */
  543|  55.5k|                assert(left != right);
  ------------------
  |  |   72|  55.5k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  55.5k|        do {                                                            \
  |  |  |  |   59|  55.5k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  55.5k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 55.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  55.5k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  55.5k|        } while (false)
  |  |  ------------------
  ------------------
  544|  55.5k|        }
  545|       |
  546|   115k|        if (h->type == HASHMAP_TYPE_ORDERED) {
  ------------------
  |  Branch (546:13): [True: 68.8k, False: 46.4k]
  ------------------
  547|  68.8k|                OrderedHashmap *lh = (OrderedHashmap*) h;
  548|  68.8k|                struct ordered_hashmap_entry *le = ordered_bucket_at(lh, idx);
  549|       |
  550|  68.8k|                if (le->iterate_next != IDX_NIL)
  ------------------
  |  |  111|  68.8k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  |  Branch (550:21): [True: 66.5k, False: 2.26k]
  ------------------
  551|  66.5k|                        ordered_bucket_at(lh, le->iterate_next)->iterate_previous = le->iterate_previous;
  552|  2.26k|                else
  553|  2.26k|                        lh->iterate_list_tail = le->iterate_previous;
  554|       |
  555|  68.8k|                if (le->iterate_previous != IDX_NIL)
  ------------------
  |  |  111|  68.8k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
  |  Branch (555:21): [True: 5.91k, False: 62.9k]
  ------------------
  556|  5.91k|                        ordered_bucket_at(lh, le->iterate_previous)->iterate_next = le->iterate_next;
  557|  62.9k|                else
  558|  62.9k|                        lh->iterate_list_head = le->iterate_next;
  559|  68.8k|        }
  560|       |
  561|       |        /* Now shift all buckets in the interval (left, right) one step backwards */
  562|   170k|        for (prev = left, left = next_idx(h, left); left != right;
  ------------------
  |  Branch (562:53): [True: 55.5k, False: 115k]
  ------------------
  563|   115k|             prev = left, left = next_idx(h, left)) {
  564|  55.5k|                dib = bucket_calculate_dib(h, left, dibs[left]);
  565|  55.5k|                assert(dib != 0);
  ------------------
  |  |   72|  55.5k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  55.5k|        do {                                                            \
  |  |  |  |   59|  55.5k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  55.5k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 55.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  55.5k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  55.5k|        } while (false)
  |  |  ------------------
  ------------------
  566|  55.5k|                bucket_move_entry(h, NULL, left, prev);
  567|  55.5k|                bucket_set_dib(h, prev, dib - 1);
  568|  55.5k|        }
  569|       |
  570|   115k|        bucket_mark_free(h, prev);
  571|   115k|        n_entries_dec(h);
  572|   115k|        base_set_dirty(h);
  573|   115k|}
hashmap.c:bucket_mark_free:
  457|   115k|static void bucket_mark_free(HashmapBase *h, unsigned idx) {
  458|   115k|        memzero(bucket_at(h, idx), hashmap_type_info[h->type].entry_size);
  ------------------
  |  |   17|   115k|        ({                                                      \
  |  |   18|   115k|                size_t _l_ = (l);                               \
  |  |   19|   115k|                _l_ > 0 ? memset((x), 0, _l_) : (x);            \
  |  |  ------------------
  |  |  |  Branch (19:17): [True: 115k, False: 0]
  |  |  ------------------
  |  |   20|   115k|        })
  ------------------
  459|   115k|        bucket_set_dib(h, idx, DIB_FREE);
  ------------------
  |  |  129|   115k|#define DIB_FREE UINT_MAX
  ------------------
  460|   115k|}
hashmap.c:n_entries_dec:
  318|   115k|static void n_entries_dec(HashmapBase *h) {
  319|   115k|        if (h->has_indirect)
  ------------------
  |  Branch (319:13): [True: 100k, False: 14.7k]
  ------------------
  320|   100k|                h->indirect.n_entries--;
  321|  14.7k|        else
  322|  14.7k|                h->n_direct_entries--;
  323|   115k|}
hashmap.c:prev_idx:
  502|    216|static unsigned prev_idx(HashmapBase *h, unsigned idx) {
  503|    216|        return (n_buckets(h) + idx - 1U) % n_buckets(h);
  504|    216|}
hashmap.c:find_first_entry:
 1562|   110k|static unsigned find_first_entry(HashmapBase *h) {
 1563|   110k|        Iterator i = ITERATOR_FIRST;
  ------------------
  |  |   20|   110k|#define ITERATOR_FIRST ((Iterator) { .idx = _IDX_ITERATOR_FIRST, .next_key = NULL })
  |  |  ------------------
  |  |  |  |   19|   110k|#define _IDX_ITERATOR_FIRST (UINT_MAX - 1)
  |  |  ------------------
  ------------------
 1564|       |
 1565|   110k|        if (!h || !n_entries(h))
  ------------------
  |  Branch (1565:13): [True: 13.0k, False: 97.7k]
  |  Branch (1565:19): [True: 0, False: 97.7k]
  ------------------
 1566|  13.0k|                return IDX_NIL;
  ------------------
  |  |  111|  13.0k|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  ------------------
 1567|       |
 1568|  97.7k|        return hashmap_iterate_entry(h, &i);
 1569|   110k|}
hashmap.c:n_entries:
  306|   455k|static unsigned n_entries(HashmapBase *h) {
  307|   455k|        return h->has_indirect ? h->indirect.n_entries
  ------------------
  |  Branch (307:16): [True: 368k, False: 87.0k]
  ------------------
  308|   455k|                               : h->n_direct_entries;
  309|   455k|}
hashmap.c:n_buckets:
  301|  3.65M|static unsigned n_buckets(HashmapBase *h) {
  302|  3.65M|        return h->has_indirect ? h->indirect.n_buckets
  ------------------
  |  Branch (302:16): [True: 3.21M, False: 437k]
  ------------------
  303|  3.65M|                               : hashmap_type_info[h->type].n_direct_buckets;
  304|  3.65M|}
hashmap.c:resize_buckets:
 1079|   117k|static int resize_buckets(HashmapBase *h, unsigned entries_add) {
 1080|   117k|        struct swap_entries swap;
 1081|   117k|        void *new_storage;
 1082|   117k|        dib_raw_t *old_dibs, *new_dibs;
 1083|   117k|        const struct hashmap_type_info *hi;
 1084|   117k|        unsigned idx, optimal_idx;
 1085|   117k|        unsigned old_n_buckets, new_n_buckets, n_rehashed, new_n_entries;
 1086|   117k|        uint8_t new_shift;
 1087|   117k|        bool rehash_next;
 1088|       |
 1089|   117k|        assert(h);
  ------------------
  |  |   72|   117k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   117k|        do {                                                            \
  |  |  |  |   59|   117k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   117k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 117k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   117k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   117k|        } while (false)
  |  |  ------------------
  ------------------
 1090|       |
 1091|   117k|        hi = &hashmap_type_info[h->type];
 1092|   117k|        new_n_entries = n_entries(h) + entries_add;
 1093|       |
 1094|       |        /* overflow? */
 1095|   117k|        if (_unlikely_(new_n_entries < entries_add))
  ------------------
  |  |   95|   117k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:23): [True: 0, False: 117k]
  |  |  ------------------
  ------------------
 1096|      0|                return -ENOMEM;
 1097|       |
 1098|       |        /* For direct storage we allow 100% load, because it's tiny. */
 1099|   117k|        if (!h->has_indirect && new_n_entries <= hi->n_direct_buckets)
  ------------------
  |  Branch (1099:13): [True: 23.9k, False: 94.0k]
  |  Branch (1099:33): [True: 21.4k, False: 2.45k]
  ------------------
 1100|  21.4k|                return 0;
 1101|       |
 1102|       |        /*
 1103|       |         * Load factor = n/m = 1 - (1/INV_KEEP_FREE).
 1104|       |         * From it follows: m = n + n/(INV_KEEP_FREE - 1)
 1105|       |         */
 1106|  96.4k|        new_n_buckets = new_n_entries + new_n_entries / (INV_KEEP_FREE - 1);
  ------------------
  |  |   78|  96.4k|#define INV_KEEP_FREE            5U
  ------------------
 1107|       |        /* overflow? */
 1108|  96.4k|        if (_unlikely_(new_n_buckets < new_n_entries))
  ------------------
  |  |   95|  96.4k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:23): [True: 0, False: 96.4k]
  |  |  ------------------
  ------------------
 1109|      0|                return -ENOMEM;
 1110|       |
 1111|  96.4k|        if (_unlikely_(new_n_buckets > UINT_MAX / (hi->entry_size + sizeof(dib_raw_t))))
  ------------------
  |  |   95|  96.4k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:23): [True: 0, False: 96.4k]
  |  |  ------------------
  ------------------
 1112|      0|                return -ENOMEM;
 1113|       |
 1114|  96.4k|        old_n_buckets = n_buckets(h);
 1115|       |
 1116|  96.4k|        if (_likely_(new_n_buckets <= old_n_buckets))
  ------------------
  |  |   83|  96.4k|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  ------------------
  |  |  |  Branch (83:21): [True: 90.7k, False: 5.76k]
  |  |  ------------------
  ------------------
 1117|  90.7k|                return 0;
 1118|       |
 1119|  5.76k|        new_shift = log2u_round_up(MAX(
  ------------------
  |  |  163|  5.76k|#define MAX(a, b) __MAX(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  165|  5.76k|        ({                                              \
  |  |  |  |  166|  5.76k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  167|  5.76k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  168|  5.76k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  5.76k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  5.76k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  5.76k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  5.76k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  5.76k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  5.76k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  5.76k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  5.76k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  5.76k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  5.76k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  5.76k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  5.76k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (168:17): [True: 3.31k, False: 2.45k]
  |  |  |  |  ------------------
  |  |  |  |  169|  5.76k|        })
  |  |  ------------------
  ------------------
 1120|  5.76k|                        new_n_buckets * (hi->entry_size + sizeof(dib_raw_t)),
 1121|  5.76k|                        2 * sizeof(struct direct_storage)));
 1122|       |
 1123|       |        /* Realloc storage (buckets and DIB array). */
 1124|  5.76k|        new_storage = realloc(h->has_indirect ? h->indirect.storage : NULL,
  ------------------
  |  Branch (1124:31): [True: 3.31k, False: 2.45k]
  ------------------
 1125|  5.76k|                              1U << new_shift);
 1126|  5.76k|        if (!new_storage)
  ------------------
  |  Branch (1126:13): [True: 0, False: 5.76k]
  ------------------
 1127|      0|                return -ENOMEM;
 1128|       |
 1129|       |        /* Must upgrade direct to indirect storage. */
 1130|  5.76k|        if (!h->has_indirect) {
  ------------------
  |  Branch (1130:13): [True: 2.45k, False: 3.31k]
  ------------------
 1131|  2.45k|                memcpy(new_storage, h->direct.storage,
 1132|  2.45k|                       old_n_buckets * (hi->entry_size + sizeof(dib_raw_t)));
 1133|  2.45k|                h->indirect.n_entries = h->n_direct_entries;
 1134|  2.45k|                h->indirect.idx_lowest_entry = 0;
 1135|  2.45k|                h->n_direct_entries = 0;
 1136|  2.45k|        }
 1137|       |
 1138|       |        /* Get a new hash key. If we've just upgraded to indirect storage,
 1139|       |         * allow reusing a previously generated key. It's still a different key
 1140|       |         * from the shared one that we used for direct storage. */
 1141|  5.76k|        get_hash_key(h->indirect.hash_key, !h->has_indirect);
 1142|       |
 1143|  5.76k|        h->has_indirect = true;
 1144|  5.76k|        h->indirect.storage = new_storage;
 1145|  5.76k|        h->indirect.n_buckets = (1U << new_shift) /
 1146|  5.76k|                                (hi->entry_size + sizeof(dib_raw_t));
 1147|       |
 1148|  5.76k|        old_dibs = (dib_raw_t*)((uint8_t*) new_storage + hi->entry_size * old_n_buckets);
 1149|  5.76k|        new_dibs = dib_raw_ptr(h);
 1150|       |
 1151|       |        /*
 1152|       |         * Move the DIB array to the new place, replacing valid DIB values with
 1153|       |         * DIB_RAW_REHASH to indicate all of the used buckets need rehashing.
 1154|       |         * Note: Overlap is not possible, because we have at least doubled the
 1155|       |         * number of buckets and dib_raw_t is smaller than any entry type.
 1156|       |         */
 1157|   184k|        for (idx = 0; idx < old_n_buckets; idx++) {
  ------------------
  |  Branch (1157:23): [True: 179k, False: 5.76k]
  ------------------
 1158|   179k|                assert(old_dibs[idx] != DIB_RAW_REHASH);
  ------------------
  |  |   72|   179k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   179k|        do {                                                            \
  |  |  |  |   59|   179k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   179k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 179k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   179k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   179k|        } while (false)
  |  |  ------------------
  ------------------
 1159|   179k|                new_dibs[idx] = old_dibs[idx] == DIB_RAW_FREE ? DIB_RAW_FREE
  ------------------
  |  |  126|   179k|#define DIB_RAW_FREE     ((dib_raw_t)0xffU)   /* a free bucket */
  ------------------
                              new_dibs[idx] = old_dibs[idx] == DIB_RAW_FREE ? DIB_RAW_FREE
  ------------------
  |  |  126|  34.2k|#define DIB_RAW_FREE     ((dib_raw_t)0xffU)   /* a free bucket */
  ------------------
  |  Branch (1159:33): [True: 34.2k, False: 144k]
  ------------------
 1160|   179k|                                                              : DIB_RAW_REHASH;
  ------------------
  |  |  125|   324k|#define DIB_RAW_REHASH   ((dib_raw_t)0xfeU)   /* entry yet to be rehashed during in-place resize */
  ------------------
 1161|   179k|        }
 1162|       |
 1163|       |        /* Zero the area of newly added entries (including the old DIB area) */
 1164|  5.76k|        memzero(bucket_at(h, old_n_buckets),
  ------------------
  |  |   17|  5.76k|        ({                                                      \
  |  |   18|  5.76k|                size_t _l_ = (l);                               \
  |  |   19|  5.76k|                _l_ > 0 ? memset((x), 0, _l_) : (x);            \
  |  |  ------------------
  |  |  |  Branch (19:17): [True: 5.76k, False: 0]
  |  |  ------------------
  |  |   20|  5.76k|        })
  ------------------
 1165|  5.76k|               (n_buckets(h) - old_n_buckets) * hi->entry_size);
 1166|       |
 1167|       |        /* The upper half of the new DIB array needs initialization */
 1168|  5.76k|        memset(&new_dibs[old_n_buckets], DIB_RAW_INIT,
  ------------------
  |  |  127|  5.76k|#define DIB_RAW_INIT     ((char)DIB_RAW_FREE) /* a byte to memset a DIB store with when initializing */
  |  |  ------------------
  |  |  |  |  126|  5.76k|#define DIB_RAW_FREE     ((dib_raw_t)0xffU)   /* a free bucket */
  |  |  ------------------
  ------------------
 1169|  5.76k|               (n_buckets(h) - old_n_buckets) * sizeof(dib_raw_t));
 1170|       |
 1171|       |        /* Rehash entries that need it */
 1172|  5.76k|        n_rehashed = 0;
 1173|   184k|        for (idx = 0; idx < old_n_buckets; idx++) {
  ------------------
  |  Branch (1173:23): [True: 179k, False: 5.76k]
  ------------------
 1174|   179k|                if (new_dibs[idx] != DIB_RAW_REHASH)
  ------------------
  |  |  125|   179k|#define DIB_RAW_REHASH   ((dib_raw_t)0xfeU)   /* entry yet to be rehashed during in-place resize */
  ------------------
  |  Branch (1174:21): [True: 66.4k, False: 112k]
  ------------------
 1175|  66.4k|                        continue;
 1176|       |
 1177|   112k|                optimal_idx = bucket_hash(h, bucket_at(h, idx)->key);
  ------------------
  |  |  347|   112k|#define bucket_hash(h, p) base_bucket_hash(HASHMAP_BASE(h), p)
  |  |  ------------------
  |  |  |  |   46|   112k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|   112k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   112k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   38|   112k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   39|   112k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   47|   112k|                (HashmapBase*)(h), \
  |  |  |  |   48|   112k|                (void)0)
  |  |  ------------------
  ------------------
 1178|       |
 1179|       |                /*
 1180|       |                 * Not much to do if by luck the entry hashes to its current
 1181|       |                 * location. Just set its DIB.
 1182|       |                 */
 1183|   112k|                if (optimal_idx == idx) {
  ------------------
  |  Branch (1183:21): [True: 1.69k, False: 111k]
  ------------------
 1184|  1.69k|                        new_dibs[idx] = 0;
 1185|  1.69k|                        n_rehashed++;
 1186|  1.69k|                        continue;
 1187|  1.69k|                }
 1188|       |
 1189|   111k|                new_dibs[idx] = DIB_RAW_FREE;
  ------------------
  |  |  126|   111k|#define DIB_RAW_FREE     ((dib_raw_t)0xffU)   /* a free bucket */
  ------------------
 1190|   111k|                bucket_move_entry(h, &swap, idx, IDX_PUT);
  ------------------
  |  |  106|   111k|#define IDX_PUT             (_IDX_SWAP_BEGIN + 0)
  |  |  ------------------
  |  |  |  |  105|   111k|#define _IDX_SWAP_BEGIN     (UINT_MAX - 3)
  |  |  ------------------
  ------------------
 1191|       |                /* bucket_move_entry does not clear the source */
 1192|   111k|                memzero(bucket_at(h, idx), hi->entry_size);
  ------------------
  |  |   17|   111k|        ({                                                      \
  |  |   18|   111k|                size_t _l_ = (l);                               \
  |  |   19|   111k|                _l_ > 0 ? memset((x), 0, _l_) : (x);            \
  |  |  ------------------
  |  |  |  Branch (19:17): [True: 111k, False: 0]
  |  |  ------------------
  |  |   20|   111k|        })
  ------------------
 1193|       |
 1194|   143k|                do {
 1195|       |                        /*
 1196|       |                         * Find the new bucket for the current entry. This may make
 1197|       |                         * another entry homeless and load it into IDX_PUT.
 1198|       |                         */
 1199|   143k|                        rehash_next = hashmap_put_robin_hood(h, optimal_idx, &swap);
 1200|   143k|                        n_rehashed++;
 1201|       |
 1202|       |                        /* Did the current entry displace another one? */
 1203|   143k|                        if (rehash_next)
  ------------------
  |  Branch (1203:29): [True: 32.1k, False: 111k]
  ------------------
 1204|  32.1k|                                optimal_idx = bucket_hash(h, bucket_at_swap(&swap, IDX_PUT)->p.b.key);
  ------------------
  |  |  347|  32.1k|#define bucket_hash(h, p) base_bucket_hash(HASHMAP_BASE(h), p)
  |  |  ------------------
  |  |  |  |   46|  32.1k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|  32.1k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  32.1k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   38|  32.1k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  32.1k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   47|  32.1k|                (HashmapBase*)(h), \
  |  |  |  |   48|  32.1k|                (void)0)
  |  |  ------------------
  ------------------
 1205|   143k|                } while (rehash_next);
  ------------------
  |  Branch (1205:26): [True: 32.1k, False: 111k]
  ------------------
 1206|   111k|        }
 1207|       |
 1208|  5.76k|        assert_se(n_rehashed == n_entries(h));
  ------------------
  |  |   65|  5.76k|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.76k|        do {                                                            \
  |  |  |  |   59|  5.76k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.76k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.76k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.76k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.76k|        } while (false)
  |  |  ------------------
  ------------------
 1209|       |
 1210|  5.76k|        return 1;
 1211|  5.76k|}
hashmap.c:get_hash_key:
  354|  5.76k|static void get_hash_key(uint8_t hash_key[HASH_KEY_SIZE], bool reuse_is_ok) {
  355|  5.76k|        static uint8_t current[HASH_KEY_SIZE];
  356|  5.76k|        static bool current_initialized = false;
  357|       |
  358|       |        /* Returns a hash function key to use. In order to keep things
  359|       |         * fast we will not generate a new key each time we allocate a
  360|       |         * new hash table. Instead, we'll just reuse the most recently
  361|       |         * generated one, except if we never generated one or when we
  362|       |         * are rehashing an entire hash table because we reached a
  363|       |         * fill level */
  364|       |
  365|  5.76k|        if (!current_initialized || !reuse_is_ok) {
  ------------------
  |  Branch (365:13): [True: 1, False: 5.76k]
  |  Branch (365:37): [True: 3.31k, False: 2.44k]
  ------------------
  366|  3.31k|                random_bytes(current, sizeof(current));
  367|  3.31k|                current_initialized = true;
  368|  3.31k|        }
  369|       |
  370|  5.76k|        memcpy(hash_key, current, sizeof(current));
  371|  5.76k|}
hashmap.c:ordered_bucket_at:
  383|   453k|static struct ordered_hashmap_entry* ordered_bucket_at(OrderedHashmap *h, unsigned idx) {
  384|   453k|        return (struct ordered_hashmap_entry*) bucket_at(HASHMAP_BASE(h), idx);
  ------------------
  |  |   46|   453k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|   453k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|   453k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|   453k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|   453k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|   453k|                (HashmapBase*)(h), \
  |  |   48|   453k|                (void)0)
  ------------------
  385|   453k|}
hashmap.c:_hashmap_dump_entries_sorted:
 2149|  23.0k|                size_t *ret_n) {
 2150|  23.0k|        _cleanup_free_ void **entries = NULL;
  ------------------
  |  |   82|  23.0k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  23.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 2151|  23.0k|        Iterator iter;
 2152|  23.0k|        unsigned idx;
 2153|  23.0k|        size_t n = 0;
 2154|       |
 2155|  23.0k|        assert(ret);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
 2156|  23.0k|        assert(ret_n);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
 2157|       |
 2158|  23.0k|        if (_hashmap_size(h) == 0) {
  ------------------
  |  Branch (2158:13): [True: 23.0k, False: 0]
  ------------------
 2159|  23.0k|                *ret = NULL;
 2160|  23.0k|                *ret_n = 0;
 2161|  23.0k|                return 0;
 2162|  23.0k|        }
 2163|       |
 2164|       |        /* We append one more element than needed so that the resulting array can be used as a strv. We
 2165|       |         * don't count this entry in the returned size. */
 2166|      0|        entries = new(void*, _hashmap_size(h) + 1);
  ------------------
  |  |   17|      0|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
 2167|      0|        if (!entries)
  ------------------
  |  Branch (2167:13): [True: 0, False: 0]
  ------------------
 2168|      0|                return -ENOMEM;
 2169|       |
 2170|      0|        HASHMAP_FOREACH_IDX(idx, h, iter)
  ------------------
  |  |  734|      0|        for ((i) = ITERATOR_FIRST, (idx) = hashmap_iterate_entry((h), &(i)); \
  |  |  ------------------
  |  |  |  |   20|      0|#define ITERATOR_FIRST ((Iterator) { .idx = _IDX_ITERATOR_FIRST, .next_key = NULL })
  |  |  |  |  ------------------
  |  |  |  |  |  |   19|      0|#define _IDX_ITERATOR_FIRST (UINT_MAX - 1)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  735|      0|             (idx != IDX_NIL); \
  |  |  ------------------
  |  |  |  |  111|      0|#define IDX_NIL             UINT_MAX       /* special index value meaning "none" or "end" */
  |  |  ------------------
  |  |  |  Branch (735:14): [True: 0, False: 0]
  |  |  ------------------
  |  |  736|      0|             (idx) = hashmap_iterate_entry((h), &(i)))
  ------------------
 2171|      0|                entries[n++] = bucket_at(h, idx);
 2172|       |
 2173|      0|        assert(n == _hashmap_size(h));
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 2174|      0|        entries[n] = NULL;
 2175|       |
 2176|      0|        typesafe_qsort_r((struct hashmap_base_entry**) entries, n,
  ------------------
  |  |   38|      0|        ({                                                              \
  |  |   39|      0|                int (*_func_)(const typeof((p)[0])*, const typeof((p)[0])*, typeof(userdata)) = func; \
  |  |   40|      0|                qsort_r_safe((p), (n), sizeof((p)[0]), (comparison_userdata_fn_t) _func_, userdata); \
  |  |   41|      0|        })
  ------------------
 2177|      0|                         hashmap_entry_compare, h->hash_ops->compare);
 2178|       |
 2179|      0|        *ret = TAKE_PTR(entries);
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2180|      0|        *ret_n = n;
 2181|      0|        return 0;
 2182|      0|}

bond.c:ordered_hashmap_free:
   67|  1.27k|static inline OrderedHashmap* ordered_hashmap_free(OrderedHashmap *h) {
   68|  1.27k|        return (void*) _hashmap_free(HASHMAP_BASE(h));
  ------------------
  |  |   46|  1.27k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  1.27k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  1.27k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  1.27k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  1.27k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  1.27k|                (HashmapBase*)(h), \
  |  |   48|  1.27k|                (void)0)
  ------------------
   69|  1.27k|}
bond.c:ordered_hashmap_size:
  206|  3.33k|static inline unsigned ordered_hashmap_size(OrderedHashmap *h) {
  207|  3.33k|        return _hashmap_size(HASHMAP_BASE(h));
  ------------------
  |  |   46|  3.33k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  3.33k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  3.33k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  3.33k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  3.33k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  3.33k|                (HashmapBase*)(h), \
  |  |   48|  3.33k|                (void)0)
  ------------------
  208|  3.33k|}
l2tp-tunnel.c:ordered_hashmap_remove:
  143|  59.3k|static inline void *ordered_hashmap_remove(OrderedHashmap *h, const void *key) {
  144|  59.3k|        return _hashmap_remove(HASHMAP_BASE(h), key);
  ------------------
  |  |   46|  59.3k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  59.3k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  59.3k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  59.3k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  59.3k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  59.3k|                (HashmapBase*)(h), \
  |  |   48|  59.3k|                (void)0)
  ------------------
  145|  59.3k|}
l2tp-tunnel.c:ordered_hashmap_get:
  122|  66.6k|static inline void *ordered_hashmap_get(OrderedHashmap *h, const void *key) {
  123|  66.6k|        return _hashmap_get(HASHMAP_BASE(h), key);
  ------------------
  |  |   46|  66.6k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  66.6k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  66.6k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  66.6k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  66.6k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  66.6k|                (HashmapBase*)(h), \
  |  |   48|  66.6k|                (void)0)
  ------------------
  124|  66.6k|}
l2tp-tunnel.c:ordered_hashmap_free:
   67|    826|static inline OrderedHashmap* ordered_hashmap_free(OrderedHashmap *h) {
   68|    826|        return (void*) _hashmap_free(HASHMAP_BASE(h));
  ------------------
  |  |   46|    826|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|    826|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|    826|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|    826|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|    826|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|    826|                (HashmapBase*)(h), \
  |  |   48|    826|                (void)0)
  ------------------
   69|    826|}
l2tp-tunnel.c:ordered_hashmap_iterate:
  229|  61.0k|static inline bool ordered_hashmap_iterate(OrderedHashmap *h, Iterator *i, void **value, const void **key) {
  230|  61.0k|        return _hashmap_iterate(HASHMAP_BASE(h), i, value, key);
  ------------------
  |  |   46|  61.0k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  61.0k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  61.0k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  61.0k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  61.0k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  61.0k|                (HashmapBase*)(h), \
  |  |   48|  61.0k|                (void)0)
  ------------------
  231|  61.0k|}
macsec.c:ordered_hashmap_remove:
  143|  8.88k|static inline void *ordered_hashmap_remove(OrderedHashmap *h, const void *key) {
  144|  8.88k|        return _hashmap_remove(HASHMAP_BASE(h), key);
  ------------------
  |  |   46|  8.88k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  8.88k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  8.88k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  8.88k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  8.88k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  8.88k|                (HashmapBase*)(h), \
  |  |   48|  8.88k|                (void)0)
  ------------------
  145|  8.88k|}
macsec.c:ordered_hashmap_remove_value:
  157|  3.05k|static inline void* ordered_hashmap_remove_value(OrderedHashmap *h, const void *key, void *value) {
  158|  3.05k|        return hashmap_remove_value(PLAIN_HASHMAP(h), key, value);
  ------------------
  |  |   51|  3.05k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_PLAIN_HASHMAP(h), \
  |  |  ------------------
  |  |  |  |   42|  3.05k|        (__builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (42:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   43|  3.05k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*)) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|  3.05k|                (Hashmap*)(h), \
  |  |   53|  3.05k|                (void)0)
  ------------------
  159|  3.05k|}
macsec.c:hashmap_remove_value:
  153|  3.05k|static inline void *hashmap_remove_value(Hashmap *h, const void *key, void *value) {
  154|  3.05k|        return _hashmap_remove_value(HASHMAP_BASE(h), key, value);
  ------------------
  |  |   46|  3.05k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  3.05k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  3.05k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  3.05k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  3.05k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  3.05k|                (HashmapBase*)(h), \
  |  |   48|  3.05k|                (void)0)
  ------------------
  155|  3.05k|}
macsec.c:ordered_hashmap_get:
  122|  27.6k|static inline void *ordered_hashmap_get(OrderedHashmap *h, const void *key) {
  123|  27.6k|        return _hashmap_get(HASHMAP_BASE(h), key);
  ------------------
  |  |   46|  27.6k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  27.6k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  27.6k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  27.6k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  27.6k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  27.6k|                (HashmapBase*)(h), \
  |  |   48|  27.6k|                (void)0)
  ------------------
  124|  27.6k|}
macsec.c:ordered_hashmap_free:
   67|  5.09k|static inline OrderedHashmap* ordered_hashmap_free(OrderedHashmap *h) {
   68|  5.09k|        return (void*) _hashmap_free(HASHMAP_BASE(h));
  ------------------
  |  |   46|  5.09k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  5.09k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  5.09k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  5.09k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  5.09k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  5.09k|                (HashmapBase*)(h), \
  |  |   48|  5.09k|                (void)0)
  ------------------
   69|  5.09k|}
macsec.c:ordered_hashmap_iterate:
  229|  12.7k|static inline bool ordered_hashmap_iterate(OrderedHashmap *h, Iterator *i, void **value, const void **key) {
  230|  12.7k|        return _hashmap_iterate(HASHMAP_BASE(h), i, value, key);
  ------------------
  |  |   46|  12.7k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  12.7k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  12.7k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  12.7k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  12.7k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  12.7k|                (HashmapBase*)(h), \
  |  |   48|  12.7k|                (void)0)
  ------------------
  231|  12.7k|}
netdev.c:hashmap_remove_value:
  153|  15.9k|static inline void *hashmap_remove_value(Hashmap *h, const void *key, void *value) {
  154|  15.9k|        return _hashmap_remove_value(HASHMAP_BASE(h), key, value);
  ------------------
  |  |   46|  15.9k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  15.9k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  15.9k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  15.9k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  15.9k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  15.9k|                (HashmapBase*)(h), \
  |  |   48|  15.9k|                (void)0)
  ------------------
  155|  15.9k|}
netdev.c:hashmap_free:
   64|  23.0k|static inline Hashmap* hashmap_free(Hashmap *h) {
   65|  23.0k|        return (void*) _hashmap_free(HASHMAP_BASE(h));
  ------------------
  |  |   46|  23.0k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  23.0k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  23.0k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  23.0k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  23.0k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  23.0k|                (HashmapBase*)(h), \
  |  |   48|  23.0k|                (void)0)
  ------------------
   66|  23.0k|}
wireguard.c:hashmap_remove:
  140|  12.0k|static inline void *hashmap_remove(Hashmap *h, const void *key) {
  141|  12.0k|        return _hashmap_remove(HASHMAP_BASE(h), key);
  ------------------
  |  |   46|  12.0k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  12.0k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  12.0k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  12.0k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  12.0k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  12.0k|                (HashmapBase*)(h), \
  |  |   48|  12.0k|                (void)0)
  ------------------
  142|  12.0k|}
wireguard.c:hashmap_get:
  119|  31.7k|static inline void *hashmap_get(Hashmap *h, const void *key) {
  120|  31.7k|        return _hashmap_get(HASHMAP_BASE(h), key);
  ------------------
  |  |   46|  31.7k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  31.7k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  31.7k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  31.7k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  31.7k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  31.7k|                (HashmapBase*)(h), \
  |  |   48|  31.7k|                (void)0)
  ------------------
  121|  31.7k|}
wireguard.c:hashmap_free:
   64|  2.15k|static inline Hashmap* hashmap_free(Hashmap *h) {
   65|  2.15k|        return (void*) _hashmap_free(HASHMAP_BASE(h));
  ------------------
  |  |   46|  2.15k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  2.15k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  2.15k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  2.15k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  2.15k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  2.15k|                (HashmapBase*)(h), \
  |  |   48|  2.15k|                (void)0)
  ------------------
   66|  2.15k|}
networkd-manager.c:hashmap_free:
   64|   170k|static inline Hashmap* hashmap_free(Hashmap *h) {
   65|   170k|        return (void*) _hashmap_free(HASHMAP_BASE(h));
  ------------------
  |  |   46|   170k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|   170k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|   170k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|   170k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|   170k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|   170k|                (HashmapBase*)(h), \
  |  |   48|   170k|                (void)0)
  ------------------
   66|   170k|}
networkd-manager.c:ordered_hashmap_free:
   67|  52.3k|static inline OrderedHashmap* ordered_hashmap_free(OrderedHashmap *h) {
   68|  52.3k|        return (void*) _hashmap_free(HASHMAP_BASE(h));
  ------------------
  |  |   46|  52.3k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  52.3k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  52.3k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  52.3k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  52.3k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  52.3k|                (HashmapBase*)(h), \
  |  |   48|  52.3k|                (void)0)
  ------------------
   69|  52.3k|}
networkd-manager.c:hashmap_first:
  272|  13.0k|static inline void *hashmap_first(Hashmap *h) {
  273|  13.0k|        return _hashmap_first_key_and_value(HASHMAP_BASE(h), false, NULL);
  ------------------
  |  |   46|  13.0k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  13.0k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  13.0k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  13.0k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  13.0k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  13.0k|                (HashmapBase*)(h), \
  |  |   48|  13.0k|                (void)0)
  ------------------
  274|  13.0k|}
networkd-route.c:ordered_hashmap_isempty:
  213|  6.69k|static inline bool ordered_hashmap_isempty(OrderedHashmap *h) {
  214|  6.69k|        return ordered_hashmap_size(h) == 0;
  215|  6.69k|}
networkd-route.c:ordered_hashmap_size:
  206|  6.69k|static inline unsigned ordered_hashmap_size(OrderedHashmap *h) {
  207|  6.69k|        return _hashmap_size(HASHMAP_BASE(h));
  ------------------
  |  |   46|  6.69k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  6.69k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  6.69k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  6.69k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  6.69k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  6.69k|                (HashmapBase*)(h), \
  |  |   48|  6.69k|                (void)0)
  ------------------
  208|  6.69k|}
networkd-route-nexthop.c:ordered_hashmap_free:
   67|  20.2k|static inline OrderedHashmap* ordered_hashmap_free(OrderedHashmap *h) {
   68|  20.2k|        return (void*) _hashmap_free(HASHMAP_BASE(h));
  ------------------
  |  |   46|  20.2k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  20.2k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  20.2k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  20.2k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  20.2k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  20.2k|                (HashmapBase*)(h), \
  |  |   48|  20.2k|                (void)0)
  ------------------
   69|  20.2k|}
networkd-route-nexthop.c:ordered_hashmap_iterate:
  229|  13.5k|static inline bool ordered_hashmap_iterate(OrderedHashmap *h, Iterator *i, void **value, const void **key) {
  230|  13.5k|        return _hashmap_iterate(HASHMAP_BASE(h), i, value, key);
  ------------------
  |  |   46|  13.5k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  13.5k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  13.5k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  13.5k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  13.5k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  13.5k|                (HashmapBase*)(h), \
  |  |   48|  13.5k|                (void)0)
  ------------------
  231|  13.5k|}
networkd-route-nexthop.c:ordered_hashmap_isempty:
  213|  61.1k|static inline bool ordered_hashmap_isempty(OrderedHashmap *h) {
  214|  61.1k|        return ordered_hashmap_size(h) == 0;
  215|  61.1k|}
networkd-route-nexthop.c:ordered_hashmap_size:
  206|  81.4k|static inline unsigned ordered_hashmap_size(OrderedHashmap *h) {
  207|  81.4k|        return _hashmap_size(HASHMAP_BASE(h));
  ------------------
  |  |   46|  81.4k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  81.4k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  81.4k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  81.4k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  81.4k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  81.4k|                (HashmapBase*)(h), \
  |  |   48|  81.4k|                (void)0)
  ------------------
  208|  81.4k|}
networkd-route-util.c:hashmap_get:
  119|  2.48k|static inline void *hashmap_get(Hashmap *h, const void *key) {
  120|  2.48k|        return _hashmap_get(HASHMAP_BASE(h), key);
  ------------------
  |  |   46|  2.48k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  2.48k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  2.48k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  2.48k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  2.48k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  2.48k|                (HashmapBase*)(h), \
  |  |   48|  2.48k|                (void)0)
  ------------------
  121|  2.48k|}
conf-parser.c:ordered_hashmap_iterate:
  229|  22.7k|static inline bool ordered_hashmap_iterate(OrderedHashmap *h, Iterator *i, void **value, const void **key) {
  230|  22.7k|        return _hashmap_iterate(HASHMAP_BASE(h), i, value, key);
  ------------------
  |  |   46|  22.7k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  22.7k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  22.7k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  22.7k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  22.7k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  22.7k|                (HashmapBase*)(h), \
  |  |   48|  22.7k|                (void)0)
  ------------------
  231|  22.7k|}
conf-parser.c:hashmap_free:
   64|      3|static inline Hashmap* hashmap_free(Hashmap *h) {
   65|      3|        return (void*) _hashmap_free(HASHMAP_BASE(h));
  ------------------
  |  |   46|      3|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|      3|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|      3|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|      3|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|      3|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|      3|                (HashmapBase*)(h), \
  |  |   48|      3|                (void)0)
  ------------------
   66|      3|}
user-record.c:hashmap_free:
   64|     84|static inline Hashmap* hashmap_free(Hashmap *h) {
   65|     84|        return (void*) _hashmap_free(HASHMAP_BASE(h));
  ------------------
  |  |   46|     84|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|     84|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|     84|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|     84|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|     84|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|     84|                (HashmapBase*)(h), \
  |  |   48|     84|                (void)0)
  ------------------
   66|     84|}
conf-files.c:hashmap_dump_sorted:
  310|  23.0k|static inline int hashmap_dump_sorted(Hashmap *h, void ***ret, size_t *ret_n) {
  311|  23.0k|        return _hashmap_dump_sorted(HASHMAP_BASE(h), ret, ret_n);
  ------------------
  |  |   46|  23.0k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  23.0k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  23.0k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  23.0k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  23.0k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  23.0k|                (HashmapBase*)(h), \
  |  |   48|  23.0k|                (void)0)
  ------------------
  312|  23.0k|}
hashmap.c:ordered_hashmap_put:
   99|  69.6k|static inline int ordered_hashmap_put(OrderedHashmap *h, const void *key, void *value) {
  100|  69.6k|        return hashmap_put(PLAIN_HASHMAP(h), key, value);
  ------------------
  |  |   51|  69.6k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_PLAIN_HASHMAP(h), \
  |  |  ------------------
  |  |  |  |   42|  69.6k|        (__builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (42:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   43|  69.6k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*)) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|  69.6k|                (Hashmap*)(h), \
  |  |   53|  69.6k|                (void)0)
  ------------------
  101|  69.6k|}
ordered-set.c:ordered_hashmap_put:
   99|  3.13k|static inline int ordered_hashmap_put(OrderedHashmap *h, const void *key, void *value) {
  100|  3.13k|        return hashmap_put(PLAIN_HASHMAP(h), key, value);
  ------------------
  |  |   51|  3.13k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_PLAIN_HASHMAP(h), \
  |  |  ------------------
  |  |  |  |   42|  3.13k|        (__builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (42:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   43|  3.13k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*)) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|  3.13k|                (Hashmap*)(h), \
  |  |   53|  3.13k|                (void)0)
  ------------------
  101|  3.13k|}

octchar:
   11|  5.23k|char octchar(int x) {
   12|  5.23k|        return '0' + (x & 7);
   13|  5.23k|}
unoctchar:
   15|  10.3k|int unoctchar(char c) {
   16|       |
   17|  10.3k|        if (c >= '0' && c <= '7')
  ------------------
  |  Branch (17:13): [True: 9.42k, False: 893]
  |  Branch (17:25): [True: 9.06k, False: 356]
  ------------------
   18|  9.06k|                return c - '0';
   19|       |
   20|  1.24k|        return -EINVAL;
   21|  10.3k|}
unhexchar:
   41|   142k|int unhexchar(char c) {
   42|       |
   43|   142k|        if (c >= '0' && c <= '9')
  ------------------
  |  Branch (43:13): [True: 141k, False: 1.01k]
  |  Branch (43:25): [True: 18.9k, False: 122k]
  ------------------
   44|  18.9k|                return c - '0';
   45|       |
   46|   123k|        if (c >= 'a' && c <= 'f')
  ------------------
  |  Branch (46:13): [True: 104k, False: 18.7k]
  |  Branch (46:25): [True: 103k, False: 858]
  ------------------
   47|   103k|                return c - 'a' + 10;
   48|       |
   49|  19.5k|        if (c >= 'A' && c <= 'F')
  ------------------
  |  Branch (49:13): [True: 18.3k, False: 1.16k]
  |  Branch (49:25): [True: 17.4k, False: 952]
  ------------------
   50|  17.4k|                return c - 'A' + 10;
   51|       |
   52|  2.11k|        return -EINVAL;
   53|  19.5k|}
unhexmem_full:
  115|  7.12k|                size_t *ret_len) {
  116|       |
  117|  7.12k|        _cleanup_free_ uint8_t *buf = NULL;
  ------------------
  |  |   82|  7.12k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  7.12k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  118|  7.12k|        size_t buf_size;
  119|  7.12k|        const char *x;
  120|  7.12k|        uint8_t *z;
  121|       |
  122|  7.12k|        assert(p || l == 0);
  ------------------
  |  |   72|  7.12k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  7.12k|        do {                                                            \
  |  |  |  |   59|  7.12k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  7.12k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 7.12k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 7.12k, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  7.12k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  7.12k|        } while (false)
  |  |  ------------------
  ------------------
  123|       |
  124|  7.12k|        if (l == SIZE_MAX)
  ------------------
  |  Branch (124:13): [True: 7.12k, False: 0]
  ------------------
  125|  7.12k|                l = strlen(p);
  126|       |
  127|       |        /* Note that the calculation of memory size is an upper boundary, as we ignore whitespace while decoding */
  128|  7.12k|        buf_size = (l + 1) / 2 + 1;
  129|  7.12k|        buf = malloc(buf_size);
  130|  7.12k|        if (!buf)
  ------------------
  |  Branch (130:13): [True: 0, False: 7.12k]
  ------------------
  131|      0|                return -ENOMEM;
  132|       |
  133|  7.12k|        CLEANUP_ERASE_PTR(secure ? &buf : NULL, buf_size);
  ------------------
  |  |   71|  7.12k|        _cleanup_(erase_varp) _unused_ struct VarEraser CONCATENATE(_eraser_, UNIQ) = { \
  |  |  ------------------
  |  |  |  |   78|  7.12k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  |  |   72|  14.2k|                .p = (ptr),                                             \
  |  |  ------------------
  |  |  |  Branch (72:23): [True: 5.29k, False: 1.83k]
  |  |  ------------------
  |  |   73|  7.12k|                .size = (sz),                                           \
  |  |   74|  7.12k|        }
  ------------------
  134|       |
  135|  66.7k|        for (x = p, z = buf;;) {
  136|  66.7k|                int a, b;
  137|       |
  138|  66.7k|                a = unhex_next(&x, &l);
  139|  66.7k|                if (a == -EPIPE) /* End of string */
  ------------------
  |  Branch (139:21): [True: 5.23k, False: 61.5k]
  ------------------
  140|  5.23k|                        break;
  141|  61.5k|                if (a < 0)
  ------------------
  |  Branch (141:21): [True: 632, False: 60.9k]
  ------------------
  142|    632|                        return a;
  143|       |
  144|  60.9k|                b = unhex_next(&x, &l);
  145|  60.9k|                if (b < 0)
  ------------------
  |  Branch (145:21): [True: 1.25k, False: 59.6k]
  ------------------
  146|  1.25k|                        return b;
  147|       |
  148|  59.6k|                *(z++) = (uint8_t) a << 4 | (uint8_t) b;
  149|  59.6k|        }
  150|       |
  151|  5.23k|        *z = 0;
  152|       |
  153|  5.23k|        if (ret_len)
  ------------------
  |  Branch (153:13): [True: 5.23k, False: 0]
  ------------------
  154|  5.23k|                *ret_len = (size_t) (z - buf);
  155|  5.23k|        if (ret_data)
  ------------------
  |  Branch (155:13): [True: 5.23k, False: 0]
  ------------------
  156|  5.23k|                *ret_data = TAKE_PTR(buf);
  ------------------
  |  |  388|  5.23k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  5.23k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  5.23k|        ({                                                       \
  |  |  |  |  |  |  381|  5.23k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  5.23k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  5.23k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  5.23k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  5.23k|                _var_;                                           \
  |  |  |  |  |  |  386|  5.23k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  157|       |
  158|  5.23k|        return 0;
  159|  7.12k|}
unbase64char:
  535|   479k|int unbase64char(char c) {
  536|   479k|        unsigned offset;
  537|       |
  538|   479k|        if (c >= 'A' && c <= 'Z')
  ------------------
  |  Branch (538:13): [True: 437k, False: 41.5k]
  |  Branch (538:25): [True: 79.8k, False: 358k]
  ------------------
  539|  79.8k|                return c - 'A';
  540|       |
  541|   399k|        offset = 'Z' - 'A' + 1;
  542|       |
  543|   399k|        if (c >= 'a' && c <= 'z')
  ------------------
  |  Branch (543:13): [True: 354k, False: 44.9k]
  |  Branch (543:25): [True: 353k, False: 791]
  ------------------
  544|   353k|                return c - 'a' + offset;
  545|       |
  546|  45.7k|        offset += 'z' - 'a' + 1;
  547|       |
  548|  45.7k|        if (c >= '0' && c <= '9')
  ------------------
  |  Branch (548:13): [True: 22.8k, False: 22.8k]
  |  Branch (548:25): [True: 18.5k, False: 4.29k]
  ------------------
  549|  18.5k|                return c - '0' + offset;
  550|       |
  551|  27.1k|        offset += '9' - '0' + 1;
  552|       |
  553|  27.1k|        if (IN_SET(c, '+', '-')) /* Support both the regular and the URL safe character set (see above) */
  ------------------
  |  |  361|  27.1k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 20.0k, False: 7.14k]
  |  |  ------------------
  |  |  362|  27.1k|                bool _found = false;                                    \
  |  |  363|  27.1k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  27.1k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  27.1k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  27.1k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  27.1k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  27.1k|                switch (x) {                                            \
  |  |  368|  20.0k|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|  19.6k|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|  19.6k|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|  19.6k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|  20.0k|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|  20.0k|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 381, False: 26.7k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 19.6k, False: 7.52k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|  20.0k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|  20.0k|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|  20.0k|                        _found = true;                                  \
  |  |  370|  20.0k|                        break;                                          \
  |  |  371|  19.6k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 7.14k, False: 20.0k]
  |  |  ------------------
  |  |  372|  7.14k|                        ;                                               \
  |  |  373|  27.1k|                }                                                       \
  |  |  374|  27.1k|                _found;                                                 \
  |  |  375|  27.1k|        })
  ------------------
  554|  20.0k|                return offset;
  555|       |
  556|  7.14k|        offset++;
  557|       |
  558|  7.14k|        if (IN_SET(c, '/', '_')) /* ditto */
  ------------------
  |  |  361|  7.14k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 5.33k, False: 1.81k]
  |  |  ------------------
  |  |  362|  7.14k|                bool _found = false;                                    \
  |  |  363|  7.14k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  7.14k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  7.14k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  7.14k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  7.14k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  7.14k|                switch (x) {                                            \
  |  |  368|  5.33k|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|  2.27k|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|  2.27k|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|  2.27k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|  5.33k|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|  5.33k|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 3.06k, False: 4.08k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 2.27k, False: 4.87k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|  5.33k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|  5.33k|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|  5.33k|                        _found = true;                                  \
  |  |  370|  5.33k|                        break;                                          \
  |  |  371|  2.27k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 1.81k, False: 5.33k]
  |  |  ------------------
  |  |  372|  1.81k|                        ;                                               \
  |  |  373|  7.14k|                }                                                       \
  |  |  374|  7.14k|                _found;                                                 \
  |  |  375|  7.14k|        })
  ------------------
  559|  5.33k|                return offset;
  560|       |
  561|  1.81k|        return -EINVAL;
  562|  7.14k|}
unbase64mem_full:
  767|  8.73k|                size_t *ret_size) {
  768|       |
  769|  8.73k|        _cleanup_free_ uint8_t *buf = NULL;
  ------------------
  |  |   82|  8.73k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  8.73k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  770|  8.73k|        const char *x;
  771|  8.73k|        uint8_t *z;
  772|  8.73k|        size_t len;
  773|       |
  774|  8.73k|        assert(p || l == 0);
  ------------------
  |  |   72|  8.73k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  8.73k|        do {                                                            \
  |  |  |  |   59|  8.73k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  8.73k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 8.73k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 8.73k, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  8.73k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  8.73k|        } while (false)
  |  |  ------------------
  ------------------
  775|       |
  776|  8.73k|        if (l == SIZE_MAX)
  ------------------
  |  Branch (776:13): [True: 8.73k, False: 0]
  ------------------
  777|  8.73k|                l = strlen(p);
  778|       |
  779|       |        /* A group of four input bytes needs three output bytes, in case of padding we need to add two or three extra
  780|       |         * bytes. Note that this calculation is an upper boundary, as we ignore whitespace while decoding */
  781|  8.73k|        len = (l / 4) * 3 + (l % 4 != 0 ? (l % 4) - 1 : 0);
  ------------------
  |  Branch (781:30): [True: 3.53k, False: 5.20k]
  ------------------
  782|       |
  783|  8.73k|        buf = malloc(len + 1);
  784|  8.73k|        if (!buf)
  ------------------
  |  Branch (784:13): [True: 0, False: 8.73k]
  ------------------
  785|      0|                return -ENOMEM;
  786|       |
  787|  8.73k|        CLEANUP_ERASE_PTR(secure ? &buf : NULL, len);
  ------------------
  |  |   71|  8.73k|        _cleanup_(erase_varp) _unused_ struct VarEraser CONCATENATE(_eraser_, UNIQ) = { \
  |  |  ------------------
  |  |  |  |   78|  8.73k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  |  |   72|  17.4k|                .p = (ptr),                                             \
  |  |  ------------------
  |  |  |  Branch (72:23): [True: 8.73k, False: 0]
  |  |  ------------------
  |  |   73|  8.73k|                .size = (sz),                                           \
  |  |   74|  8.73k|        }
  ------------------
  788|       |
  789|   123k|        for (x = p, z = buf;;) {
  790|   123k|                int a, b, c, d; /* a == 00XXXXXX; b == 00YYYYYY; c == 00ZZZZZZ; d == 00WWWWWW */
  791|       |
  792|   123k|                a = unbase64_next(&x, &l);
  793|   123k|                if (a == -EPIPE) /* End of string */
  ------------------
  |  Branch (793:21): [True: 438, False: 123k]
  ------------------
  794|    438|                        break;
  795|   123k|                if (a < 0)
  ------------------
  |  Branch (795:21): [True: 466, False: 122k]
  ------------------
  796|    466|                        return a;
  797|   122k|                if (a == INT_MAX) /* Padding is not allowed at the beginning of a 4ch block */
  ------------------
  |  Branch (797:21): [True: 320, False: 122k]
  ------------------
  798|    320|                        return -EINVAL;
  799|       |
  800|   122k|                b = unbase64_next(&x, &l);
  801|   122k|                if (b < 0)
  ------------------
  |  Branch (801:21): [True: 721, False: 121k]
  ------------------
  802|    721|                        return b;
  803|   121k|                if (b == INT_MAX) /* Padding is not allowed at the second character of a 4ch block either */
  ------------------
  |  Branch (803:21): [True: 315, False: 121k]
  ------------------
  804|    315|                        return -EINVAL;
  805|       |
  806|   121k|                c = unbase64_next(&x, &l);
  807|   121k|                if (c < 0)
  ------------------
  |  Branch (807:21): [True: 922, False: 120k]
  ------------------
  808|    922|                        return c;
  809|       |
  810|   120k|                d = unbase64_next(&x, &l);
  811|   120k|                if (d < 0)
  ------------------
  |  Branch (811:21): [True: 829, False: 119k]
  ------------------
  812|    829|                        return d;
  813|       |
  814|   119k|                if (c == INT_MAX) { /* Padding at the third character */
  ------------------
  |  Branch (814:21): [True: 857, False: 118k]
  ------------------
  815|       |
  816|    857|                        if (d != INT_MAX) /* If the third character is padding, the fourth must be too */
  ------------------
  |  Branch (816:29): [True: 222, False: 635]
  ------------------
  817|    222|                                return -EINVAL;
  818|       |
  819|       |                        /* b == 00YY0000 */
  820|    635|                        if (b & 15)
  ------------------
  |  Branch (820:29): [True: 208, False: 427]
  ------------------
  821|    208|                                return -EINVAL;
  822|       |
  823|    427|                        if (l > 0) /* Trailing rubbish? */
  ------------------
  |  Branch (823:29): [True: 204, False: 223]
  ------------------
  824|    204|                                return -ENAMETOOLONG;
  825|       |
  826|    223|                        *(z++) = (uint8_t) a << 2 | (uint8_t) (b >> 4); /* XXXXXXYY */
  827|    223|                        break;
  828|    427|                }
  829|       |
  830|   118k|                if (d == INT_MAX) {
  ------------------
  |  Branch (830:21): [True: 3.87k, False: 114k]
  ------------------
  831|       |                        /* c == 00ZZZZ00 */
  832|  3.87k|                        if (c & 3)
  ------------------
  |  Branch (832:29): [True: 210, False: 3.66k]
  ------------------
  833|    210|                                return -EINVAL;
  834|       |
  835|  3.66k|                        if (l > 0) /* Trailing rubbish? */
  ------------------
  |  Branch (835:29): [True: 270, False: 3.39k]
  ------------------
  836|    270|                                return -ENAMETOOLONG;
  837|       |
  838|  3.39k|                        *(z++) = (uint8_t) a << 2 | (uint8_t) b >> 4; /* XXXXXXYY */
  839|  3.39k|                        *(z++) = (uint8_t) b << 4 | (uint8_t) c >> 2; /* YYYYZZZZ */
  840|  3.39k|                        break;
  841|  3.66k|                }
  842|       |
  843|   114k|                *(z++) = (uint8_t) a << 2 | (uint8_t) b >> 4; /* XXXXXXYY */
  844|   114k|                *(z++) = (uint8_t) b << 4 | (uint8_t) c >> 2; /* YYYYZZZZ */
  845|   114k|                *(z++) = (uint8_t) c << 6 | (uint8_t) d;      /* ZZWWWWWW */
  846|   114k|        }
  847|       |
  848|  4.05k|        *z = 0;
  849|       |
  850|  4.05k|        assert((size_t) (z - buf) <= len);
  ------------------
  |  |   72|  4.05k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  4.05k|        do {                                                            \
  |  |  |  |   59|  4.05k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  4.05k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 4.05k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  4.05k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  4.05k|        } while (false)
  |  |  ------------------
  ------------------
  851|       |
  852|  4.05k|        if (ret_size)
  ------------------
  |  Branch (852:13): [True: 4.05k, False: 0]
  ------------------
  853|  4.05k|                *ret_size = (size_t) (z - buf);
  854|  4.05k|        if (ret_data)
  ------------------
  |  Branch (854:13): [True: 4.05k, False: 0]
  ------------------
  855|  4.05k|                *ret_data = TAKE_PTR(buf);
  ------------------
  |  |  388|  4.05k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  4.05k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  4.05k|        ({                                                       \
  |  |  |  |  |  |  381|  4.05k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  4.05k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  4.05k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  4.05k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  4.05k|                _var_;                                           \
  |  |  |  |  |  |  386|  4.05k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  856|       |
  857|  4.05k|        return 0;
  858|  8.73k|}
hexdecoct.c:unhex_next:
   74|   127k|static int unhex_next(const char **p, size_t *l) {
   75|   127k|        int r;
   76|       |
   77|   127k|        assert(p);
  ------------------
  |  |   72|   127k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   127k|        do {                                                            \
  |  |  |  |   59|   127k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   127k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 127k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   127k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   127k|        } while (false)
  |  |  ------------------
  ------------------
   78|   127k|        assert(l);
  ------------------
  |  |   72|   127k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   127k|        do {                                                            \
  |  |  |  |   59|   127k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   127k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 127k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   127k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   127k|        } while (false)
  |  |  ------------------
  ------------------
   79|       |
   80|       |        /* Find the next non-whitespace character, and decode it. We
   81|       |         * greedily skip all preceding and all following whitespace. */
   82|       |
   83|   127k|        for (;;) {
   84|   127k|                if (*l == 0)
  ------------------
  |  Branch (84:21): [True: 6.01k, False: 121k]
  ------------------
   85|  6.01k|                        return -EPIPE;
   86|       |
   87|   121k|                if (!strchr(WHITESPACE, **p))
  ------------------
  |  |   15|   121k|#define WHITESPACE          " \t\n\r"
  ------------------
  |  Branch (87:21): [True: 121k, False: 0]
  ------------------
   88|   121k|                        break;
   89|       |
   90|       |                /* Skip leading whitespace */
   91|      0|                (*p)++, (*l)--;
   92|      0|        }
   93|       |
   94|   121k|        r = unhexchar(**p);
   95|   121k|        if (r < 0)
  ------------------
  |  Branch (95:13): [True: 1.10k, False: 120k]
  ------------------
   96|  1.10k|                return r;
   97|       |
   98|   121k|        for (;;) {
   99|   121k|                (*p)++, (*l)--;
  100|       |
  101|   121k|                if (*l == 0 || !strchr(WHITESPACE, **p))
  ------------------
  |  |   15|   117k|#define WHITESPACE          " \t\n\r"
  ------------------
  |  Branch (101:21): [True: 3.73k, False: 117k]
  |  Branch (101:32): [True: 116k, False: 432]
  ------------------
  102|   120k|                        break;
  103|       |
  104|       |                /* Skip following whitespace */
  105|   121k|        }
  106|       |
  107|   120k|        return r;
  108|   121k|}
hexdecoct.c:unbase64_next:
  720|   487k|static int unbase64_next(const char **p, size_t *l) {
  721|   487k|        int ret;
  722|       |
  723|   487k|        assert(p);
  ------------------
  |  |   72|   487k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   487k|        do {                                                            \
  |  |  |  |   59|   487k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   487k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 487k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   487k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   487k|        } while (false)
  |  |  ------------------
  ------------------
  724|   487k|        assert(l);
  ------------------
  |  |   72|   487k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   487k|        do {                                                            \
  |  |  |  |   59|   487k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   487k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 487k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   487k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   487k|        } while (false)
  |  |  ------------------
  ------------------
  725|       |
  726|       |        /* Find the next non-whitespace character, and decode it. If we find padding, we return it as INT_MAX. We
  727|       |         * greedily skip all preceding and all following whitespace. */
  728|       |
  729|   487k|        for (;;) {
  730|   487k|                if (*l == 0)
  ------------------
  |  Branch (730:21): [True: 1.56k, False: 485k]
  ------------------
  731|  1.56k|                        return -EPIPE;
  732|       |
  733|   485k|                if (!strchr(WHITESPACE, **p))
  ------------------
  |  |   15|   485k|#define WHITESPACE          " \t\n\r"
  ------------------
  |  Branch (733:21): [True: 485k, False: 0]
  ------------------
  734|   485k|                        break;
  735|       |
  736|       |                /* Skip leading whitespace */
  737|      0|                (*p)++, (*l)--;
  738|      0|        }
  739|       |
  740|   485k|        if (**p == '=')
  ------------------
  |  Branch (740:13): [True: 6.06k, False: 479k]
  ------------------
  741|  6.06k|                ret = INT_MAX; /* return padding as INT_MAX */
  742|   479k|        else {
  743|   479k|                ret = unbase64char(**p);
  744|   479k|                if (ret < 0)
  ------------------
  |  Branch (744:21): [True: 1.81k, False: 477k]
  ------------------
  745|  1.81k|                        return ret;
  746|   479k|        }
  747|       |
  748|   485k|        for (;;) {
  749|   485k|                (*p)++, (*l)--;
  750|       |
  751|   485k|                if (*l == 0)
  ------------------
  |  Branch (751:21): [True: 6.26k, False: 479k]
  ------------------
  752|  6.26k|                        break;
  753|   479k|                if (!strchr(WHITESPACE, **p))
  ------------------
  |  |   15|   479k|#define WHITESPACE          " \t\n\r"
  ------------------
  |  Branch (753:21): [True: 477k, False: 2.00k]
  ------------------
  754|   477k|                        break;
  755|       |
  756|       |                /* Skip following whitespace */
  757|   479k|        }
  758|       |
  759|   483k|        return ret;
  760|   485k|}

macsec.c:unhexmem:
   17|  1.83k|static inline int unhexmem(const char *p, void **ret_data, size_t *ret_size) {
   18|  1.83k|        return unhexmem_full(p, SIZE_MAX, false, ret_data, ret_size);
   19|  1.83k|}

in4_addr_is_null:
   19|  1.28k|bool in4_addr_is_null(const struct in_addr *a) {
   20|  1.28k|        assert(a);
  ------------------
  |  |   72|  1.28k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.28k|        do {                                                            \
  |  |  |  |   59|  1.28k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.28k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.28k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.28k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.28k|        } while (false)
  |  |  ------------------
  ------------------
   21|       |
   22|  1.28k|        return a->s_addr == 0;
   23|  1.28k|}
in6_addr_is_null:
   25|  6.64k|bool in6_addr_is_null(const struct in6_addr *a) {
   26|  6.64k|        assert(a);
  ------------------
  |  |   72|  6.64k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  6.64k|        do {                                                            \
  |  |  |  |   59|  6.64k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  6.64k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 6.64k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  6.64k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  6.64k|        } while (false)
  |  |  ------------------
  ------------------
   27|       |
   28|  6.64k|        return eqzero(a->s6_addr32);
  ------------------
  |  |   64|  6.64k|#define eqzero(x) memeqzero(x, sizeof(x))
  |  |  ------------------
  |  |  |  |   62|  6.64k|#define memeqzero(data, length) memeqbyte(0x00, data, length)
  |  |  ------------------
  ------------------
   29|  6.64k|}
in_addr_is_null:
   31|  57.5k|int in_addr_is_null(int family, const union in_addr_union *u) {
   32|  57.5k|        assert(u);
  ------------------
  |  |   72|  57.5k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  57.5k|        do {                                                            \
  |  |  |  |   59|  57.5k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  57.5k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 57.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  57.5k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  57.5k|        } while (false)
  |  |  ------------------
  ------------------
   33|       |
   34|  57.5k|        if (family == AF_INET)
  ------------------
  |  Branch (34:13): [True: 1.28k, False: 56.2k]
  ------------------
   35|  1.28k|                return in4_addr_is_null(&u->in);
   36|       |
   37|  56.2k|        if (family == AF_INET6)
  ------------------
  |  Branch (37:13): [True: 6.64k, False: 49.5k]
  ------------------
   38|  6.64k|                return in6_addr_is_null(&u->in6);
   39|       |
   40|  49.5k|        return -EAFNOSUPPORT;
   41|  56.2k|}
in4_addr_is_multicast:
   91|    568|bool in4_addr_is_multicast(const struct in_addr *a) {
   92|    568|        assert(a);
  ------------------
  |  |   72|    568|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    568|        do {                                                            \
  |  |  |  |   59|    568|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    568|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 568]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    568|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    568|        } while (false)
  |  |  ------------------
  ------------------
   93|       |
   94|    568|        return IN_MULTICAST(be32toh(a->s_addr));
   95|    568|}
in6_addr_is_multicast:
   97|    992|bool in6_addr_is_multicast(const struct in6_addr *a) {
   98|    992|        assert(a);
  ------------------
  |  |   72|    992|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    992|        do {                                                            \
  |  |  |  |   59|    992|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    992|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 992]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    992|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    992|        } while (false)
  |  |  ------------------
  ------------------
   99|       |
  100|    992|        return a->s6_addr[0] == 0xff;
  101|    992|}
in_addr_is_multicast:
  103|  1.56k|int in_addr_is_multicast(int family, const union in_addr_union *u) {
  104|  1.56k|        assert(u);
  ------------------
  |  |   72|  1.56k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.56k|        do {                                                            \
  |  |  |  |   59|  1.56k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.56k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.56k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.56k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.56k|        } while (false)
  |  |  ------------------
  ------------------
  105|       |
  106|  1.56k|        if (family == AF_INET)
  ------------------
  |  Branch (106:13): [True: 568, False: 992]
  ------------------
  107|    568|                return in4_addr_is_multicast(&u->in);
  108|       |
  109|    992|        if (family == AF_INET6)
  ------------------
  |  Branch (109:13): [True: 992, False: 0]
  ------------------
  110|    992|                return in6_addr_is_multicast(&u->in6);
  111|       |
  112|      0|        return -EAFNOSUPPORT;
  113|    992|}
in4_addr_equal:
  171|  7.72k|bool in4_addr_equal(const struct in_addr *a, const struct in_addr *b) {
  172|  7.72k|        assert(a);
  ------------------
  |  |   72|  7.72k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  7.72k|        do {                                                            \
  |  |  |  |   59|  7.72k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  7.72k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 7.72k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  7.72k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  7.72k|        } while (false)
  |  |  ------------------
  ------------------
  173|  7.72k|        assert(b);
  ------------------
  |  |   72|  7.72k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  7.72k|        do {                                                            \
  |  |  |  |   59|  7.72k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  7.72k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 7.72k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  7.72k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  7.72k|        } while (false)
  |  |  ------------------
  ------------------
  174|       |
  175|  7.72k|        return a->s_addr == b->s_addr;
  176|  7.72k|}
in6_addr_equal:
  178|  19.3k|bool in6_addr_equal(const struct in6_addr *a, const struct in6_addr *b) {
  179|  19.3k|        assert(a);
  ------------------
  |  |   72|  19.3k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  19.3k|        do {                                                            \
  |  |  |  |   59|  19.3k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  19.3k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 19.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  19.3k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  19.3k|        } while (false)
  |  |  ------------------
  ------------------
  180|  19.3k|        assert(b);
  ------------------
  |  |   72|  19.3k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  19.3k|        do {                                                            \
  |  |  |  |   59|  19.3k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  19.3k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 19.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  19.3k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  19.3k|        } while (false)
  |  |  ------------------
  ------------------
  181|       |
  182|  19.3k|        return memcmp(a, b, sizeof(struct in6_addr)) == 0;
  183|  19.3k|}
in_addr_equal:
  185|  27.1k|int in_addr_equal(int family, const union in_addr_union *a, const union in_addr_union *b) {
  186|  27.1k|        assert(a);
  ------------------
  |  |   72|  27.1k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  27.1k|        do {                                                            \
  |  |  |  |   59|  27.1k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  27.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 27.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  27.1k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  27.1k|        } while (false)
  |  |  ------------------
  ------------------
  187|  27.1k|        assert(b);
  ------------------
  |  |   72|  27.1k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  27.1k|        do {                                                            \
  |  |  |  |   59|  27.1k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  27.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 27.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  27.1k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  27.1k|        } while (false)
  |  |  ------------------
  ------------------
  188|       |
  189|  27.1k|        if (family == AF_INET)
  ------------------
  |  Branch (189:13): [True: 7.72k, False: 19.3k]
  ------------------
  190|  7.72k|                return in4_addr_equal(&a->in, &b->in);
  191|       |
  192|  19.3k|        if (family == AF_INET6)
  ------------------
  |  Branch (192:13): [True: 19.3k, False: 0]
  ------------------
  193|  19.3k|                return in6_addr_equal(&a->in6, &b->in6);
  194|       |
  195|      0|        return -EAFNOSUPPORT;
  196|  19.3k|}
in_addr_from_string:
  582|   115k|int in_addr_from_string(int family, const char *s, union in_addr_union *ret) {
  583|   115k|        union in_addr_union buffer;
  584|   115k|        assert(s);
  ------------------
  |  |   72|   115k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   115k|        do {                                                            \
  |  |  |  |   59|   115k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   115k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 115k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   115k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   115k|        } while (false)
  |  |  ------------------
  ------------------
  585|       |
  586|   115k|        if (!IN_SET(family, AF_INET, AF_INET6))
  ------------------
  |  |  361|   115k|        ({                                                              \
  |  |  362|   115k|                bool _found = false;                                    \
  |  |  363|   115k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|   115k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|   115k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|   115k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|   115k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|   115k|                switch (x) {                                            \
  |  |  368|   115k|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|  66.9k|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|  66.9k|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|  66.9k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|   115k|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|   115k|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 48.9k, False: 66.9k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 66.9k, False: 48.9k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|   115k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|   115k|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|   115k|                        _found = true;                                  \
  |  |  370|   115k|                        break;                                          \
  |  |  371|  66.9k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 115k]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|   115k|                }                                                       \
  |  |  374|   115k|                _found;                                                 \
  |  |  375|   115k|        })
  ------------------
  |  Branch (586:13): [True: 0, False: 115k]
  ------------------
  587|      0|                return -EAFNOSUPPORT;
  588|       |
  589|   115k|        errno = 0;
  590|   115k|        if (inet_pton(family, s, ret ?: &buffer) <= 0)
  ------------------
  |  Branch (590:13): [True: 75.6k, False: 40.2k]
  |  Branch (590:34): [True: 115k, False: 0]
  ------------------
  591|  75.6k|                return errno_or_else(EINVAL);
  592|       |
  593|  40.2k|        return 0;
  594|   115k|}
in_addr_from_string_auto:
  596|  50.8k|int in_addr_from_string_auto(const char *s, int *ret_family, union in_addr_union *ret) {
  597|  50.8k|        int r;
  598|       |
  599|  50.8k|        assert(s);
  ------------------
  |  |   72|  50.8k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  50.8k|        do {                                                            \
  |  |  |  |   59|  50.8k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  50.8k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 50.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  50.8k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  50.8k|        } while (false)
  |  |  ------------------
  ------------------
  600|       |
  601|  50.8k|        r = in_addr_from_string(AF_INET, s, ret);
  602|  50.8k|        if (r >= 0) {
  ------------------
  |  Branch (602:13): [True: 8.85k, False: 42.0k]
  ------------------
  603|  8.85k|                if (ret_family)
  ------------------
  |  Branch (603:21): [True: 8.85k, False: 0]
  ------------------
  604|  8.85k|                        *ret_family = AF_INET;
  605|  8.85k|                return 0;
  606|  8.85k|        }
  607|       |
  608|  42.0k|        r = in_addr_from_string(AF_INET6, s, ret);
  609|  42.0k|        if (r >= 0) {
  ------------------
  |  Branch (609:13): [True: 25.6k, False: 16.3k]
  ------------------
  610|  25.6k|                if (ret_family)
  ------------------
  |  Branch (610:21): [True: 25.6k, False: 0]
  ------------------
  611|  25.6k|                        *ret_family = AF_INET6;
  612|  25.6k|                return 0;
  613|  25.6k|        }
  614|       |
  615|  16.3k|        return -EINVAL;
  616|  42.0k|}
in4_addr_prefixlen_to_netmask:
  625|  7.72k|struct in_addr* in4_addr_prefixlen_to_netmask(struct in_addr *addr, unsigned char prefixlen) {
  626|  7.72k|        assert(addr);
  ------------------
  |  |   72|  7.72k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  7.72k|        do {                                                            \
  |  |  |  |   59|  7.72k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  7.72k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 7.72k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  7.72k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  7.72k|        } while (false)
  |  |  ------------------
  ------------------
  627|  7.72k|        assert(prefixlen <= 32);
  ------------------
  |  |   72|  7.72k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  7.72k|        do {                                                            \
  |  |  |  |   59|  7.72k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  7.72k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 7.72k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  7.72k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  7.72k|        } while (false)
  |  |  ------------------
  ------------------
  628|       |
  629|       |        /* Shifting beyond 32 is not defined, handle this specially. */
  630|  7.72k|        if (prefixlen == 0)
  ------------------
  |  Branch (630:13): [True: 1.10k, False: 6.62k]
  ------------------
  631|  1.10k|                addr->s_addr = 0;
  632|  6.62k|        else
  633|  6.62k|                addr->s_addr = htobe32((0xffffffff << (32 - prefixlen)) & 0xffffffff);
  634|       |
  635|  7.72k|        return addr;
  636|  7.72k|}
in4_addr_mask:
  718|  7.72k|int in4_addr_mask(struct in_addr *addr, unsigned char prefixlen) {
  719|  7.72k|        struct in_addr mask;
  720|       |
  721|  7.72k|        assert(addr);
  ------------------
  |  |   72|  7.72k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  7.72k|        do {                                                            \
  |  |  |  |   59|  7.72k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  7.72k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 7.72k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  7.72k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  7.72k|        } while (false)
  |  |  ------------------
  ------------------
  722|       |
  723|  7.72k|        if (!in4_addr_prefixlen_to_netmask(&mask, prefixlen))
  ------------------
  |  Branch (723:13): [True: 0, False: 7.72k]
  ------------------
  724|      0|                return -EINVAL;
  725|       |
  726|  7.72k|        addr->s_addr &= mask.s_addr;
  727|  7.72k|        return 0;
  728|  7.72k|}
in6_addr_mask:
  730|  19.3k|int in6_addr_mask(struct in6_addr *addr, unsigned char prefixlen) {
  731|  19.3k|        unsigned i;
  732|       |
  733|   329k|        for (i = 0; i < 16; i++) {
  ------------------
  |  Branch (733:21): [True: 310k, False: 19.3k]
  ------------------
  734|   310k|                uint8_t mask;
  735|       |
  736|   310k|                if (prefixlen >= 8) {
  ------------------
  |  Branch (736:21): [True: 288k, False: 22.0k]
  ------------------
  737|   288k|                        mask = 0xFF;
  738|   288k|                        prefixlen -= 8;
  739|   288k|                } else if (prefixlen > 0) {
  ------------------
  |  Branch (739:28): [True: 1.11k, False: 20.9k]
  ------------------
  740|  1.11k|                        mask = 0xFF << (8 - prefixlen);
  741|  1.11k|                        prefixlen = 0;
  742|  20.9k|                } else {
  743|  20.9k|                        assert(prefixlen == 0);
  ------------------
  |  |   72|  20.9k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  20.9k|        do {                                                            \
  |  |  |  |   59|  20.9k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  20.9k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 20.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  20.9k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  20.9k|        } while (false)
  |  |  ------------------
  ------------------
  744|  20.9k|                        mask = 0;
  745|  20.9k|                }
  746|       |
  747|   310k|                addr->s6_addr[i] &= mask;
  748|   310k|        }
  749|       |
  750|  19.3k|        return 0;
  751|  19.3k|}
in_addr_mask:
  753|  27.1k|int in_addr_mask(int family, union in_addr_union *addr, unsigned char prefixlen) {
  754|  27.1k|        assert(addr);
  ------------------
  |  |   72|  27.1k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  27.1k|        do {                                                            \
  |  |  |  |   59|  27.1k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  27.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 27.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  27.1k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  27.1k|        } while (false)
  |  |  ------------------
  ------------------
  755|       |
  756|  27.1k|        switch (family) {
  757|  7.72k|        case AF_INET:
  ------------------
  |  Branch (757:9): [True: 7.72k, False: 19.3k]
  ------------------
  758|  7.72k|                return in4_addr_mask(&addr->in, prefixlen);
  759|  19.3k|        case AF_INET6:
  ------------------
  |  Branch (759:9): [True: 19.3k, False: 7.72k]
  ------------------
  760|  19.3k|                return in6_addr_mask(&addr->in6, prefixlen);
  761|      0|        default:
  ------------------
  |  Branch (761:9): [True: 0, False: 27.1k]
  ------------------
  762|      0|                return -EAFNOSUPPORT;
  763|  27.1k|        }
  764|  27.1k|}
in_addr_parse_prefixlen:
  842|  5.72k|int in_addr_parse_prefixlen(int family, const char *p, unsigned char *ret) {
  843|  5.72k|        uint8_t u;
  844|  5.72k|        int r;
  845|       |
  846|  5.72k|        if (!IN_SET(family, AF_INET, AF_INET6))
  ------------------
  |  |  361|  5.72k|        ({                                                              \
  |  |  362|  5.72k|                bool _found = false;                                    \
  |  |  363|  5.72k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  5.72k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  5.72k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  5.72k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  5.72k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  5.72k|                switch (x) {                                            \
  |  |  368|  5.72k|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|  2.38k|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|  2.38k|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|  2.38k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|  5.72k|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|  5.72k|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 3.33k, False: 2.38k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 2.38k, False: 3.33k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|  5.72k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|  5.72k|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|  5.72k|                        _found = true;                                  \
  |  |  370|  5.72k|                        break;                                          \
  |  |  371|  2.38k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 5.72k]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|  5.72k|                }                                                       \
  |  |  374|  5.72k|                _found;                                                 \
  |  |  375|  5.72k|        })
  ------------------
  |  Branch (846:13): [True: 0, False: 5.72k]
  ------------------
  847|      0|                return -EAFNOSUPPORT;
  848|       |
  849|  5.72k|        r = safe_atou8(p, &u);
  850|  5.72k|        if (r < 0)
  ------------------
  |  Branch (850:13): [True: 776, False: 4.94k]
  ------------------
  851|    776|                return r;
  852|       |
  853|  4.94k|        if (u > FAMILY_ADDRESS_SIZE(family) * 8)
  ------------------
  |  Branch (853:13): [True: 728, False: 4.21k]
  ------------------
  854|    728|                return -ERANGE;
  855|       |
  856|  4.21k|        *ret = u;
  857|  4.21k|        return 0;
  858|  4.94k|}
in_addr_prefix_from_string:
  864|  1.47k|                unsigned char *ret_prefixlen) {
  865|       |
  866|  1.47k|        _cleanup_free_ char *str = NULL;
  ------------------
  |  |   82|  1.47k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  1.47k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  867|  1.47k|        union in_addr_union buffer;
  868|  1.47k|        const char *e, *l;
  869|  1.47k|        unsigned char k;
  870|  1.47k|        int r;
  871|       |
  872|  1.47k|        assert(p);
  ------------------
  |  |   72|  1.47k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.47k|        do {                                                            \
  |  |  |  |   59|  1.47k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.47k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.47k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.47k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.47k|        } while (false)
  |  |  ------------------
  ------------------
  873|       |
  874|  1.47k|        if (!IN_SET(family, AF_INET, AF_INET6))
  ------------------
  |  |  361|  1.47k|        ({                                                              \
  |  |  362|  1.47k|                bool _found = false;                                    \
  |  |  363|  1.47k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  1.47k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  1.47k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  1.47k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  1.47k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  1.47k|                switch (x) {                                            \
  |  |  368|  1.47k|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|  1.47k|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|  1.47k|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 1.47k, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 1.47k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|  1.47k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|  1.47k|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|  1.47k|                        _found = true;                                  \
  |  |  370|  1.47k|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 1.47k]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|  1.47k|                }                                                       \
  |  |  374|  1.47k|                _found;                                                 \
  |  |  375|  1.47k|        })
  ------------------
  |  Branch (874:13): [True: 0, False: 1.47k]
  ------------------
  875|      0|                return -EAFNOSUPPORT;
  876|       |
  877|  1.47k|        e = strchr(p, '/');
  878|  1.47k|        if (e) {
  ------------------
  |  Branch (878:13): [True: 1.08k, False: 394]
  ------------------
  879|  1.08k|                str = strndup(p, e - p);
  880|  1.08k|                if (!str)
  ------------------
  |  Branch (880:21): [True: 0, False: 1.08k]
  ------------------
  881|      0|                        return -ENOMEM;
  882|       |
  883|  1.08k|                l = str;
  884|  1.08k|        } else
  885|    394|                l = p;
  886|       |
  887|  1.47k|        r = in_addr_from_string(family, l, &buffer);
  888|  1.47k|        if (r < 0)
  ------------------
  |  Branch (888:13): [True: 216, False: 1.26k]
  ------------------
  889|    216|                return r;
  890|       |
  891|  1.26k|        if (e) {
  ------------------
  |  Branch (891:13): [True: 1.06k, False: 194]
  ------------------
  892|  1.06k|                r = in_addr_parse_prefixlen(family, e+1, &k);
  893|  1.06k|                if (r < 0)
  ------------------
  |  Branch (893:21): [True: 596, False: 473]
  ------------------
  894|    596|                        return r;
  895|  1.06k|        } else
  896|    194|                k = FAMILY_ADDRESS_SIZE(family) * 8;
  897|       |
  898|    667|        if (ret_prefix)
  ------------------
  |  Branch (898:13): [True: 667, False: 0]
  ------------------
  899|    667|                *ret_prefix = buffer;
  900|    667|        if (ret_prefixlen)
  ------------------
  |  Branch (900:13): [True: 667, False: 0]
  ------------------
  901|    667|                *ret_prefixlen = k;
  902|       |
  903|    667|        return 0;
  904|  1.26k|}
in_addr_prefix_from_string_auto_full:
  911|  42.0k|                unsigned char *ret_prefixlen) {
  912|       |
  913|  42.0k|        _cleanup_free_ char *str = NULL;
  ------------------
  |  |   82|  42.0k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  42.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  914|  42.0k|        union in_addr_union buffer;
  915|  42.0k|        const char *e, *l;
  916|  42.0k|        unsigned char k;
  917|  42.0k|        int family, r;
  918|       |
  919|  42.0k|        assert(p);
  ------------------
  |  |   72|  42.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  42.0k|        do {                                                            \
  |  |  |  |   59|  42.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  42.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 42.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  42.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  42.0k|        } while (false)
  |  |  ------------------
  ------------------
  920|       |
  921|  42.0k|        e = strchr(p, '/');
  922|  42.0k|        if (e) {
  ------------------
  |  Branch (922:13): [True: 6.73k, False: 35.2k]
  ------------------
  923|  6.73k|                str = strndup(p, e - p);
  924|  6.73k|                if (!str)
  ------------------
  |  Branch (924:21): [True: 0, False: 6.73k]
  ------------------
  925|      0|                        return -ENOMEM;
  926|       |
  927|  6.73k|                l = str;
  928|  6.73k|        } else
  929|  35.2k|                l = p;
  930|       |
  931|  42.0k|        r = in_addr_from_string_auto(l, &family, &buffer);
  932|  42.0k|        if (r < 0)
  ------------------
  |  Branch (932:13): [True: 13.9k, False: 28.0k]
  ------------------
  933|  13.9k|                return r;
  934|       |
  935|  28.0k|        if (e) {
  ------------------
  |  Branch (935:13): [True: 4.65k, False: 23.3k]
  ------------------
  936|  4.65k|                r = in_addr_parse_prefixlen(family, e+1, &k);
  937|  4.65k|                if (r < 0)
  ------------------
  |  Branch (937:21): [True: 908, False: 3.74k]
  ------------------
  938|    908|                        return r;
  939|  4.65k|        } else
  940|  23.3k|                switch (mode) {
  941|  23.3k|                case PREFIXLEN_FULL:
  ------------------
  |  Branch (941:17): [True: 23.3k, False: 0]
  ------------------
  942|  23.3k|                        k = FAMILY_ADDRESS_SIZE(family) * 8;
  943|  23.3k|                        break;
  944|      0|                case PREFIXLEN_REFUSE:
  ------------------
  |  Branch (944:17): [True: 0, False: 23.3k]
  ------------------
  945|      0|                        return -ENOANO; /* To distinguish this error from others. */
  946|      0|                default:
  ------------------
  |  Branch (946:17): [True: 0, False: 23.3k]
  ------------------
  947|      0|                        assert_not_reached();
  ------------------
  |  |   76|      0|        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  948|  23.3k|                }
  949|       |
  950|  27.1k|        if (ret_family)
  ------------------
  |  Branch (950:13): [True: 27.1k, False: 0]
  ------------------
  951|  27.1k|                *ret_family = family;
  952|  27.1k|        if (ret_prefix)
  ------------------
  |  Branch (952:13): [True: 27.1k, False: 0]
  ------------------
  953|  27.1k|                *ret_prefix = buffer;
  954|  27.1k|        if (ret_prefixlen)
  ------------------
  |  Branch (954:13): [True: 27.1k, False: 0]
  ------------------
  955|  27.1k|                *ret_prefixlen = k;
  956|       |
  957|  27.1k|        return 0;
  958|  28.0k|}
in_addr_hash_func:
  960|  59.2k|void in_addr_hash_func(const union in_addr_union *u, int family, struct siphash *state) {
  961|  59.2k|        assert(u);
  ------------------
  |  |   72|  59.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  59.2k|        do {                                                            \
  |  |  |  |   59|  59.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  59.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 59.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  59.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  59.2k|        } while (false)
  |  |  ------------------
  ------------------
  962|  59.2k|        assert(state);
  ------------------
  |  |   72|  59.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  59.2k|        do {                                                            \
  |  |  |  |   59|  59.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  59.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 59.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  59.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  59.2k|        } while (false)
  |  |  ------------------
  ------------------
  963|       |
  964|  59.2k|        siphash24_compress(u->bytes, FAMILY_ADDRESS_SIZE(family), state);
  965|  59.2k|}

l2tp-tunnel.c:in_addr_is_set:
   28|  2.04k|static inline bool in_addr_is_set(int family, const union in_addr_union *u) {
   29|  2.04k|        return in_addr_is_null(family, u) == 0;
   30|  2.04k|}
tunnel.c:in_addr_is_set:
   28|  2.93k|static inline bool in_addr_is_set(int family, const union in_addr_union *u) {
   29|  2.93k|        return in_addr_is_null(family, u) == 0;
   30|  2.93k|}
vxlan.c:in_addr_is_set:
   28|    572|static inline bool in_addr_is_set(int family, const union in_addr_union *u) {
   29|    572|        return in_addr_is_null(family, u) == 0;
   30|    572|}
wireguard.c:in_addr_prefix_from_string_auto:
  175|  42.0k|static inline int in_addr_prefix_from_string_auto(const char *p, int *ret_family, union in_addr_union *ret_prefix, unsigned char *ret_prefixlen) {
  176|  42.0k|        return in_addr_prefix_from_string_auto_full(p, PREFIXLEN_FULL, ret_family, ret_prefix, ret_prefixlen);
  177|  42.0k|}
networkd-route.c:FAMILY_ADDRESS_SIZE:
  179|  35.4k|static inline size_t FAMILY_ADDRESS_SIZE(int family) {
  180|  35.4k|        switch (family) {
  181|  8.83k|                case AF_INET:
  ------------------
  |  Branch (181:17): [True: 8.83k, False: 26.6k]
  ------------------
  182|  8.83k|                        return 4;
  183|  26.6k|                case AF_INET6:
  ------------------
  |  Branch (183:17): [True: 26.6k, False: 8.83k]
  ------------------
  184|  26.6k|                        return 16;
  185|      0|                default:
  ------------------
  |  Branch (185:17): [True: 0, False: 35.4k]
  ------------------
  186|      0|                        assert_not_reached();
  ------------------
  |  |   76|      0|        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  187|  35.4k|        }
  188|  35.4k|}
networkd-route.c:in_addr_is_set:
   28|  6.69k|static inline bool in_addr_is_set(int family, const union in_addr_union *u) {
   29|  6.69k|        return in_addr_is_null(family, u) == 0;
   30|  6.69k|}
networkd-route-nexthop.c:in_addr_is_set:
   28|  40.5k|static inline bool in_addr_is_set(int family, const union in_addr_union *u) {
   29|  40.5k|        return in_addr_is_null(family, u) == 0;
   30|  40.5k|}
in-addr-util.c:FAMILY_ADDRESS_SIZE:
  179|  87.7k|static inline size_t FAMILY_ADDRESS_SIZE(int family) {
  180|  87.7k|        switch (family) {
  181|  34.8k|                case AF_INET:
  ------------------
  |  Branch (181:17): [True: 34.8k, False: 52.9k]
  ------------------
  182|  34.8k|                        return 4;
  183|  52.9k|                case AF_INET6:
  ------------------
  |  Branch (183:17): [True: 52.9k, False: 34.8k]
  ------------------
  184|  52.9k|                        return 16;
  185|      0|                default:
  ------------------
  |  Branch (185:17): [True: 0, False: 87.7k]
  ------------------
  186|      0|                        assert_not_reached();
  ------------------
  |  |   76|      0|        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  187|  87.7k|        }
  188|  87.7k|}

loop_read:
   52|     13|ssize_t loop_read(int fd, void *buf, size_t nbytes, bool do_poll) {
   53|     13|        uint8_t *p = ASSERT_PTR(buf);
  ------------------
  |  |   81|     13|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|     13|        ({                                 \
  |  |  |  |   85|     13|                typeof(expr) var = (expr); \
  |  |  |  |   86|     13|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|     13|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|     13|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|     13|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|     13|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|     13|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|     13|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|     13|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|     13|                var;                       \
  |  |  |  |   88|     13|        })
  |  |  ------------------
  ------------------
   54|     13|        ssize_t n = 0;
   55|       |
   56|     13|        assert(fd >= 0);
  ------------------
  |  |   72|     13|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     13|        do {                                                            \
  |  |  |  |   59|     13|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     13|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     13|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     13|        } while (false)
  |  |  ------------------
  ------------------
   57|       |
   58|       |        /* If called with nbytes == 0, let's call read() at least once, to validate the operation */
   59|       |
   60|     13|        if (nbytes > (size_t) SSIZE_MAX)
  ------------------
  |  Branch (60:13): [True: 0, False: 13]
  ------------------
   61|      0|                return -EINVAL;
   62|       |
   63|     14|        do {
   64|     14|                ssize_t k;
   65|       |
   66|     14|                k = read(fd, p, nbytes);
   67|     14|                if (k < 0) {
  ------------------
  |  Branch (67:21): [True: 0, False: 14]
  ------------------
   68|      0|                        if (errno == EINTR)
  ------------------
  |  Branch (68:29): [True: 0, False: 0]
  ------------------
   69|      0|                                continue;
   70|       |
   71|      0|                        if (errno == EAGAIN && do_poll) {
  ------------------
  |  Branch (71:29): [True: 0, False: 0]
  |  Branch (71:48): [True: 0, False: 0]
  ------------------
   72|       |
   73|       |                                /* We knowingly ignore any return value here,
   74|       |                                 * and expect that any error/EOF is reported
   75|       |                                 * via read() */
   76|       |
   77|      0|                                (void) fd_wait_for_event(fd, POLLIN, USEC_INFINITY);
  ------------------
  |  |   35|      0|#define USEC_INFINITY ((usec_t) UINT64_MAX)
  ------------------
   78|      0|                                continue;
   79|      0|                        }
   80|       |
   81|      0|                        return n > 0 ? n : -errno;
  ------------------
  |  Branch (81:32): [True: 0, False: 0]
  ------------------
   82|      0|                }
   83|       |
   84|     14|                if (k == 0)
  ------------------
  |  Branch (84:21): [True: 13, False: 1]
  ------------------
   85|     13|                        return n;
   86|       |
   87|      1|                assert((size_t) k <= nbytes);
  ------------------
  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      1|        } while (false)
  |  |  ------------------
  ------------------
   88|      1|                assert(k <= SSIZE_MAX - n);
  ------------------
  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      1|        } while (false)
  |  |  ------------------
  ------------------
   89|       |
   90|      1|                p += k;
   91|      1|                nbytes -= k;
   92|      1|                n += k;
   93|      1|        } while (nbytes > 0);
  ------------------
  |  Branch (93:18): [True: 1, False: 0]
  ------------------
   94|       |
   95|      0|        return n;
   96|     13|}

stderr_is_journal:
  233|  13.0k|bool stderr_is_journal(void) {
  234|  13.0k|        _cleanup_free_ char *w = NULL;
  ------------------
  |  |   82|  13.0k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  13.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  235|  13.0k|        const char *e;
  236|  13.0k|        uint64_t dev, ino;
  237|  13.0k|        struct stat st;
  238|       |
  239|  13.0k|        e = getenv("JOURNAL_STREAM");
  240|  13.0k|        if (!e)
  ------------------
  |  Branch (240:13): [True: 13.0k, False: 0]
  ------------------
  241|  13.0k|                return false;
  242|       |
  243|      0|        if (extract_first_word(&e, &w, ":", EXTRACT_DONT_COALESCE_SEPARATORS) <= 0)
  ------------------
  |  Branch (243:13): [True: 0, False: 0]
  ------------------
  244|      0|                return false;
  245|      0|        if (!e)
  ------------------
  |  Branch (245:13): [True: 0, False: 0]
  ------------------
  246|      0|                return false;
  247|       |
  248|      0|        if (safe_atou64(w, &dev) < 0)
  ------------------
  |  Branch (248:13): [True: 0, False: 0]
  ------------------
  249|      0|                return false;
  250|      0|        if (safe_atou64(e, &ino) < 0)
  ------------------
  |  Branch (250:13): [True: 0, False: 0]
  ------------------
  251|      0|                return false;
  252|       |
  253|      0|        if (fstat(STDERR_FILENO, &st) < 0)
  ------------------
  |  Branch (253:13): [True: 0, False: 0]
  ------------------
  254|      0|                return false;
  255|       |
  256|      0|        return st.st_dev == dev && st.st_ino == ino;
  ------------------
  |  Branch (256:16): [True: 0, False: 0]
  |  Branch (256:36): [True: 0, False: 0]
  ------------------
  257|      0|}
log_open:
  259|  13.0k|int log_open(void) {
  260|  13.0k|        int r;
  261|       |
  262|       |        /* Do not call from library code. */
  263|       |
  264|       |        /* This function is often called in preparation for logging. Let's make sure we don't clobber errno,
  265|       |         * so that a call to a logging function immediately following a log_open() call can still easily
  266|       |         * reference an error that happened immediately before the log_open() call. */
  267|  13.0k|        PROTECT_ERRNO;
  ------------------
  |  |   31|  13.0k|        _cleanup_(_reset_errno_) _unused_ int _saved_errno_ = errno
  |  |  ------------------
  |  |  |  |   78|  13.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  268|       |
  269|       |        /* If we don't use the console, we close it here to not get killed by SAK. If we don't use syslog, we
  270|       |         * close it here too, so that we are not confused by somebody deleting the socket in the fs, and to
  271|       |         * make sure we don't use it if prohibit_ipc is set. If we don't use /dev/kmsg we still keep it open,
  272|       |         * because there is no reason to close it. */
  273|       |
  274|  13.0k|        if (log_target == LOG_TARGET_NULL) {
  ------------------
  |  Branch (274:13): [True: 0, False: 13.0k]
  ------------------
  275|      0|                log_close_journal();
  276|      0|                log_close_syslog();
  277|      0|                log_close_console();
  278|      0|                return 0;
  279|      0|        }
  280|       |
  281|  13.0k|        if (getpid_cached() == 1 ||
  ------------------
  |  Branch (281:13): [True: 0, False: 13.0k]
  ------------------
  282|  13.0k|            stderr_is_journal() ||
  ------------------
  |  Branch (282:13): [True: 0, False: 13.0k]
  ------------------
  283|  13.0k|            IN_SET(log_target,
  ------------------
  |  |  361|  13.0k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 0, False: 13.0k]
  |  |  ------------------
  |  |  362|  13.0k|                bool _found = false;                                    \
  |  |  363|  13.0k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  13.0k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  13.0k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  13.0k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  13.0k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  13.0k|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  337|      0|#define  CASE_F_5(X, ...) case X:  CASE_F_4( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  336|      0|#define  CASE_F_4(X, ...) case X:  CASE_F_3( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 13.0k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 13.0k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 13.0k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (336:27): [True: 0, False: 13.0k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (337:27): [True: 0, False: 13.0k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|  13.0k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 13.0k, False: 0]
  |  |  ------------------
  |  |  372|  13.0k|                        ;                                               \
  |  |  373|  13.0k|                }                                                       \
  |  |  374|  13.0k|                _found;                                                 \
  |  |  375|  13.0k|        })
  ------------------
  284|  13.0k|                   LOG_TARGET_KMSG,
  285|  13.0k|                   LOG_TARGET_JOURNAL,
  286|  13.0k|                   LOG_TARGET_JOURNAL_OR_KMSG,
  287|  13.0k|                   LOG_TARGET_SYSLOG,
  288|  13.0k|                   LOG_TARGET_SYSLOG_OR_KMSG)) {
  289|       |
  290|      0|                if (!prohibit_ipc) {
  ------------------
  |  Branch (290:21): [True: 0, False: 0]
  ------------------
  291|      0|                        if (IN_SET(log_target,
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  292|      0|                                   LOG_TARGET_AUTO,
  293|      0|                                   LOG_TARGET_JOURNAL_OR_KMSG,
  294|      0|                                   LOG_TARGET_JOURNAL)) {
  295|       |
  296|      0|                                r = log_open_journal();
  297|      0|                                if (r >= 0) {
  ------------------
  |  Branch (297:37): [True: 0, False: 0]
  ------------------
  298|      0|                                        log_close_syslog();
  299|      0|                                        log_close_console();
  300|      0|                                        return r;
  301|      0|                                }
  302|      0|                        }
  303|       |
  304|      0|                        if (IN_SET(log_target,
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  305|      0|                                   LOG_TARGET_SYSLOG_OR_KMSG,
  306|      0|                                   LOG_TARGET_SYSLOG)) {
  307|       |
  308|      0|                                r = log_open_syslog();
  309|      0|                                if (r >= 0) {
  ------------------
  |  Branch (309:37): [True: 0, False: 0]
  ------------------
  310|      0|                                        log_close_journal();
  311|      0|                                        log_close_console();
  312|      0|                                        return r;
  313|      0|                                }
  314|      0|                        }
  315|      0|                }
  316|       |
  317|      0|                if (IN_SET(log_target, LOG_TARGET_AUTO,
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  336|      0|#define  CASE_F_4(X, ...) case X:  CASE_F_3( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (336:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  318|      0|                                       LOG_TARGET_JOURNAL_OR_KMSG,
  319|      0|                                       LOG_TARGET_SYSLOG_OR_KMSG,
  320|      0|                                       LOG_TARGET_KMSG)) {
  321|      0|                        r = log_open_kmsg();
  322|      0|                        if (r >= 0) {
  ------------------
  |  Branch (322:29): [True: 0, False: 0]
  ------------------
  323|      0|                                log_close_journal();
  324|      0|                                log_close_syslog();
  325|      0|                                log_close_console();
  326|      0|                                return r;
  327|      0|                        }
  328|      0|                }
  329|      0|        }
  330|       |
  331|  13.0k|        log_close_journal();
  332|  13.0k|        log_close_syslog();
  333|       |
  334|  13.0k|        return log_open_console();
  335|  13.0k|}
log_set_target:
  337|  13.0k|void log_set_target(LogTarget target) {
  338|  13.0k|        assert(target >= 0);
  ------------------
  |  |   72|  13.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.0k|        do {                                                            \
  |  |  |  |   59|  13.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  13.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.0k|        } while (false)
  |  |  ------------------
  ------------------
  339|  13.0k|        assert(target < _LOG_TARGET_MAX);
  ------------------
  |  |   72|  13.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.0k|        do {                                                            \
  |  |  |  |   59|  13.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  13.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.0k|        } while (false)
  |  |  ------------------
  ------------------
  340|       |
  341|  13.0k|        if (upgrade_syslog_to_journal) {
  ------------------
  |  Branch (341:13): [True: 0, False: 13.0k]
  ------------------
  342|      0|                if (target == LOG_TARGET_SYSLOG)
  ------------------
  |  Branch (342:21): [True: 0, False: 0]
  ------------------
  343|      0|                        target = LOG_TARGET_JOURNAL;
  344|      0|                else if (target == LOG_TARGET_SYSLOG_OR_KMSG)
  ------------------
  |  Branch (344:26): [True: 0, False: 0]
  ------------------
  345|      0|                        target = LOG_TARGET_JOURNAL_OR_KMSG;
  346|      0|        }
  347|       |
  348|  13.0k|        log_target = target;
  349|  13.0k|}
log_set_max_level:
  372|  13.0k|int log_set_max_level(int level) {
  373|  13.0k|        assert(level == LOG_NULL || log_level_is_valid(level));
  ------------------
  |  |   72|  13.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.0k|        do {                                                            \
  |  |  |  |   59|  13.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  26.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.0k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 13.0k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 13.0k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.0k|        } while (false)
  |  |  ------------------
  ------------------
  374|       |
  375|  13.0k|        int old = log_max_level;
  376|  13.0k|        log_max_level = level;
  377|       |
  378|       |        /* Also propagate max log level to libc's syslog(), just in case some other component loaded into our
  379|       |         * process logs directly via syslog(). You might wonder why we maintain our own log level variable if
  380|       |         * libc has the same functionality. This has multiple reasons, first and foremost that we want to
  381|       |         * apply this to all our log targets, not just syslog and console. Moreover, we cannot query the
  382|       |         * current log mask from glibc without changing it, but that's useful for testing the current log
  383|       |         * level before even entering the log functions like we do in our macros. */
  384|  13.0k|        setlogmask(LOG_UPTO(level));
  385|       |
  386|       |        /* Ensure that our own LOG_NULL define maps sanely to the log mask */
  387|  13.0k|        assert_cc(LOG_UPTO(LOG_NULL) == 0);
  ------------------
  |  |  142|  13.0k|#define assert_cc(expr) _Static_assert(expr, #expr)
  ------------------
  388|       |
  389|  13.0k|        return old;
  390|  13.0k|}
log_internalv:
  856|      3|                va_list ap) {
  857|       |
  858|      3|        if (_likely_(LOG_PRI(level) > log_max_level))
  ------------------
  |  |   83|      3|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  ------------------
  |  |  |  Branch (83:21): [True: 3, False: 0]
  |  |  ------------------
  ------------------
  859|      3|                return -ERRNO_VALUE(error);
  ------------------
  |  |   36|      3|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  |  |  172|      3|#  define ABS(a) __builtin_llabs(a)
  |  |  ------------------
  ------------------
  860|       |
  861|       |        /* Make sure that %m maps to the specified error (or "Success"). */
  862|      0|        char buffer[LINE_MAX];
  863|      0|        LOCAL_ERRNO(ERRNO_VALUE(error));
  ------------------
  |  |   40|      0|        PROTECT_ERRNO;                          \
  |  |  ------------------
  |  |  |  |   31|      0|        _cleanup_(_reset_errno_) _unused_ int _saved_errno_ = errno
  |  |  |  |  ------------------
  |  |  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|        errno = ABS(value)
  |  |  ------------------
  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  ------------------
  ------------------
  864|       |
  865|      0|        (void) vsnprintf(buffer, sizeof buffer, format, ap);
  866|       |
  867|      0|        return log_dispatch_internal(level, error, file, line, func, NULL, NULL, NULL, NULL, buffer);
  868|      3|}
log_internal:
  876|      3|                const char *format, ...) {
  877|       |
  878|      3|        va_list ap;
  879|      3|        int r;
  880|       |
  881|      3|        va_start(ap, format);
  882|      3|        r = log_internalv(level, error, file, line, func, format, ap);
  883|      3|        va_end(ap);
  884|       |
  885|      3|        return r;
  886|      3|}
log_object_internalv:
  899|  13.9k|                va_list ap) {
  900|       |
  901|  13.9k|        char *buffer, *b;
  902|       |
  903|  13.9k|        if (_likely_(LOG_PRI(level) > log_max_level))
  ------------------
  |  |   83|  13.9k|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  ------------------
  |  |  |  Branch (83:21): [True: 13.9k, False: 0]
  |  |  ------------------
  ------------------
  904|  13.9k|                return -ERRNO_VALUE(error);
  ------------------
  |  |   36|  13.9k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  |  |  172|  13.9k|#  define ABS(a) __builtin_llabs(a)
  |  |  ------------------
  ------------------
  905|       |
  906|       |        /* Make sure that %m maps to the specified error (or "Success"). */
  907|  13.9k|        LOCAL_ERRNO(ERRNO_VALUE(error));
  ------------------
  |  |   40|  13.9k|        PROTECT_ERRNO;                          \
  |  |  ------------------
  |  |  |  |   31|      0|        _cleanup_(_reset_errno_) _unused_ int _saved_errno_ = errno
  |  |  |  |  ------------------
  |  |  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  13.9k|        errno = ABS(value)
  |  |  ------------------
  |  |  |  |  172|  13.9k|#  define ABS(a) __builtin_llabs(a)
  |  |  ------------------
  ------------------
  908|       |
  909|      0|        LOG_SET_PREFIX(object);
  ------------------
  |  |  386|      0|        _cleanup_(_log_unset_prefixp) _unused_ const char *CONCATENATE(_cleanup_log_unset_prefix_, UNIQ) = _log_set_prefix(prefix, false);
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  910|       |
  911|      0|        b = buffer = newa(char, LINE_MAX);
  ------------------
  |  |   29|      0|        ({                                                              \
  |  |   30|      0|                size_t _n_ = (n);                                       \
  |  |   31|      0|                assert_se(MUL_ASSIGN_SAFE(&_n_, sizeof(t)));            \
  |  |  ------------------
  |  |  |  |   65|      0|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   32|      0|                (t*) alloca_safe(_n_);                                  \
  |  |  ------------------
  |  |  |  |   22|      0|        ({                                                              \
  |  |  |  |   23|      0|                size_t _nn_ = (n);                                      \
  |  |  |  |   24|      0|                assert(_nn_ <= ALLOCA_MAX);                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   25|      0|                alloca(_nn_ == 0 ? 1 : _nn_);                           \
  |  |  |  |   26|      0|        })                                                              \
  |  |  ------------------
  |  |   33|      0|        })
  ------------------
  912|      0|        (void) vsnprintf(b, LINE_MAX, format, ap);
  913|       |
  914|      0|        return log_dispatch_internal(level, error, file, line, func,
  915|      0|                                     object_field, object, extra_field, extra, buffer);
  916|  13.9k|}
log_object_internal:
  928|  13.9k|                const char *format, ...) {
  929|       |
  930|  13.9k|        va_list ap;
  931|  13.9k|        int r;
  932|       |
  933|  13.9k|        va_start(ap, format);
  934|  13.9k|        r = log_object_internalv(level, error, file, line, func, object_field, object, extra_field, extra, format, ap);
  935|  13.9k|        va_end(ap);
  936|       |
  937|  13.9k|        return r;
  938|  13.9k|}
log_oom_internal:
  940|      3|int log_oom_internal(int level, const char *file, int line, const char *func) {
  941|      3|        return log_internal(level, ENOMEM, file, line, func, "Out of memory.");
  942|      3|}
log_parse_environment_variables:
 1321|  13.0k|void log_parse_environment_variables(void) {
 1322|  13.0k|        const char *e;
 1323|  13.0k|        int r;
 1324|       |
 1325|  13.0k|        e = getenv("SYSTEMD_LOG_TARGET");
 1326|  13.0k|        if (e && log_set_target_from_string(e) < 0)
  ------------------
  |  Branch (1326:13): [True: 0, False: 13.0k]
  |  Branch (1326:18): [True: 0, False: 0]
  ------------------
 1327|  13.0k|                log_warning("Failed to parse log target '%s', ignoring.", e);
  ------------------
  |  |  223|      0|#define log_warning(...)   log_full(LOG_WARNING, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
 1328|       |
 1329|  13.0k|        e = getenv("SYSTEMD_LOG_LEVEL");
 1330|  13.0k|        if (e) {
  ------------------
  |  Branch (1330:13): [True: 0, False: 13.0k]
  ------------------
 1331|      0|                r = log_set_max_level_from_string(e);
 1332|      0|                if (r < 0)
  ------------------
  |  Branch (1332:21): [True: 0, False: 0]
  ------------------
 1333|      0|                        log_warning_errno(r, "Failed to parse log level '%s', ignoring: %m", e);
  ------------------
  |  |  231|      0|#define log_warning_errno(error, ...)   log_full_errno(LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
 1334|  13.0k|        } else {
 1335|       |                /* If no explicit log level is specified then let's see if this is a debug invocation, and if
 1336|       |                 * so raise the log level to debug too. Note that this is not symmetric: just because
 1337|       |                 * DEBUG_INVOCATION is explicitly set to 0 we won't lower the log level below debug. This
 1338|       |                 * follows the logic that debug logging is an opt-in thing anyway, and if there's any reason
 1339|       |                 * to enable it we should not disable it here automatically. */
 1340|  13.0k|                r = getenv_bool("DEBUG_INVOCATION");
 1341|  13.0k|                if (r < 0 && r != -ENXIO)
  ------------------
  |  Branch (1341:21): [True: 13.0k, False: 0]
  |  Branch (1341:30): [True: 0, False: 13.0k]
  ------------------
 1342|  13.0k|                        log_warning_errno(r, "Failed to parse $DEBUG_INVOCATION value, ignoring: %m");
  ------------------
  |  |  231|      0|#define log_warning_errno(error, ...)   log_full_errno(LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
 1343|  13.0k|                else if (r > 0)
  ------------------
  |  Branch (1343:26): [True: 0, False: 13.0k]
  ------------------
 1344|      0|                        log_set_max_level(LOG_DEBUG);
 1345|  13.0k|        }
 1346|       |
 1347|  13.0k|        e = getenv("SYSTEMD_LOG_COLOR");
 1348|  13.0k|        if (e && log_show_color_from_string(e) < 0)
  ------------------
  |  Branch (1348:13): [True: 0, False: 13.0k]
  |  Branch (1348:18): [True: 0, False: 0]
  ------------------
 1349|  13.0k|                log_warning("Failed to parse log color '%s', ignoring.", e);
  ------------------
  |  |  223|      0|#define log_warning(...)   log_full(LOG_WARNING, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
 1350|       |
 1351|  13.0k|        e = getenv("SYSTEMD_LOG_LOCATION");
 1352|  13.0k|        if (e && log_show_location_from_string(e) < 0)
  ------------------
  |  Branch (1352:13): [True: 0, False: 13.0k]
  |  Branch (1352:18): [True: 0, False: 0]
  ------------------
 1353|  13.0k|                log_warning("Failed to parse log location '%s', ignoring.", e);
  ------------------
  |  |  223|      0|#define log_warning(...)   log_full(LOG_WARNING, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
 1354|       |
 1355|  13.0k|        e = getenv("SYSTEMD_LOG_TIME");
 1356|  13.0k|        if (e && log_show_time_from_string(e) < 0)
  ------------------
  |  Branch (1356:13): [True: 0, False: 13.0k]
  |  Branch (1356:18): [True: 0, False: 0]
  ------------------
 1357|  13.0k|                log_warning("Failed to parse log time '%s', ignoring.", e);
  ------------------
  |  |  223|      0|#define log_warning(...)   log_full(LOG_WARNING, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
 1358|       |
 1359|  13.0k|        e = getenv("SYSTEMD_LOG_TID");
 1360|  13.0k|        if (e && log_show_tid_from_string(e) < 0)
  ------------------
  |  Branch (1360:13): [True: 0, False: 13.0k]
  |  Branch (1360:18): [True: 0, False: 0]
  ------------------
 1361|  13.0k|                log_warning("Failed to parse log tid '%s', ignoring.", e);
  ------------------
  |  |  223|      0|#define log_warning(...)   log_full(LOG_WARNING, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
 1362|       |
 1363|  13.0k|        e = getenv("SYSTEMD_LOG_RATELIMIT_KMSG");
 1364|  13.0k|        if (e && log_set_ratelimit_kmsg_from_string(e) < 0)
  ------------------
  |  Branch (1364:13): [True: 0, False: 13.0k]
  |  Branch (1364:18): [True: 0, False: 0]
  ------------------
 1365|  13.0k|                log_warning("Failed to parse log ratelimit kmsg boolean '%s', ignoring.", e);
  ------------------
  |  |  223|      0|#define log_warning(...)   log_full(LOG_WARNING, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
 1366|  13.0k|}
log_parse_environment:
 1368|  13.0k|void log_parse_environment(void) {
 1369|       |        /* Do not call from library code. */
 1370|       |
 1371|  13.0k|        if (should_parse_proc_cmdline())
  ------------------
  |  Branch (1371:13): [True: 0, False: 13.0k]
  ------------------
 1372|      0|                (void) proc_cmdline_parse(parse_proc_cmdline_item, NULL, PROC_CMDLINE_STRIP_RD_PREFIX);
 1373|       |
 1374|  13.0k|        log_parse_environment_variables();
 1375|  13.0k|}
log_get_max_level:
 1399|   229k|int log_get_max_level(void) {
 1400|   229k|        return log_max_level;
 1401|   229k|}
log_show_color:
 1409|      1|void log_show_color(bool b) {
 1410|      1|        show_color = b;
 1411|      1|}
log_on_console:
 1485|  13.0k|bool log_on_console(void) {
 1486|  13.0k|        if (IN_SET(log_target, LOG_TARGET_CONSOLE,
  ------------------
  |  |  361|  13.0k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 0, False: 13.0k]
  |  |  ------------------
  |  |  362|  13.0k|                bool _found = false;                                    \
  |  |  363|  13.0k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  13.0k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  13.0k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  13.0k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  13.0k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  13.0k|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 13.0k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 13.0k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|  13.0k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 13.0k, False: 0]
  |  |  ------------------
  |  |  372|  13.0k|                        ;                                               \
  |  |  373|  13.0k|                }                                                       \
  |  |  374|  13.0k|                _found;                                                 \
  |  |  375|  13.0k|        })
  ------------------
 1487|  13.0k|                               LOG_TARGET_CONSOLE_PREFIXED))
 1488|      0|                return true;
 1489|       |
 1490|  13.0k|        return syslog_fd < 0 && kmsg_fd < 0 && journal_fd < 0;
  ------------------
  |  Branch (1490:16): [True: 13.0k, False: 0]
  |  Branch (1490:33): [True: 13.0k, False: 0]
  |  Branch (1490:48): [True: 13.0k, False: 0]
  ------------------
 1491|  13.0k|}
log_syntax_internal:
 1542|  15.7k|                const char *format, ...) {
 1543|       |
 1544|  15.7k|        PROTECT_ERRNO;
  ------------------
  |  |   31|  15.7k|        _cleanup_(_reset_errno_) _unused_ int _saved_errno_ = errno
  |  |  ------------------
  |  |  |  |   78|  15.7k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1545|       |
 1546|  15.7k|        if (log_syntax_callback)
  ------------------
  |  Branch (1546:13): [True: 0, False: 15.7k]
  ------------------
 1547|      0|                log_syntax_callback(unit, level, log_syntax_callback_userdata);
 1548|       |
 1549|  15.7k|        if (_likely_(LOG_PRI(level) > log_max_level) ||
  ------------------
  |  |   83|  31.5k|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  ------------------
  |  |  |  Branch (83:21): [True: 15.7k, False: 0]
  |  |  ------------------
  ------------------
 1550|  15.7k|            log_target == LOG_TARGET_NULL)
  ------------------
  |  Branch (1550:13): [True: 0, False: 0]
  ------------------
 1551|  15.7k|                return -ERRNO_VALUE(error);
  ------------------
  |  |   36|  15.7k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  |  |  172|  15.7k|#  define ABS(a) __builtin_llabs(a)
  |  |  ------------------
  ------------------
 1552|       |
 1553|      0|        char buffer[LINE_MAX];
 1554|      0|        va_list ap;
 1555|      0|        const char *unit_fmt = NULL;
 1556|       |
 1557|      0|        errno = ERRNO_VALUE(error);
  ------------------
  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  ------------------
  ------------------
 1558|       |
 1559|      0|        va_start(ap, format);
 1560|      0|        (void) vsnprintf(buffer, sizeof buffer, format, ap);
 1561|      0|        va_end(ap);
 1562|       |
 1563|      0|        if (unit)
  ------------------
  |  Branch (1563:13): [True: 0, False: 0]
  ------------------
 1564|      0|                unit_fmt = getpid_cached() == 1 ? "UNIT=%s" : "USER_UNIT=%s";
  ------------------
  |  Branch (1564:28): [True: 0, False: 0]
  ------------------
 1565|       |
 1566|      0|        if (config_file) {
  ------------------
  |  Branch (1566:13): [True: 0, False: 0]
  ------------------
 1567|      0|                if (config_line > 0)
  ------------------
  |  Branch (1567:21): [True: 0, False: 0]
  ------------------
 1568|      0|                        return log_struct_internal(
 1569|      0|                                        level,
 1570|      0|                                        error,
 1571|      0|                                        file, line, func,
 1572|      0|                                        LOG_MESSAGE_ID(SD_MESSAGE_INVALID_CONFIGURATION_STR),
  ------------------
  |  |  299|      0|#define LOG_MESSAGE_ID(id) LOG_ITEM("MESSAGE_ID=" id)
  |  |  ------------------
  |  |  |  |  295|      0|#  define LOG_ITEM(fmt, ...) fmt, ##__VA_ARGS__
  |  |  ------------------
  ------------------
 1573|      0|                                        LOG_ITEM("CONFIG_FILE=%s", config_file),
  ------------------
  |  |  295|      0|#  define LOG_ITEM(fmt, ...) fmt, ##__VA_ARGS__
  ------------------
 1574|      0|                                        LOG_ITEM("CONFIG_LINE=%u", config_line),
  ------------------
  |  |  295|      0|#  define LOG_ITEM(fmt, ...) fmt, ##__VA_ARGS__
  ------------------
 1575|      0|                                        LOG_MESSAGE("%s:%u: %s", config_file, config_line, buffer),
  ------------------
  |  |  296|      0|#  define LOG_MESSAGE(fmt, ...) "MESSAGE=" fmt, ##__VA_ARGS__
  ------------------
 1576|      0|                                        unit_fmt, unit,
 1577|      0|                                        NULL);
 1578|      0|                else
 1579|      0|                        return log_struct_internal(
 1580|      0|                                        level,
 1581|      0|                                        error,
 1582|      0|                                        file, line, func,
 1583|      0|                                        LOG_MESSAGE_ID(SD_MESSAGE_INVALID_CONFIGURATION_STR),
  ------------------
  |  |  299|      0|#define LOG_MESSAGE_ID(id) LOG_ITEM("MESSAGE_ID=" id)
  |  |  ------------------
  |  |  |  |  295|      0|#  define LOG_ITEM(fmt, ...) fmt, ##__VA_ARGS__
  |  |  ------------------
  ------------------
 1584|      0|                                        LOG_ITEM("CONFIG_FILE=%s", config_file),
  ------------------
  |  |  295|      0|#  define LOG_ITEM(fmt, ...) fmt, ##__VA_ARGS__
  ------------------
 1585|      0|                                        LOG_MESSAGE("%s: %s", config_file, buffer),
  ------------------
  |  |  296|      0|#  define LOG_MESSAGE(fmt, ...) "MESSAGE=" fmt, ##__VA_ARGS__
  ------------------
 1586|      0|                                        unit_fmt, unit,
 1587|      0|                                        NULL);
 1588|      0|        } else if (unit)
  ------------------
  |  Branch (1588:20): [True: 0, False: 0]
  ------------------
 1589|      0|                return log_struct_internal(
 1590|      0|                                level,
 1591|      0|                                error,
 1592|      0|                                file, line, func,
 1593|      0|                                LOG_MESSAGE_ID(SD_MESSAGE_INVALID_CONFIGURATION_STR),
  ------------------
  |  |  299|      0|#define LOG_MESSAGE_ID(id) LOG_ITEM("MESSAGE_ID=" id)
  |  |  ------------------
  |  |  |  |  295|      0|#  define LOG_ITEM(fmt, ...) fmt, ##__VA_ARGS__
  |  |  ------------------
  ------------------
 1594|      0|                                LOG_MESSAGE("%s: %s", unit, buffer),
  ------------------
  |  |  296|      0|#  define LOG_MESSAGE(fmt, ...) "MESSAGE=" fmt, ##__VA_ARGS__
  ------------------
 1595|      0|                                unit_fmt, unit,
 1596|      0|                                NULL);
 1597|      0|        else
 1598|      0|                return log_struct_internal(
 1599|      0|                                level,
 1600|      0|                                error,
 1601|      0|                                file, line, func,
 1602|      0|                                LOG_MESSAGE_ID(SD_MESSAGE_INVALID_CONFIGURATION_STR),
  ------------------
  |  |  299|      0|#define LOG_MESSAGE_ID(id) LOG_ITEM("MESSAGE_ID=" id)
  |  |  ------------------
  |  |  |  |  295|      0|#  define LOG_ITEM(fmt, ...) fmt, ##__VA_ARGS__
  |  |  ------------------
  ------------------
 1603|      0|                                LOG_MESSAGE("%s", buffer),
  ------------------
  |  |  296|      0|#  define LOG_MESSAGE(fmt, ...) "MESSAGE=" fmt, ##__VA_ARGS__
  ------------------
 1604|      0|                                NULL);
 1605|      0|}
log_syntax_parse_error_internal:
 1638|  15.7k|                const char *rvalue) {
 1639|       |
 1640|  15.7k|        PROTECT_ERRNO;
  ------------------
  |  |   31|  15.7k|        _cleanup_(_reset_errno_) _unused_ int _saved_errno_ = errno
  |  |  ------------------
  |  |  |  |   78|  15.7k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1641|  15.7k|        _cleanup_free_ char *escaped = NULL;
  ------------------
  |  |   82|  15.7k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  15.7k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1642|       |
 1643|       |        /* OOM is always handled as critical. */
 1644|  15.7k|        if (ERRNO_VALUE(error) == ENOMEM)
  ------------------
  |  |   36|  15.7k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  |  |  172|  15.7k|#  define ABS(a) __builtin_llabs(a)
  |  |  ------------------
  ------------------
  |  Branch (1644:13): [True: 0, False: 15.7k]
  ------------------
 1645|      0|                return log_oom_internal(LOG_ERR, file, line, func);
 1646|       |
 1647|  15.7k|        if (rvalue && !utf8_is_valid(rvalue)) {
  ------------------
  |  Branch (1647:13): [True: 15.7k, False: 0]
  |  Branch (1647:23): [True: 0, False: 15.7k]
  ------------------
 1648|      0|                escaped = utf8_escape_invalid(rvalue);
 1649|      0|                if (!escaped)
  ------------------
  |  Branch (1649:21): [True: 0, False: 0]
  ------------------
 1650|      0|                        rvalue = "(oom)";
 1651|      0|                else
 1652|      0|                        rvalue = " (escaped)";
 1653|      0|        }
 1654|       |
 1655|  15.7k|        log_syntax_internal(unit, critical ? LOG_ERR : LOG_WARNING, config_file, config_line, error,
  ------------------
  |  Branch (1655:35): [True: 0, False: 15.7k]
  ------------------
 1656|  15.7k|                            file, line, func,
 1657|  15.7k|                            "Failed to parse %s=%s%s%s%s%s",
 1658|  15.7k|                            strna(lvalue), strempty(escaped), strempty(rvalue),
 1659|  15.7k|                            critical ? "" : ", ignoring",
  ------------------
  |  Branch (1659:29): [True: 0, False: 15.7k]
  ------------------
 1660|  15.7k|                            error == 0 ? "." : ": ",
  ------------------
  |  Branch (1660:29): [True: 212, False: 15.5k]
  ------------------
 1661|  15.7k|                            error == 0 ? "" : STRERROR(error));
  ------------------
  |  |   16|  15.5k|#define STRERROR(errnum) strerror_r(ABS(errnum), (char[ERRNO_BUF_LEN]){}, ERRNO_BUF_LEN)
  |  |  ------------------
  |  |  |  |  172|  15.5k|#  define ABS(a) __builtin_llabs(a)
  |  |  ------------------
  |  |               #define STRERROR(errnum) strerror_r(ABS(errnum), (char[ERRNO_BUF_LEN]){}, ERRNO_BUF_LEN)
  |  |  ------------------
  |  |  |  |    9|  15.5k|#define ERRNO_BUF_LEN           1024
  |  |  ------------------
  ------------------
  |  Branch (1661:29): [True: 212, False: 15.5k]
  ------------------
 1662|       |
 1663|  15.7k|        return critical ? -ERRNO_VALUE(error) : 0;
  ------------------
  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  ------------------
  ------------------
  |  Branch (1663:16): [True: 0, False: 15.7k]
  ------------------
 1664|  15.7k|}
log_setup:
 1714|  13.0k|void log_setup(void) {
 1715|  13.0k|        log_set_target(LOG_TARGET_AUTO);
 1716|  13.0k|        log_parse_environment();
 1717|  13.0k|        (void) log_open();
 1718|  13.0k|        if (log_on_console() && show_color < 0)
  ------------------
  |  Branch (1718:13): [True: 13.0k, False: 0]
  |  Branch (1718:33): [True: 1, False: 13.0k]
  ------------------
 1719|      1|                log_show_color(true);
 1720|  13.0k|}
log.c:log_close_journal:
  202|  13.0k|static void log_close_journal(void) {
  203|       |        /* If the journal FD is bad, safe_close will fail, and will try to log, which will fail, so we'll
  204|       |         * try to close the journal FD, which is bad, so safe_close will fail... Whether we can close it
  205|       |         * or not, invalidate it immediately so that we don't get in a recursive loop until we run out of
  206|       |         * stack. */
  207|  13.0k|        (void) safe_close(TAKE_FD(journal_fd));
  ------------------
  |  |   99|  13.0k|#define TAKE_FD(fd) TAKE_GENERIC(fd, int, -EBADF)
  |  |  ------------------
  |  |  |  |  380|  13.0k|        ({                                                       \
  |  |  |  |  381|  13.0k|                type *_pvar_ = &(var);                           \
  |  |  |  |  382|  13.0k|                type _var_ = *_pvar_;                            \
  |  |  |  |  383|  13.0k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  384|  13.0k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  385|  13.0k|                _var_;                                           \
  |  |  |  |  386|  13.0k|        })
  |  |  ------------------
  ------------------
  208|  13.0k|}
log.c:log_close_syslog:
  136|  13.0k|static void log_close_syslog(void) {
  137|       |        /* See comment in log_close_journal() */
  138|  13.0k|        (void) safe_close(TAKE_FD(syslog_fd));
  ------------------
  |  |   99|  13.0k|#define TAKE_FD(fd) TAKE_GENERIC(fd, int, -EBADF)
  |  |  ------------------
  |  |  |  |  380|  13.0k|        ({                                                       \
  |  |  |  |  381|  13.0k|                type *_pvar_ = &(var);                           \
  |  |  |  |  382|  13.0k|                type _var_ = *_pvar_;                            \
  |  |  |  |  383|  13.0k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  384|  13.0k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  385|  13.0k|                _var_;                                           \
  |  |  |  |  386|  13.0k|        })
  |  |  ------------------
  ------------------
  139|  13.0k|}
log.c:log_open_console:
   96|  13.0k|static int log_open_console(void) {
   97|       |
   98|  13.0k|        if (!always_reopen_console) {
  ------------------
  |  Branch (98:13): [True: 13.0k, False: 0]
  ------------------
   99|  13.0k|                console_fd = STDERR_FILENO;
  100|  13.0k|                console_fd_is_tty = -1;
  101|  13.0k|                return 0;
  102|  13.0k|        }
  103|       |
  104|      0|        if (console_fd < 3) {
  ------------------
  |  Branch (104:13): [True: 0, False: 0]
  ------------------
  105|      0|                int fd;
  106|       |
  107|      0|                fd = open_terminal("/dev/console", O_WRONLY|O_NOCTTY|O_CLOEXEC);
  108|      0|                if (fd < 0)
  ------------------
  |  Branch (108:21): [True: 0, False: 0]
  ------------------
  109|      0|                        return fd;
  110|       |
  111|      0|                console_fd = fd_move_above_stdio(fd);
  112|      0|                console_fd_is_tty = true;
  113|      0|        }
  114|       |
  115|      0|        return 0;
  116|      0|}
log.c:should_parse_proc_cmdline:
 1312|  13.0k|static bool should_parse_proc_cmdline(void) {
 1313|       |        /* PID1 always reads the kernel command line. */
 1314|  13.0k|        if (getpid_cached() == 1)
  ------------------
  |  Branch (1314:13): [True: 0, False: 13.0k]
  ------------------
 1315|      0|                return true;
 1316|       |
 1317|       |        /* Otherwise, parse the command line if invoked directly by systemd. */
 1318|  13.0k|        return invoked_by_systemd();
 1319|  13.0k|}

path-util.c:ALIGN_POWER2:
   59|   241k|static inline unsigned long ALIGN_POWER2(unsigned long u) {
   60|       |
   61|       |        /* Avoid subtraction overflow */
   62|   241k|        if (u == 0)
  ------------------
  |  Branch (62:13): [True: 0, False: 241k]
  ------------------
   63|      0|                return 0;
   64|       |
   65|       |        /* clz(0) is undefined */
   66|   241k|        if (u == 1)
  ------------------
  |  Branch (66:13): [True: 0, False: 241k]
  ------------------
   67|      0|                return 1;
   68|       |
   69|       |        /* left-shift overflow is undefined */
   70|   241k|        if (__builtin_clzl(u - 1UL) < 1)
  ------------------
  |  Branch (70:13): [True: 0, False: 241k]
  ------------------
   71|      0|                return 0;
   72|       |
   73|   241k|        return 1UL << (sizeof(u) * 8 - __builtin_clzl(u - 1UL));
   74|   241k|}
string-util.c:ALIGN_POWER2:
   59|  97.8k|static inline unsigned long ALIGN_POWER2(unsigned long u) {
   60|       |
   61|       |        /* Avoid subtraction overflow */
   62|  97.8k|        if (u == 0)
  ------------------
  |  Branch (62:13): [True: 0, False: 97.8k]
  ------------------
   63|      0|                return 0;
   64|       |
   65|       |        /* clz(0) is undefined */
   66|  97.8k|        if (u == 1)
  ------------------
  |  Branch (66:13): [True: 0, False: 97.8k]
  ------------------
   67|      0|                return 1;
   68|       |
   69|       |        /* left-shift overflow is undefined */
   70|  97.8k|        if (__builtin_clzl(u - 1UL) < 1)
  ------------------
  |  Branch (70:13): [True: 0, False: 97.8k]
  ------------------
   71|      0|                return 0;
   72|       |
   73|  97.8k|        return 1UL << (sizeof(u) * 8 - __builtin_clzl(u - 1UL));
   74|  97.8k|}
strv.c:ALIGN_POWER2:
   59|  73.2k|static inline unsigned long ALIGN_POWER2(unsigned long u) {
   60|       |
   61|       |        /* Avoid subtraction overflow */
   62|  73.2k|        if (u == 0)
  ------------------
  |  Branch (62:13): [True: 0, False: 73.2k]
  ------------------
   63|      0|                return 0;
   64|       |
   65|       |        /* clz(0) is undefined */
   66|  73.2k|        if (u == 1)
  ------------------
  |  Branch (66:13): [True: 0, False: 73.2k]
  ------------------
   67|      0|                return 1;
   68|       |
   69|       |        /* left-shift overflow is undefined */
   70|  73.2k|        if (__builtin_clzl(u - 1UL) < 1)
  ------------------
  |  Branch (70:13): [True: 0, False: 73.2k]
  ------------------
   71|      0|                return 0;
   72|       |
   73|  73.2k|        return 1UL << (sizeof(u) * 8 - __builtin_clzl(u - 1UL));
   74|  73.2k|}

page_size:
    9|     74|size_t page_size(void) {
   10|     74|        static thread_local size_t pgsz = 0;
   11|     74|        long r;
   12|       |
   13|     74|        if (_likely_(pgsz > 0))
  ------------------
  |  |   83|     74|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  ------------------
  |  |  |  Branch (83:21): [True: 73, False: 1]
  |  |  ------------------
  ------------------
   14|     73|                return pgsz;
   15|       |
   16|      1|        r = sysconf(_SC_PAGESIZE);
   17|      1|        assert(r > 0);
  ------------------
  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      1|        } while (false)
  |  |  ------------------
  ------------------
   18|       |
   19|      1|        pgsz = (size_t) r;
   20|      1|        return pgsz;
   21|     74|}
memeqbyte:
   23|  11.7k|bool memeqbyte(uint8_t byte, const void *data, size_t length) {
   24|       |        /* Does the buffer consist entirely of the same specific byte value?
   25|       |         * Copied from https://github.com/systemd/casync/, copied in turn from
   26|       |         * https://github.com/rustyrussell/ccan/blob/master/ccan/mem/mem.c#L92,
   27|       |         * which is licensed CC-0.
   28|       |         */
   29|       |
   30|  11.7k|        const uint8_t *p = data;
   31|       |
   32|       |        /* Check first 16 bytes manually */
   33|   129k|        for (size_t i = 0; i < 16; i++, length--) {
  ------------------
  |  Branch (33:28): [True: 124k, False: 4.89k]
  ------------------
   34|   124k|                if (length == 0)
  ------------------
  |  Branch (34:21): [True: 0, False: 124k]
  ------------------
   35|      0|                        return true;
   36|   124k|                if (p[i] != byte)
  ------------------
  |  Branch (36:21): [True: 6.80k, False: 117k]
  ------------------
   37|  6.80k|                        return false;
   38|   124k|        }
   39|       |
   40|       |        /* Now we know first 16 bytes match, memcmp() with self.  */
   41|  4.89k|        return memcmp(data, p + 16, length) == 0;
   42|  11.7k|}
erase_and_free:
   60|  38.1k|void* erase_and_free(void *p) {
   61|  38.1k|        size_t l;
   62|       |
   63|  38.1k|        if (!p)
  ------------------
  |  Branch (63:13): [True: 32.5k, False: 5.68k]
  ------------------
   64|  32.5k|                return NULL;
   65|       |
   66|  5.68k|        l = MALLOC_SIZEOF_SAFE(p);
  ------------------
  |  |  198|  5.68k|        malloc_sizeof_safe((void**) &__builtin_choose_expr(__builtin_constant_p(x), (void*) { NULL }, (x)))
  ------------------
   67|  5.68k|        explicit_bzero_safe(p, l);
   68|  5.68k|        return mfree(p);
  ------------------
  |  |  404|  5.68k|        ({                                      \
  |  |  405|  5.68k|                free(memory);                   \
  |  |  406|  5.68k|                (typeof(memory)) NULL;          \
  |  |  407|  5.68k|        })
  ------------------
   69|  38.1k|}

macsec.c:erase_and_freep:
   98|  8.81k|static inline void erase_and_freep(void *p) {
   99|  8.81k|        erase_and_free(*(void**) p);
  100|  8.81k|}
macsec.c:memcpy_safe:
   18|  1.20k|static inline void* memcpy_safe(void *dst, const void *src, size_t n) {
   19|  1.20k|        if (n == 0)
  ------------------
  |  Branch (19:13): [True: 799, False: 403]
  ------------------
   20|    799|                return dst;
   21|    403|        assert(src);
  ------------------
  |  |   72|    403|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    403|        do {                                                            \
  |  |  |  |   59|    403|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    403|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 403]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    403|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    403|        } while (false)
  |  |  ------------------
  ------------------
   22|    403|        return memcpy(dst, src, n);
   23|  1.20k|}
wireguard.c:erase_and_freep:
   98|  29.3k|static inline void erase_and_freep(void *p) {
   99|  29.3k|        erase_and_free(*(void**) p);
  100|  29.3k|}
networkd-route-metric.c:memcmp_nn:
   53|  3.47k|static inline int memcmp_nn(const void *s1, size_t n1, const void *s2, size_t n2) {
   54|  3.47k|        return memcmp_safe(s1, s2, MIN(n1, n2))
  ------------------
  |  |  220|  3.47k|#define MIN(a, b) __MIN(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  222|  3.47k|        ({                                              \
  |  |  |  |  223|  3.47k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  224|  3.47k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  225|  3.47k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (225:17): [True: 0, False: 3.47k]
  |  |  |  |  ------------------
  |  |  |  |  226|  3.47k|        })
  |  |  ------------------
  ------------------
  |  Branch (54:16): [True: 0, False: 3.47k]
  ------------------
   55|  3.47k|            ?: CMP(n1, n2);
  ------------------
  |  |  288|  3.47k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  3.47k|        ({                                              \
  |  |  |  |  291|  3.47k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  3.47k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  3.47k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 3.47k]
  |  |  |  |  ------------------
  |  |  |  |  294|  3.47k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 3.47k]
  |  |  |  |  ------------------
  |  |  |  |  295|  3.47k|        })
  |  |  ------------------
  ------------------
   56|  3.47k|}
networkd-route-metric.c:memcmp_safe:
   44|  3.47k|static inline int memcmp_safe(const void *s1, const void *s2, size_t n) {
   45|  3.47k|        if (n == 0)
  ------------------
  |  Branch (45:13): [True: 3.47k, False: 0]
  ------------------
   46|  3.47k|                return 0;
   47|      0|        assert(s1);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
   48|      0|        assert(s2);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
   49|      0|        return memcmp(s1, s2, n);
   50|  3.47k|}
alloc-util.c:memcpy_safe:
   18|  10.1k|static inline void* memcpy_safe(void *dst, const void *src, size_t n) {
   19|  10.1k|        if (n == 0)
  ------------------
  |  Branch (19:13): [True: 0, False: 10.1k]
  ------------------
   20|      0|                return dst;
   21|  10.1k|        assert(src);
  ------------------
  |  |   72|  10.1k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  10.1k|        do {                                                            \
  |  |  |  |   59|  10.1k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  10.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 10.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  10.1k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  10.1k|        } while (false)
  |  |  ------------------
  ------------------
   22|  10.1k|        return memcpy(dst, src, n);
   23|  10.1k|}
fileio.c:memcpy_safe:
   18|  2.12k|static inline void* memcpy_safe(void *dst, const void *src, size_t n) {
   19|  2.12k|        if (n == 0)
  ------------------
  |  Branch (19:13): [True: 2.12k, False: 0]
  ------------------
   20|  2.12k|                return dst;
   21|      0|        assert(src);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
   22|      0|        return memcpy(dst, src, n);
   23|  2.12k|}
hashmap.c:mempset:
   66|  32.0k|static inline void* mempset(void *s, int c, size_t n) {
   67|  32.0k|        memset(s, c, n);
   68|  32.0k|        return (uint8_t*) s + n;
   69|  32.0k|}

mempool_alloc_tile:
   21|  16.0k|void* mempool_alloc_tile(struct mempool *mp) {
   22|  16.0k|        size_t i;
   23|       |
   24|       |        /* When a tile is released we add it to the list and simply
   25|       |         * place the next pointer at its offset 0. */
   26|       |
   27|  16.0k|        assert(mp);
  ------------------
  |  |   72|  16.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  16.0k|        do {                                                            \
  |  |  |  |   59|  16.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  16.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 16.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  16.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  16.0k|        } while (false)
  |  |  ------------------
  ------------------
   28|  16.0k|        assert(mp->tile_size >= sizeof(void*));
  ------------------
  |  |   72|  16.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  16.0k|        do {                                                            \
  |  |  |  |   59|  16.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  16.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 16.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  16.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  16.0k|        } while (false)
  |  |  ------------------
  ------------------
   29|  16.0k|        assert(mp->at_least > 0);
  ------------------
  |  |   72|  16.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  16.0k|        do {                                                            \
  |  |  |  |   59|  16.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  16.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 16.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  16.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  16.0k|        } while (false)
  |  |  ------------------
  ------------------
   30|       |
   31|  16.0k|        if (mp->freelist) {
  ------------------
  |  Branch (31:13): [True: 16.0k, False: 7]
  ------------------
   32|  16.0k|                void *t;
   33|       |
   34|  16.0k|                t = mp->freelist;
   35|  16.0k|                mp->freelist = *(void**) mp->freelist;
   36|  16.0k|                return t;
   37|  16.0k|        }
   38|       |
   39|      7|        if (_unlikely_(!mp->first_pool) ||
  ------------------
  |  |   95|     14|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:23): [True: 2, False: 5]
  |  |  ------------------
  ------------------
   40|      7|            _unlikely_(mp->first_pool->n_used >= mp->first_pool->n_tiles)) {
  ------------------
  |  |   95|      5|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:23): [True: 0, False: 5]
  |  |  ------------------
  ------------------
   41|      2|                size_t size, n;
   42|      2|                struct pool *p;
   43|       |
   44|      2|                n = mp->first_pool ? mp->first_pool->n_tiles : 0;
  ------------------
  |  Branch (44:21): [True: 0, False: 2]
  ------------------
   45|      2|                n = MAX(mp->at_least, n * 2);
  ------------------
  |  |  163|      2|#define MAX(a, b) __MAX(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  165|      2|        ({                                              \
  |  |  |  |  166|      2|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  167|      2|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  168|      2|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      2|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      2|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      2|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      2|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      2|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      2|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      2|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      2|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      2|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      2|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      2|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      2|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (168:17): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  169|      2|        })
  |  |  ------------------
  ------------------
   46|      2|                size = PAGE_ALIGN(ALIGN(sizeof(struct pool)) + n*mp->tile_size);
  ------------------
  |  |   10|      2|#define PAGE_ALIGN(l)          ALIGN_TO(l, page_size())
  ------------------
   47|      2|                n = (size - ALIGN(sizeof(struct pool))) / mp->tile_size;
  ------------------
  |  |  124|      2|#define ALIGN(l)  ALIGN_TO(l, sizeof(void*))
  ------------------
   48|       |
   49|      2|                p = malloc(size);
   50|      2|                if (!p)
  ------------------
  |  Branch (50:21): [True: 0, False: 2]
  ------------------
   51|      0|                        return NULL;
   52|       |
   53|      2|                p->next = mp->first_pool;
   54|      2|                p->n_tiles = n;
   55|      2|                p->n_used = 0;
   56|       |
   57|      2|                mp->first_pool = p;
   58|      2|        }
   59|       |
   60|      7|        i = mp->first_pool->n_used++;
   61|       |
   62|      7|        return (uint8_t*) pool_ptr(mp->first_pool) + i*mp->tile_size;
   63|      7|}
mempool_alloc0_tile:
   65|  16.0k|void* mempool_alloc0_tile(struct mempool *mp) {
   66|  16.0k|        void *p;
   67|       |
   68|  16.0k|        p = mempool_alloc_tile(mp);
   69|  16.0k|        if (p)
  ------------------
  |  Branch (69:13): [True: 16.0k, False: 0]
  ------------------
   70|  16.0k|                memzero(p, mp->tile_size);
  ------------------
  |  |   17|  16.0k|        ({                                                      \
  |  |   18|  16.0k|                size_t _l_ = (l);                               \
  |  |   19|  16.0k|                _l_ > 0 ? memset((x), 0, _l_) : (x);            \
  |  |  ------------------
  |  |  |  Branch (19:17): [True: 16.0k, False: 0]
  |  |  ------------------
  |  |   20|  16.0k|        })
  ------------------
   71|  16.0k|        return p;
   72|  16.0k|}
mempool_free_tile:
   74|  16.0k|void* mempool_free_tile(struct mempool *mp, void *p) {
   75|  16.0k|        assert(mp);
  ------------------
  |  |   72|  16.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  16.0k|        do {                                                            \
  |  |  |  |   59|  16.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  16.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 16.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  16.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  16.0k|        } while (false)
  |  |  ------------------
  ------------------
   76|       |
   77|  16.0k|        if (!p)
  ------------------
  |  Branch (77:13): [True: 0, False: 16.0k]
  ------------------
   78|      0|                return NULL;
   79|       |
   80|  16.0k|        *(void**) p = mp->freelist;
   81|  16.0k|        mp->freelist = p;
   82|       |
   83|  16.0k|        return NULL;
   84|  16.0k|}
mempool.c:pool_ptr:
   17|      7|static void* pool_ptr(struct pool *p) {
   18|      7|        return ((uint8_t*) ASSERT_PTR(p)) + ALIGN(sizeof(struct pool));
  ------------------
  |  |   81|      7|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|      7|        ({                                 \
  |  |  |  |   85|      7|                typeof(expr) var = (expr); \
  |  |  |  |   86|      7|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|      7|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      7|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      7|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      7|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      7|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 7]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      7|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      7|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|      7|                var;                       \
  |  |  |  |   88|      7|        })
  |  |  ------------------
  ------------------
                      return ((uint8_t*) ASSERT_PTR(p)) + ALIGN(sizeof(struct pool));
  ------------------
  |  |  124|      7|#define ALIGN(l)  ALIGN_TO(l, sizeof(void*))
  ------------------
   19|      7|}

path_below_api_vfs:
  810|  9.65k|bool path_below_api_vfs(const char *p) {
  811|  9.65k|        assert(p);
  812|       |
  813|       |        /* API VFS are either directly mounted on any of these three paths, or below it. */
  814|  9.65k|        return PATH_STARTSWITH_SET(p, "/dev", "/sys", "/proc");
  ------------------
  |  |   89|  9.65k|#define PATH_STARTSWITH_SET(p, ...) path_startswith_strv(p, STRV_MAKE(__VA_ARGS__))
  ------------------
  815|  9.65k|}

namespace_is_init:
  305|      1|int namespace_is_init(NamespaceType type) {
  306|      1|        int r;
  307|       |
  308|      1|        assert(type >= 0);
  309|      1|        assert(type < _NAMESPACE_TYPE_MAX);
  310|       |
  311|      1|        if (namespace_info[type].root_inode == 0)
  ------------------
  |  Branch (311:13): [True: 0, False: 1]
  ------------------
  312|      0|                return -EBADR; /* Cannot answer this question */
  313|       |
  314|      1|        const char *p = pid_namespace_path(0, type);
  ------------------
  |  |   40|      1|#define pid_namespace_path(pid, type) procfs_file_alloca(pid, namespace_info[type].proc_path)
  |  |  ------------------
  |  |  |  |   12|      1|        ({                                                              \
  |  |  |  |   13|      1|                pid_t _pid_ = (pid);                                    \
  |  |  |  |   14|      1|                const char *_field_ = (field);                          \
  |  |  |  |   15|      1|                char *_r_;                                              \
  |  |  |  |   16|      1|                if (_pid_ == 0)                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (16:21): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   17|      1|                        _r_ = strjoina("/proc/self/", _field_);         \
  |  |  |  |  ------------------
  |  |  |  |  |  |   94|      1|        ({                                                              \
  |  |  |  |  |  |   95|      1|                const char *_appendees_[] = { a, __VA_ARGS__ };         \
  |  |  |  |  |  |   96|      1|                char *_d_, *_p_;                                        \
  |  |  |  |  |  |   97|      1|                size_t _len_ = 0;                                       \
  |  |  |  |  |  |   98|      1|                size_t _i_;                                             \
  |  |  |  |  |  |   99|      3|                for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (99:31): [True: 2, False: 1]
  |  |  |  |  |  |  |  Branch (99:64): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  100|      2|                        _len_ += strlen(_appendees_[_i_]);              \
  |  |  |  |  |  |  101|      1|                _p_ = _d_ = newa(char, _len_ + 1);                      \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   29|      1|        ({                                                              \
  |  |  |  |  |  |  |  |   30|      1|                size_t _n_ = (n);                                       \
  |  |  |  |  |  |  |  |   31|      1|                assert_se(MUL_ASSIGN_SAFE(&_n_, sizeof(t)));            \
  |  |  |  |  |  |  |  |   32|      1|                (t*) alloca_safe(_n_);                                  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   22|      1|        ({                                                              \
  |  |  |  |  |  |  |  |  |  |   23|      1|                size_t _nn_ = (n);                                      \
  |  |  |  |  |  |  |  |  |  |   24|      1|                assert(_nn_ <= ALLOCA_MAX);                             \
  |  |  |  |  |  |  |  |  |  |   25|      1|                alloca(_nn_ == 0 ? 1 : _nn_);                           \
  |  |  |  |  |  |  |  |  |  |   26|      1|        })                                                              \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   33|      1|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  102|      3|                for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (102:31): [True: 2, False: 1]
  |  |  |  |  |  |  |  Branch (102:64): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  103|      2|                        _p_ = stpcpy(_p_, _appendees_[_i_]);            \
  |  |  |  |  |  |  104|      1|                *_p_ = 0;                                               \
  |  |  |  |  |  |  105|      1|                _d_;                                                    \
  |  |  |  |  |  |  106|      1|        })
  |  |  |  |  ------------------
  |  |  |  |   18|      1|                else {                                                  \
  |  |  |  |   19|      0|                        assert(_pid_ > 0);                              \
  |  |  |  |   20|      0|                        _r_ = newa(char, STRLEN("/proc/") + DECIMAL_STR_MAX(pid_t) + 1 + strlen(_field_) + 1); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|      0|        ({                                                              \
  |  |  |  |  |  |   30|      0|                size_t _n_ = (n);                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   31|      0|                assert_se(MUL_ASSIGN_SAFE(&_n_, sizeof(t)));            \
  |  |  |  |  |  |   32|      0|                (t*) alloca_safe(_n_);                                  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   22|      0|        ({                                                              \
  |  |  |  |  |  |  |  |   23|      0|                size_t _nn_ = (n);                                      \
  |  |  |  |  |  |  |  |   24|      0|                assert(_nn_ <= ALLOCA_MAX);                             \
  |  |  |  |  |  |  |  |   25|      0|                alloca(_nn_ == 0 ? 1 : _nn_);                           \
  |  |  |  |  |  |  |  |   26|      0|        })                                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|        })
  |  |  |  |  ------------------
  |  |  |  |   21|      0|                        sprintf(_r_, "/proc/" PID_FMT "/%s", _pid_, _field_); \
  |  |  |  |   22|      0|                }                                                       \
  |  |  |  |   23|      1|                (const char*) _r_;                                      \
  |  |  |  |   24|      1|        })
  |  |  ------------------
  ------------------
  315|       |
  316|      1|        struct stat st;
  317|      1|        r = RET_NERRNO(stat(p, &st));
  318|      1|        if (r == -ENOENT) {
  ------------------
  |  Branch (318:13): [True: 0, False: 1]
  ------------------
  319|       |                /* If the /proc/ns/<type> API is not around in /proc/ then ns is off in the kernel and we are in the init ns */
  320|      0|                r = proc_mounted();
  321|      0|                if (r < 0)
  ------------------
  |  Branch (321:21): [True: 0, False: 0]
  ------------------
  322|      0|                        return -ENOENT; /* If we can't determine if /proc/ is mounted propagate original error */
  323|       |
  324|      0|                return r ? true : -ENOSYS;
  ------------------
  |  Branch (324:24): [True: 0, False: 0]
  ------------------
  325|      0|        }
  326|      1|        if (r < 0)
  ------------------
  |  Branch (326:13): [True: 0, False: 1]
  ------------------
  327|      0|                return r;
  328|       |
  329|      1|        return st.st_ino == namespace_info[type].root_inode;
  330|      1|}

nulstr_get:
    9|   220k|const char* nulstr_get(const char *nulstr, const char *needle) {
   10|   220k|        if (!nulstr)
  ------------------
  |  Branch (10:13): [True: 0, False: 220k]
  ------------------
   11|      0|                return NULL;
   12|       |
   13|   220k|        NULSTR_FOREACH(i, nulstr)
  ------------------
  |  |    9|  3.63M|        for (typeof(*(l)) *(i) = (l); (i) && *(i); (i) = strchr((i), 0)+1)
  |  |  ------------------
  |  |  |  Branch (9:39): [True: 3.63M, False: 0]
  |  |  |  Branch (9:46): [True: 3.53M, False: 102k]
  |  |  ------------------
  ------------------
   14|  3.53M|                if (streq(i, needle))
  ------------------
  |  |   46|  3.53M|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 118k, False: 3.41M]
  |  |  ------------------
  ------------------
   15|   118k|                        return i;
   16|       |
   17|   102k|        return NULL;
   18|   220k|}
strv_parse_nulstr_full:
   20|     72|char** strv_parse_nulstr_full(const char *s, size_t l, bool drop_trailing_nuls) {
   21|     72|        _cleanup_strv_free_ char **v = NULL;
  ------------------
  |  |   21|     72|#define _cleanup_strv_free_ _cleanup_(strv_freep)
  |  |  ------------------
  |  |  |  |   78|     72|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
   22|     72|        size_t c = 0, i = 0;
   23|       |
   24|       |        /* l is the length of the input data, which will be split at NULs into elements of the resulting
   25|       |         * strv. Hence, the number of items in the resulting strv will be equal to one plus the number of NUL
   26|       |         * bytes in the l bytes starting at s, unless s[l-1] is NUL, in which case the final empty string is
   27|       |         * not stored in the resulting strv, and length is equal to the number of NUL bytes.
   28|       |         *
   29|       |         * Note that contrary to a normal nulstr which cannot contain empty strings, because the input data
   30|       |         * is terminated by any two consequent NUL bytes, this parser accepts empty strings in s. */
   31|       |
   32|     72|        assert(s || l <= 0);
  ------------------
  |  |   72|     72|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     72|        do {                                                            \
  |  |  |  |   59|     72|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     72|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 72]
  |  |  |  |  |  |  |  Branch (95:44): [True: 72, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     72|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     72|        } while (false)
  |  |  ------------------
  ------------------
   33|       |
   34|     72|        if (drop_trailing_nuls)
  ------------------
  |  Branch (34:13): [True: 72, False: 0]
  ------------------
   35|    144|                while (l > 0 && s[l-1] == '\0')
  ------------------
  |  Branch (35:24): [True: 144, False: 0]
  |  Branch (35:33): [True: 72, False: 72]
  ------------------
   36|     72|                        l--;
   37|       |
   38|     72|        if (l <= 0)
  ------------------
  |  Branch (38:13): [True: 0, False: 72]
  ------------------
   39|     72|                return new0(char*, 1);
  ------------------
  |  |   19|      0|#define new0(t, n) ((t*) calloc((n) ?: 1, sizeof(t)))
  |  |  ------------------
  |  |  |  Branch (19:33): [Folded - Ignored]
  |  |  ------------------
  ------------------
   40|       |
   41|  59.6k|        for (const char *p = s; p < s + l; p++)
  ------------------
  |  Branch (41:33): [True: 59.5k, False: 72]
  ------------------
   42|  59.5k|                if (*p == 0)
  ------------------
  |  Branch (42:21): [True: 144, False: 59.4k]
  ------------------
   43|    144|                        c++;
   44|       |
   45|     72|        if (s[l-1] != 0)
  ------------------
  |  Branch (45:13): [True: 72, False: 0]
  ------------------
   46|     72|                c++;
   47|       |
   48|     72|        v = new0(char*, c+1);
  ------------------
  |  |   19|     72|#define new0(t, n) ((t*) calloc((n) ?: 1, sizeof(t)))
  |  |  ------------------
  |  |  |  Branch (19:33): [True: 72, False: 0]
  |  |  ------------------
  ------------------
   49|      0|        if (!v)
  ------------------
  |  Branch (49:13): [True: 0, False: 0]
  ------------------
   50|      0|                return NULL;
   51|       |
   52|    216|        for (const char *p = s; p < s + l;) {
  ------------------
  |  Branch (52:33): [True: 216, False: 18.4E]
  ------------------
   53|    216|                const char *e;
   54|       |
   55|    216|                e = memchr(p, 0, s + l - p);
   56|       |
   57|    216|                v[i] = memdup_suffix0(p, e ? e - p : s + l - p);
  ------------------
  |  Branch (57:42): [True: 144, False: 72]
  ------------------
   58|    216|                if (!v[i])
  ------------------
  |  Branch (58:21): [True: 0, False: 216]
  ------------------
   59|      0|                        return NULL;
   60|    216|                i++;
   61|       |
   62|    216|                if (!e)
  ------------------
  |  Branch (62:21): [True: 72, False: 144]
  ------------------
   63|     72|                        break;
   64|       |
   65|    144|                p = e + 1;
   66|    144|        }
   67|       |
   68|      0|        assert(i == c);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
   69|       |
   70|      0|        return TAKE_PTR(v);
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   71|      0|}
strv_split_nulstr:
   73|    788|char** strv_split_nulstr(const char *s) {
   74|    788|        _cleanup_strv_free_ char **l = NULL;
  ------------------
  |  |   21|    788|#define _cleanup_strv_free_ _cleanup_(strv_freep)
  |  |  ------------------
  |  |  |  |   78|    788|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
   75|       |
   76|       |        /* This parses a nulstr, without specification of size, and stops at an empty string. This cannot
   77|       |         * parse nulstrs with embedded empty strings hence, as an empty string is an end marker. Use
   78|       |         * strv_parse_nulstr() above to parse a nulstr with embedded empty strings (which however requires a
   79|       |         * size to be specified) */
   80|       |
   81|    788|        NULSTR_FOREACH(i, s)
  ------------------
  |  |    9|  4.72k|        for (typeof(*(l)) *(i) = (l); (i) && *(i); (i) = strchr((i), 0)+1)
  |  |  ------------------
  |  |  |  Branch (9:39): [True: 4.72k, False: 0]
  |  |  |  Branch (9:46): [True: 3.94k, False: 788]
  |  |  ------------------
  ------------------
   82|  3.94k|                if (strv_extend(&l, i) < 0)
  ------------------
  |  Branch (82:21): [True: 0, False: 3.94k]
  ------------------
   83|      0|                        return NULL;
   84|       |
   85|    788|        return l ? TAKE_PTR(l) : strv_new(NULL);
  ------------------
  |  |  388|    788|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|    788|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|    788|        ({                                                       \
  |  |  |  |  |  |  381|    788|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|    788|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|    788|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|    788|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|    788|                _var_;                                           \
  |  |  |  |  |  |  386|    788|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      return l ? TAKE_PTR(l) : strv_new(NULL);
  ------------------
  |  |   94|      0|#define strv_new(...) strv_new_internal(__VA_ARGS__, NULL)
  ------------------
  |  Branch (85:16): [True: 788, False: 0]
  ------------------
   86|    788|}

conf-parser.c:nulstr_contains:
   15|   220k|static inline bool nulstr_contains(const char *nulstr, const char *needle) {
   16|   220k|        return nulstr_get(nulstr, needle);
   17|   220k|}

ordered_set_ensure_allocated:
   11|  3.13k|int ordered_set_ensure_allocated(OrderedSet **s, const struct hash_ops *ops) {
   12|  3.13k|        if (*s)
  ------------------
  |  Branch (12:13): [True: 2.69k, False: 441]
  ------------------
   13|  2.69k|                return 0;
   14|       |
   15|    441|        *s = ordered_set_new(ops);
   16|    441|        if (!*s)
  ------------------
  |  Branch (16:13): [True: 0, False: 441]
  ------------------
   17|      0|                return -ENOMEM;
   18|       |
   19|    441|        return 0;
   20|    441|}
ordered_set_ensure_put:
   22|  3.13k|int ordered_set_ensure_put(OrderedSet **s, const struct hash_ops *ops, void *p) {
   23|  3.13k|        int r;
   24|       |
   25|  3.13k|        r = ordered_set_ensure_allocated(s, ops);
   26|  3.13k|        if (r < 0)
  ------------------
  |  Branch (26:13): [True: 0, False: 3.13k]
  ------------------
   27|      0|                return r;
   28|       |
   29|  3.13k|        return ordered_set_put(*s, p);
   30|  3.13k|}

bond.c:ordered_set_free:
   21|  1.27k|static inline OrderedSet* ordered_set_free(OrderedSet *s) {
   22|  1.27k|        return (OrderedSet*) ordered_hashmap_free((OrderedHashmap*) s);
   23|  1.27k|}
bond.c:ordered_set_size:
   37|  3.33k|static inline unsigned ordered_set_size(OrderedSet *s) {
   38|  3.33k|        return ordered_hashmap_size((OrderedHashmap*) s);
   39|  3.33k|}
networkd-manager.c:ordered_set_free:
   21|  39.2k|static inline OrderedSet* ordered_set_free(OrderedSet *s) {
   22|  39.2k|        return (OrderedSet*) ordered_hashmap_free((OrderedHashmap*) s);
   23|  39.2k|}
networkd-route.c:ordered_set_isempty:
   41|  6.69k|static inline bool ordered_set_isempty(OrderedSet *s) {
   42|  6.69k|        return ordered_hashmap_isempty((OrderedHashmap*) s);
   43|  6.69k|}
networkd-route-nexthop.c:ordered_set_free:
   21|  20.2k|static inline OrderedSet* ordered_set_free(OrderedSet *s) {
   22|  20.2k|        return (OrderedSet*) ordered_hashmap_free((OrderedHashmap*) s);
   23|  20.2k|}
networkd-route-nexthop.c:ordered_set_iterate:
   45|  13.5k|static inline bool ordered_set_iterate(OrderedSet *s, Iterator *i, void **value) {
   46|  13.5k|        return ordered_hashmap_iterate((OrderedHashmap*) s, i, value, NULL);
   47|  13.5k|}
networkd-route-nexthop.c:ordered_set_isempty:
   41|  61.1k|static inline bool ordered_set_isempty(OrderedSet *s) {
   42|  61.1k|        return ordered_hashmap_isempty((OrderedHashmap*) s);
   43|  61.1k|}
networkd-route-nexthop.c:ordered_set_size:
   37|  20.2k|static inline unsigned ordered_set_size(OrderedSet *s) {
   38|  20.2k|        return ordered_hashmap_size((OrderedHashmap*) s);
   39|  20.2k|}
ordered-set.c:ordered_set_new:
    9|    441|static inline OrderedSet* ordered_set_new(const struct hash_ops *ops) {
   10|    441|        return (OrderedSet*) ordered_hashmap_new(ops);
   11|    441|}
ordered-set.c:ordered_set_put:
   29|  3.13k|static inline int ordered_set_put(OrderedSet *s, void *p) {
   30|  3.13k|        return ordered_hashmap_put((OrderedHashmap*) s, p, p);
   31|  3.13k|}

parse_boolean:
   20|  7.30k|int parse_boolean(const char *v) {
   21|  7.30k|        if (!v)
  ------------------
  |  Branch (21:13): [True: 0, False: 7.30k]
  ------------------
   22|      0|                return -EINVAL;
   23|       |
   24|  7.30k|        if (STRCASE_IN_SET(v,
  ------------------
  |  |  170|  7.30k|#define STRCASE_IN_SET(x, ...) strv_contains_case(STRV_MAKE(__VA_ARGS__), x)
  |  |  ------------------
  |  |  |  |   17|  7.30k|#define strv_contains_case(l, s) (!!strv_find_case((l), (s)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (17:34): [True: 1.06k, False: 6.24k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   25|  7.30k|                           "1",
   26|  7.30k|                           "yes",
   27|  7.30k|                           "y",
   28|  7.30k|                           "true",
   29|  7.30k|                           "t",
   30|  7.30k|                           "on"))
   31|  1.06k|                return 1;
   32|       |
   33|  6.24k|        if (STRCASE_IN_SET(v,
  ------------------
  |  |  170|  6.24k|#define STRCASE_IN_SET(x, ...) strv_contains_case(STRV_MAKE(__VA_ARGS__), x)
  |  |  ------------------
  |  |  |  |   17|  6.24k|#define strv_contains_case(l, s) (!!strv_find_case((l), (s)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (17:34): [True: 1.39k, False: 4.85k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   34|  6.24k|                           "0",
   35|  6.24k|                           "no",
   36|  6.24k|                           "n",
   37|  6.24k|                           "false",
   38|  6.24k|                           "f",
   39|  6.24k|                           "off"))
   40|  1.39k|                return 0;
   41|       |
   42|  4.85k|        return -EINVAL;
   43|  6.24k|}
parse_tristate_full:
   45|  2.06k|int parse_tristate_full(const char *v, const char *third, int *ret) {
   46|  2.06k|        int r;
   47|       |
   48|  2.06k|        if (isempty(v) || streq_ptr(v, third)) { /* Empty string is always taken as the third/invalid/auto state */
  ------------------
  |  Branch (48:13): [True: 344, False: 1.71k]
  |  Branch (48:27): [True: 0, False: 1.71k]
  ------------------
   49|    344|                if (ret)
  ------------------
  |  Branch (49:21): [True: 344, False: 0]
  ------------------
   50|    344|                        *ret = -1;
   51|  1.71k|        } else {
   52|  1.71k|                r = parse_boolean(v);
   53|  1.71k|                if (r < 0)
  ------------------
  |  Branch (53:21): [True: 909, False: 807]
  ------------------
   54|    909|                        return r;
   55|       |
   56|    807|                if (ret)
  ------------------
  |  Branch (56:21): [True: 807, False: 0]
  ------------------
   57|    807|                        *ret = r;
   58|    807|        }
   59|       |
   60|  1.15k|        return 0;
   61|  2.06k|}
parse_ifindex:
  109|  37.1k|int parse_ifindex(const char *s) {
  110|  37.1k|        int ifi, r;
  111|       |
  112|  37.1k|        assert(s);
  ------------------
  |  |   72|  37.1k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  37.1k|        do {                                                            \
  |  |  |  |   59|  37.1k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  37.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 37.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  37.1k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  37.1k|        } while (false)
  |  |  ------------------
  ------------------
  113|       |
  114|  37.1k|        r = safe_atoi(s, &ifi);
  115|  37.1k|        if (r < 0)
  ------------------
  |  Branch (115:13): [True: 36.5k, False: 630]
  ------------------
  116|  36.5k|                return r;
  117|    630|        if (ifi <= 0)
  ------------------
  |  Branch (117:13): [True: 287, False: 343]
  ------------------
  118|    287|                return -EINVAL;
  119|       |
  120|    343|        return ifi;
  121|    630|}
parse_mtu:
  123|  2.75k|int parse_mtu(int family, const char *s, uint32_t *ret) {
  124|  2.75k|        uint64_t u, m;
  125|  2.75k|        int r;
  126|       |
  127|  2.75k|        r = parse_size(s, 1024, &u);
  128|  2.75k|        if (r < 0)
  ------------------
  |  Branch (128:13): [True: 1.97k, False: 779]
  ------------------
  129|  1.97k|                return r;
  130|       |
  131|    779|        if (u > UINT32_MAX)
  ------------------
  |  Branch (131:13): [True: 319, False: 460]
  ------------------
  132|    319|                return -ERANGE;
  133|       |
  134|    460|        switch (family) {
  135|      0|        case AF_INET:
  ------------------
  |  Branch (135:9): [True: 0, False: 460]
  ------------------
  136|      0|                m = IPV4_MIN_MTU; /* This is 68 */
  ------------------
  |  |   13|      0|#define IPV4_MIN_MTU 68
  ------------------
  137|      0|                break;
  138|      0|        case AF_INET6:
  ------------------
  |  Branch (138:9): [True: 0, False: 460]
  ------------------
  139|      0|                m = IPV6_MIN_MTU; /* This is 1280 */
  140|      0|                break;
  141|    460|        default:
  ------------------
  |  Branch (141:9): [True: 460, False: 0]
  ------------------
  142|    460|                m = 0;
  143|    460|        }
  144|       |
  145|    460|        if (u < m)
  ------------------
  |  Branch (145:13): [True: 0, False: 460]
  ------------------
  146|      0|                return -ERANGE;
  147|       |
  148|    460|        *ret = (uint32_t) u;
  149|    460|        return 0;
  150|    460|}
parse_size:
  152|  3.42k|int parse_size(const char *t, uint64_t base, uint64_t *size) {
  153|       |
  154|       |        /* Soo, sometimes we want to parse IEC binary suffixes, and
  155|       |         * sometimes SI decimal suffixes. This function can parse
  156|       |         * both. Which one is the right way depends on the
  157|       |         * context. Wikipedia suggests that SI is customary for
  158|       |         * hardware metrics and network speeds, while IEC is
  159|       |         * customary for most data sizes used by software and volatile
  160|       |         * (RAM) memory. Hence be careful which one you pick!
  161|       |         *
  162|       |         * In either case we use just K, M, G as suffix, and not Ki,
  163|       |         * Mi, Gi or so (as IEC would suggest). That's because that's
  164|       |         * frickin' ugly. But this means you really need to make sure
  165|       |         * to document which base you are parsing when you use this
  166|       |         * call. */
  167|       |
  168|  3.42k|        struct table {
  169|  3.42k|                const char *suffix;
  170|  3.42k|                unsigned long long factor;
  171|  3.42k|        };
  172|       |
  173|  3.42k|        static const struct table iec[] = {
  174|  3.42k|                { "E", 1024ULL*1024ULL*1024ULL*1024ULL*1024ULL*1024ULL },
  175|  3.42k|                { "P", 1024ULL*1024ULL*1024ULL*1024ULL*1024ULL },
  176|  3.42k|                { "T", 1024ULL*1024ULL*1024ULL*1024ULL },
  177|  3.42k|                { "G", 1024ULL*1024ULL*1024ULL },
  178|  3.42k|                { "M", 1024ULL*1024ULL },
  179|  3.42k|                { "K", 1024ULL },
  180|  3.42k|                { "B", 1ULL },
  181|  3.42k|                { "",  1ULL },
  182|  3.42k|        };
  183|       |
  184|  3.42k|        static const struct table si[] = {
  185|  3.42k|                { "E", 1000ULL*1000ULL*1000ULL*1000ULL*1000ULL*1000ULL },
  186|  3.42k|                { "P", 1000ULL*1000ULL*1000ULL*1000ULL*1000ULL },
  187|  3.42k|                { "T", 1000ULL*1000ULL*1000ULL*1000ULL },
  188|  3.42k|                { "G", 1000ULL*1000ULL*1000ULL },
  189|  3.42k|                { "M", 1000ULL*1000ULL },
  190|  3.42k|                { "K", 1000ULL },
  191|  3.42k|                { "B", 1ULL },
  192|  3.42k|                { "",  1ULL },
  193|  3.42k|        };
  194|       |
  195|  3.42k|        const struct table *table;
  196|  3.42k|        const char *p;
  197|  3.42k|        unsigned long long r = 0;
  198|  3.42k|        unsigned n_entries, start_pos = 0;
  199|       |
  200|  3.42k|        assert(t);
  ------------------
  |  |   72|  3.42k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.42k|        do {                                                            \
  |  |  |  |   59|  3.42k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.42k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.42k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.42k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.42k|        } while (false)
  |  |  ------------------
  ------------------
  201|  3.42k|        assert(IN_SET(base, 1000, 1024));
  ------------------
  |  |   72|  3.42k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.42k|        do {                                                            \
  |  |  |  |   59|  3.42k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.42k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.42k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 3.42k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 2.75k, False: 674]
  |  |  |  |  |  |  |  Branch (95:44): [True: 674, False: 2.75k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.42k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.42k|        } while (false)
  |  |  ------------------
  ------------------
  202|  3.42k|        assert(size);
  ------------------
  |  |   72|  3.42k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.42k|        do {                                                            \
  |  |  |  |   59|  3.42k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.42k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.42k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.42k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.42k|        } while (false)
  |  |  ------------------
  ------------------
  203|       |
  204|  3.42k|        if (base == 1000) {
  ------------------
  |  Branch (204:13): [True: 674, False: 2.75k]
  ------------------
  205|    674|                table = si;
  206|    674|                n_entries = ELEMENTSOF(si);
  ------------------
  |  |  134|    674|        (__builtin_choose_expr(                                         \
  |  |  135|    674|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    674|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    674|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    674|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
  207|  2.75k|        } else {
  208|  2.75k|                table = iec;
  209|  2.75k|                n_entries = ELEMENTSOF(iec);
  ------------------
  |  |  134|  2.75k|        (__builtin_choose_expr(                                         \
  |  |  135|  2.75k|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|  2.75k|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|  2.75k|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|  2.75k|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
  210|  2.75k|        }
  211|       |
  212|  3.42k|        p = t;
  213|  4.90k|        do {
  214|  4.90k|                unsigned long long l, tmp;
  215|  4.90k|                double frac = 0;
  216|  4.90k|                char *e;
  217|  4.90k|                unsigned i;
  218|       |
  219|  4.90k|                p += strspn(p, WHITESPACE);
  ------------------
  |  |   15|  4.90k|#define WHITESPACE          " \t\n\r"
  ------------------
  220|       |
  221|  4.90k|                errno = 0;
  222|  4.90k|                l = strtoull(p, &e, 10);
  223|  4.90k|                if (errno > 0)
  ------------------
  |  Branch (223:21): [True: 194, False: 4.70k]
  ------------------
  224|    194|                        return -errno;
  225|  4.70k|                if (e == p)
  ------------------
  |  Branch (225:21): [True: 519, False: 4.18k]
  ------------------
  226|    519|                        return -EINVAL;
  227|  4.18k|                if (*p == '-')
  ------------------
  |  Branch (227:21): [True: 221, False: 3.96k]
  ------------------
  228|    221|                        return -ERANGE;
  229|       |
  230|  3.96k|                if (*e == '.') {
  ------------------
  |  Branch (230:21): [True: 1.02k, False: 2.93k]
  ------------------
  231|  1.02k|                        e++;
  232|       |
  233|       |                        /* strtoull() itself would accept space/+/- */
  234|  1.02k|                        if (ascii_isdigit(*e)) {
  ------------------
  |  Branch (234:29): [True: 687, False: 341]
  ------------------
  235|    687|                                unsigned long long l2;
  236|    687|                                char *e2;
  237|       |
  238|    687|                                l2 = strtoull(e, &e2, 10);
  239|    687|                                if (errno > 0)
  ------------------
  |  Branch (239:37): [True: 196, False: 491]
  ------------------
  240|    196|                                        return -errno;
  241|       |
  242|       |                                /* Ignore failure. E.g. 10.M is valid */
  243|    491|                                frac = l2;
  244|  1.38k|                                for (; e < e2; e++)
  ------------------
  |  Branch (244:40): [True: 897, False: 491]
  ------------------
  245|    897|                                        frac /= 10;
  246|    491|                        }
  247|  1.02k|                }
  248|       |
  249|  3.77k|                e += strspn(e, WHITESPACE);
  ------------------
  |  |   15|  3.77k|#define WHITESPACE          " \t\n\r"
  ------------------
  250|       |
  251|  17.0k|                for (i = start_pos; i < n_entries; i++)
  ------------------
  |  Branch (251:37): [True: 16.4k, False: 597]
  ------------------
  252|  16.4k|                        if (startswith(e, table[i].suffix))
  ------------------
  |  Branch (252:29): [True: 3.17k, False: 13.3k]
  ------------------
  253|  3.17k|                                break;
  254|       |
  255|  3.77k|                if (i >= n_entries)
  ------------------
  |  Branch (255:21): [True: 597, False: 3.17k]
  ------------------
  256|    597|                        return -EINVAL;
  257|       |
  258|  3.17k|                if (l + (frac > 0) > ULLONG_MAX / table[i].factor)
  ------------------
  |  Branch (258:21): [True: 194, False: 2.98k]
  ------------------
  259|    194|                        return -ERANGE;
  260|       |
  261|  2.98k|                tmp = l * table[i].factor + (unsigned long long) (frac * table[i].factor);
  262|  2.98k|                if (tmp > ULLONG_MAX - r)
  ------------------
  |  Branch (262:21): [True: 263, False: 2.71k]
  ------------------
  263|    263|                        return -ERANGE;
  264|       |
  265|  2.71k|                r += tmp;
  266|  2.71k|                if ((unsigned long long) (uint64_t) r != r)
  ------------------
  |  Branch (266:21): [True: 0, False: 2.71k]
  ------------------
  267|      0|                        return -ERANGE;
  268|       |
  269|  2.71k|                p = e + strlen(table[i].suffix);
  270|       |
  271|  2.71k|                start_pos = i + 1;
  272|       |
  273|  2.71k|        } while (*p);
  ------------------
  |  Branch (273:18): [True: 1.47k, False: 1.24k]
  ------------------
  274|       |
  275|  1.24k|        *size = r;
  276|       |
  277|  1.24k|        return 0;
  278|  3.42k|}
parse_range:
  300|  29.0k|int parse_range(const char *t, unsigned *lower, unsigned *upper) {
  301|  29.0k|        _cleanup_free_ char *word = NULL;
  ------------------
  |  |   82|  29.0k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  29.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  302|  29.0k|        unsigned l, u;
  303|  29.0k|        int r;
  304|       |
  305|  29.0k|        assert(lower);
  ------------------
  |  |   72|  29.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  29.0k|        do {                                                            \
  |  |  |  |   59|  29.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  29.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 29.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  29.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  29.0k|        } while (false)
  |  |  ------------------
  ------------------
  306|  29.0k|        assert(upper);
  ------------------
  |  |   72|  29.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  29.0k|        do {                                                            \
  |  |  |  |   59|  29.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  29.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 29.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  29.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  29.0k|        } while (false)
  |  |  ------------------
  ------------------
  307|       |
  308|       |        /* Extract the lower bound. */
  309|  29.0k|        r = extract_first_word(&t, &word, "-", EXTRACT_DONT_COALESCE_SEPARATORS);
  310|  29.0k|        if (r < 0)
  ------------------
  |  Branch (310:13): [True: 387, False: 28.6k]
  ------------------
  311|    387|                return r;
  312|  28.6k|        if (r == 0)
  ------------------
  |  Branch (312:13): [True: 0, False: 28.6k]
  ------------------
  313|      0|                return -EINVAL;
  314|       |
  315|  28.6k|        r = safe_atou(word, &l);
  316|  28.6k|        if (r < 0)
  ------------------
  |  Branch (316:13): [True: 2.19k, False: 26.4k]
  ------------------
  317|  2.19k|                return r;
  318|       |
  319|       |        /* Check for the upper bound and extract it if needed */
  320|  26.4k|        if (!t)
  ------------------
  |  Branch (320:13): [True: 22.2k, False: 4.18k]
  ------------------
  321|       |                /* Single number with no dashes. */
  322|  22.2k|                u = l;
  323|  4.18k|        else if (!*t)
  ------------------
  |  Branch (323:18): [True: 411, False: 3.76k]
  ------------------
  324|       |                /* Trailing dash is an error. */
  325|    411|                return -EINVAL;
  326|  3.76k|        else {
  327|  3.76k|                r = safe_atou(t, &u);
  328|  3.76k|                if (r < 0)
  ------------------
  |  Branch (328:21): [True: 1.02k, False: 2.74k]
  ------------------
  329|  1.02k|                        return r;
  330|  3.76k|        }
  331|       |
  332|  25.0k|        *lower = l;
  333|  25.0k|        *upper = u;
  334|  25.0k|        return 0;
  335|  26.4k|}
safe_atou_full:
  398|  75.1k|int safe_atou_full(const char *s, unsigned base, unsigned *ret_u) {
  399|  75.1k|        char *x = NULL;
  400|  75.1k|        unsigned long l;
  401|       |
  402|  75.1k|        assert(s);
  ------------------
  |  |   72|  75.1k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  75.1k|        do {                                                            \
  |  |  |  |   59|  75.1k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  75.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 75.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  75.1k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  75.1k|        } while (false)
  |  |  ------------------
  ------------------
  403|  75.1k|        assert(SAFE_ATO_MASK_FLAGS(base) <= 16);
  ------------------
  |  |   72|  75.1k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  75.1k|        do {                                                            \
  |  |  |  |   59|  75.1k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  75.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 75.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  75.1k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  75.1k|        } while (false)
  |  |  ------------------
  ------------------
  404|       |
  405|       |        /* strtoul() is happy to parse negative values, and silently converts them to unsigned values without
  406|       |         * generating an error. We want a clean error, hence let's look for the "-" prefix on our own, and
  407|       |         * generate an error. But let's do so only after strtoul() validated that the string is clean
  408|       |         * otherwise, so that we return EINVAL preferably over ERANGE. */
  409|       |
  410|  75.1k|        if (FLAGS_SET(base, SAFE_ATO_REFUSE_LEADING_WHITESPACE) &&
  ------------------
  |  |  414|   150k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 11.1k, False: 64.0k]
  |  |  ------------------
  ------------------
  411|  75.1k|            strchr(WHITESPACE, s[0]))
  ------------------
  |  |   15|  11.1k|#define WHITESPACE          " \t\n\r"
  ------------------
  |  Branch (411:13): [True: 2.39k, False: 8.72k]
  ------------------
  412|  2.39k|                return -EINVAL;
  413|       |
  414|  72.7k|        s += strspn(s, WHITESPACE);
  ------------------
  |  |   15|  72.7k|#define WHITESPACE          " \t\n\r"
  ------------------
  415|       |
  416|  72.7k|        if (FLAGS_SET(base, SAFE_ATO_REFUSE_PLUS_MINUS) &&
  ------------------
  |  |  414|   145k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 1.60k, False: 71.1k]
  |  |  ------------------
  ------------------
  417|  72.7k|            IN_SET(s[0], '+', '-'))
  ------------------
  |  |  361|  1.60k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 26, False: 1.58k]
  |  |  ------------------
  |  |  362|  1.60k|                bool _found = false;                                    \
  |  |  363|  1.60k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  1.60k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  1.60k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  1.60k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  1.60k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  1.60k|                switch (x) {                                            \
  |  |  368|     26|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|     26|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|     26|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 26, False: 1.58k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 1.60k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|     26|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|     26|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|     26|                        _found = true;                                  \
  |  |  370|     26|                        break;                                          \
  |  |  371|  1.58k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 1.58k, False: 26]
  |  |  ------------------
  |  |  372|  1.58k|                        ;                                               \
  |  |  373|  1.60k|                }                                                       \
  |  |  374|  1.60k|                _found;                                                 \
  |  |  375|  1.60k|        })
  ------------------
  418|     26|                return -EINVAL; /* Note that we check the "-" prefix again a second time below, but return a
  419|       |                                 * different error. I.e. if the SAFE_ATO_REFUSE_PLUS_MINUS flag is set we
  420|       |                                 * blanket refuse +/- prefixed integers, while if it is missing we'll just
  421|       |                                 * return ERANGE, because the string actually parses correctly, but doesn't
  422|       |                                 * fit in the return type. */
  423|       |
  424|  72.7k|        if (FLAGS_SET(base, SAFE_ATO_REFUSE_LEADING_ZERO) &&
  ------------------
  |  |  414|   145k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 1.58k, False: 71.1k]
  |  |  ------------------
  ------------------
  425|  72.7k|            s[0] == '0' && !streq(s, "0"))
  ------------------
  |  |   46|     29|#define streq(a,b) (strcmp((a),(b)) == 0)
  ------------------
  |  Branch (425:13): [True: 29, False: 1.55k]
  |  Branch (425:28): [True: 16, False: 13]
  ------------------
  426|     16|                return -EINVAL; /* This is particularly useful to avoid ambiguities between C's octal
  427|       |                                 * notation and assumed-to-be-decimal integers with a leading zero. */
  428|       |
  429|  72.7k|        s = mangle_base(s, &base);
  430|       |
  431|  72.7k|        errno = 0;
  432|  72.7k|        l = strtoul(s, &x, SAFE_ATO_MASK_FLAGS(base) /* Let's mask off the flags bits so that only the actual
  ------------------
  |  |   28|  72.7k|#define SAFE_ATO_MASK_FLAGS(base) ((base) & ~SAFE_ATO_ALL_FLAGS)
  |  |  ------------------
  |  |  |  |   27|  72.7k|#define SAFE_ATO_ALL_FLAGS (SAFE_ATO_REFUSE_PLUS_MINUS|SAFE_ATO_REFUSE_LEADING_ZERO|SAFE_ATO_REFUSE_LEADING_WHITESPACE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   24|  72.7k|#define SAFE_ATO_REFUSE_PLUS_MINUS (1U << 30)
  |  |  |  |  ------------------
  |  |  |  |               #define SAFE_ATO_ALL_FLAGS (SAFE_ATO_REFUSE_PLUS_MINUS|SAFE_ATO_REFUSE_LEADING_ZERO|SAFE_ATO_REFUSE_LEADING_WHITESPACE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|  72.7k|#define SAFE_ATO_REFUSE_LEADING_ZERO (1U << 29)
  |  |  |  |  ------------------
  |  |  |  |               #define SAFE_ATO_ALL_FLAGS (SAFE_ATO_REFUSE_PLUS_MINUS|SAFE_ATO_REFUSE_LEADING_ZERO|SAFE_ATO_REFUSE_LEADING_WHITESPACE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  72.7k|#define SAFE_ATO_REFUSE_LEADING_WHITESPACE (1U << 28)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  433|  72.7k|                                                      * base is left */);
  434|  72.7k|        if (errno > 0)
  ------------------
  |  Branch (434:13): [True: 258, False: 72.4k]
  ------------------
  435|    258|                return -errno;
  436|  72.4k|        if (!x || x == s || *x != 0)
  ------------------
  |  Branch (436:13): [True: 0, False: 72.4k]
  |  Branch (436:19): [True: 10.8k, False: 61.6k]
  |  Branch (436:29): [True: 1.84k, False: 59.8k]
  ------------------
  437|  12.6k|                return -EINVAL;
  438|  59.8k|        if (l != 0 && s[0] == '-')
  ------------------
  |  Branch (438:13): [True: 49.5k, False: 10.2k]
  |  Branch (438:23): [True: 428, False: 49.1k]
  ------------------
  439|    428|                return -ERANGE;
  440|  59.3k|        if ((unsigned long) (unsigned) l != l)
  ------------------
  |  Branch (440:13): [True: 416, False: 58.9k]
  ------------------
  441|    416|                return -ERANGE;
  442|       |
  443|  58.9k|        if (ret_u)
  ------------------
  |  Branch (443:13): [True: 58.9k, False: 0]
  ------------------
  444|  58.9k|                *ret_u = (unsigned) l;
  445|       |
  446|  58.9k|        return 0;
  447|  59.3k|}
safe_atou_bounded:
  449|  11.9k|int safe_atou_bounded(const char *s, unsigned min, unsigned max, unsigned *ret) {
  450|  11.9k|        unsigned v;
  451|  11.9k|        int r;
  452|       |
  453|  11.9k|        r = safe_atou(s, &v);
  454|  11.9k|        if (r < 0)
  ------------------
  |  Branch (454:13): [True: 3.24k, False: 8.67k]
  ------------------
  455|  3.24k|                return r;
  456|       |
  457|  8.67k|        if (v < min || v > max)
  ------------------
  |  Branch (457:13): [True: 202, False: 8.47k]
  |  Branch (457:24): [True: 238, False: 8.23k]
  ------------------
  458|    440|                return -ERANGE;
  459|       |
  460|  8.23k|        *ret = v;
  461|  8.23k|        return 0;
  462|  8.67k|}
safe_atoi:
  464|  39.1k|int safe_atoi(const char *s, int *ret_i) {
  465|  39.1k|        unsigned base = 0;
  466|  39.1k|        char *x = NULL;
  467|  39.1k|        long l;
  468|       |
  469|  39.1k|        assert(s);
  ------------------
  |  |   72|  39.1k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  39.1k|        do {                                                            \
  |  |  |  |   59|  39.1k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  39.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 39.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  39.1k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  39.1k|        } while (false)
  |  |  ------------------
  ------------------
  470|       |
  471|  39.1k|        s += strspn(s, WHITESPACE);
  ------------------
  |  |   15|  39.1k|#define WHITESPACE          " \t\n\r"
  ------------------
  472|  39.1k|        s = mangle_base(s, &base);
  473|       |
  474|  39.1k|        errno = 0;
  475|  39.1k|        l = strtol(s, &x, base);
  476|  39.1k|        if (errno > 0)
  ------------------
  |  Branch (476:13): [True: 194, False: 39.0k]
  ------------------
  477|    194|                return -errno;
  478|  39.0k|        if (!x || x == s || *x != 0)
  ------------------
  |  Branch (478:13): [True: 0, False: 39.0k]
  |  Branch (478:19): [True: 36.4k, False: 2.52k]
  |  Branch (478:29): [True: 577, False: 1.95k]
  ------------------
  479|  37.0k|                return -EINVAL;
  480|  1.95k|        if ((long) (int) l != l)
  ------------------
  |  Branch (480:13): [True: 363, False: 1.58k]
  ------------------
  481|    363|                return -ERANGE;
  482|       |
  483|  1.58k|        if (ret_i)
  ------------------
  |  Branch (483:13): [True: 1.58k, False: 0]
  ------------------
  484|  1.58k|                *ret_i = (int) l;
  485|       |
  486|  1.58k|        return 0;
  487|  1.95k|}
safe_atou8_full:
  550|  6.37k|int safe_atou8_full(const char *s, unsigned base, uint8_t *ret) {
  551|  6.37k|        unsigned u;
  552|  6.37k|        int r;
  553|       |
  554|  6.37k|        r = safe_atou_full(s, base, &u);
  555|  6.37k|        if (r < 0)
  ------------------
  |  Branch (555:13): [True: 852, False: 5.51k]
  ------------------
  556|    852|                return r;
  557|  5.51k|        if (u > UINT8_MAX)
  ------------------
  |  Branch (557:13): [True: 347, False: 5.17k]
  ------------------
  558|    347|                return -ERANGE;
  559|       |
  560|  5.17k|        *ret = (uint8_t) u;
  561|  5.17k|        return 0;
  562|  5.51k|}
safe_atou16_full:
  564|  13.1k|int safe_atou16_full(const char *s, unsigned base, uint16_t *ret) {
  565|  13.1k|        unsigned u;
  566|  13.1k|        int r;
  567|       |
  568|  13.1k|        r = safe_atou_full(s, base, &u);
  569|  13.1k|        if (r < 0)
  ------------------
  |  Branch (569:13): [True: 5.27k, False: 7.85k]
  ------------------
  570|  5.27k|                return r;
  571|  7.85k|        if (u > UINT16_MAX)
  ------------------
  |  Branch (571:13): [True: 496, False: 7.35k]
  ------------------
  572|    496|                return -ERANGE;
  573|       |
  574|  7.35k|        *ret = (uint16_t) u;
  575|  7.35k|        return 0;
  576|  7.85k|}
parse_ip_port:
  676|  9.50k|int parse_ip_port(const char *s, uint16_t *ret) {
  677|  9.50k|        uint16_t l;
  678|  9.50k|        int r;
  679|       |
  680|  9.50k|        r = safe_atou16_full(s, SAFE_ATO_REFUSE_LEADING_WHITESPACE, &l);
  ------------------
  |  |   26|  9.50k|#define SAFE_ATO_REFUSE_LEADING_WHITESPACE (1U << 28)
  ------------------
  681|  9.50k|        if (r < 0)
  ------------------
  |  Branch (681:13): [True: 3.49k, False: 6.01k]
  ------------------
  682|  3.49k|                return r;
  683|       |
  684|  6.01k|        if (l == 0)
  ------------------
  |  Branch (684:13): [True: 418, False: 5.59k]
  ------------------
  685|    418|                return -EINVAL;
  686|       |
  687|  5.59k|        *ret = (uint16_t) l;
  688|       |
  689|  5.59k|        return 0;
  690|  6.01k|}
parse_ip_port_range:
  692|  1.47k|int parse_ip_port_range(const char *s, uint16_t *low, uint16_t *high, bool allow_zero) {
  693|  1.47k|        unsigned l, h;
  694|  1.47k|        int r;
  695|       |
  696|  1.47k|        r = parse_range(s, &l, &h);
  697|  1.47k|        if (r < 0)
  ------------------
  |  Branch (697:13): [True: 208, False: 1.26k]
  ------------------
  698|    208|                return r;
  699|       |
  700|  1.26k|        if (l > 65535 || h > 65535)
  ------------------
  |  Branch (700:13): [True: 215, False: 1.04k]
  |  Branch (700:26): [True: 215, False: 834]
  ------------------
  701|    430|                return -EINVAL;
  702|       |
  703|    834|        if (!allow_zero && (l == 0 || h == 0))
  ------------------
  |  Branch (703:13): [True: 834, False: 0]
  |  Branch (703:29): [True: 194, False: 640]
  |  Branch (703:39): [True: 194, False: 446]
  ------------------
  704|    388|                return -EINVAL;
  705|       |
  706|    446|        if (h < l)
  ------------------
  |  Branch (706:13): [True: 205, False: 241]
  ------------------
  707|    205|                return -EINVAL;
  708|       |
  709|    241|        *low = l;
  710|    241|        *high = h;
  711|       |
  712|    241|        return 0;
  713|    446|}
parse-util.c:mangle_base:
  372|   111k|static const char *mangle_base(const char *s, unsigned *base) {
  373|   111k|        const char *k;
  374|       |
  375|   111k|        assert(s);
  ------------------
  |  |   72|   111k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   111k|        do {                                                            \
  |  |  |  |   59|   111k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   111k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 111k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   111k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   111k|        } while (false)
  |  |  ------------------
  ------------------
  376|   111k|        assert(base);
  ------------------
  |  |   72|   111k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   111k|        do {                                                            \
  |  |  |  |   59|   111k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   111k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 111k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   111k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   111k|        } while (false)
  |  |  ------------------
  ------------------
  377|       |
  378|       |        /* Base already explicitly specified, then don't do anything. */
  379|   111k|        if (SAFE_ATO_MASK_FLAGS(*base) != 0)
  ------------------
  |  |   28|   111k|#define SAFE_ATO_MASK_FLAGS(base) ((base) & ~SAFE_ATO_ALL_FLAGS)
  |  |  ------------------
  |  |  |  |   27|   111k|#define SAFE_ATO_ALL_FLAGS (SAFE_ATO_REFUSE_PLUS_MINUS|SAFE_ATO_REFUSE_LEADING_ZERO|SAFE_ATO_REFUSE_LEADING_WHITESPACE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   24|   111k|#define SAFE_ATO_REFUSE_PLUS_MINUS (1U << 30)
  |  |  |  |  ------------------
  |  |  |  |               #define SAFE_ATO_ALL_FLAGS (SAFE_ATO_REFUSE_PLUS_MINUS|SAFE_ATO_REFUSE_LEADING_ZERO|SAFE_ATO_REFUSE_LEADING_WHITESPACE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|   111k|#define SAFE_ATO_REFUSE_LEADING_ZERO (1U << 29)
  |  |  |  |  ------------------
  |  |  |  |               #define SAFE_ATO_ALL_FLAGS (SAFE_ATO_REFUSE_PLUS_MINUS|SAFE_ATO_REFUSE_LEADING_ZERO|SAFE_ATO_REFUSE_LEADING_WHITESPACE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|   111k|#define SAFE_ATO_REFUSE_LEADING_WHITESPACE (1U << 28)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (379:13): [True: 1.56k, False: 110k]
  ------------------
  380|  1.56k|                return s;
  381|       |
  382|       |        /* Support Python 3 style "0b" and 0x" prefixes, because they truly make sense, much more than C's "0" prefix for octal. */
  383|   110k|        k = STARTSWITH_SET(s, "0b", "0B");
  ------------------
  |  |  156|   110k|        startswith_strv(p, STRV_MAKE(__VA_ARGS__))
  |  |  ------------------
  |  |  |  |  154|   110k|#define STRV_MAKE(...) ((char**) ((const char*[]) { __VA_ARGS__, NULL }))
  |  |  ------------------
  ------------------
  384|   110k|        if (k) {
  ------------------
  |  Branch (384:13): [True: 412, False: 109k]
  ------------------
  385|    412|                *base = 2 | (*base & SAFE_ATO_ALL_FLAGS);
  ------------------
  |  |   27|    412|#define SAFE_ATO_ALL_FLAGS (SAFE_ATO_REFUSE_PLUS_MINUS|SAFE_ATO_REFUSE_LEADING_ZERO|SAFE_ATO_REFUSE_LEADING_WHITESPACE)
  |  |  ------------------
  |  |  |  |   24|    412|#define SAFE_ATO_REFUSE_PLUS_MINUS (1U << 30)
  |  |  ------------------
  |  |               #define SAFE_ATO_ALL_FLAGS (SAFE_ATO_REFUSE_PLUS_MINUS|SAFE_ATO_REFUSE_LEADING_ZERO|SAFE_ATO_REFUSE_LEADING_WHITESPACE)
  |  |  ------------------
  |  |  |  |   25|    412|#define SAFE_ATO_REFUSE_LEADING_ZERO (1U << 29)
  |  |  ------------------
  |  |               #define SAFE_ATO_ALL_FLAGS (SAFE_ATO_REFUSE_PLUS_MINUS|SAFE_ATO_REFUSE_LEADING_ZERO|SAFE_ATO_REFUSE_LEADING_WHITESPACE)
  |  |  ------------------
  |  |  |  |   26|    412|#define SAFE_ATO_REFUSE_LEADING_WHITESPACE (1U << 28)
  |  |  ------------------
  ------------------
  386|    412|                return k;
  387|    412|        }
  388|       |
  389|   109k|        k = STARTSWITH_SET(s, "0o", "0O");
  ------------------
  |  |  156|   109k|        startswith_strv(p, STRV_MAKE(__VA_ARGS__))
  |  |  ------------------
  |  |  |  |  154|   109k|#define STRV_MAKE(...) ((char**) ((const char*[]) { __VA_ARGS__, NULL }))
  |  |  ------------------
  ------------------
  390|   109k|        if (k) {
  ------------------
  |  Branch (390:13): [True: 465, False: 109k]
  ------------------
  391|    465|                *base = 8 | (*base & SAFE_ATO_ALL_FLAGS);
  ------------------
  |  |   27|    465|#define SAFE_ATO_ALL_FLAGS (SAFE_ATO_REFUSE_PLUS_MINUS|SAFE_ATO_REFUSE_LEADING_ZERO|SAFE_ATO_REFUSE_LEADING_WHITESPACE)
  |  |  ------------------
  |  |  |  |   24|    465|#define SAFE_ATO_REFUSE_PLUS_MINUS (1U << 30)
  |  |  ------------------
  |  |               #define SAFE_ATO_ALL_FLAGS (SAFE_ATO_REFUSE_PLUS_MINUS|SAFE_ATO_REFUSE_LEADING_ZERO|SAFE_ATO_REFUSE_LEADING_WHITESPACE)
  |  |  ------------------
  |  |  |  |   25|    465|#define SAFE_ATO_REFUSE_LEADING_ZERO (1U << 29)
  |  |  ------------------
  |  |               #define SAFE_ATO_ALL_FLAGS (SAFE_ATO_REFUSE_PLUS_MINUS|SAFE_ATO_REFUSE_LEADING_ZERO|SAFE_ATO_REFUSE_LEADING_WHITESPACE)
  |  |  ------------------
  |  |  |  |   26|    465|#define SAFE_ATO_REFUSE_LEADING_WHITESPACE (1U << 28)
  |  |  ------------------
  ------------------
  392|    465|                return k;
  393|    465|        }
  394|       |
  395|   109k|        return s;
  396|   109k|}

geneve.c:safe_atou32:
   63|    657|static inline int safe_atou32(const char *s, uint32_t *ret_u) {
   64|    657|        return safe_atou32_full(s, 0, (unsigned*) ret_u);
   65|    657|}
geneve.c:safe_atou32_full:
   58|    657|static inline int safe_atou32_full(const char *s, unsigned base, uint32_t *ret_u) {
   59|    657|        assert_cc(sizeof(uint32_t) == sizeof(unsigned));
  ------------------
  |  |  142|    657|#define assert_cc(expr) _Static_assert(expr, #expr)
  ------------------
   60|    657|        return safe_atou_full(s, base, (unsigned*) ret_u);
   61|    657|}
ipoib.c:safe_atou16:
   48|    689|static inline int safe_atou16(const char *s, uint16_t *ret) {
   49|    689|        return safe_atou16_full(s, 0, ret);
   50|    689|}
macsec.c:safe_atou32:
   63|  2.41k|static inline int safe_atou32(const char *s, uint32_t *ret_u) {
   64|  2.41k|        return safe_atou32_full(s, 0, (unsigned*) ret_u);
   65|  2.41k|}
macsec.c:safe_atou32_full:
   58|  2.41k|static inline int safe_atou32_full(const char *s, unsigned base, uint32_t *ret_u) {
   59|  2.41k|        assert_cc(sizeof(uint32_t) == sizeof(unsigned));
  ------------------
  |  |  142|  2.41k|#define assert_cc(expr) _Static_assert(expr, #expr)
  ------------------
   60|  2.41k|        return safe_atou_full(s, base, (unsigned*) ret_u);
   61|  2.41k|}
macsec.c:parse_tristate:
   10|  1.38k|static inline int parse_tristate(const char *v, int *ret) {
   11|  1.38k|        return parse_tristate_full(v, NULL, ret);
   12|  1.38k|}
tunnel.c:safe_atou32:
   63|    398|static inline int safe_atou32(const char *s, uint32_t *ret_u) {
   64|    398|        return safe_atou32_full(s, 0, (unsigned*) ret_u);
   65|    398|}
tunnel.c:safe_atou32_full:
   58|    398|static inline int safe_atou32_full(const char *s, unsigned base, uint32_t *ret_u) {
   59|    398|        assert_cc(sizeof(uint32_t) == sizeof(unsigned));
  ------------------
  |  |  142|    398|#define assert_cc(expr) _Static_assert(expr, #expr)
  ------------------
   60|    398|        return safe_atou_full(s, base, (unsigned*) ret_u);
   61|    398|}
vxlan.c:safe_atou:
   31|    760|static inline int safe_atou(const char *s, unsigned *ret_u) {
   32|    760|        return safe_atou_full(s, 0, ret_u);
   33|    760|}
wireguard.c:safe_atou16:
   48|    500|static inline int safe_atou16(const char *s, uint16_t *ret) {
   49|    500|        return safe_atou16_full(s, 0, ret);
   50|    500|}
wireguard.c:safe_atou32:
   63|  1.70k|static inline int safe_atou32(const char *s, uint32_t *ret_u) {
   64|  1.70k|        return safe_atou32_full(s, 0, (unsigned*) ret_u);
   65|  1.70k|}
wireguard.c:safe_atou32_full:
   58|  1.70k|static inline int safe_atou32_full(const char *s, unsigned base, uint32_t *ret_u) {
   59|  1.70k|        assert_cc(sizeof(uint32_t) == sizeof(unsigned));
  ------------------
  |  |  142|  1.70k|#define assert_cc(expr) _Static_assert(expr, #expr)
  ------------------
   60|  1.70k|        return safe_atou_full(s, base, (unsigned*) ret_u);
   61|  1.70k|}
wlan.c:safe_atou32:
   63|    423|static inline int safe_atou32(const char *s, uint32_t *ret_u) {
   64|    423|        return safe_atou32_full(s, 0, (unsigned*) ret_u);
   65|    423|}
wlan.c:safe_atou32_full:
   58|    423|static inline int safe_atou32_full(const char *s, unsigned base, uint32_t *ret_u) {
   59|    423|        assert_cc(sizeof(uint32_t) == sizeof(unsigned));
  ------------------
  |  |  142|    423|#define assert_cc(expr) _Static_assert(expr, #expr)
  ------------------
   60|    423|        return safe_atou_full(s, base, (unsigned*) ret_u);
   61|    423|}
networkd-route-util.c:safe_atou32:
   63|  2.48k|static inline int safe_atou32(const char *s, uint32_t *ret_u) {
   64|  2.48k|        return safe_atou32_full(s, 0, (unsigned*) ret_u);
   65|  2.48k|}
networkd-route-util.c:safe_atou32_full:
   58|  2.48k|static inline int safe_atou32_full(const char *s, unsigned base, uint32_t *ret_u) {
   59|  2.48k|        assert_cc(sizeof(uint32_t) == sizeof(unsigned));
  ------------------
  |  |  142|  2.48k|#define assert_cc(expr) _Static_assert(expr, #expr)
  ------------------
   60|  2.48k|        return safe_atou_full(s, base, (unsigned*) ret_u);
   61|  2.48k|}
conf-parser.c:safe_atou8:
   42|    651|static inline int safe_atou8(const char *s, uint8_t *ret) {
   43|    651|        return safe_atou8_full(s, 0, ret);
   44|    651|}
conf-parser.c:safe_atou16:
   48|    389|static inline int safe_atou16(const char *s, uint16_t *ret) {
   49|    389|        return safe_atou16_full(s, 0, ret);
   50|    389|}
conf-parser.c:safe_atou32:
   63|    495|static inline int safe_atou32(const char *s, uint32_t *ret_u) {
   64|    495|        return safe_atou32_full(s, 0, (unsigned*) ret_u);
   65|    495|}
conf-parser.c:safe_atou32_full:
   58|    495|static inline int safe_atou32_full(const char *s, unsigned base, uint32_t *ret_u) {
   59|    495|        assert_cc(sizeof(uint32_t) == sizeof(unsigned));
  ------------------
  |  |  142|    495|#define assert_cc(expr) _Static_assert(expr, #expr)
  ------------------
   60|    495|        return safe_atou_full(s, base, (unsigned*) ret_u);
   61|    495|}
conf-parser.c:safe_atou:
   31|    406|static inline int safe_atou(const char *s, unsigned *ret_u) {
   32|    406|        return safe_atou_full(s, 0, ret_u);
   33|    406|}
conf-parser.c:parse_tristate:
   10|    678|static inline int parse_tristate(const char *v, int *ret) {
   11|    678|        return parse_tristate_full(v, NULL, ret);
   12|    678|}
vlan-util.c:safe_atou16:
   48|  2.03k|static inline int safe_atou16(const char *s, uint16_t *ret) {
   49|  2.03k|        return safe_atou16_full(s, 0, ret);
   50|  2.03k|}
in-addr-util.c:safe_atou8:
   42|  5.72k|static inline int safe_atou8(const char *s, uint8_t *ret) {
   43|  5.72k|        return safe_atou8_full(s, 0, ret);
   44|  5.72k|}
parse-util.c:safe_atou:
   31|  44.3k|static inline int safe_atou(const char *s, unsigned *ret_u) {
   32|  44.3k|        return safe_atou_full(s, 0, ret_u);
   33|  44.3k|}
user-util.c:safe_atou32_full:
   58|  1.60k|static inline int safe_atou32_full(const char *s, unsigned base, uint32_t *ret_u) {
   59|  1.60k|        assert_cc(sizeof(uint32_t) == sizeof(unsigned));
  ------------------
  |  |  142|  1.60k|#define assert_cc(expr) _Static_assert(expr, #expr)
  ------------------
   60|  1.60k|        return safe_atou_full(s, base, (unsigned*) ret_u);
   61|  1.60k|}

path_make_absolute_cwd:
   78|  96.2k|int path_make_absolute_cwd(const char *p, char **ret) {
   79|  96.2k|        char *c;
   80|  96.2k|        int r;
   81|       |
   82|  96.2k|        assert(p);
  ------------------
  |  |   72|  96.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  96.2k|        do {                                                            \
  |  |  |  |   59|  96.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  96.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 96.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  96.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  96.2k|        } while (false)
  |  |  ------------------
  ------------------
   83|  96.2k|        assert(ret);
  ------------------
  |  |   72|  96.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  96.2k|        do {                                                            \
  |  |  |  |   59|  96.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  96.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 96.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  96.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  96.2k|        } while (false)
  |  |  ------------------
  ------------------
   84|       |
   85|       |        /* Similar to path_make_absolute(), but prefixes with the
   86|       |         * current working directory. */
   87|       |
   88|  96.2k|        if (path_is_absolute(p))
  ------------------
  |  Branch (88:13): [True: 96.2k, False: 0]
  ------------------
   89|  96.2k|                c = strdup(p);
   90|      0|        else {
   91|      0|                _cleanup_free_ char *cwd = NULL;
  ------------------
  |  |   82|      0|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
   92|       |
   93|      0|                r = safe_getcwd(&cwd);
   94|      0|                if (r < 0)
  ------------------
  |  Branch (94:21): [True: 0, False: 0]
  ------------------
   95|      0|                        return r;
   96|       |
   97|      0|                c = path_join(cwd, p);
  ------------------
  |  |   70|      0|#define path_join(...) path_extend_internal(NULL, __VA_ARGS__, POINTER_MAX)
  |  |  ------------------
  |  |  |  |  159|      0|#define POINTER_MAX ((void*) UINTPTR_MAX)
  |  |  ------------------
  ------------------
   98|      0|        }
   99|  96.2k|        if (!c)
  ------------------
  |  Branch (99:13): [True: 0, False: 96.2k]
  ------------------
  100|      0|                return -ENOMEM;
  101|       |
  102|  96.2k|        *ret = c;
  103|  96.2k|        return 0;
  104|  96.2k|}
path_startswith_strv:
  225|  9.65k|char* path_startswith_strv(const char *p, char * const *strv) {
  226|  9.65k|        assert(p);
  ------------------
  |  |   72|  9.65k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  9.65k|        do {                                                            \
  |  |  |  |   59|  9.65k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  9.65k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 9.65k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  9.65k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  9.65k|        } while (false)
  |  |  ------------------
  ------------------
  227|       |
  228|  27.5k|        STRV_FOREACH(s, strv) {
  ------------------
  |  |   10|  9.65k|        _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |    7|  36.5k|        for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (7:41): [True: 36.5k, False: 0]
  |  |  |  |  |  Branch (7:52): [True: 27.5k, False: 8.95k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  229|  27.5k|                char *t;
  230|       |
  231|  27.5k|                t = path_startswith(p, *s);
  232|  27.5k|                if (t)
  ------------------
  |  Branch (232:21): [True: 699, False: 26.8k]
  ------------------
  233|    699|                        return t;
  234|  27.5k|        }
  235|       |
  236|  8.95k|        return NULL;
  237|  9.65k|}
path_strv_resolve:
  260|    788|char** path_strv_resolve(char **l, const char *root) {
  261|    788|        unsigned k = 0;
  262|    788|        bool enomem = false;
  263|    788|        int r;
  264|       |
  265|    788|        if (strv_isempty(l))
  ------------------
  |  Branch (265:13): [True: 0, False: 788]
  ------------------
  266|      0|                return l;
  267|       |
  268|       |        /* Goes through every item in the string list and canonicalize
  269|       |         * the path. This works in place and won't rollback any
  270|       |         * changes on failure. */
  271|       |
  272|  3.94k|        STRV_FOREACH(s, l) {
  ------------------
  |  |   10|    788|        _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |    7|  4.72k|        for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (7:41): [True: 4.72k, False: 0]
  |  |  |  |  |  Branch (7:52): [True: 3.94k, False: 788]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  273|  3.94k|                _cleanup_free_ char *orig = NULL;
  ------------------
  |  |   82|  3.94k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  3.94k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  274|  3.94k|                char *t, *u;
  275|       |
  276|  3.94k|                if (!path_is_absolute(*s)) {
  ------------------
  |  Branch (276:21): [True: 0, False: 3.94k]
  ------------------
  277|      0|                        free(*s);
  278|      0|                        continue;
  279|      0|                }
  280|       |
  281|  3.94k|                if (root) {
  ------------------
  |  Branch (281:21): [True: 0, False: 3.94k]
  ------------------
  282|      0|                        orig = *s;
  283|      0|                        t = path_join(root, orig);
  ------------------
  |  |   70|      0|#define path_join(...) path_extend_internal(NULL, __VA_ARGS__, POINTER_MAX)
  |  |  ------------------
  |  |  |  |  159|      0|#define POINTER_MAX ((void*) UINTPTR_MAX)
  |  |  ------------------
  ------------------
  284|      0|                        if (!t) {
  ------------------
  |  Branch (284:29): [True: 0, False: 0]
  ------------------
  285|      0|                                enomem = true;
  286|      0|                                continue;
  287|      0|                        }
  288|      0|                } else
  289|  3.94k|                        t = *s;
  290|       |
  291|  3.94k|                r = chase(t, root, 0, &u, NULL);
  292|  3.94k|                if (r == -ENOENT) {
  ------------------
  |  Branch (292:21): [True: 3.94k, False: 0]
  ------------------
  293|  3.94k|                        if (root) {
  ------------------
  |  Branch (293:29): [True: 0, False: 3.94k]
  ------------------
  294|      0|                                u = TAKE_PTR(orig);
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  295|      0|                                free(t);
  296|      0|                        } else
  297|  3.94k|                                u = t;
  298|  3.94k|                } else if (r < 0) {
  ------------------
  |  Branch (298:28): [True: 0, False: 0]
  ------------------
  299|      0|                        free(t);
  300|       |
  301|      0|                        if (r == -ENOMEM)
  ------------------
  |  Branch (301:29): [True: 0, False: 0]
  ------------------
  302|      0|                                enomem = true;
  303|       |
  304|      0|                        continue;
  305|      0|                } else if (root) {
  ------------------
  |  Branch (305:28): [True: 0, False: 0]
  ------------------
  306|      0|                        char *x;
  307|       |
  308|      0|                        free(t);
  309|      0|                        x = path_startswith(u, root);
  310|      0|                        if (x) {
  ------------------
  |  Branch (310:29): [True: 0, False: 0]
  ------------------
  311|       |                                /* restore the slash if it was lost */
  312|      0|                                if (!startswith(x, "/"))
  ------------------
  |  Branch (312:37): [True: 0, False: 0]
  ------------------
  313|      0|                                        *(--x) = '/';
  314|       |
  315|      0|                                t = strdup(x);
  316|      0|                                free(u);
  317|      0|                                if (!t) {
  ------------------
  |  Branch (317:37): [True: 0, False: 0]
  ------------------
  318|      0|                                        enomem = true;
  319|      0|                                        continue;
  320|      0|                                }
  321|      0|                                u = t;
  322|      0|                        } else {
  323|       |                                /* canonicalized path goes outside of
  324|       |                                 * prefix, keep the original path instead */
  325|      0|                                free_and_replace(u, orig);
  ------------------
  |  |   49|      0|        free_and_replace_full(a, b, free)
  |  |  ------------------
  |  |  |  |   10|      0|        ({                                      \
  |  |  |  |   11|      0|                typeof(a)* _a = &(a);           \
  |  |  |  |   12|      0|                typeof(b)* _b = &(b);           \
  |  |  |  |   13|      0|                free_func(*_a);                 \
  |  |  |  |   14|      0|                *_a = *_b;                      \
  |  |  |  |   15|      0|                *_b = NULL;                     \
  |  |  |  |   16|      0|                0;                              \
  |  |  |  |   17|      0|        })
  |  |  ------------------
  ------------------
  326|      0|                        }
  327|      0|                } else
  328|      0|                        free(t);
  329|       |
  330|  3.94k|                l[k++] = u;
  331|  3.94k|        }
  332|       |
  333|    788|        l[k] = NULL;
  334|       |
  335|    788|        if (enomem)
  ------------------
  |  Branch (335:13): [True: 0, False: 788]
  ------------------
  336|      0|                return NULL;
  337|       |
  338|    788|        return l;
  339|    788|}
path_strv_resolve_uniq:
  341|    788|char** path_strv_resolve_uniq(char **l, const char *root) {
  342|       |
  343|    788|        if (strv_isempty(l))
  ------------------
  |  Branch (343:13): [True: 0, False: 788]
  ------------------
  344|      0|                return l;
  345|       |
  346|    788|        if (!path_strv_resolve(l, root))
  ------------------
  |  Branch (346:13): [True: 0, False: 788]
  ------------------
  347|      0|                return NULL;
  348|       |
  349|    788|        return strv_uniq(l);
  350|    788|}
path_simplify_full:
  356|  10.1k|char* path_simplify_full(char *path, PathSimplifyFlags flags) {
  357|  10.1k|        bool add_slash = false, keep_trailing_slash, absolute, beginning = true;
  358|  10.1k|        char *f = path;
  359|  10.1k|        int r;
  360|       |
  361|       |        /* Removes redundant inner and trailing slashes. Also removes unnecessary dots.
  362|       |         * Modifies the passed string in-place.
  363|       |         *
  364|       |         * ///foo//./bar/.   becomes /foo/bar
  365|       |         * .//./foo//./bar/. becomes foo/bar
  366|       |         * /../foo/bar       becomes /foo/bar
  367|       |         * /../foo/bar/..    becomes /foo/bar/..
  368|       |         */
  369|       |
  370|  10.1k|        if (isempty(path))
  ------------------
  |  Branch (370:13): [True: 0, False: 10.1k]
  ------------------
  371|      0|                return path;
  372|       |
  373|  10.1k|        keep_trailing_slash = FLAGS_SET(flags, PATH_SIMPLIFY_KEEP_TRAILING_SLASH) && endswith(path, "/");
  ------------------
  |  |  414|  20.3k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 10.1k]
  |  |  ------------------
  ------------------
  |  Branch (373:86): [True: 0, False: 0]
  ------------------
  374|       |
  375|  10.1k|        absolute = path_is_absolute(path);
  376|  10.1k|        f += absolute;  /* Keep leading /, if present. */
  377|       |
  378|  37.8k|        for (const char *p = f;;) {
  379|  37.8k|                const char *e;
  380|       |
  381|  37.8k|                r = path_find_first_component(&p, true, &e);
  382|  37.8k|                if (r == 0)
  ------------------
  |  Branch (382:21): [True: 9.89k, False: 27.9k]
  ------------------
  383|  9.89k|                        break;
  384|       |
  385|  27.9k|                if (r > 0 && absolute && beginning && path_startswith(e, ".."))
  ------------------
  |  Branch (385:21): [True: 27.6k, False: 275]
  |  Branch (385:30): [True: 27.6k, False: 0]
  |  Branch (385:42): [True: 6.94k, False: 20.7k]
  |  Branch (385:55): [True: 2.43k, False: 4.51k]
  ------------------
  386|       |                        /* If we're at the beginning of an absolute path, we can safely skip ".." */
  387|  2.43k|                        continue;
  388|       |
  389|  25.5k|                beginning = false;
  390|       |
  391|  25.5k|                if (add_slash)
  ------------------
  |  Branch (391:21): [True: 21.0k, False: 4.52k]
  ------------------
  392|  21.0k|                        *f++ = '/';
  393|       |
  394|  25.5k|                if (r < 0) {
  ------------------
  |  Branch (394:21): [True: 275, False: 25.2k]
  ------------------
  395|       |                        /* if path is invalid, then refuse to simplify the remaining part. */
  396|    275|                        memmove(f, p, strlen(p) + 1);
  397|    275|                        return path;
  398|    275|                }
  399|       |
  400|  25.2k|                memmove(f, e, r);
  401|  25.2k|                f += r;
  402|       |
  403|  25.2k|                add_slash = true;
  404|  25.2k|        }
  405|       |
  406|       |        /* Special rule, if we stripped everything, we need a "." for the current directory. */
  407|  9.89k|        if (f == path)
  ------------------
  |  Branch (407:13): [True: 0, False: 9.89k]
  ------------------
  408|      0|                *f++ = '.';
  409|       |
  410|  9.89k|        if (*(f-1) != '/' && keep_trailing_slash)
  ------------------
  |  Branch (410:13): [True: 4.24k, False: 5.64k]
  |  Branch (410:30): [True: 0, False: 4.24k]
  ------------------
  411|      0|                *f++ = '/';
  412|       |
  413|  9.89k|        *f = '\0';
  414|  9.89k|        return path;
  415|  10.1k|}
path_startswith_full:
  433|   143k|char* path_startswith_full(const char *original_path, const char *prefix, PathStartWithFlags flags) {
  434|   143k|        assert(original_path);
  ------------------
  |  |   72|   143k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   143k|        do {                                                            \
  |  |  |  |   59|   143k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   143k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 143k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   143k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   143k|        } while (false)
  |  |  ------------------
  ------------------
  435|   143k|        assert(prefix);
  ------------------
  |  |   72|   143k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   143k|        do {                                                            \
  |  |  |  |   59|   143k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   143k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 143k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   143k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   143k|        } while (false)
  |  |  ------------------
  ------------------
  436|       |
  437|       |        /* Returns a pointer to the start of the first component after the parts matched by
  438|       |         * the prefix, iff
  439|       |         * - both paths are absolute or both paths are relative,
  440|       |         * and
  441|       |         * - each component in prefix in turn matches a component in path at the same position.
  442|       |         * An empty string will be returned when the prefix and path are equivalent.
  443|       |         *
  444|       |         * Returns NULL otherwise.
  445|       |         */
  446|       |
  447|   143k|        const char *path = original_path;
  448|       |
  449|   143k|        if ((path[0] == '/') != (prefix[0] == '/'))
  ------------------
  |  Branch (449:13): [True: 0, False: 143k]
  ------------------
  450|      0|                return NULL;
  451|       |
  452|   147k|        for (;;) {
  453|   147k|                const char *p, *q;
  454|   147k|                int m, n;
  455|       |
  456|   147k|                m = path_find_first_component(&path, !FLAGS_SET(flags, PATH_STARTSWITH_REFUSE_DOT_DOT), &p);
  ------------------
  |  |  414|   147k|        ((~(v) & (flags)) == 0)
  ------------------
  457|   147k|                if (m < 0)
  ------------------
  |  Branch (457:21): [True: 264, False: 147k]
  ------------------
  458|    264|                        return NULL;
  459|       |
  460|   147k|                n = path_find_first_component(&prefix, !FLAGS_SET(flags, PATH_STARTSWITH_REFUSE_DOT_DOT), &q);
  ------------------
  |  |  414|   147k|        ((~(v) & (flags)) == 0)
  ------------------
  461|   147k|                if (n < 0)
  ------------------
  |  Branch (461:21): [True: 0, False: 147k]
  ------------------
  462|      0|                        return NULL;
  463|       |
  464|   147k|                if (n == 0) {
  ------------------
  |  Branch (464:21): [True: 112k, False: 34.5k]
  ------------------
  465|   112k|                        if (!p)
  ------------------
  |  Branch (465:29): [True: 791, False: 111k]
  ------------------
  466|    791|                                p = path;
  467|       |
  468|   112k|                        if (FLAGS_SET(flags, PATH_STARTSWITH_RETURN_LEADING_SLASH)) {
  ------------------
  |  |  414|   112k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 112k]
  |  |  ------------------
  ------------------
  469|       |
  470|      0|                                if (p <= original_path)
  ------------------
  |  Branch (470:37): [True: 0, False: 0]
  ------------------
  471|      0|                                        return NULL;
  472|       |
  473|      0|                                p--;
  474|       |
  475|      0|                                if (*p != '/')
  ------------------
  |  Branch (475:37): [True: 0, False: 0]
  ------------------
  476|      0|                                        return NULL;
  477|      0|                        }
  478|       |
  479|   112k|                        return (char*) p;
  480|   112k|                }
  481|       |
  482|  34.5k|                if (m != n)
  ------------------
  |  Branch (482:21): [True: 29.4k, False: 5.02k]
  ------------------
  483|  29.4k|                        return NULL;
  484|       |
  485|  5.02k|                if (!strneq(p, q, m))
  ------------------
  |  |   47|  5.02k|#define strneq(a, b, n) (strncmp((a), (b), (n)) == 0)
  ------------------
  |  Branch (485:21): [True: 1.63k, False: 3.39k]
  ------------------
  486|  1.63k|                        return NULL;
  487|  5.02k|        }
  488|   143k|}
path_compare:
  490|  13.0k|int path_compare(const char *a, const char *b) {
  491|  13.0k|        int r;
  492|       |
  493|       |        /* Order NULL before non-NULL */
  494|  13.0k|        r = CMP(!!a, !!b);
  ------------------
  |  |  288|  13.0k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  13.0k|        ({                                              \
  |  |  |  |  291|  13.0k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  13.0k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  13.0k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  13.0k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  13.0k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  13.0k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  13.0k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  13.0k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  13.0k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 13.0k]
  |  |  |  |  ------------------
  |  |  |  |  294|  13.0k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  13.0k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  13.0k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  13.0k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  13.0k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  13.0k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  13.0k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 13.0k]
  |  |  |  |  ------------------
  |  |  |  |  295|  13.0k|        })
  |  |  ------------------
  ------------------
  495|  13.0k|        if (r != 0)
  ------------------
  |  Branch (495:13): [True: 0, False: 13.0k]
  ------------------
  496|      0|                return r;
  497|       |
  498|       |        /* A relative path and an absolute path must not compare as equal.
  499|       |         * Which one is sorted before the other does not really matter.
  500|       |         * Here a relative path is ordered before an absolute path. */
  501|  13.0k|        r = CMP(path_is_absolute(a), path_is_absolute(b));
  ------------------
  |  |  288|  13.0k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  13.0k|        ({                                              \
  |  |  |  |  291|  13.0k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  13.0k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  13.0k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  13.0k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  13.0k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  13.0k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  13.0k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  13.0k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  13.0k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 13.0k]
  |  |  |  |  ------------------
  |  |  |  |  294|  13.0k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  13.0k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  13.0k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  13.0k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  13.0k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  13.0k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  13.0k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 13.0k]
  |  |  |  |  ------------------
  |  |  |  |  295|  13.0k|        })
  |  |  ------------------
  ------------------
  502|  13.0k|        if (r != 0)
  ------------------
  |  Branch (502:13): [True: 0, False: 13.0k]
  ------------------
  503|      0|                return r;
  504|       |
  505|  13.0k|        for (;;) {
  506|  13.0k|                const char *aa, *bb;
  507|  13.0k|                int j, k;
  508|       |
  509|  13.0k|                j = path_find_first_component(&a, true, &aa);
  510|  13.0k|                k = path_find_first_component(&b, true, &bb);
  511|       |
  512|  13.0k|                if (j < 0 || k < 0) {
  ------------------
  |  Branch (512:21): [True: 0, False: 13.0k]
  |  Branch (512:30): [True: 0, False: 13.0k]
  ------------------
  513|       |                        /* When one of paths is invalid, order invalid path after valid one. */
  514|      0|                        r = CMP(j < 0, k < 0);
  ------------------
  |  |  288|      0|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|      0|        ({                                              \
  |  |  |  |  291|      0|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|      0|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|      0|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|        })
  |  |  ------------------
  ------------------
  515|      0|                        if (r != 0)
  ------------------
  |  Branch (515:29): [True: 0, False: 0]
  ------------------
  516|      0|                                return r;
  517|       |
  518|       |                        /* fallback to use strcmp() if both paths are invalid. */
  519|      0|                        return strcmp(a, b);
  520|      0|                }
  521|       |
  522|       |                /* Order prefixes first: "/foo" before "/foo/bar" */
  523|  13.0k|                if (j == 0) {
  ------------------
  |  Branch (523:21): [True: 0, False: 13.0k]
  ------------------
  524|      0|                        if (k == 0)
  ------------------
  |  Branch (524:29): [True: 0, False: 0]
  ------------------
  525|      0|                                return 0;
  526|      0|                        return -1;
  527|      0|                }
  528|  13.0k|                if (k == 0)
  ------------------
  |  Branch (528:21): [True: 0, False: 13.0k]
  ------------------
  529|      0|                        return 1;
  530|       |
  531|       |                /* Alphabetical sort: "/foo/aaa" before "/foo/b" */
  532|  13.0k|                r = memcmp(aa, bb, MIN(j, k));
  ------------------
  |  |  220|  13.0k|#define MIN(a, b) __MIN(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  222|  13.0k|        ({                                              \
  |  |  |  |  223|  13.0k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  224|  13.0k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  225|  13.0k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  13.0k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  13.0k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  13.0k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  13.0k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  13.0k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  13.0k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  13.0k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  13.0k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  13.0k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  13.0k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  13.0k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  13.0k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (225:17): [True: 0, False: 13.0k]
  |  |  |  |  ------------------
  |  |  |  |  226|  13.0k|        })
  |  |  ------------------
  ------------------
  533|  13.0k|                if (r != 0)
  ------------------
  |  Branch (533:21): [True: 13.0k, False: 0]
  ------------------
  534|  13.0k|                        return r;
  535|       |
  536|       |                /* Sort "/foo/a" before "/foo/aaa" */
  537|      0|                r = CMP(j, k);
  ------------------
  |  |  288|      0|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|      0|        ({                                              \
  |  |  |  |  291|      0|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|      0|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|      0|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|        })
  |  |  ------------------
  ------------------
  538|      0|                if (r != 0)
  ------------------
  |  Branch (538:21): [True: 0, False: 0]
  ------------------
  539|      0|                        return r;
  540|      0|        }
  541|  13.0k|}
path_extend_internal:
  584|   241k|char* path_extend_internal(char **x, ...) {
  585|   241k|        size_t sz, old_sz;
  586|   241k|        char *q, *nx;
  587|   241k|        const char *p;
  588|   241k|        va_list ap;
  589|   241k|        bool slash;
  590|       |
  591|       |        /* Joins all listed strings until the sentinel and places a "/" between them unless the strings
  592|       |         * end/begin already with one so that it is unnecessary. Note that slashes which are already
  593|       |         * duplicate won't be removed. The string returned is hence always equal to or longer than the sum of
  594|       |         * the lengths of the individual strings.
  595|       |         *
  596|       |         * The first argument may be an already allocated string that is extended via realloc() if
  597|       |         * non-NULL. path_extend() and path_join() are macro wrappers around this function, making use of the
  598|       |         * first parameter to distinguish the two operations.
  599|       |         *
  600|       |         * Note: any listed empty string is simply skipped. This can be useful for concatenating strings of
  601|       |         * which some are optional.
  602|       |         *
  603|       |         * Examples:
  604|       |         *
  605|       |         * path_join("foo", "bar") → "foo/bar"
  606|       |         * path_join("foo/", "bar") → "foo/bar"
  607|       |         * path_join("", "foo", "", "bar", "") → "foo/bar" */
  608|       |
  609|   241k|        sz = old_sz = x ? strlen_ptr(*x) : 0;
  ------------------
  |  Branch (609:23): [True: 237k, False: 3.94k]
  ------------------
  610|   241k|        va_start(ap, x);
  611|   489k|        while ((p = va_arg(ap, char*)) != POINTER_MAX) {
  ------------------
  |  |  159|   489k|#define POINTER_MAX ((void*) UINTPTR_MAX)
  ------------------
  |  Branch (611:16): [True: 248k, False: 241k]
  ------------------
  612|   248k|                size_t add;
  613|       |
  614|   248k|                if (isempty(p))
  ------------------
  |  Branch (614:21): [True: 3.94k, False: 244k]
  ------------------
  615|  3.94k|                        continue;
  616|       |
  617|   244k|                add = 1 + strlen(p);
  618|   244k|                if (sz > SIZE_MAX - add) { /* overflow check */
  ------------------
  |  Branch (618:21): [True: 0, False: 244k]
  ------------------
  619|      0|                        va_end(ap);
  620|      0|                        return NULL;
  621|      0|                }
  622|       |
  623|   244k|                sz += add;
  624|   244k|        }
  625|   241k|        va_end(ap);
  626|       |
  627|   241k|        nx = realloc(x ? *x : NULL, GREEDY_ALLOC_ROUND_UP(sz+1));
  ------------------
  |  Branch (627:22): [True: 237k, False: 3.94k]
  ------------------
  628|   241k|        if (!nx)
  ------------------
  |  Branch (628:13): [True: 0, False: 241k]
  ------------------
  629|      0|                return NULL;
  630|   241k|        if (x)
  ------------------
  |  Branch (630:13): [True: 237k, False: 3.94k]
  ------------------
  631|   237k|                *x = nx;
  632|       |
  633|   241k|        if (old_sz > 0)
  ------------------
  |  Branch (633:13): [True: 237k, False: 3.94k]
  ------------------
  634|   237k|                slash = nx[old_sz-1] == '/';
  635|  3.94k|        else {
  636|  3.94k|                nx[old_sz] = 0;
  637|  3.94k|                slash = true; /* no need to generate a slash anymore */
  638|  3.94k|        }
  639|       |
  640|   241k|        q = nx + old_sz;
  641|       |
  642|   241k|        va_start(ap, x);
  643|   489k|        while ((p = va_arg(ap, char*)) != POINTER_MAX) {
  ------------------
  |  |  159|   489k|#define POINTER_MAX ((void*) UINTPTR_MAX)
  ------------------
  |  Branch (643:16): [True: 248k, False: 241k]
  ------------------
  644|   248k|                if (isempty(p))
  ------------------
  |  Branch (644:21): [True: 3.94k, False: 244k]
  ------------------
  645|  3.94k|                        continue;
  646|       |
  647|   244k|                if (!slash && p[0] != '/')
  ------------------
  |  Branch (647:21): [True: 144k, False: 100k]
  |  Branch (647:31): [True: 144k, False: 0]
  ------------------
  648|   144k|                        *(q++) = '/';
  649|       |
  650|   244k|                q = stpcpy(q, p);
  651|   244k|                slash = endswith(p, "/");
  652|   244k|        }
  653|   241k|        va_end(ap);
  654|       |
  655|   241k|        return nx;
  656|   241k|}
path_find_first_component:
  882|   915k|int path_find_first_component(const char **p, bool accept_dot_dot, const char **ret) {
  883|   915k|        const char *q, *first, *end_first, *next;
  884|   915k|        size_t len;
  885|       |
  886|   915k|        assert(p);
  ------------------
  |  |   72|   915k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   915k|        do {                                                            \
  |  |  |  |   59|   915k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   915k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 915k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   915k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   915k|        } while (false)
  |  |  ------------------
  ------------------
  887|       |
  888|       |        /* When a path is input, then returns the pointer to the first component and its length, and
  889|       |         * move the input pointer to the next component or nul. This skips both over any '/'
  890|       |         * immediately *before* and *after* the first component before returning.
  891|       |         *
  892|       |         * Examples
  893|       |         *   Input:  p: "//.//aaa///bbbbb/cc"
  894|       |         *   Output: p: "bbbbb///cc"
  895|       |         *           ret: "aaa///bbbbb/cc"
  896|       |         *           return value: 3 (== strlen("aaa"))
  897|       |         *
  898|       |         *   Input:  p: "aaa//"
  899|       |         *   Output: p: (pointer to NUL)
  900|       |         *           ret: "aaa//"
  901|       |         *           return value: 3 (== strlen("aaa"))
  902|       |         *
  903|       |         *   Input:  p: "/", ".", ""
  904|       |         *   Output: p: (pointer to NUL)
  905|       |         *           ret: NULL
  906|       |         *           return value: 0
  907|       |         *
  908|       |         *   Input:  p: NULL
  909|       |         *   Output: p: NULL
  910|       |         *           ret: NULL
  911|       |         *           return value: 0
  912|       |         *
  913|       |         *   Input:  p: "(too long component)"
  914|       |         *   Output: return value: -EINVAL
  915|       |         *
  916|       |         *   (when accept_dot_dot is false)
  917|       |         *   Input:  p: "//..//aaa///bbbbb/cc"
  918|       |         *   Output: return value: -EINVAL
  919|       |         */
  920|       |
  921|   915k|        q = *p;
  922|       |
  923|   915k|        first = skip_slash_or_dot(q);
  924|   915k|        if (isempty(first)) {
  ------------------
  |  Branch (924:13): [True: 161k, False: 754k]
  ------------------
  925|   161k|                *p = first;
  926|   161k|                if (ret)
  ------------------
  |  Branch (926:21): [True: 149k, False: 11.2k]
  ------------------
  927|   149k|                        *ret = NULL;
  928|   161k|                return 0;
  929|   161k|        }
  930|   754k|        if (streq(first, ".")) {
  ------------------
  |  |   46|   754k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 261, False: 754k]
  |  |  ------------------
  ------------------
  931|    261|                *p = first + 1;
  932|    261|                if (ret)
  ------------------
  |  Branch (932:21): [True: 261, False: 0]
  ------------------
  933|    261|                        *ret = NULL;
  934|    261|                return 0;
  935|    261|        }
  936|       |
  937|   754k|        end_first = strchrnul(first, '/');
  938|   754k|        len = end_first - first;
  939|       |
  940|   754k|        if (len > NAME_MAX)
  ------------------
  |  Branch (940:13): [True: 813, False: 753k]
  ------------------
  941|    813|                return -EINVAL;
  942|   753k|        if (!accept_dot_dot && len == 2 && first[0] == '.' && first[1] == '.')
  ------------------
  |  Branch (942:13): [True: 128k, False: 625k]
  |  Branch (942:32): [True: 1.69k, False: 126k]
  |  Branch (942:44): [True: 640, False: 1.05k]
  |  Branch (942:63): [True: 216, False: 424]
  ------------------
  943|    216|                return -EINVAL;
  944|       |
  945|   753k|        next = skip_slash_or_dot(end_first);
  946|       |
  947|   753k|        *p = next + streq(next, ".");
  ------------------
  |  |   46|   753k|#define streq(a,b) (strcmp((a),(b)) == 0)
  ------------------
  948|   753k|        if (ret)
  ------------------
  |  Branch (948:13): [True: 570k, False: 182k]
  ------------------
  949|   570k|                *ret = first;
  950|   753k|        return len;
  951|   753k|}
path_find_last_component:
  969|  14.6k|int path_find_last_component(const char *path, bool accept_dot_dot, const char **next, const char **ret) {
  970|  14.6k|        const char *q, *last_end, *last_begin;
  971|  14.6k|        size_t len;
  972|       |
  973|       |        /* Similar to path_find_first_component(), but search components from the end.
  974|       |        *
  975|       |        * Examples
  976|       |        *   Input:  path: "//.//aaa///bbbbb/cc//././"
  977|       |        *           next: NULL
  978|       |        *   Output: next: "/cc//././"
  979|       |        *           ret: "cc//././"
  980|       |        *           return value: 2 (== strlen("cc"))
  981|       |        *
  982|       |        *   Input:  path: "//.//aaa///bbbbb/cc//././"
  983|       |        *           next: "/cc//././"
  984|       |        *   Output: next: "///bbbbb/cc//././"
  985|       |        *           ret: "bbbbb/cc//././"
  986|       |        *           return value: 5 (== strlen("bbbbb"))
  987|       |        *
  988|       |        *   Input:  path: "//.//aaa///bbbbb/cc//././"
  989|       |        *           next: "///bbbbb/cc//././"
  990|       |        *   Output: next: "//.//aaa///bbbbb/cc//././" (next == path)
  991|       |        *           ret: "aaa///bbbbb/cc//././"
  992|       |        *           return value: 3 (== strlen("aaa"))
  993|       |        *
  994|       |        *   Input:  path: "/", ".", "", or NULL
  995|       |        *   Output: next: equivalent to path
  996|       |        *           ret: NULL
  997|       |        *           return value: 0
  998|       |        *
  999|       |        *   Input:  path: "(too long component)"
 1000|       |        *   Output: return value: -EINVAL
 1001|       |        *
 1002|       |        *   (when accept_dot_dot is false)
 1003|       |        *   Input:  path: "//..//aaa///bbbbb/cc/..//"
 1004|       |        *   Output: return value: -EINVAL
 1005|       |        */
 1006|       |
 1007|  14.6k|        if (isempty(path)) {
  ------------------
  |  Branch (1007:13): [True: 0, False: 14.6k]
  ------------------
 1008|      0|                if (next)
  ------------------
  |  Branch (1008:21): [True: 0, False: 0]
  ------------------
 1009|      0|                        *next = path;
 1010|      0|                if (ret)
  ------------------
  |  Branch (1010:21): [True: 0, False: 0]
  ------------------
 1011|      0|                        *ret = NULL;
 1012|      0|                return 0;
 1013|      0|        }
 1014|       |
 1015|  14.6k|        if (next && *next) {
  ------------------
  |  Branch (1015:13): [True: 14.6k, False: 0]
  |  Branch (1015:21): [True: 0, False: 14.6k]
  ------------------
 1016|      0|                if (*next < path || *next > path + strlen(path))
  ------------------
  |  Branch (1016:21): [True: 0, False: 0]
  |  Branch (1016:37): [True: 0, False: 0]
  ------------------
 1017|      0|                        return -EINVAL;
 1018|      0|                if (*next == path) {
  ------------------
  |  Branch (1018:21): [True: 0, False: 0]
  ------------------
 1019|      0|                        if (ret)
  ------------------
  |  Branch (1019:29): [True: 0, False: 0]
  ------------------
 1020|      0|                                *ret = NULL;
 1021|      0|                        return 0;
 1022|      0|                }
 1023|      0|                if (!IN_SET(**next, '\0', '/'))
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (1023:21): [True: 0, False: 0]
  ------------------
 1024|      0|                        return -EINVAL;
 1025|      0|                q = *next - 1;
 1026|      0|        } else
 1027|  14.6k|                q = path + strlen(path) - 1;
 1028|       |
 1029|  14.6k|        q = skip_slash_or_dot_backward(path, q);
 1030|  14.6k|        if (!q || /* the root directory */
  ------------------
  |  Branch (1030:13): [True: 0, False: 14.6k]
  ------------------
 1031|  14.6k|            (q == path && *q == '.')) { /* path is "." or "./" */
  ------------------
  |  Branch (1031:14): [True: 0, False: 14.6k]
  |  Branch (1031:27): [True: 0, False: 0]
  ------------------
 1032|      0|                if (next)
  ------------------
  |  Branch (1032:21): [True: 0, False: 0]
  ------------------
 1033|      0|                        *next = path;
 1034|      0|                if (ret)
  ------------------
  |  Branch (1034:21): [True: 0, False: 0]
  ------------------
 1035|      0|                        *ret = NULL;
 1036|      0|                return 0;
 1037|      0|        }
 1038|       |
 1039|  14.6k|        last_end = q + 1;
 1040|       |
 1041|   308k|        while (q && *q != '/')
  ------------------
  |  Branch (1041:16): [True: 308k, False: 0]
  |  Branch (1041:21): [True: 293k, False: 14.6k]
  ------------------
 1042|   293k|                q = PTR_SUB1(q, path);
  ------------------
  |  |  196|   308k|        ({                                               \
  |  |  197|   308k|                typeof(p) _q = (p);                      \
  |  |  198|   308k|                _q && _q > (base) ? &_q[-1] : NULL;      \
  |  |  ------------------
  |  |  |  Branch (198:17): [True: 293k, False: 0]
  |  |  |  Branch (198:23): [True: 293k, False: 0]
  |  |  ------------------
  |  |  199|   308k|        })
  ------------------
 1043|       |
 1044|  14.6k|        last_begin = q ? q + 1 : path;
  ------------------
  |  Branch (1044:22): [True: 14.6k, False: 0]
  ------------------
 1045|  14.6k|        len = last_end - last_begin;
 1046|       |
 1047|  14.6k|        if (len > NAME_MAX)
  ------------------
  |  Branch (1047:13): [True: 0, False: 14.6k]
  ------------------
 1048|      0|                return -EINVAL;
 1049|  14.6k|        if (!accept_dot_dot && len == 2 && strneq(last_begin, "..", 2))
  ------------------
  |  |   47|      0|#define strneq(a, b, n) (strncmp((a), (b), (n)) == 0)
  |  |  ------------------
  |  |  |  Branch (47:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1049:13): [True: 14.6k, False: 0]
  |  Branch (1049:32): [True: 0, False: 14.6k]
  ------------------
 1050|      0|                return -EINVAL;
 1051|       |
 1052|  14.6k|        if (next) {
  ------------------
  |  Branch (1052:13): [True: 14.6k, False: 0]
  ------------------
 1053|  14.6k|                q = skip_slash_or_dot_backward(path, q);
 1054|  14.6k|                *next = q ? q + 1 : path;
  ------------------
  |  Branch (1054:25): [True: 14.6k, False: 0]
  ------------------
 1055|  14.6k|        }
 1056|       |
 1057|  14.6k|        if (ret)
  ------------------
  |  Branch (1057:13): [True: 14.6k, False: 0]
  ------------------
 1058|  14.6k|                *ret = last_begin;
 1059|  14.6k|        return len;
 1060|  14.6k|}
path_extract_filename:
 1105|  14.6k|int path_extract_filename(const char *path, char **ret) {
 1106|  14.6k|        _cleanup_free_ char *a = NULL;
  ------------------
  |  |   82|  14.6k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  14.6k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1107|  14.6k|        const char *c, *next = NULL;
 1108|  14.6k|        int r;
 1109|       |
 1110|       |        /* Extracts the filename part (i.e. right-most component) from a path, i.e. string that passes
 1111|       |         * filename_is_valid(). A wrapper around last_path_component(), but eats up trailing
 1112|       |         * slashes. Returns:
 1113|       |         *
 1114|       |         * -EINVAL        → if the path is not valid
 1115|       |         * -EADDRNOTAVAIL → if only a directory was specified, but no filename, i.e. the root dir
 1116|       |         *                  itself or "." is specified
 1117|       |         * -ENOMEM        → no memory
 1118|       |         *
 1119|       |         * Returns >= 0 on success. If the input path has a trailing slash, returns O_DIRECTORY, to
 1120|       |         * indicate the referenced file must be a directory.
 1121|       |         *
 1122|       |         * This function guarantees to return a fully valid filename, i.e. one that passes
 1123|       |         * filename_is_valid() – this means "." and ".." are not accepted. */
 1124|       |
 1125|  14.6k|        if (!path_is_valid(path))
  ------------------
  |  Branch (1125:13): [True: 0, False: 14.6k]
  ------------------
 1126|      0|                return -EINVAL;
 1127|       |
 1128|  14.6k|        r = path_find_last_component(path, false, &next, &c);
 1129|  14.6k|        if (r < 0)
  ------------------
  |  Branch (1129:13): [True: 0, False: 14.6k]
  ------------------
 1130|      0|                return r;
 1131|  14.6k|        if (r == 0) /* root directory */
  ------------------
  |  Branch (1131:13): [True: 0, False: 14.6k]
  ------------------
 1132|      0|                return -EADDRNOTAVAIL;
 1133|       |
 1134|  14.6k|        a = strndup(c, r);
 1135|  14.6k|        if (!a)
  ------------------
  |  Branch (1135:13): [True: 0, False: 14.6k]
  ------------------
 1136|      0|                return -ENOMEM;
 1137|       |
 1138|  14.6k|        *ret = TAKE_PTR(a);
  ------------------
  |  |  388|  14.6k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  14.6k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  14.6k|        ({                                                       \
  |  |  |  |  |  |  381|  14.6k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  14.6k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  14.6k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  14.6k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  14.6k|                _var_;                                           \
  |  |  |  |  |  |  386|  14.6k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1139|  14.6k|        return strlen(c) > (size_t) r ? O_DIRECTORY : 0;
  ------------------
  |  Branch (1139:16): [True: 0, False: 14.6k]
  ------------------
 1140|  14.6k|}
filename_part_is_valid:
 1184|  2.01k|bool filename_part_is_valid(const char *p) {
 1185|  2.01k|        const char *e;
 1186|       |
 1187|       |        /* Checks f the specified string is OK to be *part* of a filename. This is different from
 1188|       |         * filename_is_valid() as "." and ".." and "" are OK by this call, but not by filename_is_valid(). */
 1189|       |
 1190|  2.01k|        if (!p)
  ------------------
  |  Branch (1190:13): [True: 0, False: 2.01k]
  ------------------
 1191|      0|                return false;
 1192|       |
 1193|  2.01k|        e = strchrnul(p, '/');
 1194|  2.01k|        if (*e != 0)
  ------------------
  |  Branch (1194:13): [True: 268, False: 1.74k]
  ------------------
 1195|    268|                return false;
 1196|       |
 1197|  1.74k|        if (e - p > NAME_MAX) /* NAME_MAX is counted *without* the trailing NUL byte */
  ------------------
  |  Branch (1197:13): [True: 244, False: 1.50k]
  ------------------
 1198|    244|                return false;
 1199|       |
 1200|  1.50k|        return true;
 1201|  1.74k|}
filename_is_valid:
 1203|  2.79k|bool filename_is_valid(const char *p) {
 1204|       |
 1205|  2.79k|        if (isempty(p))
  ------------------
  |  Branch (1205:13): [True: 276, False: 2.51k]
  ------------------
 1206|    276|                return false;
 1207|       |
 1208|  2.51k|        if (dot_or_dot_dot(p)) /* Yes, in this context we consider "." and ".." invalid */
  ------------------
  |  Branch (1208:13): [True: 504, False: 2.01k]
  ------------------
 1209|    504|                return false;
 1210|       |
 1211|  2.01k|        return filename_part_is_valid(p);
 1212|  2.51k|}
path_is_valid_full:
 1214|   127k|bool path_is_valid_full(const char *p, bool accept_dot_dot) {
 1215|   127k|        if (isempty(p))
  ------------------
  |  Branch (1215:13): [True: 0, False: 127k]
  ------------------
 1216|      0|                return false;
 1217|       |
 1218|   194k|        for (const char *e = p;;) {
 1219|   194k|                int r;
 1220|       |
 1221|   194k|                r = path_find_first_component(&e, accept_dot_dot, NULL);
 1222|   194k|                if (r < 0)
  ------------------
  |  Branch (1222:21): [True: 490, False: 193k]
  ------------------
 1223|    490|                        return false;
 1224|       |
 1225|   193k|                if (e - p >= PATH_MAX) /* Already reached the maximum length for a path? (PATH_MAX is counted
  ------------------
  |  Branch (1225:21): [True: 20, False: 193k]
  ------------------
 1226|       |                                        * *with* the trailing NUL byte) */
 1227|     20|                        return false;
 1228|   193k|                if (*e == 0)           /* End of string? Yay! */
  ------------------
  |  Branch (1228:21): [True: 127k, False: 66.3k]
  ------------------
 1229|   127k|                        return true;
 1230|   193k|        }
 1231|   127k|}
path_is_normalized:
 1233|  9.91k|bool path_is_normalized(const char *p) {
 1234|  9.91k|        if (!path_is_safe(p))
  ------------------
  |  Branch (1234:13): [True: 216, False: 9.69k]
  ------------------
 1235|    216|                return false;
 1236|       |
 1237|  9.69k|        if (streq(p, ".") || startswith(p, "./") || endswith(p, "/.") || strstr(p, "/./"))
  ------------------
  |  |   46|  19.3k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 0, False: 9.69k]
  |  |  ------------------
  ------------------
  |  Branch (1237:30): [True: 0, False: 9.69k]
  |  Branch (1237:53): [True: 0, False: 9.69k]
  |  Branch (1237:74): [True: 0, False: 9.69k]
  ------------------
 1238|      0|                return false;
 1239|       |
 1240|  9.69k|        if (strstr(p, "//"))
  ------------------
  |  Branch (1240:13): [True: 0, False: 9.69k]
  ------------------
 1241|      0|                return false;
 1242|       |
 1243|  9.69k|        return true;
 1244|  9.69k|}
dot_or_dot_dot:
 1367|   135k|bool dot_or_dot_dot(const char *path) {
 1368|   135k|        if (!path)
  ------------------
  |  Branch (1368:13): [True: 0, False: 135k]
  ------------------
 1369|      0|                return false;
 1370|   135k|        if (path[0] != '.')
  ------------------
  |  Branch (1370:13): [True: 133k, False: 1.62k]
  ------------------
 1371|   133k|                return false;
 1372|  1.62k|        if (path[1] == 0)
  ------------------
  |  Branch (1372:13): [True: 678, False: 951]
  ------------------
 1373|    678|                return true;
 1374|    951|        if (path[1] != '.')
  ------------------
  |  Branch (1374:13): [True: 553, False: 398]
  ------------------
 1375|    553|                return false;
 1376|       |
 1377|    398|        return path[2] == 0;
 1378|    951|}
empty_or_root:
 1394|   321k|bool empty_or_root(const char *path) {
 1395|       |
 1396|       |        /* For operations relative to some root directory, returns true if the specified root directory is
 1397|       |         * redundant, i.e. either / or NULL or the empty string or any equivalent. */
 1398|       |
 1399|   321k|        if (isempty(path))
  ------------------
  |  Branch (1399:13): [True: 321k, False: 0]
  ------------------
 1400|   321k|                return true;
 1401|       |
 1402|      0|        return path_equal(path, "/");
 1403|   321k|}
path-util.c:skip_slash_or_dot:
  869|  1.66M|static const char* skip_slash_or_dot(const char *p) {
  870|  2.56M|        for (; !isempty(p); p++) {
  ------------------
  |  Branch (870:16): [True: 2.22M, False: 341k]
  ------------------
  871|  2.22M|                if (*p == '/')
  ------------------
  |  Branch (871:21): [True: 893k, False: 1.32M]
  ------------------
  872|   893k|                        continue;
  873|  1.32M|                if (startswith(p, "./")) {
  ------------------
  |  Branch (873:21): [True: 701, False: 1.32M]
  ------------------
  874|    701|                        p++;
  875|    701|                        continue;
  876|    701|                }
  877|  1.32M|                break;
  878|  1.32M|        }
  879|  1.66M|        return p;
  880|  1.66M|}
path-util.c:skip_slash_or_dot_backward:
  953|  29.3k|static const char* skip_slash_or_dot_backward(const char *path, const char *q) {
  954|  29.3k|        assert(path);
  ------------------
  |  |   72|  29.3k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  29.3k|        do {                                                            \
  |  |  |  |   59|  29.3k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  29.3k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 29.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  29.3k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  29.3k|        } while (false)
  |  |  ------------------
  ------------------
  955|  29.3k|        assert(!q || q >= path);
  ------------------
  |  |   72|  29.3k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  29.3k|        do {                                                            \
  |  |  |  |   59|  29.3k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  58.7k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 29.3k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 29.3k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 29.3k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  29.3k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  29.3k|        } while (false)
  |  |  ------------------
  ------------------
  956|       |
  957|  44.0k|        for (; q; q = PTR_SUB1(q, path)) {
  ------------------
  |  |  196|  14.6k|        ({                                               \
  |  |  197|  14.6k|                typeof(p) _q = (p);                      \
  |  |  198|  14.6k|                _q && _q > (base) ? &_q[-1] : NULL;      \
  |  |  ------------------
  |  |  |  Branch (198:17): [True: 14.6k, False: 0]
  |  |  |  Branch (198:23): [True: 14.6k, False: 0]
  |  |  ------------------
  |  |  199|  14.6k|        })
  ------------------
  |  Branch (957:16): [True: 44.0k, False: 0]
  ------------------
  958|  44.0k|                if (*q == '/')
  ------------------
  |  Branch (958:21): [True: 14.6k, False: 29.3k]
  ------------------
  959|  14.6k|                        continue;
  960|  29.3k|                if (q > path && strneq(q - 1, "/.", 2))
  ------------------
  |  |   47|  29.3k|#define strneq(a, b, n) (strncmp((a), (b), (n)) == 0)
  |  |  ------------------
  |  |  |  Branch (47:25): [True: 0, False: 29.3k]
  |  |  ------------------
  ------------------
  |  Branch (960:21): [True: 29.3k, False: 0]
  ------------------
  961|      0|                        continue;
  962|  29.3k|                if (q == path && *q == '.')
  ------------------
  |  Branch (962:21): [True: 0, False: 29.3k]
  |  Branch (962:34): [True: 0, False: 0]
  ------------------
  963|      0|                        continue;
  964|  29.3k|                break;
  965|  29.3k|        }
  966|  29.3k|        return q;
  967|  29.3k|}

parse-helpers.c:path_is_absolute:
   29|  10.6k|static inline bool path_is_absolute(const char *p) {
   30|  10.6k|        if (!p) /* A NULL pointer is definitely not an absolute path */
  ------------------
  |  Branch (30:13): [True: 0, False: 10.6k]
  ------------------
   31|      0|                return false;
   32|       |
   33|  10.6k|        return p[0] == '/';
   34|  10.6k|}
parse-helpers.c:path_is_valid:
  143|  10.1k|static inline bool path_is_valid(const char *p) {
  144|  10.1k|        return path_is_valid_full(p, /* accept_dot_dot= */ true);
  145|  10.1k|}
chase.c:path_is_safe:
  146|  93.1k|static inline bool path_is_safe(const char *p) {
  147|  93.1k|        return path_is_valid_full(p, /* accept_dot_dot= */ false);
  148|  93.1k|}
chase.c:path_startswith:
   49|  96.2k|static inline char* path_startswith(const char *path, const char *prefix) {
   50|  96.2k|        return path_startswith_full(path, prefix, 0);
   51|  96.2k|}
fileio.c:path_is_absolute:
   29|    788|static inline bool path_is_absolute(const char *p) {
   30|    788|        if (!p) /* A NULL pointer is definitely not an absolute path */
  ------------------
  |  Branch (30:13): [True: 0, False: 788]
  ------------------
   31|      0|                return false;
   32|       |
   33|    788|        return p[0] == '/';
   34|    788|}
hash-funcs.c:path_is_absolute:
   29|  9.97k|static inline bool path_is_absolute(const char *p) {
   30|  9.97k|        if (!p) /* A NULL pointer is definitely not an absolute path */
  ------------------
  |  Branch (30:13): [True: 0, False: 9.97k]
  ------------------
   31|      0|                return false;
   32|       |
   33|  9.97k|        return p[0] == '/';
   34|  9.97k|}
path-util.c:path_is_absolute:
   29|   136k|static inline bool path_is_absolute(const char *p) {
   30|   136k|        if (!p) /* A NULL pointer is definitely not an absolute path */
  ------------------
  |  Branch (30:13): [True: 0, False: 136k]
  ------------------
   31|      0|                return false;
   32|       |
   33|   136k|        return p[0] == '/';
   34|   136k|}
path-util.c:path_is_valid:
  143|  14.6k|static inline bool path_is_valid(const char *p) {
  144|  14.6k|        return path_is_valid_full(p, /* accept_dot_dot= */ true);
  145|  14.6k|}
path-util.c:path_startswith:
   49|  34.5k|static inline char* path_startswith(const char *path, const char *prefix) {
   50|  34.5k|        return path_startswith_full(path, prefix, 0);
   51|  34.5k|}
path-util.c:path_is_safe:
  146|  9.91k|static inline bool path_is_safe(const char *p) {
  147|  9.91k|        return path_is_valid_full(p, /* accept_dot_dot= */ false);
  148|  9.91k|}
stat-util.c:path_equal:
   54|  13.0k|static inline bool path_equal(const char *a, const char *b) {
   55|  13.0k|        return path_compare(a, b) == 0;
   56|  13.0k|}
stat-util.c:path_startswith:
   49|  13.0k|static inline char* path_startswith(const char *path, const char *prefix) {
   50|  13.0k|        return path_startswith_full(path, prefix, 0);
   51|  13.0k|}

proc_cmdline_strv:
  161|     72|int proc_cmdline_strv(char ***ret) {
  162|     72|        return proc_cmdline_strv_internal(ret, /* filter_pid1_args = */ false);
  163|     72|}
proc-cmdline.c:proc_cmdline_strv_internal:
  126|     72|static int proc_cmdline_strv_internal(char ***ret, bool filter_pid1_args) {
  127|     72|        const char *e;
  128|     72|        int r;
  129|       |
  130|     72|        assert(ret);
  ------------------
  |  |   72|     72|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     72|        do {                                                            \
  |  |  |  |   59|     72|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     72|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 72]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     72|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     72|        } while (false)
  |  |  ------------------
  ------------------
  131|       |
  132|       |        /* For testing purposes it is sometimes useful to be able to override what we consider /proc/cmdline to be */
  133|     72|        e = secure_getenv("SYSTEMD_PROC_CMDLINE");
  134|     72|        if (e)
  ------------------
  |  Branch (134:13): [True: 0, False: 72]
  ------------------
  135|      0|                return strv_split_full(ret, e, NULL, EXTRACT_UNQUOTE|EXTRACT_RELAX|EXTRACT_RETAIN_ESCAPE);
  136|       |
  137|     72|        if (detect_container() > 0) {
  ------------------
  |  Branch (137:13): [True: 72, False: 0]
  ------------------
  138|     72|                _cleanup_strv_free_ char **args = NULL;
  ------------------
  |  |   21|     72|#define _cleanup_strv_free_ _cleanup_(strv_freep)
  |  |  ------------------
  |  |  |  |   78|     72|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  139|       |
  140|     72|                r = pid_get_cmdline_strv(1, /* flags = */ 0, &args);
  141|     72|                if (r < 0)
  ------------------
  |  Branch (141:21): [True: 0, False: 72]
  ------------------
  142|      0|                        return r;
  143|       |
  144|     72|                if (filter_pid1_args)
  ------------------
  |  Branch (144:21): [True: 0, False: 72]
  ------------------
  145|      0|                        return proc_cmdline_filter_pid1_args(args, ret);
  146|       |
  147|     72|                *ret = TAKE_PTR(args);
  ------------------
  |  |  388|     72|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|     72|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|     72|        ({                                                       \
  |  |  |  |  |  |  381|     72|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|     72|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|     72|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|     72|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|     72|                _var_;                                           \
  |  |  |  |  |  |  386|     72|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  148|     72|                return 0;
  149|       |
  150|     72|        } else {
  151|      0|                _cleanup_free_ char *s = NULL;
  ------------------
  |  |   82|      0|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  152|       |
  153|      0|                r = read_full_file("/proc/cmdline", &s, NULL);
  154|      0|                if (r < 0)
  ------------------
  |  Branch (154:21): [True: 0, False: 0]
  ------------------
  155|      0|                        return r;
  156|       |
  157|      0|                return strv_split_full(ret, s, NULL, EXTRACT_UNQUOTE|EXTRACT_RELAX|EXTRACT_RETAIN_ESCAPE);
  158|      0|        }
  159|     72|}

pid_get_cmdline_strv:
  305|     72|int pid_get_cmdline_strv(pid_t pid, ProcessCmdlineFlags flags, char ***ret) {
  306|     72|        _cleanup_free_ char *t = NULL;
  ------------------
  |  |   82|     72|#define _cleanup_free_ _cleanup_(freep)
  ------------------
  307|     72|        char **args;
  308|     72|        size_t k;
  309|     72|        int r;
  310|       |
  311|     72|        assert(pid >= 0);
  312|     72|        assert((flags & ~PROCESS_CMDLINE_COMM_FALLBACK) == 0);
  313|     72|        assert(ret);
  314|       |
  315|     72|        r = pid_get_cmdline_nulstr(pid, SIZE_MAX, flags, &t, &k);
  316|     72|        if (r < 0)
  ------------------
  |  Branch (316:13): [True: 0, False: 72]
  ------------------
  317|      0|                return r;
  318|       |
  319|     72|        args = strv_parse_nulstr_full(t, k, /* drop_trailing_nuls = */ true);
  320|     72|        if (!args)
  ------------------
  |  Branch (320:13): [True: 0, False: 72]
  ------------------
  321|      0|                return -ENOMEM;
  322|       |
  323|     72|        *ret = args;
  324|     72|        return 0;
  325|     72|}
is_main_thread:
 1239|  32.0k|bool is_main_thread(void) {
 1240|  32.0k|        static thread_local int cached = -1;
 1241|       |
 1242|  32.0k|        if (cached < 0)
  ------------------
  |  Branch (1242:13): [True: 1, False: 32.0k]
  ------------------
 1243|      1|                cached = getpid_cached() == gettid();
 1244|       |
 1245|  32.0k|        return cached;
 1246|  32.0k|}
getpid_cached:
 1387|  49.2k|pid_t getpid_cached(void) {
 1388|  49.2k|        static bool installed = false;
 1389|  49.2k|        pid_t current_value = CACHED_PID_UNSET;
  ------------------
  |  | 1377|  49.2k|#define CACHED_PID_UNSET ((pid_t) 0)
  ------------------
 1390|       |
 1391|       |        /* getpid_cached() is much like getpid(), but caches the value in local memory, to avoid having to invoke a
 1392|       |         * system call each time. This restores glibc behaviour from before 2.24, when getpid() was unconditionally
 1393|       |         * cached. Starting with 2.24 getpid() started to become prohibitively expensive when used for detecting when
 1394|       |         * objects were used across fork()s. With this caching the old behaviour is somewhat restored.
 1395|       |         *
 1396|       |         * https://bugzilla.redhat.com/show_bug.cgi?id=1443976
 1397|       |         * https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=c579f48edba88380635ab98cb612030e3ed8691e
 1398|       |         */
 1399|       |
 1400|  49.2k|        (void) __atomic_compare_exchange_n(
 1401|  49.2k|                        &cached_pid,
 1402|  49.2k|                        &current_value,
 1403|  49.2k|                        CACHED_PID_BUSY,
  ------------------
  |  | 1378|  49.2k|#define CACHED_PID_BUSY ((pid_t) -1)
  ------------------
 1404|  49.2k|                        false,
 1405|  49.2k|                        __ATOMIC_SEQ_CST,
 1406|  49.2k|                        __ATOMIC_SEQ_CST);
 1407|       |
 1408|  49.2k|        switch (current_value) {
 1409|       |
 1410|      1|        case CACHED_PID_UNSET: { /* Not initialized yet, then do so now */
  ------------------
  |  | 1377|      1|#define CACHED_PID_UNSET ((pid_t) 0)
  ------------------
  |  Branch (1410:9): [True: 1, False: 49.2k]
  ------------------
 1411|      1|                pid_t new_pid;
 1412|       |
 1413|      1|                new_pid = getpid();
 1414|       |
 1415|      1|                if (!installed) {
  ------------------
  |  Branch (1415:21): [True: 1, False: 0]
  ------------------
 1416|       |                        /* __register_atfork() either returns 0 or -ENOMEM, in its glibc implementation. Since it's
 1417|       |                         * only half-documented (glibc doesn't document it but LSB does — though only superficially)
 1418|       |                         * we'll check for errors only in the most generic fashion possible. */
 1419|       |
 1420|      1|                        if (pthread_atfork(NULL, NULL, reset_cached_pid) != 0) {
  ------------------
  |  Branch (1420:29): [True: 0, False: 1]
  ------------------
 1421|       |                                /* OOM? Let's try again later */
 1422|      0|                                cached_pid = CACHED_PID_UNSET;
  ------------------
  |  | 1377|      0|#define CACHED_PID_UNSET ((pid_t) 0)
  ------------------
 1423|      0|                                return new_pid;
 1424|      0|                        }
 1425|       |
 1426|      1|                        installed = true;
 1427|      1|                }
 1428|       |
 1429|      1|                cached_pid = new_pid;
 1430|      1|                return new_pid;
 1431|      1|        }
 1432|       |
 1433|      0|        case CACHED_PID_BUSY: /* Somebody else is currently initializing */
  ------------------
  |  | 1378|      0|#define CACHED_PID_BUSY ((pid_t) -1)
  ------------------
  |  Branch (1433:9): [True: 0, False: 49.2k]
  ------------------
 1434|      0|                return getpid();
 1435|       |
 1436|  49.2k|        default: /* Properly initialized */
  ------------------
  |  Branch (1436:9): [True: 49.2k, False: 1]
  ------------------
 1437|  49.2k|                return current_value;
 1438|  49.2k|        }
 1439|  49.2k|}
process-util.c:pid_get_cmdline_nulstr:
  161|     72|                size_t *ret_size) {
  162|       |
  163|     72|        _cleanup_free_ char *t = NULL;
  ------------------
  |  |   82|     72|#define _cleanup_free_ _cleanup_(freep)
  ------------------
  164|     72|        const char *p;
  165|     72|        size_t k;
  166|     72|        int r;
  167|       |
  168|       |        /* Retrieves a process' command line as a "sized nulstr", i.e. possibly without the last NUL, but
  169|       |         * with a specified size.
  170|       |         *
  171|       |         * If PROCESS_CMDLINE_COMM_FALLBACK is specified in flags and the process has no command line set
  172|       |         * (the case for kernel threads), or has a command line that resolves to the empty string, will
  173|       |         * return the "comm" name of the process instead. This will use at most _SC_ARG_MAX bytes of input
  174|       |         * data.
  175|       |         *
  176|       |         * Returns an error, 0 if output was read but is truncated, 1 otherwise.
  177|       |         */
  178|       |
  179|     72|        p = procfs_file_alloca(pid, "cmdline");
  ------------------
  |  |   12|     72|        ({                                                              \
  |  |   13|     72|                pid_t _pid_ = (pid);                                    \
  |  |   14|     72|                const char *_field_ = (field);                          \
  |  |   15|     72|                char *_r_;                                              \
  |  |   16|     72|                if (_pid_ == 0)                                         \
  |  |  ------------------
  |  |  |  Branch (16:21): [True: 0, False: 72]
  |  |  ------------------
  |  |   17|     72|                        _r_ = strjoina("/proc/self/", _field_);         \
  |  |  ------------------
  |  |  |  |   94|      0|        ({                                                              \
  |  |  |  |   95|      0|                const char *_appendees_[] = { a, __VA_ARGS__ };         \
  |  |  |  |   96|      0|                char *_d_, *_p_;                                        \
  |  |  |  |   97|      0|                size_t _len_ = 0;                                       \
  |  |  |  |   98|      0|                size_t _i_;                                             \
  |  |  |  |   99|      0|                for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (99:64): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|                        _len_ += strlen(_appendees_[_i_]);              \
  |  |  |  |  101|      0|                _p_ = _d_ = newa(char, _len_ + 1);                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|      0|        ({                                                              \
  |  |  |  |  |  |   30|      0|                size_t _n_ = (n);                                       \
  |  |  |  |  |  |   31|      0|                assert_se(MUL_ASSIGN_SAFE(&_n_, sizeof(t)));            \
  |  |  |  |  |  |   32|      0|                (t*) alloca_safe(_n_);                                  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   22|      0|        ({                                                              \
  |  |  |  |  |  |  |  |   23|      0|                size_t _nn_ = (n);                                      \
  |  |  |  |  |  |  |  |   24|      0|                assert(_nn_ <= ALLOCA_MAX);                             \
  |  |  |  |  |  |  |  |   25|      0|                alloca(_nn_ == 0 ? 1 : _nn_);                           \
  |  |  |  |  |  |  |  |   26|      0|        })                                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  102|      0|                for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (102:64): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|                        _p_ = stpcpy(_p_, _appendees_[_i_]);            \
  |  |  |  |  104|      0|                *_p_ = 0;                                               \
  |  |  |  |  105|      0|                _d_;                                                    \
  |  |  |  |  106|      0|        })
  |  |  ------------------
  |  |   18|     72|                else {                                                  \
  |  |   19|     72|                        assert(_pid_ > 0);                              \
  |  |   20|     72|                        _r_ = newa(char, STRLEN("/proc/") + DECIMAL_STR_MAX(pid_t) + 1 + strlen(_field_) + 1); \
  |  |  ------------------
  |  |  |  |   29|     72|        ({                                                              \
  |  |  |  |   30|    720|                size_t _n_ = (n);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   31|     72|                assert_se(MUL_ASSIGN_SAFE(&_n_, sizeof(t)));            \
  |  |  |  |   32|     72|                (t*) alloca_safe(_n_);                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|     72|        ({                                                              \
  |  |  |  |  |  |   23|     72|                size_t _nn_ = (n);                                      \
  |  |  |  |  |  |   24|     72|                assert(_nn_ <= ALLOCA_MAX);                             \
  |  |  |  |  |  |   25|     72|                alloca(_nn_ == 0 ? 1 : _nn_);                           \
  |  |  |  |  |  |   26|     72|        })                                                              \
  |  |  |  |  ------------------
  |  |  |  |   33|     72|        })
  |  |  ------------------
  |  |   21|     72|                        sprintf(_r_, "/proc/" PID_FMT "/%s", _pid_, _field_); \
  |  |   22|     72|                }                                                       \
  |  |   23|     72|                (const char*) _r_;                                      \
  |  |   24|     72|        })
  ------------------
  180|     72|        r = read_virtual_file(p, max_size, &t, &k); /* Let's assume that each input byte results in >= 1
  181|       |                                                     * columns of output. We ignore zero-width codepoints. */
  182|     72|        if (r == -ENOENT)
  ------------------
  |  Branch (182:13): [True: 0, False: 72]
  ------------------
  183|      0|                return -ESRCH;
  184|     72|        if (r < 0)
  ------------------
  |  Branch (184:13): [True: 0, False: 72]
  ------------------
  185|      0|                return r;
  186|       |
  187|     72|        if (k == 0) {
  ------------------
  |  Branch (187:13): [True: 0, False: 72]
  ------------------
  188|      0|                if (!(flags & PROCESS_CMDLINE_COMM_FALLBACK))
  ------------------
  |  Branch (188:21): [True: 0, False: 0]
  ------------------
  189|      0|                        return -ENOENT;
  190|       |
  191|       |                /* Kernel threads have no argv[] */
  192|      0|                _cleanup_free_ char *comm = NULL;
  ------------------
  |  |   82|      0|#define _cleanup_free_ _cleanup_(freep)
  ------------------
  193|       |
  194|      0|                r = pid_get_comm(pid, &comm);
  195|      0|                if (r < 0)
  ------------------
  |  Branch (195:21): [True: 0, False: 0]
  ------------------
  196|      0|                        return r;
  197|       |
  198|      0|                free(t);
  199|      0|                t = strjoin("[", comm, "]");
  ------------------
  |  |   91|      0|#define strjoin(a, ...) strextend_with_separator_internal(NULL, NULL, a, __VA_ARGS__, NULL)
  ------------------
  200|      0|                if (!t)
  ------------------
  |  Branch (200:21): [True: 0, False: 0]
  ------------------
  201|      0|                        return -ENOMEM;
  202|       |
  203|      0|                k = strlen(t);
  204|      0|                r = k <= max_size;
  205|      0|                if (r == 0) /* truncation */
  ------------------
  |  Branch (205:21): [True: 0, False: 0]
  ------------------
  206|      0|                        t[max_size] = '\0';
  207|      0|        }
  208|       |
  209|     72|        if (ret)
  ------------------
  |  Branch (209:13): [True: 72, False: 0]
  ------------------
  210|     72|                *ret = TAKE_PTR(t);
  211|     72|        if (ret_size)
  ------------------
  |  Branch (211:13): [True: 72, False: 0]
  ------------------
  212|     72|                *ret_size = k;
  213|       |
  214|     72|        return r;
  215|     72|}

random_bytes:
   69|  3.31k|void random_bytes(void *p, size_t n) {
   70|  3.31k|        static bool have_grndinsecure = true;
   71|       |
   72|  3.31k|        assert(p || n == 0);
  ------------------
  |  |   72|  3.31k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.31k|        do {                                                            \
  |  |  |  |   59|  3.31k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.31k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.31k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 3.31k, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.31k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.31k|        } while (false)
  |  |  ------------------
  ------------------
   73|       |
   74|  3.31k|        if (n == 0)
  ------------------
  |  Branch (74:13): [True: 0, False: 3.31k]
  ------------------
   75|      0|                return;
   76|       |
   77|  3.31k|        for (;;) {
   78|  3.31k|                ssize_t l;
   79|       |
   80|  3.31k|                l = getrandom(p, n, have_grndinsecure ? GRND_INSECURE : GRND_NONBLOCK);
  ------------------
  |  Branch (80:37): [True: 3.31k, False: 0]
  ------------------
   81|  3.31k|                if (l < 0 && errno == EINVAL && have_grndinsecure) {
  ------------------
  |  Branch (81:21): [True: 0, False: 3.31k]
  |  Branch (81:30): [True: 0, False: 0]
  |  Branch (81:49): [True: 0, False: 0]
  ------------------
   82|       |                        /* No GRND_INSECURE; fallback to GRND_NONBLOCK. */
   83|      0|                        have_grndinsecure = false;
   84|      0|                        continue;
   85|      0|                }
   86|  3.31k|                if (l <= 0)
  ------------------
  |  Branch (86:21): [True: 0, False: 3.31k]
  ------------------
   87|      0|                        break; /* Will block (with GRND_NONBLOCK), or unexpected error. Give up and fallback
   88|       |                                  to /dev/urandom. */
   89|       |
   90|  3.31k|                if ((size_t) l == n)
  ------------------
  |  Branch (90:21): [True: 3.31k, False: 0]
  ------------------
   91|  3.31k|                        return; /* Done reading, success. */
   92|       |
   93|      0|                p = (uint8_t *) p + l;
   94|      0|                n -= l;
   95|       |                /* Interrupted by a signal; keep going. */
   96|      0|        }
   97|       |
   98|      0|        _cleanup_close_ int fd = open("/dev/urandom", O_RDONLY|O_CLOEXEC|O_NOCTTY);
  ------------------
  |  |   60|      0|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
   99|      0|        if (fd >= 0 && loop_read_exact(fd, p, n, false) >= 0)
  ------------------
  |  Branch (99:13): [True: 0, False: 0]
  |  Branch (99:24): [True: 0, False: 0]
  ------------------
  100|      0|                return;
  101|       |
  102|       |        /* This is a terrible fallback. Oh well. */
  103|      0|        fallback_random_bytes(p, n);
  104|      0|}

rlimit_free_all:
  362|     84|void rlimit_free_all(struct rlimit **rl) {
  363|     84|        free_many((void**) rl, _RLIMIT_MAX);
  ------------------
  |  |    8|     84|#define _RLIMIT_MAX RLIMIT_NLIMITS
  ------------------
  364|     84|}

l2tp-tunnel.c:set_free:
   12|    180|static inline Set* set_free(Set *s) {
   13|    180|        return (Set*) _hashmap_free(HASHMAP_BASE(s));
  ------------------
  |  |   46|    180|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|    180|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|    180|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|    180|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|    180|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|    180|                (HashmapBase*)(h), \
  |  |   48|    180|                (void)0)
  ------------------
   14|    180|}
macvlan.c:set_free:
   12|    110|static inline Set* set_free(Set *s) {
   13|    110|        return (Set*) _hashmap_free(HASHMAP_BASE(s));
  ------------------
  |  |   46|    110|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|    110|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|    110|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|    110|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|    110|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|    110|                (HashmapBase*)(h), \
  |  |   48|    110|                (void)0)
  ------------------
   14|    110|}
vlan.c:set_free:
   12|  3.99k|static inline Set* set_free(Set *s) {
   13|  3.99k|        return (Set*) _hashmap_free(HASHMAP_BASE(s));
  ------------------
  |  |   46|  3.99k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  3.99k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  3.99k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  3.99k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  3.99k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  3.99k|                (HashmapBase*)(h), \
  |  |   48|  3.99k|                (void)0)
  ------------------
   14|  3.99k|}
wireguard.c:set_free:
   12|  2.15k|static inline Set* set_free(Set *s) {
   13|  2.15k|        return (Set*) _hashmap_free(HASHMAP_BASE(s));
  ------------------
  |  |   46|  2.15k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  2.15k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  2.15k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  2.15k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  2.15k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  2.15k|                (HashmapBase*)(h), \
  |  |   48|  2.15k|                (void)0)
  ------------------
   14|  2.15k|}
networkd-manager.c:set_free:
   12|  78.5k|static inline Set* set_free(Set *s) {
   13|  78.5k|        return (Set*) _hashmap_free(HASHMAP_BASE(s));
  ------------------
  |  |   46|  78.5k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  78.5k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  78.5k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  78.5k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  78.5k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  78.5k|                (HashmapBase*)(h), \
  |  |   48|  78.5k|                (void)0)
  ------------------
   14|  78.5k|}
networkd-route.c:set_remove:
   32|  4.51k|static inline void *set_remove(Set *s, const void *key) {
   33|  4.51k|        return _hashmap_remove(HASHMAP_BASE(s), key);
  ------------------
  |  |   46|  4.51k|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|  4.51k|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|  4.51k|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|  4.51k|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|  4.51k|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  4.51k|                (HashmapBase*)(h), \
  |  |   48|  4.51k|                (void)0)
  ------------------
   34|  4.51k|}
conf-parser.c:set_free:
   12|    325|static inline Set* set_free(Set *s) {
   13|    325|        return (Set*) _hashmap_free(HASHMAP_BASE(s));
  ------------------
  |  |   46|    325|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|    325|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|    325|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|    325|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|    325|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|    325|                (HashmapBase*)(h), \
  |  |   48|    325|                (void)0)
  ------------------
   14|    325|}
userdb.c:set_free:
   12|    835|static inline Set* set_free(Set *s) {
   13|    835|        return (Set*) _hashmap_free(HASHMAP_BASE(s));
  ------------------
  |  |   46|    835|        __builtin_choose_expr(PTR_COMPATIBLE_WITH_HASHMAP_BASE(h), \
  |  |  ------------------
  |  |  |  |   36|    835|        (__builtin_types_compatible_p(typeof(h), HashmapBase*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (36:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   37|    835|         __builtin_types_compatible_p(typeof(h), Hashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   38|    835|         __builtin_types_compatible_p(typeof(h), OrderedHashmap*) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   39|    835|         __builtin_types_compatible_p(typeof(h), Set*))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:10): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|    835|                (HashmapBase*)(h), \
  |  |   48|    835|                (void)0)
  ------------------
   14|    835|}

siphash24_init:
   53|   501k|void siphash24_init(struct siphash *state, const uint8_t k[static 16]) {
   54|   501k|        uint64_t k0, k1;
   55|       |
   56|   501k|        assert(state);
  ------------------
  |  |   72|   501k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   501k|        do {                                                            \
  |  |  |  |   59|   501k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   501k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 501k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   501k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   501k|        } while (false)
  |  |  ------------------
  ------------------
   57|   501k|        assert(k);
  ------------------
  |  |   72|   501k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   501k|        do {                                                            \
  |  |  |  |   59|   501k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   501k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 501k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   501k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   501k|        } while (false)
  |  |  ------------------
  ------------------
   58|       |
   59|   501k|        k0 = unaligned_read_le64(k);
   60|   501k|        k1 = unaligned_read_le64(k + 8);
   61|       |
   62|   501k|        *state = (struct siphash) {
   63|       |                /* "somepseudorandomlygeneratedbytes" */
   64|   501k|                .v0 = 0x736f6d6570736575ULL ^ k0,
   65|   501k|                .v1 = 0x646f72616e646f6dULL ^ k1,
   66|   501k|                .v2 = 0x6c7967656e657261ULL ^ k0,
   67|   501k|                .v3 = 0x7465646279746573ULL ^ k1,
   68|   501k|                .padding = 0,
   69|   501k|                .inlen = 0,
   70|   501k|        };
   71|   501k|}
siphash24_compress:
   73|  1.28M|void siphash24_compress(const void *_in, size_t inlen, struct siphash *state) {
   74|       |
   75|  1.28M|        const uint8_t *in = ASSERT_PTR(_in);
  ------------------
  |  |   81|  1.28M|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  1.28M|        ({                                 \
  |  |  |  |   85|  1.28M|                typeof(expr) var = (expr); \
  |  |  |  |   86|  1.28M|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  1.28M|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  1.28M|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  1.28M|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  1.28M|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  1.28M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.28M]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  1.28M|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  1.28M|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  1.28M|                var;                       \
  |  |  |  |   88|  1.28M|        })
  |  |  ------------------
  ------------------
   76|  1.28M|        const uint8_t *end = in + inlen;
   77|  1.28M|        size_t left = state->inlen & 7;
   78|  1.28M|        uint64_t m;
   79|       |
   80|  1.28M|        assert(state);
  ------------------
  |  |   72|  1.28M|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.28M|        do {                                                            \
  |  |  |  |   59|  1.28M|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.28M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.28M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.28M|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.28M|        } while (false)
  |  |  ------------------
  ------------------
   81|       |
   82|       |        /* Update total length */
   83|  1.28M|        state->inlen += inlen;
   84|       |
   85|       |        /* If padding exists, fill it out */
   86|  1.28M|        if (left > 0) {
  ------------------
  |  Branch (86:13): [True: 737k, False: 547k]
  ------------------
   87|  3.35M|                for ( ; in < end && left < 8; in ++, left ++)
  ------------------
  |  Branch (87:25): [True: 2.74M, False: 612k]
  |  Branch (87:37): [True: 2.62M, False: 125k]
  ------------------
   88|  2.62M|                        state->padding |= ((uint64_t) *in) << (left * 8);
   89|       |
   90|   737k|                if (in == end && left < 8)
  ------------------
  |  Branch (90:21): [True: 612k, False: 125k]
  |  Branch (90:34): [True: 534k, False: 77.7k]
  ------------------
   91|       |                        /* We did not have enough input to fill out the padding completely */
   92|   534k|                        return;
   93|       |
   94|       |#if ENABLE_DEBUG_SIPHASH
   95|       |                printf("(%3zu) v0 %08x %08x\n", state->inlen, (uint32_t) (state->v0 >> 32), (uint32_t) state->v0);
   96|       |                printf("(%3zu) v1 %08x %08x\n", state->inlen, (uint32_t) (state->v1 >> 32), (uint32_t) state->v1);
   97|       |                printf("(%3zu) v2 %08x %08x\n", state->inlen, (uint32_t) (state->v2 >> 32), (uint32_t) state->v2);
   98|       |                printf("(%3zu) v3 %08x %08x\n", state->inlen, (uint32_t) (state->v3 >> 32), (uint32_t) state->v3);
   99|       |                printf("(%3zu) compress padding %08x %08x\n", state->inlen, (uint32_t) (state->padding >> 32), (uint32_t)state->padding);
  100|       |#endif
  101|       |
  102|   203k|                state->v3 ^= state->padding;
  103|   203k|                sipround(state);
  104|   203k|                sipround(state);
  105|   203k|                state->v0 ^= state->padding;
  106|       |
  107|   203k|                state->padding = 0;
  108|   203k|        }
  109|       |
  110|   750k|        end -= (state->inlen % sizeof(uint64_t));
  111|       |
  112|  2.03M|        for ( ; in < end; in += 8) {
  ------------------
  |  Branch (112:17): [True: 1.28M, False: 750k]
  ------------------
  113|  1.28M|                m = unaligned_read_le64(in);
  114|       |#if ENABLE_DEBUG_SIPHASH
  115|       |                printf("(%3zu) v0 %08x %08x\n", state->inlen, (uint32_t) (state->v0 >> 32), (uint32_t) state->v0);
  116|       |                printf("(%3zu) v1 %08x %08x\n", state->inlen, (uint32_t) (state->v1 >> 32), (uint32_t) state->v1);
  117|       |                printf("(%3zu) v2 %08x %08x\n", state->inlen, (uint32_t) (state->v2 >> 32), (uint32_t) state->v2);
  118|       |                printf("(%3zu) v3 %08x %08x\n", state->inlen, (uint32_t) (state->v3 >> 32), (uint32_t) state->v3);
  119|       |                printf("(%3zu) compress %08x %08x\n", state->inlen, (uint32_t) (m >> 32), (uint32_t) m);
  120|       |#endif
  121|  1.28M|                state->v3 ^= m;
  122|  1.28M|                sipround(state);
  123|  1.28M|                sipround(state);
  124|  1.28M|                state->v0 ^= m;
  125|  1.28M|        }
  126|       |
  127|   750k|        left = state->inlen & 7;
  128|   750k|        switch (left) {
  ------------------
  |  Branch (128:17): [True: 0, False: 750k]
  ------------------
  129|    915|                case 7:
  ------------------
  |  Branch (129:17): [True: 915, False: 749k]
  ------------------
  130|    915|                        state->padding |= ((uint64_t) in[6]) << 48;
  131|    915|                        _fallthrough_;
  ------------------
  |  |  111|    915|#  define _fallthrough_ __attribute__((__fallthrough__))
  ------------------
  132|  17.5k|                case 6:
  ------------------
  |  Branch (132:17): [True: 16.6k, False: 734k]
  ------------------
  133|  17.5k|                        state->padding |= ((uint64_t) in[5]) << 40;
  134|  17.5k|                        _fallthrough_;
  ------------------
  |  |  111|  17.5k|#  define _fallthrough_ __attribute__((__fallthrough__))
  ------------------
  135|  31.2k|                case 5:
  ------------------
  |  Branch (135:17): [True: 13.6k, False: 737k]
  ------------------
  136|  31.2k|                        state->padding |= ((uint64_t) in[4]) << 32;
  137|  31.2k|                        _fallthrough_;
  ------------------
  |  |  111|  31.2k|#  define _fallthrough_ __attribute__((__fallthrough__))
  ------------------
  138|   122k|                case 4:
  ------------------
  |  Branch (138:17): [True: 91.3k, False: 659k]
  ------------------
  139|   122k|                        state->padding |= ((uint64_t) in[3]) << 24;
  140|   122k|                        _fallthrough_;
  ------------------
  |  |  111|   122k|#  define _fallthrough_ __attribute__((__fallthrough__))
  ------------------
  141|   123k|                case 3:
  ------------------
  |  Branch (141:17): [True: 394, False: 750k]
  ------------------
  142|   123k|                        state->padding |= ((uint64_t) in[2]) << 16;
  143|   123k|                        _fallthrough_;
  ------------------
  |  |  111|   123k|#  define _fallthrough_ __attribute__((__fallthrough__))
  ------------------
  144|   139k|                case 2:
  ------------------
  |  Branch (144:17): [True: 16.2k, False: 734k]
  ------------------
  145|   139k|                        state->padding |= ((uint64_t) in[1]) <<  8;
  146|   139k|                        _fallthrough_;
  ------------------
  |  |  111|   139k|#  define _fallthrough_ __attribute__((__fallthrough__))
  ------------------
  147|   646k|                case 1:
  ------------------
  |  Branch (147:17): [True: 507k, False: 243k]
  ------------------
  148|   646k|                        state->padding |= ((uint64_t) in[0]);
  149|   646k|                        _fallthrough_;
  ------------------
  |  |  111|   646k|#  define _fallthrough_ __attribute__((__fallthrough__))
  ------------------
  150|   750k|                case 0:
  ------------------
  |  Branch (150:17): [True: 104k, False: 646k]
  ------------------
  151|   750k|                        break;
  152|   750k|        }
  153|   750k|}
siphash24_compress_string:
  155|   414k|void siphash24_compress_string(const char *in, struct siphash *state) {
  156|   414k|        siphash24_compress_safe(in, strlen_ptr(in), state);
  157|   414k|}
siphash24_finalize:
  159|   501k|uint64_t siphash24_finalize(struct siphash *state) {
  160|   501k|        uint64_t b;
  161|       |
  162|   501k|        assert(state);
  ------------------
  |  |   72|   501k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   501k|        do {                                                            \
  |  |  |  |   59|   501k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   501k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 501k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   501k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   501k|        } while (false)
  |  |  ------------------
  ------------------
  163|       |
  164|   501k|        b = state->padding | (((uint64_t) state->inlen) << 56);
  165|       |
  166|       |#if ENABLE_DEBUG_SIPHASH
  167|       |        printf("(%3zu) v0 %08x %08x\n", state->inlen, (uint32_t) (state->v0 >> 32), (uint32_t) state->v0);
  168|       |        printf("(%3zu) v1 %08x %08x\n", state->inlen, (uint32_t) (state->v1 >> 32), (uint32_t) state->v1);
  169|       |        printf("(%3zu) v2 %08x %08x\n", state->inlen, (uint32_t) (state->v2 >> 32), (uint32_t) state->v2);
  170|       |        printf("(%3zu) v3 %08x %08x\n", state->inlen, (uint32_t) (state->v3 >> 32), (uint32_t) state->v3);
  171|       |        printf("(%3zu) padding   %08x %08x\n", state->inlen, (uint32_t) (state->padding >> 32), (uint32_t) state->padding);
  172|       |#endif
  173|       |
  174|   501k|        state->v3 ^= b;
  175|   501k|        sipround(state);
  176|   501k|        sipround(state);
  177|   501k|        state->v0 ^= b;
  178|       |
  179|       |#if ENABLE_DEBUG_SIPHASH
  180|       |        printf("(%3zu) v0 %08x %08x\n", state->inlen, (uint32_t) (state->v0 >> 32), (uint32_t) state->v0);
  181|       |        printf("(%3zu) v1 %08x %08x\n", state->inlen, (uint32_t) (state->v1 >> 32), (uint32_t) state->v1);
  182|       |        printf("(%3zu) v2 %08x %08x\n", state->inlen, (uint32_t) (state->v2 >> 32), (uint32_t) state->v2);
  183|       |        printf("(%3zu) v3 %08x %08x\n", state->inlen, (uint32_t) (state->v3 >> 32), (uint32_t) state->v3);
  184|       |#endif
  185|   501k|        state->v2 ^= 0xff;
  186|       |
  187|   501k|        sipround(state);
  188|   501k|        sipround(state);
  189|   501k|        sipround(state);
  190|   501k|        sipround(state);
  191|       |
  192|   501k|        return state->v0 ^ state->v1 ^ state->v2  ^ state->v3;
  193|   501k|}
siphash24.c:sipround:
   34|  5.98M|static void sipround(struct siphash *state) {
   35|  5.98M|        assert(state);
  ------------------
  |  |   72|  5.98M|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.98M|        do {                                                            \
  |  |  |  |   59|  5.98M|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.98M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.98M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.98M|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.98M|        } while (false)
  |  |  ------------------
  ------------------
   36|       |
   37|  5.98M|        state->v0 += state->v1;
   38|  5.98M|        state->v1 = rotate_left(state->v1, 13);
   39|  5.98M|        state->v1 ^= state->v0;
   40|  5.98M|        state->v0 = rotate_left(state->v0, 32);
   41|  5.98M|        state->v2 += state->v3;
   42|  5.98M|        state->v3 = rotate_left(state->v3, 16);
   43|  5.98M|        state->v3 ^= state->v2;
   44|  5.98M|        state->v0 += state->v3;
   45|  5.98M|        state->v3 = rotate_left(state->v3, 21);
   46|  5.98M|        state->v3 ^= state->v0;
   47|  5.98M|        state->v2 += state->v1;
   48|  5.98M|        state->v1 = rotate_left(state->v1, 17);
   49|  5.98M|        state->v1 ^= state->v2;
   50|  5.98M|        state->v2 = rotate_left(state->v2, 32);
   51|  5.98M|}
siphash24.c:rotate_left:
   28|  35.8M|static uint64_t rotate_left(uint64_t x, uint8_t b) {
   29|  35.8M|        assert(b < 64);
  ------------------
  |  |   72|  35.8M|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  35.8M|        do {                                                            \
  |  |  |  |   59|  35.8M|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  35.8M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 35.8M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  35.8M|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  35.8M|        } while (false)
  |  |  ------------------
  ------------------
   30|       |
   31|  35.8M|        return (x << b) | (x >> (64 - b));
   32|  35.8M|}

networkd-route-metric.c:siphash24_compress_safe:
   31|  13.5k|static inline void siphash24_compress_safe(const void *in, size_t inlen, struct siphash *state) {
   32|  13.5k|        if (inlen == 0)
  ------------------
  |  Branch (32:13): [True: 13.5k, False: 0]
  ------------------
   33|  13.5k|                return;
   34|       |
   35|      0|        siphash24_compress(in, inlen, state);
   36|      0|}
siphash24.c:siphash24_compress_safe:
   31|   414k|static inline void siphash24_compress_safe(const void *in, size_t inlen, struct siphash *state) {
   32|   414k|        if (inlen == 0)
  ------------------
  |  Branch (32:13): [True: 13.5k, False: 400k]
  ------------------
   33|  13.5k|                return;
   34|       |
   35|   400k|        siphash24_compress(in, inlen, state);
   36|   400k|}

ifname_valid_char:
  787|  76.7k|bool ifname_valid_char(char a) {
  788|  76.7k|        if ((unsigned char) a >= 127U)
  ------------------
  |  Branch (788:13): [True: 238, False: 76.4k]
  ------------------
  789|    238|                return false;
  790|       |
  791|  76.4k|        if ((unsigned char) a <= 32U)
  ------------------
  |  Branch (791:13): [True: 506, False: 75.9k]
  ------------------
  792|    506|                return false;
  793|       |
  794|  75.9k|        if (IN_SET(a,
  ------------------
  |  |  361|  75.9k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 901, False: 75.0k]
  |  |  ------------------
  |  |  362|  75.9k|                bool _found = false;                                    \
  |  |  363|  75.9k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  75.9k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  75.9k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  75.9k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  75.9k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  75.9k|                switch (x) {                                            \
  |  |  368|    901|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|    680|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|    680|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|    680|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|    896|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|    901|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|    901|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 5, False: 75.9k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 216, False: 75.7k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 680, False: 75.2k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|    901|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|    901|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|    901|                        _found = true;                                  \
  |  |  370|    901|                        break;                                          \
  |  |  371|  75.0k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 75.0k, False: 901]
  |  |  ------------------
  |  |  372|  75.0k|                        ;                                               \
  |  |  373|  75.9k|                }                                                       \
  |  |  374|  75.9k|                _found;                                                 \
  |  |  375|  75.9k|        })
  ------------------
  795|  75.9k|                   ':',  /* colons are used by the legacy "alias" interface logic */
  796|  75.9k|                   '/',  /* slashes cannot work, since we need to use network interfaces in sysfs paths, and in paths slashes are separators */
  797|  75.9k|                   '%')) /* %d is used in the kernel's weird foo%d format string naming feature which we really really don't want to ever run into by accident */
  798|    901|                return false;
  799|       |
  800|  75.0k|        return true;
  801|  75.9k|}
ifname_valid_full:
  803|  89.3k|bool ifname_valid_full(const char *p, IfnameValidFlags flags) {
  804|  89.3k|        bool numeric = true;
  805|       |
  806|       |        /* Checks whether a network interface name is valid. This is inspired by dev_valid_name() in the kernel sources
  807|       |         * but slightly stricter, as we only allow non-control, non-space ASCII characters in the interface name. We
  808|       |         * also don't permit names that only container numbers, to avoid confusion with numeric interface indexes. */
  809|       |
  810|  89.3k|        assert(!(flags & ~_IFNAME_VALID_ALL));
  ------------------
  |  |   72|  89.3k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  89.3k|        do {                                                            \
  |  |  |  |   59|  89.3k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  89.3k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 89.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  89.3k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  89.3k|        } while (false)
  |  |  ------------------
  ------------------
  811|       |
  812|  89.3k|        if (isempty(p))
  ------------------
  |  Branch (812:13): [True: 52.2k, False: 37.1k]
  ------------------
  813|  52.2k|                return false;
  814|       |
  815|       |        /* A valid ifindex? If so, it's valid iff IFNAME_VALID_NUMERIC is set */
  816|  37.1k|        if (parse_ifindex(p) >= 0)
  ------------------
  |  Branch (816:13): [True: 343, False: 36.8k]
  ------------------
  817|    343|                return flags & IFNAME_VALID_NUMERIC;
  818|       |
  819|  36.8k|        if (flags & IFNAME_VALID_ALTERNATIVE) {
  ------------------
  |  Branch (819:13): [True: 625, False: 36.1k]
  ------------------
  820|    625|                if (strlen(p) >= ALTIFNAMSIZ)
  ------------------
  |  Branch (820:21): [True: 217, False: 408]
  ------------------
  821|    217|                        return false;
  822|  36.1k|        } else {
  823|  36.1k|                if (strlen(p) >= IFNAMSIZ)
  ------------------
  |  Branch (823:21): [True: 522, False: 35.6k]
  ------------------
  824|    522|                        return false;
  825|  36.1k|        }
  826|       |
  827|  36.0k|        if (dot_or_dot_dot(p))
  ------------------
  |  Branch (827:13): [True: 383, False: 35.6k]
  ------------------
  828|    383|                return false;
  829|       |
  830|       |        /* Let's refuse "all" and "default" as interface name, to avoid collisions with the special sysctl
  831|       |         * directories /proc/sys/net/{ipv4,ipv6}/conf/{all,default} */
  832|  35.6k|        if (!FLAGS_SET(flags, IFNAME_VALID_SPECIAL) && STR_IN_SET(p, "all", "default"))
  ------------------
  |  |  414|  71.3k|        ((~(v) & (flags)) == 0)
  ------------------
                      if (!FLAGS_SET(flags, IFNAME_VALID_SPECIAL) && STR_IN_SET(p, "all", "default"))
  ------------------
  |  |  163|  35.6k|#define STR_IN_SET(x, ...) strv_contains(STRV_MAKE(__VA_ARGS__), x)
  |  |  ------------------
  |  |  |  |   16|  35.6k|#define strv_contains(l, s) (!!strv_find((l), (s)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (16:29): [True: 196, False: 35.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (832:13): [True: 35.6k, False: 0]
  ------------------
  833|    196|                return false;
  834|       |
  835|   110k|        for (const char *t = p; *t; t++) {
  ------------------
  |  Branch (835:33): [True: 76.7k, False: 33.8k]
  ------------------
  836|  76.7k|                if (!ifname_valid_char(*t))
  ------------------
  |  Branch (836:21): [True: 1.64k, False: 75.0k]
  ------------------
  837|  1.64k|                        return false;
  838|       |
  839|  75.0k|                numeric = numeric && ascii_isdigit(*t);
  ------------------
  |  Branch (839:27): [True: 36.8k, False: 38.2k]
  |  Branch (839:38): [True: 3.28k, False: 33.5k]
  ------------------
  840|  75.0k|        }
  841|       |
  842|       |        /* It's fully numeric but didn't parse as valid ifindex above? if so, it must be too large or zero or
  843|       |         * so, let's refuse that. */
  844|  33.8k|        if (numeric)
  ------------------
  |  Branch (844:13): [True: 419, False: 33.4k]
  ------------------
  845|    419|                return false;
  846|       |
  847|  33.4k|        return true;
  848|  33.8k|}
sockaddr_un_set_path:
 1487|    835|int sockaddr_un_set_path(struct sockaddr_un *ret, const char *path) {
 1488|    835|        size_t l;
 1489|       |
 1490|    835|        assert(ret);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
 1491|    835|        assert(path);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
 1492|       |
 1493|       |        /* Initialize ret->sun_path from the specified argument. This will interpret paths starting with '@' as
 1494|       |         * abstract namespace sockets, and those starting with '/' as regular filesystem sockets. It won't accept
 1495|       |         * anything else (i.e. no relative paths), to avoid ambiguities. Note that this function cannot be used to
 1496|       |         * reference paths in the abstract namespace that include NUL bytes in the name. */
 1497|       |
 1498|    835|        l = strlen(path);
 1499|    835|        if (l < 2)
  ------------------
  |  Branch (1499:13): [True: 0, False: 835]
  ------------------
 1500|      0|                return -EINVAL;
 1501|    835|        if (!IN_SET(path[0], '/', '@'))
  ------------------
  |  |  361|    835|        ({                                                              \
  |  |  362|    835|                bool _found = false;                                    \
  |  |  363|    835|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|    835|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|    835|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|    835|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|    835|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|    835|                switch (x) {                                            \
  |  |  368|    835|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|    835|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|    835|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|    835|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|    835|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|    835|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 835]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 835, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|    835|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|    835|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|    835|                        _found = true;                                  \
  |  |  370|    835|                        break;                                          \
  |  |  371|    835|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 835]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|    835|                }                                                       \
  |  |  374|    835|                _found;                                                 \
  |  |  375|    835|        })
  ------------------
  |  Branch (1501:13): [True: 0, False: 835]
  ------------------
 1502|      0|                return -EINVAL;
 1503|       |
 1504|       |        /* Don't allow paths larger than the space in sockaddr_un. Note that we are a tiny bit more restrictive than
 1505|       |         * the kernel is: we insist on NUL termination (both for abstract namespace and regular file system socket
 1506|       |         * addresses!), which the kernel doesn't. We do this to reduce chance of incompatibility with other apps that
 1507|       |         * do not expect non-NUL terminated file system path. */
 1508|    835|        if (l+1 > sizeof(ret->sun_path))
  ------------------
  |  Branch (1508:13): [True: 0, False: 835]
  ------------------
 1509|      0|                return path[0] == '@' ? -EINVAL : -ENAMETOOLONG; /* return a recognizable error if this is
  ------------------
  |  Branch (1509:24): [True: 0, False: 0]
  ------------------
 1510|       |                                                                  * too long to fit into a sockaddr_un, but
 1511|       |                                                                  * is a file system path, and thus might be
 1512|       |                                                                  * connectible via O_PATH indirection. */
 1513|       |
 1514|    835|        *ret = (struct sockaddr_un) {
 1515|    835|                .sun_family = AF_UNIX,
 1516|    835|        };
 1517|       |
 1518|    835|        if (path[0] == '@') {
  ------------------
  |  Branch (1518:13): [True: 0, False: 835]
  ------------------
 1519|       |                /* Abstract namespace socket */
 1520|      0|                memcpy(ret->sun_path + 1, path + 1, l); /* copy *with* trailing NUL byte */
 1521|      0|                return (int) (offsetof(struct sockaddr_un, sun_path) + l); /* 🔥 *don't* 🔥 include trailing NUL in size */
 1522|       |
 1523|    835|        } else {
 1524|    835|                assert(path[0] == '/');
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
 1525|       |
 1526|       |                /* File system socket */
 1527|    835|                memcpy(ret->sun_path, path, l + 1); /* copy *with* trailing NUL byte */
 1528|    835|                return (int) (offsetof(struct sockaddr_un, sun_path) + l + 1); /* include trailing NUL in size */
 1529|    835|        }
 1530|    835|}

l2tp-tunnel.c:ifname_valid:
  141|  60.9k|static inline bool ifname_valid(const char *p) {
  142|  60.9k|        return ifname_valid_full(p, 0);
  143|  60.9k|}
conf-parser.c:ifname_valid:
  141|  27.7k|static inline bool ifname_valid(const char *p) {
  142|  27.7k|        return ifname_valid_full(p, 0);
  143|  27.7k|}

macsec.c:be16toh:
   86|  3.73k|static inline uint16_t be16toh(be16_t value) { return bswap_16_on_le((uint16_t __sd_force)value); }
  ------------------
  |  |   59|  3.73k|#define bswap_16_on_le(x) bswap_16(x)
  ------------------
tunnel.c:be32toh:
   87|    195|static inline uint32_t be32toh(be32_t value) { return bswap_32_on_le((uint32_t __sd_force)value); }
  ------------------
  |  |   60|    195|#define bswap_32_on_le(x) bswap_32(x)
  ------------------
tunnel.c:htobe32:
   79|    610|static inline be32_t htobe32(uint32_t value) { return (be32_t __sd_force) bswap_32_on_le(value); }
  ------------------
  |  |   60|    610|#define bswap_32_on_le(x) bswap_32(x)
  ------------------
wireguard.c:htobe16:
   78|    791|static inline be16_t htobe16(uint16_t value) { return (be16_t __sd_force) bswap_16_on_le(value); }
  ------------------
  |  |   59|    791|#define bswap_16_on_le(x) bswap_16(x)
  ------------------

null_or_empty:
  187|  13.0k|bool null_or_empty(struct stat *st) {
  188|  13.0k|        assert(st);
  ------------------
  |  |   72|  13.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.0k|        do {                                                            \
  |  |  |  |   59|  13.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  13.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.0k|        } while (false)
  |  |  ------------------
  ------------------
  189|       |
  190|  13.0k|        if (S_ISREG(st->st_mode) && st->st_size <= 0)
  ------------------
  |  Branch (190:37): [True: 0, False: 13.0k]
  ------------------
  191|      0|                return true;
  192|       |
  193|       |        /* We don't want to hardcode the major/minor of /dev/null, hence we do a simpler "is this a character
  194|       |         * device node?" check. */
  195|       |
  196|  13.0k|        if (S_ISCHR(st->st_mode))
  197|      0|                return true;
  198|       |
  199|  13.0k|        return false;
  200|  13.0k|}
null_or_empty_path_with_root:
  202|  13.0k|int null_or_empty_path_with_root(const char *fn, const char *root) {
  203|  13.0k|        struct stat st;
  204|  13.0k|        int r;
  205|       |
  206|  13.0k|        assert(fn);
  ------------------
  |  |   72|  13.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.0k|        do {                                                            \
  |  |  |  |   59|  13.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  13.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.0k|        } while (false)
  |  |  ------------------
  ------------------
  207|       |
  208|       |        /* A symlink to /dev/null or an empty file?
  209|       |         * When looking under root_dir, we can't expect /dev/ to be mounted,
  210|       |         * so let's see if the path is a (possibly dangling) symlink to /dev/null. */
  211|       |
  212|  13.0k|        if (path_equal(path_startswith(fn, root ?: "/"), "dev/null"))
  ------------------
  |  Branch (212:13): [True: 0, False: 13.0k]
  |  Branch (212:44): [True: 0, False: 13.0k]
  ------------------
  213|      0|                return true;
  214|       |
  215|  13.0k|        r = chase_and_stat(fn, root, CHASE_PREFIX_ROOT, NULL, &st);
  216|  13.0k|        if (r < 0)
  ------------------
  |  Branch (216:13): [True: 0, False: 13.0k]
  ------------------
  217|      0|                return r;
  218|       |
  219|  13.0k|        return null_or_empty(&st);
  220|  13.0k|}
statx_inode_same:
  456|  96.2k|bool statx_inode_same(const struct statx *a, const struct statx *b) {
  457|       |
  458|       |        /* Same as stat_inode_same() but for struct statx */
  459|       |
  460|  96.2k|        return statx_is_set(a) && statx_is_set(b) &&
  ------------------
  |  Branch (460:16): [True: 96.2k, False: 0]
  |  Branch (460:35): [True: 96.2k, False: 0]
  ------------------
  461|  96.2k|                FLAGS_SET(a->stx_mask, STATX_TYPE|STATX_INO) && FLAGS_SET(b->stx_mask, STATX_TYPE|STATX_INO) &&
  ------------------
  |  |  414|   192k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 96.2k, False: 0]
  |  |  ------------------
  ------------------
                              FLAGS_SET(a->stx_mask, STATX_TYPE|STATX_INO) && FLAGS_SET(b->stx_mask, STATX_TYPE|STATX_INO) &&
  ------------------
  |  |  414|   192k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 96.2k, False: 0]
  |  |  ------------------
  ------------------
  462|  96.2k|                ((a->stx_mode ^ b->stx_mode) & S_IFMT) == 0 &&
  ------------------
  |  Branch (462:17): [True: 96.2k, False: 0]
  ------------------
  463|  96.2k|                a->stx_dev_major == b->stx_dev_major &&
  ------------------
  |  Branch (463:17): [True: 96.2k, False: 0]
  ------------------
  464|  96.2k|                a->stx_dev_minor == b->stx_dev_minor &&
  ------------------
  |  Branch (464:17): [True: 96.2k, False: 0]
  ------------------
  465|  96.2k|                a->stx_ino == b->stx_ino;
  ------------------
  |  Branch (465:17): [True: 96.2k, False: 0]
  ------------------
  466|  96.2k|}
statx_mount_same:
  468|  96.2k|bool statx_mount_same(const struct statx *a, const struct statx *b) {
  469|  96.2k|        if (!statx_is_set(a) || !statx_is_set(b))
  ------------------
  |  Branch (469:13): [True: 0, False: 96.2k]
  |  Branch (469:33): [True: 0, False: 96.2k]
  ------------------
  470|      0|                return false;
  471|       |
  472|       |        /* if we have the mount ID, that's all we need */
  473|  96.2k|        if (FLAGS_SET(a->stx_mask, STATX_MNT_ID) && FLAGS_SET(b->stx_mask, STATX_MNT_ID))
  ------------------
  |  |  414|   192k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 96.2k, False: 0]
  |  |  ------------------
  ------------------
                      if (FLAGS_SET(a->stx_mask, STATX_MNT_ID) && FLAGS_SET(b->stx_mask, STATX_MNT_ID))
  ------------------
  |  |  414|  96.2k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 96.2k, False: 0]
  |  |  ------------------
  ------------------
  474|  96.2k|                return a->stx_mnt_id == b->stx_mnt_id;
  475|       |
  476|       |        /* Otherwise, major/minor of backing device must match */
  477|      0|        return a->stx_dev_major == b->stx_dev_major &&
  ------------------
  |  Branch (477:16): [True: 0, False: 0]
  ------------------
  478|      0|                a->stx_dev_minor == b->stx_dev_minor;
  ------------------
  |  Branch (478:17): [True: 0, False: 0]
  ------------------
  479|  96.2k|}

netdev.c:null_or_empty_path:
   35|  13.0k|static inline int null_or_empty_path(const char *fn) {
   36|  13.0k|        return null_or_empty_path_with_root(fn, NULL);
   37|  13.0k|}
stat-util.c:statx_is_set:
  106|   385k|static inline bool statx_is_set(const struct statx *sx) {
  107|   385k|        return sx && sx->stx_mask != 0;
  ------------------
  |  Branch (107:16): [True: 385k, False: 0]
  |  Branch (107:22): [True: 385k, False: 0]
  ------------------
  108|   385k|}

userdb-dropin.c:snprintf_ok:
   10|    306|static inline char* snprintf_ok(char *buf, size_t len, const char *format, ...) {
   11|    306|        va_list ap;
   12|    306|        int r;
   13|       |
   14|    306|        va_start(ap, format);
   15|    306|        r = vsnprintf(buf, len, format, ap);
   16|    306|        va_end(ap);
   17|       |
   18|    306|        return r >= 0 && (size_t) r < len ? buf : NULL;
  ------------------
  |  Branch (18:16): [True: 306, False: 0]
  |  Branch (18:26): [True: 306, False: 0]
  ------------------
   19|    306|}

string_table_lookup_to_string:
    9|  2.05k|const char* string_table_lookup_to_string(const char * const *table, size_t len, ssize_t i) {
   10|  2.05k|        if (i < 0 || i >= (ssize_t) len)
  ------------------
  |  Branch (10:13): [True: 0, False: 2.05k]
  |  Branch (10:22): [True: 0, False: 2.05k]
  ------------------
   11|      0|                return NULL;
   12|       |
   13|  2.05k|        return table[i];
   14|  2.05k|}
string_table_lookup_from_string:
   16|  39.2k|ssize_t string_table_lookup_from_string(const char * const *table, size_t len, const char *key) {
   17|  39.2k|        if (!key)
  ------------------
  |  Branch (17:13): [True: 0, False: 39.2k]
  ------------------
   18|      0|                return -EINVAL;
   19|       |
   20|  10.0M|        for (size_t i = 0; i < len; ++i)
  ------------------
  |  Branch (20:28): [True: 10.0M, False: 12.1k]
  ------------------
   21|  10.0M|                if (streq_ptr(table[i], key))
  ------------------
  |  Branch (21:21): [True: 27.0k, False: 9.97M]
  ------------------
   22|  27.0k|                        return (ssize_t) i;
   23|       |
   24|  12.1k|        return -EINVAL;
   25|  39.2k|}
string_table_lookup_from_string_with_boolean:
   27|  1.61k|ssize_t string_table_lookup_from_string_with_boolean(const char * const *table, size_t len, const char *key, ssize_t yes) {
   28|  1.61k|        if (!key)
  ------------------
  |  Branch (28:13): [True: 0, False: 1.61k]
  ------------------
   29|      0|                return -EINVAL;
   30|       |
   31|  1.61k|        int b = parse_boolean(key);
   32|  1.61k|        if (b == 0)
  ------------------
  |  Branch (32:13): [True: 335, False: 1.27k]
  ------------------
   33|    335|                return 0;
   34|  1.27k|        if (b > 0)
  ------------------
  |  Branch (34:13): [True: 251, False: 1.02k]
  ------------------
   35|    251|                return yes;
   36|       |
   37|  1.02k|        return string_table_lookup_from_string(table, len, key);
   38|  1.27k|}

bare_udp_protocol_from_string:
   22|    400|        scope type name##_from_string(const char *s) {             \
   23|    400|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|    400|        (__builtin_choose_expr(                                         \
  |  |  135|    400|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    400|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    400|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    400|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|    400|        }
batadv.c:batadv_gateway_mode_from_string:
   22|    415|        scope type name##_from_string(const char *s) {             \
   23|    415|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|    415|        (__builtin_choose_expr(                                         \
  |  |  135|    415|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    415|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    415|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    415|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|    415|        }
batadv.c:batadv_routing_algorithm_from_string:
   22|    395|        scope type name##_from_string(const char *s) {             \
   23|    395|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|    395|        (__builtin_choose_expr(                                         \
  |  |  135|    395|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    395|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    395|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    395|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|    395|        }
fou_encap_type_from_string:
   22|    418|        scope type name##_from_string(const char *s) {             \
   23|    418|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|    418|        (__builtin_choose_expr(                                         \
  |  |  135|    418|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    418|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    418|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    418|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|    418|        }
geneve_df_from_string:
   27|    577|        scope type name##_from_string(const char *s) {                               \
   28|    577|                return (type) string_table_lookup_from_string_with_boolean(name##_table, ELEMENTSOF(name##_table), s, yes); \
  ------------------
  |  |  134|    577|        (__builtin_choose_expr(                                         \
  |  |  135|    577|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    577|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    577|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    577|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   29|    577|        }
ipoib.c:ipoib_mode_from_string:
   22|    543|        scope type name##_from_string(const char *s) {             \
   23|    543|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|    543|        (__builtin_choose_expr(                                         \
  |  |  135|    543|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    543|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    543|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    543|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|    543|        }
l2tp-tunnel.c:l2tp_encap_type_from_string:
   22|    408|        scope type name##_from_string(const char *s) {             \
   23|    408|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|    408|        (__builtin_choose_expr(                                         \
  |  |  135|    408|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    408|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    408|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    408|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|    408|        }
l2tp-tunnel.c:l2tp_local_address_type_from_string:
   22|  1.68k|        scope type name##_from_string(const char *s) {             \
   23|  1.68k|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|  1.68k|        (__builtin_choose_expr(                                         \
  |  |  135|  1.68k|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|  1.68k|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|  1.68k|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|  1.68k|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|  1.68k|        }
l2tp-tunnel.c:l2tp_l2spec_type_from_string:
   22|    389|        scope type name##_from_string(const char *s) {             \
   23|    389|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|    389|        (__builtin_choose_expr(                                         \
  |  |  135|    389|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    389|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    389|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    389|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|    389|        }
netdev_local_address_type_to_string:
   17|      3|        scope const char* name##_to_string(type i) {             \
   18|      3|                return string_table_lookup_to_string(name##_table, ELEMENTSOF(name##_table), i); \
  ------------------
  |  |  134|      3|        (__builtin_choose_expr(                                         \
  |  |  135|      3|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|      3|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|      3|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|      3|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   19|      3|        }
netdev_local_address_type_from_string:
   22|  2.73k|        scope type name##_from_string(const char *s) {             \
   23|  2.73k|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|  2.73k|        (__builtin_choose_expr(                                         \
  |  |  135|  2.73k|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|  2.73k|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|  2.73k|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|  2.73k|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|  2.73k|        }
netdev_kind_to_string:
   17|    162|        scope const char* name##_to_string(type i) {             \
   18|    162|                return string_table_lookup_to_string(name##_table, ELEMENTSOF(name##_table), i); \
  ------------------
  |  |  134|    162|        (__builtin_choose_expr(                                         \
  |  |  135|    162|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    162|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    162|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    162|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   19|    162|        }
netdev_kind_from_string:
   22|  22.7k|        scope type name##_from_string(const char *s) {             \
   23|  22.7k|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|  22.7k|        (__builtin_choose_expr(                                         \
  |  |  135|  22.7k|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|  22.7k|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|  22.7k|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|  22.7k|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|  22.7k|        }
ip6tnl_mode_from_string:
   22|    397|        scope type name##_from_string(const char *s) {             \
   23|    397|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|    397|        (__builtin_choose_expr(                                         \
  |  |  135|    397|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    397|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    397|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    397|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|    397|        }
df_from_string:
   27|  1.03k|        scope type name##_from_string(const char *s) {                               \
   28|  1.03k|                return (type) string_table_lookup_from_string_with_boolean(name##_table, ELEMENTSOF(name##_table), s, yes); \
  ------------------
  |  |  134|  1.03k|        (__builtin_choose_expr(                                         \
  |  |  135|  1.03k|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|  1.03k|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|  1.03k|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|  1.03k|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   29|  1.03k|        }
networkd-route-util.c:route_table_from_string:
   22|  2.68k|        scope type name##_from_string(const char *s) {             \
   23|  2.68k|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|  2.68k|        (__builtin_choose_expr(                                         \
  |  |  135|  2.68k|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|  2.68k|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|  2.68k|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|  2.68k|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|  2.68k|        }
bond_mode_from_string:
   22|    435|        scope type name##_from_string(const char *s) {             \
   23|    435|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|    435|        (__builtin_choose_expr(                                         \
  |  |  135|    435|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    435|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    435|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    435|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|    435|        }
bond_xmit_hash_policy_from_string:
   22|    440|        scope type name##_from_string(const char *s) {             \
   23|    440|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|    440|        (__builtin_choose_expr(                                         \
  |  |  135|    440|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    440|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    440|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    440|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|    440|        }
bond_lacp_rate_from_string:
   22|    397|        scope type name##_from_string(const char *s) {             \
   23|    397|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|    397|        (__builtin_choose_expr(                                         \
  |  |  135|    397|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    397|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    397|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    397|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|    397|        }
bond_ad_select_from_string:
   22|    414|        scope type name##_from_string(const char *s) {             \
   23|    414|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|    414|        (__builtin_choose_expr(                                         \
  |  |  135|    414|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    414|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    414|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    414|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|    414|        }
bond_fail_over_mac_from_string:
   22|    389|        scope type name##_from_string(const char *s) {             \
   23|    389|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|    389|        (__builtin_choose_expr(                                         \
  |  |  135|    389|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    389|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    389|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    389|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|    389|        }
bond_arp_validate_from_string:
   22|    394|        scope type name##_from_string(const char *s) {             \
   23|    394|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|    394|        (__builtin_choose_expr(                                         \
  |  |  135|    394|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    394|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    394|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    394|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|    394|        }
bond_arp_all_targets_from_string:
   22|    397|        scope type name##_from_string(const char *s) {             \
   23|    397|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|    397|        (__builtin_choose_expr(                                         \
  |  |  135|    397|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    397|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    397|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    397|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|    397|        }
bond_primary_reselect_from_string:
   22|    392|        scope type name##_from_string(const char *s) {             \
   23|    392|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|    392|        (__builtin_choose_expr(                                         \
  |  |  135|    392|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    392|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    392|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    392|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|    392|        }
ipvlan_mode_from_string:
   22|    390|        scope type name##_from_string(const char *s) {             \
   23|    390|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|    390|        (__builtin_choose_expr(                                         \
  |  |  135|    390|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    390|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    390|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    390|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|    390|        }
ipvlan_flags_from_string:
   22|    389|        scope type name##_from_string(const char *s) {             \
   23|    389|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|    389|        (__builtin_choose_expr(                                         \
  |  |  135|    389|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    389|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    389|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    389|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|    389|        }
macvlan_mode_from_string:
   22|    398|        scope type name##_from_string(const char *s) {             \
   23|    398|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|    398|        (__builtin_choose_expr(                                         \
  |  |  135|    398|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    398|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    398|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    398|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|    398|        }
user_disposition_to_string:
   17|  1.67k|        scope const char* name##_to_string(type i) {             \
   18|  1.67k|                return string_table_lookup_to_string(name##_table, ELEMENTSOF(name##_table), i); \
   19|  1.67k|        }
user_disposition_from_string:
   22|     80|        scope type name##_from_string(const char *s) {             \
   23|     80|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
   24|     80|        }
nl80211_iftype_from_string:
   22|    420|        scope type name##_from_string(const char *s) {             \
   23|    420|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|    420|        (__builtin_choose_expr(                                         \
  |  |  135|    420|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    420|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    420|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    420|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|    420|        }
architecture_from_string:
   22|     56|        scope type name##_from_string(const char *s) {             \
   23|     56|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|     56|        (__builtin_choose_expr(                                         \
  |  |  135|     56|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|     56|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|     56|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|     56|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|     56|        }
virtualization_to_string:
   17|    218|        scope const char* name##_to_string(type i) {             \
   18|    218|                return string_table_lookup_to_string(name##_table, ELEMENTSOF(name##_table), i); \
  ------------------
  |  |  134|    218|        (__builtin_choose_expr(                                         \
  |  |  135|    218|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|    218|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|    218|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|    218|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   19|    218|        }
virt.c:container_from_string:
   22|      1|        scope type name##_from_string(const char *s) {             \
   23|      1|                return (type) string_table_lookup_from_string(name##_table, ELEMENTSOF(name##_table), s); \
  ------------------
  |  |  134|      1|        (__builtin_choose_expr(                                         \
  |  |  135|      1|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|      1|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|      1|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|      1|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
   24|      1|        }

strstrip:
   67|  2.37M|char* strstrip(char *s) {
   68|  2.37M|        if (!s)
  ------------------
  |  Branch (68:13): [True: 0, False: 2.37M]
  ------------------
   69|      0|                return NULL;
   70|       |
   71|       |        /* Drops trailing whitespace. Modifies the string in place. Returns pointer to first non-space character */
   72|       |
   73|  2.37M|        return delete_trailing_chars(skip_leading_chars(s, WHITESPACE), WHITESPACE);
  ------------------
  |  |   15|  2.37M|#define WHITESPACE          " \t\n\r"
  ------------------
                      return delete_trailing_chars(skip_leading_chars(s, WHITESPACE), WHITESPACE);
  ------------------
  |  |   15|  2.37M|#define WHITESPACE          " \t\n\r"
  ------------------
   74|  2.37M|}
delete_trailing_chars:
   99|  2.37M|char* delete_trailing_chars(char *s, const char *bad) {
  100|  2.37M|        char *c = s;
  101|       |
  102|       |        /* Drops all specified bad characters, at the end of the string */
  103|       |
  104|  2.37M|        if (!s)
  ------------------
  |  Branch (104:13): [True: 0, False: 2.37M]
  ------------------
  105|      0|                return NULL;
  106|       |
  107|  2.37M|        if (!bad)
  ------------------
  |  Branch (107:13): [True: 0, False: 2.37M]
  ------------------
  108|      0|                bad = WHITESPACE;
  ------------------
  |  |   15|      0|#define WHITESPACE          " \t\n\r"
  ------------------
  109|       |
  110|  25.3M|        for (char *p = s; *p; p++)
  ------------------
  |  Branch (110:27): [True: 22.9M, False: 2.37M]
  ------------------
  111|  22.9M|                if (!strchr(bad, *p))
  ------------------
  |  Branch (111:21): [True: 22.7M, False: 245k]
  ------------------
  112|  22.7M|                        c = p + 1;
  113|       |
  114|  2.37M|        *c = 0;
  115|       |
  116|  2.37M|        return s;
  117|  2.37M|}
ascii_tolower:
  131|  37.9k|char ascii_tolower(char x) {
  132|       |
  133|  37.9k|        if (x >= 'A' && x <= 'Z')
  ------------------
  |  Branch (133:13): [True: 31.8k, False: 6.10k]
  |  Branch (133:25): [True: 2.76k, False: 29.1k]
  ------------------
  134|  2.76k|                return x - 'A' + 'a';
  135|       |
  136|  35.2k|        return x;
  137|  37.9k|}
ascii_strlower:
  147|  2.05k|char* ascii_strlower(char *t) {
  148|  2.05k|        assert(t);
  ------------------
  |  |   72|  2.05k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.05k|        do {                                                            \
  |  |  |  |   59|  2.05k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.05k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.05k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.05k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.05k|        } while (false)
  |  |  ------------------
  ------------------
  149|       |
  150|  40.0k|        for (char *p = t; *p; p++)
  ------------------
  |  Branch (150:27): [True: 37.9k, False: 2.05k]
  ------------------
  151|  37.9k|                *p = ascii_tolower(*p);
  152|       |
  153|  2.05k|        return t;
  154|  2.05k|}
string_has_cc:
  209|    725|bool string_has_cc(const char *p, const char *ok) {
  210|    725|        assert(p);
  ------------------
  |  |   72|    725|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    725|        do {                                                            \
  |  |  |  |   59|    725|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    725|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 725]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    725|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    725|        } while (false)
  |  |  ------------------
  ------------------
  211|       |
  212|       |        /*
  213|       |         * Check if a string contains control characters. If 'ok' is
  214|       |         * non-NULL it may be a string containing additional CCs to be
  215|       |         * considered OK.
  216|       |         */
  217|       |
  218|   534k|        for (const char *t = p; *t; t++) {
  ------------------
  |  Branch (218:33): [True: 533k, False: 725]
  ------------------
  219|   533k|                if (ok && strchr(ok, *t))
  ------------------
  |  Branch (219:21): [True: 0, False: 533k]
  |  Branch (219:27): [True: 0, False: 0]
  ------------------
  220|      0|                        continue;
  221|       |
  222|   533k|                if (char_is_cc(*t))
  ------------------
  |  Branch (222:21): [True: 0, False: 533k]
  ------------------
  223|      0|                        return true;
  224|   533k|        }
  225|       |
  226|    725|        return false;
  227|    725|}
strextend_with_separator_internal:
  796|  98.1k|char* strextend_with_separator_internal(char **x, const char *separator, ...) {
  797|  98.1k|        _cleanup_free_ char *buffer = NULL;
  ------------------
  |  |   82|  98.1k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  98.1k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  798|  98.1k|        size_t f, l, l_separator;
  799|  98.1k|        bool need_separator;
  800|  98.1k|        char *nr, *p;
  801|  98.1k|        va_list ap;
  802|       |
  803|  98.1k|        if (!x)
  ------------------
  |  Branch (803:13): [True: 92.3k, False: 5.86k]
  ------------------
  804|  92.3k|                x = &buffer;
  805|       |
  806|  98.1k|        l = f = strlen_ptr(*x);
  807|       |
  808|  98.1k|        need_separator = !isempty(*x);
  809|  98.1k|        l_separator = strlen_ptr(separator);
  810|       |
  811|  98.1k|        va_start(ap, separator);
  812|   380k|        for (const char *t;;) {
  813|   380k|                size_t n;
  814|       |
  815|   380k|                t = va_arg(ap, const char *);
  816|   380k|                if (!t)
  ------------------
  |  Branch (816:21): [True: 98.1k, False: 282k]
  ------------------
  817|  98.1k|                        break;
  818|   282k|                if (t == POINTER_MAX)
  ------------------
  |  |  159|   282k|#define POINTER_MAX ((void*) UINTPTR_MAX)
  ------------------
  |  Branch (818:21): [True: 0, False: 282k]
  ------------------
  819|      0|                        continue;
  820|       |
  821|   282k|                n = strlen(t);
  822|       |
  823|   282k|                if (need_separator)
  ------------------
  |  Branch (823:21): [True: 190k, False: 92.3k]
  ------------------
  824|   190k|                        n += l_separator;
  825|       |
  826|   282k|                if (n >= SIZE_MAX - l) {
  ------------------
  |  Branch (826:21): [True: 0, False: 282k]
  ------------------
  827|      0|                        va_end(ap);
  828|      0|                        return NULL;
  829|      0|                }
  830|       |
  831|   282k|                l += n;
  832|   282k|                need_separator = true;
  833|   282k|        }
  834|  98.1k|        va_end(ap);
  835|       |
  836|  98.1k|        need_separator = !isempty(*x);
  837|       |
  838|  98.1k|        nr = realloc(*x, GREEDY_ALLOC_ROUND_UP(l+1));
  839|  98.1k|        if (!nr)
  ------------------
  |  Branch (839:13): [True: 0, False: 98.1k]
  ------------------
  840|      0|                return NULL;
  841|       |
  842|  98.1k|        *x = nr;
  843|  98.1k|        p = nr + f;
  844|       |
  845|  98.1k|        va_start(ap, separator);
  846|   380k|        for (;;) {
  847|   380k|                const char *t;
  848|       |
  849|   380k|                t = va_arg(ap, const char *);
  850|   380k|                if (!t)
  ------------------
  |  Branch (850:21): [True: 98.1k, False: 282k]
  ------------------
  851|  98.1k|                        break;
  852|   282k|                if (t == POINTER_MAX)
  ------------------
  |  |  159|   282k|#define POINTER_MAX ((void*) UINTPTR_MAX)
  ------------------
  |  Branch (852:21): [True: 0, False: 282k]
  ------------------
  853|      0|                        continue;
  854|       |
  855|   282k|                if (need_separator && separator)
  ------------------
  |  Branch (855:21): [True: 190k, False: 92.3k]
  |  Branch (855:39): [True: 0, False: 190k]
  ------------------
  856|      0|                        p = stpcpy(p, separator);
  857|       |
  858|   282k|                p = stpcpy(p, t);
  859|       |
  860|   282k|                need_separator = true;
  861|   282k|        }
  862|  98.1k|        va_end(ap);
  863|       |
  864|  98.1k|        assert(p == nr + l);
  ------------------
  |  |   72|  98.1k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  98.1k|        do {                                                            \
  |  |  |  |   59|  98.1k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  98.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 98.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  98.1k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  98.1k|        } while (false)
  |  |  ------------------
  ------------------
  865|  98.1k|        *p = 0;
  866|       |
  867|       |        /* If no buffer to extend was passed in return the start of the buffer */
  868|  98.1k|        if (buffer)
  ------------------
  |  Branch (868:13): [True: 92.3k, False: 5.86k]
  ------------------
  869|  92.3k|                return TAKE_PTR(buffer);
  ------------------
  |  |  388|  92.3k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  92.3k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  92.3k|        ({                                                       \
  |  |  |  |  |  |  381|  92.3k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  92.3k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  92.3k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  92.3k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  92.3k|                _var_;                                           \
  |  |  |  |  |  |  386|  92.3k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  870|       |
  871|       |        /* Otherwise we extended the buffer: return the end */
  872|  5.86k|        return p;
  873|  98.1k|}
free_and_strdup:
 1002|  35.6k|int free_and_strdup(char **p, const char *s) {
 1003|  35.6k|        char *t;
 1004|       |
 1005|  35.6k|        assert(p);
  ------------------
  |  |   72|  35.6k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  35.6k|        do {                                                            \
  |  |  |  |   59|  35.6k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  35.6k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 35.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  35.6k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  35.6k|        } while (false)
  |  |  ------------------
  ------------------
 1006|       |
 1007|       |        /* Replaces a string pointer with a strdup()ed new string,
 1008|       |         * possibly freeing the old one. */
 1009|       |
 1010|  35.6k|        if (streq_ptr(*p, s))
  ------------------
  |  Branch (1010:13): [True: 3.40k, False: 32.2k]
  ------------------
 1011|  3.40k|                return 0;
 1012|       |
 1013|  32.2k|        if (s) {
  ------------------
  |  Branch (1013:13): [True: 32.2k, False: 0]
  ------------------
 1014|  32.2k|                t = strdup(s);
 1015|  32.2k|                if (!t)
  ------------------
  |  Branch (1015:21): [True: 0, False: 32.2k]
  ------------------
 1016|      0|                        return -ENOMEM;
 1017|  32.2k|        } else
 1018|      0|                t = NULL;
 1019|       |
 1020|  32.2k|        free_and_replace(*p, t);
  ------------------
  |  |   49|  32.2k|        free_and_replace_full(a, b, free)
  |  |  ------------------
  |  |  |  |   10|  32.2k|        ({                                      \
  |  |  |  |   11|  32.2k|                typeof(a)* _a = &(a);           \
  |  |  |  |   12|  32.2k|                typeof(b)* _b = &(b);           \
  |  |  |  |   13|  32.2k|                free_func(*_a);                 \
  |  |  |  |   14|  32.2k|                *_a = *_b;                      \
  |  |  |  |   15|  32.2k|                *_b = NULL;                     \
  |  |  |  |   16|  32.2k|                0;                              \
  |  |  |  |   17|  32.2k|        })
  |  |  ------------------
  ------------------
 1021|       |
 1022|  32.2k|        return 1;
 1023|  32.2k|}
free_and_strdup_warn:
 1025|  26.0k|int free_and_strdup_warn(char **p, const char *s) {
 1026|  26.0k|        int r;
 1027|       |
 1028|  26.0k|        r = free_and_strdup(p, s);
 1029|  26.0k|        if (r < 0)
  ------------------
  |  Branch (1029:13): [True: 0, False: 26.0k]
  ------------------
 1030|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1031|  26.0k|        return r;
 1032|  26.0k|}
string_is_safe:
 1078|   221k|bool string_is_safe(const char *p) {
 1079|   221k|        if (!p)
  ------------------
  |  Branch (1079:13): [True: 0, False: 221k]
  ------------------
 1080|      0|                return false;
 1081|       |
 1082|       |        /* Checks if the specified string contains no quotes or control characters */
 1083|       |
 1084|  3.26M|        for (const char *t = p; *t; t++) {
  ------------------
  |  Branch (1084:33): [True: 3.04M, False: 221k]
  ------------------
 1085|  3.04M|                if (*t > 0 && *t < ' ') /* no control characters */
  ------------------
  |  Branch (1085:21): [True: 3.04M, False: 1.11k]
  |  Branch (1085:31): [True: 304, False: 3.04M]
  ------------------
 1086|    304|                        return false;
 1087|       |
 1088|  3.04M|                if (strchr(QUOTES "\\\x7f", *t))
  ------------------
  |  |   17|  3.04M|#define QUOTES              "\"\'"
  ------------------
  |  Branch (1088:21): [True: 239, False: 3.04M]
  ------------------
 1089|    239|                        return false;
 1090|  3.04M|        }
 1091|       |
 1092|   221k|        return true;
 1093|   221k|}
strdupcspn:
 1333|      1|char* strdupcspn(const char *a, const char *reject) {
 1334|      1|        if (isempty(a))
  ------------------
  |  Branch (1334:13): [True: 0, False: 1]
  ------------------
 1335|      0|                return strdup("");
 1336|      1|        if (isempty(reject))
  ------------------
  |  Branch (1336:13): [True: 0, False: 1]
  ------------------
 1337|      0|                return strdup(a);
 1338|       |
 1339|      1|        return strndup(a, strcspn(a, reject));
 1340|      1|}

tunnel.c:strna:
   32|      2|static inline const char* strna(const char *s) {
   33|      2|        return s ?: "n/a";
  ------------------
  |  Branch (33:16): [True: 2, False: 0]
  ------------------
   34|      2|}
vxlan.c:strna:
   32|      1|static inline const char* strna(const char *s) {
   33|      1|        return s ?: "n/a";
  ------------------
  |  Branch (33:16): [True: 1, False: 0]
  ------------------
   34|      1|}
conf-parser.c:skip_leading_chars:
  116|  1.78M|static inline char* skip_leading_chars(const char *s, const char *bad) {
  117|  1.78M|        if (!s)
  ------------------
  |  Branch (117:13): [True: 0, False: 1.78M]
  ------------------
  118|      0|                return NULL;
  119|       |
  120|  1.78M|        if (!bad)
  ------------------
  |  Branch (120:13): [True: 0, False: 1.78M]
  ------------------
  121|      0|                bad = WHITESPACE;
  ------------------
  |  |   15|      0|#define WHITESPACE          " \t\n\r"
  ------------------
  122|       |
  123|  1.78M|        return (char*) s + strspn(s, bad);
  124|  1.78M|}
fileio.c:skip_leading_chars:
  116|      1|static inline char* skip_leading_chars(const char *s, const char *bad) {
  117|      1|        if (!s)
  ------------------
  |  Branch (117:13): [True: 0, False: 1]
  ------------------
  118|      0|                return NULL;
  119|       |
  120|      1|        if (!bad)
  ------------------
  |  Branch (120:13): [True: 0, False: 1]
  ------------------
  121|      0|                bad = WHITESPACE;
  ------------------
  |  |   15|      0|#define WHITESPACE          " \t\n\r"
  ------------------
  122|       |
  123|      1|        return (char*) s + strspn(s, bad);
  124|      1|}
log.c:strna:
   32|  15.7k|static inline const char* strna(const char *s) {
   33|  15.7k|        return s ?: "n/a";
  ------------------
  |  Branch (33:16): [True: 15.7k, False: 0]
  ------------------
   34|  15.7k|}
string-util.c:skip_leading_chars:
  116|  2.37M|static inline char* skip_leading_chars(const char *s, const char *bad) {
  117|  2.37M|        if (!s)
  ------------------
  |  Branch (117:13): [True: 0, False: 2.37M]
  ------------------
  118|      0|                return NULL;
  119|       |
  120|  2.37M|        if (!bad)
  ------------------
  |  Branch (120:13): [True: 0, False: 2.37M]
  ------------------
  121|      0|                bad = WHITESPACE;
  ------------------
  |  |   15|      0|#define WHITESPACE          " \t\n\r"
  ------------------
  122|       |
  123|  2.37M|        return (char*) s + strspn(s, bad);
  124|  2.37M|}
string-util.c:char_is_cc:
  144|   533k|static inline bool char_is_cc(char p) {
  145|       |        /* char is unsigned on some architectures, e.g. aarch64. So, compiler may warn the condition
  146|       |         * p >= 0 is always true. See #19543. Hence, let's cast to unsigned before the comparison. Note
  147|       |         * that the cast in the right hand side is redundant, as according to the C standard, compilers
  148|       |         * automatically cast a signed value to unsigned when comparing with an unsigned variable. Just
  149|       |         * for safety and readability. */
  150|   533k|        return (uint8_t) p < (uint8_t) ' ' || p == 127;
  ------------------
  |  Branch (150:16): [True: 0, False: 533k]
  |  Branch (150:47): [True: 0, False: 533k]
  ------------------
  151|   533k|}
time-util.c:skip_leading_chars:
  116|  6.79k|static inline char* skip_leading_chars(const char *s, const char *bad) {
  117|  6.79k|        if (!s)
  ------------------
  |  Branch (117:13): [True: 0, False: 6.79k]
  ------------------
  118|      0|                return NULL;
  119|       |
  120|  6.79k|        if (!bad)
  ------------------
  |  Branch (120:13): [True: 6.79k, False: 0]
  ------------------
  121|  6.79k|                bad = WHITESPACE;
  ------------------
  |  |   15|  6.79k|#define WHITESPACE          " \t\n\r"
  ------------------
  122|       |
  123|  6.79k|        return (char*) s + strspn(s, bad);
  124|  6.79k|}
time-util.c:in_charset:
  138|    388|static inline bool _pure_ in_charset(const char *s, const char *charset) {
  139|    388|        assert(s);
  ------------------
  |  |   72|    388|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    388|        do {                                                            \
  |  |  |  |   59|    388|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    388|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 388]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    388|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    388|        } while (false)
  |  |  ------------------
  ------------------
  140|    388|        assert(charset);
  ------------------
  |  |   72|    388|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    388|        do {                                                            \
  |  |  |  |   59|    388|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    388|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 388]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    388|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    388|        } while (false)
  |  |  ------------------
  ------------------
  141|    388|        return s[strspn(s, charset)] == '\0';
  142|    388|}
user-util.c:in_charset:
  138|    639|static inline bool _pure_ in_charset(const char *s, const char *charset) {
  139|    639|        assert(s);
  ------------------
  |  |   72|    639|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    639|        do {                                                            \
  |  |  |  |   59|    639|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    639|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 639]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    639|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    639|        } while (false)
  |  |  ------------------
  ------------------
  140|    639|        assert(charset);
  ------------------
  |  |   72|    639|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    639|        do {                                                            \
  |  |  |  |   59|    639|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    639|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 639]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    639|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    639|        } while (false)
  |  |  ------------------
  ------------------
  141|    639|        return s[strspn(s, charset)] == '\0';
  142|    639|}

strv_find:
   20|  37.5k|char* strv_find(char * const *l, const char *name) {
   21|  37.5k|        assert(name);
  ------------------
  |  |   72|  37.5k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  37.5k|        do {                                                            \
  |  |  |  |   59|  37.5k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  37.5k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 37.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  37.5k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  37.5k|        } while (false)
  |  |  ------------------
  ------------------
   22|       |
   23|  37.5k|        STRV_FOREACH(i, l)
  ------------------
  |  |   10|  37.5k|        _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |    7|   110k|        for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (7:41): [True: 109k, False: 835]
  |  |  |  |  |  Branch (7:52): [True: 73.2k, False: 36.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   24|  73.2k|                if (streq(*i, name))
  ------------------
  |  |   46|  73.2k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 586, False: 72.6k]
  |  |  ------------------
  ------------------
   25|    586|                        return *i;
   26|       |
   27|  36.9k|        return NULL;
   28|  37.5k|}
strv_find_case:
   30|  13.5k|char* strv_find_case(char * const *l, const char *name) {
   31|  13.5k|        assert(name);
  ------------------
  |  |   72|  13.5k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.5k|        do {                                                            \
  |  |  |  |   59|  13.5k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  13.5k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.5k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.5k|        } while (false)
  |  |  ------------------
  ------------------
   32|       |
   33|  13.5k|        STRV_FOREACH(i, l)
  ------------------
  |  |   10|  13.5k|        _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |    7|  84.0k|        for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (7:41): [True: 84.0k, False: 0]
  |  |  |  |  |  Branch (7:52): [True: 72.9k, False: 11.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   34|  72.9k|                if (strcaseeq(*i, name))
  ------------------
  |  |   48|  72.9k|#define strcaseeq(a,b) (strcasecmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (48:24): [True: 2.45k, False: 70.4k]
  |  |  ------------------
  ------------------
   35|  2.45k|                        return *i;
   36|       |
   37|  11.1k|        return NULL;
   38|  13.5k|}
strv_free:
  139|  63.6k|char** strv_free(char **l) {
  140|  63.6k|        STRV_FOREACH(k, l)
  ------------------
  |  |   10|  63.6k|        _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |    7|   165k|        for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (7:41): [True: 150k, False: 15.0k]
  |  |  |  |  |  Branch (7:52): [True: 102k, False: 48.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  141|   102k|                free(*k);
  142|       |
  143|  63.6k|        return mfree(l);
  ------------------
  |  |  404|  63.6k|        ({                                      \
  |  |  405|  63.6k|                free(memory);                   \
  |  |  406|  63.6k|                (typeof(memory)) NULL;          \
  |  |  407|  63.6k|        })
  ------------------
  144|  63.6k|}
strv_free_erase:
  146|    450|char** strv_free_erase(char **l) {
  147|    450|        STRV_FOREACH(i, l)
  ------------------
  |  |   10|    450|        _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |    7|    450|        for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (7:41): [True: 0, False: 450]
  |  |  |  |  |  Branch (7:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  148|      0|                erase_and_freep(i);
  149|       |
  150|    450|        return mfree(l);
  ------------------
  |  |  404|    450|        ({                                      \
  |  |  405|    450|                free(memory);                   \
  |  |  406|    450|                (typeof(memory)) NULL;          \
  |  |  407|    450|        })
  ------------------
  151|    450|}
strv_copy_n:
  162|  23.8k|char** strv_copy_n(char * const *l, size_t m) {
  163|  23.8k|        _cleanup_strv_free_ char **result = NULL;
  ------------------
  |  |   21|  23.8k|#define _cleanup_strv_free_ _cleanup_(strv_freep)
  |  |  ------------------
  |  |  |  |   78|  23.8k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  164|  23.8k|        char **k;
  165|       |
  166|  23.8k|        result = new(char*, MIN(strv_length(l), m) + 1);
  ------------------
  |  |   17|  47.7k|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  |  |  ------------------
  |  |  |  Branch (17:41): [True: 23.8k, False: 0]
  |  |  ------------------
  ------------------
  167|  23.8k|        if (!result)
  ------------------
  |  Branch (167:13): [True: 0, False: 23.8k]
  ------------------
  168|      0|                return NULL;
  169|       |
  170|  23.8k|        k = result;
  171|  23.8k|        STRV_FOREACH(i, l) {
  ------------------
  |  |   10|  23.8k|        _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |    7|  27.8k|        for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (7:41): [True: 4.72k, False: 23.0k]
  |  |  |  |  |  Branch (7:52): [True: 3.94k, False: 788]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  172|  3.94k|                if (m == 0)
  ------------------
  |  Branch (172:21): [True: 0, False: 3.94k]
  ------------------
  173|      0|                        break;
  174|       |
  175|  3.94k|                *k = strdup(*i);
  176|  3.94k|                if (!*k)
  ------------------
  |  Branch (176:21): [True: 0, False: 3.94k]
  ------------------
  177|      0|                        return NULL;
  178|  3.94k|                k++;
  179|       |
  180|  3.94k|                if (m != SIZE_MAX)
  ------------------
  |  Branch (180:21): [True: 0, False: 3.94k]
  ------------------
  181|      0|                        m--;
  182|  3.94k|        }
  183|       |
  184|  23.8k|        *k = NULL;
  185|  23.8k|        return TAKE_PTR(result);
  ------------------
  |  |  388|  23.8k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  23.8k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  23.8k|        ({                                                       \
  |  |  |  |  |  |  381|  23.8k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  23.8k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  23.8k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  23.8k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  23.8k|                _var_;                                           \
  |  |  |  |  |  |  386|  23.8k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  186|  23.8k|}
strv_length:
  204|   122k|size_t strv_length(char * const *l) {
  205|   122k|        size_t n = 0;
  206|       |
  207|   122k|        STRV_FOREACH(i, l)
  ------------------
  |  |   10|   122k|        _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |    7|   275k|        for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (7:41): [True: 227k, False: 47.7k]
  |  |  |  |  |  Branch (7:52): [True: 152k, False: 74.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  208|   152k|                n++;
  209|       |
  210|   122k|        return n;
  211|   122k|}
strv_extend_strv_biconcat:
  361|  23.0k|int strv_extend_strv_biconcat(char ***a, const char *prefix, const char* const *b, const char *suffix) {
  362|  23.0k|        int r;
  363|       |
  364|  23.0k|        assert(a);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
  365|       |
  366|  92.3k|        STRV_FOREACH(s, b) {
  ------------------
  |  |   10|  23.0k|        _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |    7|   115k|        for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (7:41): [True: 115k, False: 0]
  |  |  |  |  |  Branch (7:52): [True: 92.3k, False: 23.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  367|  92.3k|                char *v;
  368|       |
  369|  92.3k|                v = strjoin(strempty(prefix), *s, suffix);
  ------------------
  |  |   91|  92.3k|#define strjoin(a, ...) strextend_with_separator_internal(NULL, NULL, a, __VA_ARGS__, NULL)
  ------------------
  370|  92.3k|                if (!v)
  ------------------
  |  Branch (370:21): [True: 0, False: 92.3k]
  ------------------
  371|      0|                        return -ENOMEM;
  372|       |
  373|  92.3k|                r = strv_consume(a, v);
  374|  92.3k|                if (r < 0)
  ------------------
  |  Branch (374:21): [True: 0, False: 92.3k]
  ------------------
  375|      0|                        return r;
  376|  92.3k|        }
  377|       |
  378|  23.0k|        return 0;
  379|  23.0k|}
strv_push_with_size:
  584|  97.9k|int strv_push_with_size(char ***l, size_t *n, char *value) {
  585|       |        /* n is a pointer to a variable to store the size of l.
  586|       |         * If not given (i.e. n is NULL or *n is SIZE_MAX), size will be calculated using strv_length().
  587|       |         * If n is not NULL, the size after the push will be returned.
  588|       |         * If value is empty, no action is taken and *n is not set. */
  589|       |
  590|  97.9k|        if (!value)
  ------------------
  |  Branch (590:13): [True: 0, False: 97.9k]
  ------------------
  591|      0|                return 0;
  592|       |
  593|  97.9k|        size_t size = n ? *n : SIZE_MAX;
  ------------------
  |  Branch (593:23): [True: 0, False: 97.9k]
  ------------------
  594|  97.9k|        if (size == SIZE_MAX)
  ------------------
  |  Branch (594:13): [True: 97.9k, False: 0]
  ------------------
  595|  97.9k|                size = strv_length(*l);
  596|       |
  597|       |        /* Check for overflow */
  598|  97.9k|        if (size > SIZE_MAX-2)
  ------------------
  |  Branch (598:13): [True: 0, False: 97.9k]
  ------------------
  599|      0|                return -ENOMEM;
  600|       |
  601|  97.9k|        char **c = reallocarray(*l, GREEDY_ALLOC_ROUND_UP(size + 2), sizeof(char*));
  602|  97.9k|        if (!c)
  ------------------
  |  Branch (602:13): [True: 0, False: 97.9k]
  ------------------
  603|      0|                return -ENOMEM;
  604|       |
  605|  97.9k|        c[size] = value;
  606|  97.9k|        c[size+1] = NULL;
  607|       |
  608|  97.9k|        *l = c;
  609|  97.9k|        if (n)
  ------------------
  |  Branch (609:13): [True: 0, False: 97.9k]
  ------------------
  610|      0|                *n = size + 1;
  611|  97.9k|        return 0;
  612|  97.9k|}
strv_consume_with_size:
  673|  97.9k|int strv_consume_with_size(char ***l, size_t *n, char *value) {
  674|  97.9k|        int r;
  675|       |
  676|  97.9k|        r = strv_push_with_size(l, n, value);
  677|  97.9k|        if (r < 0)
  ------------------
  |  Branch (677:13): [True: 0, False: 97.9k]
  ------------------
  678|      0|                free(value);
  679|       |
  680|  97.9k|        return r;
  681|  97.9k|}
strv_extend_with_size:
  718|  5.61k|int strv_extend_with_size(char ***l, size_t *n, const char *value) {
  719|  5.61k|        char *v;
  720|       |
  721|  5.61k|        if (!value)
  ------------------
  |  Branch (721:13): [True: 0, False: 5.61k]
  ------------------
  722|      0|                return 0;
  723|       |
  724|  5.61k|        v = strdup(value);
  725|  5.61k|        if (!v)
  ------------------
  |  Branch (725:13): [True: 0, False: 5.61k]
  ------------------
  726|      0|                return -ENOMEM;
  727|       |
  728|  5.61k|        return strv_consume_with_size(l, n, v);
  729|  5.61k|}
strv_uniq:
  791|    788|char** strv_uniq(char **l) {
  792|       |        /* Drops duplicate entries. The first identical string will be
  793|       |         * kept, the others dropped */
  794|       |
  795|    788|        STRV_FOREACH(i, l)
  ------------------
  |  |   10|    788|        _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |    7|  4.72k|        for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (7:41): [True: 4.72k, False: 0]
  |  |  |  |  |  Branch (7:52): [True: 3.94k, False: 788]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  796|  3.94k|                strv_remove(i+1, *i);
  797|       |
  798|    788|        return l;
  799|    788|}
strv_remove:
  809|  3.94k|char** strv_remove(char **l, const char *s) {
  810|  3.94k|        char **f, **t;
  811|       |
  812|  3.94k|        if (!l)
  ------------------
  |  Branch (812:13): [True: 0, False: 3.94k]
  ------------------
  813|      0|                return NULL;
  814|       |
  815|  3.94k|        assert(s);
  ------------------
  |  |   72|  3.94k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.94k|        do {                                                            \
  |  |  |  |   59|  3.94k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.94k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.94k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.94k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.94k|        } while (false)
  |  |  ------------------
  ------------------
  816|       |
  817|       |        /* Drops every occurrence of s in the string list, edits
  818|       |         * in-place. */
  819|       |
  820|  11.8k|        for (f = t = l; *f; f++)
  ------------------
  |  Branch (820:25): [True: 7.88k, False: 3.94k]
  ------------------
  821|  7.88k|                if (streq(*f, s))
  ------------------
  |  |   46|  7.88k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 0, False: 7.88k]
  |  |  ------------------
  ------------------
  822|      0|                        free(*f);
  823|  7.88k|                else
  824|  7.88k|                        *(t++) = *f;
  825|       |
  826|  3.94k|        *t = NULL;
  827|  3.94k|        return l;
  828|  3.94k|}
startswith_strv:
  924|   220k|char* startswith_strv(const char *s, char * const *l) {
  925|   440k|        STRV_FOREACH(i, l) {
  ------------------
  |  |   10|   220k|        _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |    7|   659k|        for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (7:41): [True: 659k, False: 0]
  |  |  |  |  |  Branch (7:52): [True: 440k, False: 219k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  926|   440k|                char *found = startswith(s, *i);
  927|   440k|                if (found)
  ------------------
  |  Branch (927:21): [True: 877, False: 439k]
  ------------------
  928|    877|                        return found;
  929|   440k|        }
  930|       |
  931|   219k|        return NULL;
  932|   220k|}
endswith_strv:
  934|  96.2k|char* endswith_strv(const char *s, char * const *l) {
  935|   192k|        STRV_FOREACH(i, l) {
  ------------------
  |  |   10|  96.2k|        _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |    7|   288k|        for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (7:41): [True: 288k, False: 0]
  |  |  |  |  |  Branch (7:52): [True: 192k, False: 96.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  936|   192k|                char *found = endswith(s, *i);
  937|   192k|                if (found)
  ------------------
  |  Branch (937:21): [True: 0, False: 192k]
  ------------------
  938|      0|                        return found;
  939|   192k|        }
  940|       |
  941|  96.2k|        return NULL;
  942|  96.2k|}

group-record.c:strv_isempty:
  102|     29|static inline bool strv_isempty(char * const *l) {
  103|     29|        return !l || !*l;
  ------------------
  |  Branch (103:16): [True: 29, False: 0]
  |  Branch (103:22): [True: 0, False: 0]
  ------------------
  104|     29|}
user-record-nss.c:strv_isempty:
  102|    208|static inline bool strv_isempty(char * const *l) {
  103|    208|        return !l || !*l;
  ------------------
  |  Branch (103:16): [True: 208, False: 0]
  |  Branch (103:22): [True: 0, False: 0]
  ------------------
  104|    208|}
user-record.c:strv_isempty:
  102|    877|static inline bool strv_isempty(char * const *l) {
  103|    877|        return !l || !*l;
  ------------------
  |  Branch (103:16): [True: 877, False: 0]
  |  Branch (103:22): [True: 0, False: 0]
  ------------------
  104|    877|}
userdb.c:strv_extend:
   52|  1.67k|static inline int strv_extend(char ***l, const char *value) {
   53|  1.67k|        return strv_extend_with_size(l, NULL, value);
   54|  1.67k|}
userdb.c:strv_isempty:
  102|    835|static inline bool strv_isempty(char * const *l) {
  103|    835|        return !l || !*l;
  ------------------
  |  Branch (103:16): [True: 835, False: 0]
  |  Branch (103:22): [True: 0, False: 0]
  ------------------
  104|    835|}
conf-files.c:strv_copy:
   30|  23.0k|static inline char** strv_copy(char * const *l) {
   31|  23.0k|        return strv_copy_n(l, SIZE_MAX);
   32|  23.0k|}
conf-files.c:strv_extend_strv_concat:
   41|  23.0k|static inline int strv_extend_strv_concat(char ***a, const char* const *b, const char *suffix) {
   42|  23.0k|        return strv_extend_strv_biconcat(a, NULL, b, suffix);
   43|  23.0k|}
fileio.c:strv_copy:
   30|    788|static inline char** strv_copy(char * const *l) {
   31|    788|        return strv_copy_n(l, SIZE_MAX);
   32|    788|}
nulstr-util.c:strv_extend:
   52|  3.94k|static inline int strv_extend(char ***l, const char *value) {
   53|  3.94k|        return strv_extend_with_size(l, NULL, value);
   54|  3.94k|}
path-util.c:strv_isempty:
  102|  1.57k|static inline bool strv_isempty(char * const *l) {
  103|  1.57k|        return !l || !*l;
  ------------------
  |  Branch (103:16): [True: 0, False: 1.57k]
  |  Branch (103:22): [True: 0, False: 1.57k]
  ------------------
  104|  1.57k|}
strv.c:strv_consume:
   74|  92.3k|static inline int strv_consume(char ***l, char *value) {
   75|  92.3k|        return strv_consume_with_size(l, NULL, value);
   76|  92.3k|}

log_level_is_valid:
  101|  13.0k|bool log_level_is_valid(int level) {
  102|  13.0k|        return level >= 0 && level <= LOG_DEBUG;
  ------------------
  |  Branch (102:16): [True: 13.0k, False: 0]
  |  Branch (102:30): [True: 13.0k, False: 0]
  ------------------
  103|  13.0k|}

isatty_safe:
   60|  1.76M|bool isatty_safe(int fd) {
   61|  1.76M|        assert(fd >= 0);
  ------------------
  |  |   72|  1.76M|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.76M|        do {                                                            \
  |  |  |  |   59|  1.76M|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.76M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.76M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.76M|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.76M|        } while (false)
  |  |  ------------------
  ------------------
   62|       |
   63|  1.76M|        if (isatty(fd))
  ------------------
  |  Branch (63:13): [True: 0, False: 1.76M]
  ------------------
   64|      0|                return true;
   65|       |
   66|       |        /* Linux/glibc returns EIO for hung up TTY on isatty(). Which is wrong, the thing doesn't stop being
   67|       |         * a TTY after all, just because it is temporarily hung up. Let's work around this here, until this
   68|       |         * is fixed in glibc. See: https://sourceware.org/bugzilla/show_bug.cgi?id=32103 */
   69|  1.76M|        if (errno == EIO)
  ------------------
  |  Branch (69:13): [True: 0, False: 1.76M]
  ------------------
   70|      0|                return true;
   71|       |
   72|       |        /* Be resilient if we're working on stdio, since they're set up by parent process. */
   73|  1.76M|        assert(errno != EBADF || IN_SET(fd, STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO));
  ------------------
  |  |   72|  1.76M|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.76M|        do {                                                            \
  |  |  |  |   59|  1.76M|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.76M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.76M]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 1.76M, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.76M|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.76M|        } while (false)
  |  |  ------------------
  ------------------
   74|       |
   75|      0|        return false;
   76|  1.76M|}

parse_time:
 1134|  2.93k|int parse_time(const char *t, usec_t *ret, usec_t default_unit) {
 1135|  2.93k|        const char *p, *s;
 1136|       |
 1137|  2.93k|        assert(t);
  ------------------
  |  |   72|  2.93k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.93k|        do {                                                            \
  |  |  |  |   59|  2.93k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.93k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.93k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.93k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.93k|        } while (false)
  |  |  ------------------
  ------------------
 1138|  2.93k|        assert(default_unit > 0);
  ------------------
  |  |   72|  2.93k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.93k|        do {                                                            \
  |  |  |  |   59|  2.93k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.93k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.93k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.93k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.93k|        } while (false)
  |  |  ------------------
  ------------------
 1139|       |
 1140|  2.93k|        p = skip_leading_chars(t, /* bad = */ NULL);
 1141|  2.93k|        s = startswith(p, "infinity");
 1142|  2.93k|        if (s) {
  ------------------
  |  Branch (1142:13): [True: 388, False: 2.54k]
  ------------------
 1143|    388|                if (!in_charset(s, WHITESPACE))
  ------------------
  |  |   15|    388|#define WHITESPACE          " \t\n\r"
  ------------------
  |  Branch (1143:21): [True: 194, False: 194]
  ------------------
 1144|    194|                        return -EINVAL;
 1145|       |
 1146|    194|                if (ret)
  ------------------
  |  Branch (1146:21): [True: 194, False: 0]
  ------------------
 1147|    194|                        *ret = USEC_INFINITY;
  ------------------
  |  |   35|    194|#define USEC_INFINITY ((usec_t) UINT64_MAX)
  ------------------
 1148|    194|                return 0;
 1149|    388|        }
 1150|       |
 1151|  2.54k|        usec_t usec = 0;
 1152|       |
 1153|  3.85k|        for (bool something = false;;) {
 1154|  3.85k|                usec_t multiplier = default_unit, k;
 1155|  3.85k|                long long l;
 1156|  3.85k|                char *e;
 1157|       |
 1158|  3.85k|                p = skip_leading_chars(p, /* bad = */ NULL);
 1159|  3.85k|                if (*p == 0) {
  ------------------
  |  Branch (1159:21): [True: 536, False: 3.32k]
  ------------------
 1160|    536|                        if (!something)
  ------------------
  |  Branch (1160:29): [True: 197, False: 339]
  ------------------
 1161|    197|                                return -EINVAL;
 1162|       |
 1163|    339|                        break;
 1164|    536|                }
 1165|       |
 1166|  3.32k|                if (*p == '-') /* Don't allow "-0" */
  ------------------
  |  Branch (1166:21): [True: 199, False: 3.12k]
  ------------------
 1167|    199|                        return -ERANGE;
 1168|       |
 1169|  3.12k|                errno = 0;
 1170|  3.12k|                l = strtoll(p, &e, 10);
 1171|  3.12k|                if (errno > 0)
  ------------------
  |  Branch (1171:21): [True: 195, False: 2.92k]
  ------------------
 1172|    195|                        return -errno;
 1173|  2.92k|                if (l < 0)
  ------------------
  |  Branch (1173:21): [True: 261, False: 2.66k]
  ------------------
 1174|    261|                        return -ERANGE;
 1175|       |
 1176|  2.66k|                if (*e == '.') {
  ------------------
  |  Branch (1176:21): [True: 662, False: 2.00k]
  ------------------
 1177|    662|                        p = e + 1;
 1178|    662|                        p += strspn(p, DIGITS);
  ------------------
  |  |   20|    662|#define DIGITS              "0123456789"
  ------------------
 1179|  2.00k|                } else if (e == p)
  ------------------
  |  Branch (1179:28): [True: 230, False: 1.77k]
  ------------------
 1180|    230|                        return -EINVAL;
 1181|  1.77k|                else
 1182|  1.77k|                        p = e;
 1183|       |
 1184|  2.43k|                s = extract_multiplier(p + strspn(p, WHITESPACE), &multiplier);
  ------------------
  |  |   15|  2.43k|#define WHITESPACE          " \t\n\r"
  ------------------
 1185|  2.43k|                if (s == p && *s != '\0')
  ------------------
  |  Branch (1185:21): [True: 946, False: 1.49k]
  |  Branch (1185:31): [True: 242, False: 704]
  ------------------
 1186|       |                        /* Don't allow '12.34.56', but accept '12.34 .56' or '12.34s.56' */
 1187|    242|                        return -EINVAL;
 1188|       |
 1189|  2.19k|                p = s;
 1190|       |
 1191|  2.19k|                if ((usec_t) l >= USEC_INFINITY / multiplier)
  ------------------
  |  |   35|  2.19k|#define USEC_INFINITY ((usec_t) UINT64_MAX)
  ------------------
  |  Branch (1191:21): [True: 221, False: 1.97k]
  ------------------
 1192|    221|                        return -ERANGE;
 1193|       |
 1194|  1.97k|                k = (usec_t) l * multiplier;
 1195|  1.97k|                if (k >= USEC_INFINITY - usec)
  ------------------
  |  |   35|  1.97k|#define USEC_INFINITY ((usec_t) UINT64_MAX)
  ------------------
  |  Branch (1195:21): [True: 236, False: 1.73k]
  ------------------
 1196|    236|                        return -ERANGE;
 1197|       |
 1198|  1.73k|                usec += k;
 1199|       |
 1200|  1.73k|                something = true;
 1201|       |
 1202|  1.73k|                if (*e == '.') {
  ------------------
  |  Branch (1202:21): [True: 647, False: 1.09k]
  ------------------
 1203|    647|                        usec_t m = multiplier / 10;
 1204|    647|                        const char *b;
 1205|       |
 1206|  1.10k|                        for (b = e + 1; *b >= '0' && *b <= '9'; b++, m /= 10) {
  ------------------
  |  Branch (1206:41): [True: 686, False: 415]
  |  Branch (1206:54): [True: 676, False: 10]
  ------------------
 1207|    676|                                k = (usec_t) (*b - '0') * m;
 1208|    676|                                if (k >= USEC_INFINITY - usec)
  ------------------
  |  |   35|    676|#define USEC_INFINITY ((usec_t) UINT64_MAX)
  ------------------
  |  Branch (1208:37): [True: 222, False: 454]
  ------------------
 1209|    222|                                        return -ERANGE;
 1210|       |
 1211|    454|                                usec += k;
 1212|    454|                        }
 1213|       |
 1214|       |                        /* Don't allow "0.-0", "3.+1", "3. 1", "3.sec" or "3.hoge" */
 1215|    425|                        if (b == e + 1)
  ------------------
  |  Branch (1215:29): [True: 202, False: 223]
  ------------------
 1216|    202|                                return -EINVAL;
 1217|    425|                }
 1218|  1.73k|        }
 1219|       |
 1220|    339|        if (ret)
  ------------------
  |  Branch (1220:13): [True: 339, False: 0]
  ------------------
 1221|    339|                *ret = usec;
 1222|    339|        return 0;
 1223|  2.54k|}
parse_sec:
 1225|  2.93k|int parse_sec(const char *t, usec_t *ret) {
 1226|  2.93k|        return parse_time(t, ret, USEC_PER_SEC);
  ------------------
  |  |   39|  2.93k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  ------------------
 1227|  2.93k|}
time-util.c:extract_multiplier:
 1081|  2.43k|static const char* extract_multiplier(const char *p, usec_t *ret) {
 1082|  2.43k|        static const struct {
 1083|  2.43k|                const char *suffix;
 1084|  2.43k|                usec_t usec;
 1085|  2.43k|        } table[] = {
 1086|  2.43k|                { "seconds", USEC_PER_SEC    },
  ------------------
  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  ------------------
 1087|  2.43k|                { "second",  USEC_PER_SEC    },
  ------------------
  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  ------------------
 1088|  2.43k|                { "sec",     USEC_PER_SEC    },
  ------------------
  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  ------------------
 1089|  2.43k|                { "s",       USEC_PER_SEC    },
  ------------------
  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  ------------------
 1090|  2.43k|                { "minutes", USEC_PER_MINUTE },
  ------------------
  |  |   45|  2.43k|#define USEC_PER_MINUTE ((usec_t) (60ULL*USEC_PER_SEC))
  |  |  ------------------
  |  |  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  ------------------
  ------------------
 1091|  2.43k|                { "minute",  USEC_PER_MINUTE },
  ------------------
  |  |   45|  2.43k|#define USEC_PER_MINUTE ((usec_t) (60ULL*USEC_PER_SEC))
  |  |  ------------------
  |  |  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  ------------------
  ------------------
 1092|  2.43k|                { "min",     USEC_PER_MINUTE },
  ------------------
  |  |   45|  2.43k|#define USEC_PER_MINUTE ((usec_t) (60ULL*USEC_PER_SEC))
  |  |  ------------------
  |  |  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  ------------------
  ------------------
 1093|  2.43k|                { "months",  USEC_PER_MONTH  },
  ------------------
  |  |   53|  2.43k|#define USEC_PER_MONTH ((usec_t) (2629800ULL*USEC_PER_SEC))
  |  |  ------------------
  |  |  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  ------------------
  ------------------
 1094|  2.43k|                { "month",   USEC_PER_MONTH  },
  ------------------
  |  |   53|  2.43k|#define USEC_PER_MONTH ((usec_t) (2629800ULL*USEC_PER_SEC))
  |  |  ------------------
  |  |  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  ------------------
  ------------------
 1095|  2.43k|                { "M",       USEC_PER_MONTH  },
  ------------------
  |  |   53|  2.43k|#define USEC_PER_MONTH ((usec_t) (2629800ULL*USEC_PER_SEC))
  |  |  ------------------
  |  |  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  ------------------
  ------------------
 1096|  2.43k|                { "msec",    USEC_PER_MSEC   },
  ------------------
  |  |   40|  2.43k|#define USEC_PER_MSEC ((usec_t) 1000ULL)
  ------------------
 1097|  2.43k|                { "ms",      USEC_PER_MSEC   },
  ------------------
  |  |   40|  2.43k|#define USEC_PER_MSEC ((usec_t) 1000ULL)
  ------------------
 1098|  2.43k|                { "m",       USEC_PER_MINUTE },
  ------------------
  |  |   45|  2.43k|#define USEC_PER_MINUTE ((usec_t) (60ULL*USEC_PER_SEC))
  |  |  ------------------
  |  |  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  ------------------
  ------------------
 1099|  2.43k|                { "hours",   USEC_PER_HOUR   },
  ------------------
  |  |   47|  2.43k|#define USEC_PER_HOUR ((usec_t) (60ULL*USEC_PER_MINUTE))
  |  |  ------------------
  |  |  |  |   45|  2.43k|#define USEC_PER_MINUTE ((usec_t) (60ULL*USEC_PER_SEC))
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1100|  2.43k|                { "hour",    USEC_PER_HOUR   },
  ------------------
  |  |   47|  2.43k|#define USEC_PER_HOUR ((usec_t) (60ULL*USEC_PER_MINUTE))
  |  |  ------------------
  |  |  |  |   45|  2.43k|#define USEC_PER_MINUTE ((usec_t) (60ULL*USEC_PER_SEC))
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1101|  2.43k|                { "hr",      USEC_PER_HOUR   },
  ------------------
  |  |   47|  2.43k|#define USEC_PER_HOUR ((usec_t) (60ULL*USEC_PER_MINUTE))
  |  |  ------------------
  |  |  |  |   45|  2.43k|#define USEC_PER_MINUTE ((usec_t) (60ULL*USEC_PER_SEC))
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1102|  2.43k|                { "h",       USEC_PER_HOUR   },
  ------------------
  |  |   47|  2.43k|#define USEC_PER_HOUR ((usec_t) (60ULL*USEC_PER_MINUTE))
  |  |  ------------------
  |  |  |  |   45|  2.43k|#define USEC_PER_MINUTE ((usec_t) (60ULL*USEC_PER_SEC))
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1103|  2.43k|                { "days",    USEC_PER_DAY    },
  ------------------
  |  |   49|  2.43k|#define USEC_PER_DAY ((usec_t) (24ULL*USEC_PER_HOUR))
  |  |  ------------------
  |  |  |  |   47|  2.43k|#define USEC_PER_HOUR ((usec_t) (60ULL*USEC_PER_MINUTE))
  |  |  |  |  ------------------
  |  |  |  |  |  |   45|  2.43k|#define USEC_PER_MINUTE ((usec_t) (60ULL*USEC_PER_SEC))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1104|  2.43k|                { "day",     USEC_PER_DAY    },
  ------------------
  |  |   49|  2.43k|#define USEC_PER_DAY ((usec_t) (24ULL*USEC_PER_HOUR))
  |  |  ------------------
  |  |  |  |   47|  2.43k|#define USEC_PER_HOUR ((usec_t) (60ULL*USEC_PER_MINUTE))
  |  |  |  |  ------------------
  |  |  |  |  |  |   45|  2.43k|#define USEC_PER_MINUTE ((usec_t) (60ULL*USEC_PER_SEC))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1105|  2.43k|                { "d",       USEC_PER_DAY    },
  ------------------
  |  |   49|  2.43k|#define USEC_PER_DAY ((usec_t) (24ULL*USEC_PER_HOUR))
  |  |  ------------------
  |  |  |  |   47|  2.43k|#define USEC_PER_HOUR ((usec_t) (60ULL*USEC_PER_MINUTE))
  |  |  |  |  ------------------
  |  |  |  |  |  |   45|  2.43k|#define USEC_PER_MINUTE ((usec_t) (60ULL*USEC_PER_SEC))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1106|  2.43k|                { "weeks",   USEC_PER_WEEK   },
  ------------------
  |  |   51|  2.43k|#define USEC_PER_WEEK ((usec_t) (7ULL*USEC_PER_DAY))
  |  |  ------------------
  |  |  |  |   49|  2.43k|#define USEC_PER_DAY ((usec_t) (24ULL*USEC_PER_HOUR))
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  2.43k|#define USEC_PER_HOUR ((usec_t) (60ULL*USEC_PER_MINUTE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  2.43k|#define USEC_PER_MINUTE ((usec_t) (60ULL*USEC_PER_SEC))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1107|  2.43k|                { "week",    USEC_PER_WEEK   },
  ------------------
  |  |   51|  2.43k|#define USEC_PER_WEEK ((usec_t) (7ULL*USEC_PER_DAY))
  |  |  ------------------
  |  |  |  |   49|  2.43k|#define USEC_PER_DAY ((usec_t) (24ULL*USEC_PER_HOUR))
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  2.43k|#define USEC_PER_HOUR ((usec_t) (60ULL*USEC_PER_MINUTE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  2.43k|#define USEC_PER_MINUTE ((usec_t) (60ULL*USEC_PER_SEC))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1108|  2.43k|                { "w",       USEC_PER_WEEK   },
  ------------------
  |  |   51|  2.43k|#define USEC_PER_WEEK ((usec_t) (7ULL*USEC_PER_DAY))
  |  |  ------------------
  |  |  |  |   49|  2.43k|#define USEC_PER_DAY ((usec_t) (24ULL*USEC_PER_HOUR))
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  2.43k|#define USEC_PER_HOUR ((usec_t) (60ULL*USEC_PER_MINUTE))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  2.43k|#define USEC_PER_MINUTE ((usec_t) (60ULL*USEC_PER_SEC))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1109|  2.43k|                { "years",   USEC_PER_YEAR   },
  ------------------
  |  |   55|  2.43k|#define USEC_PER_YEAR ((usec_t) (31557600ULL*USEC_PER_SEC))
  |  |  ------------------
  |  |  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  ------------------
  ------------------
 1110|  2.43k|                { "year",    USEC_PER_YEAR   },
  ------------------
  |  |   55|  2.43k|#define USEC_PER_YEAR ((usec_t) (31557600ULL*USEC_PER_SEC))
  |  |  ------------------
  |  |  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  ------------------
  ------------------
 1111|  2.43k|                { "y",       USEC_PER_YEAR   },
  ------------------
  |  |   55|  2.43k|#define USEC_PER_YEAR ((usec_t) (31557600ULL*USEC_PER_SEC))
  |  |  ------------------
  |  |  |  |   39|  2.43k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  ------------------
  ------------------
 1112|  2.43k|                { "usec",    1ULL            },
 1113|  2.43k|                { "us",      1ULL            },
 1114|  2.43k|                { "μs",      1ULL            }, /* U+03bc (aka GREEK SMALL LETTER MU) */
 1115|  2.43k|                { "µs",      1ULL            }, /* U+b5 (aka MICRO SIGN) */
 1116|  2.43k|        };
 1117|       |
 1118|  2.43k|        assert(p);
  ------------------
  |  |   72|  2.43k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.43k|        do {                                                            \
  |  |  |  |   59|  2.43k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.43k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.43k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.43k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.43k|        } while (false)
  |  |  ------------------
  ------------------
 1119|  2.43k|        assert(ret);
  ------------------
  |  |   72|  2.43k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.43k|        do {                                                            \
  |  |  |  |   59|  2.43k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.43k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.43k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.43k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.43k|        } while (false)
  |  |  ------------------
  ------------------
 1120|       |
 1121|  68.3k|        FOREACH_ELEMENT(i, table) {
  ------------------
  |  |  466|  2.43k|        FOREACH_ARRAY(i, array, ELEMENTSOF(array))
  |  |  ------------------
  |  |  |  |  463|  2.43k|        _FOREACH_ARRAY(i, array, num, UNIQ_T(m, UNIQ), UNIQ_T(end, UNIQ))
  |  |  |  |  ------------------
  |  |  |  |  |  |  457|  2.43k|        for (typeof(array[0]) *i = (array), *end = ({                   \
  |  |  |  |  |  |  458|  2.43k|                                typeof(num) m = (num);                  \
  |  |  |  |  |  |  459|  2.43k|                                (i && m > 0) ? i + m : NULL;            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (459:34): [True: 2.43k, False: 0]
  |  |  |  |  |  |  |  Branch (459:39): [True: 2.43k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  460|  70.0k|                        }); end && i < end; i++)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (460:29): [True: 70.0k, False: 0]
  |  |  |  |  |  |  |  Branch (460:36): [True: 68.3k, False: 1.68k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1122|  68.3k|                char *e;
 1123|       |
 1124|  68.3k|                e = startswith(p, i->suffix);
 1125|  68.3k|                if (e) {
  ------------------
  |  Branch (1125:21): [True: 756, False: 67.6k]
  ------------------
 1126|    756|                        *ret = i->usec;
 1127|    756|                        return e;
 1128|    756|                }
 1129|  68.3k|        }
 1130|       |
 1131|  1.68k|        return p;
 1132|  2.43k|}

mkostemp_safe:
   94|  13.0k|int mkostemp_safe(char *pattern) {
   95|  13.0k|        assert(pattern);
  ------------------
  |  |   72|  13.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.0k|        do {                                                            \
  |  |  |  |   59|  13.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  13.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.0k|        } while (false)
  |  |  ------------------
  ------------------
   96|  13.0k|        BLOCK_WITH_UMASK(0077);
  ------------------
  |  |   27|  13.0k|        _unused_ _cleanup_umask_ mode_t _saved_umask_ = umask(mask);
  |  |  ------------------
  |  |  |  |   96|  13.0k|#define _unused_ __attribute__((__unused__))
  |  |  ------------------
  ------------------
   97|  13.0k|        return RET_NERRNO(mkostemp(pattern, O_CLOEXEC));
   98|  13.0k|}
fmkostemp_safe:
  100|  13.0k|int fmkostemp_safe(char *pattern, const char *mode, FILE **ret_f) {
  101|  13.0k|        _cleanup_close_ int fd = -EBADF;
  ------------------
  |  |   60|  13.0k|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|  13.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  102|  13.0k|        FILE *f;
  103|       |
  104|  13.0k|        fd = mkostemp_safe(pattern);
  105|  13.0k|        if (fd < 0)
  ------------------
  |  Branch (105:13): [True: 0, False: 13.0k]
  ------------------
  106|      0|                return fd;
  107|       |
  108|  13.0k|        f = take_fdopen(&fd, mode);
  109|  13.0k|        if (!f)
  ------------------
  |  Branch (109:13): [True: 0, False: 13.0k]
  ------------------
  110|      0|                return -errno;
  111|       |
  112|  13.0k|        *ret_f = f;
  113|  13.0k|        return 0;
  114|  13.0k|}
unlink_tempfilep:
  116|  13.0k|void unlink_tempfilep(char (*p)[]) {
  117|  13.0k|        assert(p);
  ------------------
  |  |   72|  13.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.0k|        do {                                                            \
  |  |  |  |   59|  13.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  13.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.0k|        } while (false)
  |  |  ------------------
  ------------------
  118|       |
  119|       |        /* If the file is created with mkstemp(), it will (almost always) change the suffix.
  120|       |         * Treat this as a sign that the file was successfully created. We ignore both the rare case
  121|       |         * where the original suffix is used and unlink failures. */
  122|       |
  123|  13.0k|        if (!endswith(*p, ".XXXXXX"))
  ------------------
  |  Branch (123:13): [True: 13.0k, False: 1]
  ------------------
  124|  13.0k|                (void) unlink(*p);
  125|  13.0k|}

acquire_ugid_allocation_range:
   92|     59|const UGIDAllocationRange *acquire_ugid_allocation_range(void) {
   93|       |#if ENABLE_COMPAT_MUTABLE_UID_BOUNDARIES
   94|       |        static thread_local UGIDAllocationRange defs;
   95|       |        static thread_local int initialized = 0; /* == 0 → not initialized yet
   96|       |                                                  * < 0 → failure
   97|       |                                                  * > 0 → success */
   98|       |
   99|       |        /* This function will ignore failure to read the file, so it should only be called from places where
  100|       |         * we don't crucially depend on the answer. In other words, it's appropriate for journald, but
  101|       |         * probably not for sysusers. */
  102|       |
  103|       |        if (initialized == 0)
  104|       |                initialized = read_login_defs(&defs, NULL, NULL) < 0 ? -1 : 1;
  105|       |        if (initialized < 0)
  106|       |                return &default_ugid_allocation_range;
  107|       |
  108|       |        return &defs;
  109|       |
  110|       |#endif
  111|     59|        return &default_ugid_allocation_range;
  112|     59|}
uid_is_system:
  114|     37|bool uid_is_system(uid_t uid) {
  115|     37|        const UGIDAllocationRange *defs;
  116|     37|        assert_se(defs = acquire_ugid_allocation_range());
  ------------------
  |  |   65|     37|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     37|        do {                                                            \
  |  |  |  |   59|     37|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     37|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 37]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     37|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     37|        } while (false)
  |  |  ------------------
  ------------------
  117|       |
  118|     37|        return uid <= defs->system_uid_max;
  119|     37|}
gid_is_system:
  121|     22|bool gid_is_system(gid_t gid) {
  122|     22|        const UGIDAllocationRange *defs;
  123|     22|        assert_se(defs = acquire_ugid_allocation_range());
  ------------------
  |  |   65|     22|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     22|        do {                                                            \
  |  |  |  |   59|     22|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     22|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 22]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     22|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     22|        } while (false)
  |  |  ------------------
  ------------------
  124|       |
  125|     22|        return gid <= defs->system_gid_max;
  126|     22|}

userdb.c:uid_is_foreign:
   41|    237|static inline bool uid_is_foreign(uid_t uid) {
   42|    237|        return FOREIGN_UID_MIN <= uid && uid <= FOREIGN_UID_MAX;
  ------------------
  |  |   15|    237|#define FOREIGN_UID_MIN (FOREIGN_UID_BASE)
  |  |  ------------------
  |  |  |  |  260|    237|#define FOREIGN_UID_BASE 2147352576
  |  |  ------------------
  ------------------
                      return FOREIGN_UID_MIN <= uid && uid <= FOREIGN_UID_MAX;
  ------------------
  |  |   16|    362|#define FOREIGN_UID_MAX (FOREIGN_UID_BASE + 0xFFFFU)
  |  |  ------------------
  |  |  |  |  260|    125|#define FOREIGN_UID_BASE 2147352576
  |  |  ------------------
  ------------------
  |  Branch (42:16): [True: 125, False: 112]
  |  Branch (42:42): [True: 26, False: 99]
  ------------------
   43|    237|}
userdb.c:gid_is_foreign:
   45|    106|static inline bool gid_is_foreign(gid_t gid) {
   46|    106|        return uid_is_foreign((uid_t) gid);
   47|    106|}

tmpfile-util.c:umaskp:
    8|  13.0k|static inline void umaskp(mode_t *u) {
    9|  13.0k|        umask(*u);
   10|  13.0k|}

macsec.c:unaligned_write_be16:
   29|  3.73k|static inline void unaligned_write_be16(void *_u, uint16_t a) {
   30|  3.73k|        struct __attribute__((__packed__, __may_alias__)) { uint16_t x; } *u = _u;
   31|       |
   32|  3.73k|        u->x = be16toh(a);
   33|  3.73k|}
siphash24.c:unaligned_read_le64:
   61|  2.28M|static inline uint64_t unaligned_read_le64(const void *_u) {
   62|  2.28M|        const struct __attribute__((__packed__, __may_alias__)) { uint64_t x; } *u = _u;
   63|       |
   64|  2.28M|        return le64toh(u->x);
   65|  2.28M|}

uid_is_valid:
   31|  1.79k|bool uid_is_valid(uid_t uid) {
   32|       |
   33|       |        /* Also see POSIX IEEE Std 1003.1-2008, 2016 Edition, 3.436. */
   34|       |
   35|       |        /* Some libc APIs use UID_INVALID as special placeholder */
   36|  1.79k|        if (uid == (uid_t) UINT32_C(0xFFFFFFFF))
  ------------------
  |  Branch (36:13): [True: 3, False: 1.78k]
  ------------------
   37|      3|                return false;
   38|       |
   39|       |        /* A long time ago UIDs where 16 bit, hence explicitly avoid the 16-bit -1 too */
   40|  1.78k|        if (uid == (uid_t) UINT32_C(0xFFFF))
  ------------------
  |  Branch (40:13): [True: 4, False: 1.78k]
  ------------------
   41|      4|                return false;
   42|       |
   43|  1.78k|        return true;
   44|  1.78k|}
parse_uid:
   46|  1.60k|int parse_uid(const char *s, uid_t *ret) {
   47|  1.60k|        uint32_t uid = 0;
   48|  1.60k|        int r;
   49|       |
   50|  1.60k|        assert(s);
  ------------------
  |  |   72|  1.60k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.60k|        do {                                                            \
  |  |  |  |   59|  1.60k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.60k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.60k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.60k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.60k|        } while (false)
  |  |  ------------------
  ------------------
   51|       |
   52|  1.60k|        assert_cc(sizeof(uid_t) == sizeof(uint32_t));
  ------------------
  |  |  142|  1.60k|#define assert_cc(expr) _Static_assert(expr, #expr)
  ------------------
   53|       |
   54|       |        /* We are very strict when parsing UIDs, and prohibit +/- as prefix, leading zero as prefix, and
   55|       |         * whitespace. We do this, since this call is often used in a context where we parse things as UID
   56|       |         * first, and if that doesn't work we fall back to NSS. Thus we really want to make sure that UIDs
   57|       |         * are parsed as UIDs only if they really really look like UIDs. */
   58|  1.60k|        r = safe_atou32_full(s, 10
   59|  1.60k|                             | SAFE_ATO_REFUSE_PLUS_MINUS
  ------------------
  |  |   24|  1.60k|#define SAFE_ATO_REFUSE_PLUS_MINUS (1U << 30)
  ------------------
   60|  1.60k|                             | SAFE_ATO_REFUSE_LEADING_ZERO
  ------------------
  |  |   25|  1.60k|#define SAFE_ATO_REFUSE_LEADING_ZERO (1U << 29)
  ------------------
   61|  1.60k|                             | SAFE_ATO_REFUSE_LEADING_WHITESPACE, &uid);
  ------------------
  |  |   26|  1.60k|#define SAFE_ATO_REFUSE_LEADING_WHITESPACE (1U << 28)
  ------------------
   62|  1.60k|        if (r < 0)
  ------------------
  |  Branch (62:13): [True: 1.20k, False: 408]
  ------------------
   63|  1.20k|                return r;
   64|       |
   65|    408|        if (!uid_is_valid(uid))
  ------------------
  |  Branch (65:13): [True: 6, False: 402]
  ------------------
   66|      6|                return -ENXIO; /* we return ENXIO instead of EINVAL
   67|       |                                * here, to make it easy to distinguish
   68|       |                                * invalid numeric uids from invalid
   69|       |                                * strings. */
   70|       |
   71|    402|        if (ret)
  ------------------
  |  Branch (71:13): [True: 402, False: 0]
  ------------------
   72|    402|                *ret = uid;
   73|       |
   74|    402|        return 0;
   75|    408|}
valid_user_group_name:
  695|    635|bool valid_user_group_name(const char *u, ValidUserFlags flags) {
  696|    635|        const char *i;
  697|       |
  698|       |        /* Checks if the specified name is a valid user/group name. There are two flavours of this call:
  699|       |         * strict mode is the default which is POSIX plus some extra rules; and relaxed mode where we accept
  700|       |         * pretty much everything except the really worst offending names.
  701|       |         *
  702|       |         * Whenever we synthesize users ourselves we should use the strict mode. But when we process users
  703|       |         * created by other stuff, let's be more liberal. */
  704|       |
  705|    635|        if (isempty(u)) /* An empty user name is never valid */
  ------------------
  |  Branch (705:13): [True: 0, False: 635]
  ------------------
  706|      0|                return false;
  707|       |
  708|    635|        if (parse_uid(u, NULL) >= 0) /* Something that parses as numeric UID string is valid exactly when the
  ------------------
  |  Branch (708:13): [True: 0, False: 635]
  ------------------
  709|       |                                      * flag for it is set */
  710|      0|                return FLAGS_SET(flags, VALID_USER_ALLOW_NUMERIC);
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  ------------------
  711|       |
  712|    635|        if (FLAGS_SET(flags, VALID_USER_RELAX)) {
  ------------------
  |  |  414|    635|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 635, False: 0]
  |  |  ------------------
  ------------------
  713|       |
  714|       |                /* In relaxed mode we just check very superficially. Apparently SSSD and other stuff is
  715|       |                 * extremely liberal (way too liberal if you ask me, even inserting "@" in user names, which
  716|       |                 * is bound to cause problems for example when used with an MTA), hence only filter the most
  717|       |                 * obvious cases, or where things would result in an invalid entry if such a user name would
  718|       |                 * show up in /etc/passwd (or equivalent getent output).
  719|       |                 *
  720|       |                 * Note that we stepped far out of POSIX territory here. It's not our fault though, but
  721|       |                 * SSSD's, Samba's and everybody else who ignored POSIX on this. (I mean, I am happy to step
  722|       |                 * outside of POSIX' bounds any day, but I must say in this case I probably wouldn't
  723|       |                 * have...) */
  724|       |
  725|    635|                if (startswith(u, " ") || endswith(u, " ")) /* At least expect whitespace padding is removed
  ------------------
  |  Branch (725:21): [True: 0, False: 635]
  |  Branch (725:43): [True: 0, False: 635]
  ------------------
  726|       |                                                             * at front and back (accept in the middle, since
  727|       |                                                             * that's apparently a thing on Windows). Note
  728|       |                                                             * that this also blocks usernames consisting of
  729|       |                                                             * whitespace only. */
  730|      0|                        return false;
  731|       |
  732|    635|                if (!utf8_is_valid(u)) /* We want to synthesize JSON from this, hence insist on UTF-8 */
  ------------------
  |  Branch (732:21): [True: 0, False: 635]
  ------------------
  733|      0|                        return false;
  734|       |
  735|    635|                if (string_has_cc(u, NULL)) /* CC characters are just dangerous (and \n in particular is the
  ------------------
  |  Branch (735:21): [True: 0, False: 635]
  ------------------
  736|       |                                             * record separator in /etc/passwd), so we can't allow that. */
  737|      0|                        return false;
  738|       |
  739|    635|                if (strpbrk(u, ":/")) /* Colons are the field separator in /etc/passwd, we can't allow
  ------------------
  |  Branch (739:21): [True: 8, False: 627]
  ------------------
  740|       |                                       * that. Slashes are special to file systems paths and user names
  741|       |                                       * typically show up in the file system as home directories, hence
  742|       |                                       * don't allow slashes. */
  743|      8|                        return false;
  744|       |
  745|    627|                if (in_charset(u, "0123456789")) /* Don't allow fully numeric strings, they might be confused
  ------------------
  |  Branch (745:21): [True: 12, False: 615]
  ------------------
  746|       |                                                  * with UIDs (note that this test is more broad than
  747|       |                                                  * the parse_uid() test above, as it will cover more than
  748|       |                                                  * the 32-bit range, and it will detect 65535 (which is in
  749|       |                                                  * invalid UID, even though in the unsigned 32 bit range) */
  750|     12|                        return false;
  751|       |
  752|    615|                if (u[0] == '-' && in_charset(u + 1, "0123456789")) /* Don't allow negative fully numeric
  ------------------
  |  Branch (752:21): [True: 12, False: 603]
  |  Branch (752:36): [True: 3, False: 9]
  ------------------
  753|       |                                                                     * strings either. After all some people
  754|       |                                                                     * write 65535 as -1 (even though that's
  755|       |                                                                     * not even true on 32-bit uid_t
  756|       |                                                                     * anyway) */
  757|      3|                        return false;
  758|       |
  759|    612|                if (dot_or_dot_dot(u)) /* User names typically become home directory names, and these two are
  ------------------
  |  Branch (759:21): [True: 3, False: 609]
  ------------------
  760|       |                                        * special in that context, don't allow that. */
  761|      3|                        return false;
  762|       |
  763|       |                /* Compare with strict result and warn if result doesn't match */
  764|    609|                if (FLAGS_SET(flags, VALID_USER_WARN) && !valid_user_group_name(u, 0))
  ------------------
  |  |  414|  1.21k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 609]
  |  |  ------------------
  ------------------
  |  Branch (764:58): [True: 0, False: 0]
  ------------------
  765|    609|                        log_struct(LOG_NOTICE,
  ------------------
  |  |  269|      0|#define log_struct(level, ...) log_struct_errno(level, 0, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  268|      0|        log_struct_internal(level, error, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  766|    609|                                   LOG_MESSAGE("Accepting user/group name '%s', which does not match strict user/group name rules.", u),
  767|    609|                                   LOG_ITEM("USER_GROUP_NAME=%s", u),
  768|    609|                                   LOG_MESSAGE_ID(SD_MESSAGE_UNSAFE_USER_NAME_STR));
  769|       |
  770|       |                /* Note that we make no restrictions on the length in relaxed mode! */
  771|    609|        } else {
  772|      0|                long sz;
  773|      0|                size_t l;
  774|       |
  775|       |                /* Also see POSIX IEEE Std 1003.1-2008, 2016 Edition, 3.437. We are a bit stricter here
  776|       |                 * however. Specifically we deviate from POSIX rules:
  777|       |                 *
  778|       |                 * - We don't allow empty user names (see above)
  779|       |                 * - We require that names fit into the appropriate utmp field
  780|       |                 * - We don't allow any dots (this conflicts with chown syntax which permits dots as user/group name separator)
  781|       |                 * - We don't allow dashes or digit as the first character
  782|       |                 *
  783|       |                 * Note that other systems are even more restrictive, and don't permit underscores or uppercase characters.
  784|       |                 */
  785|       |
  786|      0|                if (!ascii_isalpha(u[0]) &&
  ------------------
  |  Branch (786:21): [True: 0, False: 0]
  ------------------
  787|      0|                    u[0] != '_')
  ------------------
  |  Branch (787:21): [True: 0, False: 0]
  ------------------
  788|      0|                        return false;
  789|       |
  790|      0|                for (i = u+1; *i; i++)
  ------------------
  |  Branch (790:31): [True: 0, False: 0]
  ------------------
  791|      0|                        if (!ascii_isalpha(*i) &&
  ------------------
  |  Branch (791:29): [True: 0, False: 0]
  ------------------
  792|      0|                            !ascii_isdigit(*i) &&
  ------------------
  |  Branch (792:29): [True: 0, False: 0]
  ------------------
  793|      0|                            !IN_SET(*i, '_', '-'))
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (793:29): [True: 0, False: 0]
  ------------------
  794|      0|                                return false;
  795|       |
  796|      0|                l = i - u;
  797|       |
  798|      0|                sz = sysconf(_SC_LOGIN_NAME_MAX);
  799|      0|                assert_se(sz > 0);
  ------------------
  |  |   65|      0|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  800|       |
  801|      0|                if (l > (size_t) sz) /* glibc: 256 */
  ------------------
  |  Branch (801:21): [True: 0, False: 0]
  ------------------
  802|      0|                        return false;
  803|      0|                if (l > NAME_MAX) /* must fit in a filename: 255 */
  ------------------
  |  Branch (803:21): [True: 0, False: 0]
  ------------------
  804|      0|                        return false;
  805|      0|                if (l > sizeof_field(struct utmpx, ut_user) - 1) /* must fit in utmp: 31 */
  ------------------
  |  |  452|      0|#define sizeof_field(struct_type, member) sizeof(((struct_type *) 0)->member)
  ------------------
  |  Branch (805:21): [True: 0, False: 0]
  ------------------
  806|      0|                        return false;
  807|      0|        }
  808|       |
  809|    609|        return true;
  810|    635|}
valid_gecos:
  812|     90|bool valid_gecos(const char *d) {
  813|       |
  814|     90|        if (!d)
  ------------------
  |  Branch (814:13): [True: 0, False: 90]
  ------------------
  815|      0|                return false;
  816|       |
  817|     90|        if (!utf8_is_valid(d))
  ------------------
  |  Branch (817:13): [True: 0, False: 90]
  ------------------
  818|      0|                return false;
  819|       |
  820|     90|        if (string_has_cc(d, NULL))
  ------------------
  |  Branch (820:13): [True: 0, False: 90]
  ------------------
  821|      0|                return false;
  822|       |
  823|       |        /* Colons are used as field separators, and hence not OK */
  824|     90|        if (strchr(d, ':'))
  ------------------
  |  Branch (824:13): [True: 0, False: 90]
  ------------------
  825|      0|                return false;
  826|       |
  827|     90|        return true;
  828|     90|}
synthesize_nobody:
  924|      6|bool synthesize_nobody(void) {
  925|       |        /* Returns true when we shall synthesize the "nobody" user (which we do by default). This can be turned off by
  926|       |         * touching /etc/systemd/dont-synthesize-nobody in order to provide upgrade compatibility with legacy systems
  927|       |         * that used the "nobody" user name and group name for other UIDs/GIDs than 65534.
  928|       |         *
  929|       |         * Note that we do not employ any kind of synchronization on the following caching variable. If the variable is
  930|       |         * accessed in multi-threaded programs in the worst case it might happen that we initialize twice, but that
  931|       |         * shouldn't matter as each initialization should come to the same result. */
  932|      6|        static int cache = -1;
  933|       |
  934|      6|        if (cache < 0)
  ------------------
  |  Branch (934:13): [True: 1, False: 5]
  ------------------
  935|      1|                cache = access("/etc/systemd/dont-synthesize-nobody", F_OK) < 0;
  936|       |
  937|      6|        return cache;
  938|      6|}
getpwnam_malloc:
 1075|    244|int getpwnam_malloc(const char *name, struct passwd **ret) {
 1076|    244|        size_t bufsize = getpw_buffer_size();
 1077|    244|        int r;
 1078|       |
 1079|       |        /* A wrapper around getpwnam_r() that allocates the necessary buffer on the heap. The caller must
 1080|       |         * free() the returned structures! */
 1081|       |
 1082|    244|        if (isempty(name))
  ------------------
  |  Branch (1082:13): [True: 0, False: 244]
  ------------------
 1083|      0|                return -EINVAL;
 1084|       |
 1085|    244|        for (;;) {
 1086|    244|                _cleanup_free_ void *buf = NULL;
  ------------------
  |  |   82|    244|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    244|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1087|       |
 1088|    244|                buf = malloc0(ALIGN(sizeof(struct passwd)) + bufsize);
  ------------------
  |  |   46|    244|#define malloc0(n) (calloc(1, (n) ?: 1))
  |  |  ------------------
  |  |  |  Branch (46:31): [True: 244, False: 0]
  |  |  ------------------
  ------------------
 1089|    244|                if (!buf)
  ------------------
  |  Branch (1089:21): [True: 0, False: 0]
  ------------------
 1090|      0|                        return -ENOMEM;
 1091|       |
 1092|      0|                struct passwd *pw = NULL;
 1093|      0|                r = getpwnam_r(name, buf, (char*) buf + ALIGN(sizeof(struct passwd)), (size_t) bufsize, &pw);
  ------------------
  |  |  124|      0|#define ALIGN(l)  ALIGN_TO(l, sizeof(void*))
  ------------------
 1094|    244|                if (r == 0) {
  ------------------
  |  Branch (1094:21): [True: 244, False: 18.4E]
  ------------------
 1095|    244|                        if (pw) {
  ------------------
  |  Branch (1095:29): [True: 4, False: 240]
  ------------------
 1096|      4|                                if (ret)
  ------------------
  |  Branch (1096:37): [True: 4, False: 0]
  ------------------
 1097|      4|                                        *ret = TAKE_PTR(buf);
  ------------------
  |  |  388|      4|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      4|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      4|        ({                                                       \
  |  |  |  |  |  |  381|      4|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      4|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      4|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      4|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      4|                _var_;                                           \
  |  |  |  |  |  |  386|      4|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1098|      4|                                return 0;
 1099|      4|                        }
 1100|       |
 1101|    240|                        return -ESRCH;
 1102|    244|                }
 1103|       |
 1104|  18.4E|                assert(r > 0);
  ------------------
  |  |   72|  18.4E|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  18.4E|        do {                                                            \
  |  |  |  |   59|  18.4E|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  18.4E|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 18.4E]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  18.4E|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  18.4E|        } while (false)
  |  |  ------------------
  ------------------
 1105|       |
 1106|       |                /* getpwnam() may fail with ENOENT if /etc/passwd is missing.  For us that is equivalent to
 1107|       |                 * the name not being defined. */
 1108|  18.4E|                if (errno_is_user_doesnt_exist(r))
  ------------------
  |  Branch (1108:21): [True: 0, False: 18.4E]
  ------------------
 1109|      0|                        return -ESRCH;
 1110|  18.4E|                if (r != ERANGE)
  ------------------
  |  Branch (1110:21): [True: 0, False: 18.4E]
  ------------------
 1111|      0|                        return -r;
 1112|       |
 1113|  18.4E|                if (bufsize > SIZE_MAX/2 - ALIGN(sizeof(struct passwd)))
  ------------------
  |  |  124|  18.4E|#define ALIGN(l)  ALIGN_TO(l, sizeof(void*))
  ------------------
  |  Branch (1113:21): [True: 0, False: 18.4E]
  ------------------
 1114|      0|                        return -ENOMEM;
 1115|  18.4E|                bufsize *= 2;
 1116|  18.4E|        }
 1117|    244|}
getpwuid_malloc:
 1119|    171|int getpwuid_malloc(uid_t uid, struct passwd **ret) {
 1120|    171|        size_t bufsize = getpw_buffer_size();
 1121|    171|        int r;
 1122|       |
 1123|    171|        if (!uid_is_valid(uid))
  ------------------
  |  Branch (1123:13): [True: 0, False: 171]
  ------------------
 1124|      0|                return -EINVAL;
 1125|       |
 1126|    171|        for (;;) {
 1127|    171|                _cleanup_free_ void *buf = NULL;
  ------------------
  |  |   82|    171|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    171|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1128|       |
 1129|    171|                buf = malloc0(ALIGN(sizeof(struct passwd)) + bufsize);
  ------------------
  |  |   46|    171|#define malloc0(n) (calloc(1, (n) ?: 1))
  |  |  ------------------
  |  |  |  Branch (46:31): [True: 171, False: 0]
  |  |  ------------------
  ------------------
 1130|    171|                if (!buf)
  ------------------
  |  Branch (1130:21): [True: 0, False: 0]
  ------------------
 1131|      0|                        return -ENOMEM;
 1132|       |
 1133|      0|                struct passwd *pw = NULL;
 1134|      0|                r = getpwuid_r(uid, buf, (char*) buf + ALIGN(sizeof(struct passwd)), (size_t) bufsize, &pw);
  ------------------
  |  |  124|      0|#define ALIGN(l)  ALIGN_TO(l, sizeof(void*))
  ------------------
 1135|    171|                if (r == 0) {
  ------------------
  |  Branch (1135:21): [True: 171, False: 18.4E]
  ------------------
 1136|    171|                        if (pw) {
  ------------------
  |  Branch (1136:29): [True: 40, False: 131]
  ------------------
 1137|     40|                                if (ret)
  ------------------
  |  Branch (1137:37): [True: 40, False: 0]
  ------------------
 1138|     40|                                        *ret = TAKE_PTR(buf);
  ------------------
  |  |  388|     40|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|     40|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|     40|        ({                                                       \
  |  |  |  |  |  |  381|     40|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|     40|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|     40|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|     40|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|     40|                _var_;                                           \
  |  |  |  |  |  |  386|     40|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1139|     40|                                return 0;
 1140|     40|                        }
 1141|       |
 1142|    131|                        return -ESRCH;
 1143|    171|                }
 1144|       |
 1145|  18.4E|                assert(r > 0);
  ------------------
  |  |   72|  18.4E|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  18.4E|        do {                                                            \
  |  |  |  |   59|  18.4E|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  18.4E|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 18.4E]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  18.4E|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  18.4E|        } while (false)
  |  |  ------------------
  ------------------
 1146|       |
 1147|  18.4E|                if (errno_is_user_doesnt_exist(r))
  ------------------
  |  Branch (1147:21): [True: 0, False: 18.4E]
  ------------------
 1148|      0|                        return -ESRCH;
 1149|  18.4E|                if (r != ERANGE)
  ------------------
  |  Branch (1149:21): [True: 0, False: 18.4E]
  ------------------
 1150|      0|                        return -r;
 1151|       |
 1152|  18.4E|                if (bufsize > SIZE_MAX/2 - ALIGN(sizeof(struct passwd)))
  ------------------
  |  |  124|  18.4E|#define ALIGN(l)  ALIGN_TO(l, sizeof(void*))
  ------------------
  |  Branch (1152:21): [True: 0, False: 18.4E]
  ------------------
 1153|      0|                        return -ENOMEM;
 1154|  18.4E|                bufsize *= 2;
 1155|  18.4E|        }
 1156|    171|}
getgrnam_malloc:
 1163|    285|int getgrnam_malloc(const char *name, struct group **ret) {
 1164|    285|        size_t bufsize = getgr_buffer_size();
 1165|    285|        int r;
 1166|       |
 1167|    285|        if (isempty(name))
  ------------------
  |  Branch (1167:13): [True: 0, False: 285]
  ------------------
 1168|      0|                return -EINVAL;
 1169|       |
 1170|    285|        for (;;) {
 1171|    285|                _cleanup_free_ void *buf = NULL;
  ------------------
  |  |   82|    285|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    285|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1172|       |
 1173|    285|                buf = malloc0(ALIGN(sizeof(struct group)) + bufsize);
  ------------------
  |  |   46|    285|#define malloc0(n) (calloc(1, (n) ?: 1))
  |  |  ------------------
  |  |  |  Branch (46:31): [True: 285, False: 0]
  |  |  ------------------
  ------------------
 1174|    285|                if (!buf)
  ------------------
  |  Branch (1174:21): [True: 0, False: 0]
  ------------------
 1175|      0|                        return -ENOMEM;
 1176|       |
 1177|      0|                struct group *gr = NULL;
 1178|      0|                r = getgrnam_r(name, buf, (char*) buf + ALIGN(sizeof(struct group)), (size_t) bufsize, &gr);
  ------------------
  |  |  124|      0|#define ALIGN(l)  ALIGN_TO(l, sizeof(void*))
  ------------------
 1179|    285|                if (r == 0) {
  ------------------
  |  Branch (1179:21): [True: 285, False: 18.4E]
  ------------------
 1180|    285|                        if (gr) {
  ------------------
  |  Branch (1180:29): [True: 1, False: 284]
  ------------------
 1181|      1|                                if (ret)
  ------------------
  |  Branch (1181:37): [True: 1, False: 0]
  ------------------
 1182|      1|                                        *ret = TAKE_PTR(buf);
  ------------------
  |  |  388|      1|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      1|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      1|        ({                                                       \
  |  |  |  |  |  |  381|      1|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      1|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      1|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      1|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      1|                _var_;                                           \
  |  |  |  |  |  |  386|      1|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1183|      1|                                return 0;
 1184|      1|                        }
 1185|       |
 1186|    284|                        return -ESRCH;
 1187|    285|                }
 1188|       |
 1189|  18.4E|                assert(r > 0);
  ------------------
  |  |   72|  18.4E|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  18.4E|        do {                                                            \
  |  |  |  |   59|  18.4E|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  18.4E|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 18.4E]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  18.4E|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  18.4E|        } while (false)
  |  |  ------------------
  ------------------
 1190|       |
 1191|  18.4E|                if (errno_is_user_doesnt_exist(r))
  ------------------
  |  Branch (1191:21): [True: 0, False: 18.4E]
  ------------------
 1192|      0|                        return -ESRCH;
 1193|  18.4E|                if (r != ERANGE)
  ------------------
  |  Branch (1193:21): [True: 0, False: 18.4E]
  ------------------
 1194|      0|                        return -r;
 1195|       |
 1196|  18.4E|                if (bufsize > SIZE_MAX/2 - ALIGN(sizeof(struct group)))
  ------------------
  |  |  124|  18.4E|#define ALIGN(l)  ALIGN_TO(l, sizeof(void*))
  ------------------
  |  Branch (1196:21): [True: 0, False: 18.4E]
  ------------------
 1197|      0|                        return -ENOMEM;
 1198|  18.4E|                bufsize *= 2;
 1199|  18.4E|        }
 1200|    285|}
getgrgid_malloc:
 1202|    135|int getgrgid_malloc(gid_t gid, struct group **ret) {
 1203|    135|        size_t bufsize = getgr_buffer_size();
 1204|    135|        int r;
 1205|       |
 1206|    135|        if (!gid_is_valid(gid))
  ------------------
  |  Branch (1206:13): [True: 0, False: 135]
  ------------------
 1207|      0|                return -EINVAL;
 1208|       |
 1209|    135|        for (;;) {
 1210|    135|                _cleanup_free_ void *buf = NULL;
  ------------------
  |  |   82|    135|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    135|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1211|       |
 1212|    135|                buf = malloc0(ALIGN(sizeof(struct group)) + bufsize);
  ------------------
  |  |   46|    135|#define malloc0(n) (calloc(1, (n) ?: 1))
  |  |  ------------------
  |  |  |  Branch (46:31): [True: 135, False: 0]
  |  |  ------------------
  ------------------
 1213|    135|                if (!buf)
  ------------------
  |  Branch (1213:21): [True: 0, False: 0]
  ------------------
 1214|      0|                        return -ENOMEM;
 1215|       |
 1216|      0|                struct group *gr = NULL;
 1217|      0|                r = getgrgid_r(gid, buf, (char*) buf + ALIGN(sizeof(struct group)), (size_t) bufsize, &gr);
  ------------------
  |  |  124|      0|#define ALIGN(l)  ALIGN_TO(l, sizeof(void*))
  ------------------
 1218|    135|                if (r == 0) {
  ------------------
  |  Branch (1218:21): [True: 135, False: 18.4E]
  ------------------
 1219|    135|                        if (gr) {
  ------------------
  |  Branch (1219:29): [True: 29, False: 106]
  ------------------
 1220|     29|                                if (ret)
  ------------------
  |  Branch (1220:37): [True: 29, False: 0]
  ------------------
 1221|     29|                                        *ret = TAKE_PTR(buf);
  ------------------
  |  |  388|     29|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|     29|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|     29|        ({                                                       \
  |  |  |  |  |  |  381|     29|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|     29|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|     29|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|     29|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|     29|                _var_;                                           \
  |  |  |  |  |  |  386|     29|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1222|     29|                                return 0;
 1223|     29|                        }
 1224|       |
 1225|    106|                        return -ESRCH;
 1226|    135|                }
 1227|       |
 1228|  18.4E|                assert(r > 0);
  ------------------
  |  |   72|  18.4E|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  18.4E|        do {                                                            \
  |  |  |  |   59|  18.4E|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  18.4E|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 18.4E]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  18.4E|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  18.4E|        } while (false)
  |  |  ------------------
  ------------------
 1229|       |
 1230|  18.4E|                if (errno_is_user_doesnt_exist(r))
  ------------------
  |  Branch (1230:21): [True: 0, False: 18.4E]
  ------------------
 1231|      0|                        return -ESRCH;
 1232|  18.4E|                if (r != ERANGE)
  ------------------
  |  Branch (1232:21): [True: 0, False: 18.4E]
  ------------------
 1233|      0|                        return -r;
 1234|       |
 1235|  18.4E|                if (bufsize > SIZE_MAX/2 - ALIGN(sizeof(struct group)))
  ------------------
  |  |  124|  18.4E|#define ALIGN(l)  ALIGN_TO(l, sizeof(void*))
  ------------------
  |  Branch (1235:21): [True: 0, False: 18.4E]
  ------------------
 1236|      0|                        return -ENOMEM;
 1237|  18.4E|                bufsize *= 2;
 1238|  18.4E|        }
 1239|    135|}
user-util.c:getpw_buffer_size:
 1064|    415|static size_t getpw_buffer_size(void) {
 1065|    415|        long bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
 1066|    415|        return bufsize <= 0 ? 4096U : (size_t) bufsize;
  ------------------
  |  Branch (1066:16): [True: 0, False: 415]
  ------------------
 1067|    415|}
user-util.c:getgr_buffer_size:
 1158|    420|static size_t getgr_buffer_size(void) {
 1159|    420|        long bufsize = sysconf(_SC_GETGR_R_SIZE_MAX);
 1160|    420|        return bufsize <= 0 ? 4096U : (size_t) bufsize;
  ------------------
  |  Branch (1160:16): [True: 0, False: 420]
  ------------------
 1161|    420|}

group-record.c:gid_is_valid:
   23|     99|static inline bool gid_is_valid(gid_t gid) {
   24|     99|        return uid_is_valid((uid_t) gid);
   25|     99|}
user-record.c:gid_is_valid:
   23|     44|static inline bool gid_is_valid(gid_t gid) {
   24|     44|        return uid_is_valid((uid_t) gid);
   25|     44|}
userdb-dropin.c:gid_is_valid:
   23|    135|static inline bool gid_is_valid(gid_t gid) {
   24|    135|        return uid_is_valid((uid_t) gid);
   25|    135|}
userdb.c:parse_gid:
   30|    428|static inline int parse_gid(const char *s, gid_t *ret_gid) {
   31|    428|        return parse_uid(s, (uid_t*) ret_gid);
   32|    428|}
userdb.c:gid_is_valid:
   23|    304|static inline bool gid_is_valid(gid_t gid) {
   24|    304|        return uid_is_valid((uid_t) gid);
   25|    304|}
user-util.c:gid_is_valid:
   23|    135|static inline bool gid_is_valid(gid_t gid) {
   24|    135|        return uid_is_valid((uid_t) gid);
   25|    135|}

unichar_is_valid:
   16|  9.03k|bool unichar_is_valid(char32_t ch) {
   17|       |
   18|  9.03k|        if (ch >= 0x110000) /* End of unicode space */
  ------------------
  |  Branch (18:13): [True: 323, False: 8.71k]
  ------------------
   19|    323|                return false;
   20|  8.71k|        if ((ch & 0xFFFFF800) == 0xD800) /* Reserved area for UTF-16 */
  ------------------
  |  Branch (20:13): [True: 195, False: 8.51k]
  ------------------
   21|    195|                return false;
   22|  8.51k|        if ((ch >= 0xFDD0) && (ch <= 0xFDEF)) /* Reserved */
  ------------------
  |  Branch (22:13): [True: 5.33k, False: 3.18k]
  |  Branch (22:31): [True: 268, False: 5.06k]
  ------------------
   23|    268|                return false;
   24|  8.25k|        if ((ch & 0xFFFE) == 0xFFFE) /* BOM (Byte Order Mark) */
  ------------------
  |  Branch (24:13): [True: 202, False: 8.04k]
  ------------------
   25|    202|                return false;
   26|       |
   27|  8.04k|        return true;
   28|  8.25k|}
utf8_encoded_to_unichar:
   61|  7.56k|int utf8_encoded_to_unichar(const char *str, char32_t *ret_unichar) {
   62|  7.56k|        char32_t unichar;
   63|  7.56k|        size_t len;
   64|       |
   65|  7.56k|        assert(str);
  ------------------
  |  |   72|  7.56k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  7.56k|        do {                                                            \
  |  |  |  |   59|  7.56k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  7.56k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 7.56k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  7.56k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  7.56k|        } while (false)
  |  |  ------------------
  ------------------
   66|       |
   67|  7.56k|        len = utf8_encoded_expected_len(str[0]);
   68|       |
   69|  7.56k|        switch (len) {
   70|      0|        case 1:
  ------------------
  |  Branch (70:9): [True: 0, False: 7.56k]
  ------------------
   71|      0|                *ret_unichar = (char32_t)str[0];
   72|      0|                return 1;
   73|  1.82k|        case 2:
  ------------------
  |  Branch (73:9): [True: 1.82k, False: 5.74k]
  ------------------
   74|  1.82k|                unichar = str[0] & 0x1f;
   75|  1.82k|                break;
   76|  1.87k|        case 3:
  ------------------
  |  Branch (76:9): [True: 1.87k, False: 5.69k]
  ------------------
   77|  1.87k|                unichar = (char32_t)str[0] & 0x0f;
   78|  1.87k|                break;
   79|  3.81k|        case 4:
  ------------------
  |  Branch (79:9): [True: 3.81k, False: 3.75k]
  ------------------
   80|  3.81k|                unichar = (char32_t)str[0] & 0x07;
   81|  3.81k|                break;
   82|     44|        case 5:
  ------------------
  |  Branch (82:9): [True: 44, False: 7.52k]
  ------------------
   83|     44|                unichar = (char32_t)str[0] & 0x03;
   84|     44|                break;
   85|     15|        case 6:
  ------------------
  |  Branch (85:9): [True: 15, False: 7.55k]
  ------------------
   86|     15|                unichar = (char32_t)str[0] & 0x01;
   87|     15|                break;
   88|      0|        default:
  ------------------
  |  Branch (88:9): [True: 0, False: 7.56k]
  ------------------
   89|      0|                return -EINVAL;
   90|  7.56k|        }
   91|       |
   92|  24.7k|        for (size_t i = 1; i < len; i++) {
  ------------------
  |  Branch (92:28): [True: 17.2k, False: 7.55k]
  ------------------
   93|  17.2k|                if (((char32_t)str[i] & 0xc0) != 0x80)
  ------------------
  |  Branch (93:21): [True: 19, False: 17.2k]
  ------------------
   94|     19|                        return -EINVAL;
   95|       |
   96|  17.2k|                unichar <<= 6;
   97|  17.2k|                unichar |= (char32_t)str[i] & 0x3f;
   98|  17.2k|        }
   99|       |
  100|  7.55k|        *ret_unichar = unichar;
  101|  7.55k|        return len;
  102|  7.56k|}
utf8_is_valid_n:
  128|   873k|char* utf8_is_valid_n(const char *str, size_t len_bytes) {
  129|       |        /* Check if the string is composed of valid utf8 characters. If length len_bytes is given, stop after
  130|       |         * len_bytes. Otherwise, stop at NUL. */
  131|       |
  132|   873k|        assert(str);
  ------------------
  |  |   72|   873k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   873k|        do {                                                            \
  |  |  |  |   59|   873k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   873k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 873k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   873k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   873k|        } while (false)
  |  |  ------------------
  ------------------
  133|       |
  134|  18.3M|        for (size_t i = 0; len_bytes != SIZE_MAX ? i < len_bytes : str[i] != '\0'; ) {
  ------------------
  |  Branch (134:28): [True: 576k, False: 17.7M]
  |  Branch (134:28): [True: 17.4M, False: 873k]
  ------------------
  135|  17.4M|                int len;
  136|       |
  137|  17.4M|                if (_unlikely_(str[i] == '\0'))
  ------------------
  |  |   95|  17.4M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:23): [True: 0, False: 17.4M]
  |  |  ------------------
  ------------------
  138|      0|                        return NULL; /* embedded NUL */
  139|       |
  140|  17.4M|                len = utf8_encoded_valid_unichar(str + i,
  141|  17.4M|                                                 len_bytes != SIZE_MAX ? len_bytes - i : SIZE_MAX);
  ------------------
  |  Branch (141:50): [True: 570k, False: 16.8M]
  ------------------
  142|  17.4M|                if (_unlikely_(len < 0))
  ------------------
  |  |   95|  17.4M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  ------------------
  |  |  |  Branch (95:23): [True: 235, False: 17.4M]
  |  |  ------------------
  ------------------
  143|    235|                        return NULL; /* invalid character */
  144|       |
  145|  17.4M|                i += len;
  146|  17.4M|        }
  147|       |
  148|   873k|        return (char*) str;
  149|   873k|}
utf8_encode_unichar:
  325|  4.04k|size_t utf8_encode_unichar(char *out_utf8, char32_t g) {
  326|       |
  327|  4.04k|        if (g < (1 << 7)) {
  ------------------
  |  Branch (327:13): [True: 2.89k, False: 1.15k]
  ------------------
  328|  2.89k|                if (out_utf8)
  ------------------
  |  Branch (328:21): [True: 2.89k, False: 0]
  ------------------
  329|  2.89k|                        out_utf8[0] = g & 0x7f;
  330|  2.89k|                return 1;
  331|  2.89k|        } else if (g < (1 << 11)) {
  ------------------
  |  Branch (331:20): [True: 231, False: 919]
  ------------------
  332|    231|                if (out_utf8) {
  ------------------
  |  Branch (332:21): [True: 231, False: 0]
  ------------------
  333|    231|                        out_utf8[0] = 0xc0 | ((g >> 6) & 0x1f);
  334|    231|                        out_utf8[1] = 0x80 | (g & 0x3f);
  335|    231|                }
  336|    231|                return 2;
  337|    919|        } else if (g < (1 << 16)) {
  ------------------
  |  Branch (337:20): [True: 639, False: 280]
  ------------------
  338|    639|                if (out_utf8) {
  ------------------
  |  Branch (338:21): [True: 639, False: 0]
  ------------------
  339|    639|                        out_utf8[0] = 0xe0 | ((g >> 12) & 0x0f);
  340|    639|                        out_utf8[1] = 0x80 | ((g >> 6) & 0x3f);
  341|    639|                        out_utf8[2] = 0x80 | (g & 0x3f);
  342|    639|                }
  343|    639|                return 3;
  344|    639|        } else if (g < (1 << 21)) {
  ------------------
  |  Branch (344:20): [True: 280, False: 0]
  ------------------
  345|    280|                if (out_utf8) {
  ------------------
  |  Branch (345:21): [True: 280, False: 0]
  ------------------
  346|    280|                        out_utf8[0] = 0xf0 | ((g >> 18) & 0x07);
  347|    280|                        out_utf8[1] = 0x80 | ((g >> 12) & 0x3f);
  348|    280|                        out_utf8[2] = 0x80 | ((g >> 6) & 0x3f);
  349|    280|                        out_utf8[3] = 0x80 | (g & 0x3f);
  350|    280|                }
  351|    280|                return 4;
  352|    280|        }
  353|       |
  354|      0|        return 0;
  355|  4.04k|}
utf8_encoded_valid_unichar:
  524|  17.4M|int utf8_encoded_valid_unichar(const char *str, size_t length /* bytes */) {
  525|  17.4M|        char32_t unichar;
  526|  17.4M|        size_t len;
  527|  17.4M|        int r;
  528|       |
  529|  17.4M|        assert(str);
  ------------------
  |  |   72|  17.4M|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  17.4M|        do {                                                            \
  |  |  |  |   59|  17.4M|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  17.4M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 17.4M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  17.4M|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  17.4M|        } while (false)
  |  |  ------------------
  ------------------
  530|  17.4M|        assert(length > 0);
  ------------------
  |  |   72|  17.4M|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  17.4M|        do {                                                            \
  |  |  |  |   59|  17.4M|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  17.4M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 17.4M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  17.4M|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  17.4M|        } while (false)
  |  |  ------------------
  ------------------
  531|       |
  532|       |        /* We read until NUL, at most length bytes. SIZE_MAX may be used to disable the length check. */
  533|       |
  534|  17.4M|        len = utf8_encoded_expected_len(str[0]);
  535|  17.4M|        if (len == 0)
  ------------------
  |  Branch (535:13): [True: 62, False: 17.4M]
  ------------------
  536|     62|                return -EINVAL;
  537|       |
  538|       |        /* Do we have a truncated multi-byte character? */
  539|  17.4M|        if (len > length)
  ------------------
  |  Branch (539:13): [True: 0, False: 17.4M]
  ------------------
  540|      0|                return -EINVAL;
  541|       |
  542|       |        /* ascii is valid */
  543|  17.4M|        if (len == 1)
  ------------------
  |  Branch (543:13): [True: 17.4M, False: 7.62k]
  ------------------
  544|  17.4M|                return 1;
  545|       |
  546|       |        /* check if expected encoded chars are available */
  547|  32.5k|        for (size_t i = 0; i < len; i++)
  ------------------
  |  Branch (547:28): [True: 24.9k, False: 7.56k]
  ------------------
  548|  24.9k|                if ((str[i] & 0x80) != 0x80)
  ------------------
  |  Branch (548:21): [True: 54, False: 24.8k]
  ------------------
  549|     54|                        return -EINVAL;
  550|       |
  551|  7.56k|        r = utf8_encoded_to_unichar(str, &unichar);
  552|  7.56k|        if (r < 0)
  ------------------
  |  Branch (552:13): [True: 19, False: 7.55k]
  ------------------
  553|     19|                return r;
  554|       |
  555|       |        /* check if encoded length matches encoded value */
  556|  7.55k|        if (utf8_unichar_to_encoded_len(unichar) != (int) len)
  ------------------
  |  Branch (556:13): [True: 10, False: 7.54k]
  ------------------
  557|     10|                return -EINVAL;
  558|       |
  559|       |        /* check if value has valid range */
  560|  7.54k|        if (!unichar_is_valid(unichar))
  ------------------
  |  Branch (560:13): [True: 90, False: 7.45k]
  ------------------
  561|     90|                return -EINVAL;
  562|       |
  563|  7.45k|        return (int) len;
  564|  7.54k|}
utf8.c:utf8_encoded_expected_len:
   43|  17.4M|static size_t utf8_encoded_expected_len(uint8_t c) {
   44|  17.4M|        if (c < 0x80)
  ------------------
  |  Branch (44:13): [True: 17.4M, False: 15.2k]
  ------------------
   45|  17.4M|                return 1;
   46|  15.2k|        if ((c & 0xe0) == 0xc0)
  ------------------
  |  Branch (46:13): [True: 3.66k, False: 11.5k]
  ------------------
   47|  3.66k|                return 2;
   48|  11.5k|        if ((c & 0xf0) == 0xe0)
  ------------------
  |  Branch (48:13): [True: 3.76k, False: 7.82k]
  ------------------
   49|  3.76k|                return 3;
   50|  7.82k|        if ((c & 0xf8) == 0xf0)
  ------------------
  |  Branch (50:13): [True: 7.63k, False: 190]
  ------------------
   51|  7.63k|                return 4;
   52|    190|        if ((c & 0xfc) == 0xf8)
  ------------------
  |  Branch (52:13): [True: 92, False: 98]
  ------------------
   53|     92|                return 5;
   54|     98|        if ((c & 0xfe) == 0xfc)
  ------------------
  |  Branch (54:13): [True: 36, False: 62]
  ------------------
   55|     36|                return 6;
   56|       |
   57|     62|        return 0;
   58|     98|}
utf8.c:utf8_unichar_to_encoded_len:
  507|  7.55k|static int utf8_unichar_to_encoded_len(char32_t unichar) {
  508|       |
  509|  7.55k|        if (unichar < 0x80)
  ------------------
  |  Branch (509:13): [True: 9, False: 7.54k]
  ------------------
  510|      9|                return 1;
  511|  7.54k|        if (unichar < 0x800)
  ------------------
  |  Branch (511:13): [True: 1.81k, False: 5.72k]
  ------------------
  512|  1.81k|                return 2;
  513|  5.72k|        if (unichar < 0x10000)
  ------------------
  |  Branch (513:13): [True: 1.86k, False: 3.86k]
  ------------------
  514|  1.86k|                return 3;
  515|  3.86k|        if (unichar < 0x200000)
  ------------------
  |  Branch (515:13): [True: 3.80k, False: 58]
  ------------------
  516|  3.80k|                return 4;
  517|     58|        if (unichar < 0x4000000)
  ------------------
  |  Branch (517:13): [True: 43, False: 15]
  ------------------
  518|     43|                return 5;
  519|       |
  520|     15|        return 6;
  521|     58|}

conf-parser.c:utf8_is_valid:
   12|   840k|static inline char* utf8_is_valid(const char *str) {
   13|   840k|        return utf8_is_valid_n(str, SIZE_MAX);
   14|   840k|}
parse-helpers.c:utf8_is_valid:
   12|  10.6k|static inline char* utf8_is_valid(const char *str) {
   13|  10.6k|        return utf8_is_valid_n(str, SIZE_MAX);
   14|  10.6k|}
user-record-nss.c:utf8_is_valid:
   12|     88|static inline char* utf8_is_valid(const char *str) {
   13|     88|        return utf8_is_valid_n(str, SIZE_MAX);
   14|     88|}
log.c:utf8_is_valid:
   12|  15.7k|static inline char* utf8_is_valid(const char *str) {
   13|  15.7k|        return utf8_is_valid_n(str, SIZE_MAX);
   14|  15.7k|}
user-util.c:utf8_is_valid:
   12|    725|static inline char* utf8_is_valid(const char *str) {
   13|    725|        return utf8_is_valid_n(str, SIZE_MAX);
   14|    725|}

detect_container:
  622|    310|Virtualization detect_container(void) {
  623|    310|        static thread_local Virtualization cached_found = _VIRTUALIZATION_INVALID;
  624|    310|        _cleanup_free_ char *m = NULL, *o = NULL, *p = NULL;
  ------------------
  |  |   82|    310|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    310|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  625|    310|        const char *e = NULL;
  626|    310|        Virtualization v;
  627|    310|        int r;
  628|       |
  629|    310|        if (cached_found >= 0)
  ------------------
  |  Branch (629:13): [True: 309, False: 1]
  ------------------
  630|    309|                return cached_found;
  631|       |
  632|       |        /* /proc/vz exists in container and outside of the container, /proc/bc only outside of the container. */
  633|      1|        if (access("/proc/vz", F_OK) < 0) {
  ------------------
  |  Branch (633:13): [True: 1, False: 0]
  ------------------
  634|      1|                if (errno != ENOENT)
  ------------------
  |  Branch (634:21): [True: 0, False: 1]
  ------------------
  635|      1|                        log_debug_errno(errno, "Failed to check if /proc/vz exists, ignoring: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  636|      1|        } else if (access("/proc/bc", F_OK) < 0) {
  ------------------
  |  Branch (636:20): [True: 0, False: 0]
  ------------------
  637|      0|                if (errno == ENOENT) {
  ------------------
  |  Branch (637:21): [True: 0, False: 0]
  ------------------
  638|      0|                        v = VIRTUALIZATION_OPENVZ;
  639|      0|                        goto finish;
  640|      0|                }
  641|       |
  642|      0|                log_debug_errno(errno, "Failed to check if /proc/bc exists, ignoring: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  643|      0|        }
  644|       |
  645|       |        /* "Official" way of detecting WSL https://github.com/Microsoft/WSL/issues/423#issuecomment-221627364 */
  646|      1|        r = read_one_line_file("/proc/sys/kernel/osrelease", &o);
  647|      1|        if (r < 0)
  ------------------
  |  Branch (647:13): [True: 0, False: 1]
  ------------------
  648|      1|                log_debug_errno(r, "Failed to read /proc/sys/kernel/osrelease, ignoring: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  649|      1|        else if (strstr(o, "Microsoft") || strstr(o, "WSL")) {
  ------------------
  |  Branch (649:18): [True: 0, False: 1]
  |  Branch (649:44): [True: 0, False: 1]
  ------------------
  650|      0|                v = VIRTUALIZATION_WSL;
  651|      0|                goto finish;
  652|      0|        }
  653|       |
  654|       |        /* proot doesn't use PID namespacing, so we can just check if we have a matching tracer for this
  655|       |         * invocation without worrying about it being elsewhere.
  656|       |         */
  657|      1|        r = get_proc_field("/proc/self/status", "TracerPid", &p);
  658|      1|        if (r < 0)
  ------------------
  |  Branch (658:13): [True: 0, False: 1]
  ------------------
  659|      1|                log_debug_errno(r, "Failed to read our own trace PID, ignoring: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  660|      1|        else if (!streq(p, "0")) {
  ------------------
  |  |   46|      1|#define streq(a,b) (strcmp((a),(b)) == 0)
  ------------------
  |  Branch (660:18): [True: 0, False: 1]
  ------------------
  661|      0|                pid_t ptrace_pid;
  662|       |
  663|      0|                r = parse_pid(p, &ptrace_pid);
  664|      0|                if (r < 0)
  ------------------
  |  Branch (664:21): [True: 0, False: 0]
  ------------------
  665|      0|                        log_debug_errno(r, "Failed to parse our own tracer PID, ignoring: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  666|      0|                else {
  667|      0|                        _cleanup_free_ char *ptrace_comm = NULL;
  ------------------
  |  |   82|      0|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  668|      0|                        const char *pf;
  669|       |
  670|      0|                        pf = procfs_file_alloca(ptrace_pid, "comm");
  ------------------
  |  |   12|      0|        ({                                                              \
  |  |   13|      0|                pid_t _pid_ = (pid);                                    \
  |  |   14|      0|                const char *_field_ = (field);                          \
  |  |   15|      0|                char *_r_;                                              \
  |  |   16|      0|                if (_pid_ == 0)                                         \
  |  |  ------------------
  |  |  |  Branch (16:21): [True: 0, False: 0]
  |  |  ------------------
  |  |   17|      0|                        _r_ = strjoina("/proc/self/", _field_);         \
  |  |  ------------------
  |  |  |  |   94|      0|        ({                                                              \
  |  |  |  |   95|      0|                const char *_appendees_[] = { a, __VA_ARGS__ };         \
  |  |  |  |   96|      0|                char *_d_, *_p_;                                        \
  |  |  |  |   97|      0|                size_t _len_ = 0;                                       \
  |  |  |  |   98|      0|                size_t _i_;                                             \
  |  |  |  |   99|      0|                for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|      0|        (__builtin_choose_expr(                                         \
  |  |  |  |  |  |  135|      0|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  |  |  |  |  136|      0|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  |  |  |  |  137|      0|                VOID_0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  128|      0|#  define VOID_0 ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (99:64): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|                        _len_ += strlen(_appendees_[_i_]);              \
  |  |  |  |  101|      0|                _p_ = _d_ = newa(char, _len_ + 1);                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|      0|        ({                                                              \
  |  |  |  |  |  |   30|      0|                size_t _n_ = (n);                                       \
  |  |  |  |  |  |   31|      0|                assert_se(MUL_ASSIGN_SAFE(&_n_, sizeof(t)));            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   32|      0|                (t*) alloca_safe(_n_);                                  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   22|      0|        ({                                                              \
  |  |  |  |  |  |  |  |   23|      0|                size_t _nn_ = (n);                                      \
  |  |  |  |  |  |  |  |   24|      0|                assert(_nn_ <= ALLOCA_MAX);                             \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   25|      0|                alloca(_nn_ == 0 ? 1 : _nn_);                           \
  |  |  |  |  |  |  |  |   26|      0|        })                                                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  102|      0|                for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|      0|        (__builtin_choose_expr(                                         \
  |  |  |  |  |  |  135|      0|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  |  |  |  |  136|      0|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  |  |  |  |  137|      0|                VOID_0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  128|      0|#  define VOID_0 ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (102:64): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|                        _p_ = stpcpy(_p_, _appendees_[_i_]);            \
  |  |  |  |  104|      0|                *_p_ = 0;                                               \
  |  |  |  |  105|      0|                _d_;                                                    \
  |  |  |  |  106|      0|        })
  |  |  ------------------
  |  |   18|      0|                else {                                                  \
  |  |   19|      0|                        assert(_pid_ > 0);                              \
  |  |  ------------------
  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   20|      0|                        _r_ = newa(char, STRLEN("/proc/") + DECIMAL_STR_MAX(pid_t) + 1 + strlen(_field_) + 1); \
  |  |  ------------------
  |  |  |  |   29|      0|        ({                                                              \
  |  |  |  |   30|      0|                size_t _n_ = (n);                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  |  Branch (30:31): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |   31|      0|                assert_se(MUL_ASSIGN_SAFE(&_n_, sizeof(t)));            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   32|      0|                (t*) alloca_safe(_n_);                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|        ({                                                              \
  |  |  |  |  |  |   23|      0|                size_t _nn_ = (n);                                      \
  |  |  |  |  |  |   24|      0|                assert(_nn_ <= ALLOCA_MAX);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|                alloca(_nn_ == 0 ? 1 : _nn_);                           \
  |  |  |  |  |  |   26|      0|        })                                                              \
  |  |  |  |  ------------------
  |  |  |  |   33|      0|        })
  |  |  ------------------
  |  |   21|      0|                        sprintf(_r_, "/proc/" PID_FMT "/%s", _pid_, _field_); \
  |  |   22|      0|                }                                                       \
  |  |   23|      0|                (const char*) _r_;                                      \
  |  |   24|      0|        })
  ------------------
  671|      0|                        r = read_one_line_file(pf, &ptrace_comm);
  672|      0|                        if (r < 0)
  ------------------
  |  Branch (672:29): [True: 0, False: 0]
  ------------------
  673|      0|                                log_debug_errno(r, "Failed to read %s, ignoring: %m", pf);
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  674|      0|                        else if (startswith(ptrace_comm, "proot")) {
  ------------------
  |  Branch (674:34): [True: 0, False: 0]
  ------------------
  675|      0|                                v = VIRTUALIZATION_PROOT;
  676|      0|                                goto finish;
  677|      0|                        }
  678|      0|                }
  679|      0|        }
  680|       |
  681|       |        /* The container manager might have placed this in the /run/host/ hierarchy for us, which is best
  682|       |         * because we can be consumed just like that, without special privileges. */
  683|      1|        r = read_one_line_file("/run/host/container-manager", &m);
  684|      1|        if (r > 0) {
  ------------------
  |  Branch (684:13): [True: 0, False: 1]
  ------------------
  685|      0|                e = m;
  686|      0|                goto translate_name;
  687|      0|        }
  688|      1|        if (!IN_SET(r, -ENOENT, 0))
  ------------------
  |  |  361|      1|        ({                                                              \
  |  |  362|      1|                bool _found = false;                                    \
  |  |  363|      1|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      1|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      1|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      1|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      1|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      1|                switch (x) {                                            \
  |  |  368|      1|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      1|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      1|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      1|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|      1|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|      1|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      1|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      1|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      1|                        _found = true;                                  \
  |  |  370|      1|                        break;                                          \
  |  |  371|      1|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 1]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      1|                }                                                       \
  |  |  374|      1|                _found;                                                 \
  |  |  375|      1|        })
  ------------------
  |  Branch (688:13): [True: 0, False: 1]
  ------------------
  689|      0|                return log_debug_errno(r, "Failed to read /run/host/container-manager: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  690|       |
  691|      1|        if (getpid_cached() == 1) {
  ------------------
  |  Branch (691:13): [True: 0, False: 1]
  ------------------
  692|       |                /* If we are PID 1 we can just check our own environment variable, and that's authoritative.
  693|       |                 * We distinguish three cases:
  694|       |                 * - the variable is not defined → we jump to other checks
  695|       |                 * - the variable is defined to an empty value → we are not in a container
  696|       |                 * - anything else → some container, either one of the known ones or "container-other"
  697|       |                 */
  698|      0|                e = getenv("container");
  699|      0|                if (!e)
  ------------------
  |  Branch (699:21): [True: 0, False: 0]
  ------------------
  700|      0|                        goto check_files;
  701|      0|                if (isempty(e)) {
  ------------------
  |  Branch (701:21): [True: 0, False: 0]
  ------------------
  702|      0|                        v = VIRTUALIZATION_NONE;
  703|      0|                        goto finish;
  704|      0|                }
  705|       |
  706|      0|                goto translate_name;
  707|      0|        }
  708|       |
  709|       |        /* Otherwise, PID 1 might have dropped this information into a file in /run. This is better than accessing
  710|       |         * /proc/1/environ, since we don't need CAP_SYS_PTRACE for that. */
  711|      1|        r = read_one_line_file("/run/systemd/container", &m);
  712|      1|        if (r > 0) {
  ------------------
  |  Branch (712:13): [True: 1, False: 0]
  ------------------
  713|      1|                e = m;
  714|      1|                goto translate_name;
  715|      1|        }
  716|      0|        if (!IN_SET(r, -ENOENT, 0))
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (716:13): [True: 0, False: 0]
  ------------------
  717|      0|                return log_debug_errno(r, "Failed to read /run/systemd/container: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  718|       |
  719|       |        /* Fallback for cases where PID 1 was not systemd (for example, cases where init=/bin/sh is used. */
  720|      0|        r = getenv_for_pid(1, "container", &m);
  721|      0|        if (r > 0) {
  ------------------
  |  Branch (721:13): [True: 0, False: 0]
  ------------------
  722|      0|                e = m;
  723|      0|                goto translate_name;
  724|      0|        }
  725|      0|        if (r < 0) /* This only works if we have CAP_SYS_PTRACE, hence let's better ignore failures here */
  ------------------
  |  Branch (725:13): [True: 0, False: 0]
  ------------------
  726|      0|                log_debug_errno(r, "Failed to read $container of PID 1, ignoring: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  727|       |
  728|      0|check_files:
  729|       |        /* Check for existence of some well-known files. We only do this after checking
  730|       |         * for other specific container managers, otherwise we risk mistaking another
  731|       |         * container manager for Docker: the /.dockerenv file could inadvertently end up
  732|       |         * in a file system image. */
  733|      0|        v = detect_container_files();
  734|      0|        if (v < 0)
  ------------------
  |  Branch (734:13): [True: 0, False: 0]
  ------------------
  735|      0|                return v;
  736|      0|        if (v != VIRTUALIZATION_NONE)
  ------------------
  |  Branch (736:13): [True: 0, False: 0]
  ------------------
  737|      0|                goto finish;
  738|       |
  739|       |        /* Finally, the root pid namespace has an hardcoded inode number of 0xEFFFFFFC since kernel 3.8, so
  740|       |         * if all else fails we can check the inode number of our pid namespace and compare it. */
  741|      0|        if (running_in_pidns() > 0) {
  ------------------
  |  Branch (741:13): [True: 0, False: 0]
  ------------------
  742|      0|                log_debug("Running in a pid namespace, assuming unknown container manager.");
  ------------------
  |  |  220|      0|#define log_debug(...)     log_full(LOG_DEBUG,   __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
  743|      0|                v = VIRTUALIZATION_CONTAINER_OTHER;
  744|      0|                goto finish;
  745|      0|        }
  746|       |
  747|       |        /* If none of that worked, give up, assume no container manager. */
  748|      0|        v = VIRTUALIZATION_NONE;
  749|      0|        goto finish;
  750|       |
  751|      1|translate_name:
  752|      1|        if (streq(e, "oci")) {
  ------------------
  |  |   46|      1|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  753|       |                /* Some images hardcode container=oci, but OCI is not a specific container manager.
  754|       |                 * Try to detect one based on well-known files. */
  755|      0|                v = detect_container_files();
  756|      0|                if (v == VIRTUALIZATION_NONE)
  ------------------
  |  Branch (756:21): [True: 0, False: 0]
  ------------------
  757|      0|                        v = VIRTUALIZATION_CONTAINER_OTHER;
  758|      0|                goto finish;
  759|      0|        }
  760|      1|        v = container_from_string(e);
  761|      1|        if (v < 0)
  ------------------
  |  Branch (761:13): [True: 0, False: 1]
  ------------------
  762|      0|                v = VIRTUALIZATION_CONTAINER_OTHER;
  763|       |
  764|      1|finish:
  765|      1|        log_debug("Found container virtualization %s.", virtualization_to_string(v));
  ------------------
  |  |  220|      1|#define log_debug(...)     log_full(LOG_DEBUG,   __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      1|        ({                                                             \
  |  |  |  |  212|      1|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      1|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      1|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      1|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      1|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      1|        ({                                                              \
  |  |  |  |  |  |  190|      1|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      1|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      1|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      1|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      2|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      1|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      1|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      1|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      1|        })
  |  |  ------------------
  ------------------
  766|      1|        cached_found = v;
  767|      1|        return v;
  768|      1|}
detect_virtualization:
  770|    225|Virtualization detect_virtualization(void) {
  771|    225|        int v;
  772|       |
  773|    225|        v = detect_container();
  774|    225|        if (v != VIRTUALIZATION_NONE)
  ------------------
  |  Branch (774:13): [True: 225, False: 0]
  ------------------
  775|    225|                return v;
  776|       |
  777|      0|        return detect_vm();
  778|    225|}
running_in_userns:
  780|      1|int running_in_userns(void) {
  781|      1|        int r;
  782|       |
  783|      1|        r = namespace_is_init(NAMESPACE_USER);
  784|      1|        if (r < 0)
  ------------------
  |  Branch (784:13): [True: 0, False: 1]
  ------------------
  785|      0|                return log_debug_errno(r, "Failed to test if in root user namespace, ignoring: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  786|       |
  787|      1|        return !r;
  788|      1|}

condition.c:VIRTUALIZATION_IS_VM:
   50|      1|static inline bool VIRTUALIZATION_IS_VM(Virtualization x) {
   51|      1|        return x >= VIRTUALIZATION_VM_FIRST && x <= VIRTUALIZATION_VM_LAST;
  ------------------
  |  Branch (51:16): [True: 1, False: 0]
  |  Branch (51:48): [True: 0, False: 1]
  ------------------
   52|      1|}
condition.c:VIRTUALIZATION_IS_CONTAINER:
   54|      1|static inline bool VIRTUALIZATION_IS_CONTAINER(Virtualization x) {
   55|      1|        return x >= VIRTUALIZATION_CONTAINER_FIRST && x <= VIRTUALIZATION_CONTAINER_LAST;
  ------------------
  |  Branch (55:16): [True: 1, False: 0]
  |  Branch (55:55): [True: 1, False: 0]
  ------------------
   56|      1|}

l2tp-tunnel.c:l2tp_session_free_or_set_invalidp:
   15|  66.6k|        static inline void func##p(type *p) {           \
   16|  66.6k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 52.9k, False: 13.6k]
  ------------------
   17|  66.6k|                        *p = func(*p);                  \
   18|  66.6k|        }
l2tp-tunnel.c:config_section_freep:
   15|  66.6k|        static inline void func##p(type *p) {           \
   16|  66.6k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 7.28k, False: 59.3k]
  ------------------
   17|  66.6k|                        *p = func(*p);                  \
   18|  66.6k|        }
l2tp-tunnel.c:l2tp_session_freep:
   15|  66.6k|        static inline void func##p(type *p) {           \
   16|  66.6k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 0, False: 66.6k]
  ------------------
   17|  66.6k|                        *p = func(*p);                  \
   18|  66.6k|        }
l2tp-tunnel.c:set_freep:
   15|    275|        static inline void func##p(type *p) {           \
   16|    275|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 180, False: 95]
  ------------------
   17|    275|                        *p = func(*p);                  \
   18|    275|        }
macsec.c:macsec_receive_association_free_or_set_invalidp:
   15|  26.5k|        static inline void func##p(type *p) {           \
   16|  26.5k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 3.92k, False: 22.5k]
  ------------------
   17|  26.5k|                        *p = func(*p);                  \
   18|  26.5k|        }
macsec.c:macsec_receive_channel_free_or_set_invalidp:
   15|  8.25k|        static inline void func##p(type *p) {           \
   16|  8.25k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 1.23k, False: 7.01k]
  ------------------
   17|  8.25k|                        *p = func(*p);                  \
   18|  8.25k|        }
macsec.c:config_section_freep:
   15|  26.9k|        static inline void func##p(type *p) {           \
   16|  26.9k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 18.0k, False: 8.88k]
  ------------------
   17|  26.9k|                        *p = func(*p);                  \
   18|  26.9k|        }
macsec.c:macsec_receive_channel_freep:
   15|  5.69k|        static inline void func##p(type *p) {           \
   16|  5.69k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 0, False: 5.69k]
  ------------------
   17|  5.69k|                        *p = func(*p);                  \
   18|  5.69k|        }
macsec.c:macsec_receive_association_freep:
   15|  11.2k|        static inline void func##p(type *p) {           \
   16|  11.2k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 0, False: 11.2k]
  ------------------
   17|  11.2k|                        *p = func(*p);                  \
   18|  11.2k|        }
macsec.c:macsec_transmit_association_free_or_set_invalidp:
   15|  19.1k|        static inline void func##p(type *p) {           \
   16|  19.1k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 2.95k, False: 16.1k]
  ------------------
   17|  19.1k|                        *p = func(*p);                  \
   18|  19.1k|        }
macsec.c:macsec_transmit_association_freep:
   15|  10.2k|        static inline void func##p(type *p) {           \
   16|  10.2k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 0, False: 10.2k]
  ------------------
   17|  10.2k|                        *p = func(*p);                  \
   18|  10.2k|        }
netdev.c:netdev_unrefp:
   15|  26.1k|        static inline void func##p(type *p) {           \
   16|  26.1k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 17.7k, False: 8.44k]
  ------------------
   17|  26.1k|                        *p = func(*p);                  \
   18|  26.1k|        }
tuntap.c:user_record_unrefp:
   15|    433|        static inline void func##p(type *p) {           \
   16|    433|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 42, False: 391]
  ------------------
   17|    433|                        *p = func(*p);                  \
   18|    433|        }
tuntap.c:group_record_unrefp:
   15|    428|        static inline void func##p(type *p) {           \
   16|    428|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 29, False: 399]
  ------------------
   17|    428|                        *p = func(*p);                  \
   18|    428|        }
wireguard.c:wireguard_peer_free_or_set_invalidp:
   15|  31.7k|        static inline void func##p(type *p) {           \
   16|  31.7k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 14.8k, False: 16.8k]
  ------------------
   17|  31.7k|                        *p = func(*p);                  \
   18|  31.7k|        }
wireguard.c:config_section_freep:
   15|  31.7k|        static inline void func##p(type *p) {           \
   16|  31.7k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 19.7k, False: 12.0k]
  ------------------
   17|  31.7k|                        *p = func(*p);                  \
   18|  31.7k|        }
wireguard.c:wireguard_peer_freep:
   15|  31.7k|        static inline void func##p(type *p) {           \
   16|  31.7k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 0, False: 31.7k]
  ------------------
   17|  31.7k|                        *p = func(*p);                  \
   18|  31.7k|        }
wireguard.c:route_unrefp:
   15|  20.2k|        static inline void func##p(type *p) {           \
   16|  20.2k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 15.7k, False: 4.51k]
  ------------------
   17|  20.2k|                        *p = func(*p);                  \
   18|  20.2k|        }
networkd-manager.c:manager_freep:
   15|  13.0k|        static inline void func##p(type *p) {           \
   16|  13.0k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 0, False: 13.0k]
  ------------------
   17|  13.0k|                        *p = func(*p);                  \
   18|  13.0k|        }
networkd-route.c:route_unrefp:
   15|  20.2k|        static inline void func##p(type *p) {           \
   16|  20.2k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 0, False: 20.2k]
  ------------------
   17|  20.2k|                        *p = func(*p);                  \
   18|  20.2k|        }
fuzz-netdev-parser.c:manager_freep:
   15|  13.0k|        static inline void func##p(type *p) {           \
   16|  13.0k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 13.0k, False: 1]
  ------------------
   17|  13.0k|                        *p = func(*p);                  \
   18|  13.0k|        }
fuzz-netdev-parser.c:netdev_unrefp:
   15|  13.0k|        static inline void func##p(type *p) {           \
   16|  13.0k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 5.32k, False: 7.77k]
  ------------------
   17|  13.0k|                        *p = func(*p);                  \
   18|  13.0k|        }
condition.c:strv_freep:
   15|     73|        static inline void func##p(type *p) {           \
   16|     73|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 72, False: 1]
  ------------------
   17|     73|                        *p = func(*p);                  \
   18|     73|        }
conf-parser.c:strv_freep:
   15|  23.0k|        static inline void func##p(type *p) {           \
   16|  23.0k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 13.1k, False: 9.97k]
  ------------------
   17|  23.0k|                        *p = func(*p);                  \
   18|  23.0k|        }
conf-parser.c:ordered_hashmap_freep:
   15|  23.0k|        static inline void func##p(type *p) {           \
   16|  23.0k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 0, False: 23.0k]
  ------------------
   17|  23.0k|                        *p = func(*p);                  \
   18|  23.0k|        }
conf-parser.c:set_freep:
   15|  23.0k|        static inline void func##p(type *p) {           \
   16|  23.0k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 0, False: 23.0k]
  ------------------
   17|  23.0k|                        *p = func(*p);                  \
   18|  23.0k|        }
conf-parser.c:hashmap_freep:
   15|  23.0k|        static inline void func##p(type *p) {           \
   16|  23.0k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 3, False: 23.0k]
  ------------------
   17|  23.0k|                        *p = func(*p);                  \
   18|  23.0k|        }
group-record.c:group_record_unrefp:
   15|     40|        static inline void func##p(type *p) {           \
   16|     40|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 0, False: 40]
  ------------------
   17|     40|                        *p = func(*p);                  \
   18|     40|        }
user-record-nss.c:user_record_unrefp:
   15|     44|        static inline void func##p(type *p) {           \
   16|     44|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 0, False: 44]
  ------------------
   17|     44|                        *p = func(*p);                  \
   18|     44|        }
user-record-nss.c:group_record_unrefp:
   15|     30|        static inline void func##p(type *p) {           \
   16|     30|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 0, False: 30]
  ------------------
   17|     30|                        *p = func(*p);                  \
   18|     30|        }
userdb.c:userdb_iterator_freep:
   15|  1.16k|        static inline void func##p(type *p) {           \
   16|  1.16k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 835, False: 332]
  ------------------
   17|  1.16k|                        *p = func(*p);                  \
   18|  1.16k|        }
userdb.c:user_record_unrefp:
   15|    415|        static inline void func##p(type *p) {           \
   16|    415|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 42, False: 373]
  ------------------
   17|    415|                        *p = func(*p);                  \
   18|    415|        }
userdb.c:closedirp:
   23|    835|        static inline void func##p(type *p) {                   \
   24|    835|                if (*p != (empty)) {                            \
  ------------------
  |  Branch (24:21): [True: 0, False: 835]
  ------------------
   25|      0|                        DISABLE_WARNING_ADDRESS;                \
  ------------------
  |  |   43|      0|        _Pragma("GCC diagnostic push");                                 \
  |  |   44|      0|        _Pragma("GCC diagnostic ignored \"-Waddress\"")
  ------------------
   26|      0|                        assert(func);                           \
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
   27|      0|                        REENABLE_WARNING;                       \
   28|      0|                        func(*p);                               \
   29|      0|                        *p = (empty);                           \
   30|      0|                }                                               \
   31|    835|        }
userdb.c:group_record_unrefp:
   15|    420|        static inline void func##p(type *p) {           \
   16|    420|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 41, False: 379]
  ------------------
   17|    420|                        *p = func(*p);                  \
   18|    420|        }
userdb.c:strv_freep:
   15|  2.50k|        static inline void func##p(type *p) {           \
   16|  2.50k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 835, False: 1.67k]
  ------------------
   17|  2.50k|                        *p = func(*p);                  \
   18|  2.50k|        }
conf-files.c:hashmap_freep:
   15|  23.0k|        static inline void func##p(type *p) {           \
   16|  23.0k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 0, False: 23.0k]
  ------------------
   17|  23.0k|                        *p = func(*p);                  \
   18|  23.0k|        }
conf-files.c:set_freep:
   15|  23.0k|        static inline void func##p(type *p) {           \
   16|  23.0k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 0, False: 23.0k]
  ------------------
   17|  23.0k|                        *p = func(*p);                  \
   18|  23.0k|        }
conf-files.c:closedirp:
   23|  92.3k|        static inline void func##p(type *p) {                   \
   24|  92.3k|                if (*p != (empty)) {                            \
  ------------------
  |  Branch (24:21): [True: 0, False: 92.3k]
  ------------------
   25|      0|                        DISABLE_WARNING_ADDRESS;                \
  ------------------
  |  |   43|      0|        _Pragma("GCC diagnostic push");                                 \
  |  |   44|      0|        _Pragma("GCC diagnostic ignored \"-Waddress\"")
  ------------------
   26|      0|                        assert(func);                           \
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
   27|      0|                        REENABLE_WARNING;                       \
   28|      0|                        func(*p);                               \
   29|      0|                        *p = (empty);                           \
   30|      0|                }                                               \
   31|  92.3k|        }
conf-files.c:strv_freep:
   15|  23.0k|        static inline void func##p(type *p) {           \
   16|  23.0k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 23.0k, False: 0]
  ------------------
   17|  23.0k|                        *p = func(*p);                  \
   18|  23.0k|        }
fileio.c:strv_freep:
   15|  1.57k|        static inline void func##p(type *p) {           \
   16|  1.57k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 1.57k, False: 0]
  ------------------
   17|  1.57k|                        *p = func(*p);                  \
   18|  1.57k|        }
fileio.c:funlockfilep:
   23|  1.80M|        static inline void func##p(type *p) {                   \
   24|  1.80M|                if (*p != (empty)) {                            \
  ------------------
  |  Branch (24:21): [True: 1.80M, False: 0]
  ------------------
   25|  1.80M|                        DISABLE_WARNING_ADDRESS;                \
  ------------------
  |  |   43|  1.80M|        _Pragma("GCC diagnostic push");                                 \
  |  |   44|  1.80M|        _Pragma("GCC diagnostic ignored \"-Waddress\"")
  ------------------
   26|  1.80M|                        assert(func);                           \
  ------------------
  |  |   72|  1.80M|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.80M|        do {                                                            \
  |  |  |  |   59|  1.80M|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.80M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.80M|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.80M|        } while (false)
  |  |  ------------------
  ------------------
   27|  1.80M|                        REENABLE_WARNING;                       \
   28|  1.80M|                        func(*p);                               \
   29|  1.80M|                        *p = (empty);                           \
   30|  1.80M|                }                                               \
   31|  1.80M|        }
nulstr-util.c:strv_freep:
   15|    860|        static inline void func##p(type *p) {           \
   16|    860|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 0, False: 860]
  ------------------
   17|    860|                        *p = func(*p);                  \
   18|    860|        }
proc-cmdline.c:strv_freep:
   15|     72|        static inline void func##p(type *p) {           \
   16|     72|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 0, False: 72]
  ------------------
   17|     72|                        *p = func(*p);                  \
   18|     72|        }
strv.c:strv_freep:
   15|  23.8k|        static inline void func##p(type *p) {           \
   16|  23.8k|                if (*p)                                 \
  ------------------
  |  Branch (16:21): [True: 0, False: 23.8k]
  ------------------
   17|  23.8k|                        *p = func(*p);                  \
   18|  23.8k|        }
sd-json.c:array_cleanup:
   51|  5.39k|static inline void array_cleanup(const ArrayCleanup *c) {
   52|  5.39k|        assert(c);
  ------------------
  |  |   72|  5.39k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.39k|        do {                                                            \
  |  |  |  |   59|  5.39k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.39k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.39k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.39k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.39k|        } while (false)
  |  |  ------------------
  ------------------
   53|  5.39k|        assert(!c->parray == !c->pn);
  ------------------
  |  |   72|  5.39k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.39k|        do {                                                            \
  |  |  |  |   59|  5.39k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.39k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.39k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.39k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.39k|        } while (false)
  |  |  ------------------
  ------------------
   54|       |
   55|  5.39k|        if (!c->parray)
  ------------------
  |  Branch (55:13): [True: 0, False: 5.39k]
  ------------------
   56|      0|                return;
   57|       |
   58|  5.39k|        if (*c->parray) {
  ------------------
  |  Branch (58:13): [True: 5.31k, False: 74]
  ------------------
   59|  5.31k|                assert(c->pfunc);
  ------------------
  |  |   72|  5.31k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.31k|        do {                                                            \
  |  |  |  |   59|  5.31k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.31k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.31k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.31k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.31k|        } while (false)
  |  |  ------------------
  ------------------
   60|  5.31k|                c->pfunc(*c->parray, *c->pn);
   61|  5.31k|                *c->parray = NULL;
   62|  5.31k|        }
   63|       |
   64|  5.39k|        *c->pn = 0;
   65|  5.39k|}

hashmap.c:log2u_round_up:
   54|  5.76k|static inline unsigned log2u_round_up(unsigned x) {
   55|  5.76k|        if (x <= 1)
  ------------------
  |  Branch (55:13): [True: 0, False: 5.76k]
  ------------------
   56|      0|                return 0;
   57|       |
   58|  5.76k|        return log2u(x - 1) + 1;
   59|  5.76k|}
hashmap.c:log2u:
   50|  5.76k|static inline unsigned log2u(unsigned x) {
   51|  5.76k|        return LOG2U(x);
  ------------------
  |  |   44|  5.76k|#define LOG2U(x) __builtin_choose_expr(__builtin_constant_p(x), CONST_LOG2U(x), NONCONST_LOG2U(x))
  |  |  ------------------
  |  |  |  |   39|  5.76k|#define CONST_LOG2U(x) ((x) > 1 ? __SIZEOF_INT__ * 8 - __builtin_clz(x) - 1 : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (39:25): [True: 0, False: 5.76k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define LOG2U(x) __builtin_choose_expr(__builtin_constant_p(x), CONST_LOG2U(x), NONCONST_LOG2U(x))
  |  |  ------------------
  |  |  |  |   40|  5.76k|#define NONCONST_LOG2U(x) ({                                             \
  |  |  |  |   41|  5.76k|                unsigned _x = (x);                                       \
  |  |  |  |   42|  5.76k|                _x > 1 ? __SIZEOF_INT__ * 8 - __builtin_clz(_x) - 1 : 0; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (42:17): [True: 5.76k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   43|  5.76k|        })
  |  |  ------------------
  ------------------
   52|  5.76k|}

macsec.c:explicit_bzero_safe:
   23|  7.71k|static inline void *explicit_bzero_safe(void *p, size_t l) {
   24|  7.71k|        if (p && l > 0)
  ------------------
  |  Branch (24:13): [True: 2.20k, False: 5.51k]
  |  Branch (24:18): [True: 2.20k, False: 0]
  ------------------
   25|  2.20k|                explicit_bzero(p, l);
   26|       |
   27|  7.71k|        return p;
   28|  7.71k|}
wireguard.c:explicit_bzero_safe:
   23|  14.1k|static inline void *explicit_bzero_safe(void *p, size_t l) {
   24|  14.1k|        if (p && l > 0)
  ------------------
  |  Branch (24:13): [True: 14.1k, False: 0]
  |  Branch (24:18): [True: 14.1k, False: 0]
  ------------------
   25|  14.1k|                explicit_bzero(p, l);
   26|       |
   27|  14.1k|        return p;
   28|  14.1k|}
fileio.c:explicit_bzero_safe:
   23|  4.24k|static inline void *explicit_bzero_safe(void *p, size_t l) {
   24|  4.24k|        if (p && l > 0)
  ------------------
  |  Branch (24:13): [True: 2.12k, False: 2.12k]
  |  Branch (24:18): [True: 2.12k, False: 0]
  ------------------
   25|  2.12k|                explicit_bzero(p, l);
   26|       |
   27|  4.24k|        return p;
   28|  4.24k|}
hexdecoct.c:erase_varp:
   57|  15.8k|static inline void erase_varp(struct VarEraser *e) {
   58|       |
   59|       |        /* Very similar to erase_var(), but assumes `p` is a pointer to a pointer whose memory shall be destructed. */
   60|  15.8k|        if (!e->p)
  ------------------
  |  Branch (60:13): [True: 1.83k, False: 14.0k]
  ------------------
   61|  1.83k|                return;
   62|       |
   63|  14.0k|        explicit_bzero_safe(*(void**) e->p, e->size);
   64|  14.0k|}
hexdecoct.c:explicit_bzero_safe:
   23|  14.0k|static inline void *explicit_bzero_safe(void *p, size_t l) {
   24|  14.0k|        if (p && l > 0)
  ------------------
  |  Branch (24:13): [True: 6.14k, False: 7.88k]
  |  Branch (24:18): [True: 5.47k, False: 668]
  ------------------
   25|  5.47k|                explicit_bzero(p, l);
   26|       |
   27|  14.0k|        return p;
   28|  14.0k|}
memory-util.c:explicit_bzero_safe:
   23|  5.68k|static inline void *explicit_bzero_safe(void *p, size_t l) {
   24|  5.68k|        if (p && l > 0)
  ------------------
  |  Branch (24:13): [True: 5.68k, False: 0]
  |  Branch (24:18): [True: 5.68k, False: 0]
  ------------------
   25|  5.68k|                explicit_bzero(p, l);
   26|       |
   27|  5.68k|        return p;
   28|  5.68k|}
mempool.c:ALIGN_TO:
   76|     13|static inline size_t ALIGN_TO(size_t l, size_t ali) {
   77|     13|        assert(ISPOWEROF2(ali));
  ------------------
  |  |   72|     13|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     13|        do {                                                            \
  |  |  |  |   59|     13|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     39|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 13]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 13, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 13, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     13|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     13|        } while (false)
  |  |  ------------------
  ------------------
   78|       |
   79|     13|        if (l > SIZE_MAX - (ali - 1))
  ------------------
  |  Branch (79:13): [True: 0, False: 13]
  ------------------
   80|      0|                return SIZE_MAX; /* indicate overflow */
   81|       |
   82|     13|        return ((l + (ali - 1)) & ~(ali - 1));
   83|     13|}
user-util.c:ALIGN_TO:
   76|  1.67k|static inline size_t ALIGN_TO(size_t l, size_t ali) {
   77|  1.67k|        assert(ISPOWEROF2(ali));
  ------------------
  |  |   72|  1.67k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.67k|        do {                                                            \
  |  |  |  |   59|  1.67k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.01k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.67k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 1.67k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 1.67k, False: 0]
  |  |  |  |  |  |  |  Branch (95:44): [True: 1.67k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.67k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.67k|        } while (false)
  |  |  ------------------
  ------------------
   78|       |
   79|  1.67k|        if (l > SIZE_MAX - (ali - 1))
  ------------------
  |  Branch (79:13): [True: 0, False: 1.67k]
  ------------------
   80|      0|                return SIZE_MAX; /* indicate overflow */
   81|       |
   82|  1.67k|        return ((l + (ali - 1)) & ~(ali - 1));
   83|  1.67k|}

startswith:
    6|  5.64M|sd_char *startswith(const sd_char *s, const sd_char *prefix) {
    7|  5.64M|        size_t l;
    8|       |
    9|  5.64M|        assert(s);
  ------------------
  |  |   72|  5.64M|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.64M|        do {                                                            \
  |  |  |  |   59|  5.64M|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.64M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.64M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.64M|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.64M|        } while (false)
  |  |  ------------------
  ------------------
   10|  5.64M|        assert(prefix);
  ------------------
  |  |   72|  5.64M|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.64M|        do {                                                            \
  |  |  |  |   59|  5.64M|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.64M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.64M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.64M|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.64M|        } while (false)
  |  |  ------------------
  ------------------
   11|       |
   12|  5.64M|        l = strlen(prefix);
   13|  5.64M|        if (!strneq(s, prefix, l))
  ------------------
  |  |   47|  5.64M|#define strneq(a, b, n) (strncmp((a), (b), (n)) == 0)
  ------------------
  |  Branch (13:13): [True: 4.05M, False: 1.59M]
  ------------------
   14|  4.05M|                return NULL;
   15|       |
   16|  1.59M|        return (sd_char*) s + l;
   17|  5.64M|}
endswith:
   32|   558k|sd_char* endswith(const sd_char *s, const sd_char *suffix) {
   33|   558k|        size_t sl, pl;
   34|       |
   35|   558k|        assert(s);
  ------------------
  |  |   72|   558k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   558k|        do {                                                            \
  |  |  |  |   59|   558k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   558k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 558k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   558k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   558k|        } while (false)
  |  |  ------------------
  ------------------
   36|   558k|        assert(suffix);
  ------------------
  |  |   72|   558k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   558k|        do {                                                            \
  |  |  |  |   59|   558k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   558k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 558k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   558k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   558k|        } while (false)
  |  |  ------------------
  ------------------
   37|       |
   38|   558k|        sl = strlen(s);
   39|   558k|        pl = strlen(suffix);
   40|       |
   41|   558k|        if (pl == 0)
  ------------------
  |  Branch (41:13): [True: 0, False: 558k]
  ------------------
   42|      0|                return (sd_char*) s + sl;
   43|       |
   44|   558k|        if (sl < pl)
  ------------------
  |  Branch (44:13): [True: 5.64k, False: 553k]
  ------------------
   45|  5.64k|                return NULL;
   46|       |
   47|   553k|        if (!streq(s + sl - pl, suffix))
  ------------------
  |  |   46|   553k|#define streq(a,b) (strcmp((a),(b)) == 0)
  ------------------
  |  Branch (47:13): [True: 553k, False: 1]
  ------------------
   48|   553k|                return NULL;
   49|       |
   50|      1|        return (sd_char*) s + sl - pl;
   51|   553k|}
strverscmp_improved:
   78|  2.79k|int strverscmp_improved(const sd_char *a, const sd_char *b) {
   79|       |        /* This function is similar to strverscmp(3), but it treats '-' and '.' as separators.
   80|       |         *
   81|       |         * The logic is based on rpm's rpmvercmp(), but unlike rpmvercmp(), it distinguishes e.g.
   82|       |         * '123a' and '123.a', with '123a' being newer.
   83|       |         *
   84|       |         * It allows direct comparison of strings which contain both a version and a release; e.g.
   85|       |         * '247.2-3.1.fc33.x86_64' or '5.11.0-0.rc5.20210128git76c057c84d28.137.fc34'.
   86|       |         *
   87|       |         * The input string is split into segments. Each segment is numeric or alphabetic, and may be
   88|       |         * prefixed with the following:
   89|       |         *  '~' : used for pre-releases, a segment prefixed with this is the oldest,
   90|       |         *  '-' : used for the separator between version and release,
   91|       |         *  '^' : used for patched releases, a segment with this is newer than one with '-'.
   92|       |         *  '.' : used for point releases.
   93|       |         * Note that no prefix segment is the newest. All non-supported characters are dropped, and
   94|       |         * handled as a separator of segments, e.g., '123_a' is equivalent to '123a'.
   95|       |         *
   96|       |         * By using this, version strings can be sorted like following:
   97|       |         *  (older) 122.1
   98|       |         *     ^    123~rc1-1
   99|       |         *     |    123
  100|       |         *     |    123-a
  101|       |         *     |    123-a.1
  102|       |         *     |    123-1
  103|       |         *     |    123-1.1
  104|       |         *     |    123^post1
  105|       |         *     |    123.a-1
  106|       |         *     |    123.1-1
  107|       |         *     v    123a-1
  108|       |         *  (newer) 124-1
  109|       |         */
  110|       |
  111|  2.79k|        a = strempty(a);
  112|  2.79k|        b = strempty(b);
  113|       |
  114|  2.79k|        for (;;) {
  115|  2.79k|                const sd_char *aa, *bb;
  116|  2.79k|                int r;
  117|       |
  118|       |                /* Drop leading invalid characters. */
  119|  2.79k|                while (*a != '\0' && !is_valid_version_char(*a))
  ------------------
  |  Branch (119:24): [True: 2.79k, False: 0]
  |  Branch (119:38): [True: 0, False: 2.79k]
  ------------------
  120|      0|                        a++;
  121|  3.77k|                while (*b != '\0' && !is_valid_version_char(*b))
  ------------------
  |  Branch (121:24): [True: 3.54k, False: 230]
  |  Branch (121:38): [True: 979, False: 2.56k]
  ------------------
  122|    979|                        b++;
  123|       |
  124|       |                /* Handle '~'. Used for pre-releases, e.g. 123~rc1, or 4.5~alpha1 */
  125|  2.79k|                if (*a == '~' || *b == '~') {
  ------------------
  |  Branch (125:21): [True: 0, False: 2.79k]
  |  Branch (125:34): [True: 204, False: 2.58k]
  ------------------
  126|       |                        /* The string prefixed with '~' is older. */
  127|    204|                        r = CMP(*a != '~', *b != '~');
  ------------------
  |  |  288|    204|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|    204|        ({                                              \
  |  |  |  |  291|    204|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|    204|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|    204|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    204|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    204|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    204|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    204|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    204|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    204|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 204]
  |  |  |  |  ------------------
  |  |  |  |  294|    204|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    204|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    204|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    204|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    204|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    204|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    204|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 204, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|    204|        })
  |  |  ------------------
  ------------------
  128|    204|                        if (r != 0)
  ------------------
  |  Branch (128:29): [True: 204, False: 0]
  ------------------
  129|    204|                                return r;
  130|       |
  131|       |                        /* Now both strings are prefixed with '~'. Compare remaining strings. */
  132|      0|                        a++;
  133|      0|                        b++;
  134|      0|                }
  135|       |
  136|       |                /* If at least one string reaches the end, then longer is newer.
  137|       |                 * Note that except for '~' prefixed segments, a string which has more segments is newer.
  138|       |                 * So, this check must be after the '~' check. */
  139|  2.58k|                if (*a == '\0' || *b == '\0')
  ------------------
  |  Branch (139:21): [True: 0, False: 2.58k]
  |  Branch (139:35): [True: 230, False: 2.35k]
  ------------------
  140|    230|                        return CMP(*a, *b);
  ------------------
  |  |  288|    230|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|    230|        ({                                              \
  |  |  |  |  291|    230|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|    230|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|    230|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    230|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    230|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    230|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    230|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    230|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    230|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 230]
  |  |  |  |  ------------------
  |  |  |  |  294|    230|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    230|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    230|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    230|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    230|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    230|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    230|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 230, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|    230|        })
  |  |  ------------------
  ------------------
  141|       |
  142|       |                /* Handle '-', which separates version and release, e.g 123.4-3.1.fc33.x86_64 */
  143|  2.35k|                if (*a == '-' || *b == '-') {
  ------------------
  |  Branch (143:21): [True: 0, False: 2.35k]
  |  Branch (143:34): [True: 201, False: 2.15k]
  ------------------
  144|       |                        /* The string prefixed with '-' is older (e.g., 123-9 vs 123.1-1) */
  145|    201|                        r = CMP(*a != '-', *b != '-');
  ------------------
  |  |  288|    201|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|    201|        ({                                              \
  |  |  |  |  291|    201|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|    201|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|    201|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    201|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    201|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    201|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    201|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    201|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    201|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 201]
  |  |  |  |  ------------------
  |  |  |  |  294|    201|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    201|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    201|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    201|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    201|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    201|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    201|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 201, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|    201|        })
  |  |  ------------------
  ------------------
  146|    201|                        if (r != 0)
  ------------------
  |  Branch (146:29): [True: 201, False: 0]
  ------------------
  147|    201|                                return r;
  148|       |
  149|      0|                        a++;
  150|      0|                        b++;
  151|      0|                }
  152|       |
  153|       |                /* Handle '^'. Used for patched release. */
  154|  2.15k|                if (*a == '^' || *b == '^') {
  ------------------
  |  Branch (154:21): [True: 0, False: 2.15k]
  |  Branch (154:34): [True: 200, False: 1.95k]
  ------------------
  155|    200|                        r = CMP(*a != '^', *b != '^');
  ------------------
  |  |  288|    200|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|    200|        ({                                              \
  |  |  |  |  291|    200|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|    200|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|    200|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    200|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    200|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    200|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    200|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    200|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    200|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 200]
  |  |  |  |  ------------------
  |  |  |  |  294|    200|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    200|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    200|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    200|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    200|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    200|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    200|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 200, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|    200|        })
  |  |  ------------------
  ------------------
  156|    200|                        if (r != 0)
  ------------------
  |  Branch (156:29): [True: 200, False: 0]
  ------------------
  157|    200|                                return r;
  158|       |
  159|      0|                        a++;
  160|      0|                        b++;
  161|      0|                }
  162|       |
  163|       |                /* Handle '.'. Used for point releases. */
  164|  1.95k|                if (*a == '.' || *b == '.') {
  ------------------
  |  Branch (164:21): [True: 1, False: 1.95k]
  |  Branch (164:34): [True: 198, False: 1.75k]
  ------------------
  165|    199|                        r = CMP(*a != '.', *b != '.');
  ------------------
  |  |  288|    199|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|    199|        ({                                              \
  |  |  |  |  291|    199|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|    199|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|    199|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    199|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    199|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    199|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    199|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    199|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    199|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 199]
  |  |  |  |  ------------------
  |  |  |  |  294|    199|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    199|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    199|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    199|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|    199|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|    199|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|    199|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 198, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  295|    199|        })
  |  |  ------------------
  ------------------
  166|    199|                        if (r != 0)
  ------------------
  |  Branch (166:29): [True: 198, False: 1]
  ------------------
  167|    198|                                return r;
  168|       |
  169|      1|                        a++;
  170|      1|                        b++;
  171|      1|                }
  172|       |
  173|  1.75k|                if (ascii_isdigit(*a) || ascii_isdigit(*b)) {
  ------------------
  |  Branch (173:21): [True: 1.75k, False: 0]
  |  Branch (173:42): [True: 0, False: 0]
  ------------------
  174|       |                        /* Find the leading numeric segments. One may be an empty string. So,
  175|       |                         * numeric segments are always newer than alpha segments. */
  176|  3.51k|                        for (aa = a; ascii_isdigit(*aa); aa++)
  ------------------
  |  Branch (176:38): [True: 1.76k, False: 1.75k]
  ------------------
  177|  1.76k|                                ;
  178|  3.79k|                        for (bb = b; ascii_isdigit(*bb); bb++)
  ------------------
  |  Branch (178:38): [True: 2.04k, False: 1.75k]
  ------------------
  179|  2.04k|                                ;
  180|       |
  181|       |                        /* Check if one of the strings was empty, but the other not. */
  182|  1.75k|                        r = CMP(a != aa, b != bb);
  ------------------
  |  |  288|  1.75k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  1.75k|        ({                                              \
  |  |  |  |  291|  1.75k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  1.75k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  1.75k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  1.75k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  1.75k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  1.75k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  1.75k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  1.75k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  1.75k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 1.75k]
  |  |  |  |  ------------------
  |  |  |  |  294|  1.75k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  1.75k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  1.75k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  1.75k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  1.75k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  1.75k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  1.75k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 314, False: 1.44k]
  |  |  |  |  ------------------
  |  |  |  |  295|  1.75k|        })
  |  |  ------------------
  ------------------
  183|  1.75k|                        if (r != 0)
  ------------------
  |  Branch (183:29): [True: 314, False: 1.44k]
  ------------------
  184|    314|                                return r;
  185|       |
  186|       |                        /* Skip leading '0', to make 00123 equivalent to 123. */
  187|  1.44k|                        while (*a == '0')
  ------------------
  |  Branch (187:32): [True: 0, False: 1.44k]
  ------------------
  188|      0|                                a++;
  189|  1.67k|                        while (*b == '0')
  ------------------
  |  Branch (189:32): [True: 232, False: 1.44k]
  ------------------
  190|    232|                                b++;
  191|       |
  192|       |                        /* To compare numeric segments without parsing their values, first compare the
  193|       |                         * lengths of the segments. Eg. 12345 vs 123, longer is newer. */
  194|  1.44k|                        r = CMP(aa - a, bb - b);
  ------------------
  |  |  288|  1.44k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  1.44k|        ({                                              \
  |  |  |  |  291|  1.44k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  1.44k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  1.44k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  1.44k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  1.44k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  1.44k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  1.44k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  1.44k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  1.44k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 315, False: 1.12k]
  |  |  |  |  ------------------
  |  |  |  |  294|  1.44k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  1.12k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  1.12k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  1.12k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  1.12k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  1.12k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  1.12k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 41, False: 1.08k]
  |  |  |  |  ------------------
  |  |  |  |  295|  1.44k|        })
  |  |  ------------------
  ------------------
  195|  1.44k|                        if (r != 0)
  ------------------
  |  Branch (195:29): [True: 356, False: 1.08k]
  ------------------
  196|    356|                                return r;
  197|       |
  198|       |                        /* Then, compare them as strings. */
  199|  1.08k|                        r = CMP(strncmp(a, b, aa - a), 0);
  ------------------
  |  |  288|  1.08k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  1.08k|        ({                                              \
  |  |  |  |  291|  1.08k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  1.08k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  1.08k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  1.08k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  1.08k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  1.08k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  1.08k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  1.08k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  1.08k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 1.07k, False: 13]
  |  |  |  |  ------------------
  |  |  |  |  294|  1.08k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|     13|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|     13|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|     13|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|     13|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|     13|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|     13|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 12, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  295|  1.08k|        })
  |  |  ------------------
  ------------------
  200|  1.08k|                        if (r != 0)
  ------------------
  |  Branch (200:29): [True: 1.08k, False: 1]
  ------------------
  201|  1.08k|                                return r;
  202|  1.08k|                } else {
  203|       |                        /* Find the leading non-numeric segments. */
  204|      0|                        for (aa = a; ascii_isalpha(*aa); aa++)
  ------------------
  |  Branch (204:38): [True: 0, False: 0]
  ------------------
  205|      0|                                ;
  206|      0|                        for (bb = b; ascii_isalpha(*bb); bb++)
  ------------------
  |  Branch (206:38): [True: 0, False: 0]
  ------------------
  207|      0|                                ;
  208|       |
  209|       |                        /* Note that the segments are usually not NUL-terminated. */
  210|      0|                        r = CMP(strncmp(a, b, MIN(aa - a, bb - b)), 0);
  ------------------
  |  |  288|      0|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|      0|        ({                                              \
  |  |  |  |  291|      0|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:50): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  292|      0|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|      0|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|        })
  |  |  ------------------
  ------------------
  211|      0|                        if (r != 0)
  ------------------
  |  Branch (211:29): [True: 0, False: 0]
  ------------------
  212|      0|                                return r;
  213|       |
  214|       |                        /* Longer is newer, e.g. abc vs abcde. */
  215|      0|                        r = CMP(aa - a, bb - b);
  ------------------
  |  |  288|      0|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|      0|        ({                                              \
  |  |  |  |  291|      0|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|      0|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|      0|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|        })
  |  |  ------------------
  ------------------
  216|      0|                        if (r != 0)
  ------------------
  |  Branch (216:29): [True: 0, False: 0]
  ------------------
  217|      0|                                return r;
  218|      0|                }
  219|       |
  220|       |                /* The current segments are equivalent. Let's move to the next one. */
  221|      1|                a = aa;
  222|      1|                b = bb;
  223|      1|        }
  224|  2.79k|}
string-util-fundamental.c:is_valid_version_char:
   74|  6.33k|static bool is_valid_version_char(sd_char a) {
   75|  6.33k|        return ascii_isdigit(a) || ascii_isalpha(a) || IN_SET(a, '~', '-', '^', '.');
  ------------------
  |  |  361|  8.11k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 805, False: 979]
  |  |  ------------------
  |  |  362|  8.11k|                bool _found = false;                                    \
  |  |  363|  8.11k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  8.11k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  8.11k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  8.11k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  1.78k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  8.11k|                switch (x) {                                            \
  |  |  368|    805|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|    204|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|    204|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|    204|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  336|    405|#define  CASE_F_4(X, ...) case X:  CASE_F_3( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  335|    605|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  334|    805|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|    805|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 200, False: 1.58k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 200, False: 1.58k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 201, False: 1.58k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (336:27): [True: 204, False: 1.58k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|    805|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|    805|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|    805|                        _found = true;                                  \
  |  |  370|    805|                        break;                                          \
  |  |  371|  1.21k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 979, False: 805]
  |  |  ------------------
  |  |  372|    979|                        ;                                               \
  |  |  373|  8.11k|                }                                                       \
  |  |  374|  8.11k|                _found;                                                 \
  |  |  375|  1.78k|        })
  ------------------
  |  Branch (75:16): [True: 4.23k, False: 2.09k]
  |  Branch (75:36): [True: 314, False: 1.78k]
  ------------------
   76|  6.33k|}

bond.c:isempty:
   85|  4.60k|static inline bool isempty(const sd_char *a) {
   86|  4.60k|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 0, False: 4.60k]
  |  Branch (86:22): [True: 584, False: 4.01k]
  ------------------
   87|  4.60k|}
ipoib.c:isempty:
   85|    883|static inline bool isempty(const sd_char *a) {
   86|    883|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 0, False: 883]
  |  Branch (86:22): [True: 194, False: 689]
  ------------------
   87|    883|}
l2tp-tunnel.c:isempty:
   85|  7.16k|static inline bool isempty(const sd_char *a) {
   86|  7.16k|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 1.48k, False: 5.67k]
  |  Branch (86:22): [True: 1.24k, False: 4.43k]
  ------------------
   87|  7.16k|}
macsec.c:isempty:
   85|  8.81k|static inline bool isempty(const sd_char *a) {
   86|  8.81k|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 0, False: 8.81k]
  |  Branch (86:22): [True: 584, False: 8.23k]
  ------------------
   87|  8.81k|}
macvlan.c:isempty:
   85|    615|static inline bool isempty(const sd_char *a) {
   86|    615|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 0, False: 615]
  |  Branch (86:22): [True: 194, False: 421]
  ------------------
   87|    615|}
tunnel.c:isempty:
   85|  8.82k|static inline bool isempty(const sd_char *a) {
   86|  8.82k|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 0, False: 8.82k]
  |  Branch (86:22): [True: 2.62k, False: 6.20k]
  ------------------
   87|  8.82k|}
vlan.c:isempty:
   85|  8.90k|static inline bool isempty(const sd_char *a) {
   86|  8.90k|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 0, False: 8.90k]
  |  Branch (86:22): [True: 1.62k, False: 7.28k]
  ------------------
   87|  8.90k|}
vxlan.c:isempty:
   85|  2.05k|static inline bool isempty(const sd_char *a) {
   86|  2.05k|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 0, False: 2.05k]
  |  Branch (86:22): [True: 380, False: 1.67k]
  ------------------
   87|  2.05k|}
wireguard.c:isempty:
   85|  25.4k|static inline bool isempty(const sd_char *a) {
   86|  25.4k|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 0, False: 25.4k]
  |  Branch (86:22): [True: 3.08k, False: 22.3k]
  ------------------
   87|  25.4k|}
wlan.c:isempty:
   85|  1.24k|static inline bool isempty(const sd_char *a) {
   86|  1.24k|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 8, False: 1.23k]
  |  Branch (86:22): [True: 388, False: 844]
  ------------------
   87|  1.24k|}
networkd-route-metric.c:strcmp_ptr:
   51|  3.47k|static inline int strcmp_ptr(const sd_char *a, const sd_char *b) {
   52|  3.47k|        if (a && b)
  ------------------
  |  Branch (52:13): [True: 0, False: 3.47k]
  |  Branch (52:18): [True: 0, False: 0]
  ------------------
   53|      0|                return strcmp(a, b);
   54|       |
   55|  3.47k|        return CMP(a, b);
  ------------------
  |  |  288|  3.47k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  3.47k|        ({                                              \
  |  |  |  |  291|  3.47k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  3.47k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  3.47k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 3.47k]
  |  |  |  |  ------------------
  |  |  |  |  294|  3.47k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 3.47k]
  |  |  |  |  ------------------
  |  |  |  |  295|  3.47k|        })
  |  |  ------------------
  ------------------
   56|  3.47k|}
compare-operator.c:streq_ptr:
   65|    298|static inline bool streq_ptr(const sd_char *a, const sd_char *b) {
   66|    298|        return strcmp_ptr(a, b) == 0;
   67|    298|}
compare-operator.c:strcmp_ptr:
   51|    298|static inline int strcmp_ptr(const sd_char *a, const sd_char *b) {
   52|    298|        if (a && b)
  ------------------
  |  Branch (52:13): [True: 298, False: 0]
  |  Branch (52:18): [True: 298, False: 0]
  ------------------
   53|    298|                return strcmp(a, b);
   54|       |
   55|      0|        return CMP(a, b);
  ------------------
  |  |  288|      0|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|      0|        ({                                              \
  |  |  |  |  291|      0|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|      0|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|      0|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|        })
  |  |  ------------------
  ------------------
   56|    298|}
condition.c:isempty:
   85|  4.46k|static inline bool isempty(const sd_char *a) {
   86|  4.46k|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 14, False: 4.44k]
  |  Branch (86:22): [True: 40, False: 4.40k]
  ------------------
   87|  4.46k|}
conf-parser.c:streq_ptr:
   65|  1.76M|static inline bool streq_ptr(const sd_char *a, const sd_char *b) {
   66|  1.76M|        return strcmp_ptr(a, b) == 0;
   67|  1.76M|}
conf-parser.c:strcmp_ptr:
   51|  1.76M|static inline int strcmp_ptr(const sd_char *a, const sd_char *b) {
   52|  1.76M|        if (a && b)
  ------------------
  |  Branch (52:13): [True: 1.76M, False: 0]
  |  Branch (52:18): [True: 1.55M, False: 214k]
  ------------------
   53|  1.55M|                return strcmp(a, b);
   54|       |
   55|   214k|        return CMP(a, b);
  ------------------
  |  |  288|   214k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|   214k|        ({                                              \
  |  |  |  |  291|   214k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|   214k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|   214k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|   214k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|   214k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|   214k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|   214k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|   214k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|   214k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 214k]
  |  |  |  |  ------------------
  |  |  |  |  294|   214k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|   214k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|   214k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|   214k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|   214k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|   214k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|   214k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 214k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|   214k|        })
  |  |  ------------------
  ------------------
   56|  1.76M|}
conf-parser.c:isempty:
   85|  1.81M|static inline bool isempty(const sd_char *a) {
   86|  1.81M|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 0, False: 1.81M]
  |  Branch (86:22): [True: 941k, False: 876k]
  ------------------
   87|  1.81M|}
dns-domain.c:ascii_isdigit:
  123|  51.5k|static inline bool ascii_isdigit(sd_char a) {
  124|       |        /* A pure ASCII, locale independent version of isdigit() */
  125|  51.5k|        return a >= '0' && a <= '9';
  ------------------
  |  Branch (125:16): [True: 43.5k, False: 8.01k]
  |  Branch (125:28): [True: 25.5k, False: 17.9k]
  ------------------
  126|  51.5k|}
dns-domain.c:ascii_isalpha:
  132|  26.0k|static inline bool ascii_isalpha(sd_char a) {
  133|       |        /* A pure ASCII, locale independent version of isalpha() */
  134|  26.0k|        return (a >= 'a' && a <= 'z') || (a >= 'A' && a <= 'Z');
  ------------------
  |  Branch (134:17): [True: 7.68k, False: 18.3k]
  |  Branch (134:29): [True: 7.41k, False: 275]
  |  Branch (134:43): [True: 6.91k, False: 11.6k]
  |  Branch (134:55): [True: 4.34k, False: 2.57k]
  ------------------
  135|  26.0k|}
hostname-setup.c:isempty:
   85|    105|static inline bool isempty(const sd_char *a) {
   86|    105|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 0, False: 105]
  |  Branch (86:22): [True: 0, False: 105]
  ------------------
   87|    105|}
ip-protocol-list.c:isempty:
   85|  2.27k|static inline bool isempty(const sd_char *a) {
   86|  2.27k|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 0, False: 2.27k]
  |  Branch (86:22): [True: 0, False: 2.27k]
  ------------------
   87|  2.27k|}
net-condition.c:isempty:
   85|  2.58k|static inline bool isempty(const sd_char *a) {
   86|  2.58k|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 0, False: 2.58k]
  |  Branch (86:22): [True: 335, False: 2.25k]
  ------------------
   87|  2.58k|}
user-record-nss.c:isempty:
   85|    206|static inline bool isempty(const sd_char *a) {
   86|    206|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 0, False: 206]
  |  Branch (86:22): [True: 1, False: 205]
  ------------------
   87|    206|}
user-record-nss.c:streq_ptr:
   65|     43|static inline bool streq_ptr(const sd_char *a, const sd_char *b) {
   66|     43|        return strcmp_ptr(a, b) == 0;
   67|     43|}
user-record-nss.c:strcmp_ptr:
   51|     43|static inline int strcmp_ptr(const sd_char *a, const sd_char *b) {
   52|     43|        if (a && b)
  ------------------
  |  Branch (52:13): [True: 43, False: 0]
  |  Branch (52:18): [True: 43, False: 0]
  ------------------
   53|     43|                return strcmp(a, b);
   54|       |
   55|      0|        return CMP(a, b);
  ------------------
  |  |  288|      0|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|      0|        ({                                              \
  |  |  |  |  291|      0|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|      0|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|      0|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|        })
  |  |  ------------------
  ------------------
   56|     43|}
user-record.c:streq_ptr:
   65|     37|static inline bool streq_ptr(const sd_char *a, const sd_char *b) {
   66|     37|        return strcmp_ptr(a, b) == 0;
   67|     37|}
user-record.c:strcmp_ptr:
   51|     37|static inline int strcmp_ptr(const sd_char *a, const sd_char *b) {
   52|     37|        if (a && b)
  ------------------
  |  Branch (52:13): [True: 37, False: 0]
  |  Branch (52:18): [True: 37, False: 0]
  ------------------
   53|     37|                return strcmp(a, b);
   54|       |
   55|      0|        return CMP(a, b);
   56|     37|}
chase.c:isempty:
   85|   288k|static inline bool isempty(const sd_char *a) {
   86|   288k|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 0, False: 288k]
  |  Branch (86:22): [True: 3.15k, False: 285k]
  ------------------
   87|   288k|}
fd-util.c:isempty:
   85|  96.2k|static inline bool isempty(const sd_char *a) {
   86|  96.2k|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 96.2k, False: 0]
  |  Branch (86:22): [True: 0, False: 0]
  ------------------
   87|  96.2k|}
fileio.c:isempty:
   85|     81|static inline bool isempty(const sd_char *a) {
   86|     81|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 0, False: 81]
  |  Branch (86:22): [True: 0, False: 81]
  ------------------
   87|     81|}
fs-util.c:isempty:
   85|  23.0k|static inline bool isempty(const sd_char *a) {
   86|  23.0k|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 0, False: 23.0k]
  |  Branch (86:22): [True: 0, False: 23.0k]
  ------------------
   87|  23.0k|}
log.c:strempty:
   89|  31.5k|static inline const sd_char *strempty(const sd_char *s) {
   90|  31.5k|        return s ?: STR_C("");
  ------------------
  |  |   42|  15.7k|#  define STR_C(str)       (str)
  ------------------
  |  Branch (90:16): [True: 15.7k, False: 15.7k]
  ------------------
   91|  31.5k|}
parse-util.c:isempty:
   85|  2.06k|static inline bool isempty(const sd_char *a) {
   86|  2.06k|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 0, False: 2.06k]
  |  Branch (86:22): [True: 344, False: 1.71k]
  ------------------
   87|  2.06k|}
parse-util.c:streq_ptr:
   65|  1.71k|static inline bool streq_ptr(const sd_char *a, const sd_char *b) {
   66|  1.71k|        return strcmp_ptr(a, b) == 0;
   67|  1.71k|}
parse-util.c:strcmp_ptr:
   51|  1.71k|static inline int strcmp_ptr(const sd_char *a, const sd_char *b) {
   52|  1.71k|        if (a && b)
  ------------------
  |  Branch (52:13): [True: 1.71k, False: 0]
  |  Branch (52:18): [True: 0, False: 1.71k]
  ------------------
   53|      0|                return strcmp(a, b);
   54|       |
   55|  1.71k|        return CMP(a, b);
  ------------------
  |  |  288|  1.71k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  1.71k|        ({                                              \
  |  |  |  |  291|  1.71k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  1.71k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  1.71k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  1.71k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  1.71k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  1.71k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  1.71k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  1.71k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  1.71k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 1.71k]
  |  |  |  |  ------------------
  |  |  |  |  294|  1.71k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  1.71k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  1.71k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  1.71k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  1.71k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  1.71k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  1.71k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 1.71k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|  1.71k|        })
  |  |  ------------------
  ------------------
   56|  1.71k|}
parse-util.c:ascii_isdigit:
  123|  1.02k|static inline bool ascii_isdigit(sd_char a) {
  124|       |        /* A pure ASCII, locale independent version of isdigit() */
  125|  1.02k|        return a >= '0' && a <= '9';
  ------------------
  |  Branch (125:16): [True: 693, False: 335]
  |  Branch (125:28): [True: 687, False: 6]
  ------------------
  126|  1.02k|}
path-util.c:isempty:
   85|  4.45M|static inline bool isempty(const sd_char *a) {
   86|  4.45M|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 328k, False: 4.12M]
  |  Branch (86:22): [True: 503k, False: 3.62M]
  ------------------
   87|  4.45M|}
path-util.c:strlen_ptr:
   73|   237k|static inline size_t strlen_ptr(const sd_char *s) {
   74|   237k|        if (!s)
  ------------------
  |  Branch (74:13): [True: 0, False: 237k]
  ------------------
   75|      0|                return 0;
   76|       |
   77|   237k|        return strlen(s);
   78|   237k|}
siphash24.c:strlen_ptr:
   73|   414k|static inline size_t strlen_ptr(const sd_char *s) {
   74|   414k|        if (!s)
  ------------------
  |  Branch (74:13): [True: 13.5k, False: 400k]
  ------------------
   75|  13.5k|                return 0;
   76|       |
   77|   400k|        return strlen(s);
   78|   414k|}
socket-util.c:isempty:
   85|  89.3k|static inline bool isempty(const sd_char *a) {
   86|  89.3k|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 0, False: 89.3k]
  |  Branch (86:22): [True: 52.2k, False: 37.1k]
  ------------------
   87|  89.3k|}
socket-util.c:ascii_isdigit:
  123|  36.8k|static inline bool ascii_isdigit(sd_char a) {
  124|       |        /* A pure ASCII, locale independent version of isdigit() */
  125|  36.8k|        return a >= '0' && a <= '9';
  ------------------
  |  Branch (125:16): [True: 33.8k, False: 2.98k]
  |  Branch (125:28): [True: 3.28k, False: 30.5k]
  ------------------
  126|  36.8k|}
string-table.c:streq_ptr:
   65|  10.0M|static inline bool streq_ptr(const sd_char *a, const sd_char *b) {
   66|  10.0M|        return strcmp_ptr(a, b) == 0;
   67|  10.0M|}
string-table.c:strcmp_ptr:
   51|  10.0M|static inline int strcmp_ptr(const sd_char *a, const sd_char *b) {
   52|  10.0M|        if (a && b)
  ------------------
  |  Branch (52:13): [True: 633k, False: 9.37M]
  |  Branch (52:18): [True: 633k, False: 0]
  ------------------
   53|   633k|                return strcmp(a, b);
   54|       |
   55|  9.37M|        return CMP(a, b);
  ------------------
  |  |  288|  9.37M|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  9.37M|        ({                                              \
  |  |  |  |  291|  9.37M|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  9.37M|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  9.37M|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  9.37M|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  9.37M|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  9.37M|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  9.37M|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  9.37M|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  9.37M|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 9.37M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|  9.37M|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|  9.37M|        })
  |  |  ------------------
  ------------------
   56|  10.0M|}
string-util.c:isempty:
   85|   196k|static inline bool isempty(const sd_char *a) {
   86|   196k|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 184k, False: 11.7k]
  |  Branch (86:22): [True: 0, False: 11.7k]
  ------------------
   87|   196k|}
string-util.c:strlen_ptr:
   73|   196k|static inline size_t strlen_ptr(const sd_char *s) {
   74|   196k|        if (!s)
  ------------------
  |  Branch (74:13): [True: 190k, False: 5.86k]
  ------------------
   75|   190k|                return 0;
   76|       |
   77|  5.86k|        return strlen(s);
   78|   196k|}
string-util.c:streq_ptr:
   65|  35.6k|static inline bool streq_ptr(const sd_char *a, const sd_char *b) {
   66|  35.6k|        return strcmp_ptr(a, b) == 0;
   67|  35.6k|}
string-util.c:strcmp_ptr:
   51|  35.6k|static inline int strcmp_ptr(const sd_char *a, const sd_char *b) {
   52|  35.6k|        if (a && b)
  ------------------
  |  Branch (52:13): [True: 5.99k, False: 29.6k]
  |  Branch (52:18): [True: 5.99k, False: 0]
  ------------------
   53|  5.99k|                return strcmp(a, b);
   54|       |
   55|  29.6k|        return CMP(a, b);
  ------------------
  |  |  288|  29.6k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  29.6k|        ({                                              \
  |  |  |  |  291|  29.6k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  29.6k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  29.6k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  29.6k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  29.6k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  29.6k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  29.6k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  29.6k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  29.6k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 29.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|  29.6k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|  29.6k|        })
  |  |  ------------------
  ------------------
   56|  35.6k|}
strv.c:strempty:
   89|  92.3k|static inline const sd_char *strempty(const sd_char *s) {
   90|  92.3k|        return s ?: STR_C("");
  ------------------
  |  |   42|  92.3k|#  define STR_C(str)       (str)
  ------------------
  |  Branch (90:16): [True: 0, False: 92.3k]
  ------------------
   91|  92.3k|}
user-util.c:isempty:
   85|  1.16k|static inline bool isempty(const sd_char *a) {
   86|  1.16k|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 0, False: 1.16k]
  |  Branch (86:22): [True: 0, False: 1.16k]
  ------------------
   87|  1.16k|}
string-util-fundamental.c:strempty:
   89|  5.58k|static inline const sd_char *strempty(const sd_char *s) {
   90|  5.58k|        return s ?: STR_C("");
  ------------------
  |  |   42|      0|#  define STR_C(str)       (str)
  ------------------
  |  Branch (90:16): [True: 5.58k, False: 0]
  ------------------
   91|  5.58k|}
string-util-fundamental.c:ascii_isdigit:
  123|  15.4k|static inline bool ascii_isdigit(sd_char a) {
  124|       |        /* A pure ASCII, locale independent version of isdigit() */
  125|  15.4k|        return a >= '0' && a <= '9';
  ------------------
  |  Branch (125:16): [True: 11.8k, False: 3.56k]
  |  Branch (125:28): [True: 9.79k, False: 2.04k]
  ------------------
  126|  15.4k|}
string-util-fundamental.c:ascii_isalpha:
  132|  2.09k|static inline bool ascii_isalpha(sd_char a) {
  133|       |        /* A pure ASCII, locale independent version of isalpha() */
  134|  2.09k|        return (a >= 'a' && a <= 'z') || (a >= 'A' && a <= 'Z');
  ------------------
  |  Branch (134:17): [True: 923, False: 1.17k]
  |  Branch (134:29): [True: 294, False: 629]
  |  Branch (134:43): [True: 875, False: 929]
  |  Branch (134:55): [True: 20, False: 855]
  ------------------
  135|  2.09k|}
sd-json.c:isempty:
   85|  10.9k|static inline bool isempty(const sd_char *a) {
   86|  10.9k|        return !a || a[0] == '\0';
  ------------------
  |  Branch (86:16): [True: 0, False: 10.9k]
  |  Branch (86:22): [True: 0, False: 10.9k]
  ------------------
   87|  10.9k|}
sd-json.c:streq_ptr:
   65|  6.45k|static inline bool streq_ptr(const sd_char *a, const sd_char *b) {
   66|  6.45k|        return strcmp_ptr(a, b) == 0;
   67|  6.45k|}
sd-json.c:strcmp_ptr:
   51|  6.45k|static inline int strcmp_ptr(const sd_char *a, const sd_char *b) {
   52|  6.45k|        if (a && b)
  ------------------
  |  Branch (52:13): [True: 6.45k, False: 0]
  |  Branch (52:18): [True: 6.45k, False: 0]
  ------------------
   53|  6.45k|                return strcmp(a, b);
   54|       |
   55|      0|        return CMP(a, b);
  ------------------
  |  |  288|      0|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|      0|        ({                                              \
  |  |  |  |  291|      0|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|      0|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|      0|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|        })
  |  |  ------------------
  ------------------
   56|  6.45k|}

fuzz-netdev-parser.c:outside_size_range:
   24|  13.0k|static inline bool outside_size_range(size_t size, size_t lower, size_t upper) {
   25|  13.0k|        if (size < lower)
  ------------------
  |  Branch (25:13): [True: 0, False: 13.0k]
  ------------------
   26|      0|                return true;
   27|  13.0k|        if (size > upper)
  ------------------
  |  Branch (27:13): [True: 1, False: 13.0k]
  ------------------
   28|      1|                return FUZZ_USE_SIZE_LIMIT;
  ------------------
  |  |  262|      1|#define FUZZ_USE_SIZE_LIMIT 1
  ------------------
   29|  13.0k|        return false;
   30|  13.0k|}
fuzz-netdev-parser.c:fuzz_setup_logging:
   32|  13.0k|static inline void fuzz_setup_logging(void) {
   33|       |        /* We don't want to fill the logs and slow down stuff when running
   34|       |         * in a fuzzing mode, so disable most of the logging. */
   35|  13.0k|        log_set_assert_return_is_critical(true);
   36|  13.0k|        log_set_max_level(LOG_CRIT);
   37|  13.0k|        log_setup();
   38|  13.0k|}

sd_bus_flush_close_unref:
 1826|  13.0k|_public_ sd_bus* sd_bus_flush_close_unref(sd_bus *bus) {
 1827|  13.0k|        if (!bus)
  ------------------
  |  Branch (1827:13): [True: 13.0k, False: 0]
  ------------------
 1828|  13.0k|                return NULL;
 1829|      0|        if (bus_origin_changed(bus))
  ------------------
  |  Branch (1829:13): [True: 0, False: 0]
  ------------------
 1830|      0|                return NULL;
 1831|       |
 1832|       |        /* Have to do this before flush() to prevent hang */
 1833|      0|        bus_kill_exec(bus);
 1834|      0|        sd_bus_flush(bus);
 1835|       |
 1836|      0|        return sd_bus_close_unref(bus);
 1837|      0|}

sd_event_unref:
  459|  14.7k|_public_ sd_event* sd_event_unref(sd_event *e) {
  460|  14.7k|        if (!e)
  ------------------
  |  Branch (460:13): [True: 14.7k, False: 0]
  ------------------
  461|  14.7k|                return NULL;
  462|      0|        if (event_origin_changed(e))
  ------------------
  |  Branch (462:13): [True: 0, False: 0]
  ------------------
  463|      0|                return NULL;
  464|       |
  465|      0|        assert(e->n_ref > 0);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  466|      0|        if (--e->n_ref > 0)
  ------------------
  |  Branch (466:13): [True: 0, False: 0]
  ------------------
  467|      0|                return NULL;
  468|       |
  469|      0|        return event_free(e);
  470|      0|}
sd_event_source_disable_unref:
  475|  36.4k|_public_ sd_event_source* sd_event_source_disable_unref(sd_event_source *s) {
  476|  36.4k|        int r;
  477|       |
  478|  36.4k|        r = sd_event_source_set_enabled(s, SD_EVENT_OFF);
  479|  36.4k|        if (r < 0)
  ------------------
  |  Branch (479:13): [True: 0, False: 36.4k]
  ------------------
  480|  36.4k|                log_debug_errno(r, "Failed to disable event source %p (%s): %m",
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  481|  36.4k|                                s, strna(s->description));
  482|       |
  483|  36.4k|        return sd_event_source_unref(s);
  484|  36.4k|}
sd_event_source_set_enabled:
 3054|  36.4k|_public_ int sd_event_source_set_enabled(sd_event_source *s, int m) {
 3055|  36.4k|        int r;
 3056|       |
 3057|  36.4k|        assert_return(IN_SET(m, SD_EVENT_OFF, SD_EVENT_ON, SD_EVENT_ONESHOT), -EINVAL);
  ------------------
  |  |   18|  36.4k|        do {                                                            \
  |  |   19|  36.4k|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|  36.4k|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|  36.4k|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (83:42): [True: 0, False: 36.4k]
  |  |  |  |  |  |  |  Branch (83:42): [True: 0, False: 36.4k]
  |  |  |  |  |  |  |  Branch (83:42): [True: 0, False: 36.4k]
  |  |  |  |  |  |  |  Branch (83:42): [True: 36.4k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 36.4k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|  36.4k|        ? (true)                                                        \
  |  |  |  |   15|  36.4k|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 36.4k]
  |  |  ------------------
  |  |   20|  36.4k|                        return (r);                                     \
  |  |   21|  36.4k|        } while (false)
  ------------------
 3058|       |
 3059|       |        /* Quick mode: if the source doesn't exist, SD_EVENT_OFF is a noop. */
 3060|  36.4k|        if (m == SD_EVENT_OFF && !s)
  ------------------
  |  Branch (3060:13): [True: 36.4k, False: 0]
  |  Branch (3060:34): [True: 36.4k, False: 0]
  ------------------
 3061|  36.4k|                return 0;
 3062|       |
 3063|      0|        assert_return(s, -EINVAL);
  ------------------
  |  |   18|      0|        do {                                                            \
  |  |   19|      0|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|      0|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|      0|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|      0|        ? (true)                                                        \
  |  |  |  |   15|      0|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 0]
  |  |  ------------------
  |  |   20|      0|                        return (r);                                     \
  |  |   21|      0|        } while (false)
  ------------------
 3064|      0|        assert_return(!event_origin_changed(s->event), -ECHILD);
  ------------------
  |  |   18|      0|        do {                                                            \
  |  |   19|      0|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|      0|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|      0|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|      0|        ? (true)                                                        \
  |  |  |  |   15|      0|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 0]
  |  |  ------------------
  |  |   20|      0|                        return (r);                                     \
  |  |   21|      0|        } while (false)
  ------------------
 3065|       |
 3066|       |        /* If we are dead anyway, we are fine with turning off sources, but everything else needs to fail. */
 3067|      0|        if (s->event->state == SD_EVENT_FINISHED)
  ------------------
  |  Branch (3067:13): [True: 0, False: 0]
  ------------------
 3068|      0|                return m == SD_EVENT_OFF ? 0 : -ESTALE;
  ------------------
  |  Branch (3068:24): [True: 0, False: 0]
  ------------------
 3069|       |
 3070|      0|        if (s->enabled == m) /* No change? */
  ------------------
  |  Branch (3070:13): [True: 0, False: 0]
  ------------------
 3071|      0|                return 0;
 3072|       |
 3073|      0|        if (m == SD_EVENT_OFF)
  ------------------
  |  Branch (3073:13): [True: 0, False: 0]
  ------------------
 3074|      0|                r = event_source_offline(s, m, s->ratelimited);
 3075|      0|        else {
 3076|      0|                if (s->enabled != SD_EVENT_OFF) {
  ------------------
  |  Branch (3076:21): [True: 0, False: 0]
  ------------------
 3077|       |                        /* Switching from "on" to "oneshot" or back? If that's the case, we can take a shortcut, the
 3078|       |                         * event source is already enabled after all. */
 3079|      0|                        s->enabled = m;
 3080|      0|                        return 0;
 3081|      0|                }
 3082|       |
 3083|      0|                r = event_source_online(s, m, s->ratelimited);
 3084|      0|        }
 3085|      0|        if (r < 0)
  ------------------
  |  Branch (3085:13): [True: 0, False: 0]
  ------------------
 3086|      0|                return r;
 3087|       |
 3088|      0|        event_source_pp_prioq_reshuffle(s);
 3089|      0|        return 0;
 3090|      0|}

id128_read_fd:
   67|     13|int id128_read_fd(int fd, Id128Flag f, sd_id128_t *ret) {
   68|     13|        char buffer[SD_ID128_UUID_STRING_MAX + 1]; /* +1 is for trailing newline */
   69|     13|        sd_id128_t id;
   70|     13|        ssize_t l;
   71|     13|        int r;
   72|       |
   73|     13|        assert(fd >= 0);
  ------------------
  |  |   72|     13|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     13|        do {                                                            \
  |  |  |  |   59|     13|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     13|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     13|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     13|        } while (false)
  |  |  ------------------
  ------------------
   74|       |
   75|       |        /* Reads an 128-bit ID from a file, which may either be in plain format (32 hex digits), or in UUID format, both
   76|       |         * optionally followed by a newline and nothing else. ID files should really be newline terminated, but if they
   77|       |         * aren't that's OK too, following the rule of "Be conservative in what you send, be liberal in what you
   78|       |         * accept".
   79|       |         *
   80|       |         * This returns the following:
   81|       |         *     -ENOMEDIUM: an empty string,
   82|       |         *     -ENOPKG:    "uninitialized" or "uninitialized\n",
   83|       |         *     -EUCLEAN:   other invalid strings. */
   84|       |
   85|     13|        l = loop_read(fd, buffer, sizeof(buffer), false); /* we expect a short read of either 32/33 or 36/37 chars */
   86|     13|        if (l < 0)
  ------------------
  |  Branch (86:13): [True: 0, False: 13]
  ------------------
   87|      0|                return (int) l;
   88|     13|        if (l == 0) /* empty? */
  ------------------
  |  Branch (88:13): [True: 12, False: 1]
  ------------------
   89|     12|                return -ENOMEDIUM;
   90|       |
   91|      1|        switch (l) {
   92|       |
   93|      0|        case STRLEN("uninitialized"):
  ------------------
  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  ------------------
  |  Branch (93:9): [True: 0, False: 1]
  ------------------
   94|      0|        case STRLEN("uninitialized\n"):
  ------------------
  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  ------------------
  |  Branch (94:9): [True: 0, False: 1]
  ------------------
   95|      0|                return strneq(buffer, "uninitialized\n", l) ? -ENOPKG : -EINVAL;
  ------------------
  |  |   47|      0|#define strneq(a, b, n) (strncmp((a), (b), (n)) == 0)
  |  |  ------------------
  |  |  |  Branch (47:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   96|       |
   97|      0|        case SD_ID128_STRING_MAX: /* plain UUID with trailing newline */
  ------------------
  |  |   35|      0|#define SD_ID128_STRING_MAX 33U
  ------------------
  |  Branch (97:9): [True: 0, False: 1]
  ------------------
   98|      0|                if (buffer[SD_ID128_STRING_MAX-1] != '\n')
  ------------------
  |  |   35|      0|#define SD_ID128_STRING_MAX 33U
  ------------------
  |  Branch (98:21): [True: 0, False: 0]
  ------------------
   99|      0|                        return -EUCLEAN;
  100|       |
  101|      0|                _fallthrough_;
  ------------------
  |  |  111|      0|#  define _fallthrough_ __attribute__((__fallthrough__))
  ------------------
  102|      0|        case SD_ID128_STRING_MAX-1: /* plain UUID without trailing newline */
  ------------------
  |  |   35|      0|#define SD_ID128_STRING_MAX 33U
  ------------------
  |  Branch (102:9): [True: 0, False: 1]
  ------------------
  103|      0|                if (!FLAGS_SET(f, ID128_FORMAT_PLAIN))
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (103:21): [True: 0, False: 0]
  ------------------
  104|      0|                        return -EUCLEAN;
  105|       |
  106|      0|                buffer[SD_ID128_STRING_MAX-1] = 0;
  ------------------
  |  |   35|      0|#define SD_ID128_STRING_MAX 33U
  ------------------
  107|      0|                break;
  108|       |
  109|      1|        case SD_ID128_UUID_STRING_MAX: /* RFC UUID with trailing newline */
  ------------------
  |  |   36|      1|#define SD_ID128_UUID_STRING_MAX 37U
  ------------------
  |  Branch (109:9): [True: 1, False: 0]
  ------------------
  110|      1|                if (buffer[SD_ID128_UUID_STRING_MAX-1] != '\n')
  ------------------
  |  |   36|      1|#define SD_ID128_UUID_STRING_MAX 37U
  ------------------
  |  Branch (110:21): [True: 0, False: 1]
  ------------------
  111|      0|                        return -EUCLEAN;
  112|       |
  113|      1|                _fallthrough_;
  ------------------
  |  |  111|      1|#  define _fallthrough_ __attribute__((__fallthrough__))
  ------------------
  114|      1|        case SD_ID128_UUID_STRING_MAX-1: /* RFC UUID without trailing newline */
  ------------------
  |  |   36|      1|#define SD_ID128_UUID_STRING_MAX 37U
  ------------------
  |  Branch (114:9): [True: 0, False: 1]
  ------------------
  115|      1|                if (!FLAGS_SET(f, ID128_FORMAT_UUID))
  ------------------
  |  |  414|      1|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (115:21): [True: 0, False: 1]
  ------------------
  116|      0|                        return -EUCLEAN;
  117|       |
  118|      1|                buffer[SD_ID128_UUID_STRING_MAX-1] = 0;
  ------------------
  |  |   36|      1|#define SD_ID128_UUID_STRING_MAX 37U
  ------------------
  119|      1|                break;
  120|       |
  121|      0|        default:
  ------------------
  |  Branch (121:9): [True: 0, False: 1]
  ------------------
  122|      0|                return -EUCLEAN;
  123|      1|        }
  124|       |
  125|      1|        r = sd_id128_from_string(buffer, &id);
  126|      1|        if (r == -EINVAL)
  ------------------
  |  Branch (126:13): [True: 0, False: 1]
  ------------------
  127|      0|                return -EUCLEAN;
  128|      1|        if (r < 0)
  ------------------
  |  Branch (128:13): [True: 0, False: 1]
  ------------------
  129|      0|                return r;
  130|       |
  131|      1|        if (FLAGS_SET(f, ID128_REFUSE_NULL) && sd_id128_is_null(id))
  ------------------
  |  |  414|      2|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (131:48): [True: 0, False: 1]
  ------------------
  132|      0|                return -ENOMEDIUM;
  133|       |
  134|      1|        if (ret)
  ------------------
  |  Branch (134:13): [True: 1, False: 0]
  ------------------
  135|      1|                *ret = id;
  136|      1|        return 0;
  137|      1|}
id128_read_at:
  139|     13|int id128_read_at(int dir_fd, const char *path, Id128Flag f, sd_id128_t *ret) {
  140|     13|        _cleanup_close_ int fd = -EBADF;
  ------------------
  |  |   60|     13|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|     13|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  141|       |
  142|     13|        assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
  ------------------
  |  |   72|     13|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     13|        do {                                                            \
  |  |  |  |   59|     13|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     26|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13]
  |  |  |  |  |  |  |  Branch (95:44): [True: 0, False: 13]
  |  |  |  |  |  |  |  Branch (95:44): [True: 13, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     13|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     13|        } while (false)
  |  |  ------------------
  ------------------
  143|     13|        assert(path);
  ------------------
  |  |   72|     13|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     13|        do {                                                            \
  |  |  |  |   59|     13|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     13|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     13|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     13|        } while (false)
  |  |  ------------------
  ------------------
  144|       |
  145|     13|        fd = xopenat(dir_fd, path, O_RDONLY|O_CLOEXEC|O_NOCTTY);
  146|     13|        if (fd < 0)
  ------------------
  |  Branch (146:13): [True: 0, False: 13]
  ------------------
  147|      0|                return fd;
  148|       |
  149|     13|        return id128_read_fd(fd, f, ret);
  150|     13|}
id128_get_product:
  222|     12|int id128_get_product(sd_id128_t *ret) {
  223|     12|        sd_id128_t uuid;
  224|     12|        int r;
  225|       |
  226|     12|        assert(ret);
  ------------------
  |  |   72|     12|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     12|        do {                                                            \
  |  |  |  |   59|     12|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     12|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 12]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     12|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     12|        } while (false)
  |  |  ------------------
  ------------------
  227|       |
  228|       |        /* Reads the systems product UUID from DMI or devicetree (where it is located on POWER). This is
  229|       |         * particularly relevant in VM environments, where VM managers typically place a VM uuid there. */
  230|       |
  231|     12|        r = detect_container();
  232|     12|        if (r < 0)
  ------------------
  |  Branch (232:13): [True: 0, False: 12]
  ------------------
  233|      0|                return r;
  234|     12|        if (r > 0) /* Refuse returning this in containers, as this is not a property of our system then, but
  ------------------
  |  Branch (234:13): [True: 12, False: 0]
  ------------------
  235|       |                    * of the host */
  236|     12|                return -ENOENT;
  237|       |
  238|      0|        FOREACH_STRING(i,
  ------------------
  |  |  183|      0|        _FOREACH_STRING(UNIQ, x, y, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  178|      0|        for (const char *x, * const*UNIQ_T(l, uniq) = STRV_MAKE_CONST(({ x = y; }), ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  156|      0|#define STRV_MAKE_CONST(...) ((const char* const*) ((const char*[]) { __VA_ARGS__, NULL }))
  |  |  |  |  ------------------
  |  |  |  |  179|      0|             x;                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (179:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  180|      0|             x = *(++UNIQ_T(l, uniq)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  239|      0|                       "/sys/class/dmi/id/product_uuid", /* KVM */
  240|      0|                       "/proc/device-tree/vm,uuid",      /* Device tree */
  241|      0|                       "/sys/hypervisor/uuid") {         /* Xen */
  242|       |
  243|      0|                r = id128_read(i, ID128_FORMAT_UUID, &uuid);
  244|      0|                if (r != -ENOENT)
  ------------------
  |  Branch (244:21): [True: 0, False: 0]
  ------------------
  245|      0|                        break;
  246|      0|        }
  247|      0|        if (r < 0)
  ------------------
  |  Branch (247:13): [True: 0, False: 0]
  ------------------
  248|      0|                return r;
  249|       |
  250|      0|        if (sd_id128_is_null(uuid) || sd_id128_is_allf(uuid))
  ------------------
  |  Branch (250:13): [True: 0, False: 0]
  |  Branch (250:39): [True: 0, False: 0]
  ------------------
  251|      0|                return -EADDRNOTAVAIL; /* Recognizable error */
  252|       |
  253|      0|        *ret = uuid;
  254|      0|        return 0;
  255|      0|}

sd-id128.c:id128_read:
   24|     13|static inline int id128_read(const char *path, Id128Flag f, sd_id128_t *ret) {
   25|     13|        return id128_read_at(AT_FDCWD, path, f, ret);
  ------------------
  |  |  308|     13|#define AT_FDCWD                -100
  ------------------
   26|     13|}

sd_id128_from_string:
   60|    106|_public_ int sd_id128_from_string(const char *s, sd_id128_t *ret) {
   61|    106|        size_t n, i;
   62|    106|        sd_id128_t t;
   63|    106|        bool is_guid = false;
   64|       |
   65|    106|        assert_return(s, -EINVAL);
  ------------------
  |  |   18|    106|        do {                                                            \
  |  |   19|    106|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|    106|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|    106|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 106, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|    106|        ? (true)                                                        \
  |  |  |  |   15|    106|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 106]
  |  |  ------------------
  |  |   20|    106|                        return (r);                                     \
  |  |   21|    106|        } while (false)
  ------------------
   66|       |
   67|    548|        for (n = 0, i = 0; n < sizeof(sd_id128_t);) {
  ------------------
  |  Branch (67:28): [True: 530, False: 18]
  ------------------
   68|    530|                int a, b;
   69|       |
   70|    530|                if (s[i] == '-') {
  ------------------
  |  Branch (70:21): [True: 24, False: 506]
  ------------------
   71|       |                        /* Is this a GUID? Then be nice, and skip over
   72|       |                         * the dashes */
   73|       |
   74|     24|                        if (i == 8)
  ------------------
  |  Branch (74:29): [True: 8, False: 16]
  ------------------
   75|      8|                                is_guid = true;
   76|     16|                        else if (IN_SET(i, 13, 18, 23)) {
  ------------------
  |  |  361|     16|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 15, False: 1]
  |  |  ------------------
  |  |  362|     16|                bool _found = false;                                    \
  |  |  363|     16|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|     16|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|     16|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|     16|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|     16|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|     16|                switch (x) {                                            \
  |  |  368|     15|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      6|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      6|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      6|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|     12|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|     15|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|     15|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 3, False: 13]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 6, False: 10]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 6, False: 10]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|     15|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|     15|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|     15|                        _found = true;                                  \
  |  |  370|     15|                        break;                                          \
  |  |  371|     18|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 1, False: 15]
  |  |  ------------------
  |  |  372|      1|                        ;                                               \
  |  |  373|     16|                }                                                       \
  |  |  374|     16|                _found;                                                 \
  |  |  375|     16|        })
  ------------------
   77|     15|                                if (!is_guid)
  ------------------
  |  Branch (77:37): [True: 1, False: 14]
  ------------------
   78|      1|                                        return -EINVAL;
   79|     15|                        } else
   80|      1|                                return -EINVAL;
   81|       |
   82|     22|                        i++;
   83|     22|                        continue;
   84|     24|                }
   85|       |
   86|    506|                a = unhexchar(s[i++]);
   87|    506|                if (a < 0)
  ------------------
  |  Branch (87:21): [True: 70, False: 436]
  ------------------
   88|     70|                        return -EINVAL;
   89|       |
   90|    436|                b = unhexchar(s[i++]);
   91|    436|                if (b < 0)
  ------------------
  |  Branch (91:21): [True: 16, False: 420]
  ------------------
   92|     16|                        return -EINVAL;
   93|       |
   94|    420|                t.bytes[n++] = (a << 4) | b;
   95|    420|        }
   96|       |
   97|     18|        if (i != (is_guid ? SD_ID128_UUID_STRING_MAX : SD_ID128_STRING_MAX) - 1)
  ------------------
  |  |   36|      3|#define SD_ID128_UUID_STRING_MAX 37U
  ------------------
                      if (i != (is_guid ? SD_ID128_UUID_STRING_MAX : SD_ID128_STRING_MAX) - 1)
  ------------------
  |  |   35|     15|#define SD_ID128_STRING_MAX 33U
  ------------------
  |  Branch (97:13): [True: 2, False: 16]
  |  Branch (97:19): [True: 3, False: 15]
  ------------------
   98|      2|                return -EINVAL;
   99|       |
  100|     16|        if (s[i] != 0)
  ------------------
  |  Branch (100:13): [True: 3, False: 13]
  ------------------
  101|      3|                return -EINVAL;
  102|       |
  103|     13|        if (ret)
  ------------------
  |  Branch (103:13): [True: 13, False: 0]
  ------------------
  104|     13|                *ret = t;
  105|     13|        return 0;
  106|     16|}
sd_id128_get_machine:
  124|     12|_public_ int sd_id128_get_machine(sd_id128_t *ret) {
  125|     12|        static thread_local sd_id128_t saved_machine_id = {};
  126|     12|        int r;
  127|       |
  128|     12|        if (sd_id128_is_null(saved_machine_id)) {
  ------------------
  |  Branch (128:13): [True: 12, False: 0]
  ------------------
  129|     12|                r = id128_read("/etc/machine-id", ID128_FORMAT_PLAIN | ID128_REFUSE_NULL, &saved_machine_id);
  130|     12|                if (r < 0)
  ------------------
  |  Branch (130:21): [True: 12, False: 0]
  ------------------
  131|     12|                        return r;
  132|     12|        }
  133|       |
  134|      0|        if (ret)
  ------------------
  |  Branch (134:13): [True: 0, False: 0]
  ------------------
  135|      0|                *ret = saved_machine_id;
  136|      0|        return 0;
  137|     12|}
id128_get_boot:
  171|      1|int id128_get_boot(sd_id128_t *ret) {
  172|      1|        int r;
  173|       |
  174|      1|        assert(ret);
  ------------------
  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      1|        } while (false)
  |  |  ------------------
  ------------------
  175|       |
  176|      1|        r = id128_read("/proc/sys/kernel/random/boot_id", ID128_FORMAT_UUID | ID128_REFUSE_NULL, ret);
  177|      1|        if (r == -ENOENT && proc_mounted() == 0)
  ------------------
  |  Branch (177:13): [True: 0, False: 1]
  |  Branch (177:29): [True: 0, False: 0]
  ------------------
  178|      0|                return -ENOSYS;
  179|       |
  180|      1|        return r;
  181|      1|}
sd_id128_get_boot:
  183|     12|_public_ int sd_id128_get_boot(sd_id128_t *ret) {
  184|     12|        static thread_local sd_id128_t saved_boot_id = {};
  185|     12|        int r;
  186|       |
  187|     12|        if (sd_id128_is_null(saved_boot_id)) {
  ------------------
  |  Branch (187:13): [True: 1, False: 11]
  ------------------
  188|      1|                r = id128_get_boot(&saved_boot_id);
  189|      1|                if (r < 0)
  ------------------
  |  Branch (189:21): [True: 0, False: 1]
  ------------------
  190|      0|                        return r;
  191|      1|        }
  192|       |
  193|     12|        if (ret)
  ------------------
  |  Branch (193:13): [True: 12, False: 0]
  ------------------
  194|     12|                *ret = saved_boot_id;
  195|     12|        return 0;
  196|     12|}

json_dispatch_user_group_name:
   87|     80|int json_dispatch_user_group_name(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) {
   88|     80|        char **s = ASSERT_PTR(userdata);
  ------------------
  |  |   81|     80|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|     80|        ({                                 \
  |  |  |  |   85|     80|                typeof(expr) var = (expr); \
  |  |  |  |   86|     80|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|     80|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|     80|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|     80|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|     80|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|     80|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 80]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|     80|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|     80|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|     80|                var;                       \
  |  |  |  |   88|     80|        })
  |  |  ------------------
  ------------------
   89|     80|        const char *n;
   90|     80|        int r;
   91|       |
   92|     80|        r = json_dispatch_const_user_group_name(name, variant, flags, &n);
   93|     80|        if (r < 0)
  ------------------
  |  Branch (93:13): [True: 0, False: 80]
  ------------------
   94|      0|                return r;
   95|       |
   96|     80|        r = free_and_strdup(s, n);
   97|     80|        if (r < 0)
  ------------------
  |  Branch (97:13): [True: 0, False: 80]
  ------------------
   98|      0|                return json_log(variant, flags, r, "Failed to allocate string: %m");
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
   99|       |
  100|     80|        return 0;
  101|     80|}
json_dispatch_const_user_group_name:
  103|     80|int json_dispatch_const_user_group_name(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) {
  104|     80|        const char **s = ASSERT_PTR(userdata), *n;
  ------------------
  |  |   81|     80|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|     80|        ({                                 \
  |  |  |  |   85|     80|                typeof(expr) var = (expr); \
  |  |  |  |   86|     80|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|     80|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|     80|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|     80|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|     80|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|     80|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 80]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|     80|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|     80|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|     80|                var;                       \
  |  |  |  |   88|     80|        })
  |  |  ------------------
  ------------------
  105|       |
  106|     80|        if (sd_json_variant_is_null(variant)) {
  ------------------
  |  Branch (106:13): [True: 0, False: 80]
  ------------------
  107|      0|                *s = NULL;
  108|      0|                return 0;
  109|      0|        }
  110|       |
  111|     80|        if (!sd_json_variant_is_string(variant))
  ------------------
  |  Branch (111:13): [True: 0, False: 80]
  ------------------
  112|      0|                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a string.", strna(name));
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
  113|       |
  114|     80|        n = sd_json_variant_string(variant);
  115|     80|        if (!valid_user_group_name(n, FLAGS_SET(flags, SD_JSON_RELAX) ? VALID_USER_RELAX : 0))
  ------------------
  |  |  414|     80|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 80, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (115:13): [True: 0, False: 80]
  ------------------
  116|      0|                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a valid user/group name.", strna(name));
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
  117|       |
  118|     80|        *s = n;
  119|     80|        return 0;
  120|     80|}

json_dispatch_user_disposition:
   51|     80|        int name(const char *n, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) { \
   52|     80|                type *c = ASSERT_PTR(userdata);                         \
   53|     80|                                                                        \
   54|     80|                assert(variant);                                        \
   55|     80|                                                                        \
   56|     80|                if (sd_json_variant_is_null(variant)) {                 \
  ------------------
  |  Branch (56:21): [True: 0, False: 80]
  ------------------
   57|      0|                        *c = (type) -EINVAL;                            \
   58|      0|                        return 0;                                       \
   59|      0|                }                                                       \
   60|     80|                                                                        \
   61|     80|                if (!sd_json_variant_is_string(variant))                \
  ------------------
  |  Branch (61:21): [True: 0, False: 80]
  ------------------
   62|     80|                        return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a string.", strna(n)); \
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
   63|     80|                                                                        \
   64|     80|                type cc = func(sd_json_variant_string(variant));        \
   65|     80|                if (cc < 0) {                                           \
  ------------------
  |  Branch (65:21): [True: 0, False: 80]
  ------------------
   66|      0|                        /* Maybe this enum is recognizable if we replace "_" (i.e. Varlink syntax) with "-" (how we usually prefer it). */ \
   67|      0|                        _cleanup_free_ char *z = strreplace(sd_json_variant_string(variant), "_", "-"); \
  ------------------
  |  |   82|      0|#define _cleanup_free_ _cleanup_(freep)
  ------------------
   68|      0|                        if (!z)                                         \
  ------------------
  |  Branch (68:29): [True: 0, False: 0]
  ------------------
   69|      0|                                return json_log_oom(variant, flags);    \
  ------------------
  |  |  109|      0|        json_log(variant, flags, SYNTHETIC_ERRNO(ENOMEM), "Out of memory.")
  |  |  ------------------
  |  |  |  |  101|      0|        ({                                                              \
  |  |  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  106|      0|        })
  |  |  ------------------
  ------------------
   70|      0|                                                                        \
   71|      0|                        cc = func(z);                                   \
   72|      0|                        if (cc < 0)                                     \
  ------------------
  |  Branch (72:29): [True: 0, False: 0]
  ------------------
   73|      0|                                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "Value of JSON field '%s' not recognized: %s", strna(n), sd_json_variant_string(variant)); \
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
   74|      0|                }                                                       \
   75|     80|                                                                        \
   76|     80|                *c = cc;                                                \
   77|     80|                return 0;                                               \
   78|     80|        }

sd_json_variant_new_unsigned:
  338|  1.37k|_public_ int sd_json_variant_new_unsigned(sd_json_variant **ret, uint64_t u) {
  339|  1.37k|        sd_json_variant *v;
  340|  1.37k|        int r;
  341|       |
  342|  1.37k|        assert_return(ret, -EINVAL);
  ------------------
  |  |   18|  1.37k|        do {                                                            \
  |  |   19|  1.37k|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|  1.37k|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|  1.37k|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 1.37k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|  1.37k|        ? (true)                                                        \
  |  |  |  |   15|  1.37k|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 1.37k]
  |  |  ------------------
  |  |   20|  1.37k|                        return (r);                                     \
  |  |   21|  1.37k|        } while (false)
  ------------------
  343|  1.37k|        if (u == 0) {
  ------------------
  |  Branch (343:13): [True: 27, False: 1.35k]
  ------------------
  344|     27|                *ret = JSON_VARIANT_MAGIC_ZERO_UNSIGNED;
  ------------------
  |  |   40|     27|#define JSON_VARIANT_MAGIC_ZERO_UNSIGNED ((sd_json_variant*) _JSON_VARIANT_MAGIC_ZERO_UNSIGNED)
  ------------------
  345|     27|                return 0;
  346|     27|        }
  347|       |
  348|  1.35k|        r = json_variant_new(&v, SD_JSON_VARIANT_UNSIGNED, sizeof(u));
  349|  1.35k|        if (r < 0)
  ------------------
  |  Branch (349:13): [True: 0, False: 1.35k]
  ------------------
  350|      0|                return r;
  351|       |
  352|  1.35k|        v->value.unsig = u;
  353|  1.35k|        *ret = v;
  354|       |
  355|  1.35k|        return 0;
  356|  1.35k|}
sd_json_variant_new_boolean:
  387|     40|_public_ int sd_json_variant_new_boolean(sd_json_variant **ret, int b) {
  388|     40|        assert_return(ret, -EINVAL);
  ------------------
  |  |   18|     40|        do {                                                            \
  |  |   19|     40|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|     40|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|     40|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 40, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|     40|        ? (true)                                                        \
  |  |  |  |   15|     40|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 40]
  |  |  ------------------
  |  |   20|     40|                        return (r);                                     \
  |  |   21|     40|        } while (false)
  ------------------
  389|       |
  390|     40|        if (b)
  ------------------
  |  Branch (390:13): [True: 40, False: 0]
  ------------------
  391|     40|                *ret = JSON_VARIANT_MAGIC_TRUE;
  ------------------
  |  |   32|     40|#define JSON_VARIANT_MAGIC_TRUE ((sd_json_variant*) _JSON_VARIANT_MAGIC_TRUE)
  ------------------
  392|      0|        else
  393|      0|                *ret = JSON_VARIANT_MAGIC_FALSE;
  ------------------
  |  |   34|      0|#define JSON_VARIANT_MAGIC_FALSE ((sd_json_variant*) _JSON_VARIANT_MAGIC_FALSE)
  ------------------
  394|       |
  395|     40|        return 0;
  396|     40|}
sd_json_variant_new_stringn:
  405|  4.92k|_public_ int sd_json_variant_new_stringn(sd_json_variant **ret, const char *s, size_t n) {
  406|  4.92k|        sd_json_variant *v;
  407|  4.92k|        int r;
  408|       |
  409|  4.92k|        assert_return(ret, -EINVAL);
  ------------------
  |  |   18|  4.92k|        do {                                                            \
  |  |   19|  4.92k|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|  4.92k|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|  4.92k|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 4.92k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|  4.92k|        ? (true)                                                        \
  |  |  |  |   15|  4.92k|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 4.92k]
  |  |  ------------------
  |  |   20|  4.92k|                        return (r);                                     \
  |  |   21|  4.92k|        } while (false)
  ------------------
  410|  4.92k|        if (!s) {
  ------------------
  |  Branch (410:13): [True: 0, False: 4.92k]
  ------------------
  411|      0|                assert_return(IN_SET(n, 0, SIZE_MAX), -EINVAL);
  ------------------
  |  |   18|      0|        do {                                                            \
  |  |   19|      0|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|      0|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|      0|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (83:42): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (83:42): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (83:42): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|      0|        ? (true)                                                        \
  |  |  |  |   15|      0|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 0]
  |  |  ------------------
  |  |   20|      0|                        return (r);                                     \
  |  |   21|      0|        } while (false)
  ------------------
  412|      0|                return sd_json_variant_new_null(ret);
  413|      0|        }
  414|  4.92k|        if (n == SIZE_MAX) /* determine length automatically */
  ------------------
  |  Branch (414:13): [True: 4.92k, False: 0]
  ------------------
  415|  4.92k|                n = strlen(s);
  416|      0|        else if (memchr(s, 0, n)) /* don't allow embedded NUL, as we can't express that in JSON */
  ------------------
  |  Branch (416:18): [True: 0, False: 0]
  ------------------
  417|      0|                return -EINVAL;
  418|  4.92k|        if (n == 0) {
  ------------------
  |  Branch (418:13): [True: 0, False: 4.92k]
  ------------------
  419|      0|                *ret = JSON_VARIANT_MAGIC_EMPTY_STRING;
  ------------------
  |  |   44|      0|#define JSON_VARIANT_MAGIC_EMPTY_STRING ((sd_json_variant*) _JSON_VARIANT_MAGIC_EMPTY_STRING)
  ------------------
  420|      0|                return 0;
  421|      0|        }
  422|       |
  423|  4.92k|        if (!utf8_is_valid_n(s, n)) /* JSON strings must be valid UTF-8 */
  ------------------
  |  Branch (423:13): [True: 0, False: 4.92k]
  ------------------
  424|      0|                return -EUCLEAN;
  425|       |
  426|  4.92k|        r = json_variant_new(&v, SD_JSON_VARIANT_STRING, n + 1);
  427|  4.92k|        if (r < 0)
  ------------------
  |  Branch (427:13): [True: 0, False: 4.92k]
  ------------------
  428|      0|                return r;
  429|       |
  430|  4.92k|        memcpy(v->string, s, n);
  431|  4.92k|        v->string[n] = 0;
  432|       |
  433|  4.92k|        *ret = v;
  434|  4.92k|        return 0;
  435|  4.92k|}
sd_json_variant_new_string:
  437|  4.92k|_public_ int sd_json_variant_new_string(sd_json_variant **ret, const char *s) {
  438|  4.92k|        return sd_json_variant_new_stringn(ret, s, SIZE_MAX);
  439|  4.92k|}
sd_json_variant_new_array_strv:
  662|    835|_public_ int sd_json_variant_new_array_strv(sd_json_variant **ret, char **l) {
  663|    835|        _cleanup_(sd_json_variant_unrefp) sd_json_variant *v = NULL;
  ------------------
  |  |   78|    835|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  664|    835|        size_t n;
  665|    835|        int r;
  666|       |
  667|    835|        assert_return(ret, -EINVAL);
  ------------------
  |  |   18|    835|        do {                                                            \
  |  |   19|    835|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|    835|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|    835|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 835, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|    835|        ? (true)                                                        \
  |  |  |  |   15|    835|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 835]
  |  |  ------------------
  |  |   20|    835|                        return (r);                                     \
  |  |   21|    835|        } while (false)
  ------------------
  668|       |
  669|    835|        n = strv_length(l);
  670|    835|        if (n == 0) {
  ------------------
  |  Branch (670:13): [True: 0, False: 835]
  ------------------
  671|      0|                *ret = JSON_VARIANT_MAGIC_EMPTY_ARRAY;
  ------------------
  |  |   46|      0|#define JSON_VARIANT_MAGIC_EMPTY_ARRAY ((sd_json_variant*) _JSON_VARIANT_MAGIC_EMPTY_ARRAY)
  ------------------
  672|      0|                return 0;
  673|      0|        }
  674|       |
  675|    835|        v = new(sd_json_variant, n + 1);
  ------------------
  |  |   17|    835|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
  676|    835|        if (!v)
  ------------------
  |  Branch (676:13): [True: 0, False: 835]
  ------------------
  677|      0|                return -ENOMEM;
  678|       |
  679|    835|        *v = (sd_json_variant) {
  680|    835|                .n_ref = 1,
  681|    835|                .type = SD_JSON_VARIANT_ARRAY,
  682|    835|                .depth = 1,
  683|    835|        };
  684|       |
  685|  2.50k|        for (v->n_elements = 0; v->n_elements < n; v->n_elements++) {
  ------------------
  |  Branch (685:33): [True: 1.67k, False: 835]
  ------------------
  686|  1.67k|                sd_json_variant *w = v + 1 + v->n_elements;
  687|  1.67k|                size_t k;
  688|       |
  689|  1.67k|                *w = (sd_json_variant) {
  690|  1.67k|                        .is_embedded = true,
  691|  1.67k|                        .parent = v,
  692|  1.67k|                        .type = SD_JSON_VARIANT_STRING,
  693|  1.67k|                };
  694|       |
  695|  1.67k|                k = strlen(l[v->n_elements]);
  696|       |
  697|  1.67k|                if (k > INLINE_STRING_MAX) {
  ------------------
  |  |  131|  1.67k|#define INLINE_STRING_MAX (sizeof(sd_json_variant) - offsetof(sd_json_variant, string) - 1U)
  ------------------
  |  Branch (697:21): [True: 835, False: 835]
  ------------------
  698|       |                        /* If string is too long, store it as reference. */
  699|       |
  700|    835|                        r = sd_json_variant_new_string(&w->reference, l[v->n_elements]);
  701|    835|                        if (r < 0)
  ------------------
  |  Branch (701:29): [True: 0, False: 835]
  ------------------
  702|      0|                                return r;
  703|       |
  704|    835|                        w->is_reference = true;
  705|    835|                } else {
  706|    835|                        if (!utf8_is_valid_n(l[v->n_elements], k)) /* JSON strings must be valid UTF-8 */
  ------------------
  |  Branch (706:29): [True: 0, False: 835]
  ------------------
  707|      0|                                return -EUCLEAN;
  708|       |
  709|    835|                        memcpy(w->string, l[v->n_elements], k+1);
  710|    835|                }
  711|  1.67k|        }
  712|       |
  713|    835|        v->normalized = true;
  714|       |
  715|    835|        *ret = TAKE_PTR(v);
  ------------------
  |  |  388|    835|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|    835|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|    835|        ({                                                       \
  |  |  |  |  |  |  381|    835|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|    835|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|    835|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|    835|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|    835|                _var_;                                           \
  |  |  |  |  |  |  386|    835|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  716|    835|        return 0;
  717|    835|}
sd_json_variant_new_object:
  719|  4.32k|_public_ int sd_json_variant_new_object(sd_json_variant **ret, sd_json_variant **array, size_t n) {
  720|  4.32k|        _cleanup_(sd_json_variant_unrefp) sd_json_variant *v = NULL;
  ------------------
  |  |   78|  4.32k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  721|  4.32k|        const char *prev = NULL;
  722|  4.32k|        bool sorted = true, normalized = true;
  723|       |
  724|  4.32k|        assert_return(ret, -EINVAL);
  ------------------
  |  |   18|  4.32k|        do {                                                            \
  |  |   19|  4.32k|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|  4.32k|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|  4.32k|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 4.32k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|  4.32k|        ? (true)                                                        \
  |  |  |  |   15|  4.32k|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 4.32k]
  |  |  ------------------
  |  |   20|  4.32k|                        return (r);                                     \
  |  |   21|  4.32k|        } while (false)
  ------------------
  725|  4.32k|        if (n == 0) {
  ------------------
  |  Branch (725:13): [True: 0, False: 4.32k]
  ------------------
  726|      0|                *ret = JSON_VARIANT_MAGIC_EMPTY_OBJECT;
  ------------------
  |  |   48|      0|#define JSON_VARIANT_MAGIC_EMPTY_OBJECT ((sd_json_variant*) _JSON_VARIANT_MAGIC_EMPTY_OBJECT)
  ------------------
  727|      0|                return 0;
  728|      0|        }
  729|  4.32k|        assert_return(array, -EINVAL);
  ------------------
  |  |   18|  4.32k|        do {                                                            \
  |  |   19|  4.32k|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|  4.32k|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|  4.32k|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 4.32k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|  4.32k|        ? (true)                                                        \
  |  |  |  |   15|  4.32k|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 4.32k]
  |  |  ------------------
  |  |   20|  4.32k|                        return (r);                                     \
  |  |   21|  4.32k|        } while (false)
  ------------------
  730|  4.32k|        assert_return(n % 2 == 0, -EINVAL);
  ------------------
  |  |   18|  4.32k|        do {                                                            \
  |  |   19|  4.32k|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|  4.32k|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|  4.32k|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 4.32k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|  4.32k|        ? (true)                                                        \
  |  |  |  |   15|  4.32k|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 4.32k]
  |  |  ------------------
  |  |   20|  4.32k|                        return (r);                                     \
  |  |   21|  4.32k|        } while (false)
  ------------------
  731|       |
  732|  4.32k|        v = new(sd_json_variant, n + 1);
  ------------------
  |  |   17|  4.32k|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
  733|  4.32k|        if (!v)
  ------------------
  |  Branch (733:13): [True: 0, False: 4.32k]
  ------------------
  734|      0|                return -ENOMEM;
  735|       |
  736|  4.32k|        *v = (sd_json_variant) {
  737|  4.32k|                .n_ref = 1,
  738|  4.32k|                .type = SD_JSON_VARIANT_OBJECT,
  739|  4.32k|        };
  740|       |
  741|  19.1k|        for (v->n_elements = 0; v->n_elements < n; v->n_elements++) {
  ------------------
  |  Branch (741:33): [True: 14.8k, False: 4.32k]
  ------------------
  742|  14.8k|                sd_json_variant *w = v + 1 + v->n_elements,
  743|  14.8k|                            *c = array[v->n_elements];
  744|  14.8k|                uint16_t d;
  745|       |
  746|  14.8k|                if ((v->n_elements & 1) == 0) {
  ------------------
  |  Branch (746:21): [True: 7.41k, False: 7.41k]
  ------------------
  747|  7.41k|                        const char *k;
  748|       |
  749|  7.41k|                        if (!sd_json_variant_is_string(c))
  ------------------
  |  Branch (749:29): [True: 0, False: 7.41k]
  ------------------
  750|      0|                                return -EINVAL; /* Every second one needs to be a string, as it is the key name */
  751|       |
  752|  7.41k|                        assert_se(k = sd_json_variant_string(c));
  ------------------
  |  |   65|  7.41k|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  7.41k|        do {                                                            \
  |  |  |  |   59|  7.41k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  7.41k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 7.41k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  7.41k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  7.41k|        } while (false)
  |  |  ------------------
  ------------------
  753|       |
  754|  7.41k|                        if (prev && strcmp(k, prev) <= 0)
  ------------------
  |  Branch (754:29): [True: 3.08k, False: 4.32k]
  |  Branch (754:37): [True: 2.26k, False: 814]
  ------------------
  755|  2.26k|                                sorted = normalized = false;
  756|       |
  757|  7.41k|                        prev = k;
  758|  7.41k|                } else if (!sd_json_variant_is_normalized(c))
  ------------------
  |  Branch (758:28): [True: 0, False: 7.41k]
  ------------------
  759|      0|                        normalized = false;
  760|       |
  761|  14.8k|                d = json_variant_depth(c);
  762|  14.8k|                if (d >= DEPTH_MAX) /* Refuse too deep nesting */
  ------------------
  |  |   48|  14.8k|#define DEPTH_MAX (2U*1024U)
  ------------------
  |  Branch (762:21): [True: 0, False: 14.8k]
  ------------------
  763|      0|                        return -ELNRNG;
  764|  14.8k|                if (d >= v->depth)
  ------------------
  |  Branch (764:21): [True: 5.99k, False: 8.82k]
  ------------------
  765|  5.99k|                        v->depth = d + 1;
  766|       |
  767|  14.8k|                *w = (sd_json_variant) {
  768|  14.8k|                        .is_embedded = true,
  769|  14.8k|                        .parent = v,
  770|  14.8k|                };
  771|       |
  772|  14.8k|                json_variant_set(w, c);
  773|  14.8k|                json_variant_copy_source(w, c);
  774|  14.8k|        }
  775|       |
  776|  4.32k|        v->normalized = normalized;
  777|  4.32k|        v->sorted = sorted;
  778|       |
  779|  4.32k|        *ret = TAKE_PTR(v);
  ------------------
  |  |  388|  4.32k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  4.32k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  4.32k|        ({                                                       \
  |  |  |  |  |  |  381|  4.32k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  4.32k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  4.32k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  4.32k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  4.32k|                _var_;                                           \
  |  |  |  |  |  |  386|  4.32k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  780|  4.32k|        return 0;
  781|  4.32k|}
sd_json_variant_ref:
  860|  10.3k|_public_ sd_json_variant *sd_json_variant_ref(sd_json_variant *v) {
  861|  10.3k|        if (!v)
  ------------------
  |  Branch (861:13): [True: 0, False: 10.3k]
  ------------------
  862|      0|                return NULL;
  863|  10.3k|        if (!json_variant_is_regular(v))
  ------------------
  |  Branch (863:13): [True: 172, False: 10.1k]
  ------------------
  864|    172|                return v;
  865|       |
  866|  10.1k|        if (v->is_embedded)
  ------------------
  |  Branch (866:13): [True: 0, False: 10.1k]
  ------------------
  867|      0|                sd_json_variant_ref(v->parent); /* ref the compounding variant instead */
  868|  10.1k|        else {
  869|  10.1k|                assert(v->n_ref > 0);
  ------------------
  |  |   72|  10.1k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  10.1k|        do {                                                            \
  |  |  |  |   59|  10.1k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  10.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 10.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  10.1k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  10.1k|        } while (false)
  |  |  ------------------
  ------------------
  870|  10.1k|                v->n_ref++;
  871|  10.1k|        }
  872|       |
  873|  10.1k|        return v;
  874|  10.3k|}
sd_json_variant_unref:
  876|  23.5k|_public_ sd_json_variant *sd_json_variant_unref(sd_json_variant *v) {
  877|  23.5k|        if (!v)
  ------------------
  |  Branch (877:13): [True: 1.71k, False: 21.8k]
  ------------------
  878|  1.71k|                return NULL;
  879|  21.8k|        if (!json_variant_is_regular(v))
  ------------------
  |  Branch (879:13): [True: 239, False: 21.6k]
  ------------------
  880|    239|                return NULL;
  881|       |
  882|  21.6k|        if (v->is_embedded)
  ------------------
  |  Branch (882:13): [True: 0, False: 21.6k]
  ------------------
  883|      0|                sd_json_variant_unref(v->parent);
  884|  21.6k|        else {
  885|  21.6k|                assert(v->n_ref > 0);
  ------------------
  |  |   72|  21.6k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  21.6k|        do {                                                            \
  |  |  |  |   59|  21.6k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  21.6k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 21.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  21.6k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  21.6k|        } while (false)
  |  |  ------------------
  ------------------
  886|  21.6k|                v->n_ref--;
  887|       |
  888|  21.6k|                if (v->n_ref == 0) {
  ------------------
  |  Branch (888:21): [True: 11.4k, False: 10.1k]
  ------------------
  889|  11.4k|                        json_variant_free_inner(v, false);
  890|  11.4k|                        free(v);
  891|  11.4k|                }
  892|  21.6k|        }
  893|       |
  894|  21.6k|        return NULL;
  895|  21.8k|}
sd_json_variant_unref_many:
  897|  5.31k|_public_ void sd_json_variant_unref_many(sd_json_variant **array, size_t n) {
  898|  5.31k|        FOREACH_ARRAY(v, array, n)
  ------------------
  |  |  463|  5.31k|        _FOREACH_ARRAY(i, array, num, UNIQ_T(m, UNIQ), UNIQ_T(end, UNIQ))
  |  |  ------------------
  |  |  |  |  457|  5.31k|        for (typeof(array[0]) *i = (array), *end = ({                   \
  |  |  |  |  458|  5.31k|                                typeof(num) m = (num);                  \
  |  |  |  |  459|  5.31k|                                (i && m > 0) ? i + m : NULL;            \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (459:34): [True: 5.31k, False: 0]
  |  |  |  |  |  Branch (459:39): [True: 5.31k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  460|  14.4k|                        }); end && i < end; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (460:29): [True: 14.4k, False: 0]
  |  |  |  |  |  Branch (460:36): [True: 9.12k, False: 5.31k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  899|  9.12k|                sd_json_variant_unref(*v);
  900|       |
  901|  5.31k|        free(array);
  902|  5.31k|}
sd_json_variant_string:
  904|  43.9k|_public_ const char* sd_json_variant_string(sd_json_variant *v) {
  905|  43.9k|        if (!v)
  ------------------
  |  Branch (905:13): [True: 0, False: 43.9k]
  ------------------
  906|      0|                return NULL;
  907|  43.9k|        if (v == JSON_VARIANT_MAGIC_EMPTY_STRING)
  ------------------
  |  |   44|  43.9k|#define JSON_VARIANT_MAGIC_EMPTY_STRING ((sd_json_variant*) _JSON_VARIANT_MAGIC_EMPTY_STRING)
  ------------------
  |  Branch (907:13): [True: 0, False: 43.9k]
  ------------------
  908|      0|                return "";
  909|  43.9k|        if (json_variant_is_magic(v))
  ------------------
  |  Branch (909:13): [True: 0, False: 43.9k]
  ------------------
  910|      0|                goto mismatch;
  911|  43.9k|        if (json_variant_is_const_string(v)) {
  ------------------
  |  Branch (911:13): [True: 218, False: 43.7k]
  ------------------
  912|    218|                uintptr_t p = (uintptr_t) v;
  913|       |
  914|    218|                assert((p & 1) != 0);
  ------------------
  |  |   72|    218|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    218|        do {                                                            \
  |  |  |  |   59|    218|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    218|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 218]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    218|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    218|        } while (false)
  |  |  ------------------
  ------------------
  915|    218|                return (const char*) (p ^ 1U);
  916|    218|        }
  917|       |
  918|  43.7k|        if (v->is_reference)
  ------------------
  |  Branch (918:13): [True: 0, False: 43.7k]
  ------------------
  919|      0|                return sd_json_variant_string(v->reference);
  920|  43.7k|        if (v->type != SD_JSON_VARIANT_STRING)
  ------------------
  |  Branch (920:13): [True: 0, False: 43.7k]
  ------------------
  921|      0|                goto mismatch;
  922|       |
  923|  43.7k|        return v->string;
  924|       |
  925|      0|mismatch:
  926|      0|        log_debug("Non-string JSON variant requested as string, returning NULL.");
  ------------------
  |  |  220|      0|#define log_debug(...)     log_full(LOG_DEBUG,   __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
  927|      0|        return NULL;
  928|  43.7k|}
sd_json_variant_boolean:
  930|    120|_public_ int sd_json_variant_boolean(sd_json_variant *v) {
  931|    120|        if (!v)
  ------------------
  |  Branch (931:13): [True: 0, False: 120]
  ------------------
  932|      0|                goto mismatch;
  933|    120|        if (v == JSON_VARIANT_MAGIC_TRUE)
  ------------------
  |  |   32|    120|#define JSON_VARIANT_MAGIC_TRUE ((sd_json_variant*) _JSON_VARIANT_MAGIC_TRUE)
  ------------------
  |  Branch (933:13): [True: 80, False: 40]
  ------------------
  934|     80|                return true;
  935|     40|        if (v == JSON_VARIANT_MAGIC_FALSE)
  ------------------
  |  |   34|     40|#define JSON_VARIANT_MAGIC_FALSE ((sd_json_variant*) _JSON_VARIANT_MAGIC_FALSE)
  ------------------
  |  Branch (935:13): [True: 0, False: 40]
  ------------------
  936|      0|                return false;
  937|     40|        if (!json_variant_is_regular(v))
  ------------------
  |  Branch (937:13): [True: 0, False: 40]
  ------------------
  938|      0|                goto mismatch;
  939|     40|        if (v->type != SD_JSON_VARIANT_BOOLEAN)
  ------------------
  |  Branch (939:13): [True: 0, False: 40]
  ------------------
  940|      0|                goto mismatch;
  941|     40|        if (v->is_reference)
  ------------------
  |  Branch (941:13): [True: 0, False: 40]
  ------------------
  942|      0|                return sd_json_variant_boolean(v->reference);
  943|       |
  944|     40|        return v->value.boolean;
  945|       |
  946|      0|mismatch:
  947|      0|        log_debug("Non-boolean JSON variant requested as boolean, returning false.");
  ------------------
  |  |  220|      0|#define log_debug(...)     log_full(LOG_DEBUG,   __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
  948|      0|        return false;
  949|     40|}
sd_json_variant_unsigned:
  996|  6.18k|_public_ uint64_t sd_json_variant_unsigned(sd_json_variant *v) {
  997|  6.18k|        if (!v)
  ------------------
  |  Branch (997:13): [True: 0, False: 6.18k]
  ------------------
  998|      0|                goto mismatch;
  999|  6.18k|        if (v == JSON_VARIANT_MAGIC_ZERO_INTEGER ||
  ------------------
  |  |   38|  12.3k|#define JSON_VARIANT_MAGIC_ZERO_INTEGER ((sd_json_variant*) _JSON_VARIANT_MAGIC_ZERO_INTEGER)
  ------------------
  |  Branch (999:13): [True: 0, False: 6.18k]
  ------------------
 1000|  6.18k|            v == JSON_VARIANT_MAGIC_ZERO_UNSIGNED ||
  ------------------
  |  |   40|  12.3k|#define JSON_VARIANT_MAGIC_ZERO_UNSIGNED ((sd_json_variant*) _JSON_VARIANT_MAGIC_ZERO_UNSIGNED)
  ------------------
  |  Branch (1000:13): [True: 47, False: 6.13k]
  ------------------
 1001|  6.18k|            v == JSON_VARIANT_MAGIC_ZERO_REAL)
  ------------------
  |  |   42|  6.13k|#define JSON_VARIANT_MAGIC_ZERO_REAL ((sd_json_variant*) _JSON_VARIANT_MAGIC_ZERO_REAL)
  ------------------
  |  Branch (1001:13): [True: 0, False: 6.13k]
  ------------------
 1002|     47|                return 0;
 1003|  6.13k|        if (!json_variant_is_regular(v))
  ------------------
  |  Branch (1003:13): [True: 0, False: 6.13k]
  ------------------
 1004|      0|                goto mismatch;
 1005|  6.13k|        if (v->is_reference)
  ------------------
  |  Branch (1005:13): [True: 0, False: 6.13k]
  ------------------
 1006|      0|                return sd_json_variant_integer(v->reference);
 1007|       |
 1008|  6.13k|        switch (v->type) {
 1009|       |
 1010|      0|        case SD_JSON_VARIANT_INTEGER:
  ------------------
  |  Branch (1010:9): [True: 0, False: 6.13k]
  ------------------
 1011|      0|                if (v->value.integer >= 0)
  ------------------
  |  Branch (1011:21): [True: 0, False: 0]
  ------------------
 1012|      0|                        return (uint64_t) v->value.integer;
 1013|       |
 1014|      0|                log_debug("Signed integer %" PRIi64 " requested as unsigned integer and out of range, returning 0.", v->value.integer);
  ------------------
  |  |  220|      0|#define log_debug(...)     log_full(LOG_DEBUG,   __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
 1015|      0|                return 0;
 1016|       |
 1017|  6.13k|        case SD_JSON_VARIANT_UNSIGNED:
  ------------------
  |  Branch (1017:9): [True: 6.13k, False: 0]
  ------------------
 1018|  6.13k|                return v->value.unsig;
 1019|       |
 1020|      0|        case SD_JSON_VARIANT_REAL: {
  ------------------
  |  Branch (1020:9): [True: 0, False: 6.13k]
  ------------------
 1021|      0|                uint64_t converted;
 1022|       |
 1023|      0|                converted = (uint64_t) v->value.real;
 1024|       |
 1025|      0|                if (fp_equal((double) converted, v->value.real))
  ------------------
  |  |   14|      0|#define fp_equal(x, y) iszero_safe((x) - (y))
  |  |  ------------------
  |  |  |  |   10|      0|#define iszero_safe(x) (fpclassify(x) == FP_ZERO)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (10:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1026|      0|                        return converted;
 1027|       |
 1028|      0|                log_debug("Real %g requested as unsigned integer, and cannot be converted losslessly, returning 0.", v->value.real);
  ------------------
  |  |  220|      0|#define log_debug(...)     log_full(LOG_DEBUG,   __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
 1029|      0|                return 0;
 1030|      0|        }
 1031|       |
 1032|      0|        default:
  ------------------
  |  Branch (1032:9): [True: 0, False: 6.13k]
  ------------------
 1033|      0|                ;
 1034|  6.13k|        }
 1035|       |
 1036|      0|mismatch:
 1037|      0|        log_debug("Non-integer JSON variant requested as unsigned, returning 0.");
  ------------------
  |  |  220|      0|#define log_debug(...)     log_full(LOG_DEBUG,   __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
 1038|      0|        return 0;
 1039|  6.13k|}
sd_json_variant_is_blank_object:
 1123|  3.34k|_public_ int sd_json_variant_is_blank_object(sd_json_variant *v) {
 1124|       |        /* Returns true if the specified object is null or empty */
 1125|  3.34k|        return !v ||
  ------------------
  |  Branch (1125:16): [True: 0, False: 3.34k]
  ------------------
 1126|  3.34k|                sd_json_variant_is_null(v) ||
  ------------------
  |  Branch (1126:17): [True: 0, False: 3.34k]
  ------------------
 1127|  3.34k|                (sd_json_variant_is_object(v) && sd_json_variant_elements(v) == 0);
  ------------------
  |  Branch (1127:18): [True: 3.34k, False: 0]
  |  Branch (1127:50): [True: 0, False: 3.34k]
  ------------------
 1128|  3.34k|}
sd_json_variant_type:
 1136|  85.2k|_public_ sd_json_variant_type_t sd_json_variant_type(sd_json_variant *v) {
 1137|       |
 1138|  85.2k|        if (!v)
  ------------------
  |  Branch (1138:13): [True: 0, False: 85.2k]
  ------------------
 1139|      0|                return _SD_JSON_VARIANT_TYPE_INVALID;
 1140|       |
 1141|  85.2k|        if (json_variant_is_const_string(v))
  ------------------
  |  Branch (1141:13): [True: 688, False: 84.5k]
  ------------------
 1142|    688|                return SD_JSON_VARIANT_STRING;
 1143|       |
 1144|  84.5k|        if (v == JSON_VARIANT_MAGIC_TRUE || v == JSON_VARIANT_MAGIC_FALSE)
  ------------------
  |  |   32|   169k|#define JSON_VARIANT_MAGIC_TRUE ((sd_json_variant*) _JSON_VARIANT_MAGIC_TRUE)
  ------------------
                      if (v == JSON_VARIANT_MAGIC_TRUE || v == JSON_VARIANT_MAGIC_FALSE)
  ------------------
  |  |   34|  84.2k|#define JSON_VARIANT_MAGIC_FALSE ((sd_json_variant*) _JSON_VARIANT_MAGIC_FALSE)
  ------------------
  |  Branch (1144:13): [True: 280, False: 84.2k]
  |  Branch (1144:45): [True: 0, False: 84.2k]
  ------------------
 1145|    280|                return SD_JSON_VARIANT_BOOLEAN;
 1146|       |
 1147|  84.2k|        if (v == JSON_VARIANT_MAGIC_NULL)
  ------------------
  |  |   36|  84.2k|#define JSON_VARIANT_MAGIC_NULL ((sd_json_variant*) _JSON_VARIANT_MAGIC_NULL)
  ------------------
  |  Branch (1147:13): [True: 0, False: 84.2k]
  ------------------
 1148|      0|                return SD_JSON_VARIANT_NULL;
 1149|       |
 1150|  84.2k|        if (v == JSON_VARIANT_MAGIC_ZERO_INTEGER)
  ------------------
  |  |   38|  84.2k|#define JSON_VARIANT_MAGIC_ZERO_INTEGER ((sd_json_variant*) _JSON_VARIANT_MAGIC_ZERO_INTEGER)
  ------------------
  |  Branch (1150:13): [True: 0, False: 84.2k]
  ------------------
 1151|      0|                return SD_JSON_VARIANT_INTEGER;
 1152|       |
 1153|  84.2k|        if (v == JSON_VARIANT_MAGIC_ZERO_UNSIGNED)
  ------------------
  |  |   40|  84.2k|#define JSON_VARIANT_MAGIC_ZERO_UNSIGNED ((sd_json_variant*) _JSON_VARIANT_MAGIC_ZERO_UNSIGNED)
  ------------------
  |  Branch (1153:13): [True: 235, False: 84.0k]
  ------------------
 1154|    235|                return SD_JSON_VARIANT_UNSIGNED;
 1155|       |
 1156|  84.0k|        if (v == JSON_VARIANT_MAGIC_ZERO_REAL)
  ------------------
  |  |   42|  84.0k|#define JSON_VARIANT_MAGIC_ZERO_REAL ((sd_json_variant*) _JSON_VARIANT_MAGIC_ZERO_REAL)
  ------------------
  |  Branch (1156:13): [True: 0, False: 84.0k]
  ------------------
 1157|      0|                return SD_JSON_VARIANT_REAL;
 1158|       |
 1159|  84.0k|        if (v == JSON_VARIANT_MAGIC_EMPTY_STRING)
  ------------------
  |  |   44|  84.0k|#define JSON_VARIANT_MAGIC_EMPTY_STRING ((sd_json_variant*) _JSON_VARIANT_MAGIC_EMPTY_STRING)
  ------------------
  |  Branch (1159:13): [True: 0, False: 84.0k]
  ------------------
 1160|      0|                return SD_JSON_VARIANT_STRING;
 1161|       |
 1162|  84.0k|        if (v == JSON_VARIANT_MAGIC_EMPTY_ARRAY)
  ------------------
  |  |   46|  84.0k|#define JSON_VARIANT_MAGIC_EMPTY_ARRAY ((sd_json_variant*) _JSON_VARIANT_MAGIC_EMPTY_ARRAY)
  ------------------
  |  Branch (1162:13): [True: 0, False: 84.0k]
  ------------------
 1163|      0|                return SD_JSON_VARIANT_ARRAY;
 1164|       |
 1165|  84.0k|        if (v == JSON_VARIANT_MAGIC_EMPTY_OBJECT)
  ------------------
  |  |   48|  84.0k|#define JSON_VARIANT_MAGIC_EMPTY_OBJECT ((sd_json_variant*) _JSON_VARIANT_MAGIC_EMPTY_OBJECT)
  ------------------
  |  Branch (1165:13): [True: 0, False: 84.0k]
  ------------------
 1166|      0|                return SD_JSON_VARIANT_OBJECT;
 1167|       |
 1168|  84.0k|        return v->type;
 1169|  84.0k|}
sd_json_variant_has_type:
 1172|  51.1k|_public_ int sd_json_variant_has_type(sd_json_variant *v, sd_json_variant_type_t type) {
 1173|  51.1k|        sd_json_variant_type_t rt;
 1174|       |
 1175|       |        /* Note: we turn off ubsan float cast overflow detection for this function, since it would complain
 1176|       |         * about our float casts but we do them explicitly to detect conversion errors. */
 1177|       |
 1178|  51.1k|        v = json_variant_dereference(v);
 1179|  51.1k|        if (!v)
  ------------------
  |  Branch (1179:13): [True: 0, False: 51.1k]
  ------------------
 1180|      0|                return false;
 1181|       |
 1182|  51.1k|        rt = sd_json_variant_type(v);
 1183|  51.1k|        if (rt == type)
  ------------------
  |  Branch (1183:13): [True: 23.1k, False: 27.9k]
  ------------------
 1184|  23.1k|                return true;
 1185|       |
 1186|       |        /* If it's a const string, then it only can be a string, and if it is not, it's not */
 1187|  27.9k|        if (json_variant_is_const_string(v))
  ------------------
  |  Branch (1187:13): [True: 424, False: 27.5k]
  ------------------
 1188|    424|                return false;
 1189|       |
 1190|       |        /* All three magic zeroes qualify as integer, unsigned and as real */
 1191|  27.5k|        if ((v == JSON_VARIANT_MAGIC_ZERO_INTEGER || v == JSON_VARIANT_MAGIC_ZERO_UNSIGNED || v == JSON_VARIANT_MAGIC_ZERO_REAL) &&
  ------------------
  |  |   38|  55.1k|#define JSON_VARIANT_MAGIC_ZERO_INTEGER ((sd_json_variant*) _JSON_VARIANT_MAGIC_ZERO_INTEGER)
  ------------------
                      if ((v == JSON_VARIANT_MAGIC_ZERO_INTEGER || v == JSON_VARIANT_MAGIC_ZERO_UNSIGNED || v == JSON_VARIANT_MAGIC_ZERO_REAL) &&
  ------------------
  |  |   40|  55.1k|#define JSON_VARIANT_MAGIC_ZERO_UNSIGNED ((sd_json_variant*) _JSON_VARIANT_MAGIC_ZERO_UNSIGNED)
  ------------------
                      if ((v == JSON_VARIANT_MAGIC_ZERO_INTEGER || v == JSON_VARIANT_MAGIC_ZERO_UNSIGNED || v == JSON_VARIANT_MAGIC_ZERO_REAL) &&
  ------------------
  |  |   42|  27.3k|#define JSON_VARIANT_MAGIC_ZERO_REAL ((sd_json_variant*) _JSON_VARIANT_MAGIC_ZERO_REAL)
  ------------------
  |  Branch (1191:14): [True: 0, False: 27.5k]
  |  Branch (1191:54): [True: 188, False: 27.3k]
  |  Branch (1191:95): [True: 0, False: 27.3k]
  ------------------
 1192|  27.5k|            IN_SET(type, SD_JSON_VARIANT_INTEGER, SD_JSON_VARIANT_UNSIGNED, SD_JSON_VARIANT_REAL, SD_JSON_VARIANT_NUMBER))
  ------------------
  |  |  361|    188|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 94, False: 94]
  |  |  ------------------
  |  |  362|    188|                bool _found = false;                                    \
  |  |  363|    188|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|    188|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|    188|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|    188|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|    188|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|    188|                switch (x) {                                            \
  |  |  368|     94|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|     47|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|     47|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|     47|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  336|     47|#define  CASE_F_4(X, ...) case X:  CASE_F_3( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  335|     94|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  334|     94|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|     94|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 188]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 47, False: 141]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 188]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (336:27): [True: 47, False: 141]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|     94|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|     94|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|     94|                        _found = true;                                  \
  |  |  370|     94|                        break;                                          \
  |  |  371|    188|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 94, False: 94]
  |  |  ------------------
  |  |  372|     94|                        ;                                               \
  |  |  373|    188|                }                                                       \
  |  |  374|    188|                _found;                                                 \
  |  |  375|    188|        })
  ------------------
 1193|     94|                return true;
 1194|       |
 1195|       |        /* All other magic variant types are only equal to themselves */
 1196|  27.4k|        if (json_variant_is_magic(v))
  ------------------
  |  Branch (1196:13): [True: 254, False: 27.2k]
  ------------------
 1197|    254|                return false;
 1198|       |
 1199|       |        /* Handle the "number" pseudo type */
 1200|  27.2k|        if (type == SD_JSON_VARIANT_NUMBER)
  ------------------
  |  Branch (1200:13): [True: 0, False: 27.2k]
  ------------------
 1201|  27.2k|                return IN_SET(rt, SD_JSON_VARIANT_INTEGER, SD_JSON_VARIANT_UNSIGNED, SD_JSON_VARIANT_REAL);
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
 1202|       |
 1203|       |        /* Integer conversions are OK in many cases */
 1204|  27.2k|        if (rt == SD_JSON_VARIANT_INTEGER && type == SD_JSON_VARIANT_UNSIGNED)
  ------------------
  |  Branch (1204:13): [True: 0, False: 27.2k]
  |  Branch (1204:46): [True: 0, False: 0]
  ------------------
 1205|      0|                return v->value.integer >= 0;
 1206|  27.2k|        if (rt == SD_JSON_VARIANT_UNSIGNED && type == SD_JSON_VARIANT_INTEGER)
  ------------------
  |  Branch (1206:13): [True: 14.5k, False: 12.6k]
  |  Branch (1206:47): [True: 3.61k, False: 10.9k]
  ------------------
 1207|  3.61k|                return v->value.unsig <= INT64_MAX;
 1208|       |
 1209|       |        /* Any integer that can be converted lossley to a real and back may also be considered a real */
 1210|  23.6k|        if (rt == SD_JSON_VARIANT_INTEGER && type == SD_JSON_VARIANT_REAL)
  ------------------
  |  Branch (1210:13): [True: 0, False: 23.6k]
  |  Branch (1210:46): [True: 0, False: 0]
  ------------------
 1211|      0|                return (int64_t) (double) v->value.integer == v->value.integer;
 1212|  23.6k|        if (rt == SD_JSON_VARIANT_UNSIGNED && type == SD_JSON_VARIANT_REAL)
  ------------------
  |  Branch (1212:13): [True: 10.9k, False: 12.6k]
  |  Branch (1212:47): [True: 3.61k, False: 7.34k]
  ------------------
 1213|  3.61k|                return (uint64_t) (double) v->value.unsig == v->value.unsig;
 1214|       |
 1215|       |        /* Any real that can be converted losslessly to an integer and back may also be considered an integer */
 1216|  19.9k|        if (rt == SD_JSON_VARIANT_REAL && type == SD_JSON_VARIANT_INTEGER)
  ------------------
  |  Branch (1216:13): [True: 0, False: 19.9k]
  |  Branch (1216:43): [True: 0, False: 0]
  ------------------
 1217|      0|                return fp_equal((double) (int64_t) v->value.real, v->value.real);
  ------------------
  |  |   14|      0|#define fp_equal(x, y) iszero_safe((x) - (y))
  |  |  ------------------
  |  |  |  |   10|      0|#define iszero_safe(x) (fpclassify(x) == FP_ZERO)
  |  |  ------------------
  ------------------
 1218|  19.9k|        if (rt == SD_JSON_VARIANT_REAL && type == SD_JSON_VARIANT_UNSIGNED)
  ------------------
  |  Branch (1218:13): [True: 0, False: 19.9k]
  |  Branch (1218:43): [True: 0, False: 0]
  ------------------
 1219|      0|                return fp_equal((double) (uint64_t) v->value.real, v->value.real);
  ------------------
  |  |   14|      0|#define fp_equal(x, y) iszero_safe((x) - (y))
  |  |  ------------------
  |  |  |  |   10|      0|#define iszero_safe(x) (fpclassify(x) == FP_ZERO)
  |  |  ------------------
  ------------------
 1220|       |
 1221|  19.9k|        return false;
 1222|  19.9k|}
sd_json_variant_is_string:
 1224|  10.1k|_public_ int sd_json_variant_is_string(sd_json_variant *v) {
 1225|  10.1k|        return sd_json_variant_has_type(v, SD_JSON_VARIANT_STRING);
 1226|  10.1k|}
sd_json_variant_is_integer:
 1228|  3.66k|_public_ int sd_json_variant_is_integer(sd_json_variant *v) {
 1229|  3.66k|        return sd_json_variant_has_type(v, SD_JSON_VARIANT_INTEGER);
 1230|  3.66k|}
sd_json_variant_is_unsigned:
 1232|    120|_public_ int sd_json_variant_is_unsigned(sd_json_variant *v) {
 1233|    120|        return sd_json_variant_has_type(v, SD_JSON_VARIANT_UNSIGNED);
 1234|    120|}
sd_json_variant_is_real:
 1236|  7.41k|_public_ int sd_json_variant_is_real(sd_json_variant *v) {
 1237|  7.41k|        return sd_json_variant_has_type(v, SD_JSON_VARIANT_REAL);
 1238|  7.41k|}
sd_json_variant_is_boolean:
 1244|     40|_public_ int sd_json_variant_is_boolean(sd_json_variant *v) {
 1245|     40|        return sd_json_variant_has_type(v, SD_JSON_VARIANT_BOOLEAN);
 1246|     40|}
sd_json_variant_is_array:
 1248|  7.41k|_public_ int sd_json_variant_is_array(sd_json_variant *v) {
 1249|  7.41k|        return sd_json_variant_has_type(v, SD_JSON_VARIANT_ARRAY);
 1250|  7.41k|}
sd_json_variant_is_object:
 1252|  14.2k|_public_ int sd_json_variant_is_object(sd_json_variant *v) {
 1253|  14.2k|        return sd_json_variant_has_type(v, SD_JSON_VARIANT_OBJECT);
 1254|  14.2k|}
sd_json_variant_is_null:
 1256|  3.77k|_public_ int sd_json_variant_is_null(sd_json_variant *v) {
 1257|  3.77k|        return sd_json_variant_has_type(v, SD_JSON_VARIANT_NULL);
 1258|  3.77k|}
sd_json_variant_elements:
 1260|  14.3k|_public_ size_t sd_json_variant_elements(sd_json_variant *v) {
 1261|  14.3k|        if (!v)
  ------------------
  |  Branch (1261:13): [True: 0, False: 14.3k]
  ------------------
 1262|      0|                return 0;
 1263|  14.3k|        if (v == JSON_VARIANT_MAGIC_EMPTY_ARRAY ||
  ------------------
  |  |   46|  28.7k|#define JSON_VARIANT_MAGIC_EMPTY_ARRAY ((sd_json_variant*) _JSON_VARIANT_MAGIC_EMPTY_ARRAY)
  ------------------
  |  Branch (1263:13): [True: 0, False: 14.3k]
  ------------------
 1264|  14.3k|            v == JSON_VARIANT_MAGIC_EMPTY_OBJECT)
  ------------------
  |  |   48|  14.3k|#define JSON_VARIANT_MAGIC_EMPTY_OBJECT ((sd_json_variant*) _JSON_VARIANT_MAGIC_EMPTY_OBJECT)
  ------------------
  |  Branch (1264:13): [True: 0, False: 14.3k]
  ------------------
 1265|      0|                return 0;
 1266|  14.3k|        if (!json_variant_is_regular(v))
  ------------------
  |  Branch (1266:13): [True: 0, False: 14.3k]
  ------------------
 1267|      0|                goto mismatch;
 1268|  14.3k|        if (!IN_SET(v->type, SD_JSON_VARIANT_ARRAY, SD_JSON_VARIANT_OBJECT))
  ------------------
  |  |  361|  14.3k|        ({                                                              \
  |  |  362|  14.3k|                bool _found = false;                                    \
  |  |  363|  14.3k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  14.3k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  14.3k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  14.3k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  14.3k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  14.3k|                switch (x) {                                            \
  |  |  368|  14.3k|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|  4.17k|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|  4.17k|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|  4.17k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|  14.3k|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|  14.3k|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 10.1k, False: 4.17k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 4.17k, False: 10.1k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|  14.3k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|  14.3k|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|  14.3k|                        _found = true;                                  \
  |  |  370|  14.3k|                        break;                                          \
  |  |  371|  4.17k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 14.3k]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|  14.3k|                }                                                       \
  |  |  374|  14.3k|                _found;                                                 \
  |  |  375|  14.3k|        })
  ------------------
  |  Branch (1268:13): [True: 0, False: 14.3k]
  ------------------
 1269|      0|                goto mismatch;
 1270|  14.3k|        if (v->is_reference)
  ------------------
  |  Branch (1270:13): [True: 0, False: 14.3k]
  ------------------
 1271|      0|                return sd_json_variant_elements(v->reference);
 1272|       |
 1273|  14.3k|        return v->n_elements;
 1274|       |
 1275|      0|mismatch:
 1276|      0|        log_debug("Number of elements in non-array/non-object JSON variant requested, returning 0.");
  ------------------
  |  |  220|      0|#define log_debug(...)     log_full(LOG_DEBUG,   __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
 1277|      0|        return 0;
 1278|  14.3k|}
sd_json_variant_by_index:
 1280|  9.29k|_public_ sd_json_variant *sd_json_variant_by_index(sd_json_variant *v, size_t idx) {
 1281|  9.29k|        if (!v)
  ------------------
  |  Branch (1281:13): [True: 0, False: 9.29k]
  ------------------
 1282|      0|                return NULL;
 1283|  9.29k|        if (v == JSON_VARIANT_MAGIC_EMPTY_ARRAY ||
  ------------------
  |  |   46|  18.5k|#define JSON_VARIANT_MAGIC_EMPTY_ARRAY ((sd_json_variant*) _JSON_VARIANT_MAGIC_EMPTY_ARRAY)
  ------------------
  |  Branch (1283:13): [True: 0, False: 9.29k]
  ------------------
 1284|  9.29k|            v == JSON_VARIANT_MAGIC_EMPTY_OBJECT)
  ------------------
  |  |   48|  9.29k|#define JSON_VARIANT_MAGIC_EMPTY_OBJECT ((sd_json_variant*) _JSON_VARIANT_MAGIC_EMPTY_OBJECT)
  ------------------
  |  Branch (1284:13): [True: 0, False: 9.29k]
  ------------------
 1285|      0|                return NULL;
 1286|  9.29k|        if (!json_variant_is_regular(v))
  ------------------
  |  Branch (1286:13): [True: 0, False: 9.29k]
  ------------------
 1287|      0|                goto mismatch;
 1288|  9.29k|        if (!IN_SET(v->type, SD_JSON_VARIANT_ARRAY, SD_JSON_VARIANT_OBJECT))
  ------------------
  |  |  361|  9.29k|        ({                                                              \
  |  |  362|  9.29k|                bool _found = false;                                    \
  |  |  363|  9.29k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  9.29k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  9.29k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  9.29k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  9.29k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  9.29k|                switch (x) {                                            \
  |  |  368|  9.29k|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|  9.29k|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|  9.29k|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 9.29k, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 9.29k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|  9.29k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|  9.29k|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|  9.29k|                        _found = true;                                  \
  |  |  370|  9.29k|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 9.29k]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|  9.29k|                }                                                       \
  |  |  374|  9.29k|                _found;                                                 \
  |  |  375|  9.29k|        })
  ------------------
  |  Branch (1288:13): [True: 0, False: 9.29k]
  ------------------
 1289|      0|                goto mismatch;
 1290|  9.29k|        if (v->is_reference)
  ------------------
  |  Branch (1290:13): [True: 0, False: 9.29k]
  ------------------
 1291|      0|                return sd_json_variant_by_index(v->reference, idx);
 1292|  9.29k|        if (idx >= v->n_elements)
  ------------------
  |  Branch (1292:13): [True: 0, False: 9.29k]
  ------------------
 1293|      0|                return NULL;
 1294|       |
 1295|  9.29k|        return json_variant_conservative_formalize(v + 1 + idx);
 1296|       |
 1297|      0|mismatch:
 1298|      0|        log_debug("Element in non-array/non-object JSON variant requested by index, returning NULL.");
  ------------------
  |  |  220|      0|#define log_debug(...)     log_full(LOG_DEBUG,   __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
 1299|      0|        return NULL;
 1300|  9.29k|}
sd_json_variant_by_key_full:
 1302|  3.22k|_public_ sd_json_variant *sd_json_variant_by_key_full(sd_json_variant *v, const char *key, sd_json_variant **ret_key) {
 1303|  3.22k|        if (!v)
  ------------------
  |  Branch (1303:13): [True: 0, False: 3.22k]
  ------------------
 1304|      0|                goto not_found;
 1305|  3.22k|        if (!key)
  ------------------
  |  Branch (1305:13): [True: 0, False: 3.22k]
  ------------------
 1306|      0|                goto not_found;
 1307|  3.22k|        if (v == JSON_VARIANT_MAGIC_EMPTY_OBJECT)
  ------------------
  |  |   48|  3.22k|#define JSON_VARIANT_MAGIC_EMPTY_OBJECT ((sd_json_variant*) _JSON_VARIANT_MAGIC_EMPTY_OBJECT)
  ------------------
  |  Branch (1307:13): [True: 0, False: 3.22k]
  ------------------
 1308|      0|                goto not_found;
 1309|  3.22k|        if (!json_variant_is_regular(v))
  ------------------
  |  Branch (1309:13): [True: 0, False: 3.22k]
  ------------------
 1310|      0|                goto mismatch;
 1311|  3.22k|        if (v->type != SD_JSON_VARIANT_OBJECT)
  ------------------
  |  Branch (1311:13): [True: 0, False: 3.22k]
  ------------------
 1312|      0|                goto mismatch;
 1313|  3.22k|        if (v->is_reference)
  ------------------
  |  Branch (1313:13): [True: 0, False: 3.22k]
  ------------------
 1314|      0|                return sd_json_variant_by_key(v->reference, key);
 1315|       |
 1316|  3.22k|        if (v->sorted) {
  ------------------
  |  Branch (1316:13): [True: 2.50k, False: 720]
  ------------------
 1317|  2.50k|                size_t a = 0, b = v->n_elements/2;
 1318|       |
 1319|       |                /* If the variant is sorted we can use bisection to find the entry we need in O(log(n)) time */
 1320|       |
 1321|  5.01k|                while (b > a) {
  ------------------
  |  Branch (1321:24): [True: 2.50k, False: 2.50k]
  ------------------
 1322|  2.50k|                        sd_json_variant *p;
 1323|  2.50k|                        const char *f;
 1324|  2.50k|                        size_t i;
 1325|  2.50k|                        int c;
 1326|       |
 1327|  2.50k|                        i = (a + b) / 2;
 1328|  2.50k|                        p = json_variant_dereference(v + 1 + i*2);
 1329|       |
 1330|  2.50k|                        assert_se(f = sd_json_variant_string(p));
  ------------------
  |  |   65|  2.50k|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.50k|        do {                                                            \
  |  |  |  |   59|  2.50k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.50k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.50k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.50k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.50k|        } while (false)
  |  |  ------------------
  ------------------
 1331|       |
 1332|  2.50k|                        c = strcmp(key, f);
 1333|  2.50k|                        if (c == 0) {
  ------------------
  |  Branch (1333:29): [True: 0, False: 2.50k]
  ------------------
 1334|      0|                                if (ret_key)
  ------------------
  |  Branch (1334:37): [True: 0, False: 0]
  ------------------
 1335|      0|                                        *ret_key = json_variant_conservative_formalize(v + 1 + i*2);
 1336|       |
 1337|      0|                                return json_variant_conservative_formalize(v + 1 + i*2 + 1);
 1338|  2.50k|                        } else if (c < 0)
  ------------------
  |  Branch (1338:36): [True: 306, False: 2.19k]
  ------------------
 1339|    306|                                b = i;
 1340|  2.19k|                        else
 1341|  2.19k|                                a = i + 1;
 1342|  2.50k|                }
 1343|       |
 1344|  2.50k|                goto not_found;
 1345|  2.50k|        }
 1346|       |
 1347|       |        /* The variant is not sorted, hence search for the field linearly */
 1348|  4.62k|        for (size_t i = 0; i < v->n_elements; i += 2) {
  ------------------
  |  Branch (1348:28): [True: 3.90k, False: 720]
  ------------------
 1349|  3.90k|                sd_json_variant *p;
 1350|       |
 1351|  3.90k|                p = json_variant_dereference(v + 1 + i);
 1352|       |
 1353|  3.90k|                if (!sd_json_variant_has_type(p, SD_JSON_VARIANT_STRING))
  ------------------
  |  Branch (1353:21): [True: 0, False: 3.90k]
  ------------------
 1354|      0|                        continue;
 1355|       |
 1356|  3.90k|                if (streq(sd_json_variant_string(p), key)) {
  ------------------
  |  |   46|  3.90k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 0, False: 3.90k]
  |  |  ------------------
  ------------------
 1357|       |
 1358|      0|                        if (ret_key)
  ------------------
  |  Branch (1358:29): [True: 0, False: 0]
  ------------------
 1359|      0|                                *ret_key = json_variant_conservative_formalize(v + 1 + i);
 1360|       |
 1361|      0|                        return json_variant_conservative_formalize(v + 1 + i + 1);
 1362|      0|                }
 1363|  3.90k|        }
 1364|       |
 1365|  3.22k|not_found:
 1366|  3.22k|        if (ret_key)
  ------------------
  |  Branch (1366:13): [True: 480, False: 2.74k]
  ------------------
 1367|    480|                *ret_key = NULL;
 1368|       |
 1369|  3.22k|        return NULL;
 1370|       |
 1371|      0|mismatch:
 1372|      0|        log_debug("Element in non-object JSON variant requested by key, returning NULL.");
  ------------------
  |  |  220|      0|#define log_debug(...)     log_full(LOG_DEBUG,   __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
 1373|      0|        if (ret_key)
  ------------------
  |  Branch (1373:13): [True: 0, False: 0]
  ------------------
 1374|      0|                *ret_key = NULL;
 1375|       |
 1376|      0|        return NULL;
 1377|    720|}
sd_json_variant_by_key:
 1379|  2.74k|_public_ sd_json_variant *sd_json_variant_by_key(sd_json_variant *v, const char *key) {
 1380|  2.74k|        return sd_json_variant_by_key_full(v, key, NULL);
 1381|  2.74k|}
sd_json_variant_is_sensitive:
 1498|  3.34k|_public_ int sd_json_variant_is_sensitive(sd_json_variant *v) {
 1499|  3.34k|        v = json_variant_formalize(v);
 1500|  3.34k|        if (!json_variant_is_regular(v))
  ------------------
  |  Branch (1500:13): [True: 0, False: 3.34k]
  ------------------
 1501|      0|                return false;
 1502|       |
 1503|  3.34k|        return v->sensitive;
 1504|  3.34k|}
sd_json_variant_merge_object:
 2126|  1.67k|_public_ int sd_json_variant_merge_object(sd_json_variant **v, sd_json_variant *m) {
 2127|  1.67k|        _cleanup_(sd_json_variant_unrefp) sd_json_variant *w = NULL;
  ------------------
  |  |   78|  1.67k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
 2128|  1.67k|        _cleanup_free_ sd_json_variant **array = NULL;
  ------------------
  |  |   82|  1.67k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  1.67k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 2129|  1.67k|        size_t v_elements, m_elements, k;
 2130|  1.67k|        bool v_blank, m_blank;
 2131|  1.67k|        int r;
 2132|       |
 2133|  1.67k|        m = json_variant_dereference(m);
 2134|       |
 2135|  1.67k|        v_blank = sd_json_variant_is_blank_object(*v);
 2136|  1.67k|        m_blank = sd_json_variant_is_blank_object(m);
 2137|       |
 2138|  1.67k|        if (!v_blank && !sd_json_variant_is_object(*v))
  ------------------
  |  Branch (2138:13): [True: 1.67k, False: 0]
  |  Branch (2138:25): [True: 0, False: 1.67k]
  ------------------
 2139|      0|                return -EINVAL;
 2140|  1.67k|        if (!m_blank && !sd_json_variant_is_object(m))
  ------------------
  |  Branch (2140:13): [True: 1.67k, False: 0]
  |  Branch (2140:25): [True: 0, False: 1.67k]
  ------------------
 2141|      0|                return -EINVAL;
 2142|       |
 2143|  1.67k|        if (m_blank)
  ------------------
  |  Branch (2143:13): [True: 0, False: 1.67k]
  ------------------
 2144|      0|                return 0; /* nothing to do */
 2145|       |
 2146|  1.67k|        if (v_blank) {
  ------------------
  |  Branch (2146:13): [True: 0, False: 1.67k]
  ------------------
 2147|      0|                JSON_VARIANT_REPLACE(*v, sd_json_variant_ref(m));
  ------------------
  |  |   13|      0|        do {                              \
  |  |   14|      0|                typeof(v)* _v = &(v);     \
  |  |   15|      0|                typeof(q) _q = (q);       \
  |  |   16|      0|                sd_json_variant_unref(*_v);  \
  |  |   17|      0|                *_v = _q;                 \
  |  |   18|      0|        } while(false)
  ------------------
 2148|      0|                return 1;
 2149|      0|        }
 2150|       |
 2151|  1.67k|        v_elements = sd_json_variant_elements(*v);
 2152|  1.67k|        m_elements = sd_json_variant_elements(m);
 2153|  1.67k|        if (v_elements > SIZE_MAX - m_elements) /* overflow check */
  ------------------
  |  Branch (2153:13): [True: 0, False: 1.67k]
  ------------------
 2154|      0|                return -ENOMEM;
 2155|       |
 2156|  1.67k|        array = new(sd_json_variant*, v_elements + m_elements);
  ------------------
  |  |   17|  1.67k|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
 2157|  1.67k|        if (!array)
  ------------------
  |  Branch (2157:13): [True: 0, False: 1.67k]
  ------------------
 2158|      0|                return -ENOMEM;
 2159|       |
 2160|  1.67k|        k = 0;
 2161|  4.17k|        for (size_t i = 0; i < v_elements; i += 2) {
  ------------------
  |  Branch (2161:28): [True: 2.50k, False: 1.67k]
  ------------------
 2162|  2.50k|                sd_json_variant *u;
 2163|       |
 2164|  2.50k|                u = sd_json_variant_by_index(*v, i);
 2165|  2.50k|                if (!sd_json_variant_is_string(u))
  ------------------
  |  Branch (2165:21): [True: 0, False: 2.50k]
  ------------------
 2166|      0|                        return -EINVAL;
 2167|       |
 2168|  2.50k|                if (sd_json_variant_by_key(m, sd_json_variant_string(u)))
  ------------------
  |  Branch (2168:21): [True: 0, False: 2.50k]
  ------------------
 2169|      0|                        continue; /* skip if exists in second variant */
 2170|       |
 2171|  2.50k|                array[k++] = u;
 2172|  2.50k|                array[k++] = sd_json_variant_by_index(*v, i + 1);
 2173|  2.50k|        }
 2174|       |
 2175|  5.01k|        for (size_t i = 0; i < m_elements; i++)
  ------------------
  |  Branch (2175:28): [True: 3.34k, False: 1.67k]
  ------------------
 2176|  3.34k|                array[k++] = sd_json_variant_by_index(m, i);
 2177|       |
 2178|  1.67k|        r = sd_json_variant_new_object(&w, array, k);
 2179|  1.67k|        if (r < 0)
  ------------------
  |  Branch (2179:13): [True: 0, False: 1.67k]
  ------------------
 2180|      0|                return r;
 2181|       |
 2182|  1.67k|        json_variant_propagate_sensitive(*v, w);
 2183|  1.67k|        json_variant_propagate_sensitive(m, w);
 2184|  1.67k|        JSON_VARIANT_REPLACE(*v, TAKE_PTR(w));
  ------------------
  |  |   13|  1.67k|        do {                              \
  |  |   14|  1.67k|                typeof(v)* _v = &(v);     \
  |  |   15|  1.67k|                typeof(q) _q = (q);       \
  |  |   16|  1.67k|                sd_json_variant_unref(*_v);  \
  |  |   17|  1.67k|                *_v = _q;                 \
  |  |   18|  1.67k|        } while(false)
  ------------------
 2185|       |
 2186|  1.67k|        return 1;
 2187|  1.67k|}
sd_json_variant_merge_objectb:
 2189|  1.67k|_public_ int sd_json_variant_merge_objectb(sd_json_variant **v, ...) {
 2190|  1.67k|        _cleanup_(sd_json_variant_unrefp) sd_json_variant *w = NULL;
  ------------------
  |  |   78|  1.67k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
 2191|  1.67k|        va_list ap;
 2192|  1.67k|        int r;
 2193|       |
 2194|  1.67k|        va_start(ap, v);
 2195|  1.67k|        r = sd_json_buildv(&w, ap);
 2196|  1.67k|        va_end(ap);
 2197|  1.67k|        if (r < 0)
  ------------------
  |  Branch (2197:13): [True: 0, False: 1.67k]
  ------------------
 2198|      0|                return r;
 2199|       |
 2200|  1.67k|        return sd_json_variant_merge_object(v, w);
 2201|  1.67k|}
sd_json_buildv:
 3477|  2.65k|_public_ int sd_json_buildv(sd_json_variant **ret, va_list ap) {
 3478|  2.65k|        JsonStack *stack = NULL;
 3479|  2.65k|        size_t n_stack = 1;
 3480|  2.65k|        const char *name = NULL;
 3481|  2.65k|        int r;
 3482|       |
 3483|  2.65k|        assert_return(ret, -EINVAL);
  ------------------
  |  |   18|  2.65k|        do {                                                            \
  |  |   19|  2.65k|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|  2.65k|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|  2.65k|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 2.65k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|  2.65k|        ? (true)                                                        \
  |  |  |  |   15|  2.65k|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 2.65k]
  |  |  ------------------
  |  |   20|  2.65k|                        return (r);                                     \
  |  |   21|  2.65k|        } while (false)
  ------------------
 3484|       |
 3485|  2.65k|        if (!GREEDY_REALLOC(stack, n_stack))
  ------------------
  |  |  139|  2.65k|        greedy_realloc((void**) &(array), (need), sizeof((array)[0]))
  ------------------
  |  Branch (3485:13): [True: 0, False: 2.65k]
  ------------------
 3486|      0|                return -ENOMEM;
 3487|       |
 3488|  2.65k|        stack[0] = (JsonStack) {
 3489|  2.65k|                .expect = EXPECT_TOPLEVEL,
 3490|  2.65k|        };
 3491|       |
 3492|  19.0k|        for (;;) {
 3493|  19.0k|                _cleanup_(sd_json_variant_unrefp) sd_json_variant *add = NULL, *add_more = NULL;
  ------------------
  |  |   78|  19.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
 3494|  19.0k|                size_t n_subtract = 0; /* how much to subtract from current->n_suppress, i.e. how many elements would
 3495|       |                                        * have been added to the current variant */
 3496|  19.0k|                JsonStack *current;
 3497|  19.0k|                int command;
 3498|       |
 3499|  19.0k|                assert(n_stack > 0);
  ------------------
  |  |   72|  19.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  19.0k|        do {                                                            \
  |  |  |  |   59|  19.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  19.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 19.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  19.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  19.0k|        } while (false)
  |  |  ------------------
  ------------------
 3500|  19.0k|                current = stack + n_stack - 1;
 3501|       |
 3502|  19.0k|                if (current->expect == EXPECT_END)
  ------------------
  |  Branch (3502:21): [True: 2.65k, False: 16.3k]
  ------------------
 3503|  2.65k|                        goto done;
 3504|       |
 3505|  16.3k|                command = va_arg(ap, int);
 3506|       |
 3507|  16.3k|                switch (command) {
  ------------------
  |  Branch (3507:25): [True: 0, False: 16.3k]
  ------------------
 3508|       |
 3509|    883|                case _SD_JSON_BUILD_STRING:
  ------------------
  |  Branch (3509:17): [True: 883, False: 15.4k]
  ------------------
 3510|    883|                case _JSON_BUILD_STRING_UNDERSCORIFY: {
  ------------------
  |  Branch (3510:17): [True: 0, False: 16.3k]
  ------------------
 3511|    883|                        const char *p;
 3512|       |
 3513|    883|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|    883|        ({                                                              \
  |  |  362|    883|                bool _found = false;                                    \
  |  |  363|    883|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|    883|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|    883|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|    883|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|    883|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|    883|                switch (x) {                                            \
  |  |  368|    883|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|    883|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|    883|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|    883|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 883]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 883, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 883]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|    883|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|    883|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|    883|                        _found = true;                                  \
  |  |  370|    883|                        break;                                          \
  |  |  371|    883|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 883]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|    883|                }                                                       \
  |  |  374|    883|                _found;                                                 \
  |  |  375|    883|        })
  ------------------
  |  Branch (3513:29): [True: 0, False: 883]
  ------------------
 3514|      0|                                r = -EINVAL;
 3515|      0|                                goto finish;
 3516|      0|                        }
 3517|       |
 3518|    883|                        p = va_arg(ap, const char *);
 3519|       |
 3520|    883|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (3520:29): [True: 855, False: 28]
  ------------------
 3521|    855|                                _cleanup_free_ char *c = NULL;
  ------------------
  |  |   82|    855|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    855|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 3522|       |
 3523|    855|                                if (command == _JSON_BUILD_STRING_UNDERSCORIFY) {
  ------------------
  |  Branch (3523:37): [True: 0, False: 855]
  ------------------
 3524|      0|                                        c = strreplace(p, "-", "_");
 3525|      0|                                        if (!c) {
  ------------------
  |  Branch (3525:45): [True: 0, False: 0]
  ------------------
 3526|      0|                                                r = -ENOMEM;
 3527|      0|                                                goto finish;
 3528|      0|                                        }
 3529|       |
 3530|      0|                                        p = c;
 3531|      0|                                }
 3532|       |
 3533|    855|                                r = sd_json_variant_new_string(&add, p);
 3534|    855|                                if (r < 0)
  ------------------
  |  Branch (3534:37): [True: 0, False: 855]
  ------------------
 3535|      0|                                        goto finish;
 3536|    855|                        }
 3537|       |
 3538|    883|                        n_subtract = 1;
 3539|       |
 3540|    883|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (3540:29): [True: 0, False: 883]
  ------------------
 3541|      0|                                current->expect = EXPECT_END;
 3542|    883|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (3542:34): [True: 883, False: 0]
  ------------------
 3543|    883|                                current->expect = EXPECT_OBJECT_KEY;
 3544|      0|                        else
 3545|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 3546|       |
 3547|    883|                        break;
 3548|    883|                }
 3549|       |
 3550|      0|                case _SD_JSON_BUILD_INTEGER: {
  ------------------
  |  Branch (3550:17): [True: 0, False: 16.3k]
  ------------------
 3551|      0|                        int64_t j;
 3552|       |
 3553|      0|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (3553:29): [True: 0, False: 0]
  ------------------
 3554|      0|                                r = -EINVAL;
 3555|      0|                                goto finish;
 3556|      0|                        }
 3557|       |
 3558|      0|                        j = va_arg(ap, int64_t);
 3559|       |
 3560|      0|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (3560:29): [True: 0, False: 0]
  ------------------
 3561|      0|                                r = sd_json_variant_new_integer(&add, j);
 3562|      0|                                if (r < 0)
  ------------------
  |  Branch (3562:37): [True: 0, False: 0]
  ------------------
 3563|      0|                                        goto finish;
 3564|      0|                        }
 3565|       |
 3566|      0|                        n_subtract = 1;
 3567|       |
 3568|      0|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (3568:29): [True: 0, False: 0]
  ------------------
 3569|      0|                                current->expect = EXPECT_END;
 3570|      0|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (3570:34): [True: 0, False: 0]
  ------------------
 3571|      0|                                current->expect = EXPECT_OBJECT_KEY;
 3572|      0|                        else
 3573|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 3574|       |
 3575|      0|                        break;
 3576|      0|                }
 3577|       |
 3578|  2.47k|                case _SD_JSON_BUILD_UNSIGNED: {
  ------------------
  |  Branch (3578:17): [True: 2.47k, False: 13.9k]
  ------------------
 3579|  2.47k|                        uint64_t j;
 3580|       |
 3581|  2.47k|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|  2.47k|        ({                                                              \
  |  |  362|  2.47k|                bool _found = false;                                    \
  |  |  363|  2.47k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  2.47k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  2.47k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  2.47k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  2.47k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  2.47k|                switch (x) {                                            \
  |  |  368|  2.47k|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|  2.47k|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|  2.47k|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|  2.47k|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 2.47k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 2.47k, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 2.47k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|  2.47k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|  2.47k|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|  2.47k|                        _found = true;                                  \
  |  |  370|  2.47k|                        break;                                          \
  |  |  371|  2.47k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 2.47k]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|  2.47k|                }                                                       \
  |  |  374|  2.47k|                _found;                                                 \
  |  |  375|  2.47k|        })
  ------------------
  |  Branch (3581:29): [True: 0, False: 2.47k]
  ------------------
 3582|      0|                                r = -EINVAL;
 3583|      0|                                goto finish;
 3584|      0|                        }
 3585|       |
 3586|  2.47k|                        j = va_arg(ap, uint64_t);
 3587|       |
 3588|  2.47k|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (3588:29): [True: 1.37k, False: 1.09k]
  ------------------
 3589|  1.37k|                                r = sd_json_variant_new_unsigned(&add, j);
 3590|  1.37k|                                if (r < 0)
  ------------------
  |  Branch (3590:37): [True: 0, False: 1.37k]
  ------------------
 3591|      0|                                        goto finish;
 3592|  1.37k|                        }
 3593|       |
 3594|  2.47k|                        n_subtract = 1;
 3595|       |
 3596|  2.47k|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (3596:29): [True: 0, False: 2.47k]
  ------------------
 3597|      0|                                current->expect = EXPECT_END;
 3598|  2.47k|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (3598:34): [True: 2.47k, False: 0]
  ------------------
 3599|  2.47k|                                current->expect = EXPECT_OBJECT_KEY;
 3600|      0|                        else
 3601|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 3602|       |
 3603|  2.47k|                        break;
 3604|  2.47k|                }
 3605|       |
 3606|      0|                case _SD_JSON_BUILD_REAL: {
  ------------------
  |  Branch (3606:17): [True: 0, False: 16.3k]
  ------------------
 3607|      0|                        double d;
 3608|       |
 3609|      0|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (3609:29): [True: 0, False: 0]
  ------------------
 3610|      0|                                r = -EINVAL;
 3611|      0|                                goto finish;
 3612|      0|                        }
 3613|       |
 3614|      0|                        d = va_arg(ap, double);
 3615|       |
 3616|      0|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (3616:29): [True: 0, False: 0]
  ------------------
 3617|      0|                                r = sd_json_variant_new_real(&add, d);
 3618|      0|                                if (r < 0)
  ------------------
  |  Branch (3618:37): [True: 0, False: 0]
  ------------------
 3619|      0|                                        goto finish;
 3620|      0|                        }
 3621|       |
 3622|      0|                        n_subtract = 1;
 3623|       |
 3624|      0|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (3624:29): [True: 0, False: 0]
  ------------------
 3625|      0|                                current->expect = EXPECT_END;
 3626|      0|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (3626:34): [True: 0, False: 0]
  ------------------
 3627|      0|                                current->expect = EXPECT_OBJECT_KEY;
 3628|      0|                        else
 3629|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 3630|       |
 3631|      0|                        break;
 3632|      0|                }
 3633|       |
 3634|    128|                case _SD_JSON_BUILD_BOOLEAN: {
  ------------------
  |  Branch (3634:17): [True: 128, False: 16.2k]
  ------------------
 3635|    128|                        bool b;
 3636|       |
 3637|    128|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|    128|        ({                                                              \
  |  |  362|    128|                bool _found = false;                                    \
  |  |  363|    128|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|    128|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|    128|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|    128|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|    128|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|    128|                switch (x) {                                            \
  |  |  368|    128|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|    128|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|    128|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|    128|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 128]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 128, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 128]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|    128|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|    128|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|    128|                        _found = true;                                  \
  |  |  370|    128|                        break;                                          \
  |  |  371|    128|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 128]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|    128|                }                                                       \
  |  |  374|    128|                _found;                                                 \
  |  |  375|    128|        })
  ------------------
  |  Branch (3637:29): [True: 0, False: 128]
  ------------------
 3638|      0|                                r = -EINVAL;
 3639|      0|                                goto finish;
 3640|      0|                        }
 3641|       |
 3642|    128|                        b = va_arg(ap, int);
 3643|       |
 3644|    128|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (3644:29): [True: 40, False: 88]
  ------------------
 3645|     40|                                r = sd_json_variant_new_boolean(&add, b);
 3646|     40|                                if (r < 0)
  ------------------
  |  Branch (3646:37): [True: 0, False: 40]
  ------------------
 3647|      0|                                        goto finish;
 3648|     40|                        }
 3649|       |
 3650|    128|                        n_subtract = 1;
 3651|       |
 3652|    128|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (3652:29): [True: 0, False: 128]
  ------------------
 3653|      0|                                current->expect = EXPECT_END;
 3654|    128|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (3654:34): [True: 128, False: 0]
  ------------------
 3655|    128|                                current->expect = EXPECT_OBJECT_KEY;
 3656|      0|                        else
 3657|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 3658|       |
 3659|    128|                        break;
 3660|    128|                }
 3661|       |
 3662|      0|                case _SD_JSON_BUILD_NULL:
  ------------------
  |  Branch (3662:17): [True: 0, False: 16.3k]
  ------------------
 3663|       |
 3664|      0|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (3664:29): [True: 0, False: 0]
  ------------------
 3665|      0|                                r = -EINVAL;
 3666|      0|                                goto finish;
 3667|      0|                        }
 3668|       |
 3669|      0|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (3669:29): [True: 0, False: 0]
  ------------------
 3670|      0|                                r = sd_json_variant_new_null(&add);
 3671|      0|                                if (r < 0)
  ------------------
  |  Branch (3671:37): [True: 0, False: 0]
  ------------------
 3672|      0|                                        goto finish;
 3673|      0|                        }
 3674|       |
 3675|      0|                        n_subtract = 1;
 3676|       |
 3677|      0|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (3677:29): [True: 0, False: 0]
  ------------------
 3678|      0|                                current->expect = EXPECT_END;
 3679|      0|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (3679:34): [True: 0, False: 0]
  ------------------
 3680|      0|                                current->expect = EXPECT_OBJECT_KEY;
 3681|      0|                        else
 3682|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 3683|       |
 3684|      0|                        break;
 3685|       |
 3686|    126|                case _SD_JSON_BUILD_VARIANT:
  ------------------
  |  Branch (3686:17): [True: 126, False: 16.2k]
  ------------------
 3687|       |
 3688|    126|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|    126|        ({                                                              \
  |  |  362|    126|                bool _found = false;                                    \
  |  |  363|    126|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|    126|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|    126|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|    126|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|    126|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|    126|                switch (x) {                                            \
  |  |  368|    126|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|    126|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|    126|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|    126|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 126]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 126, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 126]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|    126|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|    126|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|    126|                        _found = true;                                  \
  |  |  370|    126|                        break;                                          \
  |  |  371|    126|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 126]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|    126|                }                                                       \
  |  |  374|    126|                _found;                                                 \
  |  |  375|    126|        })
  ------------------
  |  Branch (3688:29): [True: 0, False: 126]
  ------------------
 3689|      0|                                r = -EINVAL;
 3690|      0|                                goto finish;
 3691|      0|                        }
 3692|       |
 3693|       |                        /* Note that we don't care for current->n_suppress here, after all the variant is already
 3694|       |                         * allocated anyway... */
 3695|    126|                        add = va_arg(ap, sd_json_variant*);
 3696|    126|                        if (!add)
  ------------------
  |  Branch (3696:29): [True: 0, False: 126]
  ------------------
 3697|      0|                                add = JSON_VARIANT_MAGIC_NULL;
  ------------------
  |  |   36|      0|#define JSON_VARIANT_MAGIC_NULL ((sd_json_variant*) _JSON_VARIANT_MAGIC_NULL)
  ------------------
 3698|    126|                        else
 3699|    126|                                sd_json_variant_ref(add);
 3700|       |
 3701|    126|                        n_subtract = 1;
 3702|       |
 3703|    126|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (3703:29): [True: 0, False: 126]
  ------------------
 3704|      0|                                current->expect = EXPECT_END;
 3705|    126|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (3705:34): [True: 126, False: 0]
  ------------------
 3706|    126|                                current->expect = EXPECT_OBJECT_KEY;
 3707|      0|                        else
 3708|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 3709|       |
 3710|    126|                        break;
 3711|       |
 3712|      0|                case _SD_JSON_BUILD_VARIANT_ARRAY: {
  ------------------
  |  Branch (3712:17): [True: 0, False: 16.3k]
  ------------------
 3713|      0|                        sd_json_variant **array;
 3714|      0|                        size_t n;
 3715|       |
 3716|      0|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (3716:29): [True: 0, False: 0]
  ------------------
 3717|      0|                                r = -EINVAL;
 3718|      0|                                goto finish;
 3719|      0|                        }
 3720|       |
 3721|      0|                        array = va_arg(ap, sd_json_variant**);
 3722|      0|                        n = va_arg(ap, size_t);
 3723|       |
 3724|      0|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (3724:29): [True: 0, False: 0]
  ------------------
 3725|      0|                                r = sd_json_variant_new_array(&add, array, n);
 3726|      0|                                if (r < 0)
  ------------------
  |  Branch (3726:37): [True: 0, False: 0]
  ------------------
 3727|      0|                                        goto finish;
 3728|      0|                        }
 3729|       |
 3730|      0|                        n_subtract = 1;
 3731|       |
 3732|      0|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (3732:29): [True: 0, False: 0]
  ------------------
 3733|      0|                                current->expect = EXPECT_END;
 3734|      0|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (3734:34): [True: 0, False: 0]
  ------------------
 3735|      0|                                current->expect = EXPECT_OBJECT_KEY;
 3736|      0|                        else
 3737|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 3738|       |
 3739|      0|                        break;
 3740|      0|                }
 3741|       |
 3742|      0|                case _SD_JSON_BUILD_LITERAL: {
  ------------------
  |  Branch (3742:17): [True: 0, False: 16.3k]
  ------------------
 3743|      0|                        const char *l;
 3744|       |
 3745|      0|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (3745:29): [True: 0, False: 0]
  ------------------
 3746|      0|                                r = -EINVAL;
 3747|      0|                                goto finish;
 3748|      0|                        }
 3749|       |
 3750|      0|                        l = va_arg(ap, const char *);
 3751|       |
 3752|      0|                        if (l) {
  ------------------
  |  Branch (3752:29): [True: 0, False: 0]
  ------------------
 3753|       |                                /* Note that we don't care for current->n_suppress here, we should generate parsing
 3754|       |                                 * errors even in suppressed object properties */
 3755|       |
 3756|      0|                                r = sd_json_parse(l, 0, &add, NULL, NULL);
 3757|      0|                                if (r < 0)
  ------------------
  |  Branch (3757:37): [True: 0, False: 0]
  ------------------
 3758|      0|                                        goto finish;
 3759|      0|                        } else
 3760|      0|                                add = JSON_VARIANT_MAGIC_NULL;
  ------------------
  |  |   36|      0|#define JSON_VARIANT_MAGIC_NULL ((sd_json_variant*) _JSON_VARIANT_MAGIC_NULL)
  ------------------
 3761|       |
 3762|      0|                        n_subtract = 1;
 3763|       |
 3764|      0|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (3764:29): [True: 0, False: 0]
  ------------------
 3765|      0|                                current->expect = EXPECT_END;
 3766|      0|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (3766:34): [True: 0, False: 0]
  ------------------
 3767|      0|                                current->expect = EXPECT_OBJECT_KEY;
 3768|      0|                        else
 3769|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 3770|       |
 3771|      0|                        break;
 3772|      0|                }
 3773|       |
 3774|      0|                case _SD_JSON_BUILD_ARRAY_BEGIN:
  ------------------
  |  Branch (3774:17): [True: 0, False: 16.3k]
  ------------------
 3775|       |
 3776|      0|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (3776:29): [True: 0, False: 0]
  ------------------
 3777|      0|                                r = -EINVAL;
 3778|      0|                                goto finish;
 3779|      0|                        }
 3780|       |
 3781|      0|                        if (!GREEDY_REALLOC(stack, n_stack+1)) {
  ------------------
  |  |  139|      0|        greedy_realloc((void**) &(array), (need), sizeof((array)[0]))
  ------------------
  |  Branch (3781:29): [True: 0, False: 0]
  ------------------
 3782|      0|                                r = -ENOMEM;
 3783|      0|                                goto finish;
 3784|      0|                        }
 3785|      0|                        current = stack + n_stack - 1;
 3786|       |
 3787|      0|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (3787:29): [True: 0, False: 0]
  ------------------
 3788|      0|                                current->expect = EXPECT_END;
 3789|      0|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (3789:34): [True: 0, False: 0]
  ------------------
 3790|      0|                                current->expect = EXPECT_OBJECT_KEY;
 3791|      0|                        else
 3792|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 3793|       |
 3794|      0|                        stack[n_stack++] = (JsonStack) {
 3795|      0|                                .expect = EXPECT_ARRAY_ELEMENT,
 3796|      0|                                .n_suppress = current->n_suppress != 0 ? SIZE_MAX : 0, /* if we shall suppress the
  ------------------
  |  Branch (3796:47): [True: 0, False: 0]
  ------------------
 3797|       |                                                                                           * new array, then we should
 3798|       |                                                                                           * also suppress all array
 3799|       |                                                                                           * members */
 3800|      0|                        };
 3801|       |
 3802|      0|                        break;
 3803|       |
 3804|      0|                case _SD_JSON_BUILD_ARRAY_END:
  ------------------
  |  Branch (3804:17): [True: 0, False: 16.3k]
  ------------------
 3805|      0|                        if (current->expect != EXPECT_ARRAY_ELEMENT) {
  ------------------
  |  Branch (3805:29): [True: 0, False: 0]
  ------------------
 3806|      0|                                r = -EINVAL;
 3807|      0|                                goto finish;
 3808|      0|                        }
 3809|       |
 3810|      0|                        assert(n_stack > 1);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 3811|       |
 3812|      0|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (3812:29): [True: 0, False: 0]
  ------------------
 3813|      0|                                r = sd_json_variant_new_array(&add, current->elements, current->n_elements);
 3814|      0|                                if (r < 0)
  ------------------
  |  Branch (3814:37): [True: 0, False: 0]
  ------------------
 3815|      0|                                        goto finish;
 3816|      0|                        }
 3817|       |
 3818|      0|                        n_subtract = 1;
 3819|       |
 3820|      0|                        json_stack_release(current);
 3821|      0|                        n_stack--, current--;
 3822|       |
 3823|      0|                        break;
 3824|       |
 3825|  1.80k|                case _SD_JSON_BUILD_STRV: {
  ------------------
  |  Branch (3825:17): [True: 1.80k, False: 14.5k]
  ------------------
 3826|  1.80k|                        char **l;
 3827|       |
 3828|  1.80k|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|  1.80k|        ({                                                              \
  |  |  362|  1.80k|                bool _found = false;                                    \
  |  |  363|  1.80k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  1.80k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  1.80k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  1.80k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  1.80k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  1.80k|                switch (x) {                                            \
  |  |  368|  1.80k|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|  1.80k|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|  1.80k|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|  1.80k|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 1.80k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 1.80k, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 1.80k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|  1.80k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|  1.80k|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|  1.80k|                        _found = true;                                  \
  |  |  370|  1.80k|                        break;                                          \
  |  |  371|  1.80k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 1.80k]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|  1.80k|                }                                                       \
  |  |  374|  1.80k|                _found;                                                 \
  |  |  375|  1.80k|        })
  ------------------
  |  Branch (3828:29): [True: 0, False: 1.80k]
  ------------------
 3829|      0|                                r = -EINVAL;
 3830|      0|                                goto finish;
 3831|      0|                        }
 3832|       |
 3833|  1.80k|                        l = va_arg(ap, char **);
 3834|       |
 3835|  1.80k|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (3835:29): [True: 835, False: 969]
  ------------------
 3836|    835|                                r = sd_json_variant_new_array_strv(&add, l);
 3837|    835|                                if (r < 0)
  ------------------
  |  Branch (3837:37): [True: 0, False: 835]
  ------------------
 3838|      0|                                        goto finish;
 3839|    835|                        }
 3840|       |
 3841|  1.80k|                        n_subtract = 1;
 3842|       |
 3843|  1.80k|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (3843:29): [True: 0, False: 1.80k]
  ------------------
 3844|      0|                                current->expect = EXPECT_END;
 3845|  1.80k|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (3845:34): [True: 1.80k, False: 0]
  ------------------
 3846|  1.80k|                                current->expect = EXPECT_OBJECT_KEY;
 3847|      0|                        else
 3848|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 3849|       |
 3850|  1.80k|                        break;
 3851|  1.80k|                }
 3852|       |
 3853|      0|                case _JSON_BUILD_STRV_ENV_PAIR: {
  ------------------
  |  Branch (3853:17): [True: 0, False: 16.3k]
  ------------------
 3854|      0|                        char **l;
 3855|       |
 3856|      0|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (3856:29): [True: 0, False: 0]
  ------------------
 3857|      0|                                r = -EINVAL;
 3858|      0|                                goto finish;
 3859|      0|                        }
 3860|       |
 3861|      0|                        l = va_arg(ap, char **);
 3862|       |
 3863|      0|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (3863:29): [True: 0, False: 0]
  ------------------
 3864|      0|                                _cleanup_strv_free_ char **el = NULL;
  ------------------
  |  |   21|      0|#define _cleanup_strv_free_ _cleanup_(strv_freep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 3865|       |
 3866|      0|                                r = strv_env_get_merged(l, &el);
 3867|      0|                                if (r < 0)
  ------------------
  |  Branch (3867:37): [True: 0, False: 0]
  ------------------
 3868|      0|                                        goto finish;
 3869|       |
 3870|      0|                                r = sd_json_variant_new_array_strv(&add, el);
 3871|      0|                                if (r < 0)
  ------------------
  |  Branch (3871:37): [True: 0, False: 0]
  ------------------
 3872|      0|                                        goto finish;
 3873|      0|                        }
 3874|       |
 3875|      0|                        n_subtract = 1;
 3876|       |
 3877|      0|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (3877:29): [True: 0, False: 0]
  ------------------
 3878|      0|                                current->expect = EXPECT_END;
 3879|      0|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (3879:34): [True: 0, False: 0]
  ------------------
 3880|      0|                                current->expect = EXPECT_OBJECT_KEY;
 3881|      0|                        else
 3882|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 3883|       |
 3884|      0|                        break;
 3885|      0|                }
 3886|       |
 3887|      0|                case _SD_JSON_BUILD_BASE64:
  ------------------
  |  Branch (3887:17): [True: 0, False: 16.3k]
  ------------------
 3888|      0|                case _SD_JSON_BUILD_BASE32HEX:
  ------------------
  |  Branch (3888:17): [True: 0, False: 16.3k]
  ------------------
 3889|      0|                case _SD_JSON_BUILD_HEX:
  ------------------
  |  Branch (3889:17): [True: 0, False: 16.3k]
  ------------------
 3890|      0|                case _SD_JSON_BUILD_OCTESCAPE: {
  ------------------
  |  Branch (3890:17): [True: 0, False: 16.3k]
  ------------------
 3891|      0|                        const void *p;
 3892|      0|                        size_t n;
 3893|       |
 3894|      0|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (3894:29): [True: 0, False: 0]
  ------------------
 3895|      0|                                r = -EINVAL;
 3896|      0|                                goto finish;
 3897|      0|                        }
 3898|       |
 3899|      0|                        p = va_arg(ap, const void *);
 3900|      0|                        n = va_arg(ap, size_t);
 3901|       |
 3902|      0|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (3902:29): [True: 0, False: 0]
  ------------------
 3903|      0|                                r = command == _SD_JSON_BUILD_BASE64    ? sd_json_variant_new_base64(&add, p, n) :
  ------------------
  |  Branch (3903:37): [True: 0, False: 0]
  ------------------
 3904|      0|                                    command == _SD_JSON_BUILD_BASE32HEX ? sd_json_variant_new_base32hex(&add, p, n) :
  ------------------
  |  Branch (3904:37): [True: 0, False: 0]
  ------------------
 3905|      0|                                    command == _SD_JSON_BUILD_HEX       ? sd_json_variant_new_hex(&add, p, n) :
  ------------------
  |  Branch (3905:37): [True: 0, False: 0]
  ------------------
 3906|      0|                                                                          sd_json_variant_new_octescape(&add, p, n);
 3907|      0|                                if (r < 0)
  ------------------
  |  Branch (3907:37): [True: 0, False: 0]
  ------------------
 3908|      0|                                        goto finish;
 3909|      0|                        }
 3910|       |
 3911|      0|                        n_subtract = 1;
 3912|       |
 3913|      0|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (3913:29): [True: 0, False: 0]
  ------------------
 3914|      0|                                current->expect = EXPECT_END;
 3915|      0|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (3915:34): [True: 0, False: 0]
  ------------------
 3916|      0|                                current->expect = EXPECT_OBJECT_KEY;
 3917|      0|                        else
 3918|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 3919|       |
 3920|      0|                        break;
 3921|      0|                }
 3922|       |
 3923|      0|                case _JSON_BUILD_IOVEC_BASE64:
  ------------------
  |  Branch (3923:17): [True: 0, False: 16.3k]
  ------------------
 3924|      0|                case _JSON_BUILD_IOVEC_HEX: {
  ------------------
  |  Branch (3924:17): [True: 0, False: 16.3k]
  ------------------
 3925|      0|                        const struct iovec *iov;
 3926|       |
 3927|      0|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (3927:29): [True: 0, False: 0]
  ------------------
 3928|      0|                                r = -EINVAL;
 3929|      0|                                goto finish;
 3930|      0|                        }
 3931|       |
 3932|      0|                        iov = va_arg(ap, const struct iovec*);
 3933|       |
 3934|      0|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (3934:29): [True: 0, False: 0]
  ------------------
 3935|      0|                                if (iov)
  ------------------
  |  Branch (3935:37): [True: 0, False: 0]
  ------------------
 3936|      0|                                        r = command == _JSON_BUILD_IOVEC_BASE64 ? sd_json_variant_new_base64(&add, iov->iov_base, iov->iov_len) :
  ------------------
  |  Branch (3936:45): [True: 0, False: 0]
  ------------------
 3937|      0|                                                                                  sd_json_variant_new_hex(&add, iov->iov_base, iov->iov_len);
 3938|      0|                                else
 3939|      0|                                        r = sd_json_variant_new_string(&add, "");
 3940|      0|                                if (r < 0)
  ------------------
  |  Branch (3940:37): [True: 0, False: 0]
  ------------------
 3941|      0|                                        goto finish;
 3942|      0|                        }
 3943|       |
 3944|      0|                        n_subtract = 1;
 3945|       |
 3946|      0|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (3946:29): [True: 0, False: 0]
  ------------------
 3947|      0|                                current->expect = EXPECT_END;
 3948|      0|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (3948:34): [True: 0, False: 0]
  ------------------
 3949|      0|                                current->expect = EXPECT_OBJECT_KEY;
 3950|      0|                        else
 3951|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 3952|       |
 3953|      0|                        break;
 3954|      0|                }
 3955|       |
 3956|      0|                case _SD_JSON_BUILD_ID128:
  ------------------
  |  Branch (3956:17): [True: 0, False: 16.3k]
  ------------------
 3957|      0|                case _SD_JSON_BUILD_UUID: {
  ------------------
  |  Branch (3957:17): [True: 0, False: 16.3k]
  ------------------
 3958|      0|                        const sd_id128_t *id;
 3959|       |
 3960|      0|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (3960:29): [True: 0, False: 0]
  ------------------
 3961|      0|                                r = -EINVAL;
 3962|      0|                                goto finish;
 3963|      0|                        }
 3964|       |
 3965|      0|                        assert_se(id = va_arg(ap, sd_id128_t*));
  ------------------
  |  |   65|      0|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 3966|       |
 3967|      0|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (3967:29): [True: 0, False: 0]
  ------------------
 3968|      0|                                r = command == _SD_JSON_BUILD_ID128 ?
  ------------------
  |  Branch (3968:37): [True: 0, False: 0]
  ------------------
 3969|      0|                                        sd_json_variant_new_id128(&add, *id) :
 3970|      0|                                        sd_json_variant_new_uuid(&add, *id);
 3971|      0|                                if (r < 0)
  ------------------
  |  Branch (3971:37): [True: 0, False: 0]
  ------------------
 3972|      0|                                        goto finish;
 3973|      0|                        }
 3974|       |
 3975|      0|                        n_subtract = 1;
 3976|       |
 3977|      0|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (3977:29): [True: 0, False: 0]
  ------------------
 3978|      0|                                current->expect = EXPECT_END;
 3979|      0|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (3979:34): [True: 0, False: 0]
  ------------------
 3980|      0|                                current->expect = EXPECT_OBJECT_KEY;
 3981|      0|                        else
 3982|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 3983|       |
 3984|      0|                        break;
 3985|      0|                }
 3986|       |
 3987|      0|                case _SD_JSON_BUILD_BYTE_ARRAY: {
  ------------------
  |  Branch (3987:17): [True: 0, False: 16.3k]
  ------------------
 3988|      0|                        const void *array;
 3989|      0|                        size_t n;
 3990|       |
 3991|      0|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (3991:29): [True: 0, False: 0]
  ------------------
 3992|      0|                                r = -EINVAL;
 3993|      0|                                goto finish;
 3994|      0|                        }
 3995|       |
 3996|      0|                        array = va_arg(ap, const void*);
 3997|      0|                        n = va_arg(ap, size_t);
 3998|       |
 3999|      0|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (3999:29): [True: 0, False: 0]
  ------------------
 4000|      0|                                r = sd_json_variant_new_array_bytes(&add, array, n);
 4001|      0|                                if (r < 0)
  ------------------
  |  Branch (4001:37): [True: 0, False: 0]
  ------------------
 4002|      0|                                        goto finish;
 4003|      0|                        }
 4004|       |
 4005|      0|                        n_subtract = 1;
 4006|       |
 4007|      0|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (4007:29): [True: 0, False: 0]
  ------------------
 4008|      0|                                current->expect = EXPECT_END;
 4009|      0|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (4009:34): [True: 0, False: 0]
  ------------------
 4010|      0|                                current->expect = EXPECT_OBJECT_KEY;
 4011|      0|                        else
 4012|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 4013|       |
 4014|      0|                        break;
 4015|      0|                }
 4016|       |
 4017|      0|                case _JSON_BUILD_HW_ADDR: {
  ------------------
  |  Branch (4017:17): [True: 0, False: 16.3k]
  ------------------
 4018|      0|                        const struct hw_addr_data *hw_addr;
 4019|       |
 4020|      0|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (4020:29): [True: 0, False: 0]
  ------------------
 4021|      0|                                r = -EINVAL;
 4022|      0|                                goto finish;
 4023|      0|                        }
 4024|       |
 4025|      0|                        assert_se(hw_addr = va_arg(ap, struct hw_addr_data*));
  ------------------
  |  |   65|      0|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 4026|       |
 4027|      0|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (4027:29): [True: 0, False: 0]
  ------------------
 4028|      0|                                r = sd_json_variant_new_array_bytes(&add, hw_addr->bytes, hw_addr->length);
 4029|      0|                                if (r < 0)
  ------------------
  |  Branch (4029:37): [True: 0, False: 0]
  ------------------
 4030|      0|                                        goto finish;
 4031|      0|                        }
 4032|       |
 4033|      0|                        n_subtract = 1;
 4034|       |
 4035|      0|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (4035:29): [True: 0, False: 0]
  ------------------
 4036|      0|                                current->expect = EXPECT_END;
 4037|      0|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (4037:34): [True: 0, False: 0]
  ------------------
 4038|      0|                                current->expect = EXPECT_OBJECT_KEY;
 4039|      0|                        else
 4040|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 4041|       |
 4042|      0|                        break;
 4043|      0|                }
 4044|       |
 4045|      0|                case _JSON_BUILD_STRING_SET: {
  ------------------
  |  Branch (4045:17): [True: 0, False: 16.3k]
  ------------------
 4046|      0|                        Set *set;
 4047|       |
 4048|      0|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (4048:29): [True: 0, False: 0]
  ------------------
 4049|      0|                                r = -EINVAL;
 4050|      0|                                goto finish;
 4051|      0|                        }
 4052|       |
 4053|      0|                        set = va_arg(ap, Set*);
 4054|       |
 4055|      0|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (4055:29): [True: 0, False: 0]
  ------------------
 4056|      0|                                _cleanup_free_ char **sorted = NULL;
  ------------------
  |  |   82|      0|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 4057|       |
 4058|      0|                                r = set_dump_sorted(set, (void ***) &sorted, NULL);
 4059|      0|                                if (r < 0)
  ------------------
  |  Branch (4059:37): [True: 0, False: 0]
  ------------------
 4060|      0|                                        goto finish;
 4061|       |
 4062|      0|                                r = sd_json_variant_new_array_strv(&add, sorted);
 4063|      0|                                if (r < 0)
  ------------------
  |  Branch (4063:37): [True: 0, False: 0]
  ------------------
 4064|      0|                                        goto finish;
 4065|      0|                        }
 4066|       |
 4067|      0|                        n_subtract = 1;
 4068|       |
 4069|      0|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (4069:29): [True: 0, False: 0]
  ------------------
 4070|      0|                                current->expect = EXPECT_END;
 4071|      0|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (4071:34): [True: 0, False: 0]
  ------------------
 4072|      0|                                current->expect = EXPECT_OBJECT_KEY;
 4073|      0|                        else
 4074|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 4075|       |
 4076|      0|                        break;
 4077|      0|                }
 4078|       |
 4079|      0|                case _JSON_BUILD_STRING_ORDERED_SET: {
  ------------------
  |  Branch (4079:17): [True: 0, False: 16.3k]
  ------------------
 4080|      0|                        OrderedSet *set;
 4081|       |
 4082|      0|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (4082:29): [True: 0, False: 0]
  ------------------
 4083|      0|                                r = -EINVAL;
 4084|      0|                                goto finish;
 4085|      0|                        }
 4086|       |
 4087|      0|                        set = va_arg(ap, OrderedSet*);
 4088|       |
 4089|      0|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (4089:29): [True: 0, False: 0]
  ------------------
 4090|      0|                                _cleanup_free_ char **sv = NULL;
  ------------------
  |  |   82|      0|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 4091|       |
 4092|      0|                                sv = ordered_set_get_strv(set);
 4093|      0|                                if (!sv) {
  ------------------
  |  Branch (4093:37): [True: 0, False: 0]
  ------------------
 4094|      0|                                        r = -ENOMEM;
 4095|      0|                                        goto finish;
 4096|      0|                                }
 4097|       |
 4098|      0|                                r = sd_json_variant_new_array_strv(&add, sv);
 4099|      0|                                if (r < 0)
  ------------------
  |  Branch (4099:37): [True: 0, False: 0]
  ------------------
 4100|      0|                                        goto finish;
 4101|      0|                        }
 4102|       |
 4103|      0|                        n_subtract = 1;
 4104|       |
 4105|      0|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (4105:29): [True: 0, False: 0]
  ------------------
 4106|      0|                                current->expect = EXPECT_END;
 4107|      0|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (4107:34): [True: 0, False: 0]
  ------------------
 4108|      0|                                current->expect = EXPECT_OBJECT_KEY;
 4109|      0|                        else
 4110|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 4111|       |
 4112|      0|                        break;
 4113|      0|                }
 4114|       |
 4115|      0|                case _JSON_BUILD_DUAL_TIMESTAMP: {
  ------------------
  |  Branch (4115:17): [True: 0, False: 16.3k]
  ------------------
 4116|      0|                        dual_timestamp *ts;
 4117|       |
 4118|      0|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (4118:29): [True: 0, False: 0]
  ------------------
 4119|      0|                                r = -EINVAL;
 4120|      0|                                goto finish;
 4121|      0|                        }
 4122|       |
 4123|      0|                        ts = va_arg(ap, dual_timestamp*);
 4124|       |
 4125|      0|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (4125:29): [True: 0, False: 0]
  ------------------
 4126|      0|                                if (dual_timestamp_is_set(ts)) {
  ------------------
  |  Branch (4126:37): [True: 0, False: 0]
  ------------------
 4127|      0|                                        r = sd_json_buildo(
  ------------------
  |  |  276|      0|        sd_json_build((ret), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
  |  |  ------------------
  |  |  |  |  233|      0|#define SD_JSON_BUILD_OBJECT(...) _SD_JSON_BUILD_OBJECT_BEGIN, __VA_ARGS__, _SD_JSON_BUILD_OBJECT_END
  |  |  ------------------
  ------------------
 4128|      0|                                                        &add,
 4129|      0|                                                        SD_JSON_BUILD_PAIR("realtime", SD_JSON_BUILD_UNSIGNED(ts->realtime)),
 4130|      0|                                                        SD_JSON_BUILD_PAIR("monotonic", SD_JSON_BUILD_UNSIGNED(ts->monotonic)));
 4131|      0|                                        if (r < 0)
  ------------------
  |  Branch (4131:45): [True: 0, False: 0]
  ------------------
 4132|      0|                                                goto finish;
 4133|      0|                                } else
 4134|      0|                                        add = JSON_VARIANT_MAGIC_NULL;
  ------------------
  |  |   36|      0|#define JSON_VARIANT_MAGIC_NULL ((sd_json_variant*) _JSON_VARIANT_MAGIC_NULL)
  ------------------
 4135|      0|                        }
 4136|       |
 4137|      0|                        n_subtract = 1;
 4138|       |
 4139|      0|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (4139:29): [True: 0, False: 0]
  ------------------
 4140|      0|                                current->expect = EXPECT_END;
 4141|      0|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (4141:34): [True: 0, False: 0]
  ------------------
 4142|      0|                                current->expect = EXPECT_OBJECT_KEY;
 4143|      0|                        else
 4144|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 4145|       |
 4146|      0|                        break;
 4147|      0|                }
 4148|       |
 4149|      0|                case _JSON_BUILD_RATELIMIT: {
  ------------------
  |  Branch (4149:17): [True: 0, False: 16.3k]
  ------------------
 4150|      0|                        const RateLimit *rl;
 4151|       |
 4152|      0|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (4152:29): [True: 0, False: 0]
  ------------------
 4153|      0|                                r = -EINVAL;
 4154|      0|                                goto finish;
 4155|      0|                        }
 4156|       |
 4157|      0|                        rl = va_arg(ap, const RateLimit*);
 4158|       |
 4159|      0|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (4159:29): [True: 0, False: 0]
  ------------------
 4160|      0|                                if (ratelimit_configured(rl)) {
  ------------------
  |  Branch (4160:37): [True: 0, False: 0]
  ------------------
 4161|      0|                                        r = sd_json_buildo(
  ------------------
  |  |  276|      0|        sd_json_build((ret), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
  |  |  ------------------
  |  |  |  |  233|      0|#define SD_JSON_BUILD_OBJECT(...) _SD_JSON_BUILD_OBJECT_BEGIN, __VA_ARGS__, _SD_JSON_BUILD_OBJECT_END
  |  |  ------------------
  ------------------
 4162|      0|                                                        &add,
 4163|      0|                                                        SD_JSON_BUILD_PAIR("intervalUSec", SD_JSON_BUILD_UNSIGNED(rl->interval)),
 4164|      0|                                                        SD_JSON_BUILD_PAIR("burst", SD_JSON_BUILD_UNSIGNED(rl->burst)));
 4165|      0|                                        if (r < 0)
  ------------------
  |  Branch (4165:45): [True: 0, False: 0]
  ------------------
 4166|      0|                                                goto finish;
 4167|      0|                                } else
 4168|      0|                                        add = JSON_VARIANT_MAGIC_NULL;
  ------------------
  |  |   36|      0|#define JSON_VARIANT_MAGIC_NULL ((sd_json_variant*) _JSON_VARIANT_MAGIC_NULL)
  ------------------
 4169|      0|                        }
 4170|       |
 4171|      0|                        n_subtract = 1;
 4172|       |
 4173|      0|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (4173:29): [True: 0, False: 0]
  ------------------
 4174|      0|                                current->expect = EXPECT_END;
 4175|      0|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (4175:34): [True: 0, False: 0]
  ------------------
 4176|      0|                                current->expect = EXPECT_OBJECT_KEY;
 4177|      0|                        else
 4178|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 4179|       |
 4180|      0|                        break;
 4181|      0|                }
 4182|       |
 4183|      0|                case _JSON_BUILD_PIDREF: {
  ------------------
  |  Branch (4183:17): [True: 0, False: 16.3k]
  ------------------
 4184|      0|                        PidRef *pidref;
 4185|       |
 4186|      0|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (4186:29): [True: 0, False: 0]
  ------------------
 4187|      0|                                r = -EINVAL;
 4188|      0|                                goto finish;
 4189|      0|                        }
 4190|       |
 4191|      0|                        pidref = va_arg(ap, PidRef*);
 4192|       |
 4193|      0|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (4193:29): [True: 0, False: 0]
  ------------------
 4194|      0|                                r = json_variant_new_pidref(&add, pidref);
 4195|      0|                                if (r < 0)
  ------------------
  |  Branch (4195:37): [True: 0, False: 0]
  ------------------
 4196|      0|                                        goto finish;
 4197|      0|                        }
 4198|       |
 4199|      0|                        n_subtract = 1;
 4200|       |
 4201|      0|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (4201:29): [True: 0, False: 0]
  ------------------
 4202|      0|                                current->expect = EXPECT_END;
 4203|      0|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (4203:34): [True: 0, False: 0]
  ------------------
 4204|      0|                                current->expect = EXPECT_OBJECT_KEY;
 4205|      0|                        else
 4206|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 4207|       |
 4208|      0|                        break;
 4209|      0|                }
 4210|       |
 4211|      0|                case _JSON_BUILD_DEVNUM: {
  ------------------
  |  Branch (4211:17): [True: 0, False: 16.3k]
  ------------------
 4212|      0|                        dev_t devnum;
 4213|       |
 4214|      0|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (4214:29): [True: 0, False: 0]
  ------------------
 4215|      0|                                r = -EINVAL;
 4216|      0|                                goto finish;
 4217|      0|                        }
 4218|       |
 4219|      0|                        devnum = va_arg(ap, dev_t);
 4220|       |
 4221|      0|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (4221:29): [True: 0, False: 0]
  ------------------
 4222|      0|                                r = json_variant_new_devnum(&add, devnum);
 4223|      0|                                if (r < 0)
  ------------------
  |  Branch (4223:37): [True: 0, False: 0]
  ------------------
 4224|      0|                                        goto finish;
 4225|      0|                        }
 4226|       |
 4227|      0|                        n_subtract = 1;
 4228|       |
 4229|      0|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (4229:29): [True: 0, False: 0]
  ------------------
 4230|      0|                                current->expect = EXPECT_END;
 4231|      0|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (4231:34): [True: 0, False: 0]
  ------------------
 4232|      0|                                current->expect = EXPECT_OBJECT_KEY;
 4233|      0|                        else
 4234|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 4235|       |
 4236|      0|                        break;
 4237|      0|                }
 4238|       |
 4239|      0|                case _JSON_BUILD_TRISTATE: {
  ------------------
  |  Branch (4239:17): [True: 0, False: 16.3k]
  ------------------
 4240|      0|                        int tristate;
 4241|       |
 4242|      0|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (4242:29): [True: 0, False: 0]
  ------------------
 4243|      0|                                r = -EINVAL;
 4244|      0|                                goto finish;
 4245|      0|                        }
 4246|       |
 4247|      0|                        tristate = va_arg(ap, int);
 4248|       |
 4249|      0|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (4249:29): [True: 0, False: 0]
  ------------------
 4250|      0|                                if (tristate >= 0) {
  ------------------
  |  Branch (4250:37): [True: 0, False: 0]
  ------------------
 4251|      0|                                        r = sd_json_variant_new_boolean(&add, tristate);
 4252|      0|                                        if (r < 0)
  ------------------
  |  Branch (4252:45): [True: 0, False: 0]
  ------------------
 4253|      0|                                                goto finish;
 4254|      0|                                } else
 4255|      0|                                        add = JSON_VARIANT_MAGIC_NULL;
  ------------------
  |  |   36|      0|#define JSON_VARIANT_MAGIC_NULL ((sd_json_variant*) _JSON_VARIANT_MAGIC_NULL)
  ------------------
 4256|      0|                        }
 4257|       |
 4258|      0|                        n_subtract = 1;
 4259|       |
 4260|      0|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (4260:29): [True: 0, False: 0]
  ------------------
 4261|      0|                                current->expect = EXPECT_END;
 4262|      0|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (4262:34): [True: 0, False: 0]
  ------------------
 4263|      0|                                current->expect = EXPECT_OBJECT_KEY;
 4264|      0|                        else
 4265|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 4266|       |
 4267|      0|                        break;
 4268|      0|                }
 4269|       |
 4270|      0|                case _SD_JSON_BUILD_CALLBACK: {
  ------------------
  |  Branch (4270:17): [True: 0, False: 16.3k]
  ------------------
 4271|      0|                        sd_json_build_callback_t cb;
 4272|      0|                        void *userdata;
 4273|       |
 4274|      0|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (4274:29): [True: 0, False: 0]
  ------------------
 4275|      0|                                r = -EINVAL;
 4276|      0|                                goto finish;
 4277|      0|                        }
 4278|       |
 4279|      0|                        cb = va_arg(ap, sd_json_build_callback_t);
 4280|      0|                        userdata = va_arg(ap, void *);
 4281|       |
 4282|      0|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (4282:29): [True: 0, False: 0]
  ------------------
 4283|      0|                                if (cb) {
  ------------------
  |  Branch (4283:37): [True: 0, False: 0]
  ------------------
 4284|      0|                                        r = cb(&add, name, userdata);
 4285|      0|                                        if (r < 0)
  ------------------
  |  Branch (4285:45): [True: 0, False: 0]
  ------------------
 4286|      0|                                                goto finish;
 4287|      0|                                }
 4288|       |
 4289|      0|                                if (!add)
  ------------------
  |  Branch (4289:37): [True: 0, False: 0]
  ------------------
 4290|      0|                                        add = JSON_VARIANT_MAGIC_NULL;
  ------------------
  |  |   36|      0|#define JSON_VARIANT_MAGIC_NULL ((sd_json_variant*) _JSON_VARIANT_MAGIC_NULL)
  ------------------
 4291|       |
 4292|      0|                                name = NULL;
 4293|      0|                        }
 4294|       |
 4295|      0|                        n_subtract = 1;
 4296|       |
 4297|      0|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (4297:29): [True: 0, False: 0]
  ------------------
 4298|      0|                                current->expect = EXPECT_END;
 4299|      0|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (4299:34): [True: 0, False: 0]
  ------------------
 4300|      0|                                current->expect = EXPECT_OBJECT_KEY;
 4301|      0|                        else
 4302|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 4303|       |
 4304|      0|                        break;
 4305|      0|                }
 4306|       |
 4307|  2.73k|                case _SD_JSON_BUILD_OBJECT_BEGIN:
  ------------------
  |  Branch (4307:17): [True: 2.73k, False: 13.6k]
  ------------------
 4308|       |
 4309|  2.73k|                        if (!IN_SET(current->expect, EXPECT_TOPLEVEL, EXPECT_OBJECT_VALUE, EXPECT_ARRAY_ELEMENT)) {
  ------------------
  |  |  361|  2.73k|        ({                                                              \
  |  |  362|  2.73k|                bool _found = false;                                    \
  |  |  363|  2.73k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  2.73k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  2.73k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  2.73k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  2.73k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  2.73k|                switch (x) {                                            \
  |  |  368|  2.73k|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|  2.65k|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|  2.65k|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|  2.65k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|  2.73k|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|  2.73k|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|  2.73k|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 2.73k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 74, False: 2.65k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 2.65k, False: 74]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|  2.73k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|  2.73k|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|  2.73k|                        _found = true;                                  \
  |  |  370|  2.73k|                        break;                                          \
  |  |  371|  5.39k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 2.73k]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|  2.73k|                }                                                       \
  |  |  374|  2.73k|                _found;                                                 \
  |  |  375|  2.73k|        })
  ------------------
  |  Branch (4309:29): [True: 0, False: 2.73k]
  ------------------
 4310|      0|                                r = -EINVAL;
 4311|      0|                                goto finish;
 4312|      0|                        }
 4313|       |
 4314|  2.73k|                        if (!GREEDY_REALLOC(stack, n_stack+1)) {
  ------------------
  |  |  139|  2.73k|        greedy_realloc((void**) &(array), (need), sizeof((array)[0]))
  ------------------
  |  Branch (4314:29): [True: 0, False: 2.73k]
  ------------------
 4315|      0|                                r = -ENOMEM;
 4316|      0|                                goto finish;
 4317|      0|                        }
 4318|  2.73k|                        current = stack + n_stack - 1;
 4319|       |
 4320|  2.73k|                        if (current->expect == EXPECT_TOPLEVEL)
  ------------------
  |  Branch (4320:29): [True: 2.65k, False: 74]
  ------------------
 4321|  2.65k|                                current->expect = EXPECT_END;
 4322|     74|                        else if (current->expect == EXPECT_OBJECT_VALUE)
  ------------------
  |  Branch (4322:34): [True: 74, False: 0]
  ------------------
 4323|     74|                                current->expect = EXPECT_OBJECT_KEY;
 4324|      0|                        else
 4325|      0|                                assert(current->expect == EXPECT_ARRAY_ELEMENT);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
 4326|       |
 4327|  2.73k|                        stack[n_stack++] = (JsonStack) {
 4328|  2.73k|                                .expect = EXPECT_OBJECT_KEY,
 4329|  2.73k|                                .n_suppress = current->n_suppress != 0 ? SIZE_MAX : 0, /* If we shall suppress the
  ------------------
  |  Branch (4329:47): [True: 74, False: 2.65k]
  ------------------
 4330|       |                                                                                        * new object, then we should
 4331|       |                                                                                        * also suppress all object
 4332|       |                                                                                        * members. */
 4333|  2.73k|                        };
 4334|       |
 4335|  2.73k|                        break;
 4336|       |
 4337|  2.73k|                case _SD_JSON_BUILD_OBJECT_END:
  ------------------
  |  Branch (4337:17): [True: 2.73k, False: 13.6k]
  ------------------
 4338|       |
 4339|  2.73k|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4339:29): [True: 0, False: 2.73k]
  ------------------
 4340|      0|                                r = -EINVAL;
 4341|      0|                                goto finish;
 4342|      0|                        }
 4343|       |
 4344|  2.73k|                        assert(n_stack > 1);
  ------------------
  |  |   72|  2.73k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.73k|        do {                                                            \
  |  |  |  |   59|  2.73k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.73k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.73k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.73k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.73k|        } while (false)
  |  |  ------------------
  ------------------
 4345|       |
 4346|  2.73k|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (4346:29): [True: 2.65k, False: 74]
  ------------------
 4347|  2.65k|                                r = sd_json_variant_new_object(&add, current->elements, current->n_elements);
 4348|  2.65k|                                if (r < 0)
  ------------------
  |  Branch (4348:37): [True: 0, False: 2.65k]
  ------------------
 4349|      0|                                        goto finish;
 4350|  2.65k|                        }
 4351|       |
 4352|  2.73k|                        n_subtract = 1;
 4353|       |
 4354|  2.73k|                        json_stack_release(current);
 4355|  2.73k|                        n_stack--, current--;
 4356|       |
 4357|  2.73k|                        break;
 4358|       |
 4359|  2.37k|                case _SD_JSON_BUILD_PAIR: {
  ------------------
  |  Branch (4359:17): [True: 2.37k, False: 14.0k]
  ------------------
 4360|       |
 4361|  2.37k|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4361:29): [True: 0, False: 2.37k]
  ------------------
 4362|      0|                                r = -EINVAL;
 4363|      0|                                goto finish;
 4364|      0|                        }
 4365|       |
 4366|  2.37k|                        name = va_arg(ap, const char *);
 4367|       |
 4368|  2.37k|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (4368:29): [True: 2.29k, False: 74]
  ------------------
 4369|  2.29k|                                r = sd_json_variant_new_string(&add, name);
 4370|  2.29k|                                if (r < 0)
  ------------------
  |  Branch (4370:37): [True: 0, False: 2.29k]
  ------------------
 4371|      0|                                        goto finish;
 4372|  2.29k|                        }
 4373|       |
 4374|  2.37k|                        n_subtract = 1;
 4375|       |
 4376|  2.37k|                        current->expect = EXPECT_OBJECT_VALUE;
 4377|  2.37k|                        break;
 4378|  2.37k|                }
 4379|       |
 4380|  3.12k|                case _SD_JSON_BUILD_PAIR_CONDITION: {
  ------------------
  |  Branch (4380:17): [True: 3.12k, False: 13.2k]
  ------------------
 4381|  3.12k|                        bool b;
 4382|       |
 4383|  3.12k|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4383:29): [True: 0, False: 3.12k]
  ------------------
 4384|      0|                                r = -EINVAL;
 4385|      0|                                goto finish;
 4386|      0|                        }
 4387|       |
 4388|  3.12k|                        b = va_arg(ap, int);
 4389|  3.12k|                        name = va_arg(ap, const char *);
 4390|       |
 4391|  3.12k|                        if (b && current->n_suppress == 0) {
  ------------------
  |  Branch (4391:29): [True: 939, False: 2.18k]
  |  Branch (4391:34): [True: 939, False: 0]
  ------------------
 4392|    939|                                r = sd_json_variant_new_string(&add, name);
 4393|    939|                                if (r < 0)
  ------------------
  |  Branch (4393:37): [True: 0, False: 939]
  ------------------
 4394|      0|                                        goto finish;
 4395|    939|                        }
 4396|       |
 4397|  3.12k|                        n_subtract = 1; /* we generated one item */
 4398|       |
 4399|  3.12k|                        if (!b && current->n_suppress != SIZE_MAX)
  ------------------
  |  Branch (4399:29): [True: 2.18k, False: 939]
  |  Branch (4399:35): [True: 2.18k, False: 0]
  ------------------
 4400|  2.18k|                                current->n_suppress += 2; /* Suppress this one and the next item */
 4401|       |
 4402|  3.12k|                        current->expect = EXPECT_OBJECT_VALUE;
 4403|  3.12k|                        break;
 4404|  3.12k|                }
 4405|       |
 4406|      0|                case _JSON_BUILD_PAIR_INTEGER_NON_ZERO:
  ------------------
  |  Branch (4406:17): [True: 0, False: 16.3k]
  ------------------
 4407|      0|                case _JSON_BUILD_PAIR_INTEGER_NON_NEGATIVE: {
  ------------------
  |  Branch (4407:17): [True: 0, False: 16.3k]
  ------------------
 4408|      0|                        const char *n;
 4409|      0|                        int64_t i;
 4410|      0|                        bool include;
 4411|       |
 4412|      0|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4412:29): [True: 0, False: 0]
  ------------------
 4413|      0|                                r = -EINVAL;
 4414|      0|                                goto finish;
 4415|      0|                        }
 4416|       |
 4417|      0|                        n = va_arg(ap, const char*);
 4418|      0|                        i = va_arg(ap, int64_t);
 4419|       |
 4420|      0|                        if (command == _JSON_BUILD_PAIR_INTEGER_NON_ZERO)
  ------------------
  |  Branch (4420:29): [True: 0, False: 0]
  ------------------
 4421|      0|                                include = i != 0;
 4422|      0|                        else if (command == _JSON_BUILD_PAIR_INTEGER_NON_NEGATIVE)
  ------------------
  |  Branch (4422:34): [True: 0, False: 0]
  ------------------
 4423|      0|                                include = i >= 0;
 4424|      0|                        else
 4425|      0|                                assert_not_reached();
  ------------------
  |  |   76|      0|        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4426|       |
 4427|      0|                        if (include && current->n_suppress == 0) {
  ------------------
  |  Branch (4427:29): [True: 0, False: 0]
  |  Branch (4427:40): [True: 0, False: 0]
  ------------------
 4428|      0|                                r = sd_json_variant_new_string(&add, n);
 4429|      0|                                if (r < 0)
  ------------------
  |  Branch (4429:37): [True: 0, False: 0]
  ------------------
 4430|      0|                                        goto finish;
 4431|       |
 4432|      0|                                r = sd_json_variant_new_integer(&add_more, i);
 4433|      0|                                if (r < 0)
  ------------------
  |  Branch (4433:37): [True: 0, False: 0]
  ------------------
 4434|      0|                                        goto finish;
 4435|      0|                        }
 4436|       |
 4437|      0|                        n_subtract = 2; /* we generated two item */
 4438|       |
 4439|      0|                        current->expect = EXPECT_OBJECT_KEY;
 4440|      0|                        break;
 4441|      0|                }
 4442|       |
 4443|      0|                case _JSON_BUILD_PAIR_UNSIGNED_NON_ZERO:
  ------------------
  |  Branch (4443:17): [True: 0, False: 16.3k]
  ------------------
 4444|      0|                case _JSON_BUILD_PAIR_UNSIGNED_NOT_EQUAL: {
  ------------------
  |  Branch (4444:17): [True: 0, False: 16.3k]
  ------------------
 4445|      0|                        const char *n;
 4446|      0|                        uint64_t u, eq;
 4447|       |
 4448|      0|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4448:29): [True: 0, False: 0]
  ------------------
 4449|      0|                                r = -EINVAL;
 4450|      0|                                goto finish;
 4451|      0|                        }
 4452|       |
 4453|      0|                        n = va_arg(ap, const char *);
 4454|      0|                        u = va_arg(ap, uint64_t);
 4455|      0|                        eq = command == _JSON_BUILD_PAIR_UNSIGNED_NON_ZERO ? 0 : va_arg(ap, uint64_t);
  ------------------
  |  Branch (4455:30): [True: 0, False: 0]
  ------------------
 4456|       |
 4457|      0|                        if (u != eq && current->n_suppress == 0) {
  ------------------
  |  Branch (4457:29): [True: 0, False: 0]
  |  Branch (4457:40): [True: 0, False: 0]
  ------------------
 4458|      0|                                r = sd_json_variant_new_string(&add, n);
 4459|      0|                                if (r < 0)
  ------------------
  |  Branch (4459:37): [True: 0, False: 0]
  ------------------
 4460|      0|                                        goto finish;
 4461|       |
 4462|      0|                                r = sd_json_variant_new_unsigned(&add_more, u);
 4463|      0|                                if (r < 0)
  ------------------
  |  Branch (4463:37): [True: 0, False: 0]
  ------------------
 4464|      0|                                        goto finish;
 4465|      0|                        }
 4466|       |
 4467|      0|                        n_subtract = 2; /* we generated two item */
 4468|       |
 4469|      0|                        current->expect = EXPECT_OBJECT_KEY;
 4470|      0|                        break;
 4471|      0|                }
 4472|       |
 4473|      0|                case _JSON_BUILD_PAIR_FINITE_USEC: {
  ------------------
  |  Branch (4473:17): [True: 0, False: 16.3k]
  ------------------
 4474|      0|                        const char *n;
 4475|      0|                        usec_t u;
 4476|       |
 4477|      0|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4477:29): [True: 0, False: 0]
  ------------------
 4478|      0|                                r = -EINVAL;
 4479|      0|                                goto finish;
 4480|      0|                        }
 4481|       |
 4482|      0|                        n = va_arg(ap, const char *);
 4483|      0|                        u = va_arg(ap, usec_t);
 4484|       |
 4485|      0|                        if (u != USEC_INFINITY && current->n_suppress == 0) {
  ------------------
  |  |   35|      0|#define USEC_INFINITY ((usec_t) UINT64_MAX)
  ------------------
  |  Branch (4485:29): [True: 0, False: 0]
  |  Branch (4485:51): [True: 0, False: 0]
  ------------------
 4486|      0|                                r = sd_json_variant_new_string(&add, n);
 4487|      0|                                if (r < 0)
  ------------------
  |  Branch (4487:37): [True: 0, False: 0]
  ------------------
 4488|      0|                                        goto finish;
 4489|       |
 4490|      0|                                r = sd_json_variant_new_unsigned(&add_more, u);
 4491|      0|                                if (r < 0)
  ------------------
  |  Branch (4491:37): [True: 0, False: 0]
  ------------------
 4492|      0|                                        goto finish;
 4493|      0|                        }
 4494|       |
 4495|      0|                        n_subtract = 2; /* we generated two item */
 4496|       |
 4497|      0|                        current->expect = EXPECT_OBJECT_KEY;
 4498|      0|                        break;
 4499|      0|                }
 4500|       |
 4501|      0|                case _JSON_BUILD_PAIR_STRING_NON_EMPTY: {
  ------------------
  |  Branch (4501:17): [True: 0, False: 16.3k]
  ------------------
 4502|      0|                        const char *n, *s;
 4503|       |
 4504|      0|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4504:29): [True: 0, False: 0]
  ------------------
 4505|      0|                                r = -EINVAL;
 4506|      0|                                goto finish;
 4507|      0|                        }
 4508|       |
 4509|      0|                        n = va_arg(ap, const char *);
 4510|      0|                        s = va_arg(ap, const char *);
 4511|       |
 4512|      0|                        if (!isempty(s) && current->n_suppress == 0) {
  ------------------
  |  Branch (4512:29): [True: 0, False: 0]
  |  Branch (4512:44): [True: 0, False: 0]
  ------------------
 4513|      0|                                r = sd_json_variant_new_string(&add, n);
 4514|      0|                                if (r < 0)
  ------------------
  |  Branch (4514:37): [True: 0, False: 0]
  ------------------
 4515|      0|                                        goto finish;
 4516|       |
 4517|      0|                                r = sd_json_variant_new_string(&add_more, s);
 4518|      0|                                if (r < 0)
  ------------------
  |  Branch (4518:37): [True: 0, False: 0]
  ------------------
 4519|      0|                                        goto finish;
 4520|      0|                        }
 4521|       |
 4522|      0|                        n_subtract = 2; /* we generated two item */
 4523|       |
 4524|      0|                        current->expect = EXPECT_OBJECT_KEY;
 4525|      0|                        break;
 4526|      0|                }
 4527|       |
 4528|      0|                case _JSON_BUILD_PAIR_STRV_NON_EMPTY:
  ------------------
  |  Branch (4528:17): [True: 0, False: 16.3k]
  ------------------
 4529|      0|                case _JSON_BUILD_PAIR_STRV_ENV_PAIR_NON_EMPTY: {
  ------------------
  |  Branch (4529:17): [True: 0, False: 16.3k]
  ------------------
 4530|      0|                        const char *n;
 4531|      0|                        char **l;
 4532|       |
 4533|      0|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4533:29): [True: 0, False: 0]
  ------------------
 4534|      0|                                r = -EINVAL;
 4535|      0|                                goto finish;
 4536|      0|                        }
 4537|       |
 4538|      0|                        n = va_arg(ap, const char *);
 4539|      0|                        l = va_arg(ap, char **);
 4540|       |
 4541|      0|                        if (!strv_isempty(l) && current->n_suppress == 0) {
  ------------------
  |  Branch (4541:29): [True: 0, False: 0]
  |  Branch (4541:49): [True: 0, False: 0]
  ------------------
 4542|      0|                                _cleanup_strv_free_ char **el = NULL;
  ------------------
  |  |   21|      0|#define _cleanup_strv_free_ _cleanup_(strv_freep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 4543|       |
 4544|      0|                                if (command == _JSON_BUILD_PAIR_STRV_ENV_PAIR_NON_EMPTY) {
  ------------------
  |  Branch (4544:37): [True: 0, False: 0]
  ------------------
 4545|      0|                                        r = strv_env_get_merged(l, &el);
 4546|      0|                                        if (r < 0)
  ------------------
  |  Branch (4546:45): [True: 0, False: 0]
  ------------------
 4547|      0|                                                goto finish;
 4548|      0|                                }
 4549|       |
 4550|      0|                                r = sd_json_variant_new_string(&add, n);
 4551|      0|                                if (r < 0)
  ------------------
  |  Branch (4551:37): [True: 0, False: 0]
  ------------------
 4552|      0|                                        goto finish;
 4553|       |
 4554|      0|                                r = sd_json_variant_new_array_strv(&add_more, el ?: l);
  ------------------
  |  Branch (4554:79): [True: 0, False: 0]
  ------------------
 4555|      0|                                if (r < 0)
  ------------------
  |  Branch (4555:37): [True: 0, False: 0]
  ------------------
 4556|      0|                                        goto finish;
 4557|      0|                        }
 4558|       |
 4559|      0|                        n_subtract = 2; /* we generated two item */
 4560|       |
 4561|      0|                        current->expect = EXPECT_OBJECT_KEY;
 4562|      0|                        break;
 4563|      0|                }
 4564|       |
 4565|      0|                case _JSON_BUILD_PAIR_VARIANT_NON_NULL: {
  ------------------
  |  Branch (4565:17): [True: 0, False: 16.3k]
  ------------------
 4566|      0|                        sd_json_variant *v;
 4567|      0|                        const char *n;
 4568|       |
 4569|      0|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4569:29): [True: 0, False: 0]
  ------------------
 4570|      0|                                r = -EINVAL;
 4571|      0|                                goto finish;
 4572|      0|                        }
 4573|       |
 4574|      0|                        n = va_arg(ap, const char *);
 4575|      0|                        v = va_arg(ap, sd_json_variant *);
 4576|       |
 4577|      0|                        if (v && !sd_json_variant_is_null(v) && current->n_suppress == 0) {
  ------------------
  |  Branch (4577:29): [True: 0, False: 0]
  |  Branch (4577:34): [True: 0, False: 0]
  |  Branch (4577:65): [True: 0, False: 0]
  ------------------
 4578|      0|                                r = sd_json_variant_new_string(&add, n);
 4579|      0|                                if (r < 0)
  ------------------
  |  Branch (4579:37): [True: 0, False: 0]
  ------------------
 4580|      0|                                        goto finish;
 4581|       |
 4582|      0|                                add_more = sd_json_variant_ref(v);
 4583|      0|                        }
 4584|       |
 4585|      0|                        n_subtract = 2; /* we generated two item */
 4586|       |
 4587|      0|                        current->expect = EXPECT_OBJECT_KEY;
 4588|      0|                        break;
 4589|      0|                }
 4590|       |
 4591|      0|                case _JSON_BUILD_PAIR_BYTE_ARRAY_NON_EMPTY: {
  ------------------
  |  Branch (4591:17): [True: 0, False: 16.3k]
  ------------------
 4592|      0|                        const void *array;
 4593|      0|                        size_t sz;
 4594|      0|                        const char *n;
 4595|       |
 4596|      0|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4596:29): [True: 0, False: 0]
  ------------------
 4597|      0|                                r = -EINVAL;
 4598|      0|                                goto finish;
 4599|      0|                        }
 4600|       |
 4601|      0|                        n = va_arg(ap, const char *);
 4602|      0|                        array = va_arg(ap, const void*);
 4603|      0|                        sz = va_arg(ap, size_t);
 4604|       |
 4605|      0|                        if (sz > 0 && current->n_suppress == 0) {
  ------------------
  |  Branch (4605:29): [True: 0, False: 0]
  |  Branch (4605:39): [True: 0, False: 0]
  ------------------
 4606|      0|                                r = sd_json_variant_new_string(&add, n);
 4607|      0|                                if (r < 0)
  ------------------
  |  Branch (4607:37): [True: 0, False: 0]
  ------------------
 4608|      0|                                        goto finish;
 4609|       |
 4610|      0|                                r = sd_json_variant_new_array_bytes(&add_more, array, sz);
 4611|      0|                                if (r < 0)
  ------------------
  |  Branch (4611:37): [True: 0, False: 0]
  ------------------
 4612|      0|                                        goto finish;
 4613|      0|                        }
 4614|       |
 4615|      0|                        n_subtract = 2; /* we generated two item */
 4616|       |
 4617|      0|                        current->expect = EXPECT_OBJECT_KEY;
 4618|      0|                        break;
 4619|      0|                }
 4620|       |
 4621|      0|                case _JSON_BUILD_PAIR_IN4_ADDR_NON_NULL: {
  ------------------
  |  Branch (4621:17): [True: 0, False: 16.3k]
  ------------------
 4622|      0|                        const struct in_addr *a;
 4623|      0|                        const char *n;
 4624|       |
 4625|      0|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4625:29): [True: 0, False: 0]
  ------------------
 4626|      0|                                r = -EINVAL;
 4627|      0|                                goto finish;
 4628|      0|                        }
 4629|       |
 4630|      0|                        n = va_arg(ap, const char *);
 4631|      0|                        a = va_arg(ap, const struct in_addr *);
 4632|       |
 4633|      0|                        if (a && in4_addr_is_set(a) && current->n_suppress == 0) {
  ------------------
  |  Branch (4633:29): [True: 0, False: 0]
  |  Branch (4633:34): [True: 0, False: 0]
  |  Branch (4633:56): [True: 0, False: 0]
  ------------------
 4634|      0|                                r = sd_json_variant_new_string(&add, n);
 4635|      0|                                if (r < 0)
  ------------------
  |  Branch (4635:37): [True: 0, False: 0]
  ------------------
 4636|      0|                                        goto finish;
 4637|       |
 4638|      0|                                r = sd_json_variant_new_array_bytes(&add_more, a, sizeof(struct in_addr));
 4639|      0|                                if (r < 0)
  ------------------
  |  Branch (4639:37): [True: 0, False: 0]
  ------------------
 4640|      0|                                        goto finish;
 4641|      0|                        }
 4642|       |
 4643|      0|                        n_subtract = 2; /* we generated two item */
 4644|       |
 4645|      0|                        current->expect = EXPECT_OBJECT_KEY;
 4646|      0|                        break;
 4647|      0|                }
 4648|       |
 4649|      0|                case _JSON_BUILD_PAIR_IN6_ADDR_NON_NULL: {
  ------------------
  |  Branch (4649:17): [True: 0, False: 16.3k]
  ------------------
 4650|      0|                        const struct in6_addr *a;
 4651|      0|                        const char *n;
 4652|       |
 4653|      0|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4653:29): [True: 0, False: 0]
  ------------------
 4654|      0|                                r = -EINVAL;
 4655|      0|                                goto finish;
 4656|      0|                        }
 4657|       |
 4658|      0|                        n = va_arg(ap, const char *);
 4659|      0|                        a = va_arg(ap, const struct in6_addr *);
 4660|       |
 4661|      0|                        if (a && in6_addr_is_set(a) && current->n_suppress == 0) {
  ------------------
  |  Branch (4661:29): [True: 0, False: 0]
  |  Branch (4661:34): [True: 0, False: 0]
  |  Branch (4661:56): [True: 0, False: 0]
  ------------------
 4662|      0|                                r = sd_json_variant_new_string(&add, n);
 4663|      0|                                if (r < 0)
  ------------------
  |  Branch (4663:37): [True: 0, False: 0]
  ------------------
 4664|      0|                                        goto finish;
 4665|       |
 4666|      0|                                r = sd_json_variant_new_array_bytes(&add_more, a, sizeof(struct in6_addr));
 4667|      0|                                if (r < 0)
  ------------------
  |  Branch (4667:37): [True: 0, False: 0]
  ------------------
 4668|      0|                                        goto finish;
 4669|      0|                        }
 4670|       |
 4671|      0|                        n_subtract = 2; /* we generated two item */
 4672|       |
 4673|      0|                        current->expect = EXPECT_OBJECT_KEY;
 4674|      0|                        break;
 4675|      0|                }
 4676|       |
 4677|      0|                case _JSON_BUILD_PAIR_IN_ADDR_NON_NULL: {
  ------------------
  |  Branch (4677:17): [True: 0, False: 16.3k]
  ------------------
 4678|      0|                        const union in_addr_union *a;
 4679|      0|                        const char *n;
 4680|      0|                        int f;
 4681|       |
 4682|      0|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4682:29): [True: 0, False: 0]
  ------------------
 4683|      0|                                r = -EINVAL;
 4684|      0|                                goto finish;
 4685|      0|                        }
 4686|       |
 4687|      0|                        n = va_arg(ap, const char *);
 4688|      0|                        a = va_arg(ap, const union in_addr_union *);
 4689|      0|                        f = va_arg(ap, int);
 4690|       |
 4691|      0|                        if (a && in_addr_is_set(f, a) && current->n_suppress == 0) {
  ------------------
  |  Branch (4691:29): [True: 0, False: 0]
  |  Branch (4691:34): [True: 0, False: 0]
  |  Branch (4691:58): [True: 0, False: 0]
  ------------------
 4692|      0|                                r = sd_json_variant_new_string(&add, n);
 4693|      0|                                if (r < 0)
  ------------------
  |  Branch (4693:37): [True: 0, False: 0]
  ------------------
 4694|      0|                                        goto finish;
 4695|       |
 4696|      0|                                r = sd_json_variant_new_array_bytes(&add_more, a->bytes, FAMILY_ADDRESS_SIZE(f));
 4697|      0|                                if (r < 0)
  ------------------
  |  Branch (4697:37): [True: 0, False: 0]
  ------------------
 4698|      0|                                        goto finish;
 4699|      0|                        }
 4700|       |
 4701|      0|                        n_subtract = 2; /* we generated two item */
 4702|       |
 4703|      0|                        current->expect = EXPECT_OBJECT_KEY;
 4704|      0|                        break;
 4705|      0|                }
 4706|       |
 4707|      0|                case _JSON_BUILD_PAIR_ETHER_ADDR_NON_NULL: {
  ------------------
  |  Branch (4707:17): [True: 0, False: 16.3k]
  ------------------
 4708|      0|                        const struct ether_addr *a;
 4709|      0|                        const char *n;
 4710|       |
 4711|      0|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4711:29): [True: 0, False: 0]
  ------------------
 4712|      0|                                r = -EINVAL;
 4713|      0|                                goto finish;
 4714|      0|                        }
 4715|       |
 4716|      0|                        n = va_arg(ap, const char *);
 4717|      0|                        a = va_arg(ap, const struct ether_addr *);
 4718|       |
 4719|      0|                        if (a && !ether_addr_is_null(a) && current->n_suppress == 0) {
  ------------------
  |  Branch (4719:29): [True: 0, False: 0]
  |  Branch (4719:34): [True: 0, False: 0]
  |  Branch (4719:60): [True: 0, False: 0]
  ------------------
 4720|      0|                                r = sd_json_variant_new_string(&add, n);
 4721|      0|                                if (r < 0)
  ------------------
  |  Branch (4721:37): [True: 0, False: 0]
  ------------------
 4722|      0|                                        goto finish;
 4723|       |
 4724|      0|                                r = sd_json_variant_new_array_bytes(&add_more, a->ether_addr_octet, sizeof(struct ether_addr));
 4725|      0|                                if (r < 0)
  ------------------
  |  Branch (4725:37): [True: 0, False: 0]
  ------------------
 4726|      0|                                        goto finish;
 4727|      0|                        }
 4728|       |
 4729|      0|                        n_subtract = 2; /* we generated two item */
 4730|       |
 4731|      0|                        current->expect = EXPECT_OBJECT_KEY;
 4732|      0|                        break;
 4733|      0|                }
 4734|       |
 4735|      0|                case _JSON_BUILD_PAIR_HW_ADDR_NON_NULL: {
  ------------------
  |  Branch (4735:17): [True: 0, False: 16.3k]
  ------------------
 4736|      0|                        const struct hw_addr_data *a;
 4737|      0|                        const char *n;
 4738|       |
 4739|      0|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4739:29): [True: 0, False: 0]
  ------------------
 4740|      0|                                r = -EINVAL;
 4741|      0|                                goto finish;
 4742|      0|                        }
 4743|       |
 4744|      0|                        n = va_arg(ap, const char *);
 4745|      0|                        a = va_arg(ap, const struct hw_addr_data *);
 4746|       |
 4747|      0|                        if (a && !hw_addr_is_null(a) && current->n_suppress == 0) {
  ------------------
  |  Branch (4747:29): [True: 0, False: 0]
  |  Branch (4747:34): [True: 0, False: 0]
  |  Branch (4747:57): [True: 0, False: 0]
  ------------------
 4748|      0|                                r = sd_json_variant_new_string(&add, n);
 4749|      0|                                if (r < 0)
  ------------------
  |  Branch (4749:37): [True: 0, False: 0]
  ------------------
 4750|      0|                                        goto finish;
 4751|       |
 4752|      0|                                r = sd_json_variant_new_array_bytes(&add_more, a->bytes, a->length);
 4753|      0|                                if (r < 0)
  ------------------
  |  Branch (4753:37): [True: 0, False: 0]
  ------------------
 4754|      0|                                        goto finish;
 4755|      0|                        }
 4756|       |
 4757|      0|                        n_subtract = 2; /* we generated two item */
 4758|       |
 4759|      0|                        current->expect = EXPECT_OBJECT_KEY;
 4760|      0|                        break;
 4761|      0|                }
 4762|       |
 4763|      0|                case _JSON_BUILD_PAIR_DUAL_TIMESTAMP_NON_NULL: {
  ------------------
  |  Branch (4763:17): [True: 0, False: 16.3k]
  ------------------
 4764|      0|                        const dual_timestamp *ts;
 4765|      0|                        const char *n;
 4766|       |
 4767|      0|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4767:29): [True: 0, False: 0]
  ------------------
 4768|      0|                                r = -EINVAL;
 4769|      0|                                goto finish;
 4770|      0|                        }
 4771|       |
 4772|      0|                        n = va_arg(ap, const char*);
 4773|      0|                        ts = va_arg(ap, const dual_timestamp*);
 4774|       |
 4775|      0|                        if (ts && dual_timestamp_is_set(ts) && current->n_suppress == 0) {
  ------------------
  |  Branch (4775:29): [True: 0, False: 0]
  |  Branch (4775:35): [True: 0, False: 0]
  |  Branch (4775:64): [True: 0, False: 0]
  ------------------
 4776|      0|                                r = sd_json_variant_new_string(&add, n);
 4777|      0|                                if (r < 0)
  ------------------
  |  Branch (4777:37): [True: 0, False: 0]
  ------------------
 4778|      0|                                        goto finish;
 4779|       |
 4780|      0|                                r = sd_json_buildo(&add_more,
  ------------------
  |  |  276|      0|        sd_json_build((ret), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
  |  |  ------------------
  |  |  |  |  233|      0|#define SD_JSON_BUILD_OBJECT(...) _SD_JSON_BUILD_OBJECT_BEGIN, __VA_ARGS__, _SD_JSON_BUILD_OBJECT_END
  |  |  ------------------
  ------------------
 4781|      0|                                                SD_JSON_BUILD_PAIR("realtime", SD_JSON_BUILD_UNSIGNED(ts->realtime)),
 4782|      0|                                                SD_JSON_BUILD_PAIR("monotonic", SD_JSON_BUILD_UNSIGNED(ts->monotonic)));
 4783|      0|                                if (r < 0)
  ------------------
  |  Branch (4783:37): [True: 0, False: 0]
  ------------------
 4784|      0|                                        goto finish;
 4785|      0|                        }
 4786|       |
 4787|      0|                        n_subtract = 2; /* we generated two item */
 4788|       |
 4789|      0|                        current->expect = EXPECT_OBJECT_KEY;
 4790|      0|                        break;
 4791|      0|                }
 4792|       |
 4793|      0|                case _JSON_BUILD_PAIR_RATELIMIT_ENABLED: {
  ------------------
  |  Branch (4793:17): [True: 0, False: 16.3k]
  ------------------
 4794|      0|                        const RateLimit *rl;
 4795|      0|                        const char *n;
 4796|       |
 4797|      0|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4797:29): [True: 0, False: 0]
  ------------------
 4798|      0|                                r = -EINVAL;
 4799|      0|                                goto finish;
 4800|      0|                        }
 4801|       |
 4802|      0|                        n = va_arg(ap, const char*);
 4803|      0|                        rl = va_arg(ap, const RateLimit*);
 4804|       |
 4805|      0|                        if (rl && ratelimit_configured(rl) && current->n_suppress == 0) {
  ------------------
  |  Branch (4805:29): [True: 0, False: 0]
  |  Branch (4805:35): [True: 0, False: 0]
  |  Branch (4805:63): [True: 0, False: 0]
  ------------------
 4806|      0|                                r = sd_json_variant_new_string(&add, n);
 4807|      0|                                if (r < 0)
  ------------------
  |  Branch (4807:37): [True: 0, False: 0]
  ------------------
 4808|      0|                                        goto finish;
 4809|       |
 4810|      0|                                r = sd_json_buildo(&add_more,
  ------------------
  |  |  276|      0|        sd_json_build((ret), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
  |  |  ------------------
  |  |  |  |  233|      0|#define SD_JSON_BUILD_OBJECT(...) _SD_JSON_BUILD_OBJECT_BEGIN, __VA_ARGS__, _SD_JSON_BUILD_OBJECT_END
  |  |  ------------------
  ------------------
 4811|      0|                                                SD_JSON_BUILD_PAIR("intervalUSec", SD_JSON_BUILD_UNSIGNED(rl->interval)),
 4812|      0|                                                SD_JSON_BUILD_PAIR("burst", SD_JSON_BUILD_UNSIGNED(rl->burst)));
 4813|      0|                                if (r < 0)
  ------------------
  |  Branch (4813:37): [True: 0, False: 0]
  ------------------
 4814|      0|                                        goto finish;
 4815|      0|                        }
 4816|       |
 4817|      0|                        n_subtract = 2; /* we generated two item */
 4818|       |
 4819|      0|                        current->expect = EXPECT_OBJECT_KEY;
 4820|      0|                        break;
 4821|      0|                }
 4822|       |
 4823|      0|                case _JSON_BUILD_PAIR_PIDREF_NON_NULL: {
  ------------------
  |  Branch (4823:17): [True: 0, False: 16.3k]
  ------------------
 4824|      0|                        PidRef *p;
 4825|      0|                        const char *n;
 4826|       |
 4827|      0|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4827:29): [True: 0, False: 0]
  ------------------
 4828|      0|                                r = -EINVAL;
 4829|      0|                                goto finish;
 4830|      0|                        }
 4831|       |
 4832|      0|                        n = va_arg(ap, const char*);
 4833|      0|                        p = va_arg(ap, PidRef*);
 4834|       |
 4835|      0|                        if (pidref_is_set(p) && current->n_suppress == 0) {
  ------------------
  |  Branch (4835:29): [True: 0, False: 0]
  |  Branch (4835:49): [True: 0, False: 0]
  ------------------
 4836|      0|                                r = sd_json_variant_new_string(&add, n);
 4837|      0|                                if (r < 0)
  ------------------
  |  Branch (4837:37): [True: 0, False: 0]
  ------------------
 4838|      0|                                        goto finish;
 4839|       |
 4840|      0|                                r = json_variant_new_pidref(&add_more, p);
 4841|      0|                                if (r < 0)
  ------------------
  |  Branch (4841:37): [True: 0, False: 0]
  ------------------
 4842|      0|                                        goto finish;
 4843|      0|                        }
 4844|       |
 4845|      0|                        n_subtract = 2; /* we generated two items */
 4846|       |
 4847|      0|                        current->expect = EXPECT_OBJECT_KEY;
 4848|      0|                        break;
 4849|      0|                }
 4850|       |
 4851|      0|                case _JSON_BUILD_PAIR_CALLBACK_NON_NULL: {
  ------------------
  |  Branch (4851:17): [True: 0, False: 16.3k]
  ------------------
 4852|      0|                        sd_json_build_callback_t cb;
 4853|      0|                        void *userdata;
 4854|      0|                        const char *n;
 4855|       |
 4856|      0|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4856:29): [True: 0, False: 0]
  ------------------
 4857|      0|                                r = -EINVAL;
 4858|      0|                                goto finish;
 4859|      0|                        }
 4860|       |
 4861|      0|                        n = va_arg(ap, const char*);
 4862|      0|                        cb = va_arg(ap, sd_json_build_callback_t);
 4863|      0|                        userdata = va_arg(ap, void*);
 4864|       |
 4865|      0|                        if (current->n_suppress == 0) {
  ------------------
  |  Branch (4865:29): [True: 0, False: 0]
  ------------------
 4866|      0|                                if (cb) {
  ------------------
  |  Branch (4866:37): [True: 0, False: 0]
  ------------------
 4867|      0|                                        r = cb(&add_more, n, userdata);
 4868|      0|                                        if (r < 0)
  ------------------
  |  Branch (4868:45): [True: 0, False: 0]
  ------------------
 4869|      0|                                                goto finish;
 4870|      0|                                }
 4871|       |
 4872|      0|                                if (add_more) {
  ------------------
  |  Branch (4872:37): [True: 0, False: 0]
  ------------------
 4873|      0|                                        r = sd_json_variant_new_string(&add, n);
 4874|      0|                                        if (r < 0)
  ------------------
  |  Branch (4874:45): [True: 0, False: 0]
  ------------------
 4875|      0|                                                goto finish;
 4876|      0|                                }
 4877|      0|                        }
 4878|       |
 4879|      0|                        n_subtract = 2; /* we generated two item */
 4880|       |
 4881|      0|                        current->expect = EXPECT_OBJECT_KEY;
 4882|      0|                        break;
 4883|      0|                }
 4884|       |
 4885|      0|                case _JSON_BUILD_PAIR_BASE64_NON_EMPTY:
  ------------------
  |  Branch (4885:17): [True: 0, False: 16.3k]
  ------------------
 4886|      0|                case _JSON_BUILD_PAIR_BASE32HEX_NON_EMPTY:
  ------------------
  |  Branch (4886:17): [True: 0, False: 16.3k]
  ------------------
 4887|      0|                case _JSON_BUILD_PAIR_HEX_NON_EMPTY:
  ------------------
  |  Branch (4887:17): [True: 0, False: 16.3k]
  ------------------
 4888|      0|                case _JSON_BUILD_PAIR_OCTESCAPE_NON_EMPTY: {
  ------------------
  |  Branch (4888:17): [True: 0, False: 16.3k]
  ------------------
 4889|      0|                        const void *p;
 4890|      0|                        size_t sz;
 4891|      0|                        const char *n;
 4892|       |
 4893|      0|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4893:29): [True: 0, False: 0]
  ------------------
 4894|      0|                                r = -EINVAL;
 4895|      0|                                goto finish;
 4896|      0|                        }
 4897|       |
 4898|      0|                        n = va_arg(ap, const char*);
 4899|      0|                        p = va_arg(ap, const void *);
 4900|      0|                        sz = va_arg(ap, size_t);
 4901|       |
 4902|      0|                        if (sz > 0 && current->n_suppress == 0) {
  ------------------
  |  Branch (4902:29): [True: 0, False: 0]
  |  Branch (4902:39): [True: 0, False: 0]
  ------------------
 4903|      0|                                r = sd_json_variant_new_string(&add, n);
 4904|      0|                                if (r < 0)
  ------------------
  |  Branch (4904:37): [True: 0, False: 0]
  ------------------
 4905|      0|                                        goto finish;
 4906|       |
 4907|      0|                                r = command == _JSON_BUILD_PAIR_BASE64_NON_EMPTY    ? sd_json_variant_new_base64(&add_more, p, sz) :
  ------------------
  |  Branch (4907:37): [True: 0, False: 0]
  ------------------
 4908|      0|                                    command == _JSON_BUILD_PAIR_BASE32HEX_NON_EMPTY ? sd_json_variant_new_base32hex(&add_more, p, sz) :
  ------------------
  |  Branch (4908:37): [True: 0, False: 0]
  ------------------
 4909|      0|                                    command == _JSON_BUILD_PAIR_HEX_NON_EMPTY       ? sd_json_variant_new_hex(&add_more, p, sz) :
  ------------------
  |  Branch (4909:37): [True: 0, False: 0]
  ------------------
 4910|      0|                                                                                      sd_json_variant_new_octescape(&add_more, p, sz);
 4911|      0|                                if (r < 0)
  ------------------
  |  Branch (4911:37): [True: 0, False: 0]
  ------------------
 4912|      0|                                        goto finish;
 4913|      0|                        }
 4914|       |
 4915|      0|                        n_subtract = 2; /* we generated two item */
 4916|       |
 4917|      0|                        current->expect = EXPECT_OBJECT_KEY;
 4918|      0|                        break;
 4919|      0|                }
 4920|       |
 4921|      0|                case _JSON_BUILD_PAIR_TRISTATE_NON_NULL: {
  ------------------
  |  Branch (4921:17): [True: 0, False: 16.3k]
  ------------------
 4922|      0|                        int tristate;
 4923|      0|                        const char *n;
 4924|       |
 4925|      0|                        if (current->expect != EXPECT_OBJECT_KEY) {
  ------------------
  |  Branch (4925:29): [True: 0, False: 0]
  ------------------
 4926|      0|                                r = -EINVAL;
 4927|      0|                                goto finish;
 4928|      0|                        }
 4929|       |
 4930|      0|                        n = va_arg(ap, const char*);
 4931|      0|                        tristate = va_arg(ap, int);
 4932|       |
 4933|      0|                        if (tristate >= 0 && current->n_suppress == 0) {
  ------------------
  |  Branch (4933:29): [True: 0, False: 0]
  |  Branch (4933:46): [True: 0, False: 0]
  ------------------
 4934|      0|                                r = sd_json_variant_new_string(&add, n);
 4935|      0|                                if (r < 0)
  ------------------
  |  Branch (4935:37): [True: 0, False: 0]
  ------------------
 4936|      0|                                        goto finish;
 4937|       |
 4938|      0|                                r = sd_json_variant_new_boolean(&add_more, tristate);
 4939|      0|                                if (r < 0)
  ------------------
  |  Branch (4939:37): [True: 0, False: 0]
  ------------------
 4940|      0|                                        goto finish;
 4941|      0|                        }
 4942|       |
 4943|      0|                        n_subtract = 2; /* we generated two item */
 4944|       |
 4945|      0|                        current->expect = EXPECT_OBJECT_KEY;
 4946|      0|                        break;
 4947|      0|                }
 4948|  16.3k|                }
 4949|       |
 4950|       |                /* If variants were generated, add them to our current variant, but only if we are not supposed to suppress additions */
 4951|  16.3k|                if (add && current->n_suppress == 0) {
  ------------------
  |  Branch (4951:21): [True: 9.12k, False: 7.24k]
  |  Branch (4951:28): [True: 9.12k, False: 0]
  ------------------
 4952|  9.12k|                        if (!GREEDY_REALLOC(current->elements, current->n_elements + 1 + !!add_more)) {
  ------------------
  |  |  139|  9.12k|        greedy_realloc((void**) &(array), (need), sizeof((array)[0]))
  ------------------
  |  Branch (4952:29): [True: 0, False: 9.12k]
  ------------------
 4953|      0|                                r = -ENOMEM;
 4954|      0|                                goto finish;
 4955|      0|                        }
 4956|       |
 4957|  9.12k|                        current->elements[current->n_elements++] = TAKE_PTR(add);
  ------------------
  |  |  388|  9.12k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  9.12k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  9.12k|        ({                                                       \
  |  |  |  |  |  |  381|  9.12k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  9.12k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  9.12k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  9.12k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  9.12k|                _var_;                                           \
  |  |  |  |  |  |  386|  9.12k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4958|  9.12k|                        if (add_more)
  ------------------
  |  Branch (4958:29): [True: 0, False: 9.12k]
  ------------------
 4959|      0|                                current->elements[current->n_elements++] = TAKE_PTR(add_more);
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4960|  9.12k|                }
 4961|       |
 4962|       |                /* If we are supposed to suppress items, let's subtract how many items where generated from
 4963|       |                 * that counter. Except if the counter is SIZE_MAX, i.e. we shall suppress an infinite number
 4964|       |                 * of elements on this stack level */
 4965|  16.3k|                if (current->n_suppress != SIZE_MAX) {
  ------------------
  |  Branch (4965:21): [True: 16.2k, False: 148]
  ------------------
 4966|  16.2k|                        if (current->n_suppress <= n_subtract) /* Saturated */
  ------------------
  |  Branch (4966:29): [True: 13.9k, False: 2.25k]
  ------------------
 4967|  13.9k|                                current->n_suppress = 0;
 4968|  2.25k|                        else
 4969|  2.25k|                                current->n_suppress -= n_subtract;
 4970|  16.2k|                }
 4971|  16.3k|        }
 4972|       |
 4973|  2.65k|done:
 4974|  2.65k|        assert(n_stack == 1);
  ------------------
  |  |   72|  2.65k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.65k|        do {                                                            \
  |  |  |  |   59|  2.65k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.65k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.65k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.65k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.65k|        } while (false)
  |  |  ------------------
  ------------------
 4975|  2.65k|        assert(stack[0].n_elements == 1);
  ------------------
  |  |   72|  2.65k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.65k|        do {                                                            \
  |  |  |  |   59|  2.65k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.65k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.65k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.65k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.65k|        } while (false)
  |  |  ------------------
  ------------------
 4976|       |
 4977|  2.65k|        *ret = sd_json_variant_ref(stack[0].elements[0]);
 4978|  2.65k|        r = 0;
 4979|       |
 4980|  2.65k|finish:
 4981|  5.31k|        for (size_t i = 0; i < n_stack; i++)
  ------------------
  |  Branch (4981:28): [True: 2.65k, False: 2.65k]
  ------------------
 4982|  2.65k|                json_stack_release(stack + i);
 4983|       |
 4984|  2.65k|        free(stack);
 4985|       |
 4986|  2.65k|        return r;
 4987|  2.65k|}
sd_json_build:
 4989|    909|_public_ int sd_json_build(sd_json_variant **ret, ...) {
 4990|    909|        va_list ap;
 4991|    909|        int r;
 4992|       |
 4993|    909|        va_start(ap, ret);
 4994|    909|        r = sd_json_buildv(ret, ap);
 4995|    909|        va_end(ap);
 4996|       |
 4997|    909|        return r;
 4998|    909|}
sd_json_dispatch_full:
 5083|     80|                const char **reterr_bad_field) {
 5084|     80|        size_t m;
 5085|     80|        int r, done = 0;
 5086|     80|        bool *found;
 5087|       |
 5088|     80|        if (!sd_json_variant_is_object(v)) {
  ------------------
  |  Branch (5088:13): [True: 0, False: 80]
  ------------------
 5089|      0|                json_log(v, flags, 0, "JSON variant is not an object.");
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 5090|       |
 5091|      0|                if (flags & SD_JSON_PERMISSIVE)
  ------------------
  |  Branch (5091:21): [True: 0, False: 0]
  ------------------
 5092|      0|                        return 0;
 5093|       |
 5094|      0|                if (reterr_bad_field)
  ------------------
  |  Branch (5094:21): [True: 0, False: 0]
  ------------------
 5095|      0|                        *reterr_bad_field = NULL;
 5096|       |
 5097|      0|                return -EINVAL;
 5098|      0|        }
 5099|       |
 5100|     80|        m = 0;
 5101|  4.68k|        for (const sd_json_dispatch_field *p = table; p && p->name; p++)
  ------------------
  |  Branch (5101:55): [True: 4.68k, False: 0]
  |  Branch (5101:60): [True: 4.60k, False: 80]
  ------------------
 5102|  4.60k|                m++;
 5103|       |
 5104|     80|        found = newa0(bool, m);
  ------------------
  |  |   36|     80|        ({                                                              \
  |  |   37|     80|                size_t _n_ = (n);                                       \
  |  |   38|     80|                assert_se(MUL_ASSIGN_SAFE(&_n_, sizeof(t)));            \
  |  |  ------------------
  |  |  |  |   65|     80|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|     80|        do {                                                            \
  |  |  |  |  |  |   59|     80|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   95|     80|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 80]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   60|     80|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     80|        } while (false)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   39|     80|                (t*) alloca0(_n_);                                      \
  |  |  ------------------
  |  |  |  |  151|     80|        ({                                              \
  |  |  |  |  152|     80|                char *_new_;                            \
  |  |  |  |  153|     80|                size_t _len_ = n;                       \
  |  |  |  |  154|     80|                _new_ = alloca_safe(_len_);             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|     80|        ({                                                              \
  |  |  |  |  |  |   23|     80|                size_t _nn_ = (n);                                      \
  |  |  |  |  |  |   24|     80|                assert(_nn_ <= ALLOCA_MAX);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|     80|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|     80|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|     80|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|     80|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 80]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|     80|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|     80|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   25|     80|                alloca(_nn_ == 0 ? 1 : _nn_);                           \
  |  |  |  |  |  |   26|     80|        })                                                              \
  |  |  |  |  ------------------
  |  |  |  |  155|     80|                memset(_new_, 0, _len_);                \
  |  |  |  |  156|     80|        })
  |  |  ------------------
  |  |   40|     80|        })
  ------------------
 5105|       |
 5106|     80|        size_t n = sd_json_variant_elements(v);
 5107|    514|        for (size_t i = 0; i < n; i += 2) {
  ------------------
  |  Branch (5107:28): [True: 434, False: 80]
  ------------------
 5108|    434|                sd_json_variant *key, *value;
 5109|    434|                const sd_json_dispatch_field *p;
 5110|       |
 5111|    434|                assert_se(key = sd_json_variant_by_index(v, i));
  ------------------
  |  |   65|    434|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    434|        do {                                                            \
  |  |  |  |   59|    434|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    434|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 434]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    434|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    434|        } while (false)
  |  |  ------------------
  ------------------
 5112|    434|                assert_se(value = sd_json_variant_by_index(v, i+1));
  ------------------
  |  |   65|    434|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    434|        do {                                                            \
  |  |  |  |   59|    434|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    434|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 434]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    434|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    434|        } while (false)
  |  |  ------------------
  ------------------
 5113|       |
 5114|  6.45k|                for (p = table; p && p->name; p++)
  ------------------
  |  Branch (5114:33): [True: 6.45k, False: 0]
  |  Branch (5114:38): [True: 6.45k, False: 0]
  ------------------
 5115|  6.45k|                        if (p->name == POINTER_MAX ||
  ------------------
  |  |  159|  12.9k|#define POINTER_MAX ((void*) UINTPTR_MAX)
  ------------------
  |  Branch (5115:29): [True: 0, False: 6.45k]
  ------------------
 5116|  6.45k|                            streq_ptr(sd_json_variant_string(key), p->name))
  ------------------
  |  Branch (5116:29): [True: 434, False: 6.02k]
  ------------------
 5117|    434|                                break;
 5118|       |
 5119|    434|                if (p && p->name) { /* Found a matching entry! 🙂 */
  ------------------
  |  Branch (5119:21): [True: 434, False: 0]
  |  Branch (5119:26): [True: 434, False: 0]
  ------------------
 5120|    434|                        sd_json_dispatch_flags_t merged_flags;
 5121|       |
 5122|    434|                        merged_flags = flags | p->flags;
 5123|       |
 5124|       |                        /* If an explicit type is specified, verify it matches */
 5125|    434|                        if (p->type != _SD_JSON_VARIANT_TYPE_INVALID &&
  ------------------
  |  Branch (5125:29): [True: 434, False: 0]
  ------------------
 5126|    434|                            !sd_json_variant_has_type(value, p->type) &&
  ------------------
  |  Branch (5126:29): [True: 0, False: 434]
  ------------------
 5127|    434|                            !(FLAGS_SET(merged_flags, SD_JSON_NULLABLE) && sd_json_variant_is_null(value))) {
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (5127:76): [True: 0, False: 0]
  ------------------
 5128|       |
 5129|      0|                                json_log(value, merged_flags, 0,
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 5130|      0|                                         "Object field '%s' has wrong type %s, expected %s.", sd_json_variant_string(key),
 5131|      0|                                         sd_json_variant_type_to_string(sd_json_variant_type(value)), sd_json_variant_type_to_string(p->type));
 5132|       |
 5133|      0|                                if (merged_flags & SD_JSON_PERMISSIVE)
  ------------------
  |  Branch (5133:37): [True: 0, False: 0]
  ------------------
 5134|      0|                                        continue;
 5135|       |
 5136|      0|                                if (reterr_bad_field)
  ------------------
  |  Branch (5136:37): [True: 0, False: 0]
  ------------------
 5137|      0|                                        *reterr_bad_field = p->name;
 5138|       |
 5139|      0|                                return -EINVAL;
 5140|      0|                        }
 5141|       |
 5142|       |                        /* If the SD_JSON_REFUSE_NULL flag is specified, insist the field is not "null". Note
 5143|       |                         * that this provides overlapping functionality with the type check above. */
 5144|    434|                        if (FLAGS_SET(merged_flags, SD_JSON_REFUSE_NULL) && sd_json_variant_is_null(value)) {
  ------------------
  |  |  414|    868|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 434]
  |  |  ------------------
  ------------------
  |  Branch (5144:77): [True: 0, False: 0]
  ------------------
 5145|       |
 5146|      0|                                json_log(value, merged_flags, 0,
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 5147|      0|                                         "Object field '%s' may not be null.", sd_json_variant_string(key));
 5148|       |
 5149|      0|                                if (merged_flags & SD_JSON_PERMISSIVE)
  ------------------
  |  Branch (5149:37): [True: 0, False: 0]
  ------------------
 5150|      0|                                        continue;
 5151|       |
 5152|      0|                                if (reterr_bad_field)
  ------------------
  |  Branch (5152:37): [True: 0, False: 0]
  ------------------
 5153|      0|                                        *reterr_bad_field = p->name;
 5154|       |
 5155|      0|                                return -EINVAL;
 5156|      0|                        }
 5157|       |
 5158|    434|                        if (found[p-table]) {
  ------------------
  |  Branch (5158:29): [True: 0, False: 434]
  ------------------
 5159|      0|                                json_log(value, merged_flags, 0, "Duplicate object field '%s'.", sd_json_variant_string(key));
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 5160|       |
 5161|      0|                                if (merged_flags & SD_JSON_PERMISSIVE)
  ------------------
  |  Branch (5161:37): [True: 0, False: 0]
  ------------------
 5162|      0|                                        continue;
 5163|       |
 5164|      0|                                if (reterr_bad_field)
  ------------------
  |  Branch (5164:37): [True: 0, False: 0]
  ------------------
 5165|      0|                                        *reterr_bad_field = p->name;
 5166|       |
 5167|      0|                                return -ENOTUNIQ;
 5168|      0|                        }
 5169|       |
 5170|    434|                        found[p-table] = true;
 5171|       |
 5172|    434|                        if (p->callback) {
  ------------------
  |  Branch (5172:29): [True: 434, False: 0]
  ------------------
 5173|    434|                                r = p->callback(sd_json_variant_string(key), value, merged_flags, dispatch_userdata(p, userdata));
 5174|    434|                                if (r < 0) {
  ------------------
  |  Branch (5174:37): [True: 0, False: 434]
  ------------------
 5175|      0|                                        if (merged_flags & SD_JSON_PERMISSIVE)
  ------------------
  |  Branch (5175:45): [True: 0, False: 0]
  ------------------
 5176|      0|                                                continue;
 5177|       |
 5178|      0|                                        if (reterr_bad_field)
  ------------------
  |  Branch (5178:45): [True: 0, False: 0]
  ------------------
 5179|      0|                                                *reterr_bad_field = sd_json_variant_string(key);
 5180|       |
 5181|      0|                                        return r;
 5182|      0|                                }
 5183|    434|                        }
 5184|       |
 5185|    434|                        done++;
 5186|       |
 5187|    434|                } else { /* Didn't find a matching entry! ☹️ */
 5188|       |
 5189|      0|                        if (bad) {
  ------------------
  |  Branch (5189:29): [True: 0, False: 0]
  ------------------
 5190|      0|                                r = bad(sd_json_variant_string(key), value, flags, userdata);
 5191|      0|                                if (r < 0) {
  ------------------
  |  Branch (5191:37): [True: 0, False: 0]
  ------------------
 5192|      0|                                        if (flags & SD_JSON_PERMISSIVE)
  ------------------
  |  Branch (5192:45): [True: 0, False: 0]
  ------------------
 5193|      0|                                                continue;
 5194|       |
 5195|      0|                                        if (reterr_bad_field)
  ------------------
  |  Branch (5195:45): [True: 0, False: 0]
  ------------------
 5196|      0|                                                *reterr_bad_field = sd_json_variant_string(key);
 5197|       |
 5198|      0|                                        return r;
 5199|      0|                                } else
 5200|      0|                                        done++;
 5201|       |
 5202|      0|                        } else  {
 5203|      0|                                if (flags & SD_JSON_ALLOW_EXTENSIONS) {
  ------------------
  |  Branch (5203:37): [True: 0, False: 0]
  ------------------
 5204|      0|                                        json_log(value, flags|SD_JSON_DEBUG, 0, "Unrecognized object field '%s', assuming extension.", sd_json_variant_string(key));
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 5205|      0|                                        continue;
 5206|      0|                                }
 5207|       |
 5208|      0|                                json_log(value, flags, 0, "Unexpected object field '%s'.", sd_json_variant_string(key));
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 5209|      0|                                if (flags & SD_JSON_PERMISSIVE)
  ------------------
  |  Branch (5209:37): [True: 0, False: 0]
  ------------------
 5210|      0|                                        continue;
 5211|       |
 5212|      0|                                if (reterr_bad_field)
  ------------------
  |  Branch (5212:37): [True: 0, False: 0]
  ------------------
 5213|      0|                                        *reterr_bad_field = sd_json_variant_string(key);
 5214|       |
 5215|      0|                                return -EADDRNOTAVAIL;
 5216|      0|                        }
 5217|      0|                }
 5218|    434|        }
 5219|       |
 5220|  4.68k|        for (const sd_json_dispatch_field *p = table; p && p->name; p++) {
  ------------------
  |  Branch (5220:55): [True: 4.68k, False: 0]
  |  Branch (5220:60): [True: 4.60k, False: 80]
  ------------------
 5221|  4.60k|                sd_json_dispatch_flags_t merged_flags = p->flags | flags;
 5222|       |
 5223|  4.60k|                if ((merged_flags & SD_JSON_MANDATORY) && !found[p-table]) {
  ------------------
  |  Branch (5223:21): [True: 0, False: 4.60k]
  |  Branch (5223:59): [True: 0, False: 0]
  ------------------
 5224|      0|                        json_log(v, merged_flags, 0, "Missing object field '%s'.", p->name);
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 5225|       |
 5226|      0|                        if ((merged_flags & SD_JSON_PERMISSIVE))
  ------------------
  |  Branch (5226:29): [True: 0, False: 0]
  ------------------
 5227|      0|                                continue;
 5228|       |
 5229|      0|                        if (reterr_bad_field)
  ------------------
  |  Branch (5229:29): [True: 0, False: 0]
  ------------------
 5230|      0|                                *reterr_bad_field = p->name;
 5231|       |
 5232|      0|                        return -ENXIO;
 5233|      0|                }
 5234|  4.60k|        }
 5235|       |
 5236|     80|        return done;
 5237|     80|}
sd_json_dispatch:
 5243|     80|                void *userdata) {
 5244|       |
 5245|     80|        return sd_json_dispatch_full(v, table, NULL, flags, userdata, NULL);
 5246|     80|}
sd_json_dispatch_tristate:
 5274|     40|_public_ int sd_json_dispatch_tristate(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) {
 5275|     40|        int *b = userdata;
 5276|       |
 5277|     40|        assert_return(variant, -EINVAL);
  ------------------
  |  |   18|     40|        do {                                                            \
  |  |   19|     40|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|     40|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|     40|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 40, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|     40|        ? (true)                                                        \
  |  |  |  |   15|     40|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 40]
  |  |  ------------------
  |  |   20|     40|                        return (r);                                     \
  |  |   21|     40|        } while (false)
  ------------------
 5278|     40|        assert_return(userdata, -EINVAL);
  ------------------
  |  |   18|     40|        do {                                                            \
  |  |   19|     40|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|     40|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|     40|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 40, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|     40|        ? (true)                                                        \
  |  |  |  |   15|     40|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 40]
  |  |  ------------------
  |  |   20|     40|                        return (r);                                     \
  |  |   21|     40|        } while (false)
  ------------------
 5279|       |
 5280|     40|        if (sd_json_variant_is_null(variant)) {
  ------------------
  |  Branch (5280:13): [True: 0, False: 40]
  ------------------
 5281|      0|                *b = -1;
 5282|      0|                return 0;
 5283|      0|        }
 5284|       |
 5285|     40|        if (!sd_json_variant_is_boolean(variant))
  ------------------
  |  Branch (5285:13): [True: 0, False: 40]
  ------------------
 5286|      0|                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a boolean.", strna(name));
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 5287|       |
 5288|     40|        *b = sd_json_variant_boolean(variant);
 5289|     40|        return 0;
 5290|     40|}
sd_json_dispatch_uid_gid:
 5576|    120|_public_ int sd_json_dispatch_uid_gid(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) {
 5577|    120|        uid_t *uid = userdata;
 5578|    120|        uint64_t k;
 5579|       |
 5580|    120|        assert_return(variant, -EINVAL);
  ------------------
  |  |   18|    120|        do {                                                            \
  |  |   19|    120|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|    120|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|    120|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 120, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|    120|        ? (true)                                                        \
  |  |  |  |   15|    120|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 120]
  |  |  ------------------
  |  |   20|    120|                        return (r);                                     \
  |  |   21|    120|        } while (false)
  ------------------
 5581|    120|        assert_return(userdata, -EINVAL);
  ------------------
  |  |   18|    120|        do {                                                            \
  |  |   19|    120|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|    120|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|    120|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 120, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|    120|        ? (true)                                                        \
  |  |  |  |   15|    120|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 120]
  |  |  ------------------
  |  |   20|    120|                        return (r);                                     \
  |  |   21|    120|        } while (false)
  ------------------
 5582|       |
 5583|    120|        assert_cc(sizeof(uid_t) == sizeof(uint32_t));
  ------------------
  |  |  142|    120|#define assert_cc(expr) _Static_assert(expr, #expr)
  ------------------
 5584|    120|        assert_cc(sizeof(gid_t) == sizeof(uint32_t));
  ------------------
  |  |  142|    120|#define assert_cc(expr) _Static_assert(expr, #expr)
  ------------------
 5585|       |
 5586|    120|        DISABLE_WARNING_TYPE_LIMITS;
  ------------------
  |  |   39|    120|        _Pragma("GCC diagnostic push");                                 \
  |  |   40|    120|        _Pragma("GCC diagnostic ignored \"-Wtype-limits\"")
  ------------------
 5587|    120|        assert_cc((UID_INVALID < (uid_t) 0) == (GID_INVALID < (gid_t) 0));
  ------------------
  |  |  142|    120|#define assert_cc(expr) _Static_assert(expr, #expr)
  ------------------
 5588|    120|        REENABLE_WARNING;
 5589|       |
 5590|    120|        if (sd_json_variant_is_null(variant)) {
  ------------------
  |  Branch (5590:13): [True: 0, False: 120]
  ------------------
 5591|      0|                *uid = UID_INVALID;
  ------------------
  |  |   72|      0|#define UID_INVALID ((uid_t) -1)
  ------------------
 5592|      0|                return 0;
 5593|      0|        }
 5594|       |
 5595|    120|        if (!sd_json_variant_is_unsigned(variant))
  ------------------
  |  Branch (5595:13): [True: 0, False: 120]
  ------------------
 5596|      0|                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an integer.", strna(name));
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 5597|       |
 5598|    120|        k = sd_json_variant_unsigned(variant);
 5599|    120|        if (k > UINT32_MAX || !uid_is_valid(k))
  ------------------
  |  Branch (5599:13): [True: 0, False: 120]
  |  Branch (5599:31): [True: 0, False: 120]
  ------------------
 5600|      0|                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a valid UID/GID.", strna(name));
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 5601|       |
 5602|    120|        *uid = k;
 5603|    120|        return 0;
 5604|    120|}
sd_json_variant_is_normalized:
 5765|  7.41k|_public_ int sd_json_variant_is_normalized(sd_json_variant *v) {
 5766|       |        /* For now, let's consider anything containing numbers not expressible as integers as non-normalized.
 5767|       |         * That's because we cannot sensibly compare them due to accuracy issues, nor even store them if they
 5768|       |         * are too large. */
 5769|  7.41k|        if (sd_json_variant_is_real(v) && !sd_json_variant_is_integer(v) && !sd_json_variant_is_unsigned(v))
  ------------------
  |  Branch (5769:13): [True: 3.66k, False: 3.74k]
  |  Branch (5769:43): [True: 0, False: 3.66k]
  |  Branch (5769:77): [True: 0, False: 0]
  ------------------
 5770|      0|                return false;
 5771|       |
 5772|       |        /* The concept only applies to variants that include other variants, i.e. objects and arrays. All
 5773|       |         * others are normalized anyway. */
 5774|  7.41k|        if (!sd_json_variant_is_object(v) && !sd_json_variant_is_array(v))
  ------------------
  |  Branch (5774:13): [True: 7.41k, False: 0]
  |  Branch (5774:46): [True: 5.74k, False: 1.67k]
  ------------------
 5775|  5.74k|                return true;
 5776|       |
 5777|       |        /* Empty objects/arrays don't include any other variant, hence are always normalized too */
 5778|  1.67k|        if (sd_json_variant_elements(v) == 0)
  ------------------
  |  Branch (5778:13): [True: 0, False: 1.67k]
  ------------------
 5779|      0|                return true;
 5780|       |
 5781|  1.67k|        return v->normalized; /* For everything else there's an explicit boolean we maintain */
 5782|  1.67k|}
sd-json.c:json_variant_new:
  300|  6.27k|static int json_variant_new(sd_json_variant **ret, sd_json_variant_type_t type, size_t space) {
  301|  6.27k|        sd_json_variant *v;
  302|       |
  303|  6.27k|        assert_return(ret, -EINVAL);
  ------------------
  |  |   18|  6.27k|        do {                                                            \
  |  |   19|  6.27k|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|  6.27k|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|  6.27k|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 6.27k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|  6.27k|        ? (true)                                                        \
  |  |  |  |   15|  6.27k|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 6.27k]
  |  |  ------------------
  |  |   20|  6.27k|                        return (r);                                     \
  |  |   21|  6.27k|        } while (false)
  ------------------
  304|       |
  305|  6.27k|        v = malloc0(MAX(sizeof(sd_json_variant),
  ------------------
  |  |   46|  12.5k|#define malloc0(n) (calloc(1, (n) ?: 1))
  |  |  ------------------
  |  |  |  Branch (46:31): [True: 6.27k, False: 0]
  |  |  |  Branch (46:32): [True: 1.73k, False: 4.53k]
  |  |  ------------------
  ------------------
  306|  6.27k|                        offsetof(sd_json_variant, value) + space));
  307|  6.27k|        if (!v)
  ------------------
  |  Branch (307:13): [True: 0, False: 0]
  ------------------
  308|      0|                return -ENOMEM;
  309|       |
  310|      0|        v->n_ref = 1;
  311|      0|        v->type = type;
  312|       |
  313|      0|        *ret = v;
  314|      0|        return 0;
  315|      0|}
sd-json.c:json_variant_depth:
  230|  14.8k|static uint16_t json_variant_depth(sd_json_variant *v) {
  231|       |
  232|  14.8k|        v = json_variant_dereference(v);
  233|  14.8k|        if (!v)
  ------------------
  |  Branch (233:13): [True: 0, False: 14.8k]
  ------------------
  234|      0|                return 0;
  235|       |
  236|  14.8k|        if (!json_variant_is_regular(v))
  ------------------
  |  Branch (236:13): [True: 213, False: 14.6k]
  ------------------
  237|    213|                return 0;
  238|       |
  239|  14.6k|        return v->depth;
  240|  14.8k|}
sd-json.c:json_variant_set:
  502|  14.8k|static void json_variant_set(sd_json_variant *a, sd_json_variant *b) {
  503|  14.8k|        assert(a);
  ------------------
  |  |   72|  14.8k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  14.8k|        do {                                                            \
  |  |  |  |   59|  14.8k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  14.8k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 14.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  14.8k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  14.8k|        } while (false)
  |  |  ------------------
  ------------------
  504|       |
  505|  14.8k|        b = json_variant_dereference(b);
  506|  14.8k|        if (!b) {
  ------------------
  |  Branch (506:13): [True: 0, False: 14.8k]
  ------------------
  507|      0|                a->type = SD_JSON_VARIANT_NULL;
  508|      0|                return;
  509|      0|        }
  510|       |
  511|  14.8k|        a->type = sd_json_variant_type(b);
  512|  14.8k|        switch (a->type) {
  513|       |
  514|      0|        case SD_JSON_VARIANT_INTEGER:
  ------------------
  |  Branch (514:9): [True: 0, False: 14.8k]
  ------------------
  515|      0|                a->value.integer = sd_json_variant_integer(b);
  516|      0|                break;
  517|       |
  518|  3.66k|        case SD_JSON_VARIANT_UNSIGNED:
  ------------------
  |  Branch (518:9): [True: 3.66k, False: 11.1k]
  ------------------
  519|  3.66k|                a->value.unsig = sd_json_variant_unsigned(b);
  520|  3.66k|                break;
  521|       |
  522|      0|        case SD_JSON_VARIANT_REAL:
  ------------------
  |  Branch (522:9): [True: 0, False: 14.8k]
  ------------------
  523|      0|                a->value.real = sd_json_variant_real(b);
  524|      0|                break;
  525|       |
  526|     40|        case SD_JSON_VARIANT_BOOLEAN:
  ------------------
  |  Branch (526:9): [True: 40, False: 14.7k]
  ------------------
  527|     40|                a->value.boolean = sd_json_variant_boolean(b);
  528|     40|                break;
  529|       |
  530|  9.44k|        case SD_JSON_VARIANT_STRING: {
  ------------------
  |  Branch (530:9): [True: 9.44k, False: 5.37k]
  ------------------
  531|  9.44k|                const char *s;
  532|       |
  533|  9.44k|                assert_se(s = sd_json_variant_string(b));
  ------------------
  |  |   65|  9.44k|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  9.44k|        do {                                                            \
  |  |  |  |   59|  9.44k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  9.44k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 9.44k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  9.44k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  9.44k|        } while (false)
  |  |  ------------------
  ------------------
  534|       |
  535|       |                /* Short strings we can store inline */
  536|  9.44k|                if (strnlen(s, INLINE_STRING_MAX+1) <= INLINE_STRING_MAX) {
  ------------------
  |  |  131|  9.44k|#define INLINE_STRING_MAX (sizeof(sd_json_variant) - offsetof(sd_json_variant, string) - 1U)
  ------------------
                              if (strnlen(s, INLINE_STRING_MAX+1) <= INLINE_STRING_MAX) {
  ------------------
  |  |  131|  9.44k|#define INLINE_STRING_MAX (sizeof(sd_json_variant) - offsetof(sd_json_variant, string) - 1U)
  ------------------
  |  Branch (536:21): [True: 4.47k, False: 4.97k]
  ------------------
  537|  4.47k|                        strcpy(a->string, s);
  538|  4.47k|                        break;
  539|  4.47k|                }
  540|       |
  541|       |                /* For longer strings, use a reference… */
  542|  4.97k|                _fallthrough_;
  ------------------
  |  |  111|  4.97k|#  define _fallthrough_ __attribute__((__fallthrough__))
  ------------------
  543|  4.97k|        }
  544|       |
  545|  6.64k|        case SD_JSON_VARIANT_ARRAY:
  ------------------
  |  Branch (545:9): [True: 1.67k, False: 13.1k]
  ------------------
  546|  6.64k|        case SD_JSON_VARIANT_OBJECT:
  ------------------
  |  Branch (546:9): [True: 0, False: 14.8k]
  ------------------
  547|  6.64k|                a->is_reference = true;
  548|  6.64k|                a->reference = sd_json_variant_ref(json_variant_conservative_formalize(b));
  549|  6.64k|                break;
  550|       |
  551|      0|        case SD_JSON_VARIANT_NULL:
  ------------------
  |  Branch (551:9): [True: 0, False: 14.8k]
  ------------------
  552|      0|                break;
  553|       |
  554|      0|        default:
  ------------------
  |  Branch (554:9): [True: 0, False: 14.8k]
  ------------------
  555|      0|                assert_not_reached();
  ------------------
  |  |   76|      0|        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  556|  14.8k|        }
  557|  14.8k|}
sd-json.c:json_variant_copy_source:
  559|  14.8k|static void json_variant_copy_source(sd_json_variant *v, sd_json_variant *from) {
  560|  14.8k|        assert(v);
  ------------------
  |  |   72|  14.8k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  14.8k|        do {                                                            \
  |  |  |  |   59|  14.8k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  14.8k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 14.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  14.8k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  14.8k|        } while (false)
  |  |  ------------------
  ------------------
  561|       |
  562|  14.8k|        if (!json_variant_is_regular(from))
  ------------------
  |  Branch (562:13): [True: 213, False: 14.6k]
  ------------------
  563|    213|                return;
  564|       |
  565|  14.6k|        v->line = from->line;
  566|  14.6k|        v->column = from->column;
  567|  14.6k|        v->source = json_source_ref(from->source);
  568|  14.6k|}
sd-json.c:json_variant_is_regular:
  206|   257k|static bool json_variant_is_regular(const sd_json_variant *v) {
  207|       |
  208|   257k|        if (v < _JSON_VARIANT_MAGIC_MAX)
  ------------------
  |  |   50|   257k|#define _JSON_VARIANT_MAGIC_MAX ((sd_json_variant*) __JSON_VARIANT_MAGIC_MAX)
  ------------------
  |  Branch (208:13): [True: 843, False: 257k]
  ------------------
  209|    843|                return false;
  210|       |
  211|   257k|        return (((uintptr_t) v) & 1) == 0;
  212|   257k|}
sd-json.c:json_variant_free_inner:
  819|  27.9k|static void json_variant_free_inner(sd_json_variant *v, bool force_sensitive) {
  820|  27.9k|        bool sensitive;
  821|       |
  822|  27.9k|        assert(v);
  ------------------
  |  |   72|  27.9k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  27.9k|        do {                                                            \
  |  |  |  |   59|  27.9k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  27.9k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 27.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  27.9k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  27.9k|        } while (false)
  |  |  ------------------
  ------------------
  823|       |
  824|  27.9k|        if (!json_variant_is_regular(v))
  ------------------
  |  Branch (824:13): [True: 0, False: 27.9k]
  ------------------
  825|      0|                return;
  826|       |
  827|  27.9k|        json_source_unref(v->source);
  828|       |
  829|  27.9k|        sensitive = v->sensitive || force_sensitive;
  ------------------
  |  Branch (829:21): [True: 0, False: 27.9k]
  |  Branch (829:37): [True: 0, False: 27.9k]
  ------------------
  830|       |
  831|  27.9k|        if (v->is_reference) {
  ------------------
  |  Branch (831:13): [True: 7.47k, False: 20.4k]
  ------------------
  832|  7.47k|                if (sensitive)
  ------------------
  |  Branch (832:21): [True: 0, False: 7.47k]
  ------------------
  833|      0|                        sd_json_variant_sensitive(v->reference);
  834|       |
  835|  7.47k|                sd_json_variant_unref(v->reference);
  836|  7.47k|                return;
  837|  7.47k|        }
  838|       |
  839|  20.4k|        if (IN_SET(v->type, SD_JSON_VARIANT_ARRAY, SD_JSON_VARIANT_OBJECT))
  ------------------
  |  |  361|  20.4k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 5.16k, False: 15.2k]
  |  |  ------------------
  |  |  362|  20.4k|                bool _found = false;                                    \
  |  |  363|  20.4k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  20.4k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  20.4k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  20.4k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  20.4k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  20.4k|                switch (x) {                                            \
  |  |  368|  5.16k|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|    835|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|    835|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|    835|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|  5.16k|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|  5.16k|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 4.32k, False: 16.1k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 835, False: 19.6k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|  5.16k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|  5.16k|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|  5.16k|                        _found = true;                                  \
  |  |  370|  5.16k|                        break;                                          \
  |  |  371|  15.2k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 15.2k, False: 5.16k]
  |  |  ------------------
  |  |  372|  15.2k|                        ;                                               \
  |  |  373|  20.4k|                }                                                       \
  |  |  374|  20.4k|                _found;                                                 \
  |  |  375|  20.4k|        })
  ------------------
  840|  21.6k|                for (size_t i = 0; i < v->n_elements; i++)
  ------------------
  |  Branch (840:36): [True: 16.4k, False: 5.16k]
  ------------------
  841|  16.4k|                        json_variant_free_inner(v + 1 + i, sensitive);
  842|       |
  843|  20.4k|        if (sensitive)
  ------------------
  |  Branch (843:13): [True: 0, False: 20.4k]
  ------------------
  844|      0|                explicit_bzero_safe(v, json_variant_size(v));
  845|  20.4k|}
sd-json.c:json_variant_is_magic:
  188|  71.4k|static bool json_variant_is_magic(const sd_json_variant *v) {
  189|  71.4k|        if (!v)
  ------------------
  |  Branch (189:13): [True: 0, False: 71.4k]
  ------------------
  190|      0|                return false;
  191|       |
  192|  71.4k|        return v < _JSON_VARIANT_MAGIC_MAX;
  ------------------
  |  |   50|  71.4k|#define _JSON_VARIANT_MAGIC_MAX ((sd_json_variant*) __JSON_VARIANT_MAGIC_MAX)
  ------------------
  193|  71.4k|}
sd-json.c:json_variant_is_const_string:
  195|   157k|static bool json_variant_is_const_string(const sd_json_variant *v) {
  196|       |
  197|   157k|        if (v < _JSON_VARIANT_MAGIC_MAX)
  ------------------
  |  |   50|   157k|#define _JSON_VARIANT_MAGIC_MAX ((sd_json_variant*) __JSON_VARIANT_MAGIC_MAX)
  ------------------
  |  Branch (197:13): [True: 863, False: 156k]
  ------------------
  198|    863|                return false;
  199|       |
  200|       |        /* A proper sd_json_variant is aligned to whatever malloc() aligns things too, which is definitely not uneven. We
  201|       |         * hence use all uneven pointers as indicators for const strings. */
  202|       |
  203|   156k|        return (((uintptr_t) v) & 1) != 0;
  204|   157k|}
sd-json.c:json_variant_dereference:
  214|   115k|static sd_json_variant* json_variant_dereference(sd_json_variant *v) {
  215|       |
  216|       |        /* Recursively dereference variants that are references to other variants */
  217|       |
  218|   115k|        if (!v)
  ------------------
  |  Branch (218:13): [True: 0, False: 115k]
  ------------------
  219|      0|                return NULL;
  220|       |
  221|   115k|        if (!json_variant_is_regular(v))
  ------------------
  |  Branch (221:13): [True: 1.41k, False: 114k]
  ------------------
  222|  1.41k|                return v;
  223|       |
  224|   114k|        if (!v->is_reference)
  ------------------
  |  Branch (224:13): [True: 106k, False: 7.71k]
  ------------------
  225|   106k|                return v;
  226|       |
  227|  7.71k|        return json_variant_dereference(v->reference);
  228|   114k|}
sd-json.c:json_variant_conservative_formalize:
  283|  15.9k|static sd_json_variant* json_variant_conservative_formalize(sd_json_variant *v) {
  284|       |
  285|       |        /* Much like json_variant_formalize(), but won't simplify if the variant has a source/line location
  286|       |         * attached to it, in order not to lose context */
  287|       |
  288|  15.9k|        if (!v)
  ------------------
  |  Branch (288:13): [True: 0, False: 15.9k]
  ------------------
  289|      0|                return NULL;
  290|       |
  291|  15.9k|        if (!json_variant_is_regular(v))
  ------------------
  |  Branch (291:13): [True: 46, False: 15.8k]
  ------------------
  292|     46|                return v;
  293|       |
  294|  15.8k|        if (v->source || v->line > 0 || v->column > 0)
  ------------------
  |  Branch (294:13): [True: 0, False: 15.8k]
  |  Branch (294:26): [True: 0, False: 15.8k]
  |  Branch (294:41): [True: 0, False: 15.8k]
  ------------------
  295|      0|                return v;
  296|       |
  297|  15.8k|        return json_variant_formalize(v);
  298|  15.8k|}
sd-json.c:json_variant_formalize:
  242|  19.2k|static sd_json_variant* json_variant_formalize(sd_json_variant *v) {
  243|       |
  244|       |        /* Converts json variant pointers to their normalized form, i.e. fully dereferenced and wherever
  245|       |         * possible converted to the "magic" version if there is one */
  246|       |
  247|  19.2k|        if (!v)
  ------------------
  |  Branch (247:13): [True: 0, False: 19.2k]
  ------------------
  248|      0|                return NULL;
  249|       |
  250|  19.2k|        v = json_variant_dereference(v);
  251|       |
  252|  19.2k|        switch (sd_json_variant_type(v)) {
  253|       |
  254|     40|        case SD_JSON_VARIANT_BOOLEAN:
  ------------------
  |  Branch (254:9): [True: 40, False: 19.1k]
  ------------------
  255|     40|                return sd_json_variant_boolean(v) ? JSON_VARIANT_MAGIC_TRUE : JSON_VARIANT_MAGIC_FALSE;
  ------------------
  |  |   32|     40|#define JSON_VARIANT_MAGIC_TRUE ((sd_json_variant*) _JSON_VARIANT_MAGIC_TRUE)
  ------------------
                              return sd_json_variant_boolean(v) ? JSON_VARIANT_MAGIC_TRUE : JSON_VARIANT_MAGIC_FALSE;
  ------------------
  |  |   34|      0|#define JSON_VARIANT_MAGIC_FALSE ((sd_json_variant*) _JSON_VARIANT_MAGIC_FALSE)
  ------------------
  |  Branch (255:24): [True: 40, False: 0]
  ------------------
  256|       |
  257|      0|        case SD_JSON_VARIANT_NULL:
  ------------------
  |  Branch (257:9): [True: 0, False: 19.2k]
  ------------------
  258|      0|                return JSON_VARIANT_MAGIC_NULL;
  ------------------
  |  |   36|      0|#define JSON_VARIANT_MAGIC_NULL ((sd_json_variant*) _JSON_VARIANT_MAGIC_NULL)
  ------------------
  259|       |
  260|      0|        case SD_JSON_VARIANT_INTEGER:
  ------------------
  |  Branch (260:9): [True: 0, False: 19.2k]
  ------------------
  261|      0|                return sd_json_variant_integer(v) == 0 ? JSON_VARIANT_MAGIC_ZERO_INTEGER : v;
  ------------------
  |  |   38|      0|#define JSON_VARIANT_MAGIC_ZERO_INTEGER ((sd_json_variant*) _JSON_VARIANT_MAGIC_ZERO_INTEGER)
  ------------------
  |  Branch (261:24): [True: 0, False: 0]
  ------------------
  262|       |
  263|  2.40k|        case SD_JSON_VARIANT_UNSIGNED:
  ------------------
  |  Branch (263:9): [True: 2.40k, False: 16.8k]
  ------------------
  264|  2.40k|                return sd_json_variant_unsigned(v) == 0 ? JSON_VARIANT_MAGIC_ZERO_UNSIGNED : v;
  ------------------
  |  |   40|     20|#define JSON_VARIANT_MAGIC_ZERO_UNSIGNED ((sd_json_variant*) _JSON_VARIANT_MAGIC_ZERO_UNSIGNED)
  ------------------
  |  Branch (264:24): [True: 20, False: 2.38k]
  ------------------
  265|       |
  266|      0|        case SD_JSON_VARIANT_REAL:
  ------------------
  |  Branch (266:9): [True: 0, False: 19.2k]
  ------------------
  267|      0|                return iszero_safe(sd_json_variant_real(v)) ? JSON_VARIANT_MAGIC_ZERO_REAL : v;
  ------------------
  |  |   10|      0|#define iszero_safe(x) (fpclassify(x) == FP_ZERO)
  |  |  ------------------
  |  |  |  Branch (10:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                              return iszero_safe(sd_json_variant_real(v)) ? JSON_VARIANT_MAGIC_ZERO_REAL : v;
  ------------------
  |  |   42|      0|#define JSON_VARIANT_MAGIC_ZERO_REAL ((sd_json_variant*) _JSON_VARIANT_MAGIC_ZERO_REAL)
  ------------------
  268|       |
  269|  10.9k|        case SD_JSON_VARIANT_STRING:
  ------------------
  |  Branch (269:9): [True: 10.9k, False: 8.28k]
  ------------------
  270|  10.9k|                return isempty(sd_json_variant_string(v)) ? JSON_VARIANT_MAGIC_EMPTY_STRING : v;
  ------------------
  |  |   44|      0|#define JSON_VARIANT_MAGIC_EMPTY_STRING ((sd_json_variant*) _JSON_VARIANT_MAGIC_EMPTY_STRING)
  ------------------
  |  Branch (270:24): [True: 0, False: 10.9k]
  ------------------
  271|       |
  272|  2.50k|        case SD_JSON_VARIANT_ARRAY:
  ------------------
  |  Branch (272:9): [True: 2.50k, False: 16.7k]
  ------------------
  273|  2.50k|                return sd_json_variant_elements(v) == 0 ? JSON_VARIANT_MAGIC_EMPTY_ARRAY : v;
  ------------------
  |  |   46|      0|#define JSON_VARIANT_MAGIC_EMPTY_ARRAY ((sd_json_variant*) _JSON_VARIANT_MAGIC_EMPTY_ARRAY)
  ------------------
  |  Branch (273:24): [True: 0, False: 2.50k]
  ------------------
  274|       |
  275|  3.34k|        case SD_JSON_VARIANT_OBJECT:
  ------------------
  |  Branch (275:9): [True: 3.34k, False: 15.8k]
  ------------------
  276|  3.34k|                return sd_json_variant_elements(v) == 0 ? JSON_VARIANT_MAGIC_EMPTY_OBJECT : v;
  ------------------
  |  |   48|      0|#define JSON_VARIANT_MAGIC_EMPTY_OBJECT ((sd_json_variant*) _JSON_VARIANT_MAGIC_EMPTY_OBJECT)
  ------------------
  |  Branch (276:24): [True: 0, False: 3.34k]
  ------------------
  277|       |
  278|      0|        default:
  ------------------
  |  Branch (278:9): [True: 0, False: 19.2k]
  ------------------
  279|      0|                return v;
  280|  19.2k|        }
  281|  19.2k|}
sd-json.c:json_variant_propagate_sensitive:
 1533|  3.34k|static void json_variant_propagate_sensitive(sd_json_variant *from, sd_json_variant *to) {
 1534|  3.34k|        if (sd_json_variant_is_sensitive(from))
  ------------------
  |  Branch (1534:13): [True: 0, False: 3.34k]
  ------------------
 1535|      0|                sd_json_variant_sensitive(to);
 1536|  3.34k|}
sd-json.c:json_stack_release:
 3019|  5.39k|static void json_stack_release(JsonStack *s) {
 3020|  5.39k|        assert(s);
  ------------------
  |  |   72|  5.39k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.39k|        do {                                                            \
  |  |  |  |   59|  5.39k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.39k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.39k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.39k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.39k|        } while (false)
  |  |  ------------------
  ------------------
 3021|       |
 3022|  5.39k|        CLEANUP_ARRAY(s->elements, s->n_elements, sd_json_variant_unref_many);
  ------------------
  |  |   68|  5.39k|        _cleanup_(array_cleanup) _unused_ const ArrayCleanup CONCATENATE(_cleanup_array_, UNIQ) = { \
  |  |  ------------------
  |  |  |  |   78|  5.39k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  |  |   69|  5.39k|                .parray = (void**) &(array),                            \
  |  |   70|  5.39k|                .pn = &(n),                                             \
  |  |   71|  5.39k|                .pfunc = (free_array_func_t) ({                         \
  |  |   72|  5.39k|                                void (*_f)(typeof(array[0]) *a, size_t b) = func; \
  |  |   73|  5.39k|                                _f;                                     \
  |  |   74|  5.39k|                         }),                                            \
  |  |   75|  5.39k|        }
  ------------------
 3023|  5.39k|}
sd-json.c:dispatch_userdata:
 5064|    434|static void* dispatch_userdata(const sd_json_dispatch_field *p, void *userdata) {
 5065|       |
 5066|       |        /* When the userdata pointer is passed in as NULL, then we'll just use the offset as a literal
 5067|       |         * address, and convert it to a pointer.  Note that might as well just add the offset to the NULL
 5068|       |         * pointer, but UndefinedBehaviourSanitizer doesn't like pointer arithmetics based on NULL pointers,
 5069|       |         * hence we code this explicitly here. */
 5070|       |
 5071|    434|        if (userdata)
  ------------------
  |  Branch (5071:13): [True: 434, False: 0]
  ------------------
 5072|    434|                return (uint8_t*) userdata + p->offset;
 5073|       |
 5074|      0|        return SIZE_TO_PTR(p->offset);
  ------------------
  |  |  469|      0|#define SIZE_TO_PTR(u) ((void *) ((uintptr_t) (u)))
  ------------------
 5075|    434|}

sd_varlink_connect_address:
  154|    835|_public_ int sd_varlink_connect_address(sd_varlink **ret, const char *address) {
  155|    835|        _cleanup_(sd_varlink_unrefp) sd_varlink *v = NULL;
  ------------------
  |  |   78|    835|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  156|    835|        union sockaddr_union sockaddr;
  157|    835|        int r;
  158|       |
  159|    835|        assert_return(ret, -EINVAL);
  ------------------
  |  |   18|    835|        do {                                                            \
  |  |   19|    835|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|    835|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|    835|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 835, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|    835|        ? (true)                                                        \
  |  |  |  |   15|    835|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 835]
  |  |  ------------------
  |  |   20|    835|                        return (r);                                     \
  |  |   21|    835|        } while (false)
  ------------------
  160|    835|        assert_return(address, -EINVAL);
  ------------------
  |  |   18|    835|        do {                                                            \
  |  |   19|    835|                if (!assert_log(expr, #expr))                           \
  |  |  ------------------
  |  |  |  |   13|    835|#define assert_log(expr, message) ((_likely_(expr))                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   83|    835|#define _likely_(x) (__builtin_expect(!!(x), 1))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (13:36): [True: 835, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   14|    835|        ? (true)                                                        \
  |  |  |  |   15|    835|        : (log_assert_failed_return(message, PROJECT_FILE, __LINE__, __func__), false))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (19:21): [True: 0, False: 835]
  |  |  ------------------
  |  |   20|    835|                        return (r);                                     \
  |  |   21|    835|        } while (false)
  ------------------
  161|       |
  162|    835|        r = varlink_new(&v);
  163|    835|        if (r < 0)
  ------------------
  |  Branch (163:13): [True: 0, False: 835]
  ------------------
  164|      0|                return log_debug_errno(r, "Failed to create varlink object: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  165|       |
  166|    835|        v->input_fd = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0);
  167|    835|        if (v->input_fd < 0)
  ------------------
  |  Branch (167:13): [True: 0, False: 835]
  ------------------
  168|      0|                return log_debug_errno(errno, "Failed to create AF_UNIX socket: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  169|       |
  170|    835|        v->output_fd = v->input_fd = fd_move_above_stdio(v->input_fd);
  171|    835|        v->af = AF_UNIX;
  172|       |
  173|    835|        r = sockaddr_un_set_path(&sockaddr.un, address);
  174|    835|        if (r < 0) {
  ------------------
  |  Branch (174:13): [True: 0, False: 835]
  ------------------
  175|      0|                if (r != -ENAMETOOLONG)
  ------------------
  |  Branch (175:21): [True: 0, False: 0]
  ------------------
  176|      0|                        return log_debug_errno(r, "Failed to set socket address '%s': %m", address);
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  177|       |
  178|       |                /* This is a file system path, and too long to fit into sockaddr_un. Let's connect via O_PATH
  179|       |                 * to this socket. */
  180|       |
  181|      0|                r = connect_unix_path(v->input_fd, AT_FDCWD, address);
  ------------------
  |  |  308|      0|#define AT_FDCWD                -100
  ------------------
  182|      0|        } else
  183|    835|                r = RET_NERRNO(connect(v->input_fd, &sockaddr.sa, r));
  184|       |
  185|    835|        if (r < 0) {
  ------------------
  |  Branch (185:13): [True: 835, False: 0]
  ------------------
  186|    835|                if (!IN_SET(r, -EAGAIN, -EINPROGRESS))
  ------------------
  |  |  361|    835|        ({                                                              \
  |  |  362|    835|                bool _found = false;                                    \
  |  |  363|    835|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|    835|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|    835|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|    835|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|    835|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|    835|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 835]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 835]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|    835|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 835, False: 0]
  |  |  ------------------
  |  |  372|    835|                        ;                                               \
  |  |  373|    835|                }                                                       \
  |  |  374|    835|                _found;                                                 \
  |  |  375|    835|        })
  ------------------
  |  Branch (186:21): [True: 835, False: 0]
  ------------------
  187|    835|                        return log_debug_errno(r, "Failed to connect to %s: %m", address);
  ------------------
  |  |  228|    835|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|    835|        ({                                                              \
  |  |  |  |  205|    835|                int _error = (error);                                   \
  |  |  |  |  206|    835|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    835|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    835|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|    835|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|    835|        ({                                                              \
  |  |  |  |  |  |  190|    835|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|    835|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|    835|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|    835|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|  1.67k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|    835|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|    835|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 835, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    835|        })
  |  |  |  |  ------------------
  |  |  |  |  208|    835|        })
  |  |  ------------------
  ------------------
  188|       |
  189|      0|                v->connecting = true; /* We are asynchronously connecting, i.e. the connect() is being
  190|       |                                       * processed in the background. As long as that's the case the socket
  191|       |                                       * is in a special state: it's there, we can poll it for EPOLLOUT, but
  192|       |                                       * if we attempt to write() to it before we see EPOLLOUT we'll get
  193|       |                                       * ENOTCONN (and not EAGAIN, like we would for a normal connected
  194|       |                                       * socket that isn't writable at the moment). Since ENOTCONN on write()
  195|       |                                       * hence can mean two different things (i.e. connection not complete
  196|       |                                       * yet vs. already disconnected again), we store as a boolean whether
  197|       |                                       * we are still in connect(). */
  198|      0|        }
  199|       |
  200|      0|        varlink_set_state(v, VARLINK_IDLE_CLIENT);
  201|       |
  202|      0|        *ret = TAKE_PTR(v);
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  203|      0|        return 0;
  204|    835|}
sd-varlink.c:varlink_new:
  124|    835|static int varlink_new(sd_varlink **ret) {
  125|    835|        sd_varlink *v;
  126|       |
  127|    835|        assert(ret);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  128|       |
  129|    835|        v = new(sd_varlink, 1);
  ------------------
  |  |   17|    835|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
  130|    835|        if (!v)
  ------------------
  |  Branch (130:13): [True: 0, False: 835]
  ------------------
  131|      0|                return -ENOMEM;
  132|       |
  133|    835|        *v = (sd_varlink) {
  134|    835|                .n_ref = 1,
  135|    835|                .input_fd = -EBADF,
  136|    835|                .output_fd = -EBADF,
  137|       |
  138|    835|                .state = _VARLINK_STATE_INVALID,
  139|       |
  140|    835|                .ucred = UCRED_INVALID,
  ------------------
  |  |  309|    835|#define UCRED_INVALID { .pid = 0, .uid = UID_INVALID, .gid = GID_INVALID }
  |  |  ------------------
  |  |  |  |   72|    835|#define UID_INVALID ((uid_t) -1)
  |  |  ------------------
  |  |               #define UCRED_INVALID { .pid = 0, .uid = UID_INVALID, .gid = GID_INVALID }
  |  |  ------------------
  |  |  |  |   73|    835|#define GID_INVALID ((gid_t) -1)
  |  |  ------------------
  ------------------
  141|       |
  142|    835|                .timestamp = USEC_INFINITY,
  ------------------
  |  |   35|    835|#define USEC_INFINITY ((usec_t) UINT64_MAX)
  ------------------
  143|    835|                .timeout = VARLINK_DEFAULT_TIMEOUT_USEC,
  ------------------
  |  |   43|    835|#define VARLINK_DEFAULT_TIMEOUT_USEC (45U*USEC_PER_SEC)
  |  |  ------------------
  |  |  |  |   39|    835|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  ------------------
  ------------------
  144|       |
  145|    835|                .af = -1,
  146|       |
  147|    835|                .peer_pidfd = -EBADF,
  148|    835|        };
  149|       |
  150|    835|        *ret = v;
  151|    835|        return 0;
  152|    835|}
sd-varlink.c:varlink_destroy:
  650|    835|static sd_varlink* varlink_destroy(sd_varlink *v) {
  651|    835|        if (!v)
  ------------------
  |  Branch (651:13): [True: 0, False: 835]
  ------------------
  652|      0|                return NULL;
  653|       |
  654|       |        /* If this is called the server object must already been unreffed here. Why that? because when we
  655|       |         * linked up the varlink connection with the server object we took one ref in each direction */
  656|    835|        assert(!v->server);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  657|       |
  658|    835|        varlink_clear(v);
  659|       |
  660|    835|        free(v->description);
  661|    835|        return mfree(v);
  ------------------
  |  |  404|    835|        ({                                      \
  |  |  405|    835|                free(memory);                   \
  |  |  406|    835|                (typeof(memory)) NULL;          \
  |  |  407|    835|        })
  ------------------
  662|    835|}
sd-varlink.c:varlink_clear:
  609|    835|static void varlink_clear(sd_varlink *v) {
  610|    835|        assert(v);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  611|       |
  612|    835|        varlink_detach_event_sources(v);
  613|       |
  614|    835|        if (v->input_fd != v->output_fd) {
  ------------------
  |  Branch (614:13): [True: 0, False: 835]
  ------------------
  615|      0|                v->input_fd = safe_close(v->input_fd);
  616|      0|                v->output_fd = safe_close(v->output_fd);
  617|      0|        } else
  618|    835|                v->output_fd = v->input_fd = safe_close(v->input_fd);
  619|       |
  620|    835|        varlink_clear_current(v);
  621|       |
  622|    835|        v->input_buffer = v->input_sensitive ? erase_and_free(v->input_buffer) : mfree(v->input_buffer);
  ------------------
  |  |  404|  1.67k|        ({                                      \
  |  |  405|  1.67k|                free(memory);                   \
  |  |  406|  1.67k|                (typeof(memory)) NULL;          \
  |  |  407|  1.67k|        })
  ------------------
  |  Branch (622:27): [True: 0, False: 835]
  ------------------
  623|    835|        v->output_buffer = v->output_buffer_sensitive ? erase_and_free(v->output_buffer) : mfree(v->output_buffer);
  ------------------
  |  |  404|  1.67k|        ({                                      \
  |  |  405|  1.67k|                free(memory);                   \
  |  |  406|  1.67k|                (typeof(memory)) NULL;          \
  |  |  407|  1.67k|        })
  ------------------
  |  Branch (623:28): [True: 0, False: 835]
  ------------------
  624|       |
  625|    835|        v->input_control_buffer = mfree(v->input_control_buffer);
  ------------------
  |  |  404|    835|        ({                                      \
  |  |  405|    835|                free(memory);                   \
  |  |  406|    835|                (typeof(memory)) NULL;          \
  |  |  407|    835|        })
  ------------------
  626|    835|        v->input_control_buffer_size = 0;
  627|       |
  628|    835|        close_many(v->output_fds, v->n_output_fds);
  629|    835|        v->output_fds = mfree(v->output_fds);
  ------------------
  |  |  404|    835|        ({                                      \
  |  |  405|    835|                free(memory);                   \
  |  |  406|    835|                (typeof(memory)) NULL;          \
  |  |  407|    835|        })
  ------------------
  630|    835|        v->n_output_fds = 0;
  631|       |
  632|    835|        close_many(v->pushed_fds, v->n_pushed_fds);
  633|    835|        v->pushed_fds = mfree(v->pushed_fds);
  ------------------
  |  |  404|    835|        ({                                      \
  |  |  405|    835|                free(memory);                   \
  |  |  406|    835|                (typeof(memory)) NULL;          \
  |  |  407|    835|        })
  ------------------
  634|    835|        v->n_pushed_fds = 0;
  635|       |
  636|    835|        LIST_CLEAR(queue, v->output_queue, varlink_json_queue_item_free);
  ------------------
  |  |  198|    835|        _LIST_CLEAR(name, head, free_func, UNIQ_T(elem, UNIQ))
  |  |  ------------------
  |  |  |  |  202|    835|        ({                                              \
  |  |  |  |  203|    835|                typeof(head) elem;                      \
  |  |  |  |  204|    835|                while ((elem = LIST_POP(name, head)))   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|    835|        ({                                                              \
  |  |  |  |  |  |  190|    835|                typeof(a)* _a = &(a);                                   \
  |  |  |  |  |  |  191|    835|                typeof(a) _p = *_a;                                     \
  |  |  |  |  |  |  192|    835|                if (_p)                                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (192:21): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|    835|                        LIST_REMOVE(name, *_a, _p);                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   51|      0|        ({                                                              \
  |  |  |  |  |  |  |  |   52|      0|                typeof(*(head)) **_head = &(head), *_item = (item);     \
  |  |  |  |  |  |  |  |   53|      0|                assert(_item);                                          \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|      0|                if (_item->name##_next)                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|      0|                        _item->name##_next->name##_prev = _item->name##_prev; \
  |  |  |  |  |  |  |  |   56|      0|                if (_item->name##_prev)                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (56:21): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|                        _item->name##_prev->name##_next = _item->name##_next; \
  |  |  |  |  |  |  |  |   58|      0|                else {                                                  \
  |  |  |  |  |  |  |  |   59|      0|                        assert(*_head == _item);                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        *_head = _item->name##_next;                    \
  |  |  |  |  |  |  |  |   61|      0|                }                                                       \
  |  |  |  |  |  |  |  |   62|      0|                _item->name##_next = _item->name##_prev = NULL;         \
  |  |  |  |  |  |  |  |   63|      0|                _item;                                                  \
  |  |  |  |  |  |  |  |   64|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|    835|                _p;                                                     \
  |  |  |  |  |  |  195|    835|        })
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:24): [True: 0, False: 835]
  |  |  |  |  ------------------
  |  |  |  |  205|    835|                        free_func(elem);                \
  |  |  |  |  206|    835|                head;                                   \
  |  |  |  |  207|    835|        })
  |  |  ------------------
  ------------------
  637|    835|        v->output_queue_tail = NULL;
  638|    835|        v->n_output_queue = 0;
  639|       |
  640|    835|        v->event = sd_event_unref(v->event);
  641|       |
  642|    835|        if (v->exec_pid > 0) {
  ------------------
  |  Branch (642:13): [True: 0, False: 835]
  ------------------
  643|      0|                sigterm_wait(v->exec_pid);
  644|      0|                v->exec_pid = 0;
  645|      0|        }
  646|       |
  647|    835|        v->peer_pidfd = safe_close(v->peer_pidfd);
  648|    835|}
sd-varlink.c:varlink_clear_current:
  595|    835|static void varlink_clear_current(sd_varlink *v) {
  596|    835|        assert(v);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  597|       |
  598|       |        /* Clears the currently processed incoming message */
  599|    835|        v->current = sd_json_variant_unref(v->current);
  600|    835|        v->current_collected = sd_json_variant_unref(v->current_collected);
  601|    835|        v->current_method = NULL;
  602|    835|        v->current_reply_flags = 0;
  603|       |
  604|    835|        close_many(v->input_fds, v->n_input_fds);
  605|    835|        v->input_fds = mfree(v->input_fds);
  ------------------
  |  |  404|    835|        ({                                      \
  |  |  405|    835|                free(memory);                   \
  |  |  406|    835|                (typeof(memory)) NULL;          \
  |  |  407|    835|        })
  ------------------
  606|    835|        v->n_input_fds = 0;
  607|    835|}
sd-varlink.c:varlink_detach_event_sources:
  585|    835|static void varlink_detach_event_sources(sd_varlink *v) {
  586|    835|        assert(v);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  587|       |
  588|    835|        v->input_event_source = sd_event_source_disable_unref(v->input_event_source);
  589|    835|        v->output_event_source = sd_event_source_disable_unref(v->output_event_source);
  590|    835|        v->time_event_source = sd_event_source_disable_unref(v->time_event_source);
  591|    835|        v->quit_event_source = sd_event_source_disable_unref(v->quit_event_source);
  592|    835|        v->defer_event_source = sd_event_source_disable_unref(v->defer_event_source);
  593|    835|}

LLVMFuzzerTestOneInput:
    8|  13.0k|int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
    9|  13.0k|        _cleanup_(manager_freep) Manager *manager = NULL;
  ------------------
  |  |   78|  13.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
   10|  13.0k|        _cleanup_fclose_ FILE *f = NULL;
  ------------------
  |  |   61|  13.0k|#define _cleanup_fclose_ _cleanup_(fclosep)
  |  |  ------------------
  |  |  |  |   78|  13.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
   11|  13.0k|        _cleanup_(unlink_tempfilep) char netdev_config[] = "/tmp/fuzz-networkd.XXXXXX";
  ------------------
  |  |   78|  13.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
   12|  13.0k|        _cleanup_(netdev_unrefp) NetDev *netdev = NULL;
  ------------------
  |  |   78|  13.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
   13|       |
   14|  13.0k|        if (outside_size_range(size, 0, 65536))
  ------------------
  |  Branch (14:13): [True: 1, False: 13.0k]
  ------------------
   15|      1|                return 0;
   16|       |
   17|  13.0k|        fuzz_setup_logging();
   18|       |
   19|  13.0k|        assert_se(fmkostemp_safe(netdev_config, "r+", &f) == 0);
  ------------------
  |  |   65|  13.0k|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.0k|        do {                                                            \
  |  |  |  |   59|  13.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  13.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.0k|        } while (false)
  |  |  ------------------
  ------------------
   20|  13.0k|        if (size != 0)
  ------------------
  |  Branch (20:13): [True: 13.0k, False: 0]
  ------------------
   21|  13.0k|                assert_se(fwrite(data, size, 1, f) == 1);
  ------------------
  |  |   65|  13.0k|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.0k|        do {                                                            \
  |  |  |  |   59|  13.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  13.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.0k|        } while (false)
  |  |  ------------------
  ------------------
   22|       |
   23|  13.0k|        fflush(f);
   24|  13.0k|        assert_se(manager_new(&manager, /* test_mode = */ true) >= 0);
  ------------------
  |  |   65|  13.0k|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.0k|        do {                                                            \
  |  |  |  |   59|  13.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  13.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.0k|        } while (false)
  |  |  ------------------
  ------------------
   25|  13.0k|        (void) netdev_load_one(manager, netdev_config, &netdev);
   26|  13.0k|        return 0;
   27|  13.0k|}

bareudp.c:bare_udp_init:
   61|     40|static void bare_udp_init(NetDev *netdev) {
   62|     40|        BareUDP *u = BAREUDP(netdev);
   63|       |
   64|     40|        u->iftype = _BARE_UDP_PROTOCOL_INVALID;
   65|     40|}
bareudp.c:netdev_bare_udp_verify:
   45|     40|static int netdev_bare_udp_verify(NetDev *netdev, const char *filename) {
   46|     40|        assert(filename);
  ------------------
  |  |   72|     40|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     40|        do {                                                            \
  |  |  |  |   59|     40|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     40|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 40]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     40|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     40|        } while (false)
  |  |  ------------------
  ------------------
   47|       |
   48|     40|        BareUDP *u = BAREUDP(netdev);
   49|       |
   50|     40|        if (u->dest_port == 0)
  ------------------
  |  Branch (50:13): [True: 25, False: 15]
  ------------------
   51|     25|                return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  287|     25|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|     25|        ({                                                              \
  |  |  |  |  271|     25|                int _error = (error);                                   \
  |  |  |  |  272|     25|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|     25|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|     25|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|     25|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|     25|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|     25|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 25]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|     25|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|     25|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|     25|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|     25|        ({                                                              \
  |  |  |  |  |  |  265|     25|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|     25|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|     25|        ({                                                              \
  |  |  |  |  |  |  |  |    8|     50|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 25, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|     25|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|     25|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|     25|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 25, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|     25|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|     25|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|     25|        })
  |  |  |  |  ------------------
  |  |  |  |  274|     25|        })
  |  |  ------------------
  ------------------
   52|     15|                                                "%s: BareUDP DesinationPort= is not set. Ignoring.", filename);
   53|       |
   54|     15|        if (u->iftype == _BARE_UDP_PROTOCOL_INVALID)
  ------------------
  |  Branch (54:13): [True: 13, False: 2]
  ------------------
   55|     13|                return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  287|     13|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|     13|        ({                                                              \
  |  |  |  |  271|     13|                int _error = (error);                                   \
  |  |  |  |  272|     13|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|     13|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|     13|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|     13|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|     13|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|     13|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|     13|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|     13|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|     13|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|     13|        ({                                                              \
  |  |  |  |  |  |  265|     13|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|     13|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|     13|        ({                                                              \
  |  |  |  |  |  |  |  |    8|     26|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 13, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|     13|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|     13|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|     13|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 13, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|     13|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|     13|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|     13|        })
  |  |  |  |  ------------------
  |  |  |  |  274|     13|        })
  |  |  ------------------
  ------------------
   56|      2|                                                "%s: BareUDP EtherType= is not set. Ignoring.", filename);
   57|       |
   58|      2|        return 0;
   59|     15|}

config_parse_badadv_bandwidth:
   63|    674|                void *userdata) {
   64|       |
   65|    674|        uint64_t k;
   66|    674|        uint32_t *bandwidth = data;
   67|    674|        int r;
   68|       |
   69|    674|        assert(filename);
  ------------------
  |  |   72|    674|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    674|        do {                                                            \
  |  |  |  |   59|    674|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    674|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 674]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    674|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    674|        } while (false)
  |  |  ------------------
  ------------------
   70|    674|        assert(lvalue);
  ------------------
  |  |   72|    674|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    674|        do {                                                            \
  |  |  |  |   59|    674|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    674|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 674]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    674|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    674|        } while (false)
  |  |  ------------------
  ------------------
   71|    674|        assert(rvalue);
  ------------------
  |  |   72|    674|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    674|        do {                                                            \
  |  |  |  |   59|    674|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    674|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 674]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    674|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    674|        } while (false)
  |  |  ------------------
  ------------------
   72|       |
   73|    674|        r = parse_size(rvalue, 1000, &k);
   74|    674|        if (r < 0) {
  ------------------
  |  Branch (74:13): [True: 213, False: 461]
  ------------------
   75|    213|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    213|        ({                                                              \
  |  |  354|    213|                int _level = (level), _e = (error);                     \
  |  |  355|    213|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 213]
  |  |  ------------------
  |  |  356|    213|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    213|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    213|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    213|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    213|        })
  ------------------
   76|    213|                           "Failed to parse '%s=', ignoring assignment: %s",
   77|    213|                           lvalue, rvalue);
   78|    213|                return 0;
   79|    213|        }
   80|       |
   81|    461|        if (k/1000/100 > UINT32_MAX)
  ------------------
  |  Branch (81:13): [True: 223, False: 238]
  ------------------
   82|    223|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    223|        ({                                                              \
  |  |  354|    223|                int _level = (level), _e = (error);                     \
  |  |  355|    223|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 223]
  |  |  ------------------
  |  |  356|    223|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    223|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    223|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    223|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    223|        })
  ------------------
   83|    461|                           "The value of '%s=', is outside of 0...429496729500000 range: %s",
   84|    461|                           lvalue, rvalue);
   85|       |
   86|    461|        *bandwidth = k/1000/100;
   87|       |
   88|    461|        return 0;
   89|    674|}
batadv.c:batadv_init:
   14|    138|static void batadv_init(NetDev *n) {
   15|    138|        BatmanAdvanced *b = BATADV(n);
   16|       |
   17|       |        /* Set defaults */
   18|    138|        b->aggregation            = true;
   19|    138|        b->gateway_bandwidth_down = 10000;
   20|    138|        b->gateway_bandwidth_up   = 2000;
   21|    138|        b->bridge_loop_avoidance  = true;
   22|    138|        b->distributed_arp_table  = true;
   23|    138|        b->fragmentation          = true;
   24|    138|        b->hop_penalty            = 15;
   25|    138|        b->originator_interval    = 1000;
   26|    138|        b->routing_algorithm      = BATADV_ROUTING_ALGORITHM_BATMAN_V;
   27|    138|}

config_parse_arp_ip_target_address:
  261|  4.60k|                void *userdata) {
  262|       |
  263|  4.60k|        assert(filename);
  ------------------
  |  |   72|  4.60k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  4.60k|        do {                                                            \
  |  |  |  |   59|  4.60k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  4.60k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 4.60k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  4.60k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  4.60k|        } while (false)
  |  |  ------------------
  ------------------
  264|  4.60k|        assert(lvalue);
  ------------------
  |  |   72|  4.60k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  4.60k|        do {                                                            \
  |  |  |  |   59|  4.60k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  4.60k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 4.60k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  4.60k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  4.60k|        } while (false)
  |  |  ------------------
  ------------------
  265|  4.60k|        assert(rvalue);
  ------------------
  |  |   72|  4.60k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  4.60k|        do {                                                            \
  |  |  |  |   59|  4.60k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  4.60k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 4.60k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  4.60k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  4.60k|        } while (false)
  |  |  ------------------
  ------------------
  266|  4.60k|        assert(data);
  ------------------
  |  |   72|  4.60k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  4.60k|        do {                                                            \
  |  |  |  |   59|  4.60k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  4.60k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 4.60k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  4.60k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  4.60k|        } while (false)
  |  |  ------------------
  ------------------
  267|       |
  268|  4.60k|        Bond *b = BOND(userdata);
  269|  4.60k|        int r;
  270|       |
  271|  4.60k|        if (isempty(rvalue)) {
  ------------------
  |  Branch (271:13): [True: 584, False: 4.01k]
  ------------------
  272|    584|                b->arp_ip_targets = ordered_set_free(b->arp_ip_targets);
  273|    584|                return 0;
  274|    584|        }
  275|       |
  276|  8.02k|        for (const char *p = rvalue;;) {
  277|  8.02k|                _cleanup_free_ char *n = NULL;
  ------------------
  |  |   82|  8.02k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  8.02k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  278|  8.02k|                union in_addr_union ip;
  279|       |
  280|  8.02k|                r = extract_first_word(&p, &n, NULL, 0);
  281|  8.02k|                if (r == -ENOMEM)
  ------------------
  |  Branch (281:21): [True: 0, False: 8.02k]
  ------------------
  282|      0|                        return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  283|  8.02k|                if (r < 0) {
  ------------------
  |  Branch (283:21): [True: 194, False: 7.83k]
  ------------------
  284|    194|                        log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    194|        ({                                                              \
  |  |  354|    194|                int _level = (level), _e = (error);                     \
  |  |  355|    194|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 194]
  |  |  ------------------
  |  |  356|    194|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    194|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    194|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    194|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    194|        })
  ------------------
  285|    194|                                   "Failed to parse Bond ARP IP target address, ignoring assignment: %s",
  286|    194|                                   rvalue);
  287|    194|                        return 0;
  288|    194|                }
  289|  7.83k|                if (r == 0)
  ------------------
  |  Branch (289:21): [True: 3.82k, False: 4.00k]
  ------------------
  290|  3.82k|                        return 0;
  291|       |
  292|  4.00k|                r = in_addr_from_string(AF_INET, n, &ip);
  293|  4.00k|                if (r < 0) {
  ------------------
  |  Branch (293:21): [True: 676, False: 3.33k]
  ------------------
  294|    676|                        log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    676|        ({                                                              \
  |  |  354|    676|                int _level = (level), _e = (error);                     \
  |  |  355|    676|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 676]
  |  |  ------------------
  |  |  356|    676|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    676|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    676|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    676|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    676|        })
  ------------------
  295|    676|                                   "Bond ARP IP target address is invalid, ignoring assignment: %s", n);
  296|    676|                        continue;
  297|    676|                }
  298|       |
  299|  3.33k|                if (ordered_set_size(b->arp_ip_targets) >= NETDEV_BOND_ARP_TARGETS_MAX) {
  ------------------
  |  |   12|  3.33k|#define NETDEV_BOND_ARP_TARGETS_MAX 16
  ------------------
  |  Branch (299:21): [True: 200, False: 3.13k]
  ------------------
  300|    200|                        log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    200|        ({                                                              \
  |  |  354|    200|                int _level = (level), _e = (error);                     \
  |  |  355|    200|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 200]
  |  |  ------------------
  |  |  356|    200|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    200|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    200|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    200|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    200|        })
  ------------------
  301|    200|                                   "Too many ARP IP targets are specified. The maximum number is %d. Ignoring assignment: %s",
  302|    200|                                   NETDEV_BOND_ARP_TARGETS_MAX, n);
  303|    200|                        continue;
  304|    200|                }
  305|       |
  306|  3.13k|                r = ordered_set_ensure_put(&b->arp_ip_targets, NULL, UINT32_TO_PTR(ip.in.s_addr));
  ------------------
  |  |  105|  3.13k|#define UINT32_TO_PTR(u) ((void *) ((uintptr_t) (u)))
  ------------------
  307|  3.13k|                if (r == -ENOMEM)
  ------------------
  |  Branch (307:21): [True: 0, False: 3.13k]
  ------------------
  308|      0|                        return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  309|  3.13k|                if (r == -EEXIST)
  ------------------
  |  Branch (309:21): [True: 0, False: 3.13k]
  ------------------
  310|      0|                        log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|      0|        ({                                                              \
  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|      0|        })
  ------------------
  311|  3.13k|                                   "Bond ARP IP target address is duplicated, ignoring assignment: %s", n);
  312|  3.13k|                if (r < 0)
  ------------------
  |  Branch (312:21): [True: 0, False: 3.13k]
  ------------------
  313|      0|                        log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|      0|        ({                                                              \
  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|      0|        })
  ------------------
  314|  3.13k|                                   "Failed to store bond ARP IP target address '%s', ignoring assignment: %m", n);
  315|  3.13k|        }
  316|  4.01k|}
config_parse_ad_actor_sys_prio:
  328|    420|                void *userdata) {
  329|       |
  330|    420|        assert(filename);
  ------------------
  |  |   72|    420|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    420|        do {                                                            \
  |  |  |  |   59|    420|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    420|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 420]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    420|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    420|        } while (false)
  |  |  ------------------
  ------------------
  331|    420|        assert(lvalue);
  ------------------
  |  |   72|    420|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    420|        do {                                                            \
  |  |  |  |   59|    420|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    420|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 420]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    420|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    420|        } while (false)
  |  |  ------------------
  ------------------
  332|    420|        assert(rvalue);
  ------------------
  |  |   72|    420|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    420|        do {                                                            \
  |  |  |  |   59|    420|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    420|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 420]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    420|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    420|        } while (false)
  |  |  ------------------
  ------------------
  333|    420|        assert(data);
  ------------------
  |  |   72|    420|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    420|        do {                                                            \
  |  |  |  |   59|    420|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    420|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 420]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    420|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    420|        } while (false)
  |  |  ------------------
  ------------------
  334|       |
  335|    420|        Bond *b = ASSERT_PTR(userdata);
  ------------------
  |  |   81|    420|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    420|        ({                                 \
  |  |  |  |   85|    420|                typeof(expr) var = (expr); \
  |  |  |  |   86|    420|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    420|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    420|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    420|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    420|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    420|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 420]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    420|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    420|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    420|                var;                       \
  |  |  |  |   88|    420|        })
  |  |  ------------------
  ------------------
  336|       |
  337|    420|        return config_parse_uint16_bounded(
  338|    420|                        unit, filename, line, section, section_line, lvalue, rvalue,
  339|    420|                        1, UINT16_MAX, true,
  340|    420|                        &b->ad_actor_sys_prio);
  341|    420|}
config_parse_ad_user_port_key:
  353|    401|                void *userdata) {
  354|       |
  355|    401|        assert(filename);
  ------------------
  |  |   72|    401|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    401|        do {                                                            \
  |  |  |  |   59|    401|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    401|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 401]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    401|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    401|        } while (false)
  |  |  ------------------
  ------------------
  356|    401|        assert(lvalue);
  ------------------
  |  |   72|    401|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    401|        do {                                                            \
  |  |  |  |   59|    401|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    401|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 401]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    401|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    401|        } while (false)
  |  |  ------------------
  ------------------
  357|    401|        assert(rvalue);
  ------------------
  |  |   72|    401|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    401|        do {                                                            \
  |  |  |  |   59|    401|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    401|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 401]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    401|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    401|        } while (false)
  |  |  ------------------
  ------------------
  358|    401|        assert(data);
  ------------------
  |  |   72|    401|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    401|        do {                                                            \
  |  |  |  |   59|    401|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    401|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 401]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    401|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    401|        } while (false)
  |  |  ------------------
  ------------------
  359|       |
  360|    401|        Bond *b = ASSERT_PTR(userdata);
  ------------------
  |  |   81|    401|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    401|        ({                                 \
  |  |  |  |   85|    401|                typeof(expr) var = (expr); \
  |  |  |  |   86|    401|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    401|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    401|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    401|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    401|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    401|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 401]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    401|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    401|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    401|                var;                       \
  |  |  |  |   88|    401|        })
  |  |  ------------------
  ------------------
  361|       |
  362|    401|        return config_parse_uint16_bounded(
  363|    401|                        unit, filename, line, section, section_line, lvalue, rvalue,
  364|    401|                        0, 1023, /* ignoring= */ true,
  365|    401|                        &b->ad_user_port_key);
  366|    401|}
config_parse_ad_actor_system:
  378|    806|                void *userdata) {
  379|    806|        Bond *b = userdata;
  380|    806|        struct ether_addr n;
  381|    806|        int r;
  382|       |
  383|    806|        assert(filename);
  ------------------
  |  |   72|    806|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    806|        do {                                                            \
  |  |  |  |   59|    806|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    806|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 806]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    806|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    806|        } while (false)
  |  |  ------------------
  ------------------
  384|    806|        assert(lvalue);
  ------------------
  |  |   72|    806|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    806|        do {                                                            \
  |  |  |  |   59|    806|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    806|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 806]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    806|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    806|        } while (false)
  |  |  ------------------
  ------------------
  385|    806|        assert(rvalue);
  ------------------
  |  |   72|    806|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    806|        do {                                                            \
  |  |  |  |   59|    806|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    806|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 806]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    806|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    806|        } while (false)
  |  |  ------------------
  ------------------
  386|    806|        assert(data);
  ------------------
  |  |   72|    806|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    806|        do {                                                            \
  |  |  |  |   59|    806|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    806|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 806]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    806|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    806|        } while (false)
  |  |  ------------------
  ------------------
  387|       |
  388|    806|        r = parse_ether_addr(rvalue, &n);
  389|    806|        if (r < 0) {
  ------------------
  |  Branch (389:13): [True: 204, False: 602]
  ------------------
  390|    204|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    204|        ({                                                              \
  |  |  354|    204|                int _level = (level), _e = (error);                     \
  |  |  355|    204|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 204]
  |  |  ------------------
  |  |  356|    204|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    204|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    204|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    204|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    204|        })
  ------------------
  391|    204|                           "Not a valid MAC address %s. Ignoring assignment: %m",
  392|    204|                           rvalue);
  393|    204|                return 0;
  394|    204|        }
  395|    602|        if (ether_addr_is_null(&n) || (n.ether_addr_octet[0] & 0x01)) {
  ------------------
  |  Branch (395:13): [True: 195, False: 407]
  |  Branch (395:39): [True: 195, False: 212]
  ------------------
  396|    390|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    390|        ({                                                              \
  |  |  354|    390|                int _level = (level), _e = (error);                     \
  |  |  355|    390|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 390]
  |  |  ------------------
  |  |  356|    390|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    390|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    390|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    390|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    390|        })
  ------------------
  397|    390|                           "Not an appropriate MAC address %s, cannot be null or multicast. Ignoring assignment.",
  398|    390|                           rvalue);
  399|    390|                return 0;
  400|    390|        }
  401|       |
  402|    212|        b->ad_actor_system = n;
  403|       |
  404|    212|        return 0;
  405|    602|}
bond.c:bond_init:
  413|    686|static void bond_init(NetDev *netdev) {
  414|    686|        Bond *b = BOND(netdev);
  415|       |
  416|    686|        b->mode = _NETDEV_BOND_MODE_INVALID;
  417|    686|        b->xmit_hash_policy = _NETDEV_BOND_XMIT_HASH_POLICY_INVALID;
  418|    686|        b->lacp_rate = _NETDEV_BOND_LACP_RATE_INVALID;
  419|    686|        b->ad_select = _NETDEV_BOND_AD_SELECT_INVALID;
  420|    686|        b->fail_over_mac = _NETDEV_BOND_FAIL_OVER_MAC_INVALID;
  421|    686|        b->arp_validate = _NETDEV_BOND_ARP_VALIDATE_INVALID;
  422|    686|        b->arp_all_targets = _NETDEV_BOND_ARP_ALL_TARGETS_INVALID;
  423|    686|        b->primary_reselect = _NETDEV_BOND_PRIMARY_RESELECT_INVALID;
  424|       |
  425|    686|        b->all_slaves_active = false;
  426|    686|        b->tlb_dynamic_lb = -1;
  427|       |
  428|    686|        b->resend_igmp = RESEND_IGMP_DEFAULT;
  ------------------
  |  |   32|    686|#define RESEND_IGMP_DEFAULT       1
  ------------------
  429|    686|        b->packets_per_slave = PACKETS_PER_SLAVE_DEFAULT;
  ------------------
  |  |   40|    686|#define PACKETS_PER_SLAVE_DEFAULT 1
  ------------------
  430|    686|        b->num_grat_arp = GRATUITOUS_ARP_DEFAULT;
  ------------------
  |  |   49|    686|#define GRATUITOUS_ARP_DEFAULT    1
  ------------------
  431|    686|        b->lp_interval = LEARNING_PACKETS_INTERVAL_MIN_SEC;
  ------------------
  |  |   24|    686|#define LEARNING_PACKETS_INTERVAL_MIN_SEC       (1 * USEC_PER_SEC)
  |  |  ------------------
  |  |  |  |   39|    686|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  ------------------
  ------------------
  432|    686|}
bond.c:bond_done:
  407|    686|static void bond_done(NetDev *netdev) {
  408|    686|        Bond *b = BOND(netdev);
  409|       |
  410|    686|        ordered_set_free(b->arp_ip_targets);
  411|    686|}

bridge.c:bridge_init:
  284|     68|static void bridge_init(NetDev *netdev) {
  285|     68|        Bridge *b = BRIDGE(netdev);
  286|       |
  287|     68|        b->mcast_querier = -1;
  288|     68|        b->mcast_snooping = -1;
  289|     68|        b->vlan_filtering = -1;
  290|     68|        b->vlan_protocol = -1;
  291|     68|        b->stp = -1;
  292|     68|        b->default_pvid = VLANID_INVALID;
  ------------------
  |  |    8|     68|#define VLANID_INVALID UINT16_MAX
  ------------------
  293|     68|        b->forward_delay = USEC_INFINITY;
  ------------------
  |  |   35|     68|#define USEC_INFINITY ((usec_t) UINT64_MAX)
  ------------------
  294|     68|        b->ageing_time = USEC_INFINITY;
  ------------------
  |  |   35|     68|#define USEC_INFINITY ((usec_t) UINT64_MAX)
  ------------------
  295|     68|        b->linklocal_learn = -1;
  296|     68|}

config_parse_fou_tunnel_address:
  154|    724|                void *userdata) {
  155|       |
  156|    724|        union in_addr_union *addr = ASSERT_PTR(data);
  ------------------
  |  |   81|    724|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    724|        ({                                 \
  |  |  |  |   85|    724|                typeof(expr) var = (expr); \
  |  |  |  |   86|    724|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    724|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    724|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    724|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    724|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    724|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 724]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    724|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    724|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    724|                var;                       \
  |  |  |  |   88|    724|        })
  |  |  ------------------
  ------------------
  157|    724|        FouTunnel *t = userdata;
  158|    724|        int r, *f;
  159|       |
  160|    724|        assert(filename);
  ------------------
  |  |   72|    724|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    724|        do {                                                            \
  |  |  |  |   59|    724|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    724|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 724]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    724|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    724|        } while (false)
  |  |  ------------------
  ------------------
  161|    724|        assert(lvalue);
  ------------------
  |  |   72|    724|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    724|        do {                                                            \
  |  |  |  |   59|    724|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    724|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 724]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    724|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    724|        } while (false)
  |  |  ------------------
  ------------------
  162|    724|        assert(rvalue);
  ------------------
  |  |   72|    724|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    724|        do {                                                            \
  |  |  |  |   59|    724|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    724|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 724]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    724|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    724|        } while (false)
  |  |  ------------------
  ------------------
  163|       |
  164|    724|        if (streq(lvalue, "Local"))
  ------------------
  |  |   46|    724|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 388, False: 336]
  |  |  ------------------
  ------------------
  165|    388|                f = &t->local_family;
  166|    336|        else
  167|    336|                f = &t->peer_family;
  168|       |
  169|    724|        r = in_addr_from_string_auto(rvalue, f, addr);
  170|    724|        if (r < 0)
  ------------------
  |  Branch (170:13): [True: 527, False: 197]
  ------------------
  171|    527|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    527|        ({                                                              \
  |  |  354|    527|                int _level = (level), _e = (error);                     \
  |  |  355|    527|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 527]
  |  |  ------------------
  |  |  356|    527|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    527|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    527|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    527|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    527|        })
  ------------------
  172|    724|                           "FooOverUDP tunnel '%s' address is invalid, ignoring assignment: %s",
  173|    724|                           lvalue, rvalue);
  174|       |
  175|    724|        return 0;
  176|    724|}
fou-tunnel.c:fou_tunnel_init:
  211|    278|static void fou_tunnel_init(NetDev *netdev) {
  212|    278|        FouTunnel *t = FOU(netdev);
  213|       |
  214|    278|        t->fou_encap_type = NETDEV_FOO_OVER_UDP_ENCAP_DIRECT;
  215|    278|}
fou-tunnel.c:netdev_fou_tunnel_verify:
  178|    278|static int netdev_fou_tunnel_verify(NetDev *netdev, const char *filename) {
  179|    278|        assert(filename);
  ------------------
  |  |   72|    278|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    278|        do {                                                            \
  |  |  |  |   59|    278|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    278|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 278]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    278|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    278|        } while (false)
  |  |  ------------------
  ------------------
  180|       |
  181|    278|        FouTunnel *t = FOU(netdev);
  182|       |
  183|    278|        switch (t->fou_encap_type) {
  184|    278|        case NETDEV_FOO_OVER_UDP_ENCAP_DIRECT:
  ------------------
  |  Branch (184:9): [True: 278, False: 0]
  ------------------
  185|    278|                if (t->fou_protocol <= 0)
  ------------------
  |  Branch (185:21): [True: 254, False: 24]
  ------------------
  186|    254|                        return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|    254|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|    254|        ({                                                              \
  |  |  |  |  271|    254|                int _error = (error);                                   \
  |  |  |  |  272|    254|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    254|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    254|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    254|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    254|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    254|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 254]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    254|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    254|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|    254|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    254|        ({                                                              \
  |  |  |  |  |  |  265|    254|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|    254|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|    254|        ({                                                              \
  |  |  |  |  |  |  |  |    8|    508|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 254, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    254|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|    254|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|    254|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 254, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|    254|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|    254|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|    254|        })
  |  |  |  |  ------------------
  |  |  |  |  274|    254|        })
  |  |  ------------------
  ------------------
  187|     24|                                                      "FooOverUDP protocol not configured in %s. Rejecting configuration.",
  188|     24|                                                      filename);
  189|     24|                break;
  190|     24|        case NETDEV_FOO_OVER_UDP_ENCAP_GUE:
  ------------------
  |  Branch (190:9): [True: 0, False: 278]
  ------------------
  191|      0|                if (t->fou_protocol > 0)
  ------------------
  |  Branch (191:21): [True: 0, False: 0]
  ------------------
  192|      0|                        return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|      0|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      0|        ({                                                              \
  |  |  |  |  271|      0|                int _error = (error);                                   \
  |  |  |  |  272|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      0|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|        ({                                                              \
  |  |  |  |  |  |  265|      0|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      0|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      0|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      0|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      0|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      0|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      0|        })
  |  |  ------------------
  ------------------
  193|      0|                                                      "FooOverUDP GUE can't be set with protocol configured in %s. Rejecting configuration.",
  194|      0|                                                      filename);
  195|      0|                break;
  196|      0|        default:
  ------------------
  |  Branch (196:9): [True: 0, False: 278]
  ------------------
  197|      0|                assert_not_reached();
  ------------------
  |  |   76|      0|        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  198|    278|        }
  199|       |
  200|     24|        if (t->peer_family == AF_UNSPEC && t->peer_port > 0)
  ------------------
  |  Branch (200:13): [True: 22, False: 2]
  |  Branch (200:44): [True: 3, False: 19]
  ------------------
  201|      3|                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|      3|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      3|        ({                                                              \
  |  |  |  |  271|      3|                int _error = (error);                                   \
  |  |  |  |  272|      3|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      3|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      3|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      3|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      3|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      3|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      3|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      3|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      3|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      3|        ({                                                              \
  |  |  |  |  |  |  265|      3|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      3|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      3|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      6|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 3, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      3|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      3|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      3|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 3, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      3|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      3|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      3|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      3|        })
  |  |  ------------------
  ------------------
  202|     21|                                              "FooOverUDP peer port is set but peer address not configured in %s. Rejecting configuration.",
  203|     21|                                              filename);
  204|     21|        else if (t->peer_family != AF_UNSPEC && t->peer_port == 0)
  ------------------
  |  Branch (204:18): [True: 2, False: 19]
  |  Branch (204:49): [True: 1, False: 1]
  ------------------
  205|      1|                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|      1|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      1|        ({                                                              \
  |  |  |  |  271|      1|                int _error = (error);                                   \
  |  |  |  |  272|      1|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      1|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      1|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      1|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      1|        ({                                                              \
  |  |  |  |  |  |  265|      1|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      1|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      1|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      2|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      1|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      1|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      1|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      1|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      1|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      1|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      1|        })
  |  |  ------------------
  ------------------
  206|     20|                                              "FooOverUDP peer port not set but peer address is configured in %s. Rejecting configuration.",
  207|     20|                                              filename);
  208|     20|        return 0;
  209|     24|}

config_parse_geneve_vni:
  109|    617|                void *userdata) {
  110|       |
  111|    617|        assert(filename);
  ------------------
  |  |   72|    617|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    617|        do {                                                            \
  |  |  |  |   59|    617|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    617|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 617]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    617|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    617|        } while (false)
  |  |  ------------------
  ------------------
  112|    617|        assert(lvalue);
  ------------------
  |  |   72|    617|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    617|        do {                                                            \
  |  |  |  |   59|    617|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    617|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 617]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    617|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    617|        } while (false)
  |  |  ------------------
  ------------------
  113|    617|        assert(rvalue);
  ------------------
  |  |   72|    617|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    617|        do {                                                            \
  |  |  |  |   59|    617|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    617|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 617]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    617|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    617|        } while (false)
  |  |  ------------------
  ------------------
  114|    617|        assert(data);
  ------------------
  |  |   72|    617|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    617|        do {                                                            \
  |  |  |  |   59|    617|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    617|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 617]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    617|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    617|        } while (false)
  |  |  ------------------
  ------------------
  115|       |
  116|    617|        Geneve *v = ASSERT_PTR(userdata);
  ------------------
  |  |   81|    617|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    617|        ({                                 \
  |  |  |  |   85|    617|                typeof(expr) var = (expr); \
  |  |  |  |   86|    617|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    617|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    617|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    617|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    617|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    617|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 617]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    617|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    617|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    617|                var;                       \
  |  |  |  |   88|    617|        })
  |  |  ------------------
  ------------------
  117|       |
  118|    617|        return config_parse_uint32_bounded(
  119|    617|                        unit, filename, line, section, section_line, lvalue, rvalue,
  120|    617|                        0, GENEVE_VID_MAX, true,
  ------------------
  |  |   10|    617|#define GENEVE_VID_MAX (1u << 24) - 1
  ------------------
  121|    617|                        &v->id);
  122|    617|}
config_parse_geneve_address:
  134|    592|                void *userdata) {
  135|       |
  136|    592|        assert(filename);
  ------------------
  |  |   72|    592|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    592|        do {                                                            \
  |  |  |  |   59|    592|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    592|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 592]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    592|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    592|        } while (false)
  |  |  ------------------
  ------------------
  137|    592|        assert(lvalue);
  ------------------
  |  |   72|    592|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    592|        do {                                                            \
  |  |  |  |   59|    592|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    592|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 592]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    592|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    592|        } while (false)
  |  |  ------------------
  ------------------
  138|    592|        assert(rvalue);
  ------------------
  |  |   72|    592|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    592|        do {                                                            \
  |  |  |  |   59|    592|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    592|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 592]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    592|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    592|        } while (false)
  |  |  ------------------
  ------------------
  139|    592|        assert(data);
  ------------------
  |  |   72|    592|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    592|        do {                                                            \
  |  |  |  |   59|    592|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    592|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 592]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    592|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    592|        } while (false)
  |  |  ------------------
  ------------------
  140|       |
  141|    592|        Geneve *v = ASSERT_PTR(userdata);
  ------------------
  |  |   81|    592|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    592|        ({                                 \
  |  |  |  |   85|    592|                typeof(expr) var = (expr); \
  |  |  |  |   86|    592|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    592|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    592|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    592|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    592|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    592|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 592]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    592|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    592|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    592|                var;                       \
  |  |  |  |   88|    592|        })
  |  |  ------------------
  ------------------
  142|    592|        union in_addr_union *addr = data, buffer;
  143|    592|        int r, f;
  144|       |
  145|    592|        r = in_addr_from_string_auto(rvalue, &f, &buffer);
  146|    592|        if (r < 0) {
  ------------------
  |  Branch (146:13): [True: 203, False: 389]
  ------------------
  147|    203|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    203|        ({                                                              \
  |  |  354|    203|                int _level = (level), _e = (error);                     \
  |  |  355|    203|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 203]
  |  |  ------------------
  |  |  356|    203|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    203|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    203|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    203|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    203|        })
  ------------------
  148|    203|                           "geneve '%s' address is invalid, ignoring assignment: %s", lvalue, rvalue);
  149|    203|                return 0;
  150|    203|        }
  151|       |
  152|    389|        r = in_addr_is_multicast(f, &buffer);
  153|    389|        if (r > 0) {
  ------------------
  |  Branch (153:13): [True: 195, False: 194]
  ------------------
  154|    195|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    195|        ({                                                              \
  |  |  354|    195|                int _level = (level), _e = (error);                     \
  |  |  355|    195|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 195]
  |  |  ------------------
  |  |  356|    195|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    195|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    195|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    195|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    195|        })
  ------------------
  155|    195|                           "geneve invalid multicast '%s' address, ignoring assignment: %s", lvalue, rvalue);
  156|    195|                return 0;
  157|    195|        }
  158|       |
  159|    194|        v->remote_family = f;
  160|    194|        *addr = buffer;
  161|       |
  162|    194|        return 0;
  163|    389|}
config_parse_geneve_flow_label:
  175|    657|                void *userdata) {
  176|       |
  177|    657|        assert(filename);
  ------------------
  |  |   72|    657|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    657|        do {                                                            \
  |  |  |  |   59|    657|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    657|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 657]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    657|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    657|        } while (false)
  |  |  ------------------
  ------------------
  178|    657|        assert(lvalue);
  ------------------
  |  |   72|    657|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    657|        do {                                                            \
  |  |  |  |   59|    657|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    657|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 657]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    657|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    657|        } while (false)
  |  |  ------------------
  ------------------
  179|    657|        assert(rvalue);
  ------------------
  |  |   72|    657|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    657|        do {                                                            \
  |  |  |  |   59|    657|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    657|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 657]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    657|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    657|        } while (false)
  |  |  ------------------
  ------------------
  180|    657|        assert(data);
  ------------------
  |  |   72|    657|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    657|        do {                                                            \
  |  |  |  |   59|    657|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    657|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 657]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    657|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    657|        } while (false)
  |  |  ------------------
  ------------------
  181|       |
  182|    657|        Geneve *v = ASSERT_PTR(userdata);
  ------------------
  |  |   81|    657|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    657|        ({                                 \
  |  |  |  |   85|    657|                typeof(expr) var = (expr); \
  |  |  |  |   86|    657|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    657|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    657|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    657|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    657|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    657|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 657]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    657|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    657|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    657|                var;                       \
  |  |  |  |   88|    657|        })
  |  |  ------------------
  ------------------
  183|    657|        uint32_t f;
  184|    657|        int r;
  185|       |
  186|    657|        r = safe_atou32(rvalue, &f);
  187|    657|        if (r < 0) {
  ------------------
  |  Branch (187:13): [True: 215, False: 442]
  ------------------
  188|    215|                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse Geneve flow label '%s'.", rvalue);
  ------------------
  |  |  353|    215|        ({                                                              \
  |  |  354|    215|                int _level = (level), _e = (error);                     \
  |  |  355|    215|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 215]
  |  |  ------------------
  |  |  356|    215|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    215|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    215|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    215|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    215|        })
  ------------------
  189|    215|                return 0;
  190|    215|        }
  191|       |
  192|    442|        if (f & ~GENEVE_FLOW_LABEL_MAX_MASK) {
  ------------------
  |  |   13|    442|#define GENEVE_FLOW_LABEL_MAX_MASK 0xFFFFFU
  ------------------
  |  Branch (192:13): [True: 219, False: 223]
  ------------------
  193|    219|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    219|        ({                                                              \
  |  |  354|    219|                int _level = (level), _e = (error);                     \
  |  |  355|    219|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 219]
  |  |  ------------------
  |  |  356|    219|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    219|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    219|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    219|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    219|        })
  ------------------
  194|    219|                           "Geneve flow label '%s' not valid. Flow label range should be [0-1048575].", rvalue);
  195|    219|                return 0;
  196|    219|        }
  197|       |
  198|    223|        v->flow_label = f;
  199|       |
  200|    223|        return 0;
  201|    442|}
config_parse_geneve_ttl:
  213|    675|                void *userdata) {
  214|       |
  215|    675|        assert(filename);
  ------------------
  |  |   72|    675|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    675|        do {                                                            \
  |  |  |  |   59|    675|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    675|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 675]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    675|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    675|        } while (false)
  |  |  ------------------
  ------------------
  216|    675|        assert(lvalue);
  ------------------
  |  |   72|    675|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    675|        do {                                                            \
  |  |  |  |   59|    675|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    675|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 675]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    675|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    675|        } while (false)
  |  |  ------------------
  ------------------
  217|    675|        assert(rvalue);
  ------------------
  |  |   72|    675|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    675|        do {                                                            \
  |  |  |  |   59|    675|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    675|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 675]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    675|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    675|        } while (false)
  |  |  ------------------
  ------------------
  218|    675|        assert(data);
  ------------------
  |  |   72|    675|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    675|        do {                                                            \
  |  |  |  |   59|    675|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    675|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 675]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    675|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    675|        } while (false)
  |  |  ------------------
  ------------------
  219|       |
  220|    675|        Geneve *v = ASSERT_PTR(userdata);
  ------------------
  |  |   81|    675|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    675|        ({                                 \
  |  |  |  |   85|    675|                typeof(expr) var = (expr); \
  |  |  |  |   86|    675|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    675|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    675|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    675|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    675|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    675|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 675]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    675|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    675|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    675|                var;                       \
  |  |  |  |   88|    675|        })
  |  |  ------------------
  ------------------
  221|    675|        int r;
  222|       |
  223|    675|        if (streq(rvalue, "inherit")) {
  ------------------
  |  |   46|    675|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 198, False: 477]
  |  |  ------------------
  ------------------
  224|    198|                v->inherit = true;
  225|    198|                v->ttl = 0;  /* unset the unused ttl field for clarity */
  226|    198|                return 0;
  227|    198|        }
  228|       |
  229|    477|        r = config_parse_uint8_bounded(
  230|    477|                        unit, filename, line, section, section_line, lvalue, rvalue,
  231|    477|                        0, UINT8_MAX, true,
  232|    477|                        &v->ttl);
  233|    477|        if (r <= 0)
  ------------------
  |  Branch (233:13): [True: 273, False: 204]
  ------------------
  234|    273|                return r;
  235|    204|        v->inherit = false;
  236|    204|        return 0;
  237|    477|}
geneve.c:geneve_init:
  255|    283|static void geneve_init(NetDev *netdev) {
  256|    283|        Geneve *v = GENEVE(netdev);
  257|       |
  258|    283|        v->id = GENEVE_VID_MAX + 1;
  ------------------
  |  |   10|    283|#define GENEVE_VID_MAX (1u << 24) - 1
  ------------------
  259|    283|        v->geneve_df = _NETDEV_GENEVE_DF_INVALID;
  260|    283|        v->dest_port = DEFAULT_GENEVE_DESTINATION_PORT;
  ------------------
  |  |   14|    283|#define DEFAULT_GENEVE_DESTINATION_PORT 6081
  ------------------
  261|    283|        v->udpcsum = false;
  262|    283|        v->udp6zerocsumtx = false;
  263|    283|        v->udp6zerocsumrx = false;
  264|    283|}
geneve.c:netdev_geneve_verify:
  239|    283|static int netdev_geneve_verify(NetDev *netdev, const char *filename) {
  240|    283|        assert(filename);
  ------------------
  |  |   72|    283|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    283|        do {                                                            \
  |  |  |  |   59|    283|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    283|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 283]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    283|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    283|        } while (false)
  |  |  ------------------
  ------------------
  241|       |
  242|    283|        Geneve *v = GENEVE(netdev);
  243|       |
  244|    283|        if (v->id > GENEVE_VID_MAX)
  ------------------
  |  |   10|    283|#define GENEVE_VID_MAX (1u << 24) - 1
  ------------------
  |  Branch (244:13): [True: 253, False: 30]
  ------------------
  245|    253|                return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  287|    253|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|    253|        ({                                                              \
  |  |  |  |  271|    253|                int _error = (error);                                   \
  |  |  |  |  272|    253|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    253|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    253|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    253|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    253|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    253|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 253]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    253|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    253|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|    253|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    253|        ({                                                              \
  |  |  |  |  |  |  265|    253|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|    253|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|    253|        ({                                                              \
  |  |  |  |  |  |  |  |    8|    506|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 253, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    253|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|    253|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|    253|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 253, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|    253|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|    253|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|    253|        })
  |  |  |  |  ------------------
  |  |  |  |  274|    253|        })
  |  |  ------------------
  ------------------
  246|     30|                                                "%s: Geneve without valid VNI (or Virtual Network Identifier) configured. Ignoring.",
  247|     30|                                                filename);
  248|     30|        return 0;
  249|    283|}

hsr.c:netdev_hsr_init:
  109|      1|static void netdev_hsr_init(NetDev *netdev) {
  110|      1|        Hsr *h = ASSERT_PTR(HSR(netdev));
  ------------------
  |  |   81|      1|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|      1|        ({                                 \
  |  |  |  |   85|      1|                typeof(expr) var = (expr); \
  |  |  |  |   86|      1|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|      1|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      1|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|      1|                var;                       \
  |  |  |  |   88|      1|        })
  |  |  ------------------
  ------------------
  111|       |
  112|      1|        h->protocol = NETDEV_HSR_PROTOCOL_HSR;
  113|      1|}
hsr.c:netdev_hsr_done:
  103|      1|static void netdev_hsr_done(NetDev *netdev) {
  104|      1|        Hsr *h = ASSERT_PTR(HSR(netdev));
  ------------------
  |  |   81|      1|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|      1|        ({                                 \
  |  |  |  |   85|      1|                typeof(expr) var = (expr); \
  |  |  |  |   86|      1|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|      1|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      1|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|      1|                var;                       \
  |  |  |  |   88|      1|        })
  |  |  ------------------
  ------------------
  105|       |
  106|      1|        strv_free(h->ports);
  107|      1|}
hsr.c:netdev_hsr_config_verify:
   77|      1|static int netdev_hsr_config_verify(NetDev *netdev, const char *filename) {
   78|      1|        Hsr *h = ASSERT_PTR(HSR(netdev));
  ------------------
  |  |   81|      1|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|      1|        ({                                 \
  |  |  |  |   85|      1|                typeof(expr) var = (expr); \
  |  |  |  |   86|      1|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|      1|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      1|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|      1|                var;                       \
  |  |  |  |   88|      1|        })
  |  |  ------------------
  ------------------
   79|       |
   80|      1|        assert(filename);
  ------------------
  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      1|        } while (false)
  |  |  ------------------
  ------------------
   81|       |
   82|      1|        if (strv_length(h->ports) != 2)
  ------------------
  |  Branch (82:13): [True: 1, False: 0]
  ------------------
   83|      1|                return log_netdev_warning_errno(
  ------------------
  |  |  287|      1|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      1|        ({                                                              \
  |  |  |  |  271|      1|                int _error = (error);                                   \
  |  |  |  |  272|      1|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      1|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      1|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      1|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      1|        ({                                                              \
  |  |  |  |  |  |  265|      1|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      1|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      1|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      2|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      1|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      1|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      1|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      1|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      1|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      1|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      1|        })
  |  |  ------------------
  ------------------
   84|      0|                                netdev,
   85|      0|                                SYNTHETIC_ERRNO(EINVAL),
   86|      0|                                "HSR needs two ports set, ignoring \"%s\".",
   87|      0|                                filename);
   88|       |
   89|      0|        if (streq(h->ports[0], h->ports[1]))
  ------------------
  |  |   46|      0|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   90|      0|                return log_netdev_warning_errno(
  ------------------
  |  |  287|      0|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      0|        ({                                                              \
  |  |  |  |  271|      0|                int _error = (error);                                   \
  |  |  |  |  272|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      0|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|        ({                                                              \
  |  |  |  |  |  |  265|      0|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      0|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      0|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      0|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      0|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      0|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      0|        })
  |  |  ------------------
  ------------------
   91|      0|                                netdev,
   92|      0|                                SYNTHETIC_ERRNO(EINVAL),
   93|      0|                                "the two HSR ports must be different, ignoring \"%s\".",
   94|      0|                                filename);
   95|       |
   96|      0|        return 0;
   97|      0|}

config_parse_ipoib_pkey:
  110|    883|                void *userdata) {
  111|       |
  112|    883|        uint16_t u, *pkey = ASSERT_PTR(data);
  ------------------
  |  |   81|    883|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    883|        ({                                 \
  |  |  |  |   85|    883|                typeof(expr) var = (expr); \
  |  |  |  |   86|    883|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    883|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    883|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    883|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    883|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    883|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 883]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    883|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    883|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    883|                var;                       \
  |  |  |  |   88|    883|        })
  |  |  ------------------
  ------------------
  113|    883|        int r;
  114|       |
  115|    883|        assert(filename);
  ------------------
  |  |   72|    883|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    883|        do {                                                            \
  |  |  |  |   59|    883|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    883|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 883]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    883|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    883|        } while (false)
  |  |  ------------------
  ------------------
  116|    883|        assert(lvalue);
  ------------------
  |  |   72|    883|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    883|        do {                                                            \
  |  |  |  |   59|    883|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    883|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 883]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    883|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    883|        } while (false)
  |  |  ------------------
  ------------------
  117|    883|        assert(rvalue);
  ------------------
  |  |   72|    883|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    883|        do {                                                            \
  |  |  |  |   59|    883|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    883|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 883]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    883|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    883|        } while (false)
  |  |  ------------------
  ------------------
  118|       |
  119|    883|        if (isempty(rvalue)) {
  ------------------
  |  Branch (119:13): [True: 194, False: 689]
  ------------------
  120|    194|                *pkey = 0; /* 0 means unset. */
  121|    194|                return 0;
  122|    194|        }
  123|       |
  124|    689|        r = safe_atou16(rvalue, &u);
  125|    689|        if (r < 0) {
  ------------------
  |  Branch (125:13): [True: 208, False: 481]
  ------------------
  126|    208|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    208|        ({                                                              \
  |  |  354|    208|                int _level = (level), _e = (error);                     \
  |  |  355|    208|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 208]
  |  |  ------------------
  |  |  356|    208|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    208|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    208|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    208|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    208|        })
  ------------------
  127|    208|                           "Failed to parse IPoIB pkey '%s', ignoring assignment: %m",
  128|    208|                           rvalue);
  129|    208|                return 0;
  130|    208|        }
  131|    481|        if (IN_SET(u, 0, 0x8000)) {
  ------------------
  |  |  361|    481|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 214, False: 267]
  |  |  ------------------
  |  |  362|    481|                bool _found = false;                                    \
  |  |  363|    481|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|    481|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|    481|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|    481|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|    481|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|    481|                switch (x) {                                            \
  |  |  368|    214|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|    214|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|    214|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|    214|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|    214|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|    214|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 481]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 214, False: 267]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|    214|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|    214|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|    214|                        _found = true;                                  \
  |  |  370|    214|                        break;                                          \
  |  |  371|    267|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 267, False: 214]
  |  |  ------------------
  |  |  372|    267|                        ;                                               \
  |  |  373|    481|                }                                                       \
  |  |  374|    481|                _found;                                                 \
  |  |  375|    481|        })
  ------------------
  132|    214|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    214|        ({                                                              \
  |  |  354|    214|                int _level = (level), _e = (error);                     \
  |  |  355|    214|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 214]
  |  |  ------------------
  |  |  356|    214|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    214|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    214|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    214|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    214|        })
  ------------------
  133|    214|                           "IPoIB pkey cannot be 0 nor 0x8000, ignoring assignment: %s",
  134|    214|                           rvalue);
  135|    214|                return 0;
  136|    214|        }
  137|       |
  138|    267|        *pkey = u;
  139|    267|        return 0;
  140|    481|}
ipoib.c:netdev_ipoib_init:
   19|     61|static void netdev_ipoib_init(NetDev *netdev) {
   20|     61|        IPoIB *ipoib = IPOIB(netdev);
   21|       |
   22|     61|        ipoib->mode = _IP_OVER_INFINIBAND_MODE_INVALID;
   23|     61|        ipoib->umcast = -1;
   24|     61|}

ipvlan.c:ipvlan_init:
   45|     35|static void ipvlan_init(NetDev *netdev) {
   46|     35|        IPVlan *m = ASSERT_PTR(netdev)->kind == NETDEV_KIND_IPVLAN ? IPVLAN(netdev) : IPVTAP(netdev);
  ------------------
  |  |   81|     35|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|     35|        ({                                 \
  |  |  |  |   85|     35|                typeof(expr) var = (expr); \
  |  |  |  |   86|     35|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|     35|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|     35|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|     35|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|     35|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|     35|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 35]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|     35|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|     35|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|     35|                var;                       \
  |  |  |  |   88|     35|        })
  |  |  ------------------
  ------------------
  |  Branch (46:21): [True: 34, False: 1]
  ------------------
   47|       |
   48|     35|        m->mode = _NETDEV_IPVLAN_MODE_INVALID;
   49|     35|        m->flags = _NETDEV_IPVLAN_FLAGS_INVALID;
   50|     35|}

config_parse_l2tp_tunnel_local_address:
  485|  2.97k|                void *userdata) {
  486|       |
  487|  2.97k|        _cleanup_free_ char *addr_or_type = NULL, *ifname = NULL;
  ------------------
  |  |   82|  2.97k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  2.97k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  488|  2.97k|        L2tpLocalAddressType type;
  489|  2.97k|        L2tpTunnel *t = ASSERT_PTR(userdata);
  ------------------
  |  |   81|  2.97k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  2.97k|        ({                                 \
  |  |  |  |   85|  2.97k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  2.97k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  2.97k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  2.97k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  2.97k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  2.97k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  2.97k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.97k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  2.97k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  2.97k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  2.97k|                var;                       \
  |  |  |  |   88|  2.97k|        })
  |  |  ------------------
  ------------------
  490|  2.97k|        const char *p = ASSERT_PTR(rvalue);
  ------------------
  |  |   81|  2.97k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  2.97k|        ({                                 \
  |  |  |  |   85|  2.97k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  2.97k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  2.97k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  2.97k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  2.97k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  2.97k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  2.97k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.97k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  2.97k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  2.97k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  2.97k|                var;                       \
  |  |  |  |   88|  2.97k|        })
  |  |  ------------------
  ------------------
  491|  2.97k|        union in_addr_union a;
  492|  2.97k|        int r, f;
  493|       |
  494|  2.97k|        assert(filename);
  ------------------
  |  |   72|  2.97k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.97k|        do {                                                            \
  |  |  |  |   59|  2.97k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.97k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.97k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.97k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.97k|        } while (false)
  |  |  ------------------
  ------------------
  495|  2.97k|        assert(lvalue);
  ------------------
  |  |   72|  2.97k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.97k|        do {                                                            \
  |  |  |  |   59|  2.97k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.97k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.97k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.97k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.97k|        } while (false)
  |  |  ------------------
  ------------------
  496|       |
  497|  2.97k|        if (isempty(rvalue)) {
  ------------------
  |  Branch (497:13): [True: 662, False: 2.31k]
  ------------------
  498|    662|                t->local_ifname = mfree(t->local_ifname);
  ------------------
  |  |  404|    662|        ({                                      \
  |  |  405|    662|                free(memory);                   \
  |  |  406|    662|                (typeof(memory)) NULL;          \
  |  |  407|    662|        })
  ------------------
  499|    662|                t->local_address_type = NETDEV_L2TP_LOCAL_ADDRESS_AUTO;
  500|    662|                t->local = IN_ADDR_NULL;
  ------------------
  |  |  199|    662|#define IN_ADDR_NULL ((union in_addr_union) { .in6 = {} })
  ------------------
  501|       |
  502|    662|                if (!in_addr_is_set(t->family, &t->remote))
  ------------------
  |  Branch (502:21): [True: 391, False: 271]
  ------------------
  503|       |                        /* If Remote= is not specified yet, then also clear family. */
  504|    391|                        t->family = AF_UNSPEC;
  505|       |
  506|    662|                return 0;
  507|    662|        }
  508|       |
  509|  2.31k|        r = extract_first_word(&p, &addr_or_type, "@", 0);
  510|  2.31k|        if (r < 0)
  ------------------
  |  Branch (510:13): [True: 3, False: 2.30k]
  ------------------
  511|      3|                return log_oom();
  ------------------
  |  |  280|      3|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      3|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      3|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      3|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  512|  2.30k|        if (r == 0) {
  ------------------
  |  Branch (512:13): [True: 195, False: 2.11k]
  ------------------
  513|    195|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    195|        ({                                                              \
  |  |  354|    195|                int _level = (level), _e = (error);                     \
  |  |  355|    195|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 195]
  |  |  ------------------
  |  |  356|    195|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    195|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    195|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    195|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    195|        })
  ------------------
  514|    195|                           "Invalid L2TP Tunnel address specified in %s=, ignoring assignment: %s", lvalue, rvalue);
  515|    195|                return 0;
  516|    195|        }
  517|       |
  518|  2.11k|        if (!isempty(p)) {
  ------------------
  |  Branch (518:13): [True: 625, False: 1.48k]
  ------------------
  519|    625|                if (!ifname_valid_full(p, IFNAME_VALID_ALTERNATIVE)) {
  ------------------
  |  Branch (519:21): [True: 423, False: 202]
  ------------------
  520|    423|                        log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    423|        ({                                                              \
  |  |  354|    423|                int _level = (level), _e = (error);                     \
  |  |  355|    423|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 423]
  |  |  ------------------
  |  |  356|    423|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    423|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    423|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    423|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    423|        })
  ------------------
  521|    423|                                   "Invalid interface name specified in %s=, ignoring assignment: %s", lvalue, rvalue);
  522|    423|                        return 0;
  523|    423|                }
  524|       |
  525|    202|                ifname = strdup(p);
  526|    202|                if (!ifname)
  ------------------
  |  Branch (526:21): [True: 0, False: 202]
  ------------------
  527|      0|                        return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  528|    202|        }
  529|       |
  530|  1.68k|        type = l2tp_local_address_type_from_string(addr_or_type);
  531|  1.68k|        if (type >= 0) {
  ------------------
  |  Branch (531:13): [True: 389, False: 1.30k]
  ------------------
  532|    389|                free_and_replace(t->local_ifname, ifname);
  ------------------
  |  |   49|    389|        free_and_replace_full(a, b, free)
  |  |  ------------------
  |  |  |  |   10|    389|        ({                                      \
  |  |  |  |   11|    389|                typeof(a)* _a = &(a);           \
  |  |  |  |   12|    389|                typeof(b)* _b = &(b);           \
  |  |  |  |   13|    389|                free_func(*_a);                 \
  |  |  |  |   14|    389|                *_a = *_b;                      \
  |  |  |  |   15|    389|                *_b = NULL;                     \
  |  |  |  |   16|    389|                0;                              \
  |  |  |  |   17|    389|        })
  |  |  ------------------
  ------------------
  533|    389|                t->local_address_type = type;
  534|    389|                t->local = IN_ADDR_NULL;
  ------------------
  |  |  199|    389|#define IN_ADDR_NULL ((union in_addr_union) { .in6 = {} })
  ------------------
  535|       |
  536|    389|                if (!in_addr_is_set(t->family, &t->remote))
  ------------------
  |  Branch (536:21): [True: 194, False: 195]
  ------------------
  537|       |                        /* If Remote= is not specified yet, then also clear family. */
  538|    194|                        t->family = AF_UNSPEC;
  539|       |
  540|    389|                return 0;
  541|    389|        }
  542|       |
  543|  1.30k|        r = in_addr_from_string_auto(addr_or_type, &f, &a);
  544|  1.30k|        if (r < 0) {
  ------------------
  |  Branch (544:13): [True: 494, False: 806]
  ------------------
  545|    494|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    494|        ({                                                              \
  |  |  354|    494|                int _level = (level), _e = (error);                     \
  |  |  355|    494|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 494]
  |  |  ------------------
  |  |  356|    494|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    494|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    494|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    494|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    494|        })
  ------------------
  546|    494|                           "Invalid L2TP Tunnel local address \"%s\" specified, ignoring assignment: %s", addr_or_type, rvalue);
  547|    494|                return 0;
  548|    494|        }
  549|       |
  550|    806|        if (in_addr_is_null(f, &a)) {
  ------------------
  |  Branch (550:13): [True: 203, False: 603]
  ------------------
  551|    203|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    203|        ({                                                              \
  |  |  354|    203|                int _level = (level), _e = (error);                     \
  |  |  355|    203|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 203]
  |  |  ------------------
  |  |  356|    203|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    203|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    203|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    203|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    203|        })
  ------------------
  552|    203|                           "L2TP Tunnel local address cannot be null, ignoring assignment: %s", rvalue);
  553|    203|                return 0;
  554|    203|        }
  555|       |
  556|    603|        if (t->family != AF_UNSPEC && t->family != f) {
  ------------------
  |  Branch (556:13): [True: 391, False: 212]
  |  Branch (556:39): [True: 195, False: 196]
  ------------------
  557|    195|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    195|        ({                                                              \
  |  |  354|    195|                int _level = (level), _e = (error);                     \
  |  |  355|    195|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 195]
  |  |  ------------------
  |  |  356|    195|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    195|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    195|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    195|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    195|        })
  ------------------
  558|    195|                           "Address family does not match the previous assignment, ignoring assignment: %s", rvalue);
  559|    195|                return 0;
  560|    195|        }
  561|       |
  562|    408|        t->family = f;
  563|    408|        t->local = a;
  564|    408|        free_and_replace(t->local_ifname, ifname);
  ------------------
  |  |   49|    408|        free_and_replace_full(a, b, free)
  |  |  ------------------
  |  |  |  |   10|    408|        ({                                      \
  |  |  |  |   11|    408|                typeof(a)* _a = &(a);           \
  |  |  |  |   12|    408|                typeof(b)* _b = &(b);           \
  |  |  |  |   13|    408|                free_func(*_a);                 \
  |  |  |  |   14|    408|                *_a = *_b;                      \
  |  |  |  |   15|    408|                *_b = NULL;                     \
  |  |  |  |   16|    408|                0;                              \
  |  |  |  |   17|    408|        })
  |  |  ------------------
  ------------------
  565|    408|        t->local_address_type = _NETDEV_L2TP_LOCAL_ADDRESS_INVALID;
  566|    408|        return 0;
  567|    603|}
config_parse_l2tp_tunnel_remote_address:
  579|  2.08k|                void *userdata) {
  580|       |
  581|  2.08k|        L2tpTunnel *t = ASSERT_PTR(userdata);
  ------------------
  |  |   81|  2.08k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  2.08k|        ({                                 \
  |  |  |  |   85|  2.08k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  2.08k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  2.08k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  2.08k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  2.08k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  2.08k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  2.08k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.08k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  2.08k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  2.08k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  2.08k|                var;                       \
  |  |  |  |   88|  2.08k|        })
  |  |  ------------------
  ------------------
  582|  2.08k|        union in_addr_union a;
  583|  2.08k|        int r, f;
  584|       |
  585|  2.08k|        assert(filename);
  ------------------
  |  |   72|  2.08k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.08k|        do {                                                            \
  |  |  |  |   59|  2.08k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.08k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.08k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.08k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.08k|        } while (false)
  |  |  ------------------
  ------------------
  586|  2.08k|        assert(lvalue);
  ------------------
  |  |   72|  2.08k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.08k|        do {                                                            \
  |  |  |  |   59|  2.08k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.08k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.08k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.08k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.08k|        } while (false)
  |  |  ------------------
  ------------------
  587|  2.08k|        assert(rvalue);
  ------------------
  |  |   72|  2.08k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.08k|        do {                                                            \
  |  |  |  |   59|  2.08k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.08k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.08k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.08k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.08k|        } while (false)
  |  |  ------------------
  ------------------
  588|       |
  589|  2.08k|        if (isempty(rvalue)) {
  ------------------
  |  Branch (589:13): [True: 580, False: 1.50k]
  ------------------
  590|    580|                t->remote = IN_ADDR_NULL;
  ------------------
  |  |  199|    580|#define IN_ADDR_NULL ((union in_addr_union) { .in6 = {} })
  ------------------
  591|       |
  592|    580|                if (!in_addr_is_set(t->family, &t->local))
  ------------------
  |  Branch (592:21): [True: 386, False: 194]
  ------------------
  593|       |                        /* If Local= is not specified yet, then also clear family. */
  594|    386|                        t->family = AF_UNSPEC;
  595|       |
  596|    580|                return 0;
  597|    580|        }
  598|       |
  599|  1.50k|        r = in_addr_from_string_auto(rvalue, &f, &a);
  600|  1.50k|        if (r < 0) {
  ------------------
  |  Branch (600:13): [True: 229, False: 1.27k]
  ------------------
  601|    229|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    229|        ({                                                              \
  |  |  354|    229|                int _level = (level), _e = (error);                     \
  |  |  355|    229|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 229]
  |  |  ------------------
  |  |  356|    229|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    229|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    229|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    229|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    229|        })
  ------------------
  602|    229|                           "Invalid L2TP Tunnel remote address specified, ignoring assignment: %s", rvalue);
  603|    229|                return 0;
  604|    229|        }
  605|       |
  606|  1.27k|        if (in_addr_is_null(f, &a)) {
  ------------------
  |  Branch (606:13): [True: 194, False: 1.07k]
  ------------------
  607|    194|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    194|        ({                                                              \
  |  |  354|    194|                int _level = (level), _e = (error);                     \
  |  |  355|    194|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 194]
  |  |  ------------------
  |  |  356|    194|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    194|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    194|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    194|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    194|        })
  ------------------
  608|    194|                           "L2TP Tunnel remote address cannot be null, ignoring assignment: %s", rvalue);
  609|    194|                return 0;
  610|    194|        }
  611|       |
  612|  1.07k|        if (t->family != AF_UNSPEC && t->family != f) {
  ------------------
  |  Branch (612:13): [True: 501, False: 576]
  |  Branch (612:39): [True: 231, False: 270]
  ------------------
  613|    231|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    231|        ({                                                              \
  |  |  354|    231|                int _level = (level), _e = (error);                     \
  |  |  355|    231|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 231]
  |  |  ------------------
  |  |  356|    231|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    231|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    231|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    231|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    231|        })
  ------------------
  614|    231|                           "Address family does not match the previous assignment, ignoring assignment: %s", rvalue);
  615|    231|                return 0;
  616|    231|        }
  617|       |
  618|    846|        t->family = f;
  619|    846|        t->remote = a;
  620|    846|        return 0;
  621|  1.07k|}
config_parse_l2tp_tunnel_id:
  633|  1.36k|                void *userdata) {
  634|       |
  635|  1.36k|        assert(filename);
  ------------------
  |  |   72|  1.36k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.36k|        do {                                                            \
  |  |  |  |   59|  1.36k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.36k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.36k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.36k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.36k|        } while (false)
  |  |  ------------------
  ------------------
  636|  1.36k|        assert(lvalue);
  ------------------
  |  |   72|  1.36k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.36k|        do {                                                            \
  |  |  |  |   59|  1.36k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.36k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.36k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.36k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.36k|        } while (false)
  |  |  ------------------
  ------------------
  637|  1.36k|        assert(rvalue);
  ------------------
  |  |   72|  1.36k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.36k|        do {                                                            \
  |  |  |  |   59|  1.36k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.36k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.36k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.36k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.36k|        } while (false)
  |  |  ------------------
  ------------------
  638|       |
  639|  1.36k|        uint32_t *id = ASSERT_PTR(data);
  ------------------
  |  |   81|  1.36k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  1.36k|        ({                                 \
  |  |  |  |   85|  1.36k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  1.36k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  1.36k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  1.36k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  1.36k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  1.36k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  1.36k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.36k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  1.36k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  1.36k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  1.36k|                var;                       \
  |  |  |  |   88|  1.36k|        })
  |  |  ------------------
  ------------------
  640|       |
  641|  1.36k|        return config_parse_uint32_bounded(
  642|  1.36k|                        unit, filename, line, section, section_line, lvalue, rvalue,
  643|  1.36k|                        1, UINT32_MAX, true,
  644|  1.36k|                        id);
  645|  1.36k|}
config_parse_l2tp_session_id:
  657|  5.27k|                void *userdata) {
  658|       |
  659|  5.27k|        assert(filename);
  ------------------
  |  |   72|  5.27k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.27k|        do {                                                            \
  |  |  |  |   59|  5.27k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.27k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.27k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.27k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.27k|        } while (false)
  |  |  ------------------
  ------------------
  660|  5.27k|        assert(section);
  ------------------
  |  |   72|  5.27k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.27k|        do {                                                            \
  |  |  |  |   59|  5.27k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.27k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.27k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.27k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.27k|        } while (false)
  |  |  ------------------
  ------------------
  661|  5.27k|        assert(lvalue);
  ------------------
  |  |   72|  5.27k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.27k|        do {                                                            \
  |  |  |  |   59|  5.27k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.27k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.27k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.27k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.27k|        } while (false)
  |  |  ------------------
  ------------------
  662|  5.27k|        assert(rvalue);
  ------------------
  |  |   72|  5.27k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.27k|        do {                                                            \
  |  |  |  |   59|  5.27k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.27k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.27k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.27k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.27k|        } while (false)
  |  |  ------------------
  ------------------
  663|  5.27k|        assert(data);
  ------------------
  |  |   72|  5.27k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.27k|        do {                                                            \
  |  |  |  |   59|  5.27k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.27k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.27k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.27k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.27k|        } while (false)
  |  |  ------------------
  ------------------
  664|       |
  665|  5.27k|        L2tpTunnel *t = ASSERT_PTR(userdata);
  ------------------
  |  |   81|  5.27k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  5.27k|        ({                                 \
  |  |  |  |   85|  5.27k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  5.27k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  5.27k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  5.27k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  5.27k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  5.27k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  5.27k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.27k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  5.27k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  5.27k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  5.27k|                var;                       \
  |  |  |  |   88|  5.27k|        })
  |  |  ------------------
  ------------------
  666|  5.27k|        _cleanup_(l2tp_session_free_or_set_invalidp) L2tpSession *session = NULL;
  ------------------
  |  |   78|  5.27k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  667|  5.27k|        int r;
  668|       |
  669|  5.27k|        r = l2tp_session_new_static(t, filename, section_line, &session);
  670|  5.27k|        if (r < 0)
  ------------------
  |  Branch (670:13): [True: 0, False: 5.27k]
  ------------------
  671|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  672|       |
  673|  5.27k|        uint32_t *id = streq(lvalue, "SessionId") ? &session->session_id : &session->peer_session_id;
  ------------------
  |  |   46|  5.27k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 2.95k, False: 2.32k]
  |  |  ------------------
  ------------------
  674|       |
  675|  5.27k|        r = config_parse_uint32_bounded(
  676|  5.27k|                        unit, filename, line, section, section_line, lvalue, rvalue,
  677|  5.27k|                        1, UINT32_MAX, true,
  678|  5.27k|                        id);
  679|  5.27k|        if (r <= 0)
  ------------------
  |  Branch (679:13): [True: 428, False: 4.85k]
  ------------------
  680|    428|                return r;
  681|  4.85k|        TAKE_PTR(session);
  ------------------
  |  |  388|  4.85k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  4.85k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  4.85k|        ({                                                       \
  |  |  |  |  |  |  381|  4.85k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  4.85k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  4.85k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  4.85k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  4.85k|                _var_;                                           \
  |  |  |  |  |  |  386|  4.85k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  682|  4.85k|        return 0;
  683|  5.27k|}
config_parse_l2tp_session_l2spec:
  695|    389|                void *userdata) {
  696|       |
  697|    389|        _cleanup_(l2tp_session_free_or_set_invalidp) L2tpSession *session = NULL;
  ------------------
  |  |   78|    389|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  698|    389|        L2tpTunnel *t = userdata;
  699|    389|        L2tpL2specType spec;
  700|    389|        int r;
  701|       |
  702|    389|        assert(filename);
  ------------------
  |  |   72|    389|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    389|        do {                                                            \
  |  |  |  |   59|    389|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    389|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 389]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    389|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    389|        } while (false)
  |  |  ------------------
  ------------------
  703|    389|        assert(section);
  ------------------
  |  |   72|    389|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    389|        do {                                                            \
  |  |  |  |   59|    389|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    389|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 389]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    389|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    389|        } while (false)
  |  |  ------------------
  ------------------
  704|    389|        assert(lvalue);
  ------------------
  |  |   72|    389|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    389|        do {                                                            \
  |  |  |  |   59|    389|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    389|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 389]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    389|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    389|        } while (false)
  |  |  ------------------
  ------------------
  705|    389|        assert(rvalue);
  ------------------
  |  |   72|    389|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    389|        do {                                                            \
  |  |  |  |   59|    389|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    389|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 389]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    389|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    389|        } while (false)
  |  |  ------------------
  ------------------
  706|    389|        assert(data);
  ------------------
  |  |   72|    389|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    389|        do {                                                            \
  |  |  |  |   59|    389|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    389|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 389]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    389|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    389|        } while (false)
  |  |  ------------------
  ------------------
  707|       |
  708|    389|        r = l2tp_session_new_static(t, filename, section_line, &session);
  709|    389|        if (r < 0)
  ------------------
  |  Branch (709:13): [True: 0, False: 389]
  ------------------
  710|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  711|       |
  712|    389|        spec = l2tp_l2spec_type_from_string(rvalue);
  713|    389|        if (spec < 0) {
  ------------------
  |  Branch (713:13): [True: 195, False: 194]
  ------------------
  714|    195|                log_syntax(unit, LOG_WARNING, filename, line, spec,
  ------------------
  |  |  353|    195|        ({                                                              \
  |  |  354|    195|                int _level = (level), _e = (error);                     \
  |  |  355|    195|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 195]
  |  |  ------------------
  |  |  356|    195|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    195|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    195|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    195|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    195|        })
  ------------------
  715|    195|                           "Failed to parse layer2 specific header type. Ignoring assignment: %s", rvalue);
  716|    195|                return 0;
  717|    195|        }
  718|       |
  719|    194|        session->l2tp_l2spec_type = spec;
  720|       |
  721|    194|        session = NULL;
  722|    194|        return 0;
  723|    389|}
config_parse_l2tp_session_name:
  735|  60.9k|                void *userdata) {
  736|       |
  737|  60.9k|        _cleanup_(l2tp_session_free_or_set_invalidp) L2tpSession *session = NULL;
  ------------------
  |  |   78|  60.9k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  738|  60.9k|        L2tpTunnel *t = userdata;
  739|  60.9k|        int r;
  740|       |
  741|  60.9k|        assert(filename);
  ------------------
  |  |   72|  60.9k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  60.9k|        do {                                                            \
  |  |  |  |   59|  60.9k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  60.9k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 60.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  60.9k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  60.9k|        } while (false)
  |  |  ------------------
  ------------------
  742|  60.9k|        assert(section);
  ------------------
  |  |   72|  60.9k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  60.9k|        do {                                                            \
  |  |  |  |   59|  60.9k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  60.9k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 60.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  60.9k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  60.9k|        } while (false)
  |  |  ------------------
  ------------------
  743|  60.9k|        assert(lvalue);
  ------------------
  |  |   72|  60.9k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  60.9k|        do {                                                            \
  |  |  |  |   59|  60.9k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  60.9k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 60.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  60.9k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  60.9k|        } while (false)
  |  |  ------------------
  ------------------
  744|  60.9k|        assert(rvalue);
  ------------------
  |  |   72|  60.9k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  60.9k|        do {                                                            \
  |  |  |  |   59|  60.9k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  60.9k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 60.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  60.9k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  60.9k|        } while (false)
  |  |  ------------------
  ------------------
  745|  60.9k|        assert(data);
  ------------------
  |  |   72|  60.9k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  60.9k|        do {                                                            \
  |  |  |  |   59|  60.9k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  60.9k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 60.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  60.9k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  60.9k|        } while (false)
  |  |  ------------------
  ------------------
  746|       |
  747|  60.9k|        r = l2tp_session_new_static(t, filename, section_line, &session);
  748|  60.9k|        if (r < 0)
  ------------------
  |  Branch (748:13): [True: 0, False: 60.9k]
  ------------------
  749|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  750|       |
  751|  60.9k|        if (!ifname_valid(rvalue)) {
  ------------------
  |  Branch (751:13): [True: 52.3k, False: 8.61k]
  ------------------
  752|  52.3k|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|  52.3k|        ({                                                              \
  |  |  354|  52.3k|                int _level = (level), _e = (error);                     \
  |  |  355|  52.3k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 52.3k]
  |  |  ------------------
  |  |  356|  52.3k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  52.3k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  52.3k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  52.3k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  52.3k|        })
  ------------------
  753|  52.3k|                           "Failed to parse L2TP tunnel session name. Ignoring assignment: %s", rvalue);
  754|  52.3k|                return 0;
  755|  52.3k|        }
  756|       |
  757|  8.61k|        r = free_and_strdup(&session->name, rvalue);
  758|  8.61k|        if (r < 0)
  ------------------
  |  Branch (758:13): [True: 0, False: 8.61k]
  ------------------
  759|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  760|       |
  761|  8.61k|        session = NULL;
  762|  8.61k|        return 0;
  763|  8.61k|}
l2tp-tunnel.c:l2tp_session_free:
   46|  59.3k|static L2tpSession* l2tp_session_free(L2tpSession *s) {
   47|  59.3k|        if (!s)
  ------------------
  |  Branch (47:13): [True: 0, False: 59.3k]
  ------------------
   48|      0|                return NULL;
   49|       |
   50|  59.3k|        if (s->tunnel && s->section)
  ------------------
  |  Branch (50:13): [True: 59.3k, False: 0]
  |  Branch (50:26): [True: 59.3k, False: 0]
  ------------------
   51|  59.3k|                ordered_hashmap_remove(s->tunnel->sessions_by_section, s->section);
   52|       |
   53|  59.3k|        config_section_free(s->section);
   54|  59.3k|        free(s->name);
   55|  59.3k|        return mfree(s);
  ------------------
  |  |  404|  59.3k|        ({                                      \
  |  |  405|  59.3k|                free(memory);                   \
  |  |  406|  59.3k|                (typeof(memory)) NULL;          \
  |  |  407|  59.3k|        })
  ------------------
   56|  59.3k|}
l2tp-tunnel.c:l2tp_session_new_static:
   65|  66.6k|static int l2tp_session_new_static(L2tpTunnel *t, const char *filename, unsigned section_line, L2tpSession **ret) {
   66|  66.6k|        _cleanup_(config_section_freep) ConfigSection *n = NULL;
  ------------------
  |  |   78|  66.6k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
   67|  66.6k|        _cleanup_(l2tp_session_freep) L2tpSession *s = NULL;
  ------------------
  |  |   78|  66.6k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
   68|  66.6k|        int r;
   69|       |
   70|  66.6k|        assert(t);
  ------------------
  |  |   72|  66.6k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  66.6k|        do {                                                            \
  |  |  |  |   59|  66.6k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  66.6k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 66.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  66.6k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  66.6k|        } while (false)
  |  |  ------------------
  ------------------
   71|  66.6k|        assert(ret);
  ------------------
  |  |   72|  66.6k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  66.6k|        do {                                                            \
  |  |  |  |   59|  66.6k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  66.6k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 66.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  66.6k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  66.6k|        } while (false)
  |  |  ------------------
  ------------------
   72|  66.6k|        assert(filename);
  ------------------
  |  |   72|  66.6k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  66.6k|        do {                                                            \
  |  |  |  |   59|  66.6k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  66.6k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 66.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  66.6k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  66.6k|        } while (false)
  |  |  ------------------
  ------------------
   73|  66.6k|        assert(section_line > 0);
  ------------------
  |  |   72|  66.6k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  66.6k|        do {                                                            \
  |  |  |  |   59|  66.6k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  66.6k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 66.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  66.6k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  66.6k|        } while (false)
  |  |  ------------------
  ------------------
   74|       |
   75|  66.6k|        r = config_section_new(filename, section_line, &n);
   76|  66.6k|        if (r < 0)
  ------------------
  |  Branch (76:13): [True: 0, False: 66.6k]
  ------------------
   77|      0|                return r;
   78|       |
   79|  66.6k|        s = ordered_hashmap_get(t->sessions_by_section, n);
   80|  66.6k|        if (s) {
  ------------------
  |  Branch (80:13): [True: 7.28k, False: 59.3k]
  ------------------
   81|  7.28k|                *ret = TAKE_PTR(s);
  ------------------
  |  |  388|  7.28k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  7.28k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  7.28k|        ({                                                       \
  |  |  |  |  |  |  381|  7.28k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  7.28k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  7.28k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  7.28k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  7.28k|                _var_;                                           \
  |  |  |  |  |  |  386|  7.28k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   82|  7.28k|                return 0;
   83|  7.28k|        }
   84|       |
   85|  59.3k|        s = new(L2tpSession, 1);
  ------------------
  |  |   17|  59.3k|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
   86|  59.3k|        if (!s)
  ------------------
  |  Branch (86:13): [True: 0, False: 59.3k]
  ------------------
   87|      0|                return -ENOMEM;
   88|       |
   89|  59.3k|        *s = (L2tpSession) {
   90|  59.3k|                .l2tp_l2spec_type = NETDEV_L2TP_L2SPECTYPE_DEFAULT,
   91|  59.3k|                .tunnel = t,
   92|  59.3k|                .section = TAKE_PTR(n),
  ------------------
  |  |  388|  59.3k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  59.3k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  59.3k|        ({                                                       \
  |  |  |  |  |  |  381|  59.3k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  59.3k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  59.3k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  59.3k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  59.3k|                _var_;                                           \
  |  |  |  |  |  |  386|  59.3k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   93|  59.3k|        };
   94|       |
   95|  59.3k|        r = ordered_hashmap_ensure_put(&t->sessions_by_section, &l2tp_session_hash_ops_by_section, s->section, s);
   96|  59.3k|        if (r < 0)
  ------------------
  |  Branch (96:13): [True: 0, False: 59.3k]
  ------------------
   97|      0|                return r;
   98|       |
   99|  59.3k|        *ret = TAKE_PTR(s);
  ------------------
  |  |  388|  59.3k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  59.3k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  59.3k|        ({                                                       \
  |  |  |  |  |  |  381|  59.3k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  59.3k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  59.3k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  59.3k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  59.3k|                _var_;                                           \
  |  |  |  |  |  |  386|  59.3k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  100|  59.3k|        return 0;
  101|  59.3k|}
l2tp-tunnel.c:l2tp_tunnel_init:
  765|    826|static void l2tp_tunnel_init(NetDev *netdev) {
  766|    826|        L2tpTunnel *t = L2TP(netdev);
  767|       |
  768|    826|        t->l2tp_encap_type = NETDEV_L2TP_ENCAPTYPE_UDP;
  769|    826|        t->udp6_csum_rx = true;
  770|    826|        t->udp6_csum_tx = true;
  771|    826|}
l2tp-tunnel.c:l2tp_tunnel_done:
  912|    826|static void l2tp_tunnel_done(NetDev *netdev) {
  913|    826|        L2tpTunnel *t = L2TP(netdev);
  914|       |
  915|    826|        ordered_hashmap_free(t->sessions_by_section);
  916|    826|        free(t->local_ifname);
  917|    826|}
l2tp-tunnel.c:netdev_l2tp_tunnel_verify:
  811|    823|static int netdev_l2tp_tunnel_verify(NetDev *netdev, const char *filename) {
  812|    823|        assert(filename);
  ------------------
  |  |   72|    823|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    823|        do {                                                            \
  |  |  |  |   59|    823|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    823|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 823]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    823|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    823|        } while (false)
  |  |  ------------------
  ------------------
  813|       |
  814|    823|        L2tpTunnel *t = L2TP(netdev);
  815|    823|        L2tpSession *session;
  816|       |
  817|    823|        if (!IN_SET(t->family, AF_INET, AF_INET6))
  ------------------
  |  |  361|    823|        ({                                                              \
  |  |  362|    823|                bool _found = false;                                    \
  |  |  363|    823|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|    823|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|    823|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|    823|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|    823|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|    823|                switch (x) {                                            \
  |  |  368|    416|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|    358|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|    358|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|    358|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|    416|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|    416|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 58, False: 765]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 358, False: 465]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|    416|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|    416|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|    416|                        _found = true;                                  \
  |  |  370|    416|                        break;                                          \
  |  |  371|    407|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 407, False: 416]
  |  |  ------------------
  |  |  372|    407|                        ;                                               \
  |  |  373|    823|                }                                                       \
  |  |  374|    823|                _found;                                                 \
  |  |  375|    823|        })
  ------------------
  |  Branch (817:13): [True: 407, False: 416]
  ------------------
  818|    407|                return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  287|    407|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|    407|        ({                                                              \
  |  |  |  |  271|    407|                int _error = (error);                                   \
  |  |  |  |  272|    407|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    407|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    407|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    407|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    407|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    407|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 407]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    407|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    407|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|    407|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    407|        ({                                                              \
  |  |  |  |  |  |  265|    407|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|    407|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|    407|        ({                                                              \
  |  |  |  |  |  |  |  |    8|    814|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 407, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    407|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|    407|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|    407|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 407, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|    407|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|    407|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|    407|        })
  |  |  |  |  ------------------
  |  |  |  |  274|    407|        })
  |  |  ------------------
  ------------------
  819|    416|                                                "%s: L2TP tunnel with invalid address family configured. Ignoring",
  820|    416|                                                filename);
  821|       |
  822|    416|        if (!in_addr_is_set(t->family, &t->remote))
  ------------------
  |  Branch (822:13): [True: 26, False: 390]
  ------------------
  823|     26|                return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  287|     26|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|     26|        ({                                                              \
  |  |  |  |  271|     26|                int _error = (error);                                   \
  |  |  |  |  272|     26|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|     26|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|     26|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|     26|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|     26|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|     26|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 26]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|     26|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|     26|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|     26|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|     26|        ({                                                              \
  |  |  |  |  |  |  265|     26|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|     26|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|     26|        ({                                                              \
  |  |  |  |  |  |  |  |    8|     52|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 26, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|     26|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|     26|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|     26|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 26, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|     26|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|     26|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|     26|        })
  |  |  |  |  ------------------
  |  |  |  |  274|     26|        })
  |  |  ------------------
  ------------------
  824|    390|                                                "%s: L2TP tunnel without a remote address configured. Ignoring",
  825|    390|                                                filename);
  826|       |
  827|    390|        if (t->tunnel_id == 0 || t->peer_tunnel_id == 0)
  ------------------
  |  Branch (827:13): [True: 60, False: 330]
  |  Branch (827:34): [True: 55, False: 275]
  ------------------
  828|    115|                return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  287|    115|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|    115|        ({                                                              \
  |  |  |  |  271|    115|                int _error = (error);                                   \
  |  |  |  |  272|    115|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    115|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    115|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    115|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    115|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    115|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 115]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    115|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    115|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|    115|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    115|        ({                                                              \
  |  |  |  |  |  |  265|    115|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|    115|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|    115|        ({                                                              \
  |  |  |  |  |  |  |  |    8|    230|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 115, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    115|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|    115|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|    115|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 115, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|    115|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|    115|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|    115|        })
  |  |  |  |  ------------------
  |  |  |  |  274|    115|        })
  |  |  ------------------
  ------------------
  829|    275|                                                "%s: L2TP tunnel without tunnel IDs configured. Ignoring",
  830|    275|                                                filename);
  831|       |
  832|    275|        _cleanup_set_free_ Set *names = NULL;
  ------------------
  |  |  119|    275|#define _cleanup_set_free_ _cleanup_(set_freep)
  |  |  ------------------
  |  |  |  |   78|    275|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  833|    275|        ORDERED_HASHMAP_FOREACH(session, t->sessions_by_section)
  ------------------
  |  |  347|    275|        _ORDERED_HASHMAP_FOREACH(e, h, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |  345|  7.02k|        for (Iterator i = ITERATOR_FIRST; ordered_hashmap_iterate((h), &i, (void**)&(e), NULL); )
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|    275|#define ITERATOR_FIRST ((Iterator) { .idx = _IDX_ITERATOR_FIRST, .next_key = NULL })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|    275|#define _IDX_ITERATOR_FIRST (UINT_MAX - 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (345:43): [True: 6.74k, False: 275]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  834|  6.74k|                if (l2tp_session_verify(session, &names) < 0)
  ------------------
  |  Branch (834:21): [True: 6.10k, False: 641]
  ------------------
  835|  6.10k|                        l2tp_session_free(session);
  836|       |
  837|    275|        return 0;
  838|    390|}
l2tp-tunnel.c:l2tp_session_verify:
  783|  6.74k|static int l2tp_session_verify(L2tpSession *session, Set **names) {
  784|  6.74k|        int r;
  785|       |
  786|  6.74k|        assert(session);
  ------------------
  |  |   72|  6.74k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  6.74k|        do {                                                            \
  |  |  |  |   59|  6.74k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  6.74k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 6.74k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  6.74k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  6.74k|        } while (false)
  |  |  ------------------
  ------------------
  787|  6.74k|        assert(session->tunnel);
  ------------------
  |  |   72|  6.74k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  6.74k|        do {                                                            \
  |  |  |  |   59|  6.74k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  6.74k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 6.74k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  6.74k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  6.74k|        } while (false)
  |  |  ------------------
  ------------------
  788|  6.74k|        assert(names);
  ------------------
  |  |   72|  6.74k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  6.74k|        do {                                                            \
  |  |  |  |   59|  6.74k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  6.74k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 6.74k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  6.74k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  6.74k|        } while (false)
  |  |  ------------------
  ------------------
  789|       |
  790|  6.74k|        if (section_is_invalid(session->section))
  ------------------
  |  Branch (790:13): [True: 3.90k, False: 2.84k]
  ------------------
  791|  3.90k|                return -EINVAL;
  792|       |
  793|  2.84k|        if (!session->name)
  ------------------
  |  Branch (793:13): [True: 279, False: 2.56k]
  ------------------
  794|    279|                return log_session(session, "L2TP session without name configured.");
  ------------------
  |  |  774|    279|        ({                                                              \
  |  |  775|    279|                const L2tpSession *_session = (session);                \
  |  |  776|    279|                log_section_warning_errno(                              \
  |  |  ------------------
  |  |  |  |  199|    279|#define log_section_warning_errno(section, error, ...)   log_section_full_errno(section, LOG_WARNING, error, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  177|    279|        ({                                                              \
  |  |  |  |  |  |  178|    279|                int _error = (error);                                   \
  |  |  |  |  |  |  179|    279|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  198|    279|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   72|    279|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   58|    279|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |   59|    279|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|    279|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 279]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|    279|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   61|    279|        } while (false)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  180|    279|                log_section_full_errno_zerook(section, level, _error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|    279|        ({                                                              \
  |  |  |  |  |  |  |  |  167|    558|                const ConfigSection *_s = (section);                    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (167:44): [True: 279, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|    279|                log_syntax(/* unit = */ NULL,                           \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  353|    279|        ({                                                              \
  |  |  |  |  |  |  |  |  |  |  354|    279|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  |  |  |  |  355|    279|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (355:17): [True: 0, False: 279]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  356|    279|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:61): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:74): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  357|    279|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   36|    279|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  172|    279|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  358|    279|        })
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  169|    279|                           level,                                       \
  |  |  |  |  |  |  |  |  170|    279|                           _s ? _s->filename : NULL,                    \
  |  |  |  |  |  |  |  |  171|    279|                           _s ? _s->line : 0,                           \
  |  |  |  |  |  |  |  |  172|    279|                           error,                                       \
  |  |  |  |  |  |  |  |  173|    279|                           __VA_ARGS__);                                \
  |  |  |  |  |  |  |  |  174|    279|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  181|    279|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  777|    279|                                _session ? _session->section : NULL,    \
  |  |  778|    279|                                SYNTHETIC_ERRNO(EINVAL),                \
  |  |  779|    279|                                fmt " Ignoring [L2TPSession] section.", \
  |  |  780|    279|                                ##__VA_ARGS__);                         \
  |  |  781|    279|        })
  ------------------
  795|       |
  796|  2.56k|        if (session->session_id == 0 || session->peer_session_id == 0)
  ------------------
  |  Branch (796:13): [True: 565, False: 2.00k]
  |  Branch (796:41): [True: 283, False: 1.71k]
  ------------------
  797|    848|                return log_session(session, "L2TP session without session IDs configured.");
  ------------------
  |  |  774|    848|        ({                                                              \
  |  |  775|    848|                const L2tpSession *_session = (session);                \
  |  |  776|    848|                log_section_warning_errno(                              \
  |  |  ------------------
  |  |  |  |  199|    848|#define log_section_warning_errno(section, error, ...)   log_section_full_errno(section, LOG_WARNING, error, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  177|    848|        ({                                                              \
  |  |  |  |  |  |  178|    848|                int _error = (error);                                   \
  |  |  |  |  |  |  179|    848|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  198|    848|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   72|    848|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   58|    848|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |   59|    848|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|    848|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 848]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|    848|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   61|    848|        } while (false)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  180|    848|                log_section_full_errno_zerook(section, level, _error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|    848|        ({                                                              \
  |  |  |  |  |  |  |  |  167|  1.69k|                const ConfigSection *_s = (section);                    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (167:44): [True: 848, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|    848|                log_syntax(/* unit = */ NULL,                           \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  353|    848|        ({                                                              \
  |  |  |  |  |  |  |  |  |  |  354|    848|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  |  |  |  |  355|    848|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (355:17): [True: 0, False: 848]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  356|    848|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:61): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:74): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  357|    848|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   36|    848|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  172|    848|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  358|    848|        })
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  169|    848|                           level,                                       \
  |  |  |  |  |  |  |  |  170|    848|                           _s ? _s->filename : NULL,                    \
  |  |  |  |  |  |  |  |  171|    848|                           _s ? _s->line : 0,                           \
  |  |  |  |  |  |  |  |  172|    848|                           error,                                       \
  |  |  |  |  |  |  |  |  173|    848|                           __VA_ARGS__);                                \
  |  |  |  |  |  |  |  |  174|    848|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  181|    848|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  777|    848|                                _session ? _session->section : NULL,    \
  |  |  778|    848|                                SYNTHETIC_ERRNO(EINVAL),                \
  |  |  779|    848|                                fmt " Ignoring [L2TPSession] section.", \
  |  |  780|    848|                                ##__VA_ARGS__);                         \
  |  |  781|    848|        })
  ------------------
  798|       |
  799|  1.71k|        if (streq(session->name, NETDEV(session->tunnel)->ifname))
  ------------------
  |  |   46|  1.71k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 248, False: 1.46k]
  |  |  ------------------
  ------------------
  800|    248|                return log_session(session, "L2TP session name %s cannot be the same as the netdev name.", session->name);
  ------------------
  |  |  774|    248|        ({                                                              \
  |  |  775|    248|                const L2tpSession *_session = (session);                \
  |  |  776|    248|                log_section_warning_errno(                              \
  |  |  ------------------
  |  |  |  |  199|    248|#define log_section_warning_errno(section, error, ...)   log_section_full_errno(section, LOG_WARNING, error, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  177|    248|        ({                                                              \
  |  |  |  |  |  |  178|    248|                int _error = (error);                                   \
  |  |  |  |  |  |  179|    248|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  198|    248|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   72|    248|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   58|    248|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |   59|    248|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|    248|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 248]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|    248|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   61|    248|        } while (false)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  180|    248|                log_section_full_errno_zerook(section, level, _error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|    248|        ({                                                              \
  |  |  |  |  |  |  |  |  167|    496|                const ConfigSection *_s = (section);                    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (167:44): [True: 248, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|    248|                log_syntax(/* unit = */ NULL,                           \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  353|    248|        ({                                                              \
  |  |  |  |  |  |  |  |  |  |  354|    248|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  |  |  |  |  355|    248|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (355:17): [True: 0, False: 248]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  356|    248|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:61): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:74): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  357|    248|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   36|    248|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  172|    248|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  358|    248|        })
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  169|    248|                           level,                                       \
  |  |  |  |  |  |  |  |  170|    248|                           _s ? _s->filename : NULL,                    \
  |  |  |  |  |  |  |  |  171|    248|                           _s ? _s->line : 0,                           \
  |  |  |  |  |  |  |  |  172|    248|                           error,                                       \
  |  |  |  |  |  |  |  |  173|    248|                           __VA_ARGS__);                                \
  |  |  |  |  |  |  |  |  174|    248|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  181|    248|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  777|    248|                                _session ? _session->section : NULL,    \
  |  |  778|    248|                                SYNTHETIC_ERRNO(EINVAL),                \
  |  |  779|    248|                                fmt " Ignoring [L2TPSession] section.", \
  |  |  780|    248|                                ##__VA_ARGS__);                         \
  |  |  781|    248|        })
  ------------------
  801|       |
  802|  1.46k|        r = set_ensure_put(names, &string_hash_ops, session->name);
  803|  1.46k|        if (r < 0)
  ------------------
  |  Branch (803:13): [True: 0, False: 1.46k]
  ------------------
  804|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  805|  1.46k|        if (r == 0)
  ------------------
  |  Branch (805:13): [True: 828, False: 641]
  ------------------
  806|    828|                return log_session(session, "L2TP session name %s is duplicated.", session->name);
  ------------------
  |  |  774|    828|        ({                                                              \
  |  |  775|    828|                const L2tpSession *_session = (session);                \
  |  |  776|    828|                log_section_warning_errno(                              \
  |  |  ------------------
  |  |  |  |  199|    828|#define log_section_warning_errno(section, error, ...)   log_section_full_errno(section, LOG_WARNING, error, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  177|    828|        ({                                                              \
  |  |  |  |  |  |  178|    828|                int _error = (error);                                   \
  |  |  |  |  |  |  179|    828|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  198|    828|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   72|    828|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   58|    828|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |   59|    828|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|    828|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 828]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|    828|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   61|    828|        } while (false)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  180|    828|                log_section_full_errno_zerook(section, level, _error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|    828|        ({                                                              \
  |  |  |  |  |  |  |  |  167|  1.65k|                const ConfigSection *_s = (section);                    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (167:44): [True: 828, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|    828|                log_syntax(/* unit = */ NULL,                           \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  353|    828|        ({                                                              \
  |  |  |  |  |  |  |  |  |  |  354|    828|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  |  |  |  |  355|    828|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (355:17): [True: 0, False: 828]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  356|    828|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:61): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:74): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  357|    828|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   36|    828|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  172|    828|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  358|    828|        })
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  169|    828|                           level,                                       \
  |  |  |  |  |  |  |  |  170|    828|                           _s ? _s->filename : NULL,                    \
  |  |  |  |  |  |  |  |  171|    828|                           _s ? _s->line : 0,                           \
  |  |  |  |  |  |  |  |  172|    828|                           error,                                       \
  |  |  |  |  |  |  |  |  173|    828|                           __VA_ARGS__);                                \
  |  |  |  |  |  |  |  |  174|    828|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  181|    828|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  777|    828|                                _session ? _session->section : NULL,    \
  |  |  778|    828|                                SYNTHETIC_ERRNO(EINVAL),                \
  |  |  779|    828|                                fmt " Ignoring [L2TPSession] section.", \
  |  |  780|    828|                                ##__VA_ARGS__);                         \
  |  |  781|    828|        })
  ------------------
  807|       |
  808|    641|        return 0;
  809|  1.46k|}
l2tp-tunnel.c:netdev_l2tp_tunnel_detach:
  856|    826|static void netdev_l2tp_tunnel_detach(NetDev *netdev) {
  857|    826|        L2tpTunnel *t = L2TP(netdev);
  858|    826|        L2tpSession *session;
  859|       |
  860|    826|        ORDERED_HASHMAP_FOREACH(session, t->sessions_by_section)
  ------------------
  |  |  347|    826|        _ORDERED_HASHMAP_FOREACH(e, h, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |  345|  54.0k|        for (Iterator i = ITERATOR_FIRST; ordered_hashmap_iterate((h), &i, (void**)&(e), NULL); )
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|    826|#define ITERATOR_FIRST ((Iterator) { .idx = _IDX_ITERATOR_FIRST, .next_key = NULL })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|    826|#define _IDX_ITERATOR_FIRST (UINT_MAX - 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (345:43): [True: 53.2k, False: 826]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  861|  53.2k|                netdev_detach_name(netdev, session->name);
  862|    826|}

config_parse_macsec_port:
  562|  4.92k|                void *userdata) {
  563|       |
  564|  4.92k|        assert(filename);
  ------------------
  |  |   72|  4.92k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  4.92k|        do {                                                            \
  |  |  |  |   59|  4.92k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  4.92k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 4.92k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  4.92k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  4.92k|        } while (false)
  |  |  ------------------
  ------------------
  565|  4.92k|        assert(section);
  ------------------
  |  |   72|  4.92k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  4.92k|        do {                                                            \
  |  |  |  |   59|  4.92k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  4.92k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 4.92k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  4.92k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  4.92k|        } while (false)
  |  |  ------------------
  ------------------
  566|  4.92k|        assert(lvalue);
  ------------------
  |  |   72|  4.92k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  4.92k|        do {                                                            \
  |  |  |  |   59|  4.92k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  4.92k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 4.92k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  4.92k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  4.92k|        } while (false)
  |  |  ------------------
  ------------------
  567|  4.92k|        assert(rvalue);
  ------------------
  |  |   72|  4.92k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  4.92k|        do {                                                            \
  |  |  |  |   59|  4.92k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  4.92k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 4.92k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  4.92k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  4.92k|        } while (false)
  |  |  ------------------
  ------------------
  568|  4.92k|        assert(data);
  ------------------
  |  |   72|  4.92k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  4.92k|        do {                                                            \
  |  |  |  |   59|  4.92k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  4.92k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 4.92k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  4.92k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  4.92k|        } while (false)
  |  |  ------------------
  ------------------
  569|       |
  570|  4.92k|        MACsec *s = ASSERT_PTR(userdata);
  ------------------
  |  |   81|  4.92k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  4.92k|        ({                                 \
  |  |  |  |   85|  4.92k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  4.92k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  4.92k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  4.92k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  4.92k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  4.92k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  4.92k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 4.92k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  4.92k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  4.92k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  4.92k|                var;                       \
  |  |  |  |   88|  4.92k|        })
  |  |  ------------------
  ------------------
  571|  4.92k|        _cleanup_(macsec_receive_association_free_or_set_invalidp) ReceiveAssociation *b = NULL;
  ------------------
  |  |   78|  4.92k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  572|  4.92k|        _cleanup_(macsec_receive_channel_free_or_set_invalidp) ReceiveChannel *c = NULL;
  ------------------
  |  |   78|  4.92k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  573|  4.92k|        uint16_t port;
  574|  4.92k|        void *dest;
  575|  4.92k|        int r;
  576|       |
  577|       |        /* This parses port used to make Secure Channel Identifier (SCI) */
  578|       |
  579|  4.92k|        if (streq(section, "MACsec"))
  ------------------
  |  |   46|  4.92k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 418, False: 4.50k]
  |  |  ------------------
  ------------------
  580|    418|                dest = &s->port;
  581|  4.50k|        else if (streq(section, "MACsecReceiveChannel")) {
  ------------------
  |  |   46|  4.50k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 3.54k, False: 969]
  |  |  ------------------
  ------------------
  582|  3.54k|                r = macsec_receive_channel_new_static(s, filename, section_line, &c);
  583|  3.54k|                if (r < 0)
  ------------------
  |  Branch (583:21): [True: 0, False: 3.54k]
  ------------------
  584|      0|                        return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  585|       |
  586|  3.54k|                dest = &c->sci.port;
  587|  3.54k|        } else {
  588|    969|                assert(streq(section, "MACsecReceiveAssociation"));
  ------------------
  |  |   72|    969|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    969|        do {                                                            \
  |  |  |  |   59|    969|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    969|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 969]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    969|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    969|        } while (false)
  |  |  ------------------
  ------------------
  589|       |
  590|    969|                r = macsec_receive_association_new_static(s, filename, section_line, &b);
  591|    969|                if (r < 0)
  ------------------
  |  Branch (591:21): [True: 0, False: 969]
  ------------------
  592|      0|                        return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  593|       |
  594|    969|                dest = &b->sci.port;
  595|    969|        }
  596|       |
  597|  4.92k|        r = parse_ip_port(rvalue, &port);
  598|  4.92k|        if (r < 0) {
  ------------------
  |  Branch (598:13): [True: 1.19k, False: 3.73k]
  ------------------
  599|  1.19k|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|  1.19k|        ({                                                              \
  |  |  354|  1.19k|                int _level = (level), _e = (error);                     \
  |  |  355|  1.19k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 1.19k]
  |  |  ------------------
  |  |  356|  1.19k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  1.19k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  1.19k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  1.19k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  1.19k|        })
  ------------------
  600|  1.19k|                           "Failed to parse port '%s' for secure channel identifier. Ignoring assignment: %m",
  601|  1.19k|                           rvalue);
  602|  1.19k|                return 0;
  603|  1.19k|        }
  604|       |
  605|  3.73k|        unaligned_write_be16(dest, port);
  606|       |
  607|  3.73k|        TAKE_PTR(b);
  ------------------
  |  |  388|  3.73k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  3.73k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  3.73k|        ({                                                       \
  |  |  |  |  |  |  381|  3.73k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  3.73k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  3.73k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  3.73k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  3.73k|                _var_;                                           \
  |  |  |  |  |  |  386|  3.73k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  608|  3.73k|        TAKE_PTR(c);
  ------------------
  |  |  388|  3.73k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  3.73k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  3.73k|        ({                                                       \
  |  |  |  |  |  |  381|  3.73k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  3.73k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  3.73k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  3.73k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  3.73k|                _var_;                                           \
  |  |  |  |  |  |  386|  3.73k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  609|       |
  610|  3.73k|        return 0;
  611|  4.92k|}
config_parse_macsec_hw_address:
  623|  3.32k|                void *userdata) {
  624|       |
  625|  3.32k|        assert(filename);
  ------------------
  |  |   72|  3.32k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.32k|        do {                                                            \
  |  |  |  |   59|  3.32k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.32k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.32k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.32k|        } while (false)
  |  |  ------------------
  ------------------
  626|  3.32k|        assert(section);
  ------------------
  |  |   72|  3.32k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.32k|        do {                                                            \
  |  |  |  |   59|  3.32k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.32k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.32k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.32k|        } while (false)
  |  |  ------------------
  ------------------
  627|  3.32k|        assert(lvalue);
  ------------------
  |  |   72|  3.32k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.32k|        do {                                                            \
  |  |  |  |   59|  3.32k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.32k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.32k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.32k|        } while (false)
  |  |  ------------------
  ------------------
  628|  3.32k|        assert(rvalue);
  ------------------
  |  |   72|  3.32k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.32k|        do {                                                            \
  |  |  |  |   59|  3.32k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.32k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.32k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.32k|        } while (false)
  |  |  ------------------
  ------------------
  629|  3.32k|        assert(data);
  ------------------
  |  |   72|  3.32k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.32k|        do {                                                            \
  |  |  |  |   59|  3.32k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.32k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.32k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.32k|        } while (false)
  |  |  ------------------
  ------------------
  630|       |
  631|  3.32k|        MACsec *s = ASSERT_PTR(userdata);
  ------------------
  |  |   81|  3.32k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  3.32k|        ({                                 \
  |  |  |  |   85|  3.32k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  3.32k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  3.32k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  3.32k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  3.32k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  3.32k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  3.32k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.32k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  3.32k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  3.32k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  3.32k|                var;                       \
  |  |  |  |   88|  3.32k|        })
  |  |  ------------------
  ------------------
  632|  3.32k|        _cleanup_(macsec_receive_association_free_or_set_invalidp) ReceiveAssociation *b = NULL;
  ------------------
  |  |   78|  3.32k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  633|  3.32k|        _cleanup_(macsec_receive_channel_free_or_set_invalidp) ReceiveChannel *c = NULL;
  ------------------
  |  |   78|  3.32k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  634|  3.32k|        int r;
  635|       |
  636|  3.32k|        if (streq(section, "MACsecReceiveChannel"))
  ------------------
  |  |   46|  3.32k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 1.94k, False: 1.37k]
  |  |  ------------------
  ------------------
  637|  1.94k|                r = macsec_receive_channel_new_static(s, filename, section_line, &c);
  638|  1.37k|        else
  639|  1.37k|                r = macsec_receive_association_new_static(s, filename, section_line, &b);
  640|  3.32k|        if (r < 0)
  ------------------
  |  Branch (640:13): [True: 0, False: 3.32k]
  ------------------
  641|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  642|       |
  643|  3.32k|        r = parse_ether_addr(rvalue, b ? &b->sci.mac : &c->sci.mac);
  ------------------
  |  Branch (643:38): [True: 1.37k, False: 1.94k]
  ------------------
  644|  3.32k|        if (r < 0) {
  ------------------
  |  Branch (644:13): [True: 662, False: 2.66k]
  ------------------
  645|    662|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    662|        ({                                                              \
  |  |  354|    662|                int _level = (level), _e = (error);                     \
  |  |  355|    662|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 662]
  |  |  ------------------
  |  |  356|    662|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    662|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    662|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    662|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    662|        })
  ------------------
  646|    662|                           "Failed to parse MAC address for secure channel identifier. "
  647|    662|                           "Ignoring assignment: %s", rvalue);
  648|    662|                return 0;
  649|    662|        }
  650|       |
  651|  2.66k|        TAKE_PTR(b);
  ------------------
  |  |  388|  2.66k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  2.66k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  2.66k|        ({                                                       \
  |  |  |  |  |  |  381|  2.66k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  2.66k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  2.66k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  2.66k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  2.66k|                _var_;                                           \
  |  |  |  |  |  |  386|  2.66k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  652|  2.66k|        TAKE_PTR(c);
  ------------------
  |  |  388|  2.66k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  2.66k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  2.66k|        ({                                                       \
  |  |  |  |  |  |  381|  2.66k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  2.66k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  2.66k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  2.66k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  2.66k|                _var_;                                           \
  |  |  |  |  |  |  386|  2.66k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  653|       |
  654|  2.66k|        return 0;
  655|  3.32k|}
config_parse_macsec_packet_number:
  667|  2.41k|                void *userdata) {
  668|       |
  669|  2.41k|        assert(filename);
  ------------------
  |  |   72|  2.41k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.41k|        do {                                                            \
  |  |  |  |   59|  2.41k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.41k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.41k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.41k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.41k|        } while (false)
  |  |  ------------------
  ------------------
  670|  2.41k|        assert(section);
  ------------------
  |  |   72|  2.41k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.41k|        do {                                                            \
  |  |  |  |   59|  2.41k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.41k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.41k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.41k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.41k|        } while (false)
  |  |  ------------------
  ------------------
  671|  2.41k|        assert(lvalue);
  ------------------
  |  |   72|  2.41k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.41k|        do {                                                            \
  |  |  |  |   59|  2.41k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.41k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.41k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.41k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.41k|        } while (false)
  |  |  ------------------
  ------------------
  672|  2.41k|        assert(rvalue);
  ------------------
  |  |   72|  2.41k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.41k|        do {                                                            \
  |  |  |  |   59|  2.41k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.41k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.41k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.41k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.41k|        } while (false)
  |  |  ------------------
  ------------------
  673|  2.41k|        assert(data);
  ------------------
  |  |   72|  2.41k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.41k|        do {                                                            \
  |  |  |  |   59|  2.41k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.41k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.41k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.41k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.41k|        } while (false)
  |  |  ------------------
  ------------------
  674|       |
  675|  2.41k|        MACsec *s = ASSERT_PTR(userdata);
  ------------------
  |  |   81|  2.41k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  2.41k|        ({                                 \
  |  |  |  |   85|  2.41k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  2.41k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  2.41k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  2.41k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  2.41k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  2.41k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  2.41k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.41k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  2.41k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  2.41k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  2.41k|                var;                       \
  |  |  |  |   88|  2.41k|        })
  |  |  ------------------
  ------------------
  676|  2.41k|        _cleanup_(macsec_transmit_association_free_or_set_invalidp) TransmitAssociation *a = NULL;
  ------------------
  |  |   78|  2.41k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  677|  2.41k|        _cleanup_(macsec_receive_association_free_or_set_invalidp) ReceiveAssociation *b = NULL;
  ------------------
  |  |   78|  2.41k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  678|  2.41k|        uint32_t val, *dest;
  679|  2.41k|        int r;
  680|       |
  681|  2.41k|        if (streq(section, "MACsecTransmitAssociation"))
  ------------------
  |  |   46|  2.41k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 2.01k, False: 403]
  |  |  ------------------
  ------------------
  682|  2.01k|                r = macsec_transmit_association_new_static(s, filename, section_line, &a);
  683|    403|        else
  684|    403|                r = macsec_receive_association_new_static(s, filename, section_line, &b);
  685|  2.41k|        if (r < 0)
  ------------------
  |  Branch (685:13): [True: 0, False: 2.41k]
  ------------------
  686|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  687|       |
  688|  2.41k|        dest = a ? &a->sa.packet_number : &b->sa.packet_number;
  ------------------
  |  Branch (688:16): [True: 2.01k, False: 403]
  ------------------
  689|       |
  690|  2.41k|        r = safe_atou32(rvalue, &val);
  691|  2.41k|        if (r < 0) {
  ------------------
  |  Branch (691:13): [True: 357, False: 2.06k]
  ------------------
  692|    357|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    357|        ({                                                              \
  |  |  354|    357|                int _level = (level), _e = (error);                     \
  |  |  355|    357|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 357]
  |  |  ------------------
  |  |  356|    357|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    357|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    357|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    357|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    357|        })
  ------------------
  693|    357|                           "Failed to parse packet number. Ignoring assignment: %s", rvalue);
  694|    357|                return 0;
  695|    357|        }
  696|  2.06k|        if (streq(section, "MACsecTransmitAssociation") && val == 0) {
  ------------------
  |  |   46|  4.12k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 1.85k, False: 208]
  |  |  ------------------
  ------------------
  |  Branch (696:60): [True: 225, False: 1.62k]
  ------------------
  697|    225|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    225|        ({                                                              \
  |  |  354|    225|                int _level = (level), _e = (error);                     \
  |  |  355|    225|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 225]
  |  |  ------------------
  |  |  356|    225|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    225|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    225|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    225|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    225|        })
  ------------------
  698|    225|                           "Invalid packet number. Ignoring assignment: %s", rvalue);
  699|    225|                return 0;
  700|    225|        }
  701|       |
  702|  1.83k|        *dest = val;
  703|  1.83k|        TAKE_PTR(a);
  ------------------
  |  |  388|  1.83k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  1.83k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  1.83k|        ({                                                       \
  |  |  |  |  |  |  381|  1.83k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  1.83k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  1.83k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  1.83k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  1.83k|                _var_;                                           \
  |  |  |  |  |  |  386|  1.83k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  704|  1.83k|        TAKE_PTR(b);
  ------------------
  |  |  388|  1.83k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  1.83k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  1.83k|        ({                                                       \
  |  |  |  |  |  |  381|  1.83k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  1.83k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  1.83k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  1.83k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  1.83k|                _var_;                                           \
  |  |  |  |  |  |  386|  1.83k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  705|       |
  706|  1.83k|        return 0;
  707|  2.06k|}
config_parse_macsec_key:
  719|  5.29k|                void *userdata) {
  720|       |
  721|  5.29k|        _cleanup_(macsec_transmit_association_free_or_set_invalidp) TransmitAssociation *a = NULL;
  ------------------
  |  |   78|  5.29k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  722|  5.29k|        _cleanup_(macsec_receive_association_free_or_set_invalidp) ReceiveAssociation *b = NULL;
  ------------------
  |  |   78|  5.29k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  723|  5.29k|        _cleanup_(erase_and_freep) void *p = NULL;
  ------------------
  |  |   78|  5.29k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  724|  5.29k|        MACsec *s = userdata;
  725|  5.29k|        SecurityAssociation *dest;
  726|  5.29k|        size_t l;
  727|  5.29k|        int r;
  728|       |
  729|  5.29k|        assert(filename);
  ------------------
  |  |   72|  5.29k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.29k|        do {                                                            \
  |  |  |  |   59|  5.29k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.29k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.29k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.29k|        } while (false)
  |  |  ------------------
  ------------------
  730|  5.29k|        assert(section);
  ------------------
  |  |   72|  5.29k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.29k|        do {                                                            \
  |  |  |  |   59|  5.29k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.29k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.29k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.29k|        } while (false)
  |  |  ------------------
  ------------------
  731|  5.29k|        assert(lvalue);
  ------------------
  |  |   72|  5.29k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.29k|        do {                                                            \
  |  |  |  |   59|  5.29k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.29k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.29k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.29k|        } while (false)
  |  |  ------------------
  ------------------
  732|  5.29k|        assert(rvalue);
  ------------------
  |  |   72|  5.29k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.29k|        do {                                                            \
  |  |  |  |   59|  5.29k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.29k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.29k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.29k|        } while (false)
  |  |  ------------------
  ------------------
  733|  5.29k|        assert(data);
  ------------------
  |  |   72|  5.29k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.29k|        do {                                                            \
  |  |  |  |   59|  5.29k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.29k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.29k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.29k|        } while (false)
  |  |  ------------------
  ------------------
  734|       |
  735|  5.29k|        (void) warn_file_is_world_accessible(filename, NULL, unit, line);
  736|       |
  737|  5.29k|        if (streq(section, "MACsecTransmitAssociation"))
  ------------------
  |  |   46|  5.29k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 2.03k, False: 3.25k]
  |  |  ------------------
  ------------------
  738|  2.03k|                r = macsec_transmit_association_new_static(s, filename, section_line, &a);
  739|  3.25k|        else
  740|  3.25k|                r = macsec_receive_association_new_static(s, filename, section_line, &b);
  741|  5.29k|        if (r < 0)
  ------------------
  |  Branch (741:13): [True: 0, False: 5.29k]
  ------------------
  742|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  743|       |
  744|  5.29k|        dest = a ? &a->sa : &b->sa;
  ------------------
  |  Branch (744:16): [True: 2.03k, False: 3.25k]
  ------------------
  745|       |
  746|  5.29k|        r = unhexmem_full(rvalue, SIZE_MAX, /* secure = */ true, &p, &l);
  747|  5.29k|        if (r < 0) {
  ------------------
  |  Branch (747:13): [True: 1.45k, False: 3.83k]
  ------------------
  748|  1.45k|                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse key. Ignoring assignment: %m");
  ------------------
  |  |  353|  1.45k|        ({                                                              \
  |  |  354|  1.45k|                int _level = (level), _e = (error);                     \
  |  |  355|  1.45k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 1.45k]
  |  |  ------------------
  |  |  356|  1.45k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  1.45k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  1.45k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  1.45k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  1.45k|        })
  ------------------
  749|  1.45k|                return 0;
  750|  1.45k|        }
  751|       |
  752|  3.83k|        if (l != 16) {
  ------------------
  |  Branch (752:13): [True: 1.63k, False: 2.20k]
  ------------------
  753|       |                /* See DEFAULT_SAK_LEN in drivers/net/macsec.c */
  754|  1.63k|                log_syntax(unit, LOG_WARNING, filename, line, 0, "Invalid key length (%zu). Ignoring assignment", l);
  ------------------
  |  |  353|  1.63k|        ({                                                              \
  |  |  354|  1.63k|                int _level = (level), _e = (error);                     \
  |  |  355|  1.63k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 1.63k]
  |  |  ------------------
  |  |  356|  1.63k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  1.63k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  1.63k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  1.63k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  1.63k|        })
  ------------------
  755|  1.63k|                return 0;
  756|  1.63k|        }
  757|       |
  758|  2.20k|        explicit_bzero_safe(dest->key, dest->key_len);
  759|  2.20k|        free_and_replace(dest->key, p);
  ------------------
  |  |   49|  2.20k|        free_and_replace_full(a, b, free)
  |  |  ------------------
  |  |  |  |   10|  2.20k|        ({                                      \
  |  |  |  |   11|  2.20k|                typeof(a)* _a = &(a);           \
  |  |  |  |   12|  2.20k|                typeof(b)* _b = &(b);           \
  |  |  |  |   13|  2.20k|                free_func(*_a);                 \
  |  |  |  |   14|  2.20k|                *_a = *_b;                      \
  |  |  |  |   15|  2.20k|                *_b = NULL;                     \
  |  |  |  |   16|  2.20k|                0;                              \
  |  |  |  |   17|  2.20k|        })
  |  |  ------------------
  ------------------
  760|  2.20k|        dest->key_len = l;
  761|       |
  762|  2.20k|        TAKE_PTR(a);
  ------------------
  |  |  388|  2.20k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  2.20k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  2.20k|        ({                                                       \
  |  |  |  |  |  |  381|  2.20k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  2.20k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  2.20k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  2.20k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  2.20k|                _var_;                                           \
  |  |  |  |  |  |  386|  2.20k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  763|  2.20k|        TAKE_PTR(b);
  ------------------
  |  |  388|  2.20k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  2.20k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  2.20k|        ({                                                       \
  |  |  |  |  |  |  381|  2.20k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  2.20k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  2.20k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  2.20k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  2.20k|                _var_;                                           \
  |  |  |  |  |  |  386|  2.20k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  764|       |
  765|  2.20k|        return 0;
  766|  3.83k|}
config_parse_macsec_key_file:
  778|  7.98k|                void *userdata) {
  779|       |
  780|  7.98k|        _cleanup_(macsec_transmit_association_free_or_set_invalidp) TransmitAssociation *a = NULL;
  ------------------
  |  |   78|  7.98k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  781|  7.98k|        _cleanup_(macsec_receive_association_free_or_set_invalidp) ReceiveAssociation *b = NULL;
  ------------------
  |  |   78|  7.98k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  782|  7.98k|        _cleanup_free_ char *path = NULL;
  ------------------
  |  |   82|  7.98k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  7.98k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  783|  7.98k|        MACsec *s = userdata;
  784|  7.98k|        char **dest;
  785|  7.98k|        int r;
  786|       |
  787|  7.98k|        assert(filename);
  ------------------
  |  |   72|  7.98k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  7.98k|        do {                                                            \
  |  |  |  |   59|  7.98k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  7.98k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 7.98k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  7.98k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  7.98k|        } while (false)
  |  |  ------------------
  ------------------
  788|  7.98k|        assert(section);
  ------------------
  |  |   72|  7.98k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  7.98k|        do {                                                            \
  |  |  |  |   59|  7.98k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  7.98k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 7.98k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  7.98k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  7.98k|        } while (false)
  |  |  ------------------
  ------------------
  789|  7.98k|        assert(lvalue);
  ------------------
  |  |   72|  7.98k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  7.98k|        do {                                                            \
  |  |  |  |   59|  7.98k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  7.98k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 7.98k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  7.98k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  7.98k|        } while (false)
  |  |  ------------------
  ------------------
  790|  7.98k|        assert(rvalue);
  ------------------
  |  |   72|  7.98k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  7.98k|        do {                                                            \
  |  |  |  |   59|  7.98k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  7.98k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 7.98k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  7.98k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  7.98k|        } while (false)
  |  |  ------------------
  ------------------
  791|  7.98k|        assert(data);
  ------------------
  |  |   72|  7.98k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  7.98k|        do {                                                            \
  |  |  |  |   59|  7.98k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  7.98k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 7.98k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  7.98k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  7.98k|        } while (false)
  |  |  ------------------
  ------------------
  792|       |
  793|  7.98k|        if (streq(section, "MACsecTransmitAssociation"))
  ------------------
  |  |   46|  7.98k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 3.90k, False: 4.07k]
  |  |  ------------------
  ------------------
  794|  3.90k|                r = macsec_transmit_association_new_static(s, filename, section_line, &a);
  795|  4.07k|        else
  796|  4.07k|                r = macsec_receive_association_new_static(s, filename, section_line, &b);
  797|  7.98k|        if (r < 0)
  ------------------
  |  Branch (797:13): [True: 0, False: 7.98k]
  ------------------
  798|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  799|       |
  800|  7.98k|        dest = a ? &a->sa.key_file : &b->sa.key_file;
  ------------------
  |  Branch (800:16): [True: 3.90k, False: 4.07k]
  ------------------
  801|       |
  802|  7.98k|        if (isempty(rvalue)) {
  ------------------
  |  Branch (802:13): [True: 387, False: 7.59k]
  ------------------
  803|    387|                *dest = mfree(*dest);
  ------------------
  |  |  404|    387|        ({                                      \
  |  |  405|    387|                free(memory);                   \
  |  |  406|    387|                (typeof(memory)) NULL;          \
  |  |  407|    387|        })
  ------------------
  804|    387|                return 0;
  805|    387|        }
  806|       |
  807|  7.59k|        path = strdup(rvalue);
  808|  7.59k|        if (!path)
  ------------------
  |  Branch (808:13): [True: 0, False: 7.59k]
  ------------------
  809|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  810|       |
  811|  7.59k|        if (path_simplify_and_warn(path, PATH_CHECK_ABSOLUTE|PATH_CHECK_NON_API_VFS, unit, filename, line, lvalue) < 0)
  ------------------
  |  Branch (811:13): [True: 1.01k, False: 6.58k]
  ------------------
  812|  1.01k|                return 0;
  813|       |
  814|  6.58k|        free_and_replace(*dest, path);
  ------------------
  |  |   49|  6.58k|        free_and_replace_full(a, b, free)
  |  |  ------------------
  |  |  |  |   10|  6.58k|        ({                                      \
  |  |  |  |   11|  6.58k|                typeof(a)* _a = &(a);           \
  |  |  |  |   12|  6.58k|                typeof(b)* _b = &(b);           \
  |  |  |  |   13|  6.58k|                free_func(*_a);                 \
  |  |  |  |   14|  6.58k|                *_a = *_b;                      \
  |  |  |  |   15|  6.58k|                *_b = NULL;                     \
  |  |  |  |   16|  6.58k|                0;                              \
  |  |  |  |   17|  6.58k|        })
  |  |  ------------------
  ------------------
  815|  6.58k|        TAKE_PTR(a);
  ------------------
  |  |  388|  6.58k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  6.58k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  6.58k|        ({                                                       \
  |  |  |  |  |  |  381|  6.58k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  6.58k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  6.58k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  6.58k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  6.58k|                _var_;                                           \
  |  |  |  |  |  |  386|  6.58k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  816|  6.58k|        TAKE_PTR(b);
  ------------------
  |  |  388|  6.58k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  6.58k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  6.58k|        ({                                                       \
  |  |  |  |  |  |  381|  6.58k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  6.58k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  6.58k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  6.58k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  6.58k|                _var_;                                           \
  |  |  |  |  |  |  386|  6.58k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  817|       |
  818|  6.58k|        return 0;
  819|  7.59k|}
config_parse_macsec_key_id:
  831|  1.83k|                void *userdata) {
  832|       |
  833|  1.83k|        _cleanup_(macsec_transmit_association_free_or_set_invalidp) TransmitAssociation *a = NULL;
  ------------------
  |  |   78|  1.83k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  834|  1.83k|        _cleanup_(macsec_receive_association_free_or_set_invalidp) ReceiveAssociation *b = NULL;
  ------------------
  |  |   78|  1.83k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  835|  1.83k|        _cleanup_free_ void *p = NULL;
  ------------------
  |  |   82|  1.83k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  1.83k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  836|  1.83k|        MACsec *s = userdata;
  837|  1.83k|        uint8_t *dest;
  838|  1.83k|        size_t l;
  839|  1.83k|        int r;
  840|       |
  841|  1.83k|        assert(filename);
  ------------------
  |  |   72|  1.83k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.83k|        do {                                                            \
  |  |  |  |   59|  1.83k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.83k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.83k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.83k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.83k|        } while (false)
  |  |  ------------------
  ------------------
  842|  1.83k|        assert(section);
  ------------------
  |  |   72|  1.83k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.83k|        do {                                                            \
  |  |  |  |   59|  1.83k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.83k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.83k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.83k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.83k|        } while (false)
  |  |  ------------------
  ------------------
  843|  1.83k|        assert(lvalue);
  ------------------
  |  |   72|  1.83k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.83k|        do {                                                            \
  |  |  |  |   59|  1.83k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.83k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.83k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.83k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.83k|        } while (false)
  |  |  ------------------
  ------------------
  844|  1.83k|        assert(rvalue);
  ------------------
  |  |   72|  1.83k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.83k|        do {                                                            \
  |  |  |  |   59|  1.83k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.83k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.83k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.83k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.83k|        } while (false)
  |  |  ------------------
  ------------------
  845|  1.83k|        assert(data);
  ------------------
  |  |   72|  1.83k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.83k|        do {                                                            \
  |  |  |  |   59|  1.83k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.83k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.83k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.83k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.83k|        } while (false)
  |  |  ------------------
  ------------------
  846|       |
  847|  1.83k|        if (streq(section, "MACsecTransmitAssociation"))
  ------------------
  |  |   46|  1.83k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 1.03k, False: 799]
  |  |  ------------------
  ------------------
  848|  1.03k|                r = macsec_transmit_association_new_static(s, filename, section_line, &a);
  849|    799|        else
  850|    799|                r = macsec_receive_association_new_static(s, filename, section_line, &b);
  851|  1.83k|        if (r < 0)
  ------------------
  |  Branch (851:13): [True: 0, False: 1.83k]
  ------------------
  852|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  853|       |
  854|  1.83k|        r = unhexmem(rvalue, &p, &l);
  855|  1.83k|        if (r == -ENOMEM)
  ------------------
  |  Branch (855:13): [True: 0, False: 1.83k]
  ------------------
  856|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  857|  1.83k|        if (r < 0) {
  ------------------
  |  Branch (857:13): [True: 429, False: 1.40k]
  ------------------
  858|    429|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    429|        ({                                                              \
  |  |  354|    429|                int _level = (level), _e = (error);                     \
  |  |  355|    429|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 429]
  |  |  ------------------
  |  |  356|    429|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    429|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    429|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    429|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    429|        })
  ------------------
  859|    429|                           "Failed to parse KeyId=%s, ignoring assignment: %m", rvalue);
  860|    429|                return 0;
  861|    429|        }
  862|  1.40k|        if (l > MACSEC_KEYID_LEN) {
  ------------------
  |  Branch (862:13): [True: 199, False: 1.20k]
  ------------------
  863|    199|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    199|        ({                                                              \
  |  |  354|    199|                int _level = (level), _e = (error);                     \
  |  |  355|    199|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 199]
  |  |  ------------------
  |  |  356|    199|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    199|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    199|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    199|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    199|        })
  ------------------
  864|    199|                           "Specified KeyId= is larger then the allowed maximum (%zu > %i), ignoring: %s",
  865|    199|                           l, MACSEC_KEYID_LEN, rvalue);
  866|    199|                return 0;
  867|    199|        }
  868|       |
  869|  1.20k|        dest = a ? a->sa.key_id : b->sa.key_id;
  ------------------
  |  Branch (869:16): [True: 612, False: 590]
  ------------------
  870|  1.20k|        memcpy_safe(dest, p, l);
  871|  1.20k|        memzero(dest + l, MACSEC_KEYID_LEN - l);
  ------------------
  |  |   17|  1.20k|        ({                                                      \
  |  |   18|  1.20k|                size_t _l_ = (l);                               \
  |  |   19|  1.20k|                _l_ > 0 ? memset((x), 0, _l_) : (x);            \
  |  |  ------------------
  |  |  |  Branch (19:17): [True: 1.00k, False: 199]
  |  |  ------------------
  |  |   20|  1.20k|        })
  ------------------
  872|       |
  873|  1.20k|        TAKE_PTR(a);
  ------------------
  |  |  388|  1.20k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  1.20k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  1.20k|        ({                                                       \
  |  |  |  |  |  |  381|  1.20k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  1.20k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  1.20k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  1.20k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  1.20k|                _var_;                                           \
  |  |  |  |  |  |  386|  1.20k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  874|  1.20k|        TAKE_PTR(b);
  ------------------
  |  |  388|  1.20k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  1.20k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  1.20k|        ({                                                       \
  |  |  |  |  |  |  381|  1.20k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  1.20k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  1.20k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  1.20k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  1.20k|                _var_;                                           \
  |  |  |  |  |  |  386|  1.20k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  875|       |
  876|  1.20k|        return 0;
  877|  1.40k|}
config_parse_macsec_sa_activate:
  889|    744|                void *userdata) {
  890|       |
  891|    744|        _cleanup_(macsec_transmit_association_free_or_set_invalidp) TransmitAssociation *a = NULL;
  ------------------
  |  |   78|    744|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  892|    744|        _cleanup_(macsec_receive_association_free_or_set_invalidp) ReceiveAssociation *b = NULL;
  ------------------
  |  |   78|    744|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  893|    744|        MACsec *s = userdata;
  894|    744|        int *dest, r;
  895|       |
  896|    744|        assert(filename);
  ------------------
  |  |   72|    744|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    744|        do {                                                            \
  |  |  |  |   59|    744|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    744|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 744]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    744|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    744|        } while (false)
  |  |  ------------------
  ------------------
  897|    744|        assert(section);
  ------------------
  |  |   72|    744|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    744|        do {                                                            \
  |  |  |  |   59|    744|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    744|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 744]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    744|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    744|        } while (false)
  |  |  ------------------
  ------------------
  898|    744|        assert(lvalue);
  ------------------
  |  |   72|    744|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    744|        do {                                                            \
  |  |  |  |   59|    744|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    744|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 744]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    744|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    744|        } while (false)
  |  |  ------------------
  ------------------
  899|    744|        assert(rvalue);
  ------------------
  |  |   72|    744|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    744|        do {                                                            \
  |  |  |  |   59|    744|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    744|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 744]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    744|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    744|        } while (false)
  |  |  ------------------
  ------------------
  900|    744|        assert(data);
  ------------------
  |  |   72|    744|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    744|        do {                                                            \
  |  |  |  |   59|    744|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    744|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 744]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    744|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    744|        } while (false)
  |  |  ------------------
  ------------------
  901|       |
  902|    744|        if (streq(section, "MACsecTransmitAssociation"))
  ------------------
  |  |   46|    744|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 390, False: 354]
  |  |  ------------------
  ------------------
  903|    390|                r = macsec_transmit_association_new_static(s, filename, section_line, &a);
  904|    354|        else
  905|    354|                r = macsec_receive_association_new_static(s, filename, section_line, &b);
  906|    744|        if (r < 0)
  ------------------
  |  Branch (906:13): [True: 0, False: 744]
  ------------------
  907|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  908|       |
  909|    744|        dest = a ? &a->sa.activate : &b->sa.activate;
  ------------------
  |  Branch (909:16): [True: 390, False: 354]
  ------------------
  910|       |
  911|    744|        r = parse_tristate(rvalue, dest);
  912|    744|        if (r < 0) {
  ------------------
  |  Branch (912:13): [True: 400, False: 344]
  ------------------
  913|    400|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    400|        ({                                                              \
  |  |  354|    400|                int _level = (level), _e = (error);                     \
  |  |  355|    400|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 400]
  |  |  ------------------
  |  |  356|    400|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (356:125): [True: 0, False: 0]
  |  |  ------------------
  |  |  357|    400|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    400|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    400|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    400|        })
  ------------------
  914|    400|                           "Failed to parse activation mode of %s security association. "
  915|    400|                           "Ignoring assignment: %s",
  916|    400|                           streq(section, "MACsecTransmitAssociation") ? "transmit" : "receive",
  917|    400|                           rvalue);
  918|    400|                return 0;
  919|    400|        }
  920|       |
  921|    344|        TAKE_PTR(a);
  ------------------
  |  |  388|    344|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|    344|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|    344|        ({                                                       \
  |  |  |  |  |  |  381|    344|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|    344|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|    344|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|    344|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|    344|                _var_;                                           \
  |  |  |  |  |  |  386|    344|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  922|    344|        TAKE_PTR(b);
  ------------------
  |  |  388|    344|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|    344|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|    344|        ({                                                       \
  |  |  |  |  |  |  381|    344|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|    344|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|    344|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|    344|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|    344|                _var_;                                           \
  |  |  |  |  |  |  386|    344|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  923|       |
  924|    344|        return 0;
  925|    744|}
config_parse_macsec_use_for_encoding:
  937|    835|                void *userdata) {
  938|       |
  939|    835|        _cleanup_(macsec_transmit_association_free_or_set_invalidp) TransmitAssociation *a = NULL;
  ------------------
  |  |   78|    835|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  940|    835|        MACsec *s = userdata;
  941|    835|        int r;
  942|       |
  943|    835|        assert(filename);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  944|    835|        assert(section);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  945|    835|        assert(lvalue);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  946|    835|        assert(rvalue);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  947|    835|        assert(data);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  948|       |
  949|    835|        r = macsec_transmit_association_new_static(s, filename, section_line, &a);
  950|    835|        if (r < 0)
  ------------------
  |  Branch (950:13): [True: 0, False: 835]
  ------------------
  951|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  952|       |
  953|    835|        if (isempty(rvalue)) {
  ------------------
  |  Branch (953:13): [True: 197, False: 638]
  ------------------
  954|    197|                a->sa.use_for_encoding = -1;
  955|    197|                TAKE_PTR(a);
  ------------------
  |  |  388|    197|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|    197|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|    197|        ({                                                       \
  |  |  |  |  |  |  381|    197|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|    197|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|    197|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|    197|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|    197|                _var_;                                           \
  |  |  |  |  |  |  386|    197|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  956|    197|                return 0;
  957|    197|        }
  958|       |
  959|    638|        r = parse_tristate(rvalue, &a->sa.use_for_encoding);
  960|    638|        if (r < 0) {
  ------------------
  |  Branch (960:13): [True: 221, False: 417]
  ------------------
  961|    221|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    221|        ({                                                              \
  |  |  354|    221|                int _level = (level), _e = (error);                     \
  |  |  355|    221|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 221]
  |  |  ------------------
  |  |  356|    221|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    221|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    221|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    221|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    221|        })
  ------------------
  962|    221|                           "Failed to parse %s= setting. Ignoring assignment: %s",
  963|    221|                           lvalue, rvalue);
  964|    221|                return 0;
  965|    221|        }
  966|       |
  967|    417|        if (a->sa.use_for_encoding > 0)
  ------------------
  |  Branch (967:13): [True: 204, False: 213]
  ------------------
  968|    204|                a->sa.activate = true;
  969|       |
  970|    417|        TAKE_PTR(a);
  ------------------
  |  |  388|    417|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|    417|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|    417|        ({                                                       \
  |  |  |  |  |  |  381|    417|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|    417|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|    417|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|    417|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|    417|                _var_;                                           \
  |  |  |  |  |  |  386|    417|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  971|       |
  972|    417|        return 0;
  973|    638|}
macsec.c:macsec_receive_association_free:
   37|  3.34k|static ReceiveAssociation* macsec_receive_association_free(ReceiveAssociation *c) {
   38|  3.34k|        if (!c)
  ------------------
  |  Branch (38:13): [True: 0, False: 3.34k]
  ------------------
   39|      0|                return NULL;
   40|       |
   41|  3.34k|        if (c->macsec && c->section)
  ------------------
  |  Branch (41:13): [True: 3.34k, False: 0]
  |  Branch (41:26): [True: 3.34k, False: 0]
  ------------------
   42|  3.34k|                ordered_hashmap_remove(c->macsec->receive_associations_by_section, c->section);
   43|       |
   44|  3.34k|        config_section_free(c->section);
   45|  3.34k|        security_association_clear(&c->sa);
   46|       |
   47|  3.34k|        return mfree(c);
  ------------------
  |  |  404|  3.34k|        ({                                      \
  |  |  405|  3.34k|                free(memory);                   \
  |  |  406|  3.34k|                (typeof(memory)) NULL;          \
  |  |  407|  3.34k|        })
  ------------------
   48|  3.34k|}
macsec.c:security_association_clear:
   28|  5.51k|static void security_association_clear(SecurityAssociation *sa) {
   29|  5.51k|        if (!sa)
  ------------------
  |  Branch (29:13): [True: 0, False: 5.51k]
  ------------------
   30|      0|                return;
   31|       |
   32|  5.51k|        explicit_bzero_safe(sa->key, sa->key_len);
   33|  5.51k|        free(sa->key);
   34|  5.51k|        free(sa->key_file);
   35|  5.51k|}
macsec.c:macsec_receive_channel_free:
   95|  3.58k|static ReceiveChannel* macsec_receive_channel_free(ReceiveChannel *c) {
   96|  3.58k|        if (!c)
  ------------------
  |  Branch (96:13): [True: 0, False: 3.58k]
  ------------------
   97|      0|                return NULL;
   98|       |
   99|  3.58k|        if (c->macsec) {
  ------------------
  |  Branch (99:13): [True: 3.58k, False: 0]
  ------------------
  100|  3.58k|                if (c->sci.as_uint64 > 0)
  ------------------
  |  Branch (100:21): [True: 3.05k, False: 522]
  ------------------
  101|  3.05k|                        ordered_hashmap_remove_value(c->macsec->receive_channels, &c->sci.as_uint64, c);
  102|       |
  103|  3.58k|                if (c->section)
  ------------------
  |  Branch (103:21): [True: 3.37k, False: 209]
  ------------------
  104|  3.37k|                        ordered_hashmap_remove(c->macsec->receive_channels_by_section, c->section);
  105|  3.58k|        }
  106|       |
  107|  3.58k|        config_section_free(c->section);
  108|       |
  109|  3.58k|        return mfree(c);
  ------------------
  |  |  404|  3.58k|        ({                                      \
  |  |  405|  3.58k|                free(memory);                   \
  |  |  406|  3.58k|                (typeof(memory)) NULL;          \
  |  |  407|  3.58k|        })
  ------------------
  110|  3.58k|}
macsec.c:macsec_receive_channel_new_static:
  142|  5.48k|static int macsec_receive_channel_new_static(MACsec *s, const char *filename, unsigned section_line, ReceiveChannel **ret) {
  143|  5.48k|        _cleanup_(config_section_freep) ConfigSection *n = NULL;
  ------------------
  |  |   78|  5.48k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  144|  5.48k|        _cleanup_(macsec_receive_channel_freep) ReceiveChannel *c = NULL;
  ------------------
  |  |   78|  5.48k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  145|  5.48k|        int r;
  146|       |
  147|  5.48k|        assert(s);
  ------------------
  |  |   72|  5.48k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.48k|        do {                                                            \
  |  |  |  |   59|  5.48k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.48k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.48k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.48k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.48k|        } while (false)
  |  |  ------------------
  ------------------
  148|  5.48k|        assert(ret);
  ------------------
  |  |   72|  5.48k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.48k|        do {                                                            \
  |  |  |  |   59|  5.48k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.48k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.48k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.48k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.48k|        } while (false)
  |  |  ------------------
  ------------------
  149|  5.48k|        assert(filename);
  ------------------
  |  |   72|  5.48k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.48k|        do {                                                            \
  |  |  |  |   59|  5.48k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.48k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.48k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.48k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.48k|        } while (false)
  |  |  ------------------
  ------------------
  150|  5.48k|        assert(section_line > 0);
  ------------------
  |  |   72|  5.48k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.48k|        do {                                                            \
  |  |  |  |   59|  5.48k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.48k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.48k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.48k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.48k|        } while (false)
  |  |  ------------------
  ------------------
  151|       |
  152|  5.48k|        r = config_section_new(filename, section_line, &n);
  153|  5.48k|        if (r < 0)
  ------------------
  |  Branch (153:13): [True: 0, False: 5.48k]
  ------------------
  154|      0|                return r;
  155|       |
  156|  5.48k|        c = ordered_hashmap_get(s->receive_channels_by_section, n);
  157|  5.48k|        if (c) {
  ------------------
  |  Branch (157:13): [True: 2.11k, False: 3.37k]
  ------------------
  158|  2.11k|                *ret = TAKE_PTR(c);
  ------------------
  |  |  388|  2.11k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  2.11k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  2.11k|        ({                                                       \
  |  |  |  |  |  |  381|  2.11k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  2.11k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  2.11k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  2.11k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  2.11k|                _var_;                                           \
  |  |  |  |  |  |  386|  2.11k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  159|  2.11k|                return 0;
  160|  2.11k|        }
  161|       |
  162|  3.37k|        r = macsec_receive_channel_new(s, 0, &c);
  163|  3.37k|        if (r < 0)
  ------------------
  |  Branch (163:13): [True: 0, False: 3.37k]
  ------------------
  164|      0|                return r;
  165|       |
  166|  3.37k|        c->section = TAKE_PTR(n);
  ------------------
  |  |  388|  3.37k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  3.37k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  3.37k|        ({                                                       \
  |  |  |  |  |  |  381|  3.37k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  3.37k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  3.37k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  3.37k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  3.37k|                _var_;                                           \
  |  |  |  |  |  |  386|  3.37k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  167|       |
  168|  3.37k|        r = ordered_hashmap_ensure_put(&s->receive_channels_by_section, &receive_channel_hash_ops_by_section, c->section, c);
  169|  3.37k|        if (r < 0)
  ------------------
  |  Branch (169:13): [True: 0, False: 3.37k]
  ------------------
  170|      0|                return r;
  171|       |
  172|  3.37k|        *ret = TAKE_PTR(c);
  ------------------
  |  |  388|  3.37k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  3.37k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  3.37k|        ({                                                       \
  |  |  |  |  |  |  381|  3.37k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  3.37k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  3.37k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  3.37k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  3.37k|                _var_;                                           \
  |  |  |  |  |  |  386|  3.37k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  173|  3.37k|        return 0;
  174|  3.37k|}
macsec.c:macsec_receive_channel_new:
  124|  3.58k|static int macsec_receive_channel_new(MACsec *s, uint64_t sci, ReceiveChannel **ret) {
  125|  3.58k|        ReceiveChannel *c;
  126|       |
  127|  3.58k|        assert(s);
  ------------------
  |  |   72|  3.58k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.58k|        do {                                                            \
  |  |  |  |   59|  3.58k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.58k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.58k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.58k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.58k|        } while (false)
  |  |  ------------------
  ------------------
  128|       |
  129|  3.58k|        c = new(ReceiveChannel, 1);
  ------------------
  |  |   17|  3.58k|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
  130|  3.58k|        if (!c)
  ------------------
  |  Branch (130:13): [True: 0, False: 3.58k]
  ------------------
  131|      0|                return -ENOMEM;
  132|       |
  133|  3.58k|        *c = (ReceiveChannel) {
  134|  3.58k|                .macsec = s,
  135|  3.58k|                .sci.as_uint64 = sci,
  136|  3.58k|        };
  137|       |
  138|  3.58k|        *ret = c;
  139|  3.58k|        return 0;
  140|  3.58k|}
macsec.c:macsec_receive_association_new_static:
   57|  11.2k|static int macsec_receive_association_new_static(MACsec *s, const char *filename, unsigned section_line, ReceiveAssociation **ret) {
   58|  11.2k|        _cleanup_(config_section_freep) ConfigSection *n = NULL;
  ------------------
  |  |   78|  11.2k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
   59|  11.2k|        _cleanup_(macsec_receive_association_freep) ReceiveAssociation *c = NULL;
  ------------------
  |  |   78|  11.2k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
   60|  11.2k|        int r;
   61|       |
   62|  11.2k|        assert(s);
  ------------------
  |  |   72|  11.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  11.2k|        do {                                                            \
  |  |  |  |   59|  11.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  11.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 11.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  11.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  11.2k|        } while (false)
  |  |  ------------------
  ------------------
   63|  11.2k|        assert(ret);
  ------------------
  |  |   72|  11.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  11.2k|        do {                                                            \
  |  |  |  |   59|  11.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  11.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 11.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  11.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  11.2k|        } while (false)
  |  |  ------------------
  ------------------
   64|  11.2k|        assert(filename);
  ------------------
  |  |   72|  11.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  11.2k|        do {                                                            \
  |  |  |  |   59|  11.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  11.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 11.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  11.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  11.2k|        } while (false)
  |  |  ------------------
  ------------------
   65|  11.2k|        assert(section_line > 0);
  ------------------
  |  |   72|  11.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  11.2k|        do {                                                            \
  |  |  |  |   59|  11.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  11.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 11.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  11.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  11.2k|        } while (false)
  |  |  ------------------
  ------------------
   66|       |
   67|  11.2k|        r = config_section_new(filename, section_line, &n);
   68|  11.2k|        if (r < 0)
  ------------------
  |  Branch (68:13): [True: 0, False: 11.2k]
  ------------------
   69|      0|                return r;
   70|       |
   71|  11.2k|        c = ordered_hashmap_get(s->receive_associations_by_section, n);
   72|  11.2k|        if (c) {
  ------------------
  |  Branch (72:13): [True: 7.89k, False: 3.34k]
  ------------------
   73|  7.89k|                *ret = TAKE_PTR(c);
  ------------------
  |  |  388|  7.89k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  7.89k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  7.89k|        ({                                                       \
  |  |  |  |  |  |  381|  7.89k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  7.89k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  7.89k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  7.89k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  7.89k|                _var_;                                           \
  |  |  |  |  |  |  386|  7.89k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   74|  7.89k|                return 0;
   75|  7.89k|        }
   76|       |
   77|  3.34k|        c = new(ReceiveAssociation, 1);
  ------------------
  |  |   17|  3.34k|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
   78|  3.34k|        if (!c)
  ------------------
  |  Branch (78:13): [True: 0, False: 3.34k]
  ------------------
   79|      0|                return -ENOMEM;
   80|       |
   81|  3.34k|        *c = (ReceiveAssociation) {
   82|  3.34k|                .macsec = s,
   83|  3.34k|                .section = TAKE_PTR(n),
  ------------------
  |  |  388|  3.34k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  3.34k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  3.34k|        ({                                                       \
  |  |  |  |  |  |  381|  3.34k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  3.34k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  3.34k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  3.34k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  3.34k|                _var_;                                           \
  |  |  |  |  |  |  386|  3.34k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   84|  3.34k|                .sa = SECURITY_ASSOCIATION_NULL,
  ------------------
  |  |   23|  3.34k|        (SecurityAssociation) {                 \
  |  |   24|  3.34k|                .activate = -1,                 \
  |  |   25|  3.34k|                .use_for_encoding = -1,         \
  |  |   26|  3.34k|        }
  ------------------
   85|  3.34k|        };
   86|       |
   87|  3.34k|        r = ordered_hashmap_ensure_put(&s->receive_associations_by_section, &receive_association_hash_ops_by_section, c->section, c);
   88|  3.34k|        if (r < 0)
  ------------------
  |  Branch (88:13): [True: 0, False: 3.34k]
  ------------------
   89|      0|                return r;
   90|       |
   91|  3.34k|        *ret = TAKE_PTR(c);
  ------------------
  |  |  388|  3.34k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  3.34k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  3.34k|        ({                                                       \
  |  |  |  |  |  |  381|  3.34k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  3.34k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  3.34k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  3.34k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  3.34k|                _var_;                                           \
  |  |  |  |  |  |  386|  3.34k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   92|  3.34k|        return 0;
   93|  3.34k|}
macsec.c:macsec_transmit_association_free:
  176|  2.17k|static TransmitAssociation* macsec_transmit_association_free(TransmitAssociation *a) {
  177|  2.17k|        if (!a)
  ------------------
  |  Branch (177:13): [True: 0, False: 2.17k]
  ------------------
  178|      0|                return NULL;
  179|       |
  180|  2.17k|        if (a->macsec && a->section)
  ------------------
  |  Branch (180:13): [True: 2.17k, False: 0]
  |  Branch (180:26): [True: 2.17k, False: 0]
  ------------------
  181|  2.17k|                ordered_hashmap_remove(a->macsec->transmit_associations_by_section, a->section);
  182|       |
  183|  2.17k|        config_section_free(a->section);
  184|  2.17k|        security_association_clear(&a->sa);
  185|       |
  186|  2.17k|        return mfree(a);
  ------------------
  |  |  404|  2.17k|        ({                                      \
  |  |  405|  2.17k|                free(memory);                   \
  |  |  406|  2.17k|                (typeof(memory)) NULL;          \
  |  |  407|  2.17k|        })
  ------------------
  187|  2.17k|}
macsec.c:macsec_transmit_association_new_static:
  196|  10.2k|static int macsec_transmit_association_new_static(MACsec *s, const char *filename, unsigned section_line, TransmitAssociation **ret) {
  197|  10.2k|        _cleanup_(config_section_freep) ConfigSection *n = NULL;
  ------------------
  |  |   78|  10.2k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  198|  10.2k|        _cleanup_(macsec_transmit_association_freep) TransmitAssociation *a = NULL;
  ------------------
  |  |   78|  10.2k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  199|  10.2k|        int r;
  200|       |
  201|  10.2k|        assert(s);
  ------------------
  |  |   72|  10.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  10.2k|        do {                                                            \
  |  |  |  |   59|  10.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  10.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 10.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  10.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  10.2k|        } while (false)
  |  |  ------------------
  ------------------
  202|  10.2k|        assert(ret);
  ------------------
  |  |   72|  10.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  10.2k|        do {                                                            \
  |  |  |  |   59|  10.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  10.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 10.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  10.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  10.2k|        } while (false)
  |  |  ------------------
  ------------------
  203|  10.2k|        assert(filename);
  ------------------
  |  |   72|  10.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  10.2k|        do {                                                            \
  |  |  |  |   59|  10.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  10.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 10.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  10.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  10.2k|        } while (false)
  |  |  ------------------
  ------------------
  204|  10.2k|        assert(section_line > 0);
  ------------------
  |  |   72|  10.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  10.2k|        do {                                                            \
  |  |  |  |   59|  10.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  10.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 10.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  10.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  10.2k|        } while (false)
  |  |  ------------------
  ------------------
  205|       |
  206|  10.2k|        r = config_section_new(filename, section_line, &n);
  207|  10.2k|        if (r < 0)
  ------------------
  |  Branch (207:13): [True: 0, False: 10.2k]
  ------------------
  208|      0|                return r;
  209|       |
  210|  10.2k|        a = ordered_hashmap_get(s->transmit_associations_by_section, n);
  211|  10.2k|        if (a) {
  ------------------
  |  Branch (211:13): [True: 8.03k, False: 2.17k]
  ------------------
  212|  8.03k|                *ret = TAKE_PTR(a);
  ------------------
  |  |  388|  8.03k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  8.03k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  8.03k|        ({                                                       \
  |  |  |  |  |  |  381|  8.03k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  8.03k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  8.03k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  8.03k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  8.03k|                _var_;                                           \
  |  |  |  |  |  |  386|  8.03k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  213|  8.03k|                return 0;
  214|  8.03k|        }
  215|       |
  216|  2.17k|        a = new(TransmitAssociation, 1);
  ------------------
  |  |   17|  2.17k|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
  217|  2.17k|        if (!a)
  ------------------
  |  Branch (217:13): [True: 0, False: 2.17k]
  ------------------
  218|      0|                return -ENOMEM;
  219|       |
  220|  2.17k|        *a = (TransmitAssociation) {
  221|  2.17k|                .macsec = s,
  222|  2.17k|                .section = TAKE_PTR(n),
  ------------------
  |  |  388|  2.17k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  2.17k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  2.17k|        ({                                                       \
  |  |  |  |  |  |  381|  2.17k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  2.17k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  2.17k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  2.17k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  2.17k|                _var_;                                           \
  |  |  |  |  |  |  386|  2.17k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  223|  2.17k|                .sa = SECURITY_ASSOCIATION_NULL,
  ------------------
  |  |   23|  2.17k|        (SecurityAssociation) {                 \
  |  |   24|  2.17k|                .activate = -1,                 \
  |  |   25|  2.17k|                .use_for_encoding = -1,         \
  |  |   26|  2.17k|        }
  ------------------
  224|  2.17k|        };
  225|       |
  226|  2.17k|        r = ordered_hashmap_ensure_put(&s->transmit_associations_by_section, &transmit_association_hash_ops_by_section, a->section, a);
  227|  2.17k|        if (r < 0)
  ------------------
  |  Branch (227:13): [True: 0, False: 2.17k]
  ------------------
  228|      0|                return r;
  229|       |
  230|  2.17k|        *ret = TAKE_PTR(a);
  ------------------
  |  |  388|  2.17k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  2.17k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  2.17k|        ({                                                       \
  |  |  |  |  |  |  381|  2.17k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  2.17k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  2.17k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  2.17k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  2.17k|                _var_;                                           \
  |  |  |  |  |  |  386|  2.17k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|  2.17k|        return 0;
  232|  2.17k|}
macsec.c:macsec_init:
 1210|  1.27k|static void macsec_init(NetDev *netdev) {
 1211|  1.27k|        MACsec *v = MACSEC(netdev);
 1212|       |
 1213|  1.27k|        v->encrypt = -1;
 1214|  1.27k|}
macsec.c:macsec_done:
 1216|  1.27k|static void macsec_done(NetDev *netdev) {
 1217|  1.27k|        MACsec *v = MACSEC(netdev);
 1218|       |
 1219|  1.27k|        ordered_hashmap_free(v->receive_channels);
 1220|  1.27k|        ordered_hashmap_free(v->receive_channels_by_section);
 1221|  1.27k|        ordered_hashmap_free(v->transmit_associations_by_section);
 1222|  1.27k|        ordered_hashmap_free(v->receive_associations_by_section);
 1223|  1.27k|}
macsec.c:netdev_macsec_verify:
 1146|  1.27k|static int netdev_macsec_verify(NetDev *netdev, const char *filename) {
 1147|  1.27k|        assert(filename);
  ------------------
  |  |   72|  1.27k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.27k|        do {                                                            \
  |  |  |  |   59|  1.27k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.27k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.27k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.27k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.27k|        } while (false)
  |  |  ------------------
  ------------------
 1148|       |
 1149|  1.27k|        MACsec *v = MACSEC(netdev);
 1150|  1.27k|        TransmitAssociation *a;
 1151|  1.27k|        ReceiveAssociation *n;
 1152|  1.27k|        ReceiveChannel *c;
 1153|  1.27k|        uint8_t an, encoding_an;
 1154|  1.27k|        bool use_for_encoding;
 1155|  1.27k|        int r;
 1156|       |
 1157|  3.37k|        ORDERED_HASHMAP_FOREACH(c, v->receive_channels_by_section) {
  ------------------
  |  |  347|  1.27k|        _ORDERED_HASHMAP_FOREACH(e, h, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |  345|  4.64k|        for (Iterator i = ITERATOR_FIRST; ordered_hashmap_iterate((h), &i, (void**)&(e), NULL); )
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|  1.27k|#define ITERATOR_FIRST ((Iterator) { .idx = _IDX_ITERATOR_FIRST, .next_key = NULL })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|  1.27k|#define _IDX_ITERATOR_FIRST (UINT_MAX - 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (345:43): [True: 3.37k, False: 1.27k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1158|  3.37k|                r = macsec_receive_channel_verify(c);
 1159|  3.37k|                if (r < 0)
  ------------------
  |  Branch (1159:21): [True: 2.99k, False: 374]
  ------------------
 1160|  2.99k|                        macsec_receive_channel_free(c);
 1161|  3.37k|        }
 1162|       |
 1163|  1.27k|        an = 0;
 1164|  1.27k|        use_for_encoding = false;
 1165|  1.27k|        encoding_an = 0;
 1166|  2.17k|        ORDERED_HASHMAP_FOREACH(a, v->transmit_associations_by_section) {
  ------------------
  |  |  347|  1.27k|        _ORDERED_HASHMAP_FOREACH(e, h, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |  345|  3.45k|        for (Iterator i = ITERATOR_FIRST; ordered_hashmap_iterate((h), &i, (void**)&(e), NULL); )
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|  1.27k|#define ITERATOR_FIRST ((Iterator) { .idx = _IDX_ITERATOR_FIRST, .next_key = NULL })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|  1.27k|#define _IDX_ITERATOR_FIRST (UINT_MAX - 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (345:43): [True: 2.17k, False: 1.27k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1167|  2.17k|                r = macsec_transmit_association_verify(a);
 1168|  2.17k|                if (r < 0) {
  ------------------
  |  Branch (1168:21): [True: 1.60k, False: 570]
  ------------------
 1169|  1.60k|                        macsec_transmit_association_free(a);
 1170|  1.60k|                        continue;
 1171|  1.60k|                }
 1172|       |
 1173|    570|                if (an >= MACSEC_MAX_ASSOCIATION_NUMBER) {
  ------------------
  |  |   12|    570|#define MACSEC_MAX_ASSOCIATION_NUMBER 4
  ------------------
  |  Branch (1173:21): [True: 481, False: 89]
  ------------------
 1174|    481|                        log_netdev_error(netdev,
  ------------------
  |  |  282|    481|#define log_netdev_error(netdev, ...)   log_netdev_full(netdev, LOG_ERR, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  276|    481|#define log_netdev_full(netdev, level, ...) (void) log_netdev_full_errno_zerook(netdev, level, 0, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    481|        ({                                                              \
  |  |  |  |  |  |  265|    481|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|    481|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|    481|        ({                                                              \
  |  |  |  |  |  |  |  |    8|    962|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 481, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    481|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|    481|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|    481|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 481, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|    481|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|    481|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|    481|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1175|    481|                                         "%s: Too many [MACsecTransmitAssociation] sections configured. "
 1176|    481|                                         "Ignoring [MACsecTransmitAssociation] section from line %u",
 1177|    481|                                         a->section->filename, a->section->line);
 1178|    481|                        macsec_transmit_association_free(a);
 1179|    481|                        continue;
 1180|    481|                }
 1181|       |
 1182|     89|                a->sa.association_number = an++;
 1183|       |
 1184|     89|                if (a->sa.use_for_encoding > 0) {
  ------------------
  |  Branch (1184:21): [True: 10, False: 79]
  ------------------
 1185|     10|                        if (use_for_encoding) {
  ------------------
  |  Branch (1185:29): [True: 6, False: 4]
  ------------------
 1186|      6|                                log_netdev_warning(netdev,
  ------------------
  |  |  281|      6|#define log_netdev_warning(netdev, ...) log_netdev_full(netdev, LOG_WARNING,  __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  276|      6|#define log_netdev_full(netdev, level, ...) (void) log_netdev_full_errno_zerook(netdev, level, 0, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      6|        ({                                                              \
  |  |  |  |  |  |  265|      6|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      6|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      6|        ({                                                              \
  |  |  |  |  |  |  |  |    8|     12|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 6, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      6|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      6|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      6|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 6, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      6|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      6|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      6|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1187|      6|                                                   "%s: Multiple security associations are set to be used for transmit channel."
 1188|      6|                                                   "Disabling UseForEncoding= in [MACsecTransmitAssociation] section from line %u",
 1189|      6|                                                   a->section->filename, a->section->line);
 1190|      6|                                a->sa.use_for_encoding = false;
 1191|      6|                        } else {
 1192|      4|                                encoding_an = a->sa.association_number;
 1193|      4|                                use_for_encoding = true;
 1194|      4|                        }
 1195|     10|                }
 1196|     89|        }
 1197|       |
 1198|  1.27k|        assert(encoding_an < MACSEC_MAX_ASSOCIATION_NUMBER);
  ------------------
  |  |   72|  1.27k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.27k|        do {                                                            \
  |  |  |  |   59|  1.27k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.27k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.27k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.27k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.27k|        } while (false)
  |  |  ------------------
  ------------------
 1199|  1.27k|        v->encoding_an = encoding_an;
 1200|       |
 1201|  3.34k|        ORDERED_HASHMAP_FOREACH(n, v->receive_associations_by_section) {
  ------------------
  |  |  347|  1.27k|        _ORDERED_HASHMAP_FOREACH(e, h, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |  345|  4.61k|        for (Iterator i = ITERATOR_FIRST; ordered_hashmap_iterate((h), &i, (void**)&(e), NULL); )
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|  1.27k|#define ITERATOR_FIRST ((Iterator) { .idx = _IDX_ITERATOR_FIRST, .next_key = NULL })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|  1.27k|#define _IDX_ITERATOR_FIRST (UINT_MAX - 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (345:43): [True: 3.34k, False: 1.27k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1202|  3.34k|                r = macsec_receive_association_verify(n);
 1203|  3.34k|                if (r < 0)
  ------------------
  |  Branch (1203:21): [True: 2.97k, False: 362]
  ------------------
 1204|  2.97k|                        macsec_receive_association_free(n);
 1205|  3.34k|        }
 1206|       |
 1207|  1.27k|        return 0;
 1208|  1.27k|}
macsec.c:macsec_receive_channel_verify:
 1010|  3.37k|static int macsec_receive_channel_verify(ReceiveChannel *c) {
 1011|  3.37k|        NetDev *netdev;
 1012|  3.37k|        int r;
 1013|       |
 1014|  3.37k|        assert(c);
  ------------------
  |  |   72|  3.37k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.37k|        do {                                                            \
  |  |  |  |   59|  3.37k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.37k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.37k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.37k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.37k|        } while (false)
  |  |  ------------------
  ------------------
 1015|  3.37k|        assert(c->macsec);
  ------------------
  |  |   72|  3.37k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.37k|        do {                                                            \
  |  |  |  |   59|  3.37k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.37k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.37k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.37k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.37k|        } while (false)
  |  |  ------------------
  ------------------
 1016|       |
 1017|  3.37k|        netdev = NETDEV(c->macsec);
  ------------------
  |  |  216|  3.37k|#define NETDEV(n) (&(n)->meta)
  ------------------
 1018|       |
 1019|  3.37k|        if (section_is_invalid(c->section))
  ------------------
  |  Branch (1019:13): [True: 700, False: 2.67k]
  ------------------
 1020|    700|                return -EINVAL;
 1021|       |
 1022|  2.67k|        if (ether_addr_is_null(&c->sci.mac))
  ------------------
  |  Branch (1022:13): [True: 1.26k, False: 1.40k]
  ------------------
 1023|  1.26k|                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|  1.26k|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|  1.26k|        ({                                                              \
  |  |  |  |  271|  1.26k|                int _error = (error);                                   \
  |  |  |  |  272|  1.26k|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|  1.26k|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  1.26k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  1.26k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  1.26k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  1.26k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.26k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  1.26k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  1.26k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|  1.26k|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  1.26k|        ({                                                              \
  |  |  |  |  |  |  265|  1.26k|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|  1.26k|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|  1.26k|        ({                                                              \
  |  |  |  |  |  |  |  |    8|  2.53k|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 1.26k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|  1.26k|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|  1.26k|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|  1.26k|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 1.26k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|  1.26k|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|  1.26k|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|  1.26k|        })
  |  |  |  |  ------------------
  |  |  |  |  274|  1.26k|        })
  |  |  ------------------
  ------------------
 1024|  1.40k|                                              "%s: MACsec receive channel without MAC address configured. "
 1025|  1.40k|                                              "Ignoring [MACsecReceiveChannel] section from line %u",
 1026|  1.40k|                                              c->section->filename, c->section->line);
 1027|       |
 1028|  1.40k|        if (c->sci.port == 0)
  ------------------
  |  Branch (1028:13): [True: 236, False: 1.16k]
  ------------------
 1029|    236|                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|    236|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|    236|        ({                                                              \
  |  |  |  |  271|    236|                int _error = (error);                                   \
  |  |  |  |  272|    236|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    236|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    236|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    236|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    236|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    236|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 236]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    236|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    236|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|    236|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    236|        ({                                                              \
  |  |  |  |  |  |  265|    236|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|    236|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|    236|        ({                                                              \
  |  |  |  |  |  |  |  |    8|    472|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 236, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    236|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|    236|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|    236|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 236, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|    236|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|    236|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|    236|        })
  |  |  |  |  ------------------
  |  |  |  |  274|    236|        })
  |  |  ------------------
  ------------------
 1030|  1.16k|                                              "%s: MACsec receive channel without port configured. "
 1031|  1.16k|                                              "Ignoring [MACsecReceiveChannel] section from line %u",
 1032|  1.16k|                                              c->section->filename, c->section->line);
 1033|       |
 1034|  1.16k|        r = ordered_hashmap_ensure_put(&c->macsec->receive_channels, &receive_channel_hash_ops, &c->sci.as_uint64, c);
 1035|  1.16k|        if (r == -ENOMEM)
  ------------------
  |  Branch (1035:13): [True: 0, False: 1.16k]
  ------------------
 1036|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1037|  1.16k|        if (r == -EEXIST)
  ------------------
  |  Branch (1037:13): [True: 794, False: 374]
  ------------------
 1038|    794|                return log_netdev_error_errno(netdev, r,
  ------------------
  |  |  288|    794|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|    794|        ({                                                              \
  |  |  |  |  271|    794|                int _error = (error);                                   \
  |  |  |  |  272|    794|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    794|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    794|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    794|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    794|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    794|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 794]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    794|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    794|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|    794|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    794|        ({                                                              \
  |  |  |  |  |  |  265|    794|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|    794|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|    794|        ({                                                              \
  |  |  |  |  |  |  |  |    8|  1.58k|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 794, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    794|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|    794|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|    794|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 794, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|    794|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|    794|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|    794|        })
  |  |  |  |  ------------------
  |  |  |  |  274|    794|        })
  |  |  ------------------
  ------------------
 1039|    374|                                              "%s: Multiple [MACsecReceiveChannel] sections have same SCI, "
 1040|    374|                                              "Ignoring [MACsecReceiveChannel] section from line %u",
 1041|    374|                                              c->section->filename, c->section->line);
 1042|    374|        if (r < 0)
  ------------------
  |  Branch (1042:13): [True: 0, False: 374]
  ------------------
 1043|      0|                return log_netdev_error_errno(netdev, r,
  ------------------
  |  |  288|      0|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      0|        ({                                                              \
  |  |  |  |  271|      0|                int _error = (error);                                   \
  |  |  |  |  272|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      0|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|        ({                                                              \
  |  |  |  |  |  |  265|      0|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      0|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      0|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      0|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      0|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      0|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      0|        })
  |  |  ------------------
  ------------------
 1044|    374|                                              "%s: Failed to store [MACsecReceiveChannel] section at hashmap, "
 1045|    374|                                              "Ignoring [MACsecReceiveChannel] section from line %u",
 1046|    374|                                              c->section->filename, c->section->line);
 1047|    374|        return 0;
 1048|    374|}
macsec.c:macsec_transmit_association_verify:
 1050|  2.17k|static int macsec_transmit_association_verify(TransmitAssociation *t) {
 1051|  2.17k|        NetDev *netdev;
 1052|  2.17k|        int r;
 1053|       |
 1054|  2.17k|        assert(t);
  ------------------
  |  |   72|  2.17k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.17k|        do {                                                            \
  |  |  |  |   59|  2.17k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.17k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.17k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.17k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.17k|        } while (false)
  |  |  ------------------
  ------------------
 1055|  2.17k|        assert(t->macsec);
  ------------------
  |  |   72|  2.17k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.17k|        do {                                                            \
  |  |  |  |   59|  2.17k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.17k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.17k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.17k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.17k|        } while (false)
  |  |  ------------------
  ------------------
 1056|       |
 1057|  2.17k|        netdev = NETDEV(t->macsec);
  ------------------
  |  |  216|  2.17k|#define NETDEV(n) (&(n)->meta)
  ------------------
 1058|       |
 1059|  2.17k|        if (section_is_invalid(t->section))
  ------------------
  |  Branch (1059:13): [True: 519, False: 1.65k]
  ------------------
 1060|    519|                return -EINVAL;
 1061|       |
 1062|  1.65k|        if (t->sa.packet_number == 0)
  ------------------
  |  Branch (1062:13): [True: 385, False: 1.27k]
  ------------------
 1063|    385|                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|    385|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|    385|        ({                                                              \
  |  |  |  |  271|    385|                int _error = (error);                                   \
  |  |  |  |  272|    385|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    385|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    385|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    385|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    385|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    385|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 385]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    385|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    385|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|    385|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    385|        ({                                                              \
  |  |  |  |  |  |  265|    385|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|    385|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|    385|        ({                                                              \
  |  |  |  |  |  |  |  |    8|    770|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 385, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    385|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|    385|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|    385|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 385, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|    385|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|    385|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|    385|        })
  |  |  |  |  ------------------
  |  |  |  |  274|    385|        })
  |  |  ------------------
  ------------------
 1064|  1.27k|                                              "%s: MACsec transmit secure association without PacketNumber= configured. "
 1065|  1.27k|                                              "Ignoring [MACsecTransmitAssociation] section from line %u",
 1066|  1.27k|                                              t->section->filename, t->section->line);
 1067|       |
 1068|  1.27k|        r = macsec_read_key_file(netdev, &t->sa);
 1069|  1.27k|        if (r < 0)
  ------------------
  |  Branch (1069:13): [True: 437, False: 837]
  ------------------
 1070|    437|                return r;
 1071|       |
 1072|    837|        if (t->sa.key_len <= 0)
  ------------------
  |  Branch (1072:13): [True: 267, False: 570]
  ------------------
 1073|    267|                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|    267|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|    267|        ({                                                              \
  |  |  |  |  271|    267|                int _error = (error);                                   \
  |  |  |  |  272|    267|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    267|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    267|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    267|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    267|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    267|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 267]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    267|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    267|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|    267|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    267|        ({                                                              \
  |  |  |  |  |  |  265|    267|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|    267|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|    267|        ({                                                              \
  |  |  |  |  |  |  |  |    8|    534|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 267, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    267|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|    267|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|    267|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 267, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|    267|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|    267|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|    267|        })
  |  |  |  |  ------------------
  |  |  |  |  274|    267|        })
  |  |  ------------------
  ------------------
 1074|    570|                                              "%s: MACsec transmit secure association without key configured. "
 1075|    570|                                              "Ignoring [MACsecTransmitAssociation] section from line %u",
 1076|    570|                                              t->section->filename, t->section->line);
 1077|       |
 1078|    570|        return 0;
 1079|    837|}
macsec.c:macsec_read_key_file:
  975|  3.52k|static int macsec_read_key_file(NetDev *netdev, SecurityAssociation *sa) {
  976|  3.52k|        _cleanup_(erase_and_freep) uint8_t *key = NULL;
  ------------------
  |  |   78|  3.52k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  977|  3.52k|        size_t key_len;
  978|  3.52k|        int r;
  979|       |
  980|  3.52k|        assert(netdev);
  ------------------
  |  |   72|  3.52k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.52k|        do {                                                            \
  |  |  |  |   59|  3.52k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.52k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.52k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.52k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.52k|        } while (false)
  |  |  ------------------
  ------------------
  981|  3.52k|        assert(sa);
  ------------------
  |  |   72|  3.52k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.52k|        do {                                                            \
  |  |  |  |   59|  3.52k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.52k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.52k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.52k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.52k|        } while (false)
  |  |  ------------------
  ------------------
  982|       |
  983|  3.52k|        if (!sa->key_file)
  ------------------
  |  Branch (983:13): [True: 2.32k, False: 1.19k]
  ------------------
  984|  2.32k|                return 0;
  985|       |
  986|  1.19k|        r = read_full_file_full(
  987|  1.19k|                        AT_FDCWD, sa->key_file, UINT64_MAX, MACSEC_KEYID_LEN,
  ------------------
  |  |  308|  1.19k|#define AT_FDCWD                -100
  ------------------
  988|  1.19k|                        READ_FULL_FILE_SECURE |
  989|  1.19k|                        READ_FULL_FILE_UNHEX |
  990|  1.19k|                        READ_FULL_FILE_WARN_WORLD_READABLE |
  991|  1.19k|                        READ_FULL_FILE_CONNECT_SOCKET |
  992|  1.19k|                        READ_FULL_FILE_FAIL_WHEN_LARGER,
  993|  1.19k|                        NULL, (char **) &key, &key_len);
  994|  1.19k|        if (r < 0)
  ------------------
  |  Branch (994:13): [True: 1.19k, False: 0]
  ------------------
  995|  1.19k|                return log_netdev_error_errno(netdev, r,
  ------------------
  |  |  288|  1.19k|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|  1.19k|        ({                                                              \
  |  |  |  |  271|  1.19k|                int _error = (error);                                   \
  |  |  |  |  272|  1.19k|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|  1.19k|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  1.19k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  1.19k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  1.19k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  1.19k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.19k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  1.19k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  1.19k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|  1.19k|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  1.19k|        ({                                                              \
  |  |  |  |  |  |  265|  1.19k|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|  1.19k|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|  1.19k|        ({                                                              \
  |  |  |  |  |  |  |  |    8|  2.39k|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 1.19k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|  1.19k|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|  1.19k|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|  1.19k|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 1.19k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|  1.19k|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|  1.19k|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|  1.19k|        })
  |  |  |  |  ------------------
  |  |  |  |  274|  1.19k|        })
  |  |  ------------------
  ------------------
  996|      0|                                              "Failed to read key from '%s', ignoring: %m",
  997|      0|                                              sa->key_file);
  998|       |
  999|      0|        if (key_len != MACSEC_KEYID_LEN)
  ------------------
  |  Branch (999:13): [True: 0, False: 0]
  ------------------
 1000|      0|                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|      0|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      0|        ({                                                              \
  |  |  |  |  271|      0|                int _error = (error);                                   \
  |  |  |  |  272|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      0|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|        ({                                                              \
  |  |  |  |  |  |  265|      0|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      0|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      0|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      0|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      0|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      0|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      0|        })
  |  |  ------------------
  ------------------
 1001|      0|                                              "Invalid key length (%zu bytes), ignoring: %m", key_len);
 1002|       |
 1003|      0|        explicit_bzero_safe(sa->key, sa->key_len);
 1004|      0|        free_and_replace(sa->key, key);
  ------------------
  |  |   49|      0|        free_and_replace_full(a, b, free)
  |  |  ------------------
  |  |  |  |   10|      0|        ({                                      \
  |  |  |  |   11|      0|                typeof(a)* _a = &(a);           \
  |  |  |  |   12|      0|                typeof(b)* _b = &(b);           \
  |  |  |  |   13|      0|                free_func(*_a);                 \
  |  |  |  |   14|      0|                *_a = *_b;                      \
  |  |  |  |   15|      0|                *_b = NULL;                     \
  |  |  |  |   16|      0|                0;                              \
  |  |  |  |   17|      0|        })
  |  |  ------------------
  ------------------
 1005|      0|        sa->key_len = key_len;
 1006|       |
 1007|      0|        return 0;
 1008|      0|}
macsec.c:macsec_receive_association_verify:
 1081|  3.34k|static int macsec_receive_association_verify(ReceiveAssociation *a) {
 1082|  3.34k|        ReceiveChannel *c;
 1083|  3.34k|        NetDev *netdev;
 1084|  3.34k|        int r;
 1085|       |
 1086|  3.34k|        assert(a);
  ------------------
  |  |   72|  3.34k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.34k|        do {                                                            \
  |  |  |  |   59|  3.34k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.34k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.34k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.34k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.34k|        } while (false)
  |  |  ------------------
  ------------------
 1087|  3.34k|        assert(a->macsec);
  ------------------
  |  |   72|  3.34k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.34k|        do {                                                            \
  |  |  |  |   59|  3.34k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.34k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.34k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.34k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.34k|        } while (false)
  |  |  ------------------
  ------------------
 1088|       |
 1089|  3.34k|        netdev = NETDEV(a->macsec);
  ------------------
  |  |  216|  3.34k|#define NETDEV(n) (&(n)->meta)
  ------------------
 1090|       |
 1091|  3.34k|        if (section_is_invalid(a->section))
  ------------------
  |  Branch (1091:13): [True: 1.09k, False: 2.24k]
  ------------------
 1092|  1.09k|                return -EINVAL;
 1093|       |
 1094|  2.24k|        r = macsec_read_key_file(netdev, &a->sa);
 1095|  2.24k|        if (r < 0)
  ------------------
  |  Branch (1095:13): [True: 760, False: 1.48k]
  ------------------
 1096|    760|                return r;
 1097|       |
 1098|  1.48k|        if (a->sa.key_len <= 0)
  ------------------
  |  Branch (1098:13): [True: 236, False: 1.25k]
  ------------------
 1099|    236|                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|    236|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|    236|        ({                                                              \
  |  |  |  |  271|    236|                int _error = (error);                                   \
  |  |  |  |  272|    236|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    236|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    236|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    236|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    236|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    236|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 236]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    236|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    236|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|    236|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    236|        ({                                                              \
  |  |  |  |  |  |  265|    236|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|    236|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|    236|        ({                                                              \
  |  |  |  |  |  |  |  |    8|    472|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 236, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    236|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|    236|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|    236|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 236, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|    236|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|    236|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|    236|        })
  |  |  |  |  ------------------
  |  |  |  |  274|    236|        })
  |  |  ------------------
  ------------------
 1100|  1.25k|                                              "%s: MACsec receive secure association without key configured. "
 1101|  1.25k|                                              "Ignoring [MACsecReceiveAssociation] section from line %u",
 1102|  1.25k|                                              a->section->filename, a->section->line);
 1103|       |
 1104|  1.25k|        if (ether_addr_is_null(&a->sci.mac))
  ------------------
  |  Branch (1104:13): [True: 341, False: 911]
  ------------------
 1105|    341|                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|    341|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|    341|        ({                                                              \
  |  |  |  |  271|    341|                int _error = (error);                                   \
  |  |  |  |  272|    341|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    341|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    341|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    341|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    341|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    341|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 341]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    341|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    341|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|    341|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    341|        ({                                                              \
  |  |  |  |  |  |  265|    341|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|    341|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|    341|        ({                                                              \
  |  |  |  |  |  |  |  |    8|    682|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 341, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    341|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|    341|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|    341|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 341, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|    341|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|    341|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|    341|        })
  |  |  |  |  ------------------
  |  |  |  |  274|    341|        })
  |  |  ------------------
  ------------------
 1106|    911|                                              "%s: MACsec receive secure association without MAC address configured. "
 1107|    911|                                              "Ignoring [MACsecReceiveAssociation] section from line %u",
 1108|    911|                                              a->section->filename, a->section->line);
 1109|       |
 1110|    911|        if (a->sci.port == 0)
  ------------------
  |  Branch (1110:13): [True: 198, False: 713]
  ------------------
 1111|    198|                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|    198|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|    198|        ({                                                              \
  |  |  |  |  271|    198|                int _error = (error);                                   \
  |  |  |  |  272|    198|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    198|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    198|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    198|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    198|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    198|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 198]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    198|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    198|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|    198|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    198|        ({                                                              \
  |  |  |  |  |  |  265|    198|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|    198|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|    198|        ({                                                              \
  |  |  |  |  |  |  |  |    8|    396|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 198, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    198|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|    198|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|    198|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 198, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|    198|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|    198|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|    198|        })
  |  |  |  |  ------------------
  |  |  |  |  274|    198|        })
  |  |  ------------------
  ------------------
 1112|    713|                                              "%s: MACsec receive secure association without port configured. "
 1113|    713|                                              "Ignoring [MACsecReceiveAssociation] section from line %u",
 1114|    713|                                              a->section->filename, a->section->line);
 1115|       |
 1116|    713|        c = ordered_hashmap_get(a->macsec->receive_channels, &a->sci.as_uint64);
 1117|    713|        if (!c) {
  ------------------
  |  Branch (1117:13): [True: 209, False: 504]
  ------------------
 1118|    209|                _cleanup_(macsec_receive_channel_freep) ReceiveChannel *new_channel = NULL;
  ------------------
  |  |   78|    209|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
 1119|       |
 1120|    209|                r = macsec_receive_channel_new(a->macsec, a->sci.as_uint64, &new_channel);
 1121|    209|                if (r < 0)
  ------------------
  |  Branch (1121:21): [True: 0, False: 209]
  ------------------
 1122|      0|                        return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1123|       |
 1124|    209|                r = ordered_hashmap_ensure_put(&a->macsec->receive_channels, &receive_channel_hash_ops, &new_channel->sci.as_uint64, new_channel);
 1125|    209|                if (r == -ENOMEM)
  ------------------
  |  Branch (1125:21): [True: 0, False: 209]
  ------------------
 1126|      0|                        return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1127|    209|                if (r < 0)
  ------------------
  |  Branch (1127:21): [True: 0, False: 209]
  ------------------
 1128|      0|                        return log_netdev_error_errno(netdev, r,
  ------------------
  |  |  288|      0|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      0|        ({                                                              \
  |  |  |  |  271|      0|                int _error = (error);                                   \
  |  |  |  |  272|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      0|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|        ({                                                              \
  |  |  |  |  |  |  265|      0|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      0|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      0|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      0|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      0|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      0|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      0|        })
  |  |  ------------------
  ------------------
 1129|    209|                                                      "%s: Failed to store receive channel at hashmap, "
 1130|    209|                                                      "Ignoring [MACsecReceiveAssociation] section from line %u",
 1131|    209|                                                      a->section->filename, a->section->line);
 1132|    209|                c = TAKE_PTR(new_channel);
  ------------------
  |  |  388|    209|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|    209|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|    209|        ({                                                       \
  |  |  |  |  |  |  381|    209|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|    209|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|    209|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|    209|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|    209|                _var_;                                           \
  |  |  |  |  |  |  386|    209|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1133|    209|        }
 1134|    713|        if (c->n_rxsa >= MACSEC_MAX_ASSOCIATION_NUMBER)
  ------------------
  |  |   12|    713|#define MACSEC_MAX_ASSOCIATION_NUMBER 4
  ------------------
  |  Branch (1134:13): [True: 351, False: 362]
  ------------------
 1135|    351|                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(ERANGE),
  ------------------
  |  |  288|    351|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|    351|        ({                                                              \
  |  |  |  |  271|    351|                int _error = (error);                                   \
  |  |  |  |  272|    351|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    351|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    351|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    351|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    351|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    351|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 351]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    351|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    351|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|    351|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    351|        ({                                                              \
  |  |  |  |  |  |  265|    351|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|    351|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|    351|        ({                                                              \
  |  |  |  |  |  |  |  |    8|    702|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 351, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    351|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|    351|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|    351|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 351, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|    351|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|    351|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|    351|        })
  |  |  |  |  ------------------
  |  |  |  |  274|    351|        })
  |  |  ------------------
  ------------------
 1136|    362|                                              "%s: Too many [MACsecReceiveAssociation] sections for the same receive channel, "
 1137|    362|                                              "Ignoring [MACsecReceiveAssociation] section from line %u",
 1138|    362|                                              a->section->filename, a->section->line);
 1139|       |
 1140|    362|        a->sa.association_number = c->n_rxsa;
 1141|    362|        c->rxsa[c->n_rxsa++] = a;
 1142|       |
 1143|    362|        return 0;
 1144|    713|}

config_parse_macvlan_broadcast_queue_size:
   92|    615|                void *userdata) {
   93|       |
   94|    615|        assert(filename);
  ------------------
  |  |   72|    615|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    615|        do {                                                            \
  |  |  |  |   59|    615|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    615|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 615]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    615|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    615|        } while (false)
  |  |  ------------------
  ------------------
   95|    615|        assert(section);
  ------------------
  |  |   72|    615|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    615|        do {                                                            \
  |  |  |  |   59|    615|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    615|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 615]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    615|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    615|        } while (false)
  |  |  ------------------
  ------------------
   96|    615|        assert(lvalue);
  ------------------
  |  |   72|    615|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    615|        do {                                                            \
  |  |  |  |   59|    615|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    615|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 615]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    615|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    615|        } while (false)
  |  |  ------------------
  ------------------
   97|    615|        assert(rvalue);
  ------------------
  |  |   72|    615|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    615|        do {                                                            \
  |  |  |  |   59|    615|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    615|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 615]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    615|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    615|        } while (false)
  |  |  ------------------
  ------------------
   98|    615|        assert(data);
  ------------------
  |  |   72|    615|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    615|        do {                                                            \
  |  |  |  |   59|    615|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    615|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 615]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    615|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    615|        } while (false)
  |  |  ------------------
  ------------------
   99|       |
  100|    615|        MacVlan *m = ASSERT_PTR(userdata);
  ------------------
  |  |   81|    615|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    615|        ({                                 \
  |  |  |  |   85|    615|                typeof(expr) var = (expr); \
  |  |  |  |   86|    615|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    615|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    615|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    615|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    615|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    615|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 615]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    615|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    615|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    615|                var;                       \
  |  |  |  |   88|    615|        })
  |  |  ------------------
  ------------------
  101|       |
  102|    615|        if (isempty(rvalue)) {
  ------------------
  |  Branch (102:13): [True: 194, False: 421]
  ------------------
  103|    194|                m->bc_queue_length = UINT32_MAX;
  104|    194|                return 0;
  105|    194|        }
  106|       |
  107|    421|        return config_parse_uint32_bounded(
  108|    421|                        unit, filename, line, section, section_line, lvalue, rvalue,
  109|    421|                        0, UINT32_MAX - 1, true,
  110|    421|                        &m->bc_queue_length);
  111|    615|}
macvlan.c:macvlan_init:
  166|    110|static void macvlan_init(NetDev *netdev) {
  167|    110|        MacVlan *m = ASSERT_PTR(netdev)->kind == NETDEV_KIND_MACVLAN ? MACVLAN(netdev) : MACVTAP(netdev);
  ------------------
  |  |   81|    110|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    110|        ({                                 \
  |  |  |  |   85|    110|                typeof(expr) var = (expr); \
  |  |  |  |   86|    110|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    110|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    110|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    110|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    110|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    110|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 110]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    110|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    110|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    110|                var;                       \
  |  |  |  |   88|    110|        })
  |  |  ------------------
  ------------------
  |  Branch (167:22): [True: 30, False: 80]
  ------------------
  168|       |
  169|    110|        m->mode = _NETDEV_MACVLAN_MODE_INVALID;
  170|    110|        m->bc_queue_length = UINT32_MAX;
  171|    110|        m->bc_queue_threshold = BC_QUEUE_THRESHOLD_UNDEF;
  172|    110|}
macvlan.c:macvlan_done:
  160|    110|static void macvlan_done(NetDev *netdev) {
  161|    110|        MacVlan *m = ASSERT_PTR(netdev)->kind == NETDEV_KIND_MACVLAN ? MACVLAN(netdev) : MACVTAP(netdev);
  ------------------
  |  |   81|    110|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    110|        ({                                 \
  |  |  |  |   85|    110|                typeof(expr) var = (expr); \
  |  |  |  |   86|    110|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    110|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    110|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    110|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    110|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    110|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 110]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    110|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    110|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    110|                var;                       \
  |  |  |  |   88|    110|        })
  |  |  ------------------
  ------------------
  |  Branch (161:22): [True: 30, False: 80]
  ------------------
  162|       |
  163|    110|        set_free(m->match_source_mac);
  164|    110|}

netdev_detach_name:
  193|  76.5k|NetDev* netdev_detach_name(NetDev *netdev, const char *name) {
  194|  76.5k|        assert(netdev);
  ------------------
  |  |   72|  76.5k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  76.5k|        do {                                                            \
  |  |  |  |   59|  76.5k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  76.5k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 76.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  76.5k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  76.5k|        } while (false)
  |  |  ------------------
  ------------------
  195|       |
  196|  76.5k|        if (!netdev->manager || !name)
  ------------------
  |  Branch (196:13): [True: 13.0k, False: 63.4k]
  |  Branch (196:33): [True: 47.4k, False: 15.9k]
  ------------------
  197|  60.5k|                return NULL; /* Already detached or not attached yet. */
  198|       |
  199|  15.9k|        return hashmap_remove_value(netdev->manager->netdevs, name, netdev);
  200|  76.5k|}
netdev_load_one:
 1002|  13.0k|int netdev_load_one(Manager *manager, const char *filename, NetDev **ret) {
 1003|  13.0k|        _cleanup_(netdev_unrefp) NetDev *netdev_raw = NULL, *netdev = NULL;
  ------------------
  |  |   78|  13.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
 1004|  13.0k|        _cleanup_free_ char *file_basename = NULL;
  ------------------
  |  |   82|  13.0k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  13.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1005|  13.0k|        const char *dropin_dirname;
 1006|  13.0k|        int r;
 1007|       |
 1008|  13.0k|        assert(manager);
  ------------------
  |  |   72|  13.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.0k|        do {                                                            \
  |  |  |  |   59|  13.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  13.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.0k|        } while (false)
  |  |  ------------------
  ------------------
 1009|  13.0k|        assert(filename);
  ------------------
  |  |   72|  13.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.0k|        do {                                                            \
  |  |  |  |   59|  13.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  13.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.0k|        } while (false)
  |  |  ------------------
  ------------------
 1010|  13.0k|        assert(ret);
  ------------------
  |  |   72|  13.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.0k|        do {                                                            \
  |  |  |  |   59|  13.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  13.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.0k|        } while (false)
  |  |  ------------------
  ------------------
 1011|       |
 1012|  13.0k|        r = null_or_empty_path(filename);
 1013|  13.0k|        if (r < 0)
  ------------------
  |  Branch (1013:13): [True: 0, False: 13.0k]
  ------------------
 1014|      0|                return log_warning_errno(r, "Failed to check if \"%s\" is empty: %m", filename);
  ------------------
  |  |  231|      0|#define log_warning_errno(error, ...)   log_full_errno(LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
 1015|  13.0k|        if (r > 0)
  ------------------
  |  Branch (1015:13): [True: 0, False: 13.0k]
  ------------------
 1016|      0|                return log_debug_errno(SYNTHETIC_ERRNO(ENOENT), "Skipping empty file: %s", filename);
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
 1017|       |
 1018|  13.0k|        netdev_raw = new(NetDev, 1);
  ------------------
  |  |   17|  13.0k|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
 1019|  13.0k|        if (!netdev_raw)
  ------------------
  |  Branch (1019:13): [True: 0, False: 13.0k]
  ------------------
 1020|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1021|       |
 1022|  13.0k|        *netdev_raw = (NetDev) {
 1023|  13.0k|                .n_ref = 1,
 1024|  13.0k|                .kind = _NETDEV_KIND_INVALID,
 1025|  13.0k|                .state = _NETDEV_STATE_INVALID, /* an invalid state means done() of the implementation won't be called on destruction */
 1026|  13.0k|        };
 1027|       |
 1028|  13.0k|        r = path_extract_filename(filename, &file_basename);
 1029|  13.0k|        if (r < 0)
  ------------------
  |  Branch (1029:13): [True: 0, False: 13.0k]
  ------------------
 1030|      0|                return log_warning_errno(r, "Failed to extract file name of '%s': %m", filename);
  ------------------
  |  |  231|      0|#define log_warning_errno(error, ...)   log_full_errno(LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
 1031|       |
 1032|  13.0k|        dropin_dirname = strjoina(file_basename, ".d");
  ------------------
  |  |   94|  13.0k|        ({                                                              \
  |  |   95|  13.0k|                const char *_appendees_[] = { a, __VA_ARGS__ };         \
  |  |   96|  13.0k|                char *_d_, *_p_;                                        \
  |  |   97|  13.0k|                size_t _len_ = 0;                                       \
  |  |   98|  13.0k|                size_t _i_;                                             \
  |  |   99|  39.2k|                for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
  |  |  ------------------
  |  |  |  |  134|  78.5k|        (__builtin_choose_expr(                                         \
  |  |  |  |  135|  78.5k|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  |  |  136|  78.5k|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  |  |  137|  78.5k|                VOID_0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  128|  39.2k|#  define VOID_0 ((void)0)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (99:31): [True: 26.1k, False: 13.0k]
  |  |  |  Branch (99:64): [True: 26.1k, False: 0]
  |  |  ------------------
  |  |  100|  26.1k|                        _len_ += strlen(_appendees_[_i_]);              \
  |  |  101|  13.0k|                _p_ = _d_ = newa(char, _len_ + 1);                      \
  |  |  ------------------
  |  |  |  |   29|  13.0k|        ({                                                              \
  |  |  |  |   30|  13.0k|                size_t _n_ = (n);                                       \
  |  |  |  |   31|  13.0k|                assert_se(MUL_ASSIGN_SAFE(&_n_, sizeof(t)));            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  13.0k|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|  13.0k|        do {                                                            \
  |  |  |  |  |  |  |  |   59|  13.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|  13.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.0k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|  13.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  13.0k|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   32|  13.0k|                (t*) alloca_safe(_n_);                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|  13.0k|        ({                                                              \
  |  |  |  |  |  |   23|  13.0k|                size_t _nn_ = (n);                                      \
  |  |  |  |  |  |   24|  13.0k|                assert(_nn_ <= ALLOCA_MAX);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  13.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  13.0k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  13.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  13.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.0k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  13.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  13.0k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   25|  13.0k|                alloca(_nn_ == 0 ? 1 : _nn_);                           \
  |  |  |  |  |  |   26|  13.0k|        })                                                              \
  |  |  |  |  ------------------
  |  |  |  |   33|  13.0k|        })
  |  |  ------------------
  |  |  102|  39.2k|                for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
  |  |  ------------------
  |  |  |  |  134|  78.5k|        (__builtin_choose_expr(                                         \
  |  |  |  |  135|  78.5k|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  |  |  136|  78.5k|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  |  |  137|  78.5k|                VOID_0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  128|  39.2k|#  define VOID_0 ((void)0)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (102:31): [True: 26.1k, False: 13.0k]
  |  |  |  Branch (102:64): [True: 26.1k, False: 0]
  |  |  ------------------
  |  |  103|  26.1k|                        _p_ = stpcpy(_p_, _appendees_[_i_]);            \
  |  |  104|  13.0k|                *_p_ = 0;                                               \
  |  |  105|  13.0k|                _d_;                                                    \
  |  |  106|  13.0k|        })
  ------------------
 1033|  13.0k|        r = config_parse_many(
 1034|  13.0k|                        STRV_MAKE_CONST(filename), NETWORK_DIRS, dropin_dirname, /* root = */ NULL,
  ------------------
  |  |  156|  13.0k|#define STRV_MAKE_CONST(...) ((const char* const*) ((const char*[]) { __VA_ARGS__, NULL }))
  ------------------
                                      STRV_MAKE_CONST(filename), NETWORK_DIRS, dropin_dirname, /* root = */ NULL,
  ------------------
  |  |    9|  13.0k|#define NETWORK_DIRS ((const char* const*) CONF_PATHS_STRV("systemd/network"))
  |  |  ------------------
  |  |  |  |   52|  13.0k|        STRV_MAKE(CONF_PATHS(n))
  |  |  |  |  ------------------
  |  |  |  |  |  |  154|  13.0k|#define STRV_MAKE(...) ((char**) ((const char*[]) { __VA_ARGS__, NULL }))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1035|  13.0k|                        NETDEV_COMMON_SECTIONS NETDEV_OTHER_SECTIONS,
  ------------------
  |  |   13|  13.0k|#define NETDEV_COMMON_SECTIONS "Match\0NetDev\0"
  ------------------
                                      NETDEV_COMMON_SECTIONS NETDEV_OTHER_SECTIONS,
  ------------------
  |  |   16|  13.0k|        "-BareUDP\0"                              \
  |  |   17|  13.0k|        "-BatmanAdvanced\0"                       \
  |  |   18|  13.0k|        "-Bond\0"                                 \
  |  |   19|  13.0k|        "-Bridge\0"                               \
  |  |   20|  13.0k|        "-FooOverUDP\0"                           \
  |  |   21|  13.0k|        "-GENEVE\0"                               \
  |  |   22|  13.0k|        "-HSR\0"                                  \
  |  |   23|  13.0k|        "-IPoIB\0"                                \
  |  |   24|  13.0k|        "-IPVLAN\0"                               \
  |  |   25|  13.0k|        "-IPVTAP\0"                               \
  |  |   26|  13.0k|        "-L2TP\0"                                 \
  |  |   27|  13.0k|        "-L2TPSession\0"                          \
  |  |   28|  13.0k|        "-MACsec\0"                               \
  |  |   29|  13.0k|        "-MACsecReceiveAssociation\0"             \
  |  |   30|  13.0k|        "-MACsecReceiveChannel\0"                 \
  |  |   31|  13.0k|        "-MACsecTransmitAssociation\0"            \
  |  |   32|  13.0k|        "-MACVLAN\0"                              \
  |  |   33|  13.0k|        "-MACVTAP\0"                              \
  |  |   34|  13.0k|        "-Peer\0"                                 \
  |  |   35|  13.0k|        "-Tap\0"                                  \
  |  |   36|  13.0k|        "-Tun\0"                                  \
  |  |   37|  13.0k|        "-Tunnel\0"                               \
  |  |   38|  13.0k|        "-VLAN\0"                                 \
  |  |   39|  13.0k|        "-VRF\0"                                  \
  |  |   40|  13.0k|        "-VXCAN\0"                                \
  |  |   41|  13.0k|        "-VXLAN\0"                                \
  |  |   42|  13.0k|        "-WLAN\0"                                 \
  |  |   43|  13.0k|        "-WireGuard\0"                            \
  |  |   44|  13.0k|        "-WireGuardPeer\0"                        \
  |  |   45|  13.0k|        "-Xfrm\0"
  ------------------
 1036|  13.0k|                        config_item_perf_lookup, network_netdev_gperf_lookup,
 1037|  13.0k|                        CONFIG_PARSE_WARN,
 1038|  13.0k|                        netdev_raw,
 1039|  13.0k|                        NULL,
 1040|  13.0k|                        NULL);
 1041|  13.0k|        if (r < 0)
  ------------------
  |  Branch (1041:13): [True: 277, False: 12.8k]
  ------------------
 1042|    277|                return r; /* config_parse_many() logs internally. */
 1043|       |
 1044|       |        /* skip out early if configuration does not match the environment */
 1045|  12.8k|        if (!condition_test_list(netdev_raw->conditions, environ, NULL, NULL, NULL))
  ------------------
  |  Branch (1045:13): [True: 1.06k, False: 11.7k]
  ------------------
 1046|  1.06k|                return log_debug_errno(SYNTHETIC_ERRNO(ESTALE), "%s: Conditions in the file do not match the system environment, skipping.", filename);
  ------------------
  |  |  228|  1.06k|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|  1.06k|        ({                                                              \
  |  |  |  |  205|  1.06k|                int _error = (error);                                   \
  |  |  |  |  206|  1.06k|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|  1.06k|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  1.06k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  1.06k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  1.06k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  1.06k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.06k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  1.06k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  1.06k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|  1.06k|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|  1.06k|        ({                                                              \
  |  |  |  |  |  |  190|  1.06k|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|  1.06k|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 1.06k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  1.06k|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|  1.06k|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|  2.13k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|  1.06k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|  1.06k|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 1.06k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.06k|        })
  |  |  |  |  ------------------
  |  |  |  |  208|  1.06k|        })
  |  |  ------------------
  ------------------
 1047|       |
 1048|  11.7k|        if (netdev_raw->kind == _NETDEV_KIND_INVALID)
  ------------------
  |  Branch (1048:13): [True: 1.75k, False: 9.99k]
  ------------------
 1049|  1.75k|                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "NetDev has no Kind= configured in \"%s\", ignoring.", filename);
  ------------------
  |  |  231|  1.75k|#define log_warning_errno(error, ...)   log_full_errno(LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|  1.75k|        ({                                                              \
  |  |  |  |  205|  1.75k|                int _error = (error);                                   \
  |  |  |  |  206|  1.75k|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|  1.75k|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  1.75k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  1.75k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  1.75k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  1.75k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.75k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  1.75k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  1.75k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|  1.75k|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|  1.75k|        ({                                                              \
  |  |  |  |  |  |  190|  1.75k|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|  1.75k|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 1.75k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  1.75k|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|  1.75k|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|  3.51k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|  1.75k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|  1.75k|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 1.75k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.75k|        })
  |  |  |  |  ------------------
  |  |  |  |  208|  1.75k|        })
  |  |  ------------------
  ------------------
 1050|       |
 1051|  9.99k|        if (!netdev_raw->ifname)
  ------------------
  |  Branch (1051:13): [True: 18, False: 9.98k]
  ------------------
 1052|     18|                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "NetDev without Name= configured in \"%s\", ignoring.", filename);
  ------------------
  |  |  231|     18|#define log_warning_errno(error, ...)   log_full_errno(LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|     18|        ({                                                              \
  |  |  |  |  205|     18|                int _error = (error);                                   \
  |  |  |  |  206|     18|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|     18|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|     18|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|     18|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|     18|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|     18|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|     18|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|     18|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|     18|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|     18|        ({                                                              \
  |  |  |  |  |  |  190|     18|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|     18|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 18]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|     18|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|     18|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|     36|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|     18|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|     18|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 18, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     18|        })
  |  |  |  |  ------------------
  |  |  |  |  208|     18|        })
  |  |  ------------------
  ------------------
 1053|       |
 1054|  9.98k|        netdev = malloc0(NETDEV_VTABLE(netdev_raw)->object_size);
  ------------------
  |  |   46|  19.9k|#define malloc0(n) (calloc(1, (n) ?: 1))
  |  |  ------------------
  |  |  |  Branch (46:31): [True: 9.98k, False: 0]
  |  |  |  Branch (46:32): [True: 9.98k, False: 0]
  |  |  ------------------
  ------------------
 1055|  9.98k|        if (!netdev)
  ------------------
  |  Branch (1055:13): [True: 0, False: 0]
  ------------------
 1056|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1057|       |
 1058|      0|        netdev->n_ref = 1;
 1059|      0|        netdev->manager = manager;
 1060|      0|        netdev->kind = netdev_raw->kind;
 1061|      0|        netdev->state = NETDEV_STATE_LOADING; /* we initialize the state here for the first time,
 1062|       |                                                 so that done() will be called on destruction */
 1063|       |
 1064|      0|        if (NETDEV_VTABLE(netdev)->init)
  ------------------
  |  |  203|  9.98k|#define NETDEV_VTABLE(n) ((n)->kind != _NETDEV_KIND_INVALID ? netdev_vtable[(n)->kind] : NULL)
  |  |  ------------------
  |  |  |  Branch (203:27): [True: 9.98k, False: 18.4E]
  |  |  ------------------
  ------------------
  |  Branch (1064:13): [True: 9.72k, False: 18.4E]
  ------------------
 1065|  9.72k|                NETDEV_VTABLE(netdev)->init(netdev);
  ------------------
  |  |  203|  9.72k|#define NETDEV_VTABLE(n) ((n)->kind != _NETDEV_KIND_INVALID ? netdev_vtable[(n)->kind] : NULL)
  |  |  ------------------
  |  |  |  Branch (203:27): [True: 9.72k, False: 0]
  |  |  ------------------
  ------------------
 1066|       |
 1067|      0|        r = config_parse_many(
 1068|      0|                        STRV_MAKE_CONST(filename), NETWORK_DIRS, dropin_dirname, /* root = */ NULL,
  ------------------
  |  |  156|      0|#define STRV_MAKE_CONST(...) ((const char* const*) ((const char*[]) { __VA_ARGS__, NULL }))
  ------------------
                                      STRV_MAKE_CONST(filename), NETWORK_DIRS, dropin_dirname, /* root = */ NULL,
  ------------------
  |  |    9|      0|#define NETWORK_DIRS ((const char* const*) CONF_PATHS_STRV("systemd/network"))
  |  |  ------------------
  |  |  |  |   52|      0|        STRV_MAKE(CONF_PATHS(n))
  |  |  |  |  ------------------
  |  |  |  |  |  |  154|      0|#define STRV_MAKE(...) ((char**) ((const char*[]) { __VA_ARGS__, NULL }))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1069|      0|                        NETDEV_VTABLE(netdev)->sections,
  ------------------
  |  |  203|  9.98k|#define NETDEV_VTABLE(n) ((n)->kind != _NETDEV_KIND_INVALID ? netdev_vtable[(n)->kind] : NULL)
  |  |  ------------------
  |  |  |  Branch (203:27): [True: 9.98k, False: 18.4E]
  |  |  ------------------
  ------------------
 1070|      0|                        config_item_perf_lookup, network_netdev_gperf_lookup,
 1071|      0|                        CONFIG_PARSE_WARN,
 1072|      0|                        netdev,
 1073|      0|                        &netdev->stats_by_path,
 1074|      0|                        &netdev->dropins);
 1075|      0|        if (r < 0)
  ------------------
  |  Branch (1075:13): [True: 3, False: 18.4E]
  ------------------
 1076|      3|                return r; /* config_parse_many() logs internally. */
 1077|       |
 1078|       |        /* verify configuration */
 1079|  18.4E|        if (NETDEV_VTABLE(netdev)->config_verify) {
  ------------------
  |  |  203|  18.4E|#define NETDEV_VTABLE(n) ((n)->kind != _NETDEV_KIND_INVALID ? netdev_vtable[(n)->kind] : NULL)
  |  |  ------------------
  |  |  |  Branch (203:27): [True: 9.97k, False: 18.4E]
  |  |  ------------------
  ------------------
  |  Branch (1079:13): [True: 8.86k, False: 18.4E]
  ------------------
 1080|  8.86k|                r = NETDEV_VTABLE(netdev)->config_verify(netdev, filename);
  ------------------
  |  |  203|  8.86k|#define NETDEV_VTABLE(n) ((n)->kind != _NETDEV_KIND_INVALID ? netdev_vtable[(n)->kind] : NULL)
  |  |  ------------------
  |  |  |  Branch (203:27): [True: 8.86k, False: 0]
  |  |  ------------------
  ------------------
 1081|  8.86k|                if (r < 0)
  ------------------
  |  Branch (1081:21): [True: 4.65k, False: 4.20k]
  ------------------
 1082|  4.65k|                        return r; /* config_verify() logs internally. */
 1083|  8.86k|        }
 1084|       |
 1085|  18.4E|        netdev->filename = strdup(filename);
 1086|  18.4E|        if (!netdev->filename)
  ------------------
  |  Branch (1086:13): [True: 0, False: 18.4E]
  ------------------
 1087|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1088|       |
 1089|  18.4E|        log_syntax(/* unit = */ NULL, LOG_DEBUG, filename, /* config_line = */ 0, /* error = */ 0, "Successfully loaded.");
  ------------------
  |  |  353|  18.4E|        ({                                                              \
  |  |  354|  18.4E|                int _level = (level), _e = (error);                     \
  |  |  355|  18.4E|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 18.4E]
  |  |  ------------------
  |  |  356|  18.4E|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  18.4E|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  18.4E|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  18.4E|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  18.4E|        })
  ------------------
 1090|       |
 1091|  18.4E|        *ret = TAKE_PTR(netdev);
  ------------------
  |  |  388|  18.4E|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  18.4E|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  18.4E|        ({                                                       \
  |  |  |  |  |  |  381|  18.4E|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  18.4E|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  18.4E|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  18.4E|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  18.4E|                _var_;                                           \
  |  |  |  |  |  |  386|  18.4E|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1092|  18.4E|        return 0;
 1093|  18.4E|}
config_parse_netdev_kind:
 1207|  22.7k|                void *userdata) {
 1208|       |
 1209|  22.7k|        NetDevKind k, *kind = ASSERT_PTR(data);
  ------------------
  |  |   81|  22.7k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  22.7k|        ({                                 \
  |  |  |  |   85|  22.7k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  22.7k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  22.7k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  22.7k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  22.7k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  22.7k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  22.7k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 22.7k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  22.7k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  22.7k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  22.7k|                var;                       \
  |  |  |  |   88|  22.7k|        })
  |  |  ------------------
  ------------------
 1210|       |
 1211|  22.7k|        assert(filename);
  ------------------
  |  |   72|  22.7k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  22.7k|        do {                                                            \
  |  |  |  |   59|  22.7k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  22.7k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 22.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  22.7k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  22.7k|        } while (false)
  |  |  ------------------
  ------------------
 1212|  22.7k|        assert(rvalue);
  ------------------
  |  |   72|  22.7k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  22.7k|        do {                                                            \
  |  |  |  |   59|  22.7k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  22.7k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 22.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  22.7k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  22.7k|        } while (false)
  |  |  ------------------
  ------------------
 1213|       |
 1214|  22.7k|        k = netdev_kind_from_string(rvalue);
 1215|  22.7k|        if (k < 0) {
  ------------------
  |  Branch (1215:13): [True: 1.15k, False: 21.5k]
  ------------------
 1216|  1.15k|                log_syntax(unit, LOG_WARNING, filename, line, k, "Failed to parse netdev kind, ignoring assignment: %s", rvalue);
  ------------------
  |  |  353|  1.15k|        ({                                                              \
  |  |  354|  1.15k|                int _level = (level), _e = (error);                     \
  |  |  355|  1.15k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 1.15k]
  |  |  ------------------
  |  |  356|  1.15k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  1.15k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  1.15k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  1.15k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  1.15k|        })
  ------------------
 1217|  1.15k|                return 0;
 1218|  1.15k|        }
 1219|       |
 1220|  21.5k|        if (*kind != _NETDEV_KIND_INVALID && *kind != k) {
  ------------------
  |  Branch (1220:13): [True: 11.5k, False: 10.0k]
  |  Branch (1220:46): [True: 409, False: 11.1k]
  ------------------
 1221|    409|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    409|        ({                                                              \
  |  |  354|    409|                int _level = (level), _e = (error);                     \
  |  |  355|    409|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 409]
  |  |  ------------------
  |  |  356|    409|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    409|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    409|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    409|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    409|        })
  ------------------
 1222|    409|                           "Specified netdev kind is different from the previous value '%s', ignoring assignment: %s",
 1223|    409|                           netdev_kind_to_string(*kind), rvalue);
 1224|    409|                return 0;
 1225|    409|        }
 1226|       |
 1227|  21.1k|        *kind = k;
 1228|       |
 1229|  21.1k|        return 0;
 1230|  21.5k|}
config_parse_netdev_hw_addr:
 1242|  1.62k|                void *userdata) {
 1243|       |
 1244|  1.62k|        struct hw_addr_data *hw_addr = ASSERT_PTR(data);
  ------------------
  |  |   81|  1.62k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  1.62k|        ({                                 \
  |  |  |  |   85|  1.62k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  1.62k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  1.62k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  1.62k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  1.62k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  1.62k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  1.62k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.62k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  1.62k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  1.62k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  1.62k|                var;                       \
  |  |  |  |   88|  1.62k|        })
  |  |  ------------------
  ------------------
 1245|       |
 1246|  1.62k|        assert(rvalue);
  ------------------
  |  |   72|  1.62k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.62k|        do {                                                            \
  |  |  |  |   59|  1.62k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.62k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.62k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.62k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.62k|        } while (false)
  |  |  ------------------
  ------------------
 1247|       |
 1248|  1.62k|        if (streq(rvalue, "none")) {
  ------------------
  |  |   46|  1.62k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 198, False: 1.42k]
  |  |  ------------------
  ------------------
 1249|    198|                *hw_addr = HW_ADDR_NONE;
  ------------------
  |  |   11|    198|#define HW_ADDR_NONE ((struct hw_addr_data) { .length = 1, })
  ------------------
 1250|    198|                return 0;
 1251|    198|        }
 1252|       |
 1253|  1.42k|        return config_parse_hw_addr(unit, filename, line, section, section_line, lvalue, ltype, rvalue, data, userdata);
 1254|  1.62k|}
netdev.c:netdev_detach_impl:
  202|  23.0k|static NetDev* netdev_detach_impl(NetDev *netdev) {
  203|  23.0k|        assert(netdev);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
  204|       |
  205|  23.0k|        if (netdev->state != _NETDEV_STATE_INVALID &&
  ------------------
  |  Branch (205:13): [True: 9.98k, False: 13.0k]
  ------------------
  206|  23.0k|            NETDEV_VTABLE(netdev) &&
  ------------------
  |  |  203|  33.0k|#define NETDEV_VTABLE(n) ((n)->kind != _NETDEV_KIND_INVALID ? netdev_vtable[(n)->kind] : NULL)
  |  |  ------------------
  |  |  |  Branch (203:26): [True: 9.98k, False: 0]
  |  |  |  Branch (203:27): [True: 9.98k, False: 0]
  |  |  ------------------
  ------------------
  207|  23.0k|            NETDEV_VTABLE(netdev)->detach)
  ------------------
  |  |  203|  9.98k|#define NETDEV_VTABLE(n) ((n)->kind != _NETDEV_KIND_INVALID ? netdev_vtable[(n)->kind] : NULL)
  |  |  ------------------
  |  |  |  Branch (203:27): [True: 9.98k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (207:13): [True: 1.03k, False: 8.94k]
  ------------------
  208|  1.03k|                NETDEV_VTABLE(netdev)->detach(netdev);
  ------------------
  |  |  203|  1.03k|#define NETDEV_VTABLE(n) ((n)->kind != _NETDEV_KIND_INVALID ? netdev_vtable[(n)->kind] : NULL)
  |  |  ------------------
  |  |  |  Branch (203:27): [True: 1.03k, False: 0]
  |  |  ------------------
  ------------------
  209|       |
  210|  23.0k|        NetDev *n = netdev_detach_name(netdev, netdev->ifname);
  211|       |
  212|  23.0k|        netdev->manager = NULL;
  213|  23.0k|        return n; /* Return NULL when it is not attached yet, or already detached. */
  214|  23.0k|}
netdev.c:netdev_free:
  222|  23.0k|static NetDev* netdev_free(NetDev *netdev) {
  223|  23.0k|        assert(netdev);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
  224|       |
  225|  23.0k|        netdev_detach_impl(netdev);
  226|       |
  227|       |        /* Invoke the per-kind done() destructor, but only if the state field is initialized. We conditionalize that
  228|       |         * because we parse .netdev files twice: once to determine the kind (with a short, minimal NetDev structure
  229|       |         * allocation, with no room for per-kind fields), and once to read the kind's properties (with a full,
  230|       |         * comprehensive NetDev structure allocation with enough space for whatever the specific kind needs). Now, in
  231|       |         * the first case we shouldn't try to destruct the per-kind NetDev fields on destruction, in the second case we
  232|       |         * should. We use the state field to discern the two cases: it's _NETDEV_STATE_INVALID on the first "raw"
  233|       |         * call. */
  234|  23.0k|        if (netdev->state != _NETDEV_STATE_INVALID &&
  ------------------
  |  Branch (234:13): [True: 9.98k, False: 13.0k]
  ------------------
  235|  23.0k|            NETDEV_VTABLE(netdev) &&
  ------------------
  |  |  203|  33.0k|#define NETDEV_VTABLE(n) ((n)->kind != _NETDEV_KIND_INVALID ? netdev_vtable[(n)->kind] : NULL)
  |  |  ------------------
  |  |  |  Branch (203:26): [True: 9.98k, False: 0]
  |  |  |  Branch (203:27): [True: 9.98k, False: 0]
  |  |  ------------------
  ------------------
  236|  23.0k|            NETDEV_VTABLE(netdev)->done)
  ------------------
  |  |  203|  9.98k|#define NETDEV_VTABLE(n) ((n)->kind != _NETDEV_KIND_INVALID ? netdev_vtable[(n)->kind] : NULL)
  |  |  ------------------
  |  |  |  Branch (203:27): [True: 9.98k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (236:13): [True: 7.61k, False: 2.36k]
  ------------------
  237|  7.61k|                NETDEV_VTABLE(netdev)->done(netdev);
  ------------------
  |  |  203|  7.61k|#define NETDEV_VTABLE(n) ((n)->kind != _NETDEV_KIND_INVALID ? netdev_vtable[(n)->kind] : NULL)
  |  |  ------------------
  |  |  |  Branch (203:27): [True: 7.61k, False: 0]
  |  |  ------------------
  ------------------
  238|       |
  239|  23.0k|        condition_free_list(netdev->conditions);
  240|  23.0k|        free(netdev->filename);
  241|  23.0k|        strv_free(netdev->dropins);
  242|  23.0k|        hashmap_free(netdev->stats_by_path);
  243|  23.0k|        free(netdev->description);
  244|  23.0k|        free(netdev->ifname);
  245|       |
  246|  23.0k|        return mfree(netdev);
  ------------------
  |  |  404|  23.0k|        ({                                      \
  |  |  405|  23.0k|                free(memory);                   \
  |  |  406|  23.0k|                (typeof(memory)) NULL;          \
  |  |  407|  23.0k|        })
  ------------------
  247|  23.0k|}

bareudp.c:BAREUDP:
  207|     80|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|     80|                assert(n);                                              \
  ------------------
  |  |   72|     80|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     80|        do {                                                            \
  |  |  |  |   59|     80|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     80|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 80]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     80|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     80|        } while (false)
  |  |  ------------------
  ------------------
  209|     80|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|     80|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     80|        do {                                                            \
  |  |  |  |   59|     80|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     80|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 80]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     80|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     80|        } while (false)
  |  |  ------------------
  ------------------
  210|     80|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|     80|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     80|        do {                                                            \
  |  |  |  |   59|     80|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     80|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 80]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     80|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     80|        } while (false)
  |  |  ------------------
  ------------------
  211|     80|                                                                        \
  212|     80|                return (MixedCase*) n;                                  \
  213|     80|        }
batadv.c:BATADV:
  207|    138|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|    138|                assert(n);                                              \
  ------------------
  |  |   72|    138|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    138|        do {                                                            \
  |  |  |  |   59|    138|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    138|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 138]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    138|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    138|        } while (false)
  |  |  ------------------
  ------------------
  209|    138|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|    138|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    138|        do {                                                            \
  |  |  |  |   59|    138|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    138|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 138]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    138|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    138|        } while (false)
  |  |  ------------------
  ------------------
  210|    138|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|    138|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    138|        do {                                                            \
  |  |  |  |   59|    138|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    138|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 138]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    138|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    138|        } while (false)
  |  |  ------------------
  ------------------
  211|    138|                                                                        \
  212|    138|                return (MixedCase*) n;                                  \
  213|    138|        }
bond.c:BOND:
  207|  5.97k|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|  5.97k|                assert(n);                                              \
  ------------------
  |  |   72|  5.97k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.97k|        do {                                                            \
  |  |  |  |   59|  5.97k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.97k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.97k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.97k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.97k|        } while (false)
  |  |  ------------------
  ------------------
  209|  5.97k|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|  5.97k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.97k|        do {                                                            \
  |  |  |  |   59|  5.97k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.97k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.97k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.97k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.97k|        } while (false)
  |  |  ------------------
  ------------------
  210|  5.97k|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|  5.97k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.97k|        do {                                                            \
  |  |  |  |   59|  5.97k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.97k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.97k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.97k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.97k|        } while (false)
  |  |  ------------------
  ------------------
  211|  5.97k|                                                                        \
  212|  5.97k|                return (MixedCase*) n;                                  \
  213|  5.97k|        }
bridge.c:BRIDGE:
  207|     68|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|     68|                assert(n);                                              \
  ------------------
  |  |   72|     68|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     68|        do {                                                            \
  |  |  |  |   59|     68|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     68|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 68]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     68|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     68|        } while (false)
  |  |  ------------------
  ------------------
  209|     68|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|     68|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     68|        do {                                                            \
  |  |  |  |   59|     68|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     68|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 68]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     68|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     68|        } while (false)
  |  |  ------------------
  ------------------
  210|     68|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|     68|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     68|        do {                                                            \
  |  |  |  |   59|     68|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     68|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 68]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     68|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     68|        } while (false)
  |  |  ------------------
  ------------------
  211|     68|                                                                        \
  212|     68|                return (MixedCase*) n;                                  \
  213|     68|        }
fou-tunnel.c:FOU:
  207|    556|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|    556|                assert(n);                                              \
  ------------------
  |  |   72|    556|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    556|        do {                                                            \
  |  |  |  |   59|    556|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    556|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 556]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    556|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    556|        } while (false)
  |  |  ------------------
  ------------------
  209|    556|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|    556|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    556|        do {                                                            \
  |  |  |  |   59|    556|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    556|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 556]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    556|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    556|        } while (false)
  |  |  ------------------
  ------------------
  210|    556|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|    556|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    556|        do {                                                            \
  |  |  |  |   59|    556|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    556|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 556]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    556|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    556|        } while (false)
  |  |  ------------------
  ------------------
  211|    556|                                                                        \
  212|    556|                return (MixedCase*) n;                                  \
  213|    556|        }
geneve.c:GENEVE:
  207|    566|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|    566|                assert(n);                                              \
  ------------------
  |  |   72|    566|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    566|        do {                                                            \
  |  |  |  |   59|    566|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    566|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 566]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    566|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    566|        } while (false)
  |  |  ------------------
  ------------------
  209|    566|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|    566|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    566|        do {                                                            \
  |  |  |  |   59|    566|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    566|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 566]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    566|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    566|        } while (false)
  |  |  ------------------
  ------------------
  210|    566|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|    566|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    566|        do {                                                            \
  |  |  |  |   59|    566|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    566|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 566]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    566|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    566|        } while (false)
  |  |  ------------------
  ------------------
  211|    566|                                                                        \
  212|    566|                return (MixedCase*) n;                                  \
  213|    566|        }
hsr.c:HSR:
  207|      3|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|      3|                assert(n);                                              \
  ------------------
  |  |   72|      3|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      3|        do {                                                            \
  |  |  |  |   59|      3|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      3|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      3|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      3|        } while (false)
  |  |  ------------------
  ------------------
  209|      3|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|      3|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      3|        do {                                                            \
  |  |  |  |   59|      3|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      3|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      3|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      3|        } while (false)
  |  |  ------------------
  ------------------
  210|      3|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|      3|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      3|        do {                                                            \
  |  |  |  |   59|      3|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      3|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      3|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      3|        } while (false)
  |  |  ------------------
  ------------------
  211|      3|                                                                        \
  212|      3|                return (MixedCase*) n;                                  \
  213|      3|        }
ipoib.c:IPOIB:
  207|     61|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|     61|                assert(n);                                              \
  ------------------
  |  |   72|     61|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     61|        do {                                                            \
  |  |  |  |   59|     61|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     61|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 61]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     61|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     61|        } while (false)
  |  |  ------------------
  ------------------
  209|     61|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|     61|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     61|        do {                                                            \
  |  |  |  |   59|     61|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     61|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 61]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     61|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     61|        } while (false)
  |  |  ------------------
  ------------------
  210|     61|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|     61|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     61|        do {                                                            \
  |  |  |  |   59|     61|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     61|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 61]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     61|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     61|        } while (false)
  |  |  ------------------
  ------------------
  211|     61|                                                                        \
  212|     61|                return (MixedCase*) n;                                  \
  213|     61|        }
ipvlan.c:IPVTAP:
  207|      1|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|      1|                assert(n);                                              \
  ------------------
  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      1|        } while (false)
  |  |  ------------------
  ------------------
  209|      1|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      1|        } while (false)
  |  |  ------------------
  ------------------
  210|      1|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      1|        } while (false)
  |  |  ------------------
  ------------------
  211|      1|                                                                        \
  212|      1|                return (MixedCase*) n;                                  \
  213|      1|        }
ipvlan.c:IPVLAN:
  207|     34|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|     34|                assert(n);                                              \
  ------------------
  |  |   72|     34|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     34|        do {                                                            \
  |  |  |  |   59|     34|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     34|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 34]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     34|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     34|        } while (false)
  |  |  ------------------
  ------------------
  209|     34|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|     34|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     34|        do {                                                            \
  |  |  |  |   59|     34|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     34|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 34]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     34|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     34|        } while (false)
  |  |  ------------------
  ------------------
  210|     34|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|     34|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     34|        do {                                                            \
  |  |  |  |   59|     34|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     34|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 34]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     34|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     34|        } while (false)
  |  |  ------------------
  ------------------
  211|     34|                                                                        \
  212|     34|                return (MixedCase*) n;                                  \
  213|     34|        }
l2tp-tunnel.c:L2TP:
  207|  3.30k|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|  3.30k|                assert(n);                                              \
  ------------------
  |  |   72|  3.30k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.30k|        do {                                                            \
  |  |  |  |   59|  3.30k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.30k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.30k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.30k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.30k|        } while (false)
  |  |  ------------------
  ------------------
  209|  3.30k|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|  3.30k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.30k|        do {                                                            \
  |  |  |  |   59|  3.30k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.30k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.30k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.30k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.30k|        } while (false)
  |  |  ------------------
  ------------------
  210|  3.30k|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|  3.30k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.30k|        do {                                                            \
  |  |  |  |   59|  3.30k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.30k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.30k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.30k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.30k|        } while (false)
  |  |  ------------------
  ------------------
  211|  3.30k|                                                                        \
  212|  3.30k|                return (MixedCase*) n;                                  \
  213|  3.30k|        }
macsec.c:MACSEC:
  207|  3.82k|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|  3.82k|                assert(n);                                              \
  ------------------
  |  |   72|  3.82k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.82k|        do {                                                            \
  |  |  |  |   59|  3.82k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.82k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.82k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.82k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.82k|        } while (false)
  |  |  ------------------
  ------------------
  209|  3.82k|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|  3.82k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.82k|        do {                                                            \
  |  |  |  |   59|  3.82k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.82k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.82k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.82k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.82k|        } while (false)
  |  |  ------------------
  ------------------
  210|  3.82k|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|  3.82k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.82k|        do {                                                            \
  |  |  |  |   59|  3.82k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.82k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.82k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.82k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.82k|        } while (false)
  |  |  ------------------
  ------------------
  211|  3.82k|                                                                        \
  212|  3.82k|                return (MixedCase*) n;                                  \
  213|  3.82k|        }
macvlan.c:MACVLAN:
  207|     60|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|     60|                assert(n);                                              \
  ------------------
  |  |   72|     60|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     60|        do {                                                            \
  |  |  |  |   59|     60|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     60|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 60]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     60|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     60|        } while (false)
  |  |  ------------------
  ------------------
  209|     60|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|     60|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     60|        do {                                                            \
  |  |  |  |   59|     60|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     60|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 60]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     60|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     60|        } while (false)
  |  |  ------------------
  ------------------
  210|     60|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|     60|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     60|        do {                                                            \
  |  |  |  |   59|     60|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     60|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 60]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     60|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     60|        } while (false)
  |  |  ------------------
  ------------------
  211|     60|                                                                        \
  212|     60|                return (MixedCase*) n;                                  \
  213|     60|        }
macvlan.c:MACVTAP:
  207|    160|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|    160|                assert(n);                                              \
  ------------------
  |  |   72|    160|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    160|        do {                                                            \
  |  |  |  |   59|    160|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    160|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 160]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    160|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    160|        } while (false)
  |  |  ------------------
  ------------------
  209|    160|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|    160|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    160|        do {                                                            \
  |  |  |  |   59|    160|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    160|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 160]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    160|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    160|        } while (false)
  |  |  ------------------
  ------------------
  210|    160|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|    160|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    160|        do {                                                            \
  |  |  |  |   59|    160|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    160|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 160]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    160|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    160|        } while (false)
  |  |  ------------------
  ------------------
  211|    160|                                                                        \
  212|    160|                return (MixedCase*) n;                                  \
  213|    160|        }
tunnel.c:IPIP:
  207|     88|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|     88|                assert(n);                                              \
  ------------------
  |  |   72|     88|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     88|        do {                                                            \
  |  |  |  |   59|     88|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     88|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 88]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     88|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     88|        } while (false)
  |  |  ------------------
  ------------------
  209|     88|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|     88|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     88|        do {                                                            \
  |  |  |  |   59|     88|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     88|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 88]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     88|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     88|        } while (false)
  |  |  ------------------
  ------------------
  210|     88|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|     88|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     88|        do {                                                            \
  |  |  |  |   59|     88|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     88|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 88]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     88|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     88|        } while (false)
  |  |  ------------------
  ------------------
  211|     88|                                                                        \
  212|     88|                return (MixedCase*) n;                                  \
  213|     88|        }
tunnel.c:SIT:
  207|    104|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|    104|                assert(n);                                              \
  ------------------
  |  |   72|    104|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    104|        do {                                                            \
  |  |  |  |   59|    104|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    104|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 104]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    104|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    104|        } while (false)
  |  |  ------------------
  ------------------
  209|    104|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|    104|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    104|        do {                                                            \
  |  |  |  |   59|    104|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    104|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 104]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    104|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    104|        } while (false)
  |  |  ------------------
  ------------------
  210|    104|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|    104|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    104|        do {                                                            \
  |  |  |  |   59|    104|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    104|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 104]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    104|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    104|        } while (false)
  |  |  ------------------
  ------------------
  211|    104|                                                                        \
  212|    104|                return (MixedCase*) n;                                  \
  213|    104|        }
tunnel.c:GRE:
  207|    588|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|    588|                assert(n);                                              \
  ------------------
  |  |   72|    588|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    588|        do {                                                            \
  |  |  |  |   59|    588|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    588|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 588]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    588|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    588|        } while (false)
  |  |  ------------------
  ------------------
  209|    588|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|    588|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    588|        do {                                                            \
  |  |  |  |   59|    588|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    588|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 588]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    588|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    588|        } while (false)
  |  |  ------------------
  ------------------
  210|    588|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|    588|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    588|        do {                                                            \
  |  |  |  |   59|    588|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    588|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 588]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    588|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    588|        } while (false)
  |  |  ------------------
  ------------------
  211|    588|                                                                        \
  212|    588|                return (MixedCase*) n;                                  \
  213|    588|        }
tunnel.c:GRETAP:
  207|      2|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|      2|                assert(n);                                              \
  ------------------
  |  |   72|      2|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      2|        do {                                                            \
  |  |  |  |   59|      2|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      2|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      2|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      2|        } while (false)
  |  |  ------------------
  ------------------
  209|      2|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|      2|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      2|        do {                                                            \
  |  |  |  |   59|      2|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      2|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      2|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      2|        } while (false)
  |  |  ------------------
  ------------------
  210|      2|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|      2|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      2|        do {                                                            \
  |  |  |  |   59|      2|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      2|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      2|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      2|        } while (false)
  |  |  ------------------
  ------------------
  211|      2|                                                                        \
  212|      2|                return (MixedCase*) n;                                  \
  213|      2|        }
tunnel.c:IP6GRE:
  207|      6|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|      6|                assert(n);                                              \
  ------------------
  |  |   72|      6|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      6|        do {                                                            \
  |  |  |  |   59|      6|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      6|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      6|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      6|        } while (false)
  |  |  ------------------
  ------------------
  209|      6|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|      6|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      6|        do {                                                            \
  |  |  |  |   59|      6|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      6|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      6|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      6|        } while (false)
  |  |  ------------------
  ------------------
  210|      6|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|      6|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      6|        do {                                                            \
  |  |  |  |   59|      6|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      6|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      6|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      6|        } while (false)
  |  |  ------------------
  ------------------
  211|      6|                                                                        \
  212|      6|                return (MixedCase*) n;                                  \
  213|      6|        }
tunnel.c:IP6GRETAP:
  207|      2|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|      2|                assert(n);                                              \
  ------------------
  |  |   72|      2|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      2|        do {                                                            \
  |  |  |  |   59|      2|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      2|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      2|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      2|        } while (false)
  |  |  ------------------
  ------------------
  209|      2|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|      2|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      2|        do {                                                            \
  |  |  |  |   59|      2|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      2|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      2|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      2|        } while (false)
  |  |  ------------------
  ------------------
  210|      2|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|      2|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      2|        do {                                                            \
  |  |  |  |   59|      2|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      2|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      2|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      2|        } while (false)
  |  |  ------------------
  ------------------
  211|      2|                                                                        \
  212|      2|                return (MixedCase*) n;                                  \
  213|      2|        }
tunnel.c:VTI:
  207|    804|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|    804|                assert(n);                                              \
  ------------------
  |  |   72|    804|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    804|        do {                                                            \
  |  |  |  |   59|    804|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    804|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 804]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    804|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    804|        } while (false)
  |  |  ------------------
  ------------------
  209|    804|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|    804|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    804|        do {                                                            \
  |  |  |  |   59|    804|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    804|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 804]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    804|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    804|        } while (false)
  |  |  ------------------
  ------------------
  210|    804|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|    804|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    804|        do {                                                            \
  |  |  |  |   59|    804|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    804|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 804]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    804|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    804|        } while (false)
  |  |  ------------------
  ------------------
  211|    804|                                                                        \
  212|    804|                return (MixedCase*) n;                                  \
  213|    804|        }
tunnel.c:VTI6:
  207|      2|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|      2|                assert(n);                                              \
  ------------------
  |  |   72|      2|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      2|        do {                                                            \
  |  |  |  |   59|      2|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      2|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      2|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      2|        } while (false)
  |  |  ------------------
  ------------------
  209|      2|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|      2|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      2|        do {                                                            \
  |  |  |  |   59|      2|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      2|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      2|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      2|        } while (false)
  |  |  ------------------
  ------------------
  210|      2|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|      2|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      2|        do {                                                            \
  |  |  |  |   59|      2|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      2|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      2|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      2|        } while (false)
  |  |  ------------------
  ------------------
  211|      2|                                                                        \
  212|      2|                return (MixedCase*) n;                                  \
  213|      2|        }
tunnel.c:IP6TNL:
  207|      6|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|      6|                assert(n);                                              \
  ------------------
  |  |   72|      6|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      6|        do {                                                            \
  |  |  |  |   59|      6|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      6|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      6|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      6|        } while (false)
  |  |  ------------------
  ------------------
  209|      6|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|      6|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      6|        do {                                                            \
  |  |  |  |   59|      6|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      6|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      6|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      6|        } while (false)
  |  |  ------------------
  ------------------
  210|      6|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|      6|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      6|        do {                                                            \
  |  |  |  |   59|      6|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      6|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      6|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      6|        } while (false)
  |  |  ------------------
  ------------------
  211|      6|                                                                        \
  212|      6|                return (MixedCase*) n;                                  \
  213|      6|        }
tunnel.c:ERSPAN:
  207|     88|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|     88|                assert(n);                                              \
  ------------------
  |  |   72|     88|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     88|        do {                                                            \
  |  |  |  |   59|     88|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     88|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 88]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     88|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     88|        } while (false)
  |  |  ------------------
  ------------------
  209|     88|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|     88|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     88|        do {                                                            \
  |  |  |  |   59|     88|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     88|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 88]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     88|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     88|        } while (false)
  |  |  ------------------
  ------------------
  210|     88|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|     88|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     88|        do {                                                            \
  |  |  |  |   59|     88|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     88|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 88]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     88|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     88|        } while (false)
  |  |  ------------------
  ------------------
  211|     88|                                                                        \
  212|     88|                return (MixedCase*) n;                                  \
  213|     88|        }
tuntap.c:TAP:
  207|    468|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|    468|                assert(n);                                              \
  ------------------
  |  |   72|    468|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    468|        do {                                                            \
  |  |  |  |   59|    468|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    468|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 468]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    468|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    468|        } while (false)
  |  |  ------------------
  ------------------
  209|    468|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|    468|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    468|        do {                                                            \
  |  |  |  |   59|    468|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    468|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 468]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    468|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    468|        } while (false)
  |  |  ------------------
  ------------------
  210|    468|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|    468|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    468|        do {                                                            \
  |  |  |  |   59|    468|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    468|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 468]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    468|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    468|        } while (false)
  |  |  ------------------
  ------------------
  211|    468|                                                                        \
  212|    468|                return (MixedCase*) n;                                  \
  213|    468|        }
tuntap.c:TUN:
  207|  2.80k|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|  2.80k|                assert(n);                                              \
  ------------------
  |  |   72|  2.80k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.80k|        do {                                                            \
  |  |  |  |   59|  2.80k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.80k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.80k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.80k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.80k|        } while (false)
  |  |  ------------------
  ------------------
  209|  2.80k|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|  2.80k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.80k|        do {                                                            \
  |  |  |  |   59|  2.80k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.80k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.80k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.80k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.80k|        } while (false)
  |  |  ------------------
  ------------------
  210|  2.80k|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|  2.80k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.80k|        do {                                                            \
  |  |  |  |   59|  2.80k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.80k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.80k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.80k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.80k|        } while (false)
  |  |  ------------------
  ------------------
  211|  2.80k|                                                                        \
  212|  2.80k|                return (MixedCase*) n;                                  \
  213|  2.80k|        }
veth.c:VETH:
  207|    363|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|    363|                assert(n);                                              \
  ------------------
  |  |   72|    363|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    363|        do {                                                            \
  |  |  |  |   59|    363|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    363|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 363]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    363|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    363|        } while (false)
  |  |  ------------------
  ------------------
  209|    363|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|    363|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    363|        do {                                                            \
  |  |  |  |   59|    363|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    363|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 363]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    363|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    363|        } while (false)
  |  |  ------------------
  ------------------
  210|    363|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|    363|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    363|        do {                                                            \
  |  |  |  |   59|    363|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    363|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 363]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    363|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    363|        } while (false)
  |  |  ------------------
  ------------------
  211|    363|                                                                        \
  212|    363|                return (MixedCase*) n;                                  \
  213|    363|        }
vlan.c:VLAN:
  207|  3.55k|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|  3.55k|                assert(n);                                              \
  ------------------
  |  |   72|  3.55k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.55k|        do {                                                            \
  |  |  |  |   59|  3.55k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.55k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.55k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.55k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.55k|        } while (false)
  |  |  ------------------
  ------------------
  209|  3.55k|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|  3.55k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.55k|        do {                                                            \
  |  |  |  |   59|  3.55k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.55k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.55k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.55k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.55k|        } while (false)
  |  |  ------------------
  ------------------
  210|  3.55k|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|  3.55k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.55k|        do {                                                            \
  |  |  |  |   59|  3.55k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.55k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.55k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.55k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.55k|        } while (false)
  |  |  ------------------
  ------------------
  211|  3.55k|                                                                        \
  212|  3.55k|                return (MixedCase*) n;                                  \
  213|  3.55k|        }
vxcan.c:VXCAN:
  207|    255|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|    255|                assert(n);                                              \
  ------------------
  |  |   72|    255|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    255|        do {                                                            \
  |  |  |  |   59|    255|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    255|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 255]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    255|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    255|        } while (false)
  |  |  ------------------
  ------------------
  209|    255|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|    255|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    255|        do {                                                            \
  |  |  |  |   59|    255|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    255|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 255]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    255|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    255|        } while (false)
  |  |  ------------------
  ------------------
  210|    255|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|    255|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    255|        do {                                                            \
  |  |  |  |   59|    255|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    255|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 255]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    255|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    255|        } while (false)
  |  |  ------------------
  ------------------
  211|    255|                                                                        \
  212|    255|                return (MixedCase*) n;                                  \
  213|    255|        }
vxlan.c:VXLAN:
  207|  1.12k|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|  1.12k|                assert(n);                                              \
  ------------------
  |  |   72|  1.12k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.12k|        do {                                                            \
  |  |  |  |   59|  1.12k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.12k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.12k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.12k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.12k|        } while (false)
  |  |  ------------------
  ------------------
  209|  1.12k|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|  1.12k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.12k|        do {                                                            \
  |  |  |  |   59|  1.12k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.12k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.12k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.12k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.12k|        } while (false)
  |  |  ------------------
  ------------------
  210|  1.12k|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|  1.12k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.12k|        do {                                                            \
  |  |  |  |   59|  1.12k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.12k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.12k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.12k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.12k|        } while (false)
  |  |  ------------------
  ------------------
  211|  1.12k|                                                                        \
  212|  1.12k|                return (MixedCase*) n;                                  \
  213|  1.12k|        }
wireguard.c:WIREGUARD:
  207|  45.9k|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|  45.9k|                assert(n);                                              \
  ------------------
  |  |   72|  45.9k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  45.9k|        do {                                                            \
  |  |  |  |   59|  45.9k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  45.9k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 45.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  45.9k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  45.9k|        } while (false)
  |  |  ------------------
  ------------------
  209|  45.9k|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|  45.9k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  45.9k|        do {                                                            \
  |  |  |  |   59|  45.9k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  45.9k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 45.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  45.9k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  45.9k|        } while (false)
  |  |  ------------------
  ------------------
  210|  45.9k|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|  45.9k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  45.9k|        do {                                                            \
  |  |  |  |   59|  45.9k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  45.9k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 45.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  45.9k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  45.9k|        } while (false)
  |  |  ------------------
  ------------------
  211|  45.9k|                                                                        \
  212|  45.9k|                return (MixedCase*) n;                                  \
  213|  45.9k|        }
wlan.c:WLAN:
  207|    872|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|    872|                assert(n);                                              \
  ------------------
  |  |   72|    872|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    872|        do {                                                            \
  |  |  |  |   59|    872|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    872|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 872]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    872|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    872|        } while (false)
  |  |  ------------------
  ------------------
  209|    872|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|    872|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    872|        do {                                                            \
  |  |  |  |   59|    872|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    872|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 872]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    872|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    872|        } while (false)
  |  |  ------------------
  ------------------
  210|    872|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|    872|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    872|        do {                                                            \
  |  |  |  |   59|    872|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    872|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 872]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    872|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    872|        } while (false)
  |  |  ------------------
  ------------------
  211|    872|                                                                        \
  212|    872|                return (MixedCase*) n;                                  \
  213|    872|        }
xfrm.c:XFRM:
  207|     35|        static inline MixedCase* UPPERCASE(NetDev *n) {                 \
  208|     35|                assert(n);                                              \
  ------------------
  |  |   72|     35|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     35|        do {                                                            \
  |  |  |  |   59|     35|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     35|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 35]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     35|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     35|        } while (false)
  |  |  ------------------
  ------------------
  209|     35|                assert(n->kind == NETDEV_KIND_##UPPERCASE);             \
  ------------------
  |  |   72|     35|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     35|        do {                                                            \
  |  |  |  |   59|     35|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     35|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 35]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     35|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     35|        } while (false)
  |  |  ------------------
  ------------------
  210|     35|                assert(n->state < _NETDEV_STATE_MAX);                   \
  ------------------
  |  |   72|     35|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     35|        do {                                                            \
  |  |  |  |   59|     35|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     35|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 35]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     35|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     35|        } while (false)
  |  |  ------------------
  ------------------
  211|     35|                                                                        \
  212|     35|                return (MixedCase*) n;                                  \
  213|     35|        }

nlmon.c:netdev_nlmon_verify:
    7|      2|static int netdev_nlmon_verify(NetDev *netdev, const char *filename) {
    8|      2|        assert(netdev);
  ------------------
  |  |   72|      2|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      2|        do {                                                            \
  |  |  |  |   59|      2|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      2|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      2|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      2|        } while (false)
  |  |  ------------------
  ------------------
    9|      2|        assert(filename);
  ------------------
  |  |   72|      2|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      2|        do {                                                            \
  |  |  |  |   59|      2|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      2|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      2|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      2|        } while (false)
  |  |  ------------------
  ------------------
   10|       |
   11|      2|        if (netdev->hw_addr.length > 0) {
  ------------------
  |  Branch (11:13): [True: 1, False: 1]
  ------------------
   12|      1|                log_netdev_warning(netdev, "%s: MACAddress= is not supported. Ignoring", filename);
  ------------------
  |  |  281|      1|#define log_netdev_warning(netdev, ...) log_netdev_full(netdev, LOG_WARNING,  __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  276|      1|#define log_netdev_full(netdev, level, ...) (void) log_netdev_full_errno_zerook(netdev, level, 0, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      1|        ({                                                              \
  |  |  |  |  |  |  265|      1|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      1|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      1|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      2|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      1|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      1|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      1|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      1|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      1|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      1|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   13|      1|                netdev->hw_addr = HW_ADDR_NULL;
  ------------------
  |  |   50|      1|#define HW_ADDR_NULL ((const struct hw_addr_data){})
  ------------------
   14|      1|        }
   15|       |
   16|      2|        return 0;
   17|      2|}

config_parse_tunnel_local_address:
  742|  2.86k|                void *userdata) {
  743|       |
  744|  2.86k|        union in_addr_union buffer = IN_ADDR_NULL;
  ------------------
  |  |  199|  2.86k|#define IN_ADDR_NULL ((union in_addr_union) { .in6 = {} })
  ------------------
  745|  2.86k|        NetDevLocalAddressType type;
  746|  2.86k|        Tunnel *t = ASSERT_PTR(userdata);
  ------------------
  |  |   81|  2.86k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  2.86k|        ({                                 \
  |  |  |  |   85|  2.86k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  2.86k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  2.86k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  2.86k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  2.86k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  2.86k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  2.86k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.86k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  2.86k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  2.86k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  2.86k|                var;                       \
  |  |  |  |   88|  2.86k|        })
  |  |  ------------------
  ------------------
  747|  2.86k|        int r, f;
  748|       |
  749|  2.86k|        assert(filename);
  ------------------
  |  |   72|  2.86k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.86k|        do {                                                            \
  |  |  |  |   59|  2.86k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.86k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.86k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.86k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.86k|        } while (false)
  |  |  ------------------
  ------------------
  750|  2.86k|        assert(lvalue);
  ------------------
  |  |   72|  2.86k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.86k|        do {                                                            \
  |  |  |  |   59|  2.86k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.86k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.86k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.86k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.86k|        } while (false)
  |  |  ------------------
  ------------------
  751|  2.86k|        assert(rvalue);
  ------------------
  |  |   72|  2.86k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.86k|        do {                                                            \
  |  |  |  |   59|  2.86k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.86k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.86k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.86k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.86k|        } while (false)
  |  |  ------------------
  ------------------
  752|       |
  753|  2.86k|        if (isempty(rvalue) || streq(rvalue, "any"))
  ------------------
  |  |   46|  2.11k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 194, False: 1.91k]
  |  |  ------------------
  ------------------
  |  Branch (753:13): [True: 754, False: 2.11k]
  ------------------
  754|    948|                return unset_local(t);
  755|       |
  756|  1.91k|        type = netdev_local_address_type_from_string(rvalue);
  757|  1.91k|        if (IN_SET(type, NETDEV_LOCAL_ADDRESS_IPV4LL, NETDEV_LOCAL_ADDRESS_DHCP4))
  ------------------
  |  |  361|  1.91k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 226, False: 1.69k]
  |  |  ------------------
  |  |  362|  1.91k|                bool _found = false;                                    \
  |  |  363|  1.91k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  1.91k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  1.91k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  1.91k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  1.91k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  1.91k|                switch (x) {                                            \
  |  |  368|    226|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      5|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      5|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      5|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|    226|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|    226|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 221, False: 1.69k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 5, False: 1.91k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|    226|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|    226|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|    226|                        _found = true;                                  \
  |  |  370|    226|                        break;                                          \
  |  |  371|  1.69k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 1.69k, False: 226]
  |  |  ------------------
  |  |  372|  1.69k|                        ;                                               \
  |  |  373|  1.91k|                }                                                       \
  |  |  374|  1.91k|                _found;                                                 \
  |  |  375|  1.91k|        })
  ------------------
  758|    226|                f = AF_INET;
  759|  1.69k|        else if (IN_SET(type, NETDEV_LOCAL_ADDRESS_IPV6LL, NETDEV_LOCAL_ADDRESS_DHCP6, NETDEV_LOCAL_ADDRESS_SLAAC))
  ------------------
  |  |  361|  1.69k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 211, False: 1.48k]
  |  |  ------------------
  |  |  362|  1.69k|                bool _found = false;                                    \
  |  |  363|  1.69k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  1.69k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  1.69k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  1.69k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  1.69k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  1.69k|                switch (x) {                                            \
  |  |  368|    211|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      3|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      3|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      3|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      8|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|    211|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|    211|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 203, False: 1.48k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 5, False: 1.68k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 3, False: 1.68k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|    211|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|    211|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|    211|                        _found = true;                                  \
  |  |  370|    211|                        break;                                          \
  |  |  371|  1.48k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 1.48k, False: 211]
  |  |  ------------------
  |  |  372|  1.48k|                        ;                                               \
  |  |  373|  1.69k|                }                                                       \
  |  |  374|  1.69k|                _found;                                                 \
  |  |  375|  1.69k|        })
  ------------------
  760|    211|                f = AF_INET6;
  761|  1.48k|        else {
  762|  1.48k|                type = _NETDEV_LOCAL_ADDRESS_TYPE_INVALID;
  763|  1.48k|                r = in_addr_from_string_auto(rvalue, &f, &buffer);
  764|  1.48k|                if (r < 0) {
  ------------------
  |  Branch (764:21): [True: 318, False: 1.16k]
  ------------------
  765|    318|                        log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    318|        ({                                                              \
  |  |  354|    318|                int _level = (level), _e = (error);                     \
  |  |  355|    318|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 318]
  |  |  ------------------
  |  |  356|    318|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    318|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    318|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    318|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    318|        })
  ------------------
  766|    318|                                   "Tunnel address \"%s\" invalid, ignoring assignment: %m", rvalue);
  767|    318|                        return 0;
  768|    318|                }
  769|       |
  770|  1.16k|                if (in_addr_is_null(f, &buffer))
  ------------------
  |  Branch (770:21): [True: 454, False: 708]
  ------------------
  771|    454|                        return unset_local(t);
  772|  1.16k|        }
  773|       |
  774|  1.14k|        if (t->family != AF_UNSPEC && t->family != f) {
  ------------------
  |  Branch (774:13): [True: 849, False: 296]
  |  Branch (774:39): [True: 197, False: 652]
  ------------------
  775|    197|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    197|        ({                                                              \
  |  |  354|    197|                int _level = (level), _e = (error);                     \
  |  |  355|    197|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 197]
  |  |  ------------------
  |  |  356|    197|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    197|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    197|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    197|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    197|        })
  ------------------
  776|    197|                           "Address family does not match the previous assignment, ignoring assignment: %s", rvalue);
  777|    197|                return 0;
  778|    197|        }
  779|       |
  780|    948|        t->family = f;
  781|    948|        t->local = buffer;
  782|    948|        t->local_type = type;
  783|    948|        return 0;
  784|  1.14k|}
config_parse_tunnel_remote_address:
  810|  2.90k|                void *userdata) {
  811|       |
  812|  2.90k|        union in_addr_union buffer;
  813|  2.90k|        Tunnel *t = ASSERT_PTR(userdata);
  ------------------
  |  |   81|  2.90k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  2.90k|        ({                                 \
  |  |  |  |   85|  2.90k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  2.90k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  2.90k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  2.90k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  2.90k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  2.90k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  2.90k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.90k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  2.90k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  2.90k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  2.90k|                var;                       \
  |  |  |  |   88|  2.90k|        })
  |  |  ------------------
  ------------------
  814|  2.90k|        int r, f;
  815|       |
  816|  2.90k|        assert(filename);
  ------------------
  |  |   72|  2.90k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.90k|        do {                                                            \
  |  |  |  |   59|  2.90k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.90k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.90k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.90k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.90k|        } while (false)
  |  |  ------------------
  ------------------
  817|  2.90k|        assert(lvalue);
  ------------------
  |  |   72|  2.90k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.90k|        do {                                                            \
  |  |  |  |   59|  2.90k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.90k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.90k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.90k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.90k|        } while (false)
  |  |  ------------------
  ------------------
  818|  2.90k|        assert(rvalue);
  ------------------
  |  |   72|  2.90k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.90k|        do {                                                            \
  |  |  |  |   59|  2.90k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.90k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.90k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.90k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.90k|        } while (false)
  |  |  ------------------
  ------------------
  819|       |
  820|  2.90k|        if (isempty(rvalue) || streq(rvalue, "any"))
  ------------------
  |  |   46|  1.99k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 194, False: 1.80k]
  |  |  ------------------
  ------------------
  |  Branch (820:13): [True: 903, False: 1.99k]
  ------------------
  821|  1.09k|                return unset_remote(t);
  822|       |
  823|  1.80k|        r = in_addr_from_string_auto(rvalue, &f, &buffer);
  824|  1.80k|        if (r < 0) {
  ------------------
  |  Branch (824:13): [True: 327, False: 1.47k]
  ------------------
  825|    327|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    327|        ({                                                              \
  |  |  354|    327|                int _level = (level), _e = (error);                     \
  |  |  355|    327|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 327]
  |  |  ------------------
  |  |  356|    327|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    327|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    327|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    327|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    327|        })
  ------------------
  826|    327|                           "Tunnel address \"%s\" invalid, ignoring assignment: %m", rvalue);
  827|    327|                return 0;
  828|    327|        }
  829|       |
  830|  1.47k|        if (in_addr_is_null(f, &buffer))
  ------------------
  |  Branch (830:13): [True: 841, False: 637]
  ------------------
  831|    841|                return unset_remote(t);
  832|       |
  833|    637|        if (t->family != AF_UNSPEC && t->family != f) {
  ------------------
  |  Branch (833:13): [True: 407, False: 230]
  |  Branch (833:39): [True: 206, False: 201]
  ------------------
  834|    206|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    206|        ({                                                              \
  |  |  354|    206|                int _level = (level), _e = (error);                     \
  |  |  355|    206|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 206]
  |  |  ------------------
  |  |  356|    206|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    206|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    206|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    206|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    206|        })
  ------------------
  835|    206|                           "Address family does not match the previous assignment, ignoring assignment: %s", rvalue);
  836|    206|                return 0;
  837|    206|        }
  838|       |
  839|    431|        t->family = f;
  840|    431|        t->remote = buffer;
  841|    431|        return 0;
  842|    637|}
config_parse_tunnel_key:
  854|    593|                void *userdata) {
  855|       |
  856|    593|        uint32_t *dest = ASSERT_PTR(data), k;
  ------------------
  |  |   81|    593|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    593|        ({                                 \
  |  |  |  |   85|    593|                typeof(expr) var = (expr); \
  |  |  |  |   86|    593|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    593|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    593|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    593|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    593|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    593|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 593]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    593|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    593|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    593|                var;                       \
  |  |  |  |   88|    593|        })
  |  |  ------------------
  ------------------
  857|    593|        union in_addr_union buffer;
  858|    593|        int r;
  859|       |
  860|    593|        assert(filename);
  ------------------
  |  |   72|    593|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    593|        do {                                                            \
  |  |  |  |   59|    593|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    593|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 593]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    593|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    593|        } while (false)
  |  |  ------------------
  ------------------
  861|    593|        assert(rvalue);
  ------------------
  |  |   72|    593|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    593|        do {                                                            \
  |  |  |  |   59|    593|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    593|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 593]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    593|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    593|        } while (false)
  |  |  ------------------
  ------------------
  862|       |
  863|    593|        r = in_addr_from_string(AF_INET, rvalue, &buffer);
  864|    593|        if (r < 0) {
  ------------------
  |  Branch (864:13): [True: 398, False: 195]
  ------------------
  865|    398|                r = safe_atou32(rvalue, &k);
  866|    398|                if (r < 0) {
  ------------------
  |  Branch (866:21): [True: 203, False: 195]
  ------------------
  867|    203|                        log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    203|        ({                                                              \
  |  |  354|    203|                int _level = (level), _e = (error);                     \
  |  |  355|    203|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 203]
  |  |  ------------------
  |  |  356|    203|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    203|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    203|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    203|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    203|        })
  ------------------
  868|    203|                                   "Failed to parse tunnel key ignoring assignment: %s", rvalue);
  869|    203|                        return 0;
  870|    203|                }
  871|    398|        } else
  872|    195|                k = be32toh(buffer.in.s_addr);
  873|       |
  874|    390|        *dest = k;
  875|    390|        return 0;
  876|    593|}
config_parse_ipv6_flowlabel:
  888|    671|                void *userdata) {
  889|       |
  890|    671|        Tunnel *t = ASSERT_PTR(userdata);
  ------------------
  |  |   81|    671|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    671|        ({                                 \
  |  |  |  |   85|    671|                typeof(expr) var = (expr); \
  |  |  |  |   86|    671|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    671|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    671|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    671|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    671|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    671|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 671]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    671|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    671|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    671|                var;                       \
  |  |  |  |   88|    671|        })
  |  |  ------------------
  ------------------
  891|    671|        uint32_t k;
  892|    671|        int r;
  893|       |
  894|    671|        assert(filename);
  ------------------
  |  |   72|    671|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    671|        do {                                                            \
  |  |  |  |   59|    671|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    671|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 671]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    671|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    671|        } while (false)
  |  |  ------------------
  ------------------
  895|    671|        assert(rvalue);
  ------------------
  |  |   72|    671|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    671|        do {                                                            \
  |  |  |  |   59|    671|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    671|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 671]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    671|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    671|        } while (false)
  |  |  ------------------
  ------------------
  896|       |
  897|    671|        if (streq(rvalue, "inherit")) {
  ------------------
  |  |   46|    671|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 216, False: 455]
  |  |  ------------------
  ------------------
  898|    216|                t->ipv6_flowlabel = IP6_FLOWINFO_FLOWLABEL;
  ------------------
  |  |   23|    216|#define IP6_FLOWINFO_FLOWLABEL  htobe32(0x000FFFFF)
  ------------------
  899|    216|                t->flags |= IP6_TNL_F_USE_ORIG_FLOWLABEL;
  900|    216|                return 0;
  901|    216|        }
  902|       |
  903|    455|        r = config_parse_uint32_bounded(
  904|    455|                        unit, filename, line, section, section_line, lvalue, rvalue,
  905|    455|                        0, 0xFFFFF, true,
  906|    455|                        &k);
  907|    455|        if (r <= 0)
  ------------------
  |  Branch (907:13): [True: 258, False: 197]
  ------------------
  908|    258|                return r;
  909|    197|        t->ipv6_flowlabel = htobe32(k) & IP6_FLOWINFO_FLOWLABEL;
  ------------------
  |  |   23|    197|#define IP6_FLOWINFO_FLOWLABEL  htobe32(0x000FFFFF)
  ------------------
  910|    197|        t->flags &= ~IP6_TNL_F_USE_ORIG_FLOWLABEL;
  911|       |
  912|    197|        return 0;
  913|    455|}
config_parse_encap_limit:
  925|    656|                void *userdata) {
  926|       |
  927|    656|        assert(filename);
  ------------------
  |  |   72|    656|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    656|        do {                                                            \
  |  |  |  |   59|    656|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    656|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 656]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    656|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    656|        } while (false)
  |  |  ------------------
  ------------------
  928|    656|        assert(rvalue);
  ------------------
  |  |   72|    656|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    656|        do {                                                            \
  |  |  |  |   59|    656|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    656|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 656]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    656|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    656|        } while (false)
  |  |  ------------------
  ------------------
  929|       |
  930|    656|        Tunnel *t = ASSERT_PTR(userdata);
  ------------------
  |  |   81|    656|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    656|        ({                                 \
  |  |  |  |   85|    656|                typeof(expr) var = (expr); \
  |  |  |  |   86|    656|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    656|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    656|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    656|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    656|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    656|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 656]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    656|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    656|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    656|                var;                       \
  |  |  |  |   88|    656|        })
  |  |  ------------------
  ------------------
  931|    656|        int r;
  932|       |
  933|    656|        if (streq(rvalue, "none")) {
  ------------------
  |  |   46|    656|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 201, False: 455]
  |  |  ------------------
  ------------------
  934|    201|                t->encap_limit = 0;
  935|    201|                t->flags |= IP6_TNL_F_IGN_ENCAP_LIMIT;
  936|    201|                return 0;
  937|    201|        }
  938|       |
  939|    455|        r = config_parse_uint8_bounded(
  940|    455|                        unit, filename, line, section, section_line, lvalue, rvalue,
  941|    455|                        0, UINT8_MAX, true,
  942|    455|                        &t->encap_limit);
  943|    455|        if (r <= 0)
  ------------------
  |  Branch (943:13): [True: 237, False: 218]
  ------------------
  944|    237|                return r;
  945|    218|        t->flags &= ~IP6_TNL_F_IGN_ENCAP_LIMIT;
  946|       |
  947|    218|        return 0;
  948|    455|}
config_parse_6rd_prefix:
  960|  1.47k|                void *userdata) {
  961|       |
  962|  1.47k|        Tunnel *t = userdata;
  963|  1.47k|        union in_addr_union p;
  964|  1.47k|        uint8_t l;
  965|  1.47k|        int r;
  966|       |
  967|  1.47k|        assert(filename);
  ------------------
  |  |   72|  1.47k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.47k|        do {                                                            \
  |  |  |  |   59|  1.47k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.47k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.47k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.47k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.47k|        } while (false)
  |  |  ------------------
  ------------------
  968|  1.47k|        assert(lvalue);
  ------------------
  |  |   72|  1.47k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.47k|        do {                                                            \
  |  |  |  |   59|  1.47k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.47k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.47k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.47k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.47k|        } while (false)
  |  |  ------------------
  ------------------
  969|  1.47k|        assert(rvalue);
  ------------------
  |  |   72|  1.47k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.47k|        do {                                                            \
  |  |  |  |   59|  1.47k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.47k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.47k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.47k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.47k|        } while (false)
  |  |  ------------------
  ------------------
  970|       |
  971|  1.47k|        r = in_addr_prefix_from_string(rvalue, AF_INET6, &p, &l);
  972|  1.47k|        if (r < 0) {
  ------------------
  |  Branch (972:13): [True: 812, False: 667]
  ------------------
  973|    812|                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse 6rd prefix \"%s\", ignoring: %m", rvalue);
  ------------------
  |  |  353|    812|        ({                                                              \
  |  |  354|    812|                int _level = (level), _e = (error);                     \
  |  |  355|    812|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 812]
  |  |  ------------------
  |  |  356|    812|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    812|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    812|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    812|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    812|        })
  ------------------
  974|    812|                return 0;
  975|    812|        }
  976|    667|        if (l == 0) {
  ------------------
  |  Branch (976:13): [True: 418, False: 249]
  ------------------
  977|    418|                log_syntax(unit, LOG_WARNING, filename, line, 0, "6rd prefix length of \"%s\" must be greater than zero, ignoring", rvalue);
  ------------------
  |  |  353|    418|        ({                                                              \
  |  |  354|    418|                int _level = (level), _e = (error);                     \
  |  |  355|    418|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 418]
  |  |  ------------------
  |  |  356|    418|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    418|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    418|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    418|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    418|        })
  ------------------
  978|    418|                return 0;
  979|    418|        }
  980|       |
  981|    249|        t->sixrd_prefix = p.in6;
  982|    249|        t->sixrd_prefixlen = l;
  983|       |
  984|    249|        return 0;
  985|    667|}
config_parse_erspan_version:
  997|    596|                void *userdata) {
  998|       |
  999|    596|        assert(filename);
  ------------------
  |  |   72|    596|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    596|        do {                                                            \
  |  |  |  |   59|    596|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    596|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 596]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    596|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    596|        } while (false)
  |  |  ------------------
  ------------------
 1000|    596|        assert(lvalue);
  ------------------
  |  |   72|    596|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    596|        do {                                                            \
  |  |  |  |   59|    596|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    596|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 596]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    596|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    596|        } while (false)
  |  |  ------------------
  ------------------
 1001|    596|        assert(rvalue);
  ------------------
  |  |   72|    596|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    596|        do {                                                            \
  |  |  |  |   59|    596|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    596|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 596]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    596|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    596|        } while (false)
  |  |  ------------------
  ------------------
 1002|       |
 1003|    596|        uint8_t *v = ASSERT_PTR(data);
  ------------------
  |  |   81|    596|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    596|        ({                                 \
  |  |  |  |   85|    596|                typeof(expr) var = (expr); \
  |  |  |  |   86|    596|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    596|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    596|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    596|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    596|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    596|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 596]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    596|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    596|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    596|                var;                       \
  |  |  |  |   88|    596|        })
  |  |  ------------------
  ------------------
 1004|       |
 1005|    596|        if (isempty(rvalue)) {
  ------------------
  |  Branch (1005:13): [True: 194, False: 402]
  ------------------
 1006|    194|                *v = 1; /* defaults to 1 */
 1007|    194|                return 0;
 1008|    194|        }
 1009|       |
 1010|    402|        return config_parse_uint8_bounded(
 1011|    402|                        unit, filename, line, section, section_line, lvalue, rvalue,
 1012|    402|                        0, 2, true,
 1013|    402|                        v);
 1014|    596|}
config_parse_erspan_index:
 1026|    665|                void *userdata) {
 1027|       |
 1028|    665|        assert(filename);
  ------------------
  |  |   72|    665|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    665|        do {                                                            \
  |  |  |  |   59|    665|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    665|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 665]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    665|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    665|        } while (false)
  |  |  ------------------
  ------------------
 1029|    665|        assert(lvalue);
  ------------------
  |  |   72|    665|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    665|        do {                                                            \
  |  |  |  |   59|    665|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    665|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 665]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    665|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    665|        } while (false)
  |  |  ------------------
  ------------------
 1030|    665|        assert(rvalue);
  ------------------
  |  |   72|    665|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    665|        do {                                                            \
  |  |  |  |   59|    665|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    665|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 665]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    665|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    665|        } while (false)
  |  |  ------------------
  ------------------
 1031|       |
 1032|    665|        uint32_t *v = ASSERT_PTR(data);
  ------------------
  |  |   81|    665|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    665|        ({                                 \
  |  |  |  |   85|    665|                typeof(expr) var = (expr); \
  |  |  |  |   86|    665|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    665|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    665|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    665|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    665|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    665|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 665]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    665|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    665|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    665|                var;                       \
  |  |  |  |   88|    665|        })
  |  |  ------------------
  ------------------
 1033|       |
 1034|    665|        if (isempty(rvalue)) {
  ------------------
  |  Branch (1034:13): [True: 253, False: 412]
  ------------------
 1035|    253|                *v = 0; /* defaults to 0 */
 1036|    253|                return 0;
 1037|    253|        }
 1038|       |
 1039|    412|        return config_parse_uint32_bounded(
 1040|    412|                        unit, filename, line, section, section_line, lvalue, rvalue,
 1041|    412|                        0, 0x100000 - 1, true,
 1042|    412|                        v);
 1043|    665|}
config_parse_erspan_direction:
 1055|    945|                void *userdata) {
 1056|       |
 1057|    945|        assert(filename);
  ------------------
  |  |   72|    945|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    945|        do {                                                            \
  |  |  |  |   59|    945|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    945|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 945]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    945|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    945|        } while (false)
  |  |  ------------------
  ------------------
 1058|    945|        assert(lvalue);
  ------------------
  |  |   72|    945|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    945|        do {                                                            \
  |  |  |  |   59|    945|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    945|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 945]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    945|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    945|        } while (false)
  |  |  ------------------
  ------------------
 1059|    945|        assert(rvalue);
  ------------------
  |  |   72|    945|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    945|        do {                                                            \
  |  |  |  |   59|    945|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    945|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 945]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    945|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    945|        } while (false)
  |  |  ------------------
  ------------------
 1060|       |
 1061|    945|        uint8_t *v = ASSERT_PTR(data);
  ------------------
  |  |   81|    945|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    945|        ({                                 \
  |  |  |  |   85|    945|                typeof(expr) var = (expr); \
  |  |  |  |   86|    945|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    945|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    945|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    945|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    945|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    945|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 945]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    945|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    945|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    945|                var;                       \
  |  |  |  |   88|    945|        })
  |  |  ------------------
  ------------------
 1062|       |
 1063|    945|        if (isempty(rvalue) || streq(rvalue, "ingress"))
  ------------------
  |  |   46|    747|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 220, False: 527]
  |  |  ------------------
  ------------------
  |  Branch (1063:13): [True: 198, False: 747]
  ------------------
 1064|    418|                *v = 0; /* defaults to ingress */
 1065|    527|        else if (streq(rvalue, "egress"))
  ------------------
  |  |   46|    527|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 228, False: 299]
  |  |  ------------------
  ------------------
 1066|    228|                *v = 1;
 1067|    299|        else
 1068|    299|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    299|        ({                                                              \
  |  |  354|    299|                int _level = (level), _e = (error);                     \
  |  |  355|    299|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 299]
  |  |  ------------------
  |  |  356|    299|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    299|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    299|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    299|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    299|        })
  ------------------
 1069|    945|                           "Invalid erspan direction \"%s\", which must be \"ingress\" or \"egress\", ignoring.", rvalue);
 1070|       |
 1071|    945|        return 0;
 1072|    945|}
config_parse_erspan_hwid:
 1084|    849|                void *userdata) {
 1085|       |
 1086|    849|        assert(filename);
  ------------------
  |  |   72|    849|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    849|        do {                                                            \
  |  |  |  |   59|    849|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    849|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 849]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    849|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    849|        } while (false)
  |  |  ------------------
  ------------------
 1087|    849|        assert(lvalue);
  ------------------
  |  |   72|    849|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    849|        do {                                                            \
  |  |  |  |   59|    849|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    849|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 849]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    849|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    849|        } while (false)
  |  |  ------------------
  ------------------
 1088|    849|        assert(rvalue);
  ------------------
  |  |   72|    849|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    849|        do {                                                            \
  |  |  |  |   59|    849|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    849|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 849]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    849|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    849|        } while (false)
  |  |  ------------------
  ------------------
 1089|       |
 1090|    849|        uint16_t *v = ASSERT_PTR(data);
  ------------------
  |  |   81|    849|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    849|        ({                                 \
  |  |  |  |   85|    849|                typeof(expr) var = (expr); \
  |  |  |  |   86|    849|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    849|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    849|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    849|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    849|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    849|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 849]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    849|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    849|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    849|                var;                       \
  |  |  |  |   88|    849|        })
  |  |  ------------------
  ------------------
 1091|       |
 1092|    849|        if (isempty(rvalue)) {
  ------------------
  |  Branch (1092:13): [True: 319, False: 530]
  ------------------
 1093|    319|                *v = 0; /* defaults to 0 */
 1094|    319|                return 0;
 1095|    319|        }
 1096|       |
 1097|    530|        return config_parse_uint16_bounded(
 1098|    530|                        unit, filename, line, section, section_line, lvalue, rvalue,
 1099|    530|                        0, 63, true,
 1100|    530|                        v);
 1101|    849|}
tunnel.c:unset_local:
  718|  1.40k|static int unset_local(Tunnel *t) {
  719|  1.40k|        assert(t);
  ------------------
  |  |   72|  1.40k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.40k|        do {                                                            \
  |  |  |  |   59|  1.40k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.40k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.40k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.40k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.40k|        } while (false)
  |  |  ------------------
  ------------------
  720|       |
  721|       |        /* Unset the previous assignment. */
  722|  1.40k|        t->local = IN_ADDR_NULL;
  ------------------
  |  |  199|  1.40k|#define IN_ADDR_NULL ((union in_addr_union) { .in6 = {} })
  ------------------
  723|  1.40k|        t->local_type = _NETDEV_LOCAL_ADDRESS_TYPE_INVALID;
  724|       |
  725|       |        /* If the remote address is not specified, also clear the address family. */
  726|  1.40k|        if (!in_addr_is_set(t->family, &t->remote))
  ------------------
  |  Branch (726:13): [True: 785, False: 617]
  ------------------
  727|    785|                t->family = AF_UNSPEC;
  728|       |
  729|  1.40k|        return 0;
  730|  1.40k|}
tunnel.c:unset_remote:
  786|  1.93k|static int unset_remote(Tunnel *t) {
  787|  1.93k|        assert(t);
  ------------------
  |  |   72|  1.93k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.93k|        do {                                                            \
  |  |  |  |   59|  1.93k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.93k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.93k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.93k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.93k|        } while (false)
  |  |  ------------------
  ------------------
  788|       |
  789|       |        /* Unset the previous assignment. */
  790|  1.93k|        t->remote = IN_ADDR_NULL;
  ------------------
  |  |  199|  1.93k|#define IN_ADDR_NULL ((union in_addr_union) { .in6 = {} })
  ------------------
  791|       |
  792|       |        /* If the local address is not specified, also clear the address family. */
  793|  1.93k|        if (t->local_type == _NETDEV_LOCAL_ADDRESS_TYPE_INVALID &&
  ------------------
  |  Branch (793:13): [True: 1.53k, False: 405]
  ------------------
  794|  1.93k|            !in_addr_is_set(t->family, &t->local))
  ------------------
  |  Branch (794:13): [True: 778, False: 755]
  ------------------
  795|    778|                t->family = AF_UNSPEC;
  796|       |
  797|  1.93k|        return 0;
  798|  1.93k|}
tunnel.c:netdev_tunnel_init:
 1103|    845|static void netdev_tunnel_init(NetDev *netdev) {
 1104|    845|        Tunnel *t = ASSERT_PTR(TUNNEL(netdev));
  ------------------
  |  |   81|    845|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    845|        ({                                 \
  |  |  |  |   85|    845|                typeof(expr) var = (expr); \
  |  |  |  |   86|    845|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    845|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    845|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    845|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    845|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    845|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 845]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    845|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    845|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    845|                var;                       \
  |  |  |  |   88|    845|        })
  |  |  ------------------
  ------------------
 1105|       |
 1106|    845|        t->local_type = _NETDEV_LOCAL_ADDRESS_TYPE_INVALID;
 1107|    845|        t->pmtudisc = -1;
 1108|    845|        t->fou_encap_type = NETDEV_FOO_OVER_UDP_ENCAP_DIRECT;
 1109|    845|        t->isatap = -1;
 1110|    845|        t->gre_erspan_sequence = -1;
 1111|    845|        t->encap_limit = IPV6_DEFAULT_TNL_ENCAP_LIMIT;
 1112|    845|        t->ip6tnl_mode = _NETDEV_IP6_TNL_MODE_INVALID;
 1113|    845|        t->ipv6_flowlabel = _NETDEV_IPV6_FLOWLABEL_INVALID;
 1114|    845|        t->allow_localremote = -1;
 1115|    845|        t->erspan_version = 1;
 1116|       |
 1117|    845|        if (IN_SET(netdev->kind, NETDEV_KIND_IP6GRE, NETDEV_KIND_IP6GRETAP, NETDEV_KIND_IP6TNL))
  ------------------
  |  |  361|    845|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 7, False: 838]
  |  |  ------------------
  |  |  362|    845|                bool _found = false;                                    \
  |  |  363|    845|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|    845|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|    845|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|    845|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|    845|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|    845|                switch (x) {                                            \
  |  |  368|      7|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      3|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      3|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      3|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      4|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      7|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      7|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 3, False: 842]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 1, False: 844]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 3, False: 842]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      7|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      7|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      7|                        _found = true;                                  \
  |  |  370|      7|                        break;                                          \
  |  |  371|    838|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 838, False: 7]
  |  |  ------------------
  |  |  372|    838|                        ;                                               \
  |  |  373|    845|                }                                                       \
  |  |  374|    845|                _found;                                                 \
  |  |  375|    845|        })
  ------------------
 1118|      7|                t->ttl = DEFAULT_IPV6_TTL;
  ------------------
  |  |   22|      7|#define DEFAULT_IPV6_TTL   64
  ------------------
 1119|    845|}
tunnel.c:netdev_tunnel_verify:
  650|    845|static int netdev_tunnel_verify(NetDev *netdev, const char *filename) {
  651|    845|        assert(netdev);
  ------------------
  |  |   72|    845|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    845|        do {                                                            \
  |  |  |  |   59|    845|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    845|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 845]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    845|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    845|        } while (false)
  |  |  ------------------
  ------------------
  652|    845|        assert(filename);
  ------------------
  |  |   72|    845|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    845|        do {                                                            \
  |  |  |  |   59|    845|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    845|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 845]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    845|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    845|        } while (false)
  |  |  ------------------
  ------------------
  653|       |
  654|    845|        Tunnel *t = ASSERT_PTR(TUNNEL(netdev));
  ------------------
  |  |   81|    845|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    845|        ({                                 \
  |  |  |  |   85|    845|                typeof(expr) var = (expr); \
  |  |  |  |   86|    845|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    845|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    845|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    845|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    845|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    845|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 845]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    845|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    845|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    845|                var;                       \
  |  |  |  |   88|    845|        })
  |  |  ------------------
  ------------------
  655|       |
  656|    845|        if (netdev->kind == NETDEV_KIND_IP6TNL &&
  ------------------
  |  Branch (656:13): [True: 3, False: 842]
  ------------------
  657|    845|            t->ip6tnl_mode == _NETDEV_IP6_TNL_MODE_INVALID)
  ------------------
  |  Branch (657:13): [True: 1, False: 2]
  ------------------
  658|      1|                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|      1|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      1|        ({                                                              \
  |  |  |  |  271|      1|                int _error = (error);                                   \
  |  |  |  |  272|      1|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      1|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      1|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      1|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      1|        ({                                                              \
  |  |  |  |  |  |  265|      1|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      1|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      1|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      2|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      1|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      1|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      1|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      1|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      1|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      1|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      1|        })
  |  |  ------------------
  ------------------
  659|    844|                                              "ip6tnl without mode configured in %s. Ignoring", filename);
  660|       |
  661|    844|        if (t->external) {
  ------------------
  |  Branch (661:13): [True: 10, False: 834]
  ------------------
  662|     10|                if (IN_SET(netdev->kind, NETDEV_KIND_VTI, NETDEV_KIND_VTI6))
  ------------------
  |  |  361|     10|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 1, False: 9]
  |  |  ------------------
  |  |  362|     10|                bool _found = false;                                    \
  |  |  363|     10|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|     10|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|     10|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|     10|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|     10|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|     10|                switch (x) {                                            \
  |  |  368|      1|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      1|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      1|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      1|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|      1|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|      1|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 10]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 1, False: 9]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      1|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      1|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      1|                        _found = true;                                  \
  |  |  370|      1|                        break;                                          \
  |  |  371|      9|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 9, False: 1]
  |  |  ------------------
  |  |  372|      9|                        ;                                               \
  |  |  373|     10|                }                                                       \
  |  |  374|     10|                _found;                                                 \
  |  |  375|     10|        })
  ------------------
  663|     10|                        log_netdev_debug(netdev, "vti/vti6 tunnel do not support external mode, ignoring.");
  ------------------
  |  |  278|      1|#define log_netdev_debug(netdev, ...)   log_netdev_full(netdev, LOG_DEBUG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  276|      1|#define log_netdev_full(netdev, level, ...) (void) log_netdev_full_errno_zerook(netdev, level, 0, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      1|        ({                                                              \
  |  |  |  |  |  |  265|      1|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      1|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      1|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      2|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      1|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      1|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      1|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      1|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      1|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      1|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  664|      9|                else {
  665|       |                        /* tunnel with external mode does not require underlying interface. */
  666|      9|                        t->independent = true;
  667|       |
  668|       |                        /* tunnel with external mode does not require any settings checked below. */
  669|      9|                        return 0;
  670|      9|                }
  671|     10|        }
  672|       |
  673|    835|        if (IN_SET(netdev->kind, NETDEV_KIND_VTI, NETDEV_KIND_IPIP, NETDEV_KIND_SIT, NETDEV_KIND_GRE, NETDEV_KIND_GRETAP, NETDEV_KIND_ERSPAN)) {
  ------------------
  |  |  361|    835|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 828, False: 7]
  |  |  ------------------
  |  |  362|    835|                bool _found = false;                                    \
  |  |  363|    835|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|    835|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|    835|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|    835|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|    835|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|    835|                switch (x) {                                            \
  |  |  368|    828|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|    402|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|    402|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|    402|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  338|    446|#define  CASE_F_6(X, ...) case X:  CASE_F_5( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  337|    496|#define  CASE_F_5(X, ...) case X:  CASE_F_4( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  336|    787|#define  CASE_F_4(X, ...) case X:  CASE_F_3( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  335|    788|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  334|    828|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|    828|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 40, False: 795]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 1, False: 834]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 291, False: 544]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (336:27): [True: 50, False: 785]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (337:27): [True: 44, False: 791]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (338:27): [True: 402, False: 433]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|    828|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|    828|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|    828|                        _found = true;                                  \
  |  |  370|    828|                        break;                                          \
  |  |  371|  2.91k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 7, False: 828]
  |  |  ------------------
  |  |  372|      7|                        ;                                               \
  |  |  373|    835|                }                                                       \
  |  |  374|    835|                _found;                                                 \
  |  |  375|    835|        })
  ------------------
  674|    828|                if (!IN_SET(t->family, AF_UNSPEC, AF_INET))
  ------------------
  |  |  361|    828|        ({                                                              \
  |  |  362|    828|                bool _found = false;                                    \
  |  |  363|    828|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|    828|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|    828|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|    828|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|    828|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|    828|                switch (x) {                                            \
  |  |  368|    723|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|    678|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|    678|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|    678|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|    723|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|    723|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 45, False: 783]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 678, False: 150]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|    723|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|    723|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|    723|                        _found = true;                                  \
  |  |  370|    723|                        break;                                          \
  |  |  371|    678|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 105, False: 723]
  |  |  ------------------
  |  |  372|    105|                        ;                                               \
  |  |  373|    828|                }                                                       \
  |  |  374|    828|                _found;                                                 \
  |  |  375|    828|        })
  ------------------
  |  Branch (674:21): [True: 105, False: 723]
  ------------------
  675|    105|                        return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|    105|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|    105|        ({                                                              \
  |  |  |  |  271|    105|                int _error = (error);                                   \
  |  |  |  |  272|    105|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    105|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    105|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    105|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    105|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    105|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 105]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    105|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    105|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|    105|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    105|        ({                                                              \
  |  |  |  |  |  |  265|    105|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|    105|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|    105|        ({                                                              \
  |  |  |  |  |  |  |  |    8|    210|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 105, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    105|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|    105|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|    105|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 105, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|    105|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|    105|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|    105|        })
  |  |  |  |  ------------------
  |  |  |  |  274|    105|        })
  |  |  ------------------
  ------------------
  676|    723|                                                      "%s tunnel without a local/remote IPv4 address configured in %s, ignoring.",
  677|    723|                                                      netdev_kind_to_string(netdev->kind), filename);
  678|       |
  679|    723|                t->family = AF_INET; /* For netlink_message_append_in_addr_union(). */
  680|    723|        }
  681|       |
  682|    730|        if (IN_SET(netdev->kind, NETDEV_KIND_VTI6, NETDEV_KIND_IP6TNL, NETDEV_KIND_IP6GRE, NETDEV_KIND_IP6GRETAP)) {
  ------------------
  |  |  361|    730|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 7, False: 723]
  |  |  ------------------
  |  |  362|    730|                bool _found = false;                                    \
  |  |  363|    730|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|    730|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|    730|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|    730|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|    730|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|    730|                switch (x) {                                            \
  |  |  368|      7|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      1|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      1|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      1|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  336|      3|#define  CASE_F_4(X, ...) case X:  CASE_F_3( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  335|      6|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  334|      7|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      7|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 1, False: 729]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 3, False: 727]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 2, False: 728]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (336:27): [True: 1, False: 729]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      7|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      7|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      7|                        _found = true;                                  \
  |  |  370|      7|                        break;                                          \
  |  |  371|    723|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 723, False: 7]
  |  |  ------------------
  |  |  372|    723|                        ;                                               \
  |  |  373|    730|                }                                                       \
  |  |  374|    730|                _found;                                                 \
  |  |  375|    730|        })
  ------------------
  683|      7|                if (!IN_SET(t->family, AF_UNSPEC, AF_INET6))
  ------------------
  |  |  361|      7|        ({                                                              \
  |  |  362|      7|                bool _found = false;                                    \
  |  |  363|      7|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      7|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      7|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      7|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      7|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      7|                switch (x) {                                            \
  |  |  368|      6|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      5|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      5|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      5|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|      6|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|      6|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 1, False: 6]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 5, False: 2]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      6|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      6|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      6|                        _found = true;                                  \
  |  |  370|      6|                        break;                                          \
  |  |  371|      5|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 1, False: 6]
  |  |  ------------------
  |  |  372|      1|                        ;                                               \
  |  |  373|      7|                }                                                       \
  |  |  374|      7|                _found;                                                 \
  |  |  375|      7|        })
  ------------------
  |  Branch (683:21): [True: 1, False: 6]
  ------------------
  684|      1|                        return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|      1|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      1|        ({                                                              \
  |  |  |  |  271|      1|                int _error = (error);                                   \
  |  |  |  |  272|      1|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      1|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      1|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      1|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      1|        ({                                                              \
  |  |  |  |  |  |  265|      1|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      1|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      1|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      2|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      1|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      1|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      1|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      1|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      1|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      1|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      1|        })
  |  |  ------------------
  ------------------
  685|      6|                                                      "%s tunnel without a local/remote IPv6 address configured in %s, ignoring,",
  686|      6|                                                      netdev_kind_to_string(netdev->kind), filename);
  687|      6|                t->family = AF_INET6; /* For netlink_message_append_in_addr_union(). */
  688|      6|        }
  689|       |
  690|    729|        if (t->fou_tunnel && t->fou_destination_port <= 0)
  ------------------
  |  Branch (690:13): [True: 1, False: 728]
  |  Branch (690:30): [True: 1, False: 0]
  ------------------
  691|      1|                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|      1|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      1|        ({                                                              \
  |  |  |  |  271|      1|                int _error = (error);                                   \
  |  |  |  |  272|      1|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      1|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      1|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      1|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      1|        ({                                                              \
  |  |  |  |  |  |  265|      1|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      1|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      1|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      2|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      1|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      1|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      1|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      1|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      1|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      1|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      1|        })
  |  |  ------------------
  ------------------
  692|    728|                                              "FooOverUDP missing port configured in %s. Ignoring", filename);
  693|       |
  694|    728|        if (t->assign_to_loopback)
  ------------------
  |  Branch (694:13): [True: 0, False: 728]
  ------------------
  695|      0|                t->independent = true;
  696|       |
  697|    728|        if (t->independent && t->local_type >= 0)
  ------------------
  |  Branch (697:13): [True: 3, False: 725]
  |  Branch (697:31): [True: 2, False: 1]
  ------------------
  698|      2|                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|      2|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      2|        ({                                                              \
  |  |  |  |  271|      2|                int _error = (error);                                   \
  |  |  |  |  272|      2|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      2|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      2|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      2|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      2|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      2|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      2|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      2|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      2|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      2|        ({                                                              \
  |  |  |  |  |  |  265|      2|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      2|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      2|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      4|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      2|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      2|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      2|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      2|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      2|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      2|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      2|        })
  |  |  ------------------
  ------------------
  699|    726|                                              "The local address cannot be '%s' when Independent= or AssignToLoopback= is enabled, ignoring.",
  700|    726|                                              strna(netdev_local_address_type_to_string(t->local_type)));
  701|       |
  702|    726|        if (t->pmtudisc > 0 && t->ignore_df)
  ------------------
  |  Branch (702:13): [True: 0, False: 726]
  |  Branch (702:32): [True: 0, False: 0]
  ------------------
  703|      0|                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|      0|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      0|        ({                                                              \
  |  |  |  |  271|      0|                int _error = (error);                                   \
  |  |  |  |  272|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      0|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|        ({                                                              \
  |  |  |  |  |  |  265|      0|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      0|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      0|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      0|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      0|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      0|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      0|        })
  |  |  ------------------
  ------------------
  704|    726|                                              "IgnoreDontFragment= cannot be enabled when DiscoverPathMTU= is enabled");
  705|    726|        if (t->pmtudisc < 0)
  ------------------
  |  Branch (705:13): [True: 726, False: 0]
  ------------------
  706|    726|                t->pmtudisc = !t->ignore_df;
  707|    726|        return 0;
  708|    726|}

tunnel.c:TUNNEL:
   82|  1.69k|static inline Tunnel* TUNNEL(NetDev *netdev) {
   83|  1.69k|        assert(netdev);
  ------------------
  |  |   72|  1.69k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.69k|        do {                                                            \
  |  |  |  |   59|  1.69k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.69k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.69k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.69k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.69k|        } while (false)
  |  |  ------------------
  ------------------
   84|       |
   85|  1.69k|        switch (netdev->kind) {
   86|     88|        case NETDEV_KIND_IPIP:
  ------------------
  |  Branch (86:9): [True: 88, False: 1.60k]
  ------------------
   87|     88|                return IPIP(netdev);
   88|    104|        case NETDEV_KIND_SIT:
  ------------------
  |  Branch (88:9): [True: 104, False: 1.58k]
  ------------------
   89|    104|                return SIT(netdev);
   90|    588|        case NETDEV_KIND_GRE:
  ------------------
  |  Branch (90:9): [True: 588, False: 1.10k]
  ------------------
   91|    588|                return GRE(netdev);
   92|      2|        case NETDEV_KIND_GRETAP:
  ------------------
  |  Branch (92:9): [True: 2, False: 1.68k]
  ------------------
   93|      2|                return GRETAP(netdev);
   94|      6|        case NETDEV_KIND_IP6GRE:
  ------------------
  |  Branch (94:9): [True: 6, False: 1.68k]
  ------------------
   95|      6|                return IP6GRE(netdev);
   96|      2|        case NETDEV_KIND_IP6GRETAP:
  ------------------
  |  Branch (96:9): [True: 2, False: 1.68k]
  ------------------
   97|      2|                return IP6GRETAP(netdev);
   98|    804|        case NETDEV_KIND_VTI:
  ------------------
  |  Branch (98:9): [True: 804, False: 886]
  ------------------
   99|    804|                return VTI(netdev);
  100|      2|        case NETDEV_KIND_VTI6:
  ------------------
  |  Branch (100:9): [True: 2, False: 1.68k]
  ------------------
  101|      2|                return VTI6(netdev);
  102|      6|        case NETDEV_KIND_IP6TNL:
  ------------------
  |  Branch (102:9): [True: 6, False: 1.68k]
  ------------------
  103|      6|                return IP6TNL(netdev);
  104|     88|        case NETDEV_KIND_ERSPAN:
  ------------------
  |  Branch (104:9): [True: 88, False: 1.60k]
  ------------------
  105|     88|                return ERSPAN(netdev);
  106|      0|        default:
  ------------------
  |  Branch (106:9): [True: 0, False: 1.69k]
  ------------------
  107|      0|                return NULL;
  108|  1.69k|        }
  109|  1.69k|}

tuntap.c:TUNTAP:
   23|  3.27k|static TunTap* TUNTAP(NetDev *netdev) {
   24|  3.27k|        assert(netdev);
  ------------------
  |  |   72|  3.27k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.27k|        do {                                                            \
  |  |  |  |   59|  3.27k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.27k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.27k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.27k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.27k|        } while (false)
  |  |  ------------------
  ------------------
   25|       |
   26|  3.27k|        switch (netdev->kind) {
   27|    468|        case NETDEV_KIND_TAP:
  ------------------
  |  Branch (27:9): [True: 468, False: 2.80k]
  ------------------
   28|    468|                return TAP(netdev);
   29|  2.80k|        case NETDEV_KIND_TUN:
  ------------------
  |  Branch (29:9): [True: 2.80k, False: 468]
  ------------------
   30|  2.80k|                return TUN(netdev);
   31|      0|        default:
  ------------------
  |  Branch (31:9): [True: 0, False: 3.27k]
  ------------------
   32|      0|                return NULL;
   33|  3.27k|        }
   34|  3.27k|}
tuntap.c:tuntap_init:
  211|  1.09k|static void tuntap_init(NetDev *netdev) {
  212|  1.09k|        TunTap *t = TUNTAP(netdev);
  213|       |
  214|  1.09k|        t->uid = UID_INVALID;
  ------------------
  |  |   72|  1.09k|#define UID_INVALID ((uid_t) -1)
  ------------------
  215|  1.09k|        t->gid = GID_INVALID;
  ------------------
  |  |   73|  1.09k|#define GID_INVALID ((gid_t) -1)
  ------------------
  216|  1.09k|}
tuntap.c:tuntap_done:
  204|  1.09k|static void tuntap_done(NetDev *netdev) {
  205|  1.09k|        TunTap *t = TUNTAP(netdev);
  206|       |
  207|  1.09k|        t->user_name = mfree(t->user_name);
  ------------------
  |  |  404|  1.09k|        ({                                      \
  |  |  405|  1.09k|                free(memory);                   \
  |  |  406|  1.09k|                (typeof(memory)) NULL;          \
  |  |  407|  1.09k|        })
  ------------------
  208|  1.09k|        t->group_name = mfree(t->group_name);
  ------------------
  |  |  404|  1.09k|        ({                                      \
  |  |  405|  1.09k|                free(memory);                   \
  |  |  406|  1.09k|                (typeof(memory)) NULL;          \
  |  |  407|  1.09k|        })
  ------------------
  209|  1.09k|}
tuntap.c:tuntap_verify:
  218|  1.09k|static int tuntap_verify(NetDev *netdev, const char *filename) {
  219|  1.09k|        TunTap *t = TUNTAP(netdev);
  220|  1.09k|        int r;
  221|       |
  222|  1.09k|        assert(netdev);
  ------------------
  |  |   72|  1.09k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.09k|        do {                                                            \
  |  |  |  |   59|  1.09k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.09k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.09k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.09k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.09k|        } while (false)
  |  |  ------------------
  ------------------
  223|       |
  224|  1.09k|        if (netdev->mtu != 0)
  ------------------
  |  Branch (224:13): [True: 48, False: 1.04k]
  ------------------
  225|  1.09k|                log_netdev_warning(netdev,
  ------------------
  |  |  281|     48|#define log_netdev_warning(netdev, ...) log_netdev_full(netdev, LOG_WARNING,  __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  276|     48|#define log_netdev_full(netdev, level, ...) (void) log_netdev_full_errno_zerook(netdev, level, 0, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|     48|        ({                                                              \
  |  |  |  |  |  |  265|     48|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|     48|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|     48|        ({                                                              \
  |  |  |  |  |  |  |  |    8|     96|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 48, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|     48|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|     48|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|     48|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 48, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|     48|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|     48|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|     48|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  226|  1.09k|                                   "MTUBytes= configured for %s device in %s will be ignored.\n"
  227|  1.09k|                                   "Please set it in the corresponding .network file.",
  228|  1.09k|                                   netdev_kind_to_string(netdev->kind), filename);
  229|       |
  230|  1.09k|        if (netdev->hw_addr.length > 0)
  ------------------
  |  Branch (230:13): [True: 8, False: 1.08k]
  ------------------
  231|  1.09k|                log_netdev_warning(netdev,
  ------------------
  |  |  281|      8|#define log_netdev_warning(netdev, ...) log_netdev_full(netdev, LOG_WARNING,  __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  276|      8|#define log_netdev_full(netdev, level, ...) (void) log_netdev_full_errno_zerook(netdev, level, 0, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      8|        ({                                                              \
  |  |  |  |  |  |  265|      8|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      8|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      8|        ({                                                              \
  |  |  |  |  |  |  |  |    8|     16|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 8, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      8|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      8|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      8|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 8, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      8|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      8|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      8|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  232|  1.09k|                                   "MACAddress= configured for %s device in %s will be ignored.\n"
  233|  1.09k|                                   "Please set it in the corresponding .network file.",
  234|  1.09k|                                   netdev_kind_to_string(netdev->kind), filename);
  235|       |
  236|  1.09k|        if (t->user_name) {
  ------------------
  |  Branch (236:13): [True: 433, False: 658]
  ------------------
  237|    433|                _cleanup_(user_record_unrefp) UserRecord *ur = NULL;
  ------------------
  |  |   78|    433|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  238|       |
  239|    433|                r = userdb_by_name(t->user_name, &USERDB_MATCH_ROOT_AND_SYSTEM,
  ------------------
  |  |  529|    433|        (const UserDBMatch) {                                   \
  |  |  530|    433|                .disposition_mask =                             \
  |  |  531|    433|                        INDEXES_TO_MASK(uint64_t, USER_INTRINSIC, USER_SYSTEM), \
  |  |  ------------------
  |  |  |  |   26|    433|        UNIQ_INDEXES_TO_MASK(type, UNIQ, ##__VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   28|    433|        ({                                                              \
  |  |  |  |  |  |   29|    433|                typeof(type) UNIQ_T(_mask, uniq) = (type)0;             \
  |  |  |  |  |  |   30|    433|                int UNIQ_T(_i, uniq);                                   \
  |  |  |  |  |  |   31|    433|                FOREACH_ARGUMENT(UNIQ_T(_i, uniq), ##__VA_ARGS__)       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  204|    433|        _FOREACH_ARGUMENT(entry, UNIQ_T(_entries_, UNIQ), UNIQ_T(_current_, UNIQ), UNIQ_T(_va_sentinel_, UNIQ), ##__VA_ARGS__)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  206|    433|        for (typeof(entry) _va_sentinel_[1] = {}, _entries_[] = { __VA_ARGS__ __VA_OPT__(,) _va_sentinel_[0] }, *_current_ = _entries_; \
  |  |  |  |  |  |  |  |  |  |  207|  1.29k|             ((long)(_current_ - _entries_) < (long)(ELEMENTSOF(_entries_) - 1)) && ({ entry = *_current_; true; }); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  134|  1.29k|        (__builtin_choose_expr(                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  135|  1.29k|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  |  |  |  |  |  |  |  |  |  |  136|  1.29k|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  |  |  |  |  |  |  |  |  |  |  137|  1.29k|                VOID_0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  128|  1.29k|#  define VOID_0 ((void)0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (207:14): [True: 866, False: 433]
  |  |  |  |  |  |  |  |  |  |  |  Branch (207:85): [True: 866, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  208|    866|             _current_++)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   32|    866|                        UNIQ_T(_mask, uniq) |= INDEX_TO_MASK(type, UNIQ_T(_i, uniq)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  144|    866|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|    866|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  139|    866|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                                       UNIQ_T(_mask, uniq) |= INDEX_TO_MASK(type, UNIQ_T(_i, uniq)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   15|    866|        ({                                                              \
  |  |  |  |  |  |  |  |   16|    866|                assert_cc(sizeof(type) <= sizeof(unsigned long long));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  142|    866|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   17|    866|                assert_cc(__builtin_choose_expr(__builtin_constant_p(i), i, 0) < (int)(sizeof(type) * 8)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  142|    866|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   18|    866|                __builtin_choose_expr(__builtin_constant_p(i),          \
  |  |  |  |  |  |  |  |   19|    866|                                      ((type)1) << (i),                 \
  |  |  |  |  |  |  |  |   20|    866|                                      _INDEX_TO_MASK(type, i, UNIQ));   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |    8|    866|        ({                                                              \
  |  |  |  |  |  |  |  |  |  |    9|    866|                int UNIQ_T(_i, uniq) = (i);                             \
  |  |  |  |  |  |  |  |  |  |   10|    866|                assert(UNIQ_T(_i, uniq) >= 0);                          \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   72|    866|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   58|    866|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   59|    866|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|    866|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 866]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   60|    866|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   61|    866|        } while (false)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   11|    866|                assert(UNIQ_T(_i, uniq) < (int)sizeof(type) * 8);       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   72|    866|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   58|    866|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   59|    866|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|    866|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 866]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   60|    866|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   61|    866|        } while (false)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   12|    866|                ((type)1) << UNIQ_T(_i, uniq);                          \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  144|    866|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  140|    866|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  139|    866|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   13|    866|        })
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   21|    866|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    433|                UNIQ_T(_mask, uniq);                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  144|    433|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|    433|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  139|    433|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    433|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  532|    433|                .uid_min = 0,                                   \
  |  |  533|    433|                .uid_max = UID_NOBODY - 1,                      \
  |  |  ------------------
  |  |  |  |   75|    433|#define UID_NOBODY ((uid_t) 65534U)
  |  |  ------------------
  |  |  534|    433|        }
  ------------------
  240|    433|                                   USERDB_SUPPRESS_SHADOW | USERDB_PARSE_NUMERIC,
  241|    433|                                   &ur);
  242|    433|                if (r == -ENOEXEC)
  ------------------
  |  Branch (242:21): [True: 42, False: 391]
  ------------------
  243|    433|                        log_netdev_warning_errno(netdev, r, "User %s is not a system user, ignoring.", t->user_name);
  ------------------
  |  |  287|     42|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|     42|        ({                                                              \
  |  |  |  |  271|     42|                int _error = (error);                                   \
  |  |  |  |  272|     42|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|     42|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|     42|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|     42|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|     42|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|     42|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 42]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|     42|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|     42|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|     42|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|     42|        ({                                                              \
  |  |  |  |  |  |  265|     42|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|     42|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|     42|        ({                                                              \
  |  |  |  |  |  |  |  |    8|     84|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 42, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|     42|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|     42|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|     42|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 42, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|     42|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|     42|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|     42|        })
  |  |  |  |  ------------------
  |  |  |  |  274|     42|        })
  |  |  ------------------
  ------------------
  244|    391|                else if (r < 0)
  ------------------
  |  Branch (244:26): [True: 349, False: 42]
  ------------------
  245|    391|                        log_netdev_warning_errno(netdev, r, "Cannot resolve user name %s, ignoring: %m", t->user_name);
  ------------------
  |  |  287|    349|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|    349|        ({                                                              \
  |  |  |  |  271|    349|                int _error = (error);                                   \
  |  |  |  |  272|    349|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    349|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    349|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    349|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    349|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    349|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 349]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    349|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    349|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|    349|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    349|        ({                                                              \
  |  |  |  |  |  |  265|    349|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|    349|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|    349|        ({                                                              \
  |  |  |  |  |  |  |  |    8|    698|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 349, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    349|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|    349|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|    349|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 349, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|    349|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|    349|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|    349|        })
  |  |  |  |  ------------------
  |  |  |  |  274|    349|        })
  |  |  ------------------
  ------------------
  246|     42|                else
  247|     42|                        t->uid = ur->uid;
  248|    433|        }
  249|       |
  250|  1.09k|        if (t->group_name) {
  ------------------
  |  Branch (250:13): [True: 428, False: 663]
  ------------------
  251|    428|                _cleanup_(group_record_unrefp) GroupRecord *gr = NULL;
  ------------------
  |  |   78|    428|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  252|       |
  253|    428|                r = groupdb_by_name(t->group_name, &USERDB_MATCH_ROOT_AND_SYSTEM,
  ------------------
  |  |  529|    428|        (const UserDBMatch) {                                   \
  |  |  530|    428|                .disposition_mask =                             \
  |  |  531|    428|                        INDEXES_TO_MASK(uint64_t, USER_INTRINSIC, USER_SYSTEM), \
  |  |  ------------------
  |  |  |  |   26|    428|        UNIQ_INDEXES_TO_MASK(type, UNIQ, ##__VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   28|    428|        ({                                                              \
  |  |  |  |  |  |   29|    428|                typeof(type) UNIQ_T(_mask, uniq) = (type)0;             \
  |  |  |  |  |  |   30|    428|                int UNIQ_T(_i, uniq);                                   \
  |  |  |  |  |  |   31|    428|                FOREACH_ARGUMENT(UNIQ_T(_i, uniq), ##__VA_ARGS__)       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  204|    428|        _FOREACH_ARGUMENT(entry, UNIQ_T(_entries_, UNIQ), UNIQ_T(_current_, UNIQ), UNIQ_T(_va_sentinel_, UNIQ), ##__VA_ARGS__)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  206|    428|        for (typeof(entry) _va_sentinel_[1] = {}, _entries_[] = { __VA_ARGS__ __VA_OPT__(,) _va_sentinel_[0] }, *_current_ = _entries_; \
  |  |  |  |  |  |  |  |  |  |  207|  1.28k|             ((long)(_current_ - _entries_) < (long)(ELEMENTSOF(_entries_) - 1)) && ({ entry = *_current_; true; }); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  134|  1.28k|        (__builtin_choose_expr(                                         \
  |  |  |  |  |  |  |  |  |  |  |  |  135|  1.28k|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  |  |  |  |  |  |  |  |  |  |  136|  1.28k|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  |  |  |  |  |  |  |  |  |  |  137|  1.28k|                VOID_0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  128|  1.28k|#  define VOID_0 ((void)0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (207:14): [True: 856, False: 428]
  |  |  |  |  |  |  |  |  |  |  |  Branch (207:85): [True: 856, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  208|    856|             _current_++)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   32|    856|                        UNIQ_T(_mask, uniq) |= INDEX_TO_MASK(type, UNIQ_T(_i, uniq)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  144|    856|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|    856|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  139|    856|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                                       UNIQ_T(_mask, uniq) |= INDEX_TO_MASK(type, UNIQ_T(_i, uniq)); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   15|    856|        ({                                                              \
  |  |  |  |  |  |  |  |   16|    856|                assert_cc(sizeof(type) <= sizeof(unsigned long long));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  142|    856|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   17|    856|                assert_cc(__builtin_choose_expr(__builtin_constant_p(i), i, 0) < (int)(sizeof(type) * 8)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  142|    856|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   18|    856|                __builtin_choose_expr(__builtin_constant_p(i),          \
  |  |  |  |  |  |  |  |   19|    856|                                      ((type)1) << (i),                 \
  |  |  |  |  |  |  |  |   20|    856|                                      _INDEX_TO_MASK(type, i, UNIQ));   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |    8|    856|        ({                                                              \
  |  |  |  |  |  |  |  |  |  |    9|    856|                int UNIQ_T(_i, uniq) = (i);                             \
  |  |  |  |  |  |  |  |  |  |   10|    856|                assert(UNIQ_T(_i, uniq) >= 0);                          \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   72|    856|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   58|    856|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   59|    856|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|    856|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 856]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   60|    856|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   61|    856|        } while (false)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   11|    856|                assert(UNIQ_T(_i, uniq) < (int)sizeof(type) * 8);       \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   72|    856|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   58|    856|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   59|    856|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|    856|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 856]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   60|    856|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   61|    856|        } while (false)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   12|    856|                ((type)1) << UNIQ_T(_i, uniq);                          \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  144|    856|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  140|    856|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  139|    856|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   13|    856|        })
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   21|    856|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    428|                UNIQ_T(_mask, uniq);                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  144|    428|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  140|    428|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  139|    428|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    428|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  532|    428|                .uid_min = 0,                                   \
  |  |  533|    428|                .uid_max = UID_NOBODY - 1,                      \
  |  |  ------------------
  |  |  |  |   75|    428|#define UID_NOBODY ((uid_t) 65534U)
  |  |  ------------------
  |  |  534|    428|        }
  ------------------
  254|    428|                                    USERDB_SUPPRESS_SHADOW | USERDB_PARSE_NUMERIC,
  255|    428|                                    &gr);
  256|    428|                if (r == -ENOEXEC)
  ------------------
  |  Branch (256:21): [True: 41, False: 387]
  ------------------
  257|    428|                        log_netdev_warning_errno(netdev, r, "Group %s is not a system group, ignoring.", t->group_name);
  ------------------
  |  |  287|     41|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|     41|        ({                                                              \
  |  |  |  |  271|     41|                int _error = (error);                                   \
  |  |  |  |  272|     41|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|     41|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|     41|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|     41|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|     41|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|     41|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 41]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|     41|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|     41|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|     41|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|     41|        ({                                                              \
  |  |  |  |  |  |  265|     41|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|     41|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|     41|        ({                                                              \
  |  |  |  |  |  |  |  |    8|     82|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 41, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|     41|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|     41|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|     41|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 41, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|     41|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|     41|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|     41|        })
  |  |  |  |  ------------------
  |  |  |  |  274|     41|        })
  |  |  ------------------
  ------------------
  258|    387|                else if (r < 0)
  ------------------
  |  Branch (258:26): [True: 358, False: 29]
  ------------------
  259|    387|                        log_netdev_warning_errno(netdev, r, "Cannot resolve group name %s, ignoring: %m", t->group_name);
  ------------------
  |  |  287|    358|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|    358|        ({                                                              \
  |  |  |  |  271|    358|                int _error = (error);                                   \
  |  |  |  |  272|    358|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    358|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    358|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    358|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    358|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    358|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 358]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    358|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    358|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|    358|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    358|        ({                                                              \
  |  |  |  |  |  |  265|    358|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|    358|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|    358|        ({                                                              \
  |  |  |  |  |  |  |  |    8|    716|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 358, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    358|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|    358|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|    358|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 358, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|    358|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|    358|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|    358|        })
  |  |  |  |  ------------------
  |  |  |  |  274|    358|        })
  |  |  ------------------
  ------------------
  260|     29|                else
  261|     29|                        t->gid = gr->gid;
  262|    428|        }
  263|       |
  264|  1.09k|        return 0;
  265|  1.09k|}

veth.c:veth_done:
  133|    121|static void veth_done(NetDev *netdev) {
  134|    121|        Veth *v = VETH(netdev);
  135|       |
  136|    121|        free(v->ifname_peer);
  137|    121|}
veth.c:netdev_veth_verify:
   54|    121|static int netdev_veth_verify(NetDev *netdev, const char *filename) {
   55|    121|        assert(filename);
  ------------------
  |  |   72|    121|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    121|        do {                                                            \
  |  |  |  |   59|    121|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    121|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 121]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    121|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    121|        } while (false)
  |  |  ------------------
  ------------------
   56|       |
   57|    121|        Veth *v = VETH(netdev);
   58|       |
   59|    121|        if (!v->ifname_peer)
  ------------------
  |  Branch (59:13): [True: 6, False: 115]
  ------------------
   60|      6|                return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  287|      6|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      6|        ({                                                              \
  |  |  |  |  271|      6|                int _error = (error);                                   \
  |  |  |  |  272|      6|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      6|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      6|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      6|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      6|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      6|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 6]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      6|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      6|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      6|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      6|        ({                                                              \
  |  |  |  |  |  |  265|      6|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      6|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      6|        ({                                                              \
  |  |  |  |  |  |  |  |    8|     12|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 6, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      6|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      6|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      6|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 6, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      6|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      6|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      6|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      6|        })
  |  |  ------------------
  ------------------
   61|    115|                                                "Veth NetDev without peer name configured in %s. Ignoring",
   62|    115|                                                filename);
   63|       |
   64|    115|        if (streq(v->ifname_peer, netdev->ifname))
  ------------------
  |  |   46|    115|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 1, False: 114]
  |  |  ------------------
  ------------------
   65|      1|                return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  287|      1|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      1|        ({                                                              \
  |  |  |  |  271|      1|                int _error = (error);                                   \
  |  |  |  |  272|      1|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      1|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      1|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      1|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      1|        ({                                                              \
  |  |  |  |  |  |  265|      1|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      1|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      1|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      2|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      1|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      1|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      1|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      1|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      1|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      1|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      1|        })
  |  |  ------------------
  ------------------
   66|    114|                                                "Veth peer name cannot be the same as the main interface name.");
   67|       |
   68|    114|        return 0;
   69|    115|}
veth.c:netdev_veth_detach:
   78|    121|static void netdev_veth_detach(NetDev *netdev) {
   79|    121|        Veth *v = VETH(netdev);
   80|       |
   81|    121|        netdev_detach_name(netdev, v->ifname_peer);
   82|    121|}

config_parse_vlan_qos_maps:
  130|  8.90k|                void *userdata) {
  131|       |
  132|  8.90k|        Set **s = ASSERT_PTR(data);
  ------------------
  |  |   81|  8.90k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  8.90k|        ({                                 \
  |  |  |  |   85|  8.90k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  8.90k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  8.90k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  8.90k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  8.90k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  8.90k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  8.90k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 8.90k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  8.90k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  8.90k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  8.90k|                var;                       \
  |  |  |  |   88|  8.90k|        })
  |  |  ------------------
  ------------------
  133|  8.90k|        int r;
  134|       |
  135|  8.90k|        assert(filename);
  ------------------
  |  |   72|  8.90k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  8.90k|        do {                                                            \
  |  |  |  |   59|  8.90k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  8.90k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 8.90k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  8.90k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  8.90k|        } while (false)
  |  |  ------------------
  ------------------
  136|  8.90k|        assert(lvalue);
  ------------------
  |  |   72|  8.90k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  8.90k|        do {                                                            \
  |  |  |  |   59|  8.90k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  8.90k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 8.90k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  8.90k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  8.90k|        } while (false)
  |  |  ------------------
  ------------------
  137|  8.90k|        assert(rvalue);
  ------------------
  |  |   72|  8.90k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  8.90k|        do {                                                            \
  |  |  |  |   59|  8.90k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  8.90k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 8.90k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  8.90k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  8.90k|        } while (false)
  |  |  ------------------
  ------------------
  138|       |
  139|  8.90k|        if (isempty(rvalue)) {
  ------------------
  |  Branch (139:13): [True: 1.62k, False: 7.28k]
  ------------------
  140|  1.62k|                *s = set_free(*s);
  141|  1.62k|                return 0;
  142|  1.62k|        }
  143|       |
  144|  34.8k|        for (const char *p = rvalue;;) {
  145|  34.8k|                _cleanup_free_ struct ifla_vlan_qos_mapping *m = NULL;
  ------------------
  |  |   82|  34.8k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  34.8k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  146|  34.8k|                _cleanup_free_ char *w = NULL;
  ------------------
  |  |   82|  34.8k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  34.8k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  147|  34.8k|                unsigned from, to;
  148|       |
  149|  34.8k|                r = extract_first_word(&p, &w, NULL, EXTRACT_CUNESCAPE|EXTRACT_UNQUOTE);
  150|  34.8k|                if (r == -ENOMEM)
  ------------------
  |  Branch (150:21): [True: 0, False: 34.8k]
  ------------------
  151|      0|                        return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  152|  34.8k|                if (r < 0) {
  ------------------
  |  Branch (152:21): [True: 4.80k, False: 30.0k]
  ------------------
  153|  4.80k|                        log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse %s, ignoring: %s", lvalue, rvalue);
  ------------------
  |  |  353|  4.80k|        ({                                                              \
  |  |  354|  4.80k|                int _level = (level), _e = (error);                     \
  |  |  355|  4.80k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 4.80k]
  |  |  ------------------
  |  |  356|  4.80k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  4.80k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  4.80k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  4.80k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  4.80k|        })
  ------------------
  154|  4.80k|                        return 0;
  155|  4.80k|                }
  156|  30.0k|                if (r == 0)
  ------------------
  |  Branch (156:21): [True: 2.47k, False: 27.5k]
  ------------------
  157|  2.47k|                        return 0;
  158|       |
  159|  27.5k|                r = parse_range(w, &from, &to);
  160|  27.5k|                if (r < 0) {
  ------------------
  |  Branch (160:21): [True: 3.81k, False: 23.7k]
  ------------------
  161|  3.81k|                        log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse %s, ignoring: %s", lvalue, w);
  ------------------
  |  |  353|  3.81k|        ({                                                              \
  |  |  354|  3.81k|                int _level = (level), _e = (error);                     \
  |  |  355|  3.81k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 3.81k]
  |  |  ------------------
  |  |  356|  3.81k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  3.81k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  3.81k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  3.81k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  3.81k|        })
  ------------------
  162|  3.81k|                        continue;
  163|  3.81k|                }
  164|       |
  165|  23.7k|                m = new(struct ifla_vlan_qos_mapping, 1);
  ------------------
  |  |   17|  23.7k|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
  166|  23.7k|                if (!m)
  ------------------
  |  Branch (166:21): [True: 0, False: 23.7k]
  ------------------
  167|      0|                        return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  168|       |
  169|  23.7k|                *m = (struct ifla_vlan_qos_mapping) {
  170|  23.7k|                        .from = from,
  171|  23.7k|                        .to = to,
  172|  23.7k|                };
  173|       |
  174|  23.7k|                r = set_ensure_consume(s, &vlan_qos_maps_hash_ops, TAKE_PTR(m));
  ------------------
  |  |  388|  23.7k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  23.7k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  23.7k|        ({                                                       \
  |  |  |  |  |  |  381|  23.7k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  23.7k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  23.7k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  23.7k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  23.7k|                _var_;                                           \
  |  |  |  |  |  |  386|  23.7k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  175|  23.7k|                if (r < 0) {
  ------------------
  |  Branch (175:21): [True: 0, False: 23.7k]
  ------------------
  176|      0|                        log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to store %s, ignoring: %s", lvalue, w);
  ------------------
  |  |  353|      0|        ({                                                              \
  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|      0|        })
  ------------------
  177|      0|                        continue;
  178|      0|                }
  179|  23.7k|        }
  180|  7.28k|}
vlan.c:vlan_qos_maps_hash_func:
   98|  48.1k|static void vlan_qos_maps_hash_func(const struct ifla_vlan_qos_mapping *x, struct siphash *state) {
   99|  48.1k|        siphash24_compress_typesafe(x->from, state);
  ------------------
  |  |   20|  48.1k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
  100|  48.1k|        siphash24_compress_typesafe(x->to, state);
  ------------------
  |  |   20|  48.1k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
  101|  48.1k|}
vlan.c:vlan_qos_maps_compare_func:
  103|  16.5k|static int vlan_qos_maps_compare_func(const struct ifla_vlan_qos_mapping *a, const struct ifla_vlan_qos_mapping *b) {
  104|  16.5k|        int r;
  105|       |
  106|  16.5k|        r = CMP(a->from, b->from);
  ------------------
  |  |  288|  16.5k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  16.5k|        ({                                              \
  |  |  |  |  291|  16.5k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  16.5k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  16.5k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  16.5k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  16.5k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  16.5k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  16.5k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  16.5k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  16.5k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 7.38k, False: 9.11k]
  |  |  |  |  ------------------
  |  |  |  |  294|  16.5k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  9.11k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  9.11k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  9.11k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  9.11k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  9.11k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  9.11k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 4.65k, False: 4.45k]
  |  |  |  |  ------------------
  |  |  |  |  295|  16.5k|        })
  |  |  ------------------
  ------------------
  107|  16.5k|        if (r != 0)
  ------------------
  |  Branch (107:13): [True: 12.0k, False: 4.45k]
  ------------------
  108|  12.0k|                return r;
  109|       |
  110|  4.45k|        return CMP(a->to, b->to);
  ------------------
  |  |  288|  4.45k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  4.45k|        ({                                              \
  |  |  |  |  291|  4.45k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  4.45k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  4.45k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  4.45k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  4.45k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  4.45k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  4.45k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  4.45k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  4.45k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 209, False: 4.24k]
  |  |  |  |  ------------------
  |  |  |  |  294|  4.45k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  4.24k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  4.24k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  4.24k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  4.24k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  4.24k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  4.24k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 241, False: 4.00k]
  |  |  |  |  ------------------
  |  |  |  |  295|  4.45k|        })
  |  |  ------------------
  ------------------
  111|  16.5k|}
vlan.c:vlan_init:
  202|  1.18k|static void vlan_init(NetDev *netdev) {
  203|  1.18k|        VLan *v = VLAN(netdev);
  204|       |
  205|  1.18k|        v->id = VLANID_INVALID;
  ------------------
  |  |    8|  1.18k|#define VLANID_INVALID UINT16_MAX
  ------------------
  206|  1.18k|        v->protocol = -1;
  207|  1.18k|        v->gvrp = -1;
  208|  1.18k|        v->mvrp = -1;
  209|  1.18k|        v->loose_binding = -1;
  210|  1.18k|        v->reorder_hdr = -1;
  211|  1.18k|}
vlan.c:vlan_done:
  195|  1.18k|static void vlan_done(NetDev *netdev) {
  196|  1.18k|        VLan *v = VLAN(netdev);
  197|       |
  198|  1.18k|        set_free(v->egress_qos_maps);
  199|  1.18k|        set_free(v->ingress_qos_maps);
  200|  1.18k|}
vlan.c:netdev_vlan_verify:
  182|  1.18k|static int netdev_vlan_verify(NetDev *netdev, const char *filename) {
  183|  1.18k|        assert(filename);
  ------------------
  |  |   72|  1.18k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.18k|        do {                                                            \
  |  |  |  |   59|  1.18k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.18k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.18k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.18k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.18k|        } while (false)
  |  |  ------------------
  ------------------
  184|       |
  185|  1.18k|        VLan *v = VLAN(netdev);
  186|       |
  187|  1.18k|        if (v->id == VLANID_INVALID) {
  ------------------
  |  |    8|  1.18k|#define VLANID_INVALID UINT16_MAX
  ------------------
  |  Branch (187:13): [True: 1.15k, False: 32]
  ------------------
  188|  1.15k|                log_netdev_warning(netdev, "VLAN without valid Id (%"PRIu16") configured in %s.", v->id, filename);
  ------------------
  |  |  281|  1.15k|#define log_netdev_warning(netdev, ...) log_netdev_full(netdev, LOG_WARNING,  __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  276|  1.15k|#define log_netdev_full(netdev, level, ...) (void) log_netdev_full_errno_zerook(netdev, level, 0, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  1.15k|        ({                                                              \
  |  |  |  |  |  |  265|  1.15k|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|  1.15k|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|  1.15k|        ({                                                              \
  |  |  |  |  |  |  |  |    8|  2.30k|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 1.15k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|  1.15k|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|  1.15k|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|  1.15k|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 1.15k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|  1.15k|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|  1.15k|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|  1.15k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|  1.15k|                return -EINVAL;
  190|  1.15k|        }
  191|       |
  192|     32|        return 0;
  193|  1.18k|}

vxcan.c:vxcan_done:
  112|     85|static void vxcan_done(NetDev *netdev) {
  113|     85|        VxCan *v = VXCAN(netdev);
  114|       |
  115|     85|        free(v->ifname_peer);
  116|     85|}
vxcan.c:netdev_vxcan_verify:
   35|     85|static int netdev_vxcan_verify(NetDev *netdev, const char *filename) {
   36|     85|        assert(filename);
  ------------------
  |  |   72|     85|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     85|        do {                                                            \
  |  |  |  |   59|     85|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     85|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 85]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     85|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     85|        } while (false)
  |  |  ------------------
  ------------------
   37|       |
   38|     85|        VxCan *v = VXCAN(netdev);
   39|       |
   40|     85|        if (!v->ifname_peer)
  ------------------
  |  Branch (40:13): [True: 1, False: 84]
  ------------------
   41|      1|                return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  287|      1|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      1|        ({                                                              \
  |  |  |  |  271|      1|                int _error = (error);                                   \
  |  |  |  |  272|      1|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      1|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      1|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      1|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      1|        ({                                                              \
  |  |  |  |  |  |  265|      1|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      1|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      1|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      2|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      1|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      1|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      1|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      1|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      1|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      1|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      1|        })
  |  |  ------------------
  ------------------
   42|     84|                                                "VxCan NetDev without peer name configured in %s. Ignoring", filename);
   43|       |
   44|     84|        if (streq(v->ifname_peer, netdev->ifname))
  ------------------
  |  |   46|     84|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 1, False: 83]
  |  |  ------------------
  ------------------
   45|      1|                return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  287|      1|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      1|        ({                                                              \
  |  |  |  |  271|      1|                int _error = (error);                                   \
  |  |  |  |  272|      1|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      1|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      1|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      1|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      1|        ({                                                              \
  |  |  |  |  |  |  265|      1|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      1|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      1|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      2|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      1|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      1|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      1|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      1|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      1|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      1|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      1|        })
  |  |  ------------------
  ------------------
   46|     83|                                                "VxCan peer name cannot be the same as the main interface name.");
   47|       |
   48|     83|        return 0;
   49|     84|}
vxcan.c:netdev_vxcan_detach:
   58|     85|static void netdev_vxcan_detach(NetDev *netdev) {
   59|     85|        VxCan *v = VXCAN(netdev);
   60|       |
   61|     85|        netdev_detach_name(netdev, v->ifname_peer);
   62|     85|}

config_parse_vxlan_address:
  230|  2.05k|                void *userdata) {
  231|       |
  232|  2.05k|        VxLan *v = ASSERT_PTR(userdata);
  ------------------
  |  |   81|  2.05k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  2.05k|        ({                                 \
  |  |  |  |   85|  2.05k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  2.05k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  2.05k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  2.05k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  2.05k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  2.05k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  2.05k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.05k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  2.05k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  2.05k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  2.05k|                var;                       \
  |  |  |  |   88|  2.05k|        })
  |  |  ------------------
  ------------------
  233|  2.05k|        union in_addr_union *addr = data, buffer;
  234|  2.05k|        int *family, f, r;
  235|       |
  236|  2.05k|        assert(filename);
  ------------------
  |  |   72|  2.05k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.05k|        do {                                                            \
  |  |  |  |   59|  2.05k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.05k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.05k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.05k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.05k|        } while (false)
  |  |  ------------------
  ------------------
  237|  2.05k|        assert(lvalue);
  ------------------
  |  |   72|  2.05k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.05k|        do {                                                            \
  |  |  |  |   59|  2.05k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.05k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.05k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.05k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.05k|        } while (false)
  |  |  ------------------
  ------------------
  238|  2.05k|        assert(rvalue);
  ------------------
  |  |   72|  2.05k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.05k|        do {                                                            \
  |  |  |  |   59|  2.05k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.05k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.05k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.05k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.05k|        } while (false)
  |  |  ------------------
  ------------------
  239|  2.05k|        assert(data);
  ------------------
  |  |   72|  2.05k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.05k|        do {                                                            \
  |  |  |  |   59|  2.05k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.05k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.05k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.05k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.05k|        } while (false)
  |  |  ------------------
  ------------------
  240|       |
  241|  2.05k|        if (streq(lvalue, "Local"))
  ------------------
  |  |   46|  2.05k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 988, False: 1.06k]
  |  |  ------------------
  ------------------
  242|    988|                family = &v->local_family;
  243|  1.06k|        else if (streq(lvalue, "Remote"))
  ------------------
  |  |   46|  1.06k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 231, False: 832]
  |  |  ------------------
  ------------------
  244|    231|                family = &v->remote_family;
  245|    832|        else if (streq(lvalue, "Group"))
  ------------------
  |  |   46|    832|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 832, False: 0]
  |  |  ------------------
  ------------------
  246|    832|                family = &v->group_family;
  247|      0|        else
  248|      0|                assert_not_reached();
  ------------------
  |  |   76|      0|        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  249|       |
  250|  2.05k|        if (isempty(rvalue)) {
  ------------------
  |  Branch (250:13): [True: 380, False: 1.67k]
  ------------------
  251|    380|                *addr = IN_ADDR_NULL;
  ------------------
  |  |  199|    380|#define IN_ADDR_NULL ((union in_addr_union) { .in6 = {} })
  ------------------
  252|    380|                *family = AF_UNSPEC;
  253|    380|                return 0;
  254|    380|        }
  255|       |
  256|  1.67k|        if (streq(lvalue, "Local")) {
  ------------------
  |  |   46|  1.67k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 819, False: 852]
  |  |  ------------------
  ------------------
  257|    819|                NetDevLocalAddressType t;
  258|       |
  259|    819|                t = netdev_local_address_type_from_string(rvalue);
  260|    819|                if (t >= 0) {
  ------------------
  |  Branch (260:21): [True: 195, False: 624]
  ------------------
  261|    195|                        v->local = IN_ADDR_NULL;
  ------------------
  |  |  199|    195|#define IN_ADDR_NULL ((union in_addr_union) { .in6 = {} })
  ------------------
  262|    195|                        v->local_family = AF_UNSPEC;
  263|    195|                        v->local_type = t;
  264|    195|                        return 0;
  265|    195|                }
  266|    819|        }
  267|       |
  268|  1.47k|        r = in_addr_from_string_auto(rvalue, &f, &buffer);
  269|  1.47k|        if (r < 0) {
  ------------------
  |  Branch (269:13): [True: 305, False: 1.17k]
  ------------------
  270|    305|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    305|        ({                                                              \
  |  |  354|    305|                int _level = (level), _e = (error);                     \
  |  |  355|    305|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 305]
  |  |  ------------------
  |  |  356|    305|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    305|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    305|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    305|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    305|        })
  ------------------
  271|    305|                           "Failed to parse %s=, ignoring assignment: %s", lvalue, rvalue);
  272|    305|                return 0;
  273|    305|        }
  274|       |
  275|  1.17k|        r = in_addr_is_multicast(f, &buffer);
  276|       |
  277|  1.17k|        if (streq(lvalue, "Group")) {
  ------------------
  |  |   46|  1.17k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 440, False: 731]
  |  |  ------------------
  ------------------
  278|    440|                if (r <= 0) {
  ------------------
  |  Branch (278:21): [True: 214, False: 226]
  ------------------
  279|    214|                        log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    214|        ({                                                              \
  |  |  354|    214|                int _level = (level), _e = (error);                     \
  |  |  355|    214|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 214]
  |  |  ------------------
  |  |  356|    214|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    214|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    214|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    214|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    214|        })
  ------------------
  280|    214|                                   "%s= must be a multicast address, ignoring assignment: %s", lvalue, rvalue);
  281|    214|                        return 0;
  282|    214|                }
  283|    731|        } else {
  284|    731|                if (r > 0) {
  ------------------
  |  Branch (284:21): [True: 211, False: 520]
  ------------------
  285|    211|                        log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    211|        ({                                                              \
  |  |  354|    211|                int _level = (level), _e = (error);                     \
  |  |  355|    211|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 211]
  |  |  ------------------
  |  |  356|    211|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    211|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    211|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    211|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    211|        })
  ------------------
  286|    211|                                   "%s= cannot be a multicast address, ignoring assignment: %s", lvalue, rvalue);
  287|    211|                        return 0;
  288|    211|                }
  289|    731|        }
  290|       |
  291|    746|        if (streq(lvalue, "Local"))
  ------------------
  |  |   46|    746|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 324, False: 422]
  |  |  ------------------
  ------------------
  292|    324|                v->local_type = _NETDEV_LOCAL_ADDRESS_TYPE_INVALID;
  293|    746|        *addr = buffer;
  294|    746|        *family = f;
  295|       |
  296|    746|        return 0;
  297|  1.17k|}
config_parse_port_range:
  309|  1.47k|                void *userdata) {
  310|       |
  311|  1.47k|        assert(filename);
  ------------------
  |  |   72|  1.47k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.47k|        do {                                                            \
  |  |  |  |   59|  1.47k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.47k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.47k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.47k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.47k|        } while (false)
  |  |  ------------------
  ------------------
  312|  1.47k|        assert(lvalue);
  ------------------
  |  |   72|  1.47k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.47k|        do {                                                            \
  |  |  |  |   59|  1.47k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.47k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.47k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.47k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.47k|        } while (false)
  |  |  ------------------
  ------------------
  313|  1.47k|        assert(rvalue);
  ------------------
  |  |   72|  1.47k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.47k|        do {                                                            \
  |  |  |  |   59|  1.47k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.47k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.47k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.47k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.47k|        } while (false)
  |  |  ------------------
  ------------------
  314|  1.47k|        assert(data);
  ------------------
  |  |   72|  1.47k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.47k|        do {                                                            \
  |  |  |  |   59|  1.47k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.47k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.47k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.47k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.47k|        } while (false)
  |  |  ------------------
  ------------------
  315|       |
  316|  1.47k|        VxLan *v = ASSERT_PTR(userdata);
  ------------------
  |  |   81|  1.47k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  1.47k|        ({                                 \
  |  |  |  |   85|  1.47k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  1.47k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  1.47k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  1.47k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  1.47k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  1.47k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  1.47k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.47k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  1.47k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  1.47k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  1.47k|                var;                       \
  |  |  |  |   88|  1.47k|        })
  |  |  ------------------
  ------------------
  317|  1.47k|        int r;
  318|       |
  319|  1.47k|        r = parse_ip_port_range(rvalue, &v->port_range.low, &v->port_range.high, /* allow_zero = */ false);
  320|  1.47k|        if (r < 0)
  ------------------
  |  Branch (320:13): [True: 1.23k, False: 241]
  ------------------
  321|  1.23k|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|  1.23k|        ({                                                              \
  |  |  354|  1.23k|                int _level = (level), _e = (error);                     \
  |  |  355|  1.23k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 1.23k]
  |  |  ------------------
  |  |  356|  1.23k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  1.23k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  1.23k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  1.23k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  1.23k|        })
  ------------------
  322|  1.47k|                           "Failed to parse VXLAN port range '%s'. Port should be greater than 0 and less than 65535.", rvalue);
  323|  1.47k|        return 0;
  324|  1.47k|}
config_parse_flow_label:
  336|    760|                void *userdata) {
  337|       |
  338|    760|        VxLan *v = userdata;
  339|    760|        unsigned f;
  340|    760|        int r;
  341|       |
  342|    760|        assert(filename);
  ------------------
  |  |   72|    760|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    760|        do {                                                            \
  |  |  |  |   59|    760|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    760|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 760]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    760|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    760|        } while (false)
  |  |  ------------------
  ------------------
  343|    760|        assert(lvalue);
  ------------------
  |  |   72|    760|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    760|        do {                                                            \
  |  |  |  |   59|    760|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    760|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 760]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    760|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    760|        } while (false)
  |  |  ------------------
  ------------------
  344|    760|        assert(rvalue);
  ------------------
  |  |   72|    760|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    760|        do {                                                            \
  |  |  |  |   59|    760|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    760|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 760]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    760|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    760|        } while (false)
  |  |  ------------------
  ------------------
  345|    760|        assert(data);
  ------------------
  |  |   72|    760|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    760|        do {                                                            \
  |  |  |  |   59|    760|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    760|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 760]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    760|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    760|        } while (false)
  |  |  ------------------
  ------------------
  346|       |
  347|    760|        r = safe_atou(rvalue, &f);
  348|    760|        if (r < 0) {
  ------------------
  |  Branch (348:13): [True: 216, False: 544]
  ------------------
  349|    216|                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse VXLAN flow label '%s'.", rvalue);
  ------------------
  |  |  353|    216|        ({                                                              \
  |  |  354|    216|                int _level = (level), _e = (error);                     \
  |  |  355|    216|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 216]
  |  |  ------------------
  |  |  356|    216|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    216|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    216|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    216|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    216|        })
  ------------------
  350|    216|                return 0;
  351|    216|        }
  352|       |
  353|    544|        if (f & ~VXLAN_FLOW_LABEL_MAX_MASK) {
  ------------------
  |  |   10|    544|#define VXLAN_FLOW_LABEL_MAX_MASK 0xFFFFFU
  ------------------
  |  Branch (353:13): [True: 330, False: 214]
  ------------------
  354|    330|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    330|        ({                                                              \
  |  |  354|    330|                int _level = (level), _e = (error);                     \
  |  |  355|    330|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 330]
  |  |  ------------------
  |  |  356|    330|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    330|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    330|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    330|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    330|        })
  ------------------
  355|    330|                           "VXLAN flow label '%s' not valid. Flow label range should be [0-1048575].", rvalue);
  356|    330|                return 0;
  357|    330|        }
  358|       |
  359|    214|        v->flow_label = f;
  360|       |
  361|    214|        return 0;
  362|    544|}
config_parse_vxlan_ttl:
  374|    884|                void *userdata) {
  375|       |
  376|    884|        assert(filename);
  ------------------
  |  |   72|    884|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    884|        do {                                                            \
  |  |  |  |   59|    884|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    884|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 884]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    884|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    884|        } while (false)
  |  |  ------------------
  ------------------
  377|    884|        assert(lvalue);
  ------------------
  |  |   72|    884|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    884|        do {                                                            \
  |  |  |  |   59|    884|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    884|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 884]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    884|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    884|        } while (false)
  |  |  ------------------
  ------------------
  378|    884|        assert(rvalue);
  ------------------
  |  |   72|    884|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    884|        do {                                                            \
  |  |  |  |   59|    884|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    884|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 884]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    884|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    884|        } while (false)
  |  |  ------------------
  ------------------
  379|    884|        assert(data);
  ------------------
  |  |   72|    884|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    884|        do {                                                            \
  |  |  |  |   59|    884|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    884|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 884]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    884|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    884|        } while (false)
  |  |  ------------------
  ------------------
  380|       |
  381|    884|        VxLan *v = ASSERT_PTR(userdata);
  ------------------
  |  |   81|    884|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    884|        ({                                 \
  |  |  |  |   85|    884|                typeof(expr) var = (expr); \
  |  |  |  |   86|    884|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    884|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    884|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    884|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    884|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    884|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 884]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    884|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    884|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    884|                var;                       \
  |  |  |  |   88|    884|        })
  |  |  ------------------
  ------------------
  382|    884|        int r;
  383|       |
  384|    884|        if (streq(rvalue, "inherit")) {
  ------------------
  |  |   46|    884|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 194, False: 690]
  |  |  ------------------
  ------------------
  385|    194|                v->inherit = true;
  386|    194|                v->ttl = 0;  /* unset the unused ttl field for clarity */
  387|    194|                return 0;
  388|    194|        }
  389|       |
  390|    690|        r = config_parse_unsigned_bounded(
  391|    690|                        unit, filename, line, section, section_line, lvalue, rvalue,
  392|    690|                        0, UINT8_MAX, true,
  393|    690|                        &v->ttl);
  394|    690|        if (r <= 0)
  ------------------
  |  Branch (394:13): [True: 485, False: 205]
  ------------------
  395|    485|                return r;
  396|    205|        v->inherit = false;
  397|    205|        return 0;
  398|    690|}
vxlan.c:vxlan_init:
  455|    562|static void vxlan_init(NetDev *netdev) {
  456|    562|        VxLan *v = VXLAN(netdev);
  457|       |
  458|    562|        v->local_type = _NETDEV_LOCAL_ADDRESS_TYPE_INVALID;
  459|    562|        v->vni = VXLAN_VID_MAX + 1;
  ------------------
  |  |    9|    562|#define VXLAN_VID_MAX (1u << 24) - 1
  ------------------
  460|    562|        v->df = _NETDEV_VXLAN_DF_INVALID;
  461|    562|        v->learning = true;
  462|    562|        v->udpcsum = false;
  463|    562|        v->udp6zerocsumtx = false;
  464|    562|        v->udp6zerocsumrx = false;
  465|    562|        v->external = false;
  466|    562|        v->vnifilter = false;
  467|    562|}
vxlan.c:netdev_vxlan_verify:
  400|    562|static int netdev_vxlan_verify(NetDev *netdev, const char *filename) {
  401|    562|        assert(filename);
  ------------------
  |  |   72|    562|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    562|        do {                                                            \
  |  |  |  |   59|    562|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    562|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 562]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    562|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    562|        } while (false)
  |  |  ------------------
  ------------------
  402|       |
  403|    562|        VxLan *v = VXLAN(netdev);
  404|       |
  405|    562|        if (v->ttl > 255)
  ------------------
  |  Branch (405:13): [True: 0, False: 562]
  ------------------
  406|      0|                return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  287|      0|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      0|        ({                                                              \
  |  |  |  |  271|      0|                int _error = (error);                                   \
  |  |  |  |  272|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      0|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|        ({                                                              \
  |  |  |  |  |  |  265|      0|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      0|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      0|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      0|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      0|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      0|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      0|        })
  |  |  ------------------
  ------------------
  407|    562|                                                "%s: VXLAN TTL must be <= 255. Ignoring.",
  408|    562|                                                filename);
  409|       |
  410|    562|        if (!v->dest_port && v->generic_protocol_extension)
  ------------------
  |  Branch (410:13): [True: 554, False: 8]
  |  Branch (410:30): [True: 0, False: 554]
  ------------------
  411|      0|                v->dest_port = 4790;
  412|       |
  413|    562|        if (in_addr_is_set(v->group_family, &v->group) && in_addr_is_set(v->remote_family, &v->remote))
  ------------------
  |  Branch (413:13): [True: 10, False: 552]
  |  Branch (413:59): [True: 1, False: 9]
  ------------------
  414|      1|                return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  287|      1|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      1|        ({                                                              \
  |  |  |  |  271|      1|                int _error = (error);                                   \
  |  |  |  |  272|      1|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      1|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      1|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      1|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      1|        ({                                                              \
  |  |  |  |  |  |  265|      1|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      1|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      1|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      2|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      1|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      1|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      1|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      1|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      1|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      1|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      1|        })
  |  |  ------------------
  ------------------
  415|    561|                                                "%s: VXLAN both 'Group=' and 'Remote=' cannot be specified. Ignoring.",
  416|    561|                                                filename);
  417|       |
  418|    561|        if (v->independent && v->local_type >= 0)
  ------------------
  |  Branch (418:13): [True: 2, False: 559]
  |  Branch (418:31): [True: 1, False: 1]
  ------------------
  419|      1|                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|      1|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      1|        ({                                                              \
  |  |  |  |  271|      1|                int _error = (error);                                   \
  |  |  |  |  272|      1|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      1|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      1|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      1|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      1|        ({                                                              \
  |  |  |  |  |  |  265|      1|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      1|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      1|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      2|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      1|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      1|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      1|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      1|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      1|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      1|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      1|        })
  |  |  ------------------
  ------------------
  420|    560|                                              "The local address cannot be '%s' when Independent= is enabled, ignoring.",
  421|    560|                                              strna(netdev_local_address_type_to_string(v->local_type)));
  422|       |
  423|    560|        if (v->external) {
  ------------------
  |  Branch (423:13): [True: 18, False: 542]
  ------------------
  424|     18|                if (v->vni <= VXLAN_VID_MAX)
  ------------------
  |  |    9|     18|#define VXLAN_VID_MAX (1u << 24) - 1
  ------------------
  |  Branch (424:21): [True: 7, False: 11]
  ------------------
  425|     18|                        log_netdev_warning(netdev, "VNI= is set while External= is enabled. VNI= setting will be ignored.");
  ------------------
  |  |  281|      7|#define log_netdev_warning(netdev, ...) log_netdev_full(netdev, LOG_WARNING,  __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  276|      7|#define log_netdev_full(netdev, level, ...) (void) log_netdev_full_errno_zerook(netdev, level, 0, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      7|        ({                                                              \
  |  |  |  |  |  |  265|      7|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      7|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      7|        ({                                                              \
  |  |  |  |  |  |  |  |    8|     14|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 7, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      7|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      7|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      7|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 7, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      7|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      7|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      7|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  426|    542|        } else {
  427|    542|                if (v->vnifilter)
  ------------------
  |  Branch (427:21): [True: 0, False: 542]
  ------------------
  428|    542|                        log_netdev_warning(netdev, "VNIFilter= is enabled while External= is disabled. VNIFilter= setting will be ignored.");
  ------------------
  |  |  281|      0|#define log_netdev_warning(netdev, ...) log_netdev_full(netdev, LOG_WARNING,  __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  276|      0|#define log_netdev_full(netdev, level, ...) (void) log_netdev_full_errno_zerook(netdev, level, 0, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|        ({                                                              \
  |  |  |  |  |  |  265|      0|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      0|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      0|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      0|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      0|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      0|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  429|    542|                if (v->vni > VXLAN_VID_MAX)
  ------------------
  |  |    9|    542|#define VXLAN_VID_MAX (1u << 24) - 1
  ------------------
  |  Branch (429:21): [True: 508, False: 34]
  ------------------
  430|    508|                        return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  287|    508|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|    508|        ({                                                              \
  |  |  |  |  271|    508|                int _error = (error);                                   \
  |  |  |  |  272|    508|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    508|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    508|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    508|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    508|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    508|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 508]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    508|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    508|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|    508|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    508|        ({                                                              \
  |  |  |  |  |  |  265|    508|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|    508|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|    508|        ({                                                              \
  |  |  |  |  |  |  |  |    8|  1.01k|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 508, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    508|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|    508|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|    508|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 508, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|    508|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|    508|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|    508|        })
  |  |  |  |  ------------------
  |  |  |  |  274|    508|        })
  |  |  ------------------
  ------------------
  431|    542|                                                        "%s: VXLAN without valid VNI (or VXLAN Segment ID) configured. Ignoring.",
  432|    542|                                                        filename);
  433|    542|        }
  434|       |
  435|     52|        return 0;
  436|    560|}

config_parse_wireguard_listen_port:
  466|    989|                void *userdata) {
  467|       |
  468|    989|        uint16_t *s = ASSERT_PTR(data);
  ------------------
  |  |   81|    989|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    989|        ({                                 \
  |  |  |  |   85|    989|                typeof(expr) var = (expr); \
  |  |  |  |   86|    989|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    989|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    989|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    989|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    989|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    989|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 989]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    989|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    989|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    989|                var;                       \
  |  |  |  |   88|    989|        })
  |  |  ------------------
  ------------------
  469|    989|        int r;
  470|       |
  471|    989|        assert(rvalue);
  ------------------
  |  |   72|    989|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    989|        do {                                                            \
  |  |  |  |   59|    989|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    989|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 989]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    989|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    989|        } while (false)
  |  |  ------------------
  ------------------
  472|       |
  473|    989|        if (isempty(rvalue) || streq(rvalue, "auto")) {
  ------------------
  |  |   46|    739|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 302, False: 437]
  |  |  ------------------
  ------------------
  |  Branch (473:13): [True: 250, False: 739]
  ------------------
  474|    552|                *s = 0;
  475|    552|                return 0;
  476|    552|        }
  477|       |
  478|    437|        r = parse_ip_port(rvalue, s);
  479|    437|        if (r < 0) {
  ------------------
  |  Branch (479:13): [True: 235, False: 202]
  ------------------
  480|    235|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    235|        ({                                                              \
  |  |  354|    235|                int _level = (level), _e = (error);                     \
  |  |  355|    235|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 235]
  |  |  ------------------
  |  |  356|    235|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    235|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    235|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    235|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    235|        })
  ------------------
  481|    235|                           "Invalid port specification, ignoring assignment: %s", rvalue);
  482|    235|                return 0;
  483|    235|        }
  484|       |
  485|    202|        return 0;
  486|    437|}
config_parse_wireguard_private_key:
  556|  5.10k|                void *userdata) {
  557|       |
  558|  5.10k|        Wireguard *w = WIREGUARD(data);
  559|       |
  560|  5.10k|        return wireguard_decode_key_and_warn(rvalue, w->private_key, unit, filename, line, lvalue);
  561|  5.10k|}
config_parse_wireguard_private_key_file:
  573|  1.04k|                void *userdata) {
  574|       |
  575|  1.04k|        Wireguard *w = WIREGUARD(data);
  576|  1.04k|        _cleanup_free_ char *path = NULL;
  ------------------
  |  |   82|  1.04k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  1.04k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  577|       |
  578|  1.04k|        if (isempty(rvalue)) {
  ------------------
  |  Branch (578:13): [True: 195, False: 846]
  ------------------
  579|    195|                w->private_key_file = mfree(w->private_key_file);
  ------------------
  |  |  404|    195|        ({                                      \
  |  |  405|    195|                free(memory);                   \
  |  |  406|    195|                (typeof(memory)) NULL;          \
  |  |  407|    195|        })
  ------------------
  580|    195|                return 0;
  581|    195|        }
  582|       |
  583|    846|        path = strdup(rvalue);
  584|    846|        if (!path)
  ------------------
  |  Branch (584:13): [True: 0, False: 846]
  ------------------
  585|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  586|       |
  587|    846|        if (path_simplify_and_warn(path, PATH_CHECK_ABSOLUTE|PATH_CHECK_NON_API_VFS, unit, filename, line, lvalue) < 0)
  ------------------
  |  Branch (587:13): [True: 511, False: 335]
  ------------------
  588|    511|                return 0;
  589|       |
  590|    335|        return free_and_replace(w->private_key_file, path);
  ------------------
  |  |   49|    335|        free_and_replace_full(a, b, free)
  |  |  ------------------
  |  |  |  |   10|    335|        ({                                      \
  |  |  |  |   11|    335|                typeof(a)* _a = &(a);           \
  |  |  |  |   12|    335|                typeof(b)* _b = &(b);           \
  |  |  |  |   13|    335|                free_func(*_a);                 \
  |  |  |  |   14|    335|                *_a = *_b;                      \
  |  |  |  |   15|    335|                *_b = NULL;                     \
  |  |  |  |   16|    335|                0;                              \
  |  |  |  |   17|    335|        })
  |  |  ------------------
  ------------------
  591|    846|}
config_parse_wireguard_peer_key:
  603|  5.06k|                void *userdata) {
  604|       |
  605|  5.06k|        Wireguard *w = WIREGUARD(data);
  606|  5.06k|        _cleanup_(wireguard_peer_free_or_set_invalidp) WireguardPeer *peer = NULL;
  ------------------
  |  |   78|  5.06k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  607|  5.06k|        int r;
  608|       |
  609|  5.06k|        r = wireguard_peer_new_static(w, filename, section_line, &peer);
  610|  5.06k|        if (r < 0)
  ------------------
  |  Branch (610:13): [True: 0, False: 5.06k]
  ------------------
  611|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  612|       |
  613|  5.06k|        r = wireguard_decode_key_and_warn(rvalue,
  614|  5.06k|                                          streq(lvalue, "PublicKey") ? peer->public_key : peer->preshared_key,
  ------------------
  |  |   46|  5.06k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 4.81k, False: 248]
  |  |  ------------------
  ------------------
  615|  5.06k|                                          unit, filename, line, lvalue);
  616|  5.06k|        if (r < 0)
  ------------------
  |  Branch (616:13): [True: 0, False: 5.06k]
  ------------------
  617|      0|                return r;
  618|       |
  619|  5.06k|        TAKE_PTR(peer);
  ------------------
  |  |  388|  5.06k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  5.06k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  5.06k|        ({                                                       \
  |  |  |  |  |  |  381|  5.06k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  5.06k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  5.06k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  5.06k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  5.06k|                _var_;                                           \
  |  |  |  |  |  |  386|  5.06k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  620|  5.06k|        return 0;
  621|  5.06k|}
config_parse_wireguard_peer_key_file:
  633|  2.63k|                void *userdata) {
  634|       |
  635|  2.63k|        Wireguard *w = WIREGUARD(data);
  636|  2.63k|        _cleanup_(wireguard_peer_free_or_set_invalidp) WireguardPeer *peer = NULL;
  ------------------
  |  |   78|  2.63k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  637|  2.63k|        _cleanup_free_ char *path = NULL;
  ------------------
  |  |   82|  2.63k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  2.63k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  638|  2.63k|        char **key_file;
  639|  2.63k|        int r;
  640|       |
  641|  2.63k|        assert(filename);
  ------------------
  |  |   72|  2.63k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.63k|        do {                                                            \
  |  |  |  |   59|  2.63k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.63k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.63k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.63k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.63k|        } while (false)
  |  |  ------------------
  ------------------
  642|  2.63k|        assert(lvalue);
  ------------------
  |  |   72|  2.63k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.63k|        do {                                                            \
  |  |  |  |   59|  2.63k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.63k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.63k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.63k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.63k|        } while (false)
  |  |  ------------------
  ------------------
  643|       |
  644|  2.63k|        r = wireguard_peer_new_static(w, filename, section_line, &peer);
  645|  2.63k|        if (r < 0)
  ------------------
  |  Branch (645:13): [True: 0, False: 2.63k]
  ------------------
  646|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  647|       |
  648|  2.63k|        if (streq(lvalue, "PublicKeyFile"))
  ------------------
  |  |   46|  2.63k|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 2.22k, False: 413]
  |  |  ------------------
  ------------------
  649|  2.22k|                key_file = &peer->public_key_file;
  650|    413|        else if (streq(lvalue, "PresharedKeyFile"))
  ------------------
  |  |   46|    413|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 413, False: 0]
  |  |  ------------------
  ------------------
  651|    413|                key_file = &peer->preshared_key_file;
  652|      0|        else
  653|      0|                assert_not_reached();
  ------------------
  |  |   76|      0|        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  654|       |
  655|  2.63k|        if (isempty(rvalue)) {
  ------------------
  |  Branch (655:13): [True: 392, False: 2.24k]
  ------------------
  656|    392|                *key_file = mfree(*key_file);
  ------------------
  |  |  404|    392|        ({                                      \
  |  |  405|    392|                free(memory);                   \
  |  |  406|    392|                (typeof(memory)) NULL;          \
  |  |  407|    392|        })
  ------------------
  657|    392|                TAKE_PTR(peer);
  ------------------
  |  |  388|    392|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|    392|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|    392|        ({                                                       \
  |  |  |  |  |  |  381|    392|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|    392|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|    392|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|    392|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|    392|                _var_;                                           \
  |  |  |  |  |  |  386|    392|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  658|    392|                return 0;
  659|    392|        }
  660|       |
  661|  2.24k|        path = strdup(rvalue);
  662|  2.24k|        if (!path)
  ------------------
  |  Branch (662:13): [True: 0, False: 2.24k]
  ------------------
  663|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  664|       |
  665|  2.24k|        if (path_simplify_and_warn(path, PATH_CHECK_ABSOLUTE|PATH_CHECK_NON_API_VFS, unit, filename, line, lvalue) < 0)
  ------------------
  |  Branch (665:13): [True: 200, False: 2.04k]
  ------------------
  666|    200|                return 0;
  667|       |
  668|  2.04k|        free_and_replace(*key_file, path);
  ------------------
  |  |   49|  2.04k|        free_and_replace_full(a, b, free)
  |  |  ------------------
  |  |  |  |   10|  2.04k|        ({                                      \
  |  |  |  |   11|  2.04k|                typeof(a)* _a = &(a);           \
  |  |  |  |   12|  2.04k|                typeof(b)* _b = &(b);           \
  |  |  |  |   13|  2.04k|                free_func(*_a);                 \
  |  |  |  |   14|  2.04k|                *_a = *_b;                      \
  |  |  |  |   15|  2.04k|                *_b = NULL;                     \
  |  |  |  |   16|  2.04k|                0;                              \
  |  |  |  |   17|  2.04k|        })
  |  |  ------------------
  ------------------
  669|  2.04k|        TAKE_PTR(peer);
  ------------------
  |  |  388|  2.04k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  2.04k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  2.04k|        ({                                                       \
  |  |  |  |  |  |  381|  2.04k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  2.04k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  2.04k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  2.04k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  2.04k|                _var_;                                           \
  |  |  |  |  |  |  386|  2.04k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  670|  2.04k|        return 0;
  671|  2.24k|}
config_parse_wireguard_allowed_ips:
  683|  4.72k|                void *userdata) {
  684|       |
  685|  4.72k|        assert(rvalue);
  ------------------
  |  |   72|  4.72k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  4.72k|        do {                                                            \
  |  |  |  |   59|  4.72k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  4.72k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 4.72k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  4.72k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  4.72k|        } while (false)
  |  |  ------------------
  ------------------
  686|       |
  687|  4.72k|        Wireguard *w = WIREGUARD(data);
  688|  4.72k|        _cleanup_(wireguard_peer_free_or_set_invalidp) WireguardPeer *peer = NULL;
  ------------------
  |  |   78|  4.72k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  689|  4.72k|        union in_addr_union addr;
  690|  4.72k|        unsigned char prefixlen;
  691|  4.72k|        int r, family;
  692|  4.72k|        WireguardIPmask *ipmask;
  693|       |
  694|  4.72k|        r = wireguard_peer_new_static(w, filename, section_line, &peer);
  695|  4.72k|        if (r < 0)
  ------------------
  |  Branch (695:13): [True: 0, False: 4.72k]
  ------------------
  696|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  697|       |
  698|  4.72k|        if (isempty(rvalue)) {
  ------------------
  |  Branch (698:13): [True: 551, False: 4.17k]
  ------------------
  699|    551|                wireguard_peer_clear_ipmasks(peer);
  700|    551|                TAKE_PTR(peer);
  ------------------
  |  |  388|    551|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|    551|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|    551|        ({                                                       \
  |  |  |  |  |  |  381|    551|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|    551|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|    551|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|    551|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|    551|                _var_;                                           \
  |  |  |  |  |  |  386|    551|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  701|    551|                return 0;
  702|    551|        }
  703|       |
  704|  46.1k|        for (const char *p = rvalue;;) {
  705|  46.1k|                _cleanup_free_ char *word = NULL;
  ------------------
  |  |   82|  46.1k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  46.1k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  706|  46.1k|                union in_addr_union masked;
  707|       |
  708|  46.1k|                r = extract_first_word(&p, &word, "," WHITESPACE, 0);
  ------------------
  |  |   15|  46.1k|#define WHITESPACE          " \t\n\r"
  ------------------
  709|  46.1k|                if (r == 0)
  ------------------
  |  Branch (709:21): [True: 3.86k, False: 42.3k]
  ------------------
  710|  3.86k|                        break;
  711|  42.3k|                if (r == -ENOMEM)
  ------------------
  |  Branch (711:21): [True: 0, False: 42.3k]
  ------------------
  712|      0|                        return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  713|  42.3k|                if (r < 0) {
  ------------------
  |  Branch (713:21): [True: 302, False: 42.0k]
  ------------------
  714|    302|                        log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    302|        ({                                                              \
  |  |  354|    302|                int _level = (level), _e = (error);                     \
  |  |  355|    302|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 302]
  |  |  ------------------
  |  |  356|    302|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    302|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    302|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    302|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    302|        })
  ------------------
  715|    302|                                   "Failed to split allowed ips \"%s\" option: %m", rvalue);
  716|    302|                        break;
  717|    302|                }
  718|       |
  719|  42.0k|                r = in_addr_prefix_from_string_auto(word, &family, &addr, &prefixlen);
  720|  42.0k|                if (r < 0) {
  ------------------
  |  Branch (720:21): [True: 14.8k, False: 27.1k]
  ------------------
  721|  14.8k|                        log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|  14.8k|        ({                                                              \
  |  |  354|  14.8k|                int _level = (level), _e = (error);                     \
  |  |  355|  14.8k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 14.8k]
  |  |  ------------------
  |  |  356|  14.8k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  14.8k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  14.8k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  14.8k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  14.8k|        })
  ------------------
  722|  14.8k|                                   "Network address is invalid, ignoring assignment: %s", word);
  723|  14.8k|                        continue;
  724|  14.8k|                }
  725|       |
  726|  27.1k|                masked = addr;
  727|  27.1k|                assert_se(in_addr_mask(family, &masked, prefixlen) >= 0);
  ------------------
  |  |   65|  27.1k|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  27.1k|        do {                                                            \
  |  |  |  |   59|  27.1k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  27.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 27.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  27.1k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  27.1k|        } while (false)
  |  |  ------------------
  ------------------
  728|  27.1k|                if (!in_addr_equal(family, &masked, &addr))
  ------------------
  |  Branch (728:21): [True: 3.20k, False: 23.9k]
  ------------------
  729|  3.20k|                        log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|  3.20k|        ({                                                              \
  |  |  354|  3.20k|                int _level = (level), _e = (error);                     \
  |  |  355|  3.20k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 3.20k]
  |  |  ------------------
  |  |  356|  3.20k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  |  Branch (356:125): [Folded - Ignored]
  |  |  ------------------
  |  |  357|  3.20k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  3.20k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  3.20k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  3.20k|        })
  ------------------
  730|  27.1k|                                   "Specified address '%s' is not properly masked, assuming '%s'.",
  731|  27.1k|                                   word,
  732|  27.1k|                                   IN_ADDR_PREFIX_TO_STRING(family, &masked, prefixlen));
  733|       |
  734|  27.1k|                ipmask = new(WireguardIPmask, 1);
  ------------------
  |  |   17|  27.1k|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
  735|  27.1k|                if (!ipmask)
  ------------------
  |  Branch (735:21): [True: 0, False: 27.1k]
  ------------------
  736|      0|                        return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  737|       |
  738|  27.1k|                *ipmask = (WireguardIPmask) {
  739|  27.1k|                        .family = family,
  740|  27.1k|                        .ip = masked,
  741|  27.1k|                        .cidr = prefixlen,
  742|  27.1k|                };
  743|       |
  744|  27.1k|                LIST_PREPEND(ipmasks, peer->ipmasks, ipmask);
  ------------------
  |  |   31|  27.1k|        ({                                                              \
  |  |   32|  27.1k|                typeof(*(head)) **_head = &(head), *_item = (item);     \
  |  |   33|  27.1k|                assert(_item);                                          \
  |  |  ------------------
  |  |  |  |   72|  27.1k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|  27.1k|        do {                                                            \
  |  |  |  |  |  |   59|  27.1k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   95|  27.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 27.1k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   60|  27.1k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   61|  27.1k|        } while (false)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   34|  27.1k|                if ((_item->name##_next = *_head))                      \
  |  |  ------------------
  |  |  |  Branch (34:21): [True: 24.8k, False: 2.29k]
  |  |  ------------------
  |  |   35|  27.1k|                        _item->name##_next->name##_prev = _item;        \
  |  |   36|  27.1k|                _item->name##_prev = NULL;                              \
  |  |   37|  27.1k|                *_head = _item;                                         \
  |  |   38|  27.1k|                _item;                                                  \
  |  |   39|  27.1k|        })
  ------------------
  745|  27.1k|        }
  746|       |
  747|  4.17k|        TAKE_PTR(peer);
  ------------------
  |  |  388|  4.17k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  4.17k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  4.17k|        ({                                                       \
  |  |  |  |  |  |  381|  4.17k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  4.17k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  4.17k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  4.17k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  4.17k|                _var_;                                           \
  |  |  |  |  |  |  386|  4.17k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  748|  4.17k|        return 0;
  749|  4.17k|}
config_parse_wireguard_endpoint:
  761|  15.2k|                void *userdata) {
  762|       |
  763|  15.2k|        Wireguard *w = WIREGUARD(userdata);
  764|  15.2k|        _cleanup_(wireguard_peer_free_or_set_invalidp) WireguardPeer *peer = NULL;
  ------------------
  |  |   78|  15.2k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  765|  15.2k|        _cleanup_free_ char *cred = NULL;
  ------------------
  |  |   82|  15.2k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  15.2k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  766|  15.2k|        const char *cred_name, *endpoint;
  767|  15.2k|        uint16_t port;
  768|  15.2k|        int r;
  769|       |
  770|  15.2k|        assert(filename);
  ------------------
  |  |   72|  15.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  15.2k|        do {                                                            \
  |  |  |  |   59|  15.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  15.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 15.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  15.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  15.2k|        } while (false)
  |  |  ------------------
  ------------------
  771|  15.2k|        assert(rvalue);
  ------------------
  |  |   72|  15.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  15.2k|        do {                                                            \
  |  |  |  |   59|  15.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  15.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 15.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  15.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  15.2k|        } while (false)
  |  |  ------------------
  ------------------
  772|       |
  773|  15.2k|        r = wireguard_peer_new_static(w, filename, section_line, &peer);
  774|  15.2k|        if (r < 0)
  ------------------
  |  Branch (774:13): [True: 0, False: 15.2k]
  ------------------
  775|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  776|       |
  777|  15.2k|        cred_name = startswith(rvalue, "@");
  778|  15.2k|        if (cred_name) {
  ------------------
  |  Branch (778:13): [True: 1.51k, False: 13.7k]
  ------------------
  779|  1.51k|                r = read_credential(cred_name, (void**) &cred, /* ret_size = */ NULL);
  780|  1.51k|                if (r == -ENOMEM)
  ------------------
  |  Branch (780:21): [True: 0, False: 1.51k]
  ------------------
  781|      0|                        return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  782|  1.51k|                if (r < 0) {
  ------------------
  |  Branch (782:21): [True: 1.51k, False: 0]
  ------------------
  783|  1.51k|                        log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|  1.51k|        ({                                                              \
  |  |  354|  1.51k|                int _level = (level), _e = (error);                     \
  |  |  355|  1.51k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 1.51k]
  |  |  ------------------
  |  |  356|  1.51k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  1.51k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  1.51k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  1.51k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  1.51k|        })
  ------------------
  784|  1.51k|                                   "Failed to read credential for wireguard endpoint, ignoring assignment: %m");
  785|  1.51k|                        return 0;
  786|  1.51k|                }
  787|       |
  788|      0|                endpoint = strstrip(cred);
  789|      0|        } else
  790|  13.7k|                endpoint = rvalue;
  791|       |
  792|  13.7k|        union in_addr_union addr;
  793|  13.7k|        int family;
  794|       |
  795|  13.7k|        r = in_addr_port_ifindex_name_from_string_auto(endpoint, &family, &addr, &port, NULL, NULL);
  796|  13.7k|        if (r >= 0) {
  ------------------
  |  Branch (796:13): [True: 791, False: 12.9k]
  ------------------
  797|    791|                if (family == AF_INET)
  ------------------
  |  Branch (797:21): [True: 391, False: 400]
  ------------------
  798|    391|                        peer->endpoint.in = (struct sockaddr_in) {
  799|    391|                                .sin_family = AF_INET,
  800|    391|                                .sin_addr = addr.in,
  801|    391|                                .sin_port = htobe16(port),
  802|    391|                        };
  803|    400|                else if (family == AF_INET6)
  ------------------
  |  Branch (803:26): [True: 400, False: 0]
  ------------------
  804|    400|                        peer->endpoint.in6 = (struct sockaddr_in6) {
  805|    400|                                .sin6_family = AF_INET6,
  806|    400|                                .sin6_addr = addr.in6,
  807|    400|                                .sin6_port = htobe16(port),
  808|    400|                        };
  809|      0|                else
  810|      0|                        assert_not_reached();
  ------------------
  |  |   76|      0|        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  811|       |
  812|    791|                peer->endpoint_host = mfree(peer->endpoint_host);
  ------------------
  |  |  404|    791|        ({                                      \
  |  |  405|    791|                free(memory);                   \
  |  |  406|    791|                (typeof(memory)) NULL;          \
  |  |  407|    791|        })
  ------------------
  813|    791|                peer->endpoint_port = mfree(peer->endpoint_port);
  ------------------
  |  |  404|    791|        ({                                      \
  |  |  405|    791|                free(memory);                   \
  |  |  406|    791|                (typeof(memory)) NULL;          \
  |  |  407|    791|        })
  ------------------
  814|       |
  815|    791|                TAKE_PTR(peer);
  ------------------
  |  |  388|    791|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|    791|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|    791|        ({                                                       \
  |  |  |  |  |  |  381|    791|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|    791|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|    791|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|    791|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|    791|                _var_;                                           \
  |  |  |  |  |  |  386|    791|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  816|    791|                return 0;
  817|    791|        }
  818|       |
  819|  12.9k|        _cleanup_free_ char *host = NULL;
  ------------------
  |  |   82|  12.9k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  12.9k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  820|  12.9k|        const char *p;
  821|       |
  822|  12.9k|        p = strrchr(endpoint, ':');
  823|  12.9k|        if (!p) {
  ------------------
  |  Branch (823:13): [True: 7.01k, False: 5.91k]
  ------------------
  824|  7.01k|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|  7.01k|        ({                                                              \
  |  |  354|  7.01k|                int _level = (level), _e = (error);                     \
  |  |  355|  7.01k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 7.01k]
  |  |  ------------------
  |  |  356|  7.01k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  7.01k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  7.01k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  7.01k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  7.01k|        })
  ------------------
  825|  7.01k|                           "Unable to find port of endpoint, ignoring assignment: %s",
  826|  7.01k|                           rvalue); /* We log the original assignment instead of resolved credential here,
  827|       |                                       as the latter might be previously encrypted and we'd expose them in
  828|       |                                       unprotected logs otherwise. */
  829|  7.01k|                return 0;
  830|  7.01k|        }
  831|       |
  832|  5.91k|        host = strndup(endpoint, p - endpoint);
  833|  5.91k|        if (!host)
  ------------------
  |  Branch (833:13): [True: 0, False: 5.91k]
  ------------------
  834|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  835|  5.91k|        p++;
  836|       |
  837|  5.91k|        if (!dns_name_is_valid(host)) {
  ------------------
  |  Branch (837:13): [True: 3.88k, False: 2.03k]
  ------------------
  838|  3.88k|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|  3.88k|        ({                                                              \
  |  |  354|  3.88k|                int _level = (level), _e = (error);                     \
  |  |  355|  3.88k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 3.88k]
  |  |  ------------------
  |  |  356|  3.88k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  3.88k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  3.88k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  3.88k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  3.88k|        })
  ------------------
  839|  3.88k|                           "Invalid domain name of endpoint, ignoring assignment: %s",
  840|  3.88k|                           rvalue);
  841|  3.88k|                return 0;
  842|  3.88k|        }
  843|       |
  844|  2.03k|        r = parse_ip_port(p, &port);
  845|  2.03k|        if (r < 0) {
  ------------------
  |  Branch (845:13): [True: 1.41k, False: 616]
  ------------------
  846|  1.41k|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|  1.41k|        ({                                                              \
  |  |  354|  1.41k|                int _level = (level), _e = (error);                     \
  |  |  355|  1.41k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 1.41k]
  |  |  ------------------
  |  |  356|  1.41k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  1.41k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  1.41k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  1.41k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  1.41k|        })
  ------------------
  847|  1.41k|                           "Invalid port of endpoint, ignoring assignment: %s",
  848|  1.41k|                           rvalue);
  849|  1.41k|                return 0;
  850|  1.41k|        }
  851|       |
  852|    616|        peer->endpoint = (union sockaddr_union) {};
  853|       |
  854|    616|        free_and_replace(peer->endpoint_host, host);
  ------------------
  |  |   49|    616|        free_and_replace_full(a, b, free)
  |  |  ------------------
  |  |  |  |   10|    616|        ({                                      \
  |  |  |  |   11|    616|                typeof(a)* _a = &(a);           \
  |  |  |  |   12|    616|                typeof(b)* _b = &(b);           \
  |  |  |  |   13|    616|                free_func(*_a);                 \
  |  |  |  |   14|    616|                *_a = *_b;                      \
  |  |  |  |   15|    616|                *_b = NULL;                     \
  |  |  |  |   16|    616|                0;                              \
  |  |  |  |   17|    616|        })
  |  |  ------------------
  ------------------
  855|       |
  856|    616|        r = free_and_strdup(&peer->endpoint_port, p);
  857|    616|        if (r < 0)
  ------------------
  |  Branch (857:13): [True: 0, False: 616]
  ------------------
  858|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  859|       |
  860|    616|        TAKE_PTR(peer); /* The peer may already have been in the hash map, that is fine too. */
  ------------------
  |  |  388|    616|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|    616|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|    616|        ({                                                       \
  |  |  |  |  |  |  381|    616|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|    616|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|    616|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|    616|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|    616|                _var_;                                           \
  |  |  |  |  |  |  386|    616|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  861|    616|        return 0;
  862|    616|}
config_parse_wireguard_keepalive:
  874|    704|                void *userdata) {
  875|       |
  876|    704|        assert(rvalue);
  ------------------
  |  |   72|    704|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    704|        do {                                                            \
  |  |  |  |   59|    704|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    704|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 704]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    704|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    704|        } while (false)
  |  |  ------------------
  ------------------
  877|       |
  878|    704|        Wireguard *w = WIREGUARD(data);
  879|    704|        _cleanup_(wireguard_peer_free_or_set_invalidp) WireguardPeer *peer = NULL;
  ------------------
  |  |   78|    704|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  880|    704|        uint16_t keepalive = 0;
  881|    704|        int r;
  882|       |
  883|    704|        r = wireguard_peer_new_static(w, filename, section_line, &peer);
  884|    704|        if (r < 0)
  ------------------
  |  Branch (884:13): [True: 0, False: 704]
  ------------------
  885|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  886|       |
  887|    704|        if (streq(rvalue, "off"))
  ------------------
  |  |   46|    704|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 204, False: 500]
  |  |  ------------------
  ------------------
  888|    204|                keepalive = 0;
  889|    500|        else {
  890|    500|                r = safe_atou16(rvalue, &keepalive);
  891|    500|                if (r < 0) {
  ------------------
  |  Branch (891:21): [True: 301, False: 199]
  ------------------
  892|    301|                        log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    301|        ({                                                              \
  |  |  354|    301|                int _level = (level), _e = (error);                     \
  |  |  355|    301|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 301]
  |  |  ------------------
  |  |  356|    301|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    301|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    301|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    301|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    301|        })
  ------------------
  893|    301|                                   "Failed to parse \"%s\" as keepalive interval (range 0–65535), ignoring assignment: %m",
  894|    301|                                   rvalue);
  895|    301|                        return 0;
  896|    301|                }
  897|    500|        }
  898|       |
  899|    403|        peer->persistent_keepalive_interval = keepalive;
  900|       |
  901|    403|        TAKE_PTR(peer);
  ------------------
  |  |  388|    403|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|    403|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|    403|        ({                                                       \
  |  |  |  |  |  |  381|    403|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|    403|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|    403|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|    403|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|    403|                _var_;                                           \
  |  |  |  |  |  |  386|    403|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  902|    403|        return 0;
  903|    704|}
config_parse_wireguard_route_table:
  915|  1.77k|                void *userdata) {
  916|       |
  917|  1.77k|        NetDev *netdev = ASSERT_PTR(userdata);
  ------------------
  |  |   81|  1.77k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  1.77k|        ({                                 \
  |  |  |  |   85|  1.77k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  1.77k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  1.77k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  1.77k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  1.77k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  1.77k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  1.77k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.77k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  1.77k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  1.77k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  1.77k|                var;                       \
  |  |  |  |   88|  1.77k|        })
  |  |  ------------------
  ------------------
  918|  1.77k|        uint32_t *table = ASSERT_PTR(data);
  ------------------
  |  |   81|  1.77k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  1.77k|        ({                                 \
  |  |  |  |   85|  1.77k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  1.77k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  1.77k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  1.77k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  1.77k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  1.77k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  1.77k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.77k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  1.77k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  1.77k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  1.77k|                var;                       \
  |  |  |  |   88|  1.77k|        })
  |  |  ------------------
  ------------------
  919|  1.77k|        int r;
  920|       |
  921|  1.77k|        assert(filename);
  ------------------
  |  |   72|  1.77k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.77k|        do {                                                            \
  |  |  |  |   59|  1.77k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.77k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.77k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.77k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.77k|        } while (false)
  |  |  ------------------
  ------------------
  922|  1.77k|        assert(lvalue);
  ------------------
  |  |   72|  1.77k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.77k|        do {                                                            \
  |  |  |  |   59|  1.77k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.77k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.77k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.77k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.77k|        } while (false)
  |  |  ------------------
  ------------------
  923|  1.77k|        assert(rvalue);
  ------------------
  |  |   72|  1.77k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.77k|        do {                                                            \
  |  |  |  |   59|  1.77k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.77k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.77k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.77k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.77k|        } while (false)
  |  |  ------------------
  ------------------
  924|       |
  925|  1.77k|        if (isempty(rvalue) || parse_boolean(rvalue) == 0) {
  ------------------
  |  Branch (925:13): [True: 197, False: 1.57k]
  |  Branch (925:32): [True: 323, False: 1.25k]
  ------------------
  926|    520|                *table = 0; /* Disabled. */
  927|    520|                return 0;
  928|    520|        }
  929|       |
  930|  1.25k|        r = manager_get_route_table_from_string(netdev->manager, rvalue, table);
  931|  1.25k|        if (r < 0) {
  ------------------
  |  Branch (931:13): [True: 417, False: 834]
  ------------------
  932|    417|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    417|        ({                                                              \
  |  |  354|    417|                int _level = (level), _e = (error);                     \
  |  |  355|    417|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 417]
  |  |  ------------------
  |  |  356|    417|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    417|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    417|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    417|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    417|        })
  ------------------
  933|    417|                           "Failed to parse %s=, ignoring assignment: %s",
  934|    417|                           lvalue, rvalue);
  935|    417|                return 0;
  936|    417|        }
  937|       |
  938|    834|        return 0;
  939|  1.25k|}
config_parse_wireguard_peer_route_table:
  951|  2.02k|                void *userdata) {
  952|       |
  953|  2.02k|        Wireguard *w = WIREGUARD(userdata);
  954|  2.02k|        _cleanup_(wireguard_peer_free_or_set_invalidp) WireguardPeer *peer = NULL;
  ------------------
  |  |   78|  2.02k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  955|  2.02k|        int r;
  956|       |
  957|  2.02k|        assert(filename);
  ------------------
  |  |   72|  2.02k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.02k|        do {                                                            \
  |  |  |  |   59|  2.02k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.02k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.02k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.02k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.02k|        } while (false)
  |  |  ------------------
  ------------------
  958|  2.02k|        assert(lvalue);
  ------------------
  |  |   72|  2.02k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.02k|        do {                                                            \
  |  |  |  |   59|  2.02k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.02k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.02k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.02k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.02k|        } while (false)
  |  |  ------------------
  ------------------
  959|  2.02k|        assert(rvalue);
  ------------------
  |  |   72|  2.02k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.02k|        do {                                                            \
  |  |  |  |   59|  2.02k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.02k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.02k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.02k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.02k|        } while (false)
  |  |  ------------------
  ------------------
  960|  2.02k|        assert(NETDEV(w)->manager);
  ------------------
  |  |   72|  2.02k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.02k|        do {                                                            \
  |  |  |  |   59|  2.02k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.02k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.02k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.02k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.02k|        } while (false)
  |  |  ------------------
  ------------------
  961|       |
  962|  2.02k|        r = wireguard_peer_new_static(w, filename, section_line, &peer);
  963|  2.02k|        if (r < 0)
  ------------------
  |  Branch (963:13): [True: 0, False: 2.02k]
  ------------------
  964|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  965|       |
  966|  2.02k|        if (isempty(rvalue)) {
  ------------------
  |  Branch (966:13): [True: 323, False: 1.69k]
  ------------------
  967|    323|                peer->route_table_set = false; /* Use the table specified in [WireGuard] section. */
  968|    323|                TAKE_PTR(peer);
  ------------------
  |  |  388|    323|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|    323|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|    323|        ({                                                       \
  |  |  |  |  |  |  381|    323|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|    323|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|    323|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|    323|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|    323|                _var_;                                           \
  |  |  |  |  |  |  386|    323|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  969|    323|                return 0;
  970|    323|        }
  971|       |
  972|  1.69k|        if (parse_boolean(rvalue) == 0) {
  ------------------
  |  Branch (972:13): [True: 259, False: 1.43k]
  ------------------
  973|    259|                peer->route_table = 0; /* Disabled. */
  974|    259|                peer->route_table_set = true;
  975|    259|                TAKE_PTR(peer);
  ------------------
  |  |  388|    259|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|    259|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|    259|        ({                                                       \
  |  |  |  |  |  |  381|    259|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|    259|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|    259|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|    259|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|    259|                _var_;                                           \
  |  |  |  |  |  |  386|    259|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  976|    259|                return 0;
  977|    259|        }
  978|       |
  979|  1.43k|        r = manager_get_route_table_from_string(NETDEV(w)->manager, rvalue, &peer->route_table);
  ------------------
  |  |  216|  1.43k|#define NETDEV(n) (&(n)->meta)
  ------------------
  980|  1.43k|        if (r < 0) {
  ------------------
  |  Branch (980:13): [True: 317, False: 1.12k]
  ------------------
  981|    317|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    317|        ({                                                              \
  |  |  354|    317|                int _level = (level), _e = (error);                     \
  |  |  355|    317|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 317]
  |  |  ------------------
  |  |  356|    317|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    317|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    317|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    317|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    317|        })
  ------------------
  982|    317|                           "Failed to parse %s=, ignoring assignment: %s",
  983|    317|                           lvalue, rvalue);
  984|    317|                return 0;
  985|    317|        }
  986|       |
  987|  1.12k|        peer->route_table_set = true;
  988|  1.12k|        TAKE_PTR(peer);
  ------------------
  |  |  388|  1.12k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  1.12k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  1.12k|        ({                                                       \
  |  |  |  |  |  |  381|  1.12k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  1.12k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  1.12k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  1.12k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  1.12k|                _var_;                                           \
  |  |  |  |  |  |  386|  1.12k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  989|  1.12k|        return 0;
  990|  1.43k|}
config_parse_wireguard_route_priority:
 1002|    715|                void *userdata) {
 1003|       |
 1004|    715|        uint32_t *priority = ASSERT_PTR(data);
  ------------------
  |  |   81|    715|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    715|        ({                                 \
  |  |  |  |   85|    715|                typeof(expr) var = (expr); \
  |  |  |  |   86|    715|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    715|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    715|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    715|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    715|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    715|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 715]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    715|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    715|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    715|                var;                       \
  |  |  |  |   88|    715|        })
  |  |  ------------------
  ------------------
 1005|    715|        int r;
 1006|       |
 1007|    715|        assert(filename);
  ------------------
  |  |   72|    715|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    715|        do {                                                            \
  |  |  |  |   59|    715|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    715|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 715]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    715|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    715|        } while (false)
  |  |  ------------------
  ------------------
 1008|    715|        assert(lvalue);
  ------------------
  |  |   72|    715|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    715|        do {                                                            \
  |  |  |  |   59|    715|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    715|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 715]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    715|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    715|        } while (false)
  |  |  ------------------
  ------------------
 1009|    715|        assert(rvalue);
  ------------------
  |  |   72|    715|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    715|        do {                                                            \
  |  |  |  |   59|    715|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    715|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 715]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    715|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    715|        } while (false)
  |  |  ------------------
  ------------------
 1010|       |
 1011|    715|        if (isempty(rvalue)) {
  ------------------
  |  Branch (1011:13): [True: 194, False: 521]
  ------------------
 1012|    194|                *priority = 0;
 1013|    194|                return 0;
 1014|    194|        }
 1015|       |
 1016|    521|        r = safe_atou32(rvalue, priority);
 1017|    521|        if (r < 0) {
  ------------------
  |  Branch (1017:13): [True: 219, False: 302]
  ------------------
 1018|    219|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    219|        ({                                                              \
  |  |  354|    219|                int _level = (level), _e = (error);                     \
  |  |  355|    219|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 219]
  |  |  ------------------
  |  |  356|    219|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    219|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    219|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    219|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    219|        })
  ------------------
 1019|    219|                           "Could not parse route priority \"%s\", ignoring assignment: %m", rvalue);
 1020|    219|                return 0;
 1021|    219|        }
 1022|       |
 1023|    302|        return 0;
 1024|    521|}
config_parse_wireguard_peer_route_priority:
 1036|  1.37k|                void *userdata) {
 1037|       |
 1038|  1.37k|        _cleanup_(wireguard_peer_free_or_set_invalidp) WireguardPeer *peer = NULL;
  ------------------
  |  |   78|  1.37k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
 1039|  1.37k|        Wireguard *w;
 1040|  1.37k|        int r;
 1041|       |
 1042|  1.37k|        assert(filename);
  ------------------
  |  |   72|  1.37k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.37k|        do {                                                            \
  |  |  |  |   59|  1.37k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.37k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.37k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.37k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.37k|        } while (false)
  |  |  ------------------
  ------------------
 1043|  1.37k|        assert(lvalue);
  ------------------
  |  |   72|  1.37k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.37k|        do {                                                            \
  |  |  |  |   59|  1.37k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.37k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.37k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.37k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.37k|        } while (false)
  |  |  ------------------
  ------------------
 1044|  1.37k|        assert(rvalue);
  ------------------
  |  |   72|  1.37k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.37k|        do {                                                            \
  |  |  |  |   59|  1.37k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.37k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.37k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.37k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.37k|        } while (false)
  |  |  ------------------
  ------------------
 1045|  1.37k|        assert(userdata);
  ------------------
  |  |   72|  1.37k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.37k|        do {                                                            \
  |  |  |  |   59|  1.37k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.37k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.37k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.37k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.37k|        } while (false)
  |  |  ------------------
  ------------------
 1046|       |
 1047|  1.37k|        w = WIREGUARD(userdata);
 1048|  1.37k|        assert(w);
  ------------------
  |  |   72|  1.37k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.37k|        do {                                                            \
  |  |  |  |   59|  1.37k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.37k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.37k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.37k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.37k|        } while (false)
  |  |  ------------------
  ------------------
 1049|       |
 1050|  1.37k|        r = wireguard_peer_new_static(w, filename, section_line, &peer);
 1051|  1.37k|        if (r < 0)
  ------------------
  |  Branch (1051:13): [True: 0, False: 1.37k]
  ------------------
 1052|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1053|       |
 1054|  1.37k|        if (isempty(rvalue)) {
  ------------------
  |  Branch (1054:13): [True: 196, False: 1.17k]
  ------------------
 1055|    196|                peer->route_priority_set = false; /* Use the priority specified in [WireGuard] section. */
 1056|    196|                TAKE_PTR(peer);
  ------------------
  |  |  388|    196|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|    196|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|    196|        ({                                                       \
  |  |  |  |  |  |  381|    196|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|    196|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|    196|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|    196|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|    196|                _var_;                                           \
  |  |  |  |  |  |  386|    196|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1057|    196|                return 0;
 1058|    196|        }
 1059|       |
 1060|  1.17k|        r = safe_atou32(rvalue, &peer->route_priority);
 1061|  1.17k|        if (r < 0) {
  ------------------
  |  Branch (1061:13): [True: 226, False: 953]
  ------------------
 1062|    226|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    226|        ({                                                              \
  |  |  354|    226|                int _level = (level), _e = (error);                     \
  |  |  355|    226|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 226]
  |  |  ------------------
  |  |  356|    226|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    226|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    226|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    226|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    226|        })
  ------------------
 1063|    226|                           "Could not parse route priority \"%s\", ignoring assignment: %m", rvalue);
 1064|    226|                return 0;
 1065|    226|        }
 1066|       |
 1067|    953|        peer->route_priority_set = true;
 1068|    953|        TAKE_PTR(peer);
  ------------------
  |  |  388|    953|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|    953|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|    953|        ({                                                       \
  |  |  |  |  |  |  381|    953|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|    953|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|    953|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|    953|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|    953|                _var_;                                           \
  |  |  |  |  |  |  386|    953|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1069|    953|        return 0;
 1070|  1.17k|}
wireguard.c:wireguard_decode_key_and_warn:
  494|  10.1k|                const char *lvalue) {
  495|       |
  496|  10.1k|        _cleanup_(erase_and_freep) void *key = NULL;
  ------------------
  |  |   78|  10.1k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  497|  10.1k|        _cleanup_(erase_and_freep) char *cred = NULL;
  ------------------
  |  |   78|  10.1k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  498|  10.1k|        const char *cred_name;
  499|  10.1k|        size_t len;
  500|  10.1k|        int r;
  501|       |
  502|  10.1k|        assert(rvalue);
  ------------------
  |  |   72|  10.1k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  10.1k|        do {                                                            \
  |  |  |  |   59|  10.1k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  10.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 10.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  10.1k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  10.1k|        } while (false)
  |  |  ------------------
  ------------------
  503|  10.1k|        assert(ret);
  ------------------
  |  |   72|  10.1k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  10.1k|        do {                                                            \
  |  |  |  |   59|  10.1k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  10.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 10.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  10.1k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  10.1k|        } while (false)
  |  |  ------------------
  ------------------
  504|  10.1k|        assert(filename);
  ------------------
  |  |   72|  10.1k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  10.1k|        do {                                                            \
  |  |  |  |   59|  10.1k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  10.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 10.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  10.1k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  10.1k|        } while (false)
  |  |  ------------------
  ------------------
  505|  10.1k|        assert(lvalue);
  ------------------
  |  |   72|  10.1k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  10.1k|        do {                                                            \
  |  |  |  |   59|  10.1k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  10.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 10.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  10.1k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  10.1k|        } while (false)
  |  |  ------------------
  ------------------
  506|       |
  507|  10.1k|        if (isempty(rvalue)) {
  ------------------
  |  Branch (507:13): [True: 790, False: 9.37k]
  ------------------
  508|    790|                memzero(ret, WG_KEY_LEN);
  ------------------
  |  |   17|    790|        ({                                                      \
  |  |   18|    790|                size_t _l_ = (l);                               \
  |  |   19|    790|                _l_ > 0 ? memset((x), 0, _l_) : (x);            \
  |  |  ------------------
  |  |  |  Branch (19:17): [True: 790, False: 0]
  |  |  ------------------
  |  |   20|    790|        })
  ------------------
  509|    790|                return 0;
  510|    790|        }
  511|       |
  512|  9.37k|        cred_name = startswith(rvalue, "@");
  513|  9.37k|        if (cred_name) {
  ------------------
  |  Branch (513:13): [True: 633, False: 8.73k]
  ------------------
  514|    633|                r = read_credential(cred_name, (void**) &cred, /* ret_size = */ NULL);
  515|    633|                if (r == -ENOMEM)
  ------------------
  |  Branch (515:21): [True: 0, False: 633]
  ------------------
  516|      0|                        return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  517|    633|                if (r < 0) {
  ------------------
  |  Branch (517:21): [True: 633, False: 0]
  ------------------
  518|    633|                        log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    633|        ({                                                              \
  |  |  354|    633|                int _level = (level), _e = (error);                     \
  |  |  355|    633|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 633]
  |  |  ------------------
  |  |  356|    633|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    633|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    633|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    633|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    633|        })
  ------------------
  519|    633|                                   "Failed to read credential for wireguard key (%s=), ignoring assignment: %m",
  520|    633|                                   lvalue);
  521|    633|                        return 0;
  522|    633|                }
  523|       |
  524|  8.73k|        } else if (!streq(lvalue, "PublicKey"))
  ------------------
  |  |   46|  8.73k|#define streq(a,b) (strcmp((a),(b)) == 0)
  ------------------
  |  Branch (524:20): [True: 4.68k, False: 4.05k]
  ------------------
  525|  4.68k|                (void) warn_file_is_world_accessible(filename, NULL, unit, line);
  526|       |
  527|  8.73k|        r = unbase64mem_full(cred ?: rvalue, SIZE_MAX, /* secure = */ true, &key, &len);
  ------------------
  |  Branch (527:30): [True: 0, False: 8.73k]
  ------------------
  528|  8.73k|        if (r == -ENOMEM)
  ------------------
  |  Branch (528:13): [True: 0, False: 8.73k]
  ------------------
  529|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  530|  8.73k|        if (r < 0) {
  ------------------
  |  Branch (530:13): [True: 4.68k, False: 4.05k]
  ------------------
  531|  4.68k|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|  4.68k|        ({                                                              \
  |  |  354|  4.68k|                int _level = (level), _e = (error);                     \
  |  |  355|  4.68k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 4.68k]
  |  |  ------------------
  |  |  356|  4.68k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  4.68k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  4.68k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  4.68k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  4.68k|        })
  ------------------
  532|  4.68k|                           "Failed to decode wireguard key provided by %s=, ignoring assignment: %m", lvalue);
  533|  4.68k|                return 0;
  534|  4.68k|        }
  535|  4.05k|        if (len != WG_KEY_LEN) {
  ------------------
  |  Branch (535:13): [True: 887, False: 3.16k]
  ------------------
  536|    887|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    887|        ({                                                              \
  |  |  354|    887|                int _level = (level), _e = (error);                     \
  |  |  355|    887|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 887]
  |  |  ------------------
  |  |  356|    887|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    887|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    887|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    887|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    887|        })
  ------------------
  537|    887|                           "Wireguard key provided by %s= has invalid length (%zu bytes), ignoring assignment.",
  538|    887|                           lvalue, len);
  539|    887|                return 0;
  540|    887|        }
  541|       |
  542|  3.16k|        memcpy(ret, key, WG_KEY_LEN);
  543|  3.16k|        return 0;
  544|  4.05k|}
wireguard.c:wireguard_peer_free:
   45|  12.0k|static WireguardPeer* wireguard_peer_free(WireguardPeer *peer) {
   46|  12.0k|        if (!peer)
  ------------------
  |  Branch (46:13): [True: 0, False: 12.0k]
  ------------------
   47|      0|                return NULL;
   48|       |
   49|  12.0k|        if (peer->wireguard) {
  ------------------
  |  Branch (49:13): [True: 12.0k, False: 0]
  ------------------
   50|  12.0k|                LIST_REMOVE(peers, peer->wireguard->peers, peer);
  ------------------
  |  |   51|  12.0k|        ({                                                              \
  |  |   52|  12.0k|                typeof(*(head)) **_head = &(head), *_item = (item);     \
  |  |   53|  12.0k|                assert(_item);                                          \
  |  |  ------------------
  |  |  |  |   72|  12.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|  12.0k|        do {                                                            \
  |  |  |  |  |  |   59|  12.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   95|  12.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 12.0k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   60|  12.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   61|  12.0k|        } while (false)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|  12.0k|                if (_item->name##_next)                                 \
  |  |  ------------------
  |  |  |  Branch (54:21): [True: 10.1k, False: 1.84k]
  |  |  ------------------
  |  |   55|  12.0k|                        _item->name##_next->name##_prev = _item->name##_prev; \
  |  |   56|  12.0k|                if (_item->name##_prev)                                 \
  |  |  ------------------
  |  |  |  Branch (56:21): [True: 8.24k, False: 3.79k]
  |  |  ------------------
  |  |   57|  12.0k|                        _item->name##_prev->name##_next = _item->name##_next; \
  |  |   58|  12.0k|                else {                                                  \
  |  |   59|  3.79k|                        assert(*_head == _item);                        \
  |  |  ------------------
  |  |  |  |   72|  3.79k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|  3.79k|        do {                                                            \
  |  |  |  |  |  |   59|  3.79k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   95|  3.79k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.79k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   60|  3.79k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   61|  3.79k|        } while (false)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|  3.79k|                        *_head = _item->name##_next;                    \
  |  |   61|  3.79k|                }                                                       \
  |  |   62|  12.0k|                _item->name##_next = _item->name##_prev = NULL;         \
  |  |   63|  12.0k|                _item;                                                  \
  |  |   64|  12.0k|        })
  ------------------
   51|       |
   52|  12.0k|                if (peer->section)
  ------------------
  |  Branch (52:21): [True: 12.0k, False: 0]
  ------------------
   53|  12.0k|                        hashmap_remove(peer->wireguard->peers_by_section, peer->section);
   54|  12.0k|        }
   55|       |
   56|  12.0k|        config_section_free(peer->section);
   57|       |
   58|  12.0k|        wireguard_peer_clear_ipmasks(peer);
   59|       |
   60|  12.0k|        free(peer->endpoint_host);
   61|  12.0k|        free(peer->endpoint_port);
   62|  12.0k|        free(peer->public_key_file);
   63|  12.0k|        free(peer->preshared_key_file);
   64|  12.0k|        explicit_bzero_safe(peer->preshared_key, WG_KEY_LEN);
   65|       |
   66|  12.0k|        sd_event_source_disable_unref(peer->resolve_retry_event_source);
   67|  12.0k|        sd_resolve_query_unref(peer->resolve_query);
   68|       |
   69|  12.0k|        return mfree(peer);
  ------------------
  |  |  404|  12.0k|        ({                                      \
  |  |  405|  12.0k|                free(memory);                   \
  |  |  406|  12.0k|                (typeof(memory)) NULL;          \
  |  |  407|  12.0k|        })
  ------------------
   70|  12.0k|}
wireguard.c:wireguard_peer_new_static:
   79|  31.7k|static int wireguard_peer_new_static(Wireguard *w, const char *filename, unsigned section_line, WireguardPeer **ret) {
   80|  31.7k|        _cleanup_(config_section_freep) ConfigSection *n = NULL;
  ------------------
  |  |   78|  31.7k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
   81|  31.7k|        _cleanup_(wireguard_peer_freep) WireguardPeer *peer = NULL;
  ------------------
  |  |   78|  31.7k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
   82|  31.7k|        int r;
   83|       |
   84|  31.7k|        assert(w);
  ------------------
  |  |   72|  31.7k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  31.7k|        do {                                                            \
  |  |  |  |   59|  31.7k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  31.7k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 31.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  31.7k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  31.7k|        } while (false)
  |  |  ------------------
  ------------------
   85|  31.7k|        assert(ret);
  ------------------
  |  |   72|  31.7k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  31.7k|        do {                                                            \
  |  |  |  |   59|  31.7k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  31.7k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 31.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  31.7k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  31.7k|        } while (false)
  |  |  ------------------
  ------------------
   86|  31.7k|        assert(filename);
  ------------------
  |  |   72|  31.7k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  31.7k|        do {                                                            \
  |  |  |  |   59|  31.7k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  31.7k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 31.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  31.7k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  31.7k|        } while (false)
  |  |  ------------------
  ------------------
   87|  31.7k|        assert(section_line > 0);
  ------------------
  |  |   72|  31.7k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  31.7k|        do {                                                            \
  |  |  |  |   59|  31.7k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  31.7k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 31.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  31.7k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  31.7k|        } while (false)
  |  |  ------------------
  ------------------
   88|       |
   89|  31.7k|        r = config_section_new(filename, section_line, &n);
   90|  31.7k|        if (r < 0)
  ------------------
  |  Branch (90:13): [True: 0, False: 31.7k]
  ------------------
   91|      0|                return r;
   92|       |
   93|  31.7k|        peer = hashmap_get(w->peers_by_section, n);
   94|  31.7k|        if (peer) {
  ------------------
  |  Branch (94:13): [True: 19.7k, False: 12.0k]
  ------------------
   95|  19.7k|                *ret = TAKE_PTR(peer);
  ------------------
  |  |  388|  19.7k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  19.7k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  19.7k|        ({                                                       \
  |  |  |  |  |  |  381|  19.7k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  19.7k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  19.7k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  19.7k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  19.7k|                _var_;                                           \
  |  |  |  |  |  |  386|  19.7k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|  19.7k|                return 0;
   97|  19.7k|        }
   98|       |
   99|  12.0k|        peer = new(WireguardPeer, 1);
  ------------------
  |  |   17|  12.0k|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
  100|  12.0k|        if (!peer)
  ------------------
  |  Branch (100:13): [True: 0, False: 12.0k]
  ------------------
  101|      0|                return -ENOMEM;
  102|       |
  103|  12.0k|        *peer = (WireguardPeer) {
  104|  12.0k|                .flags = WGPEER_F_REPLACE_ALLOWEDIPS,
  105|  12.0k|                .wireguard = w,
  106|  12.0k|                .section = TAKE_PTR(n),
  ------------------
  |  |  388|  12.0k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  12.0k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  12.0k|        ({                                                       \
  |  |  |  |  |  |  381|  12.0k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  12.0k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  12.0k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  12.0k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  12.0k|                _var_;                                           \
  |  |  |  |  |  |  386|  12.0k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  107|  12.0k|        };
  108|       |
  109|  12.0k|        LIST_PREPEND(peers, w->peers, peer);
  ------------------
  |  |   31|  12.0k|        ({                                                              \
  |  |   32|  12.0k|                typeof(*(head)) **_head = &(head), *_item = (item);     \
  |  |   33|  12.0k|                assert(_item);                                          \
  |  |  ------------------
  |  |  |  |   72|  12.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|  12.0k|        do {                                                            \
  |  |  |  |  |  |   59|  12.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   95|  12.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 12.0k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   60|  12.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   61|  12.0k|        } while (false)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   34|  12.0k|                if ((_item->name##_next = *_head))                      \
  |  |  ------------------
  |  |  |  Branch (34:21): [True: 10.7k, False: 1.31k]
  |  |  ------------------
  |  |   35|  12.0k|                        _item->name##_next->name##_prev = _item;        \
  |  |   36|  12.0k|                _item->name##_prev = NULL;                              \
  |  |   37|  12.0k|                *_head = _item;                                         \
  |  |   38|  12.0k|                _item;                                                  \
  |  |   39|  12.0k|        })
  ------------------
  110|       |
  111|  12.0k|        r = hashmap_ensure_put(&w->peers_by_section, &wireguard_peer_hash_ops_by_section, peer->section, peer);
  112|  12.0k|        if (r < 0)
  ------------------
  |  Branch (112:13): [True: 0, False: 12.0k]
  ------------------
  113|      0|                return r;
  114|       |
  115|  12.0k|        *ret = TAKE_PTR(peer);
  ------------------
  |  |  388|  12.0k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  12.0k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  12.0k|        ({                                                       \
  |  |  |  |  |  |  381|  12.0k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  12.0k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  12.0k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  12.0k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  12.0k|                _var_;                                           \
  |  |  |  |  |  |  386|  12.0k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  116|  12.0k|        return 0;
  117|  12.0k|}
wireguard.c:wireguard_peer_clear_ipmasks:
   39|  12.5k|static void wireguard_peer_clear_ipmasks(WireguardPeer *peer) {
   40|  12.5k|        assert(peer);
  ------------------
  |  |   72|  12.5k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  12.5k|        do {                                                            \
  |  |  |  |   59|  12.5k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  12.5k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 12.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  12.5k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  12.5k|        } while (false)
  |  |  ------------------
  ------------------
   41|       |
   42|  12.5k|        LIST_CLEAR(ipmasks, peer->ipmasks, free);
  ------------------
  |  |  198|  12.5k|        _LIST_CLEAR(name, head, free_func, UNIQ_T(elem, UNIQ))
  |  |  ------------------
  |  |  |  |  202|  12.5k|        ({                                              \
  |  |  |  |  203|  12.5k|                typeof(head) elem;                      \
  |  |  |  |  204|  39.7k|                while ((elem = LIST_POP(name, head)))   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|  39.7k|        ({                                                              \
  |  |  |  |  |  |  190|  39.7k|                typeof(a)* _a = &(a);                                   \
  |  |  |  |  |  |  191|  39.7k|                typeof(a) _p = *_a;                                     \
  |  |  |  |  |  |  192|  39.7k|                if (_p)                                                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (192:21): [True: 27.1k, False: 12.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|  39.7k|                        LIST_REMOVE(name, *_a, _p);                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   51|  27.1k|        ({                                                              \
  |  |  |  |  |  |  |  |   52|  27.1k|                typeof(*(head)) **_head = &(head), *_item = (item);     \
  |  |  |  |  |  |  |  |   53|  27.1k|                assert(_item);                                          \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   72|  27.1k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   58|  27.1k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |   59|  27.1k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|  27.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 27.1k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|  27.1k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   61|  27.1k|        } while (false)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  27.1k|                if (_item->name##_next)                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:21): [True: 24.8k, False: 2.29k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  27.1k|                        _item->name##_next->name##_prev = _item->name##_prev; \
  |  |  |  |  |  |  |  |   56|  27.1k|                if (_item->name##_prev)                                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (56:21): [True: 0, False: 27.1k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|  27.1k|                        _item->name##_prev->name##_next = _item->name##_next; \
  |  |  |  |  |  |  |  |   58|  27.1k|                else {                                                  \
  |  |  |  |  |  |  |  |   59|  27.1k|                        assert(*_head == _item);                        \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   72|  27.1k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   58|  27.1k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |   59|  27.1k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|  27.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 27.1k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|  27.1k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   61|  27.1k|        } while (false)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|  27.1k|                        *_head = _item->name##_next;                    \
  |  |  |  |  |  |  |  |   61|  27.1k|                }                                                       \
  |  |  |  |  |  |  |  |   62|  27.1k|                _item->name##_next = _item->name##_prev = NULL;         \
  |  |  |  |  |  |  |  |   63|  27.1k|                _item;                                                  \
  |  |  |  |  |  |  |  |   64|  27.1k|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|  39.7k|                _p;                                                     \
  |  |  |  |  |  |  195|  39.7k|        })
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (204:24): [True: 27.1k, False: 12.5k]
  |  |  |  |  ------------------
  |  |  |  |  205|  27.1k|                        free_func(elem);                \
  |  |  |  |  206|  12.5k|                head;                                   \
  |  |  |  |  207|  12.5k|        })
  |  |  ------------------
  ------------------
   43|  12.5k|}
wireguard.c:wireguard_init:
 1072|  2.15k|static void wireguard_init(NetDev *netdev) {
 1073|  2.15k|        Wireguard *w = WIREGUARD(netdev);
 1074|       |
 1075|  2.15k|        w->flags = WGDEVICE_F_REPLACE_PEERS;
 1076|  2.15k|}
wireguard.c:wireguard_done:
 1078|  2.15k|static void wireguard_done(NetDev *netdev) {
 1079|  2.15k|        Wireguard *w = WIREGUARD(netdev);
 1080|       |
 1081|  2.15k|        explicit_bzero_safe(w->private_key, WG_KEY_LEN);
 1082|  2.15k|        free(w->private_key_file);
 1083|       |
 1084|  2.15k|        hashmap_free(w->peers_by_section);
 1085|       |
 1086|  2.15k|        set_free(w->routes);
 1087|  2.15k|}
wireguard.c:wireguard_verify:
 1198|  2.15k|static int wireguard_verify(NetDev *netdev, const char *filename) {
 1199|  2.15k|        Wireguard *w = WIREGUARD(netdev);
 1200|  2.15k|        int r;
 1201|       |
 1202|  2.15k|        r = wireguard_read_key_file(w->private_key_file, w->private_key);
 1203|  2.15k|        if (r < 0)
  ------------------
  |  Branch (1203:13): [True: 121, False: 2.03k]
  ------------------
 1204|    121|                return log_netdev_error_errno(netdev, r,
  ------------------
  |  |  288|    121|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|    121|        ({                                                              \
  |  |  |  |  271|    121|                int _error = (error);                                   \
  |  |  |  |  272|    121|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    121|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    121|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    121|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    121|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    121|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 121]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    121|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    121|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|    121|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    121|        ({                                                              \
  |  |  |  |  |  |  265|    121|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|    121|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|    121|        ({                                                              \
  |  |  |  |  |  |  |  |    8|    242|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 121, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    121|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|    121|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|    121|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 121, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|    121|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|    121|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|    121|        })
  |  |  |  |  ------------------
  |  |  |  |  274|    121|        })
  |  |  ------------------
  ------------------
 1205|  2.03k|                                              "Failed to read private key from '%s', ignoring network device: %m",
 1206|  2.03k|                                              w->private_key_file);
 1207|       |
 1208|  2.03k|        if (eqzero(w->private_key)) {
  ------------------
  |  |   64|  2.03k|#define eqzero(x) memeqzero(x, sizeof(x))
  |  |  ------------------
  |  |  |  |   62|  2.03k|#define memeqzero(data, length) memeqbyte(0x00, data, length)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (62:33): [True: 1.59k, False: 440]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1209|  1.59k|                r = wireguard_read_default_key_cred(netdev, filename);
 1210|  1.59k|                if (r < 0)
  ------------------
  |  Branch (1210:21): [True: 1.59k, False: 0]
  ------------------
 1211|  1.59k|                        return r;
 1212|  1.59k|        }
 1213|       |
 1214|  4.99k|        LIST_FOREACH(peers, peer, w->peers) {
  ------------------
  |  |  145|    440|        LIST_FOREACH_WITH_NEXT(name, i, UNIQ_T(n, UNIQ), head)
  |  |  ------------------
  |  |  |  |  142|  5.43k|        for (typeof(*(head)) *n, *i = (head); i && (n = i->name##_next, true); i = n)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (142:47): [True: 4.99k, False: 440]
  |  |  |  |  |  Branch (142:52): [True: 4.99k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1215|  4.99k|                if (wireguard_peer_verify(peer) < 0) {
  ------------------
  |  Branch (1215:21): [True: 2.99k, False: 1.99k]
  ------------------
 1216|  2.99k|                        wireguard_peer_free(peer);
 1217|  2.99k|                        continue;
 1218|  2.99k|                }
 1219|       |
 1220|  1.99k|                if ((peer->route_table_set ? peer->route_table : w->route_table) == 0)
  ------------------
  |  Branch (1220:21): [True: 283, False: 1.71k]
  |  Branch (1220:22): [True: 684, False: 1.31k]
  ------------------
 1221|    283|                        continue;
 1222|       |
 1223|  20.2k|                LIST_FOREACH(ipmasks, ipmask, peer->ipmasks) {
  ------------------
  |  |  145|  1.71k|        LIST_FOREACH_WITH_NEXT(name, i, UNIQ_T(n, UNIQ), head)
  |  |  ------------------
  |  |  |  |  142|  21.9k|        for (typeof(*(head)) *n, *i = (head); i && (n = i->name##_next, true); i = n)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (142:47): [True: 20.2k, False: 1.71k]
  |  |  |  |  |  Branch (142:52): [True: 20.2k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1224|  20.2k|                        _cleanup_(route_unrefp) Route *route = NULL;
  ------------------
  |  |   78|  20.2k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
 1225|       |
 1226|  20.2k|                        r = route_new(&route);
 1227|  20.2k|                        if (r < 0)
  ------------------
  |  Branch (1227:29): [True: 0, False: 20.2k]
  ------------------
 1228|      0|                                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1229|       |
 1230|       |                        /* For route_section_verify() below. */
 1231|  20.2k|                        r = config_section_new(peer->section->filename, peer->section->line, &route->section);
 1232|  20.2k|                        if (r < 0)
  ------------------
  |  Branch (1232:29): [True: 0, False: 20.2k]
  ------------------
 1233|      0|                                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1234|       |
 1235|  20.2k|                        route->source = NETWORK_CONFIG_SOURCE_STATIC;
 1236|  20.2k|                        route->family = ipmask->family;
 1237|  20.2k|                        route->dst = ipmask->ip;
 1238|  20.2k|                        route->dst_prefixlen = ipmask->cidr;
 1239|  20.2k|                        route->protocol = RTPROT_STATIC;
 1240|  20.2k|                        route->protocol_set = true;
 1241|  20.2k|                        route->table = peer->route_table_set ? peer->route_table : w->route_table;
  ------------------
  |  Branch (1241:40): [True: 10.0k, False: 10.2k]
  ------------------
 1242|  20.2k|                        route->table_set = true;
 1243|  20.2k|                        route->priority = peer->route_priority_set ? peer->route_priority : w->route_priority;
  ------------------
  |  Branch (1243:43): [True: 5.42k, False: 14.8k]
  ------------------
 1244|  20.2k|                        route->priority_set = true;
 1245|       |
 1246|  20.2k|                        if (route_section_verify(route) < 0)
  ------------------
  |  Branch (1246:29): [True: 0, False: 20.2k]
  ------------------
 1247|      0|                                continue;
 1248|       |
 1249|  20.2k|                        r = set_ensure_put(&w->routes, &route_hash_ops, route);
 1250|  20.2k|                        if (r < 0)
  ------------------
  |  Branch (1250:29): [True: 0, False: 20.2k]
  ------------------
 1251|      0|                                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1252|  20.2k|                        if (r == 0)
  ------------------
  |  Branch (1252:29): [True: 15.7k, False: 4.51k]
  ------------------
 1253|  15.7k|                                continue;
 1254|       |
 1255|  4.51k|                        route->wireguard = w;
 1256|  4.51k|                        TAKE_PTR(route);
  ------------------
  |  |  388|  4.51k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  4.51k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  4.51k|        ({                                                       \
  |  |  |  |  |  |  381|  4.51k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  4.51k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  4.51k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  4.51k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  4.51k|                _var_;                                           \
  |  |  |  |  |  |  386|  4.51k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1257|  4.51k|                }
 1258|  1.71k|        }
 1259|       |
 1260|    440|        return 0;
 1261|    440|}
wireguard.c:wireguard_read_key_file:
 1089|  8.97k|static int wireguard_read_key_file(const char *filename, uint8_t dest[static WG_KEY_LEN]) {
 1090|  8.97k|        _cleanup_(erase_and_freep) char *key = NULL;
  ------------------
  |  |   78|  8.97k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
 1091|  8.97k|        size_t key_len;
 1092|  8.97k|        int r;
 1093|       |
 1094|  8.97k|        if (!filename)
  ------------------
  |  Branch (1094:13): [True: 7.05k, False: 1.92k]
  ------------------
 1095|  7.05k|                return 0;
 1096|       |
 1097|  1.92k|        assert(dest);
  ------------------
  |  |   72|  1.92k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.92k|        do {                                                            \
  |  |  |  |   59|  1.92k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.92k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.92k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.92k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.92k|        } while (false)
  |  |  ------------------
  ------------------
 1098|       |
 1099|  1.92k|        r = read_full_file_full(
 1100|  1.92k|                        AT_FDCWD, filename, UINT64_MAX, WG_KEY_LEN,
 1101|  1.92k|                        READ_FULL_FILE_SECURE |
 1102|  1.92k|                        READ_FULL_FILE_UNBASE64 |
 1103|  1.92k|                        READ_FULL_FILE_WARN_WORLD_READABLE |
 1104|  1.92k|                        READ_FULL_FILE_CONNECT_SOCKET |
 1105|  1.92k|                        READ_FULL_FILE_FAIL_WHEN_LARGER,
 1106|  1.92k|                        NULL, &key, &key_len);
 1107|  1.92k|        if (r < 0)
  ------------------
  |  Branch (1107:13): [True: 1.92k, False: 0]
  ------------------
 1108|  1.92k|                return r;
 1109|       |
 1110|      0|        if (key_len != WG_KEY_LEN)
  ------------------
  |  Branch (1110:13): [True: 0, False: 0]
  ------------------
 1111|      0|                return -EINVAL;
 1112|       |
 1113|      0|        memcpy(dest, key, WG_KEY_LEN);
 1114|      0|        return 0;
 1115|      0|}
wireguard.c:wireguard_read_default_key_cred:
 1149|  1.59k|static int wireguard_read_default_key_cred(NetDev *netdev, const char *filename) {
 1150|  1.59k|        Wireguard *w = WIREGUARD(netdev);
 1151|  1.59k|        _cleanup_free_ char *config_name = NULL;
  ------------------
  |  |   82|  1.59k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  1.59k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1152|  1.59k|        int r;
 1153|       |
 1154|  1.59k|        assert(filename);
  ------------------
  |  |   72|  1.59k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.59k|        do {                                                            \
  |  |  |  |   59|  1.59k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.59k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.59k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.59k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.59k|        } while (false)
  |  |  ------------------
  ------------------
 1155|       |
 1156|  1.59k|        r = path_extract_filename(filename, &config_name);
 1157|  1.59k|        if (r < 0)
  ------------------
  |  Branch (1157:13): [True: 0, False: 1.59k]
  ------------------
 1158|      0|                return log_netdev_error_errno(netdev, r,
  ------------------
  |  |  288|      0|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      0|        ({                                                              \
  |  |  |  |  271|      0|                int _error = (error);                                   \
  |  |  |  |  272|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      0|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|        ({                                                              \
  |  |  |  |  |  |  265|      0|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      0|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      0|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      0|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      0|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      0|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      0|        })
  |  |  ------------------
  ------------------
 1159|  1.59k|                                              "%s: Failed to extract config name, ignoring network device: %m",
 1160|  1.59k|                                              filename);
 1161|       |
 1162|  1.59k|        char *p = endswith(config_name, ".netdev");
 1163|  1.59k|        if (!p)
  ------------------
  |  Branch (1163:13): [True: 1.59k, False: 0]
  ------------------
 1164|       |                /* Fuzzer run? Then we just ignore this device. */
 1165|  1.59k|                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|  1.59k|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|  1.59k|        ({                                                              \
  |  |  |  |  271|  1.59k|                int _error = (error);                                   \
  |  |  |  |  272|  1.59k|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|  1.59k|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  1.59k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  1.59k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  1.59k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  1.59k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.59k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  1.59k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  1.59k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|  1.59k|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  1.59k|        ({                                                              \
  |  |  |  |  |  |  265|  1.59k|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|  1.59k|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|  1.59k|        ({                                                              \
  |  |  |  |  |  |  |  |    8|  3.18k|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 1.59k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|  1.59k|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|  1.59k|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|  1.59k|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 1.59k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|  1.59k|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|  1.59k|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|  1.59k|        })
  |  |  |  |  ------------------
  |  |  |  |  274|  1.59k|        })
  |  |  ------------------
  ------------------
 1166|      0|                                              "%s: Invalid netdev config name, refusing default key lookup.",
 1167|      0|                                              filename);
 1168|      0|        *p = '\0';
 1169|       |
 1170|      0|        _cleanup_(erase_and_freep) char *cred = NULL;
  ------------------
  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
 1171|       |
 1172|      0|        r = read_credential(strjoina("network.wireguard.private.", config_name), (void**) &cred, /* ret_size = */ NULL);
  ------------------
  |  |   94|      0|        ({                                                              \
  |  |   95|      0|                const char *_appendees_[] = { a, __VA_ARGS__ };         \
  |  |   96|      0|                char *_d_, *_p_;                                        \
  |  |   97|      0|                size_t _len_ = 0;                                       \
  |  |   98|      0|                size_t _i_;                                             \
  |  |   99|      0|                for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
  |  |  ------------------
  |  |  |  |  134|      0|        (__builtin_choose_expr(                                         \
  |  |  |  |  135|      0|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  |  |  136|      0|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  |  |  137|      0|                VOID_0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  128|      0|#  define VOID_0 ((void)0)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (99:31): [True: 0, False: 0]
  |  |  |  Branch (99:64): [True: 0, False: 0]
  |  |  ------------------
  |  |  100|      0|                        _len_ += strlen(_appendees_[_i_]);              \
  |  |  101|      0|                _p_ = _d_ = newa(char, _len_ + 1);                      \
  |  |  ------------------
  |  |  |  |   29|      0|        ({                                                              \
  |  |  |  |   30|      0|                size_t _n_ = (n);                                       \
  |  |  |  |   31|      0|                assert_se(MUL_ASSIGN_SAFE(&_n_, sizeof(t)));            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   32|      0|                (t*) alloca_safe(_n_);                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|        ({                                                              \
  |  |  |  |  |  |   23|      0|                size_t _nn_ = (n);                                      \
  |  |  |  |  |  |   24|      0|                assert(_nn_ <= ALLOCA_MAX);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|                alloca(_nn_ == 0 ? 1 : _nn_);                           \
  |  |  |  |  |  |   26|      0|        })                                                              \
  |  |  |  |  ------------------
  |  |  |  |   33|      0|        })
  |  |  ------------------
  |  |  102|      0|                for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
  |  |  ------------------
  |  |  |  |  134|      0|        (__builtin_choose_expr(                                         \
  |  |  |  |  135|      0|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  |  |  136|      0|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  |  |  137|      0|                VOID_0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  128|      0|#  define VOID_0 ((void)0)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (102:31): [True: 0, False: 0]
  |  |  |  Branch (102:64): [True: 0, False: 0]
  |  |  ------------------
  |  |  103|      0|                        _p_ = stpcpy(_p_, _appendees_[_i_]);            \
  |  |  104|      0|                *_p_ = 0;                                               \
  |  |  105|      0|                _d_;                                                    \
  |  |  106|      0|        })
  ------------------
 1173|      0|        if (r < 0)
  ------------------
  |  Branch (1173:13): [True: 0, False: 0]
  ------------------
 1174|      0|                return log_netdev_error_errno(netdev, r,
  ------------------
  |  |  288|      0|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      0|        ({                                                              \
  |  |  |  |  271|      0|                int _error = (error);                                   \
  |  |  |  |  272|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      0|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|        ({                                                              \
  |  |  |  |  |  |  265|      0|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      0|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      0|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      0|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      0|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      0|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      0|        })
  |  |  ------------------
  ------------------
 1175|      0|                                              "%s: No private key specified and default key isn't available, "
 1176|      0|                                              "ignoring network device: %m",
 1177|      0|                                              filename);
 1178|       |
 1179|      0|        _cleanup_(erase_and_freep) void *key = NULL;
  ------------------
  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
 1180|      0|        size_t len;
 1181|       |
 1182|      0|        r = unbase64mem_full(cred, SIZE_MAX, /* secure = */ true, &key, &len);
 1183|      0|        if (r < 0)
  ------------------
  |  Branch (1183:13): [True: 0, False: 0]
  ------------------
 1184|      0|                return log_netdev_error_errno(netdev, r,
  ------------------
  |  |  288|      0|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      0|        ({                                                              \
  |  |  |  |  271|      0|                int _error = (error);                                   \
  |  |  |  |  272|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      0|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|        ({                                                              \
  |  |  |  |  |  |  265|      0|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      0|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      0|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      0|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      0|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      0|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      0|        })
  |  |  ------------------
  ------------------
 1185|      0|                                              "%s: No private key specified and default key cannot be parsed, "
 1186|      0|                                              "ignoring network device: %m",
 1187|      0|                                              filename);
 1188|      0|        if (len != WG_KEY_LEN || memeqzero(key, len))
  ------------------
  |  |   62|      0|#define memeqzero(data, length) memeqbyte(0x00, data, length)
  |  |  ------------------
  |  |  |  Branch (62:33): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1188:13): [True: 0, False: 0]
  ------------------
 1189|      0|                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|      0|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      0|        ({                                                              \
  |  |  |  |  271|      0|                int _error = (error);                                   \
  |  |  |  |  272|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      0|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|        ({                                                              \
  |  |  |  |  |  |  265|      0|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      0|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      0|        ({                                                              \
  |  |  |  |  |  |  |  |    8|      0|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      0|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      0|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      0|        })
  |  |  ------------------
  ------------------
 1190|      0|                                              "%s: No private key specified and default key is invalid. "
 1191|      0|                                              "Ignoring network device.",
 1192|      0|                                              filename);
 1193|       |
 1194|      0|        memcpy(w->private_key, key, WG_KEY_LEN);
 1195|      0|        return 0;
 1196|      0|}
wireguard.c:wireguard_peer_verify:
 1117|  4.99k|static int wireguard_peer_verify(WireguardPeer *peer) {
 1118|  4.99k|        NetDev *netdev = NETDEV(peer->wireguard);
  ------------------
  |  |  216|  4.99k|#define NETDEV(n) (&(n)->meta)
  ------------------
 1119|  4.99k|        int r;
 1120|       |
 1121|  4.99k|        if (section_is_invalid(peer->section))
  ------------------
  |  Branch (1121:13): [True: 358, False: 4.63k]
  ------------------
 1122|    358|                return -EINVAL;
 1123|       |
 1124|  4.63k|        r = wireguard_read_key_file(peer->public_key_file, peer->public_key);
 1125|  4.63k|        if (r < 0)
  ------------------
  |  Branch (1125:13): [True: 1.60k, False: 3.02k]
  ------------------
 1126|  1.60k|                return log_netdev_error_errno(netdev, r,
  ------------------
  |  |  288|  1.60k|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|  1.60k|        ({                                                              \
  |  |  |  |  271|  1.60k|                int _error = (error);                                   \
  |  |  |  |  272|  1.60k|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|  1.60k|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  1.60k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  1.60k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  1.60k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  1.60k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.60k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  1.60k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  1.60k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|  1.60k|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  1.60k|        ({                                                              \
  |  |  |  |  |  |  265|  1.60k|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|  1.60k|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|  1.60k|        ({                                                              \
  |  |  |  |  |  |  |  |    8|  3.21k|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 1.60k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|  1.60k|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|  1.60k|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|  1.60k|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 1.60k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|  1.60k|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|  1.60k|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|  1.60k|        })
  |  |  |  |  ------------------
  |  |  |  |  274|  1.60k|        })
  |  |  ------------------
  ------------------
 1127|  3.02k|                                              "%s: Failed to read public key from '%s'. "
 1128|  3.02k|                                              "Ignoring [WireGuardPeer] section from line %u.",
 1129|  3.02k|                                              peer->section->filename, peer->public_key_file,
 1130|  3.02k|                                              peer->section->line);
 1131|       |
 1132|  3.02k|        if (eqzero(peer->public_key))
  ------------------
  |  |   64|  3.02k|#define eqzero(x) memeqzero(x, sizeof(x))
  |  |  ------------------
  |  |  |  |   62|  3.02k|#define memeqzero(data, length) memeqbyte(0x00, data, length)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (62:33): [True: 834, False: 2.19k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1133|    834|                return log_netdev_error_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  288|    834|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|    834|        ({                                                              \
  |  |  |  |  271|    834|                int _error = (error);                                   \
  |  |  |  |  272|    834|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    834|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    834|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    834|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    834|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    834|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 834]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    834|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    834|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|    834|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    834|        ({                                                              \
  |  |  |  |  |  |  265|    834|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|    834|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|    834|        ({                                                              \
  |  |  |  |  |  |  |  |    8|  1.66k|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 834, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    834|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|    834|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|    834|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 834, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|    834|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|    834|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|    834|        })
  |  |  |  |  ------------------
  |  |  |  |  274|    834|        })
  |  |  ------------------
  ------------------
 1134|  2.19k|                                              "%s: WireGuardPeer section without PublicKey= configured. "
 1135|  2.19k|                                              "Ignoring [WireGuardPeer] section from line %u.",
 1136|  2.19k|                                              peer->section->filename, peer->section->line);
 1137|       |
 1138|  2.19k|        r = wireguard_read_key_file(peer->preshared_key_file, peer->preshared_key);
 1139|  2.19k|        if (r < 0)
  ------------------
  |  Branch (1139:13): [True: 194, False: 1.99k]
  ------------------
 1140|    194|                return log_netdev_error_errno(netdev, r,
  ------------------
  |  |  288|    194|#define log_netdev_error_errno(netdev, error, ...)   log_netdev_full_errno(netdev, LOG_ERR, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|    194|        ({                                                              \
  |  |  |  |  271|    194|                int _error = (error);                                   \
  |  |  |  |  272|    194|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    194|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    194|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    194|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    194|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    194|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 194]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    194|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    194|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|    194|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    194|        ({                                                              \
  |  |  |  |  |  |  265|    194|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|    194|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|    194|        ({                                                              \
  |  |  |  |  |  |  |  |    8|    388|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 194, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    194|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|    194|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|    194|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 194, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|    194|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|    194|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|    194|        })
  |  |  |  |  ------------------
  |  |  |  |  274|    194|        })
  |  |  ------------------
  ------------------
 1141|  1.99k|                                              "%s: Failed to read preshared key from '%s'. "
 1142|  1.99k|                                              "Ignoring [WireGuardPeer] section from line %u.",
 1143|  1.99k|                                              peer->section->filename, peer->preshared_key_file,
 1144|  1.99k|                                              peer->section->line);
 1145|       |
 1146|  1.99k|        return 0;
 1147|  2.19k|}

config_parse_wiphy:
  154|    617|                void *userdata) {
  155|       |
  156|    617|        WLan *w = WLAN(userdata);
  157|    617|        int r;
  158|       |
  159|    617|        assert(filename);
  ------------------
  |  |   72|    617|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    617|        do {                                                            \
  |  |  |  |   59|    617|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    617|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 617]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    617|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    617|        } while (false)
  |  |  ------------------
  ------------------
  160|    617|        assert(lvalue);
  ------------------
  |  |   72|    617|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    617|        do {                                                            \
  |  |  |  |   59|    617|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    617|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 617]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    617|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    617|        } while (false)
  |  |  ------------------
  ------------------
  161|    617|        assert(rvalue);
  ------------------
  |  |   72|    617|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    617|        do {                                                            \
  |  |  |  |   59|    617|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    617|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 617]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    617|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    617|        } while (false)
  |  |  ------------------
  ------------------
  162|       |
  163|    617|        if (isempty(rvalue)) {
  ------------------
  |  Branch (163:13): [True: 194, False: 423]
  ------------------
  164|    194|                w->wiphy_name = mfree(w->wiphy_name);
  ------------------
  |  |  404|    194|        ({                                      \
  |  |  405|    194|                free(memory);                   \
  |  |  406|    194|                (typeof(memory)) NULL;          \
  |  |  407|    194|        })
  ------------------
  165|    194|                w->wiphy_index = UINT32_MAX;
  166|    194|                return 0;
  167|    194|        }
  168|       |
  169|    423|        r = safe_atou32(rvalue, &w->wiphy_index);
  170|    423|        if (r >= 0) {
  ------------------
  |  Branch (170:13): [True: 224, False: 199]
  ------------------
  171|    224|                w->wiphy_name = mfree(w->wiphy_name);
  ------------------
  |  |  404|    224|        ({                                      \
  |  |  405|    224|                free(memory);                   \
  |  |  406|    224|                (typeof(memory)) NULL;          \
  |  |  407|    224|        })
  ------------------
  172|    224|                return 0;
  173|    224|        }
  174|       |
  175|    199|        r = free_and_strdup_warn(&w->wiphy_name, rvalue);
  176|    199|        if (r < 0)
  ------------------
  |  Branch (176:13): [True: 0, False: 199]
  ------------------
  177|      0|                return r;
  178|       |
  179|    199|        w->wiphy_index = UINT32_MAX;
  180|    199|        return 0;
  181|    199|}
config_parse_wlan_iftype:
  193|    614|                void *userdata) {
  194|       |
  195|    614|        enum nl80211_iftype t, *iftype = ASSERT_PTR(data);
  ------------------
  |  |   81|    614|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    614|        ({                                 \
  |  |  |  |   85|    614|                typeof(expr) var = (expr); \
  |  |  |  |   86|    614|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    614|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    614|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    614|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    614|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    614|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 614]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    614|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    614|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    614|                var;                       \
  |  |  |  |   88|    614|        })
  |  |  ------------------
  ------------------
  196|       |
  197|    614|        assert(filename);
  ------------------
  |  |   72|    614|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    614|        do {                                                            \
  |  |  |  |   59|    614|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    614|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 614]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    614|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    614|        } while (false)
  |  |  ------------------
  ------------------
  198|    614|        assert(lvalue);
  ------------------
  |  |   72|    614|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    614|        do {                                                            \
  |  |  |  |   59|    614|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    614|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 614]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    614|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    614|        } while (false)
  |  |  ------------------
  ------------------
  199|    614|        assert(rvalue);
  ------------------
  |  |   72|    614|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    614|        do {                                                            \
  |  |  |  |   59|    614|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    614|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 614]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    614|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    614|        } while (false)
  |  |  ------------------
  ------------------
  200|       |
  201|    614|        if (isempty(rvalue)) {
  ------------------
  |  Branch (201:13): [True: 194, False: 420]
  ------------------
  202|    194|                *iftype = NL80211_IFTYPE_UNSPECIFIED;
  203|    194|                return 0;
  204|    194|        }
  205|       |
  206|    420|        t = nl80211_iftype_from_string(rvalue);
  207|       |        /* We reuse the kernel provided enum which does not contain negative value. So, the cast
  208|       |         * below is mandatory. Otherwise, the check below always passes. */
  209|    420|        if ((int) t < 0) {
  ------------------
  |  Branch (209:13): [True: 197, False: 223]
  ------------------
  210|    197|                log_syntax(unit, LOG_WARNING, filename, line, t,
  ------------------
  |  |  353|    197|        ({                                                              \
  |  |  354|    197|                int _level = (level), _e = (error);                     \
  |  |  355|    197|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 197]
  |  |  ------------------
  |  |  356|    197|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    197|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    197|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    197|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    197|        })
  ------------------
  211|    197|                           "Failed to parse wlan interface type, ignoring assignment: %s",
  212|    197|                           rvalue);
  213|    197|                return 0;
  214|    197|        }
  215|       |
  216|    223|        *iftype = t;
  217|    223|        return 0;
  218|    420|}
wlan.c:wlan_init:
   21|     85|static void wlan_init(NetDev *netdev) {
   22|     85|        WLan *w = WLAN(netdev);
   23|       |
   24|     85|        w->wiphy_index = UINT32_MAX;
   25|     85|        w->wds = -1;
   26|     85|}
wlan.c:wlan_done:
   15|     85|static void wlan_done(NetDev *netdev) {
   16|     85|        WLan *w = WLAN(netdev);
   17|       |
   18|     85|        w->wiphy_name = mfree(w->wiphy_name);
  ------------------
  |  |  404|     85|        ({                                      \
  |  |  405|     85|                free(memory);                   \
  |  |  406|     85|                (typeof(memory)) NULL;          \
  |  |  407|     85|        })
  ------------------
   19|     85|}
wlan.c:wlan_verify:
  126|     85|static int wlan_verify(NetDev *netdev, const char *filename) {
  127|     85|        WLan *w = WLAN(netdev);
  128|       |
  129|     85|        assert(filename);
  ------------------
  |  |   72|     85|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     85|        do {                                                            \
  |  |  |  |   59|     85|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     85|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 85]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     85|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     85|        } while (false)
  |  |  ------------------
  ------------------
  130|       |
  131|     85|        if (w->iftype == NL80211_IFTYPE_UNSPECIFIED)
  ------------------
  |  Branch (131:13): [True: 48, False: 37]
  ------------------
  132|     48|                return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  287|     48|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|     48|        ({                                                              \
  |  |  |  |  271|     48|                int _error = (error);                                   \
  |  |  |  |  272|     48|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|     48|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|     48|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|     48|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|     48|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|     48|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 48]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|     48|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|     48|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|     48|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|     48|        ({                                                              \
  |  |  |  |  |  |  265|     48|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|     48|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|     48|        ({                                                              \
  |  |  |  |  |  |  |  |    8|     96|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 48, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|     48|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|     48|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|     48|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 48, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|     48|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|     48|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|     48|        })
  |  |  |  |  ------------------
  |  |  |  |  274|     48|        })
  |  |  ------------------
  ------------------
  133|     37|                                                "%s: WLAN interface type is not specified, ignoring.",
  134|     37|                                                filename);
  135|       |
  136|     37|        if (w->wiphy_index == UINT32_MAX && isempty(w->wiphy_name))
  ------------------
  |  Branch (136:13): [True: 9, False: 28]
  |  Branch (136:45): [True: 8, False: 1]
  ------------------
  137|      8|                return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  287|      8|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      8|        ({                                                              \
  |  |  |  |  271|      8|                int _error = (error);                                   \
  |  |  |  |  272|      8|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      8|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      8|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      8|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      8|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      8|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 8]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      8|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      8|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      8|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      8|        ({                                                              \
  |  |  |  |  |  |  265|      8|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      8|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      8|        ({                                                              \
  |  |  |  |  |  |  |  |    8|     16|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 8, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      8|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      8|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      8|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 8, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      8|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      8|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      8|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      8|        })
  |  |  ------------------
  ------------------
  138|     29|                                                "%s: physical WLAN device is not specified, ignoring.",
  139|     29|                                                filename);
  140|       |
  141|     29|        return 0;
  142|     37|}

xfrm.c:xfrm_verify:
   30|     35|static int xfrm_verify(NetDev *netdev, const char *filename) {
   31|     35|        assert(filename);
  ------------------
  |  |   72|     35|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     35|        do {                                                            \
  |  |  |  |   59|     35|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     35|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 35]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     35|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     35|        } while (false)
  |  |  ------------------
  ------------------
   32|       |
   33|     35|        Xfrm *x = XFRM(netdev);
   34|       |
   35|     35|        if (x->if_id == 0)
  ------------------
  |  Branch (35:13): [True: 6, False: 29]
  ------------------
   36|      6|                return log_netdev_warning_errno(netdev, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  287|      6|#define log_netdev_warning_errno(netdev, error, ...) log_netdev_full_errno(netdev, LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  270|      6|        ({                                                              \
  |  |  |  |  271|      6|                int _error = (error);                                   \
  |  |  |  |  272|      6|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      6|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      6|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      6|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      6|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      6|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 6]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      6|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      6|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  273|      6|                log_netdev_full_errno_zerook(netdev, level, _error, __VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      6|        ({                                                              \
  |  |  |  |  |  |  265|      6|                const NetDev *_n = (netdev);                            \
  |  |  |  |  |  |  266|      6|                log_interface_full_errno_zerook(_n ? _n->ifname : NULL, level, error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    7|      6|        ({                                                              \
  |  |  |  |  |  |  |  |    8|     12|                const char *_ifname = (ifname);                         \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (8:40): [True: 6, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|      6|                _ifname ? log_object_internal(level, error, PROJECT_FILE, __LINE__, __func__, "INTERFACE=", _ifname, NULL, NULL, ##__VA_ARGS__) : \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      6|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      6|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (9:17): [True: 6, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      6|                        log_internal(level, error, PROJECT_FILE, __LINE__, __func__, ##__VA_ARGS__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      6|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  267|      6|        })
  |  |  |  |  ------------------
  |  |  |  |  274|      6|        })
  |  |  ------------------
  ------------------
   37|     29|                                                "%s: Xfrm interface ID cannot be zero.", filename);
   38|     29|        return 0;
   39|     35|}

manager_varlink_done:
  312|  13.0k|void manager_varlink_done(Manager *m) {
  313|  13.0k|        assert(m);
  ------------------
  |  |   72|  13.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.0k|        do {                                                            \
  |  |  |  |   59|  13.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  13.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.0k|        } while (false)
  |  |  ------------------
  ------------------
  314|       |
  315|  13.0k|        m->varlink_server = sd_varlink_server_unref(m->varlink_server);
  316|  13.0k|        (void) unlink("/run/systemd/netif/io.systemd.Network");
  317|  13.0k|}

manager_new:
  613|  13.0k|int manager_new(Manager **ret, bool test_mode) {
  614|  13.0k|        _cleanup_(manager_freep) Manager *m = NULL;
  ------------------
  |  |   78|  13.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  615|       |
  616|  13.0k|        m = new(Manager, 1);
  ------------------
  |  |   17|  13.0k|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
  617|  13.0k|        if (!m)
  ------------------
  |  Branch (617:13): [True: 0, False: 13.0k]
  ------------------
  618|      0|                return -ENOMEM;
  619|       |
  620|  13.0k|        *m = (Manager) {
  621|  13.0k|                .keep_configuration = _KEEP_CONFIGURATION_INVALID,
  622|  13.0k|                .ipv6_privacy_extensions = IPV6_PRIVACY_EXTENSIONS_NO,
  623|  13.0k|                .test_mode = test_mode,
  624|  13.0k|                .speed_meter_interval_usec = SPEED_METER_DEFAULT_TIME_INTERVAL,
  ------------------
  |  |    9|  13.0k|#define SPEED_METER_DEFAULT_TIME_INTERVAL (10 * USEC_PER_SEC)
  |  |  ------------------
  |  |  |  |   39|  13.0k|#define USEC_PER_SEC  ((usec_t) 1000000ULL)
  |  |  ------------------
  ------------------
  625|  13.0k|                .online_state = _LINK_ONLINE_STATE_INVALID,
  626|  13.0k|                .manage_foreign_routes = true,
  627|  13.0k|                .manage_foreign_rules = true,
  628|  13.0k|                .manage_foreign_nexthops = true,
  629|  13.0k|                .ethtool_fd = -EBADF,
  630|  13.0k|                .persistent_storage_fd = persistent_storage_open(),
  631|  13.0k|                .dhcp_use_domains = _USE_DOMAINS_INVALID,
  632|  13.0k|                .dhcp6_use_domains = _USE_DOMAINS_INVALID,
  633|  13.0k|                .ndisc_use_domains = _USE_DOMAINS_INVALID,
  634|  13.0k|                .dhcp_client_identifier = DHCP_CLIENT_ID_DUID,
  635|  13.0k|                .dhcp_duid.type = DUID_TYPE_EN,
  636|  13.0k|                .dhcp6_duid.type = DUID_TYPE_EN,
  637|  13.0k|                .duid_product_uuid.type = DUID_TYPE_UUID,
  638|  13.0k|                .dhcp_server_persist_leases = true,
  639|  13.0k|                .serialization_fd = -EBADF,
  640|  13.0k|                .ip_forwarding = { -1, -1, },
  641|       |#if HAVE_VMLINUX_H
  642|       |                .cgroup_fd = -EBADF,
  643|       |#endif
  644|  13.0k|        };
  645|       |
  646|  13.0k|        *ret = TAKE_PTR(m);
  ------------------
  |  |  388|  13.0k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  13.0k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  13.0k|        ({                                                       \
  |  |  |  |  |  |  381|  13.0k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  13.0k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  13.0k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  13.0k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  13.0k|                _var_;                                           \
  |  |  |  |  |  |  386|  13.0k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  647|  13.0k|        return 0;
  648|  13.0k|}
manager_free:
  650|  13.0k|Manager* manager_free(Manager *m) {
  651|  13.0k|        if (!m)
  ------------------
  |  Branch (651:13): [True: 0, False: 13.0k]
  ------------------
  652|      0|                return NULL;
  653|       |
  654|  13.0k|        manager_remove_sysctl_monitor(m);
  655|       |
  656|  13.0k|        free(m->state_file);
  657|       |
  658|  13.0k|        m->request_queue = ordered_set_free(m->request_queue);
  659|  13.0k|        m->remove_request_queue = ordered_set_free(m->remove_request_queue);
  660|       |
  661|  13.0k|        m->new_wlan_ifindices = set_free(m->new_wlan_ifindices);
  662|       |
  663|  13.0k|        m->dirty_links = set_free(m->dirty_links);
  664|  13.0k|        m->links_by_name = hashmap_free(m->links_by_name);
  665|  13.0k|        m->links_by_hw_addr = hashmap_free(m->links_by_hw_addr);
  666|  13.0k|        m->links_by_dhcp_pd_subnet_prefix = hashmap_free(m->links_by_dhcp_pd_subnet_prefix);
  667|  13.0k|        m->links_by_index = hashmap_free(m->links_by_index);
  668|       |
  669|  13.0k|        m->dhcp_pd_subnet_ids = set_free(m->dhcp_pd_subnet_ids);
  670|  13.0k|        m->networks = ordered_hashmap_free(m->networks);
  671|       |
  672|       |        /* The same object may be registered with multiple names, and netdev_detach() may drop multiple entries. */
  673|  13.0k|        for (NetDev *n; (n = hashmap_first(m->netdevs)); )
  ------------------
  |  Branch (673:25): [True: 0, False: 13.0k]
  ------------------
  674|      0|                netdev_detach(n);
  675|  13.0k|        m->netdevs = hashmap_free(m->netdevs);
  676|       |
  677|  13.0k|        m->tuntap_fds_by_name = hashmap_free(m->tuntap_fds_by_name);
  678|       |
  679|  13.0k|        m->wiphy_by_name = hashmap_free(m->wiphy_by_name);
  680|  13.0k|        m->wiphy_by_index = hashmap_free(m->wiphy_by_index);
  681|       |
  682|  13.0k|        ordered_set_free(m->address_pools);
  683|       |
  684|  13.0k|        hashmap_free(m->route_table_names_by_number);
  685|  13.0k|        hashmap_free(m->route_table_numbers_by_name);
  686|       |
  687|  13.0k|        set_free(m->rules);
  688|       |
  689|  13.0k|        sd_netlink_unref(m->rtnl);
  690|  13.0k|        sd_netlink_unref(m->genl);
  691|  13.0k|        sd_resolve_unref(m->resolve);
  692|       |
  693|  13.0k|        m->routes = set_free(m->routes);
  694|       |
  695|  13.0k|        m->nexthops_by_id = hashmap_free(m->nexthops_by_id);
  696|  13.0k|        m->nexthop_ids = set_free(m->nexthop_ids);
  697|       |
  698|  13.0k|        m->address_labels_by_section = hashmap_free(m->address_labels_by_section);
  699|       |
  700|  13.0k|        sd_event_source_unref(m->speed_meter_event_source);
  701|  13.0k|        sd_event_unref(m->event);
  702|       |
  703|  13.0k|        sd_device_monitor_unref(m->device_monitor);
  704|       |
  705|  13.0k|        manager_varlink_done(m);
  706|  13.0k|        hashmap_free(m->polkit_registry);
  707|  13.0k|        sd_bus_flush_close_unref(m->bus);
  708|       |
  709|  13.0k|        free(m->dynamic_timezone);
  710|  13.0k|        free(m->dynamic_hostname);
  711|       |
  712|  13.0k|        safe_close(m->ethtool_fd);
  713|  13.0k|        safe_close(m->persistent_storage_fd);
  714|       |
  715|  13.0k|        m->fw_ctx = fw_ctx_free(m->fw_ctx);
  716|       |
  717|  13.0k|        m->serialization_fd = safe_close(m->serialization_fd);
  718|       |
  719|  13.0k|        return mfree(m);
  ------------------
  |  |  404|  13.0k|        ({                                      \
  |  |  405|  13.0k|                free(memory);                   \
  |  |  406|  13.0k|                (typeof(memory)) NULL;          \
  |  |  407|  13.0k|        })
  ------------------
  720|  13.0k|}
networkd-manager.c:persistent_storage_open:
  590|  13.0k|static int persistent_storage_open(void) {
  591|  13.0k|        _cleanup_close_ int fd = -EBADF;
  ------------------
  |  |   60|  13.0k|#define _cleanup_close_ _cleanup_(closep)
  |  |  ------------------
  |  |  |  |   78|  13.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  592|  13.0k|        int r;
  593|       |
  594|  13.0k|        r = getenv_bool("SYSTEMD_NETWORK_PERSISTENT_STORAGE_READY");
  595|  13.0k|        if (r < 0 && r != -ENXIO)
  ------------------
  |  Branch (595:13): [True: 13.0k, False: 0]
  |  Branch (595:22): [True: 0, False: 13.0k]
  ------------------
  596|      0|                return log_debug_errno(r, "Failed to parse $SYSTEMD_NETWORK_PERSISTENT_STORAGE_READY environment variable, ignoring: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  597|  13.0k|        if (r <= 0)
  ------------------
  |  Branch (597:13): [True: 13.0k, False: 0]
  ------------------
  598|  13.0k|                return -EBADF;
  599|       |
  600|      0|        fd = open("/var/lib/systemd/network/", O_CLOEXEC | O_DIRECTORY);
  601|      0|        if (fd < 0)
  ------------------
  |  Branch (601:13): [True: 0, False: 0]
  ------------------
  602|      0|                return log_debug_errno(errno, "Failed to open %s, ignoring: %m", "/var/lib/systemd/network/");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  603|       |
  604|      0|        r = fd_is_read_only_fs(fd);
  605|      0|        if (r < 0)
  ------------------
  |  Branch (605:13): [True: 0, False: 0]
  ------------------
  606|      0|                return log_debug_errno(r, "Failed to check if /var/lib/systemd/network/ is writable: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  607|      0|        if (r > 0)
  ------------------
  |  Branch (607:13): [True: 0, False: 0]
  ------------------
  608|      0|                return log_debug_errno(SYNTHETIC_ERRNO(EROFS), "The directory /var/lib/systemd/network/ is on read-only filesystem.");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  609|       |
  610|      0|        return TAKE_FD(fd);
  ------------------
  |  |   99|      0|#define TAKE_FD(fd) TAKE_GENERIC(fd, int, -EBADF)
  |  |  ------------------
  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  386|      0|        })
  |  |  ------------------
  ------------------
  611|      0|}

route_metric_done:
   15|  20.2k|void route_metric_done(RouteMetric *metric) {
   16|  20.2k|        assert(metric);
  ------------------
  |  |   72|  20.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  20.2k|        do {                                                            \
  |  |  |  |   59|  20.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  20.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 20.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  20.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  20.2k|        } while (false)
  |  |  ------------------
  ------------------
   17|       |
   18|  20.2k|        free(metric->metrics);
   19|  20.2k|        free(metric->metrics_set);
   20|  20.2k|        free(metric->tcp_congestion_control_algo);
   21|  20.2k|}
route_metric_hash_func:
   50|  13.5k|void route_metric_hash_func(const RouteMetric *metric, struct siphash *state) {
   51|  13.5k|        assert(metric);
  ------------------
  |  |   72|  13.5k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.5k|        do {                                                            \
  |  |  |  |   59|  13.5k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  13.5k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.5k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.5k|        } while (false)
  |  |  ------------------
  ------------------
   52|       |
   53|  13.5k|        siphash24_compress_typesafe(metric->n_metrics, state);
  ------------------
  |  |   20|  13.5k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
   54|  13.5k|        siphash24_compress_safe(metric->metrics, sizeof(uint32_t) * metric->n_metrics, state);
   55|  13.5k|        siphash24_compress_string(metric->tcp_congestion_control_algo, state);
   56|  13.5k|}
route_metric_compare_func:
   58|  3.47k|int route_metric_compare_func(const RouteMetric *a, const RouteMetric *b) {
   59|  3.47k|        int r;
   60|       |
   61|  3.47k|        assert(a);
  ------------------
  |  |   72|  3.47k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.47k|        do {                                                            \
  |  |  |  |   59|  3.47k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.47k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.47k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.47k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.47k|        } while (false)
  |  |  ------------------
  ------------------
   62|  3.47k|        assert(b);
  ------------------
  |  |   72|  3.47k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.47k|        do {                                                            \
  |  |  |  |   59|  3.47k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.47k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.47k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.47k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.47k|        } while (false)
  |  |  ------------------
  ------------------
   63|       |
   64|  3.47k|        r = memcmp_nn(a->metrics, a->n_metrics * sizeof(uint32_t), b->metrics, b->n_metrics * sizeof(uint32_t));
   65|  3.47k|        if (r != 0)
  ------------------
  |  Branch (65:13): [True: 0, False: 3.47k]
  ------------------
   66|      0|                return r;
   67|       |
   68|  3.47k|        return strcmp_ptr(a->tcp_congestion_control_algo, b->tcp_congestion_control_algo);
   69|  3.47k|}

route_nexthops_done:
   83|  20.2k|void route_nexthops_done(Route *route) {
   84|  20.2k|        assert(route);
  ------------------
  |  |   72|  20.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  20.2k|        do {                                                            \
  |  |  |  |   59|  20.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  20.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 20.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  20.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  20.2k|        } while (false)
  |  |  ------------------
  ------------------
   85|       |
   86|  20.2k|        route_nexthop_done(&route->nexthop);
   87|  20.2k|        ordered_set_free(route->nexthops);
   88|  20.2k|}
route_nexthops_hash_func:
  169|  29.6k|void route_nexthops_hash_func(const Route *route, struct siphash *state) {
  170|  29.6k|        assert(route);
  ------------------
  |  |   72|  29.6k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  29.6k|        do {                                                            \
  |  |  |  |   59|  29.6k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  29.6k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 29.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  29.6k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  29.6k|        } while (false)
  |  |  ------------------
  ------------------
  171|       |
  172|  29.6k|        size_t nhs = route_n_nexthops(route);
  173|  29.6k|        siphash24_compress_typesafe(nhs, state);
  ------------------
  |  |   20|  29.6k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
  174|       |
  175|  29.6k|        switch (nhs) {
  176|      0|        case 0:
  ------------------
  |  Branch (176:9): [True: 0, False: 29.6k]
  ------------------
  177|      0|                siphash24_compress_typesafe(route->nexthop_id, state);
  ------------------
  |  |   20|      0|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
  178|      0|                return;
  179|       |
  180|  29.6k|        case 1:
  ------------------
  |  Branch (180:9): [True: 29.6k, False: 0]
  ------------------
  181|  29.6k|                route_nexthop_hash_func_full(&route->nexthop, state, /* with_weight = */ false);
  182|  29.6k|                return;
  183|       |
  184|      0|        default: {
  ------------------
  |  Branch (184:9): [True: 0, False: 29.6k]
  ------------------
  185|      0|                RouteNextHop *nh;
  186|      0|                ORDERED_SET_FOREACH(nh, route->nexthops)
  ------------------
  |  |   78|      0|        _ORDERED_SET_FOREACH(e, s, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |   76|      0|        for (Iterator i = ITERATOR_FIRST; ordered_set_iterate((s), &i, (void**)&(e)); )
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#define ITERATOR_FIRST ((Iterator) { .idx = _IDX_ITERATOR_FIRST, .next_key = NULL })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|      0|#define _IDX_ITERATOR_FIRST (UINT_MAX - 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (76:43): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  187|      0|                        route_nexthop_hash_func(nh, state);
  188|      0|        }}
  189|  29.6k|}
route_nexthops_compare_func:
  191|  15.7k|int route_nexthops_compare_func(const Route *a, const Route *b) {
  192|  15.7k|        int r;
  193|       |
  194|  15.7k|        assert(a);
  ------------------
  |  |   72|  15.7k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  15.7k|        do {                                                            \
  |  |  |  |   59|  15.7k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  15.7k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 15.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  15.7k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  15.7k|        } while (false)
  |  |  ------------------
  ------------------
  195|  15.7k|        assert(b);
  ------------------
  |  |   72|  15.7k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  15.7k|        do {                                                            \
  |  |  |  |   59|  15.7k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  15.7k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 15.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  15.7k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  15.7k|        } while (false)
  |  |  ------------------
  ------------------
  196|       |
  197|  15.7k|        size_t a_nhs = route_n_nexthops(a);
  198|  15.7k|        size_t b_nhs = route_n_nexthops(b);
  199|  15.7k|        r = CMP(a_nhs, b_nhs);
  ------------------
  |  |  288|  15.7k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  15.7k|        ({                                              \
  |  |  |  |  291|  15.7k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  15.7k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  15.7k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  15.7k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  15.7k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  15.7k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  15.7k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  15.7k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  15.7k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 15.7k]
  |  |  |  |  ------------------
  |  |  |  |  294|  15.7k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  15.7k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  15.7k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  15.7k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  15.7k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  15.7k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  15.7k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 15.7k]
  |  |  |  |  ------------------
  |  |  |  |  295|  15.7k|        })
  |  |  ------------------
  ------------------
  200|  15.7k|        if (r != 0)
  ------------------
  |  Branch (200:13): [True: 0, False: 15.7k]
  ------------------
  201|      0|                return r;
  202|       |
  203|  15.7k|        switch (a_nhs) {
  204|      0|        case 0:
  ------------------
  |  Branch (204:9): [True: 0, False: 15.7k]
  ------------------
  205|      0|                return CMP(a->nexthop_id, b->nexthop_id);
  ------------------
  |  |  288|      0|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|      0|        ({                                              \
  |  |  |  |  291|      0|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|      0|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|      0|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|        })
  |  |  ------------------
  ------------------
  206|       |
  207|  15.7k|        case 1:
  ------------------
  |  Branch (207:9): [True: 15.7k, False: 0]
  ------------------
  208|  15.7k|                return route_nexthop_compare_func_full(&a->nexthop, &b->nexthop, /* with_weight = */ false);
  209|       |
  210|      0|        default: {
  ------------------
  |  Branch (210:9): [True: 0, False: 15.7k]
  ------------------
  211|      0|                RouteNextHop *nh;
  212|      0|                ORDERED_SET_FOREACH(nh, a->nexthops) {
  ------------------
  |  |   78|      0|        _ORDERED_SET_FOREACH(e, s, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |   76|      0|        for (Iterator i = ITERATOR_FIRST; ordered_set_iterate((s), &i, (void**)&(e)); )
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#define ITERATOR_FIRST ((Iterator) { .idx = _IDX_ITERATOR_FIRST, .next_key = NULL })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|      0|#define _IDX_ITERATOR_FIRST (UINT_MAX - 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (76:43): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  213|      0|                        r = CMP(nh, (RouteNextHop*) ordered_set_get(a->nexthops, nh));
  ------------------
  |  |  288|      0|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|      0|        ({                                              \
  |  |  |  |  291|      0|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|      0|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|      0|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|        })
  |  |  ------------------
  ------------------
  214|      0|                        if (r != 0)
  ------------------
  |  Branch (214:29): [True: 0, False: 0]
  ------------------
  215|      0|                                return r;
  216|      0|                }
  217|      0|                return 0;
  218|      0|        }}
  219|  15.7k|}
route_section_verify_nexthops:
  826|  20.2k|int route_section_verify_nexthops(Route *route) {
  827|  20.2k|        assert(route);
  ------------------
  |  |   72|  20.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  20.2k|        do {                                                            \
  |  |  |  |   59|  20.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  20.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 20.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  20.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  20.2k|        } while (false)
  |  |  ------------------
  ------------------
  828|  20.2k|        assert(route->section);
  ------------------
  |  |   72|  20.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  20.2k|        do {                                                            \
  |  |  |  |   59|  20.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  20.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 20.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  20.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  20.2k|        } while (false)
  |  |  ------------------
  ------------------
  829|       |
  830|  20.2k|        if (route->gateway_from_dhcp_or_ra) {
  ------------------
  |  Branch (830:13): [True: 0, False: 20.2k]
  ------------------
  831|      0|                assert(route->network);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  832|       |
  833|      0|                if (route->nexthop.family == AF_UNSPEC)
  ------------------
  |  Branch (833:21): [True: 0, False: 0]
  ------------------
  834|       |                        /* When deprecated Gateway=_dhcp is set, then assume gateway family based on other settings. */
  835|      0|                        switch (route->family) {
  836|      0|                        case AF_UNSPEC:
  ------------------
  |  Branch (836:25): [True: 0, False: 0]
  ------------------
  837|      0|                                log_section_warning(route->section,
  ------------------
  |  |  193|      0|#define log_section_warning(section, ...)                log_section_full(section, LOG_WARNING, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  184|      0|        ({                                                              \
  |  |  |  |  185|      0|                if (BUILD_MODE_DEVELOPER)                               \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  186|      0|                        assert(!strstr(fmt, "%m"));                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|      0|                (void) log_section_full_errno_zerook(section, level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  166|      0|        ({                                                              \
  |  |  |  |  |  |  167|      0|                const ConfigSection *_s = (section);                    \
  |  |  |  |  |  |  168|      0|                log_syntax(/* unit = */ NULL,                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  353|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (356:61): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (356:74): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  358|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      0|                           level,                                       \
  |  |  |  |  |  |  170|      0|                           _s ? _s->filename : NULL,                    \
  |  |  |  |  |  |  171|      0|                           _s ? _s->line : 0,                           \
  |  |  |  |  |  |  172|      0|                           error,                                       \
  |  |  |  |  |  |  173|      0|                           __VA_ARGS__);                                \
  |  |  |  |  |  |  174|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  188|      0|        })
  |  |  ------------------
  ------------------
  838|      0|                                                    "Deprecated value \"_dhcp\" is specified for Gateway=. "
  839|      0|                                                    "Please use \"_dhcp4\" or \"_ipv6ra\" instead. Assuming \"_dhcp4\".");
  840|       |
  841|      0|                                route->nexthop.family = route->family = AF_INET;
  842|      0|                                break;
  843|      0|                        case AF_INET:
  ------------------
  |  Branch (843:25): [True: 0, False: 0]
  ------------------
  844|      0|                        case AF_INET6:
  ------------------
  |  Branch (844:25): [True: 0, False: 0]
  ------------------
  845|      0|                                log_section_warning(route->section,
  ------------------
  |  |  193|      0|#define log_section_warning(section, ...)                log_section_full(section, LOG_WARNING, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  184|      0|        ({                                                              \
  |  |  |  |  185|      0|                if (BUILD_MODE_DEVELOPER)                               \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  186|      0|                        assert(!strstr(fmt, "%m"));                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|      0|                (void) log_section_full_errno_zerook(section, level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  166|      0|        ({                                                              \
  |  |  |  |  |  |  167|      0|                const ConfigSection *_s = (section);                    \
  |  |  |  |  |  |  168|      0|                log_syntax(/* unit = */ NULL,                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  353|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (356:61): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (356:74): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (356:125): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  358|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      0|                           level,                                       \
  |  |  |  |  |  |  170|      0|                           _s ? _s->filename : NULL,                    \
  |  |  |  |  |  |  171|      0|                           _s ? _s->line : 0,                           \
  |  |  |  |  |  |  172|      0|                           error,                                       \
  |  |  |  |  |  |  173|      0|                           __VA_ARGS__);                                \
  |  |  |  |  |  |  174|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  188|      0|        })
  |  |  ------------------
  ------------------
  846|      0|                                                    "Deprecated value \"_dhcp\" is specified for Gateway=. "
  847|      0|                                                    "Assuming \"%s\" based on Destination=, Source=, or PreferredSource= setting.",
  848|      0|                                                    route->family == AF_INET ? "_dhcp4" : "_ipv6ra");
  849|       |
  850|      0|                                route->nexthop.family = route->family;
  851|      0|                                break;
  852|      0|                        default:
  ------------------
  |  Branch (852:25): [True: 0, False: 0]
  ------------------
  853|      0|                                return log_route_section(route, "Invalid route family.");
  ------------------
  |  |  817|      0|        ({                                                              \
  |  |  818|      0|                const Route *_route = (route);                          \
  |  |  819|      0|                log_section_warning_errno(                              \
  |  |  ------------------
  |  |  |  |  199|      0|#define log_section_warning_errno(section, error, ...)   log_section_full_errno(section, LOG_WARNING, error, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  177|      0|        ({                                                              \
  |  |  |  |  |  |  178|      0|                int _error = (error);                                   \
  |  |  |  |  |  |  179|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  180|      0|                log_section_full_errno_zerook(section, level, _error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  167|      0|                const ConfigSection *_s = (section);                    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (167:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      0|                log_syntax(/* unit = */ NULL,                           \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  353|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  |  |  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:61): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:74): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  358|      0|        })
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  169|      0|                           level,                                       \
  |  |  |  |  |  |  |  |  170|      0|                           _s ? _s->filename : NULL,                    \
  |  |  |  |  |  |  |  |  171|      0|                           _s ? _s->line : 0,                           \
  |  |  |  |  |  |  |  |  172|      0|                           error,                                       \
  |  |  |  |  |  |  |  |  173|      0|                           __VA_ARGS__);                                \
  |  |  |  |  |  |  |  |  174|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  181|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  820|      0|                                _route ? _route->section : NULL,        \
  |  |  821|      0|                                SYNTHETIC_ERRNO(EINVAL),                \
  |  |  822|      0|                                fmt " Ignoring [Route] section.",       \
  |  |  823|      0|                                ##__VA_ARGS__);                         \
  |  |  824|      0|        })
  ------------------
  854|      0|                        }
  855|       |
  856|      0|                switch (route->nexthop.family) {
  857|      0|                case AF_INET:
  ------------------
  |  Branch (857:17): [True: 0, False: 0]
  ------------------
  858|      0|                        if (!FLAGS_SET(route->network->dhcp, ADDRESS_FAMILY_IPV4))
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (858:29): [True: 0, False: 0]
  ------------------
  859|      0|                                return log_route_section(route, "Gateway=\"_dhcp4\" is specified but DHCPv4 client is disabled.");
  ------------------
  |  |  817|      0|        ({                                                              \
  |  |  818|      0|                const Route *_route = (route);                          \
  |  |  819|      0|                log_section_warning_errno(                              \
  |  |  ------------------
  |  |  |  |  199|      0|#define log_section_warning_errno(section, error, ...)   log_section_full_errno(section, LOG_WARNING, error, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  177|      0|        ({                                                              \
  |  |  |  |  |  |  178|      0|                int _error = (error);                                   \
  |  |  |  |  |  |  179|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  180|      0|                log_section_full_errno_zerook(section, level, _error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  167|      0|                const ConfigSection *_s = (section);                    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (167:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      0|                log_syntax(/* unit = */ NULL,                           \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  353|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  |  |  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:61): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:74): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  358|      0|        })
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  169|      0|                           level,                                       \
  |  |  |  |  |  |  |  |  170|      0|                           _s ? _s->filename : NULL,                    \
  |  |  |  |  |  |  |  |  171|      0|                           _s ? _s->line : 0,                           \
  |  |  |  |  |  |  |  |  172|      0|                           error,                                       \
  |  |  |  |  |  |  |  |  173|      0|                           __VA_ARGS__);                                \
  |  |  |  |  |  |  |  |  174|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  181|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  820|      0|                                _route ? _route->section : NULL,        \
  |  |  821|      0|                                SYNTHETIC_ERRNO(EINVAL),                \
  |  |  822|      0|                                fmt " Ignoring [Route] section.",       \
  |  |  823|      0|                                ##__VA_ARGS__);                         \
  |  |  824|      0|        })
  ------------------
  860|       |
  861|      0|                        route->source = NETWORK_CONFIG_SOURCE_DHCP4;
  862|      0|                        break;
  863|       |
  864|      0|                case AF_INET6:
  ------------------
  |  Branch (864:17): [True: 0, False: 0]
  ------------------
  865|      0|                        if (route->network->ndisc == 0)
  ------------------
  |  Branch (865:29): [True: 0, False: 0]
  ------------------
  866|      0|                                return log_route_section(route, "Gateway=\"_ipv6ra\" is specified but IPv6AcceptRA= is disabled.");
  ------------------
  |  |  817|      0|        ({                                                              \
  |  |  818|      0|                const Route *_route = (route);                          \
  |  |  819|      0|                log_section_warning_errno(                              \
  |  |  ------------------
  |  |  |  |  199|      0|#define log_section_warning_errno(section, error, ...)   log_section_full_errno(section, LOG_WARNING, error, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  177|      0|        ({                                                              \
  |  |  |  |  |  |  178|      0|                int _error = (error);                                   \
  |  |  |  |  |  |  179|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  180|      0|                log_section_full_errno_zerook(section, level, _error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  167|      0|                const ConfigSection *_s = (section);                    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (167:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      0|                log_syntax(/* unit = */ NULL,                           \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  353|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  |  |  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:61): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:74): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  358|      0|        })
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  169|      0|                           level,                                       \
  |  |  |  |  |  |  |  |  170|      0|                           _s ? _s->filename : NULL,                    \
  |  |  |  |  |  |  |  |  171|      0|                           _s ? _s->line : 0,                           \
  |  |  |  |  |  |  |  |  172|      0|                           error,                                       \
  |  |  |  |  |  |  |  |  173|      0|                           __VA_ARGS__);                                \
  |  |  |  |  |  |  |  |  174|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  181|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  820|      0|                                _route ? _route->section : NULL,        \
  |  |  821|      0|                                SYNTHETIC_ERRNO(EINVAL),                \
  |  |  822|      0|                                fmt " Ignoring [Route] section.",       \
  |  |  823|      0|                                ##__VA_ARGS__);                         \
  |  |  824|      0|        })
  ------------------
  867|       |
  868|      0|                        route->source = NETWORK_CONFIG_SOURCE_NDISC;
  869|      0|                        break;
  870|       |
  871|      0|                default:
  ------------------
  |  Branch (871:17): [True: 0, False: 0]
  ------------------
  872|      0|                        assert_not_reached();
  ------------------
  |  |   76|      0|        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  873|      0|                }
  874|      0|        }
  875|       |
  876|       |        /* When only Gateway= is specified, assume the route family based on the Gateway address. */
  877|  20.2k|        if (route->family == AF_UNSPEC)
  ------------------
  |  Branch (877:13): [True: 0, False: 20.2k]
  ------------------
  878|      0|                route->family = route->nexthop.family;
  879|       |
  880|  20.2k|        if (route->family == AF_UNSPEC) {
  ------------------
  |  Branch (880:13): [True: 0, False: 20.2k]
  ------------------
  881|      0|                assert(route->section);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  882|       |
  883|      0|                return log_route_section(route, "Route section without Gateway=, Destination=, Source=, or PreferredSource= field configured.");
  ------------------
  |  |  817|      0|        ({                                                              \
  |  |  818|      0|                const Route *_route = (route);                          \
  |  |  819|      0|                log_section_warning_errno(                              \
  |  |  ------------------
  |  |  |  |  199|      0|#define log_section_warning_errno(section, error, ...)   log_section_full_errno(section, LOG_WARNING, error, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  177|      0|        ({                                                              \
  |  |  |  |  |  |  178|      0|                int _error = (error);                                   \
  |  |  |  |  |  |  179|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  180|      0|                log_section_full_errno_zerook(section, level, _error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  167|      0|                const ConfigSection *_s = (section);                    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (167:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      0|                log_syntax(/* unit = */ NULL,                           \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  353|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  |  |  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:61): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:74): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  358|      0|        })
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  169|      0|                           level,                                       \
  |  |  |  |  |  |  |  |  170|      0|                           _s ? _s->filename : NULL,                    \
  |  |  |  |  |  |  |  |  171|      0|                           _s ? _s->line : 0,                           \
  |  |  |  |  |  |  |  |  172|      0|                           error,                                       \
  |  |  |  |  |  |  |  |  173|      0|                           __VA_ARGS__);                                \
  |  |  |  |  |  |  |  |  174|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  181|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  820|      0|                                _route ? _route->section : NULL,        \
  |  |  821|      0|                                SYNTHETIC_ERRNO(EINVAL),                \
  |  |  822|      0|                                fmt " Ignoring [Route] section.",       \
  |  |  823|      0|                                ##__VA_ARGS__);                         \
  |  |  824|      0|        })
  ------------------
  884|      0|        }
  885|       |
  886|  20.2k|        if (route->gateway_onlink < 0 && in_addr_is_set(route->nexthop.family, &route->nexthop.gw) &&
  ------------------
  |  Branch (886:13): [True: 20.2k, False: 0]
  |  Branch (886:42): [True: 0, False: 20.2k]
  ------------------
  887|  20.2k|            route->network && ordered_hashmap_isempty(route->network->addresses_by_section)) {
  ------------------
  |  Branch (887:13): [True: 0, False: 0]
  |  Branch (887:31): [True: 0, False: 0]
  ------------------
  888|       |                /* If no address is configured, in most cases the gateway cannot be reachable.
  889|       |                 * TODO: we may need to improve the condition above. */
  890|      0|                log_section_warning(route->section, "Gateway= without static address configured. Enabling GatewayOnLink= option.");
  ------------------
  |  |  193|      0|#define log_section_warning(section, ...)                log_section_full(section, LOG_WARNING, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  184|      0|        ({                                                              \
  |  |  |  |  185|      0|                if (BUILD_MODE_DEVELOPER)                               \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  186|      0|                        assert(!strstr(fmt, "%m"));                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|      0|                (void) log_section_full_errno_zerook(section, level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  166|      0|        ({                                                              \
  |  |  |  |  |  |  167|      0|                const ConfigSection *_s = (section);                    \
  |  |  |  |  |  |  168|      0|                log_syntax(/* unit = */ NULL,                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  353|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (356:61): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (356:74): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  358|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      0|                           level,                                       \
  |  |  |  |  |  |  170|      0|                           _s ? _s->filename : NULL,                    \
  |  |  |  |  |  |  171|      0|                           _s ? _s->line : 0,                           \
  |  |  |  |  |  |  172|      0|                           error,                                       \
  |  |  |  |  |  |  173|      0|                           __VA_ARGS__);                                \
  |  |  |  |  |  |  174|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  188|      0|        })
  |  |  ------------------
  ------------------
  891|      0|                route->gateway_onlink = true;
  892|      0|        }
  893|       |
  894|  20.2k|        if (route->gateway_onlink >= 0)
  ------------------
  |  Branch (894:13): [True: 0, False: 20.2k]
  ------------------
  895|      0|                SET_FLAG(route->flags, RTNH_F_ONLINK, route->gateway_onlink);
  ------------------
  |  |  412|      0|        (v) = UPDATE_FLAG(v, flag, b)
  |  |  ------------------
  |  |  |  |  410|      0|        ((b) ? ((orig) | (flag)) : ((orig) & ~(flag)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (410:10): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  896|       |
  897|  20.2k|        if (route->family == AF_INET6) {
  ------------------
  |  Branch (897:13): [True: 13.5k, False: 6.69k]
  ------------------
  898|  13.5k|                if (route->nexthop.family == AF_INET)
  ------------------
  |  Branch (898:21): [True: 0, False: 13.5k]
  ------------------
  899|      0|                        return log_route_section(route, "IPv4 gateway is configured for IPv6 route.");
  ------------------
  |  |  817|      0|        ({                                                              \
  |  |  818|      0|                const Route *_route = (route);                          \
  |  |  819|      0|                log_section_warning_errno(                              \
  |  |  ------------------
  |  |  |  |  199|      0|#define log_section_warning_errno(section, error, ...)   log_section_full_errno(section, LOG_WARNING, error, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  177|      0|        ({                                                              \
  |  |  |  |  |  |  178|      0|                int _error = (error);                                   \
  |  |  |  |  |  |  179|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  180|      0|                log_section_full_errno_zerook(section, level, _error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  167|      0|                const ConfigSection *_s = (section);                    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (167:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      0|                log_syntax(/* unit = */ NULL,                           \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  353|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  |  |  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:61): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:74): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  358|      0|        })
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  169|      0|                           level,                                       \
  |  |  |  |  |  |  |  |  170|      0|                           _s ? _s->filename : NULL,                    \
  |  |  |  |  |  |  |  |  171|      0|                           _s ? _s->line : 0,                           \
  |  |  |  |  |  |  |  |  172|      0|                           error,                                       \
  |  |  |  |  |  |  |  |  173|      0|                           __VA_ARGS__);                                \
  |  |  |  |  |  |  |  |  174|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  181|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  820|      0|                                _route ? _route->section : NULL,        \
  |  |  821|      0|                                SYNTHETIC_ERRNO(EINVAL),                \
  |  |  822|      0|                                fmt " Ignoring [Route] section.",       \
  |  |  823|      0|                                ##__VA_ARGS__);                         \
  |  |  824|      0|        })
  ------------------
  900|       |
  901|  13.5k|                RouteNextHop *nh;
  902|  13.5k|                ORDERED_SET_FOREACH(nh, route->nexthops)
  ------------------
  |  |   78|  13.5k|        _ORDERED_SET_FOREACH(e, s, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |   76|  13.5k|        for (Iterator i = ITERATOR_FIRST; ordered_set_iterate((s), &i, (void**)&(e)); )
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|  13.5k|#define ITERATOR_FIRST ((Iterator) { .idx = _IDX_ITERATOR_FIRST, .next_key = NULL })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|  13.5k|#define _IDX_ITERATOR_FIRST (UINT_MAX - 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (76:43): [True: 0, False: 13.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  903|      0|                        if (nh->family == AF_INET)
  ------------------
  |  Branch (903:29): [True: 0, False: 0]
  ------------------
  904|      0|                                return log_route_section(route, "IPv4 multipath route is specified for IPv6 route.");
  ------------------
  |  |  817|  13.5k|        ({                                                              \
  |  |  818|  13.5k|                const Route *_route = (route);                          \
  |  |  819|  13.5k|                log_section_warning_errno(                              \
  |  |  ------------------
  |  |  |  |  199|      0|#define log_section_warning_errno(section, error, ...)   log_section_full_errno(section, LOG_WARNING, error, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  177|      0|        ({                                                              \
  |  |  |  |  |  |  178|      0|                int _error = (error);                                   \
  |  |  |  |  |  |  179|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  180|      0|                log_section_full_errno_zerook(section, level, _error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  167|      0|                const ConfigSection *_s = (section);                    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (167:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      0|                log_syntax(/* unit = */ NULL,                           \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  353|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  |  |  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:61): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:74): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  358|      0|        })
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  169|      0|                           level,                                       \
  |  |  |  |  |  |  |  |  170|      0|                           _s ? _s->filename : NULL,                    \
  |  |  |  |  |  |  |  |  171|      0|                           _s ? _s->line : 0,                           \
  |  |  |  |  |  |  |  |  172|      0|                           error,                                       \
  |  |  |  |  |  |  |  |  173|      0|                           __VA_ARGS__);                                \
  |  |  |  |  |  |  |  |  174|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  181|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  820|  13.5k|                                _route ? _route->section : NULL,        \
  |  |  821|  13.5k|                                SYNTHETIC_ERRNO(EINVAL),                \
  |  |  822|  13.5k|                                fmt " Ignoring [Route] section.",       \
  |  |  823|  13.5k|                                ##__VA_ARGS__);                         \
  |  |  824|  13.5k|        })
  ------------------
  905|  13.5k|        }
  906|       |
  907|  20.2k|        if (route->nexthop_id != 0 &&
  ------------------
  |  Branch (907:13): [True: 0, False: 20.2k]
  ------------------
  908|  20.2k|            (route->gateway_from_dhcp_or_ra ||
  ------------------
  |  Branch (908:14): [True: 0, False: 0]
  ------------------
  909|      0|             in_addr_is_set(route->nexthop.family, &route->nexthop.gw) ||
  ------------------
  |  Branch (909:14): [True: 0, False: 0]
  ------------------
  910|      0|             !ordered_set_isempty(route->nexthops)))
  ------------------
  |  Branch (910:14): [True: 0, False: 0]
  ------------------
  911|      0|                return log_route_section(route, "NextHopId= cannot be specified with Gateway= or MultiPathRoute=.");
  ------------------
  |  |  817|      0|        ({                                                              \
  |  |  818|      0|                const Route *_route = (route);                          \
  |  |  819|      0|                log_section_warning_errno(                              \
  |  |  ------------------
  |  |  |  |  199|      0|#define log_section_warning_errno(section, error, ...)   log_section_full_errno(section, LOG_WARNING, error, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  177|      0|        ({                                                              \
  |  |  |  |  |  |  178|      0|                int _error = (error);                                   \
  |  |  |  |  |  |  179|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  180|      0|                log_section_full_errno_zerook(section, level, _error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  167|      0|                const ConfigSection *_s = (section);                    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (167:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      0|                log_syntax(/* unit = */ NULL,                           \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  353|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  |  |  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:61): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:74): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  358|      0|        })
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  169|      0|                           level,                                       \
  |  |  |  |  |  |  |  |  170|      0|                           _s ? _s->filename : NULL,                    \
  |  |  |  |  |  |  |  |  171|      0|                           _s ? _s->line : 0,                           \
  |  |  |  |  |  |  |  |  172|      0|                           error,                                       \
  |  |  |  |  |  |  |  |  173|      0|                           __VA_ARGS__);                                \
  |  |  |  |  |  |  |  |  174|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  181|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  820|      0|                                _route ? _route->section : NULL,        \
  |  |  821|      0|                                SYNTHETIC_ERRNO(EINVAL),                \
  |  |  822|      0|                                fmt " Ignoring [Route] section.",       \
  |  |  823|      0|                                ##__VA_ARGS__);                         \
  |  |  824|      0|        })
  ------------------
  912|       |
  913|  20.2k|        if (route_is_reject(route) &&
  ------------------
  |  Branch (913:13): [True: 0, False: 20.2k]
  ------------------
  914|  20.2k|            (route->gateway_from_dhcp_or_ra ||
  ------------------
  |  Branch (914:14): [True: 0, False: 0]
  ------------------
  915|      0|             in_addr_is_set(route->nexthop.family, &route->nexthop.gw) ||
  ------------------
  |  Branch (915:14): [True: 0, False: 0]
  ------------------
  916|      0|             !ordered_set_isempty(route->nexthops)))
  ------------------
  |  Branch (916:14): [True: 0, False: 0]
  ------------------
  917|      0|                return log_route_section(route, "Reject type route cannot be specified with Gateway= or MultiPathRoute=.");
  ------------------
  |  |  817|      0|        ({                                                              \
  |  |  818|      0|                const Route *_route = (route);                          \
  |  |  819|      0|                log_section_warning_errno(                              \
  |  |  ------------------
  |  |  |  |  199|      0|#define log_section_warning_errno(section, error, ...)   log_section_full_errno(section, LOG_WARNING, error, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  177|      0|        ({                                                              \
  |  |  |  |  |  |  178|      0|                int _error = (error);                                   \
  |  |  |  |  |  |  179|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  180|      0|                log_section_full_errno_zerook(section, level, _error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  167|      0|                const ConfigSection *_s = (section);                    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (167:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      0|                log_syntax(/* unit = */ NULL,                           \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  353|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  |  |  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:61): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:74): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  358|      0|        })
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  169|      0|                           level,                                       \
  |  |  |  |  |  |  |  |  170|      0|                           _s ? _s->filename : NULL,                    \
  |  |  |  |  |  |  |  |  171|      0|                           _s ? _s->line : 0,                           \
  |  |  |  |  |  |  |  |  172|      0|                           error,                                       \
  |  |  |  |  |  |  |  |  173|      0|                           __VA_ARGS__);                                \
  |  |  |  |  |  |  |  |  174|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  181|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  820|      0|                                _route ? _route->section : NULL,        \
  |  |  821|      0|                                SYNTHETIC_ERRNO(EINVAL),                \
  |  |  822|      0|                                fmt " Ignoring [Route] section.",       \
  |  |  823|      0|                                ##__VA_ARGS__);                         \
  |  |  824|      0|        })
  ------------------
  918|       |
  919|  20.2k|        if ((route->gateway_from_dhcp_or_ra ||
  ------------------
  |  Branch (919:14): [True: 0, False: 20.2k]
  ------------------
  920|  20.2k|             in_addr_is_set(route->nexthop.family, &route->nexthop.gw)) &&
  ------------------
  |  Branch (920:14): [True: 0, False: 20.2k]
  ------------------
  921|  20.2k|            !ordered_set_isempty(route->nexthops))
  ------------------
  |  Branch (921:13): [True: 0, False: 0]
  ------------------
  922|      0|                return log_route_section(route, "Gateway= cannot be specified with MultiPathRoute=.");
  ------------------
  |  |  817|      0|        ({                                                              \
  |  |  818|      0|                const Route *_route = (route);                          \
  |  |  819|      0|                log_section_warning_errno(                              \
  |  |  ------------------
  |  |  |  |  199|      0|#define log_section_warning_errno(section, error, ...)   log_section_full_errno(section, LOG_WARNING, error, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  177|      0|        ({                                                              \
  |  |  |  |  |  |  178|      0|                int _error = (error);                                   \
  |  |  |  |  |  |  179|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  180|      0|                log_section_full_errno_zerook(section, level, _error, __VA_ARGS__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  167|      0|                const ConfigSection *_s = (section);                    \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (167:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  168|      0|                log_syntax(/* unit = */ NULL,                           \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  353|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  |  |  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:61): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (356:74): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  358|      0|        })
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  169|      0|                           level,                                       \
  |  |  |  |  |  |  |  |  170|      0|                           _s ? _s->filename : NULL,                    \
  |  |  |  |  |  |  |  |  171|      0|                           _s ? _s->line : 0,                           \
  |  |  |  |  |  |  |  |  172|      0|                           error,                                       \
  |  |  |  |  |  |  |  |  173|      0|                           __VA_ARGS__);                                \
  |  |  |  |  |  |  |  |  174|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  181|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  820|      0|                                _route ? _route->section : NULL,        \
  |  |  821|      0|                                SYNTHETIC_ERRNO(EINVAL),                \
  |  |  822|      0|                                fmt " Ignoring [Route] section.",       \
  |  |  823|      0|                                ##__VA_ARGS__);                         \
  |  |  824|      0|        })
  ------------------
  923|       |
  924|  20.2k|        if (ordered_set_size(route->nexthops) == 1) {
  ------------------
  |  Branch (924:13): [True: 0, False: 20.2k]
  ------------------
  925|      0|                _cleanup_(route_nexthop_freep) RouteNextHop *nh = ordered_set_steal_first(route->nexthops);
  ------------------
  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  926|       |
  927|      0|                route_nexthop_done(&route->nexthop);
  928|      0|                route->nexthop = TAKE_STRUCT(*nh);
  ------------------
  |  |  390|      0|#define TAKE_STRUCT(s) TAKE_STRUCT_TYPE(s, typeof(s))
  |  |  ------------------
  |  |  |  |  389|      0|#define TAKE_STRUCT_TYPE(s, type) TAKE_GENERIC(s, type, {})
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  929|       |
  930|      0|                assert(ordered_set_isempty(route->nexthops));
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  931|      0|                route->nexthops = ordered_set_free(route->nexthops);
  932|      0|        }
  933|       |
  934|  20.2k|        return 0;
  935|  20.2k|}
networkd-route-nexthop.c:route_nexthop_done:
   68|  20.2k|static void route_nexthop_done(RouteNextHop *nh) {
   69|  20.2k|        assert(nh);
  ------------------
  |  |   72|  20.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  20.2k|        do {                                                            \
  |  |  |  |   59|  20.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  20.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 20.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  20.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  20.2k|        } while (false)
  |  |  ------------------
  ------------------
   70|       |
   71|  20.2k|        free(nh->ifname);
   72|  20.2k|}
networkd-route-nexthop.c:route_n_nexthops:
  159|  61.1k|static size_t route_n_nexthops(const Route *route) {
  160|  61.1k|        if (route->nexthop_id != 0 || route_is_reject(route))
  ------------------
  |  Branch (160:13): [True: 0, False: 61.1k]
  |  Branch (160:39): [True: 0, False: 61.1k]
  ------------------
  161|      0|                return 0;
  162|       |
  163|  61.1k|        if (ordered_set_isempty(route->nexthops))
  ------------------
  |  Branch (163:13): [True: 61.1k, False: 0]
  ------------------
  164|  61.1k|                return 1;
  165|       |
  166|      0|        return ordered_set_size(route->nexthops);
  167|  61.1k|}
networkd-route-nexthop.c:route_nexthop_hash_func_full:
   90|  29.6k|static void route_nexthop_hash_func_full(const RouteNextHop *nh, struct siphash *state, bool with_weight) {
   91|  29.6k|        assert(nh);
  ------------------
  |  |   72|  29.6k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  29.6k|        do {                                                            \
  |  |  |  |   59|  29.6k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  29.6k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 29.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  29.6k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  29.6k|        } while (false)
  |  |  ------------------
  ------------------
   92|  29.6k|        assert(state);
  ------------------
  |  |   72|  29.6k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  29.6k|        do {                                                            \
  |  |  |  |   59|  29.6k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  29.6k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 29.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  29.6k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  29.6k|        } while (false)
  |  |  ------------------
  ------------------
   93|       |
   94|       |        /* See nh_comp() in net/ipv4/fib_semantics.c of the kernel. */
   95|       |
   96|  29.6k|        siphash24_compress_typesafe(nh->family, state);
  ------------------
  |  |   20|  29.6k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
   97|  29.6k|        if (!IN_SET(nh->family, AF_INET, AF_INET6))
  ------------------
  |  |  361|  29.6k|        ({                                                              \
  |  |  362|  29.6k|                bool _found = false;                                    \
  |  |  363|  29.6k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  29.6k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  29.6k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  29.6k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  29.6k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  29.6k|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 29.6k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 29.6k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|  29.6k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 29.6k, False: 0]
  |  |  ------------------
  |  |  372|  29.6k|                        ;                                               \
  |  |  373|  29.6k|                }                                                       \
  |  |  374|  29.6k|                _found;                                                 \
  |  |  375|  29.6k|        })
  ------------------
  |  Branch (97:13): [True: 29.6k, False: 0]
  ------------------
   98|  29.6k|                return;
   99|       |
  100|      0|        in_addr_hash_func(&nh->gw, nh->family, state);
  101|      0|        if (with_weight)
  ------------------
  |  Branch (101:13): [True: 0, False: 0]
  ------------------
  102|      0|                siphash24_compress_typesafe(nh->weight, state);
  ------------------
  |  |   20|      0|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
  103|      0|        siphash24_compress_typesafe(nh->ifindex, state);
  ------------------
  |  |   20|      0|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
  104|      0|        if (nh->ifindex == 0)
  ------------------
  |  Branch (104:13): [True: 0, False: 0]
  ------------------
  105|      0|                siphash24_compress_string(nh->ifname, state); /* For Network or Request object. */
  106|      0|}
networkd-route-nexthop.c:route_nexthop_compare_func_full:
  108|  15.7k|static int route_nexthop_compare_func_full(const RouteNextHop *a, const RouteNextHop *b, bool with_weight) {
  109|  15.7k|        int r;
  110|       |
  111|  15.7k|        assert(a);
  ------------------
  |  |   72|  15.7k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  15.7k|        do {                                                            \
  |  |  |  |   59|  15.7k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  15.7k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 15.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  15.7k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  15.7k|        } while (false)
  |  |  ------------------
  ------------------
  112|  15.7k|        assert(b);
  ------------------
  |  |   72|  15.7k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  15.7k|        do {                                                            \
  |  |  |  |   59|  15.7k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  15.7k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 15.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  15.7k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  15.7k|        } while (false)
  |  |  ------------------
  ------------------
  113|       |
  114|  15.7k|        r = CMP(a->family, b->family);
  ------------------
  |  |  288|  15.7k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  15.7k|        ({                                              \
  |  |  |  |  291|  15.7k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  15.7k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  15.7k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  15.7k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  15.7k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  15.7k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  15.7k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  15.7k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  15.7k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 15.7k]
  |  |  |  |  ------------------
  |  |  |  |  294|  15.7k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  15.7k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  15.7k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  15.7k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  15.7k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  15.7k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  15.7k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 15.7k]
  |  |  |  |  ------------------
  |  |  |  |  295|  15.7k|        })
  |  |  ------------------
  ------------------
  115|  15.7k|        if (r != 0)
  ------------------
  |  Branch (115:13): [True: 0, False: 15.7k]
  ------------------
  116|      0|                return r;
  117|       |
  118|  15.7k|        if (!IN_SET(a->family, AF_INET, AF_INET6))
  ------------------
  |  |  361|  15.7k|        ({                                                              \
  |  |  362|  15.7k|                bool _found = false;                                    \
  |  |  363|  15.7k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  15.7k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  15.7k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  15.7k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  15.7k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  15.7k|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 15.7k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 15.7k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|  15.7k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 15.7k, False: 0]
  |  |  ------------------
  |  |  372|  15.7k|                        ;                                               \
  |  |  373|  15.7k|                }                                                       \
  |  |  374|  15.7k|                _found;                                                 \
  |  |  375|  15.7k|        })
  ------------------
  |  Branch (118:13): [True: 15.7k, False: 0]
  ------------------
  119|  15.7k|                return 0;
  120|       |
  121|      0|        r = memcmp(&a->gw, &b->gw, FAMILY_ADDRESS_SIZE(a->family));
  122|      0|        if (r != 0)
  ------------------
  |  Branch (122:13): [True: 0, False: 0]
  ------------------
  123|      0|                return r;
  124|       |
  125|      0|        if (with_weight) {
  ------------------
  |  Branch (125:13): [True: 0, False: 0]
  ------------------
  126|      0|                r = CMP(a->weight, b->weight);
  ------------------
  |  |  288|      0|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|      0|        ({                                              \
  |  |  |  |  291|      0|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|      0|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|      0|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|        })
  |  |  ------------------
  ------------------
  127|      0|                if (r != 0)
  ------------------
  |  Branch (127:21): [True: 0, False: 0]
  ------------------
  128|      0|                        return r;
  129|      0|        }
  130|       |
  131|      0|        r = CMP(a->ifindex, b->ifindex);
  ------------------
  |  |  288|      0|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|      0|        ({                                              \
  |  |  |  |  291|      0|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|      0|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|      0|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|      0|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|      0|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|      0|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|        })
  |  |  ------------------
  ------------------
  132|      0|        if (r != 0)
  ------------------
  |  Branch (132:13): [True: 0, False: 0]
  ------------------
  133|      0|                return r;
  134|       |
  135|      0|        if (a->ifindex == 0) {
  ------------------
  |  Branch (135:13): [True: 0, False: 0]
  ------------------
  136|      0|                r = strcmp_ptr(a->ifname, b->ifname);
  137|      0|                if (r != 0)
  ------------------
  |  Branch (137:21): [True: 0, False: 0]
  ------------------
  138|      0|                        return r;
  139|      0|        }
  140|       |
  141|      0|        return 0;
  142|      0|}

route_type_is_reject:
   47|  81.4k|bool route_type_is_reject(uint8_t type) {
   48|  81.4k|        return IN_SET(type, RTN_UNREACHABLE, RTN_PROHIBIT, RTN_BLACKHOLE, RTN_THROW);
  ------------------
  |  |  361|  81.4k|        ({                                                              \
  |  |  362|  81.4k|                bool _found = false;                                    \
  |  |  363|  81.4k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  81.4k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  81.4k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  81.4k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  81.4k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  81.4k|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  336|      0|#define  CASE_F_4(X, ...) case X:  CASE_F_3( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 81.4k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 81.4k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 81.4k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (336:27): [True: 0, False: 81.4k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|  81.4k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 81.4k, False: 0]
  |  |  ------------------
  |  |  372|  81.4k|                        ;                                               \
  |  |  373|  81.4k|                }                                                       \
  |  |  374|  81.4k|                _found;                                                 \
  |  |  375|  81.4k|        })
  ------------------
   49|  81.4k|}
route_is_reject:
   51|  81.4k|bool route_is_reject(const Route *route) {
   52|  81.4k|        return route_type_is_reject(ASSERT_PTR(route)->type);
  ------------------
  |  |   81|  81.4k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  81.4k|        ({                                 \
  |  |  |  |   85|  81.4k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  81.4k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  81.4k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  81.4k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  81.4k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  81.4k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  81.4k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 81.4k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  81.4k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  81.4k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  81.4k|                var;                       \
  |  |  |  |   88|  81.4k|        })
  |  |  ------------------
  ------------------
   53|  81.4k|}
manager_get_route_table_from_string:
  426|  2.68k|int manager_get_route_table_from_string(const Manager *m, const char *s, uint32_t *ret) {
  427|  2.68k|        uint32_t t;
  428|  2.68k|        int r;
  429|       |
  430|  2.68k|        assert(m);
  ------------------
  |  |   72|  2.68k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.68k|        do {                                                            \
  |  |  |  |   59|  2.68k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.68k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.68k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.68k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.68k|        } while (false)
  |  |  ------------------
  ------------------
  431|  2.68k|        assert(s);
  ------------------
  |  |   72|  2.68k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.68k|        do {                                                            \
  |  |  |  |   59|  2.68k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.68k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.68k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.68k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.68k|        } while (false)
  |  |  ------------------
  ------------------
  432|  2.68k|        assert(ret);
  ------------------
  |  |   72|  2.68k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.68k|        do {                                                            \
  |  |  |  |   59|  2.68k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.68k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.68k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.68k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.68k|        } while (false)
  |  |  ------------------
  ------------------
  433|       |
  434|  2.68k|        r = route_table_from_string(s);
  435|  2.68k|        if (r >= 0) {
  ------------------
  |  Branch (435:13): [True: 205, False: 2.48k]
  ------------------
  436|    205|                *ret = (uint32_t) r;
  437|    205|                return 0;
  438|    205|        }
  439|       |
  440|  2.48k|        t = PTR_TO_UINT32(hashmap_get(m->route_table_numbers_by_name, s));
  ------------------
  |  |  104|  2.48k|#define PTR_TO_UINT32(p) ((uint32_t) ((uintptr_t) (p)))
  ------------------
  441|  2.48k|        if (t != 0) {
  ------------------
  |  Branch (441:13): [True: 0, False: 2.48k]
  ------------------
  442|      0|                *ret = t;
  443|      0|                return 0;
  444|      0|        }
  445|       |
  446|  2.48k|        r = safe_atou32(s, &t);
  447|  2.48k|        if (r < 0)
  ------------------
  |  Branch (447:13): [True: 361, False: 2.12k]
  ------------------
  448|    361|                return r;
  449|       |
  450|  2.12k|        if (t == 0)
  ------------------
  |  Branch (450:13): [True: 373, False: 1.75k]
  ------------------
  451|    373|                return -ERANGE;
  452|       |
  453|  1.75k|        *ret = t;
  454|  1.75k|        return 0;
  455|  2.12k|}

route_detach:
   59|  4.51k|void route_detach(Route *route) {
   60|  4.51k|        route_unref(route_detach_impl(route));
   61|  4.51k|}
route_new:
  245|  20.2k|int route_new(Route **ret) {
  246|  20.2k|        _cleanup_(route_unrefp) Route *route = NULL;
  ------------------
  |  |   78|  20.2k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  247|       |
  248|  20.2k|        route = new(Route, 1);
  ------------------
  |  |   17|  20.2k|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
  249|  20.2k|        if (!route)
  ------------------
  |  Branch (249:13): [True: 0, False: 20.2k]
  ------------------
  250|      0|                return -ENOMEM;
  251|       |
  252|  20.2k|        *route = (Route) {
  253|  20.2k|                .n_ref = 1,
  254|  20.2k|                .family = AF_UNSPEC,
  255|  20.2k|                .scope = RT_SCOPE_UNIVERSE,
  256|  20.2k|                .protocol = RTPROT_UNSPEC,
  257|  20.2k|                .type = RTN_UNICAST,
  258|  20.2k|                .table = RT_TABLE_MAIN,
  259|  20.2k|                .lifetime_usec = USEC_INFINITY,
  ------------------
  |  |   35|  20.2k|#define USEC_INFINITY ((usec_t) UINT64_MAX)
  ------------------
  260|  20.2k|                .gateway_onlink = -1,
  261|  20.2k|        };
  262|       |
  263|  20.2k|        *ret = TAKE_PTR(route);
  ------------------
  |  |  388|  20.2k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  20.2k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  20.2k|        ({                                                       \
  |  |  |  |  |  |  381|  20.2k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  20.2k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  20.2k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  20.2k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  20.2k|                _var_;                                           \
  |  |  |  |  |  |  386|  20.2k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  264|       |
  265|  20.2k|        return 0;
  266|  20.2k|}
route_section_verify:
 2032|  20.2k|int route_section_verify(Route *route) {
 2033|  20.2k|        int r;
 2034|       |
 2035|  20.2k|        assert(route);
  ------------------
  |  |   72|  20.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  20.2k|        do {                                                            \
  |  |  |  |   59|  20.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  20.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 20.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  20.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  20.2k|        } while (false)
  |  |  ------------------
  ------------------
 2036|  20.2k|        assert(route->section);
  ------------------
  |  |   72|  20.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  20.2k|        do {                                                            \
  |  |  |  |   59|  20.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  20.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 20.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  20.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  20.2k|        } while (false)
  |  |  ------------------
  ------------------
 2037|       |
 2038|  20.2k|        if (section_is_invalid(route->section))
  ------------------
  |  Branch (2038:13): [True: 0, False: 20.2k]
  ------------------
 2039|      0|                return -EINVAL;
 2040|       |
 2041|       |        /* Currently, we do not support static route with finite lifetime. */
 2042|  20.2k|        assert(route->lifetime_usec == USEC_INFINITY);
  ------------------
  |  |   72|  20.2k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  20.2k|        do {                                                            \
  |  |  |  |   59|  20.2k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  20.2k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 20.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  20.2k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  20.2k|        } while (false)
  |  |  ------------------
  ------------------
 2043|       |
 2044|  20.2k|        r = route_section_verify_nexthops(route);
 2045|  20.2k|        if (r < 0)
  ------------------
  |  Branch (2045:13): [True: 0, False: 20.2k]
  ------------------
 2046|      0|                return r;
 2047|       |
 2048|       |        /* table */
 2049|  20.2k|        if (!route->table_set && route->network && route->network->vrf) {
  ------------------
  |  Branch (2049:13): [True: 0, False: 20.2k]
  |  Branch (2049:34): [True: 0, False: 0]
  |  Branch (2049:52): [True: 0, False: 0]
  ------------------
 2050|      0|                route->table = VRF(route->network->vrf)->table;
 2051|      0|                route->table_set = true;
 2052|      0|        }
 2053|       |
 2054|  20.2k|        if (!route->table_set && IN_SET(route->type, RTN_LOCAL, RTN_BROADCAST, RTN_ANYCAST, RTN_NAT))
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  362|      0|                bool _found = false;                                    \
  |  |  363|      0|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|      0|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|      0|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|      0|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      0|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|      0|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  336|      0|#define  CASE_F_4(X, ...) case X:  CASE_F_3( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (336:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|      0|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|      0|                }                                                       \
  |  |  374|      0|                _found;                                                 \
  |  |  375|      0|        })
  ------------------
  |  Branch (2054:13): [True: 0, False: 20.2k]
  ------------------
 2055|      0|                route->table = RT_TABLE_LOCAL;
 2056|       |
 2057|       |        /* scope */
 2058|  20.2k|        if (!route->scope_set && route->family == AF_INET) {
  ------------------
  |  Branch (2058:13): [True: 20.2k, False: 0]
  |  Branch (2058:34): [True: 6.69k, False: 13.5k]
  ------------------
 2059|  6.69k|                if (IN_SET(route->type, RTN_LOCAL, RTN_NAT))
  ------------------
  |  |  361|  6.69k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 0, False: 6.69k]
  |  |  ------------------
  |  |  362|  6.69k|                bool _found = false;                                    \
  |  |  363|  6.69k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  6.69k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  6.69k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  6.69k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  6.69k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  6.69k|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 6.69k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 6.69k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|  6.69k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 6.69k, False: 0]
  |  |  ------------------
  |  |  372|  6.69k|                        ;                                               \
  |  |  373|  6.69k|                }                                                       \
  |  |  374|  6.69k|                _found;                                                 \
  |  |  375|  6.69k|        })
  ------------------
 2060|      0|                        route->scope = RT_SCOPE_HOST;
 2061|  6.69k|                else if (IN_SET(route->type, RTN_BROADCAST, RTN_ANYCAST, RTN_MULTICAST))
  ------------------
  |  |  361|  6.69k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 0, False: 6.69k]
  |  |  ------------------
  |  |  362|  6.69k|                bool _found = false;                                    \
  |  |  363|  6.69k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  6.69k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  6.69k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  6.69k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  6.69k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  6.69k|                switch (x) {                                            \
  |  |  368|      0|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      0|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      0|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  335|      0|#define  CASE_F_3(X, ...) case X:  CASE_F_2( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  334|      0|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  333|      0|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 6.69k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 0, False: 6.69k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (335:27): [True: 0, False: 6.69k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      0|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      0|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      0|                        _found = true;                                  \
  |  |  370|      0|                        break;                                          \
  |  |  371|  6.69k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 6.69k, False: 0]
  |  |  ------------------
  |  |  372|  6.69k|                        ;                                               \
  |  |  373|  6.69k|                }                                                       \
  |  |  374|  6.69k|                _found;                                                 \
  |  |  375|  6.69k|        })
  ------------------
 2062|      0|                        route->scope = RT_SCOPE_LINK;
 2063|  6.69k|                else if (IN_SET(route->type, RTN_UNICAST, RTN_UNSPEC) &&
  ------------------
  |  |  361|  13.3k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 6.69k, False: 0]
  |  |  ------------------
  |  |  362|  13.3k|                bool _found = false;                                    \
  |  |  363|  13.3k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  13.3k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  13.3k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  13.3k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  6.69k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  13.3k|                switch (x) {                                            \
  |  |  368|  6.69k|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|  6.69k|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|  6.69k|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|  6.69k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|  6.69k|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|  6.69k|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 6.69k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 6.69k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|  6.69k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|  6.69k|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|  6.69k|                        _found = true;                                  \
  |  |  370|  6.69k|                        break;                                          \
  |  |  371|  6.69k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 0, False: 6.69k]
  |  |  ------------------
  |  |  372|      0|                        ;                                               \
  |  |  373|  13.3k|                }                                                       \
  |  |  374|  13.3k|                _found;                                                 \
  |  |  375|  6.69k|        })
  ------------------
 2064|  6.69k|                         !route->gateway_from_dhcp_or_ra &&
  ------------------
  |  Branch (2064:26): [True: 6.69k, False: 0]
  ------------------
 2065|  6.69k|                         !in_addr_is_set(route->nexthop.family, &route->nexthop.gw) &&
  ------------------
  |  Branch (2065:26): [True: 6.69k, False: 0]
  ------------------
 2066|  6.69k|                         ordered_set_isempty(route->nexthops) &&
  ------------------
  |  Branch (2066:26): [True: 6.69k, False: 0]
  ------------------
 2067|  6.69k|                         route->nexthop_id == 0)
  ------------------
  |  Branch (2067:26): [True: 6.69k, False: 0]
  ------------------
 2068|  6.69k|                        route->scope = RT_SCOPE_LINK;
 2069|  6.69k|        }
 2070|       |
 2071|       |        /* IPv6 route */
 2072|  20.2k|        if (route->family == AF_INET6) {
  ------------------
  |  Branch (2072:13): [True: 13.5k, False: 6.69k]
  ------------------
 2073|  13.5k|                if (route->scope != RT_SCOPE_UNIVERSE) {
  ------------------
  |  Branch (2073:21): [True: 0, False: 13.5k]
  ------------------
 2074|      0|                        log_section_warning(route->section, "Scope= is specified for IPv6 route. It will be ignored.");
  ------------------
  |  |  193|      0|#define log_section_warning(section, ...)                log_section_full(section, LOG_WARNING, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  184|      0|        ({                                                              \
  |  |  |  |  185|      0|                if (BUILD_MODE_DEVELOPER)                               \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  186|      0|                        assert(!strstr(fmt, "%m"));                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|      0|                (void) log_section_full_errno_zerook(section, level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  166|      0|        ({                                                              \
  |  |  |  |  |  |  167|      0|                const ConfigSection *_s = (section);                    \
  |  |  |  |  |  |  168|      0|                log_syntax(/* unit = */ NULL,                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  353|      0|        ({                                                              \
  |  |  |  |  |  |  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (356:61): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (356:74): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  358|      0|        })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  169|      0|                           level,                                       \
  |  |  |  |  |  |  170|      0|                           _s ? _s->filename : NULL,                    \
  |  |  |  |  |  |  171|      0|                           _s ? _s->line : 0,                           \
  |  |  |  |  |  |  172|      0|                           error,                                       \
  |  |  |  |  |  |  173|      0|                           __VA_ARGS__);                                \
  |  |  |  |  |  |  174|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  188|      0|        })
  |  |  ------------------
  ------------------
 2075|      0|                        route->scope = RT_SCOPE_UNIVERSE;
 2076|      0|                }
 2077|       |
 2078|  13.5k|                if (route->priority == 0)
  ------------------
  |  Branch (2078:21): [True: 6.58k, False: 6.99k]
  ------------------
 2079|  6.58k|                        route->priority = IP6_RT_PRIO_USER;
 2080|  13.5k|        }
 2081|       |
 2082|  20.2k|        return 0;
 2083|  20.2k|}
networkd-route.c:route_detach_impl:
   32|  24.7k|static Route* route_detach_impl(Route *route) {
   33|  24.7k|        assert(route);
  ------------------
  |  |   72|  24.7k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  24.7k|        do {                                                            \
  |  |  |  |   59|  24.7k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  24.7k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 24.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  24.7k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  24.7k|        } while (false)
  |  |  ------------------
  ------------------
   34|  24.7k|        assert(!!route->network + !!route->manager + !!route->wireguard <= 1);
  ------------------
  |  |   72|  24.7k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  24.7k|        do {                                                            \
  |  |  |  |   59|  24.7k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  24.7k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 24.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  24.7k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  24.7k|        } while (false)
  |  |  ------------------
  ------------------
   35|       |
   36|  24.7k|        if (route->network) {
  ------------------
  |  Branch (36:13): [True: 0, False: 24.7k]
  ------------------
   37|      0|                assert(route->section);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
   38|      0|                hashmap_remove(route->network->routes_by_section, route->section);
   39|      0|                route->network = NULL;
   40|      0|                return route;
   41|      0|        }
   42|       |
   43|  24.7k|        if (route->manager) {
  ------------------
  |  Branch (43:13): [True: 0, False: 24.7k]
  ------------------
   44|      0|                route_detach_from_nexthop(route);
   45|      0|                set_remove(route->manager->routes, route);
   46|      0|                route->manager = NULL;
   47|      0|                return route;
   48|      0|        }
   49|       |
   50|  24.7k|        if (route->wireguard) {
  ------------------
  |  Branch (50:13): [True: 4.51k, False: 20.2k]
  ------------------
   51|  4.51k|                set_remove(route->wireguard->routes, route);
   52|  4.51k|                route->wireguard = NULL;
   53|  4.51k|                return route;
   54|  4.51k|        }
   55|       |
   56|  20.2k|        return NULL;
   57|  24.7k|}
networkd-route.c:route_free:
   63|  20.2k|static Route* route_free(Route *route) {
   64|  20.2k|        if (!route)
  ------------------
  |  Branch (64:13): [True: 0, False: 20.2k]
  ------------------
   65|      0|                return NULL;
   66|       |
   67|  20.2k|        route_detach_impl(route);
   68|       |
   69|  20.2k|        config_section_free(route->section);
   70|  20.2k|        route_nexthops_done(route);
   71|  20.2k|        route_metric_done(&route->metric);
   72|  20.2k|        sd_event_source_disable_unref(route->expire);
   73|       |
   74|  20.2k|        return mfree(route);
  ------------------
  |  |  404|  20.2k|        ({                                      \
  |  |  405|  20.2k|                free(memory);                   \
  |  |  406|  20.2k|                (typeof(memory)) NULL;          \
  |  |  407|  20.2k|        })
  ------------------
   75|  20.2k|}
networkd-route.c:route_hash_func:
   79|  29.6k|static void route_hash_func(const Route *route, struct siphash *state) {
   80|  29.6k|        assert(route);
  ------------------
  |  |   72|  29.6k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  29.6k|        do {                                                            \
  |  |  |  |   59|  29.6k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  29.6k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 29.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  29.6k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  29.6k|        } while (false)
  |  |  ------------------
  ------------------
   81|       |
   82|  29.6k|        siphash24_compress_typesafe(route->family, state);
  ------------------
  |  |   20|  29.6k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
   83|       |
   84|  29.6k|        switch (route->family) {
   85|  13.5k|        case AF_INET:
  ------------------
  |  Branch (85:9): [True: 13.5k, False: 16.0k]
  ------------------
   86|       |                /* First, the table, destination prefix, priority, and tos (dscp), are used to find routes.
   87|       |                 * See fib_table_insert(), fib_find_node(), and fib_find_alias() in net/ipv4/fib_trie.c of the kernel. */
   88|  13.5k|                siphash24_compress_typesafe(route->table, state);
  ------------------
  |  |   20|  13.5k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
   89|  13.5k|                in_addr_hash_func(&route->dst, route->family, state);
   90|  13.5k|                siphash24_compress_typesafe(route->dst_prefixlen, state);
  ------------------
  |  |   20|  13.5k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
   91|  13.5k|                siphash24_compress_typesafe(route->priority, state);
  ------------------
  |  |   20|  13.5k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
   92|  13.5k|                siphash24_compress_typesafe(route->tos, state);
  ------------------
  |  |   20|  13.5k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
   93|       |
   94|       |                /* Then, protocol, scope, type, flags, prefsrc, metrics (RTAX_* attributes), and nexthops (gateways)
   95|       |                 * are used to find routes. See fib_find_info() in net/ipv4/fib_semantics.c of the kernel. */
   96|  13.5k|                siphash24_compress_typesafe(route->protocol, state);
  ------------------
  |  |   20|  13.5k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
   97|  13.5k|                siphash24_compress_typesafe(route->scope, state);
  ------------------
  |  |   20|  13.5k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
   98|  13.5k|                siphash24_compress_typesafe(route->type, state);
  ------------------
  |  |   20|  13.5k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
   99|  13.5k|                unsigned flags = route->flags & ~RTNH_COMPARE_MASK;
  100|  13.5k|                siphash24_compress_typesafe(flags, state);
  ------------------
  |  |   20|  13.5k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
  101|  13.5k|                in_addr_hash_func(&route->prefsrc, route->family, state);
  102|       |
  103|       |                /* nexthops (id, number of nexthops, nexthop) */
  104|  13.5k|                route_nexthops_hash_func(route, state);
  105|       |
  106|       |                /* metrics */
  107|  13.5k|                route_metric_hash_func(&route->metric, state);
  108|  13.5k|                break;
  109|       |
  110|  16.0k|        case AF_INET6:
  ------------------
  |  Branch (110:9): [True: 16.0k, False: 13.5k]
  ------------------
  111|       |                /* First, table and destination prefix are used for classifying routes.
  112|       |                 * See fib6_add() and fib6_add_1() in net/ipv6/ip6_fib.c of the kernel. */
  113|  16.0k|                siphash24_compress_typesafe(route->table, state);
  ------------------
  |  |   20|  16.0k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
  114|  16.0k|                in_addr_hash_func(&route->dst, route->family, state);
  115|  16.0k|                siphash24_compress_typesafe(route->dst_prefixlen, state);
  ------------------
  |  |   20|  16.0k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
  116|       |
  117|       |                /* Then, source prefix is used. See fib6_add(). */
  118|  16.0k|                in_addr_hash_func(&route->src, route->family, state);
  119|  16.0k|                siphash24_compress_typesafe(route->src_prefixlen, state);
  ------------------
  |  |   20|  16.0k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
  120|       |
  121|       |                /* See fib6_add_rt2node(). */
  122|  16.0k|                siphash24_compress_typesafe(route->priority, state);
  ------------------
  |  |   20|  16.0k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
  123|       |
  124|       |                /* See rt6_duplicate_nexthop() in include/net/ip6_route.h of the kernel.
  125|       |                 * Here, we hash nexthop in a similar way as the one for IPv4. */
  126|  16.0k|                route_nexthops_hash_func(route, state);
  127|       |
  128|       |                /* Unlike IPv4 routes, metrics are not taken into account. */
  129|  16.0k|                break;
  130|       |
  131|      0|        default:
  ------------------
  |  Branch (131:9): [True: 0, False: 29.6k]
  ------------------
  132|      0|                assert_not_reached();
  ------------------
  |  |   76|      0|        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  133|  29.6k|        }
  134|  29.6k|}
networkd-route.c:route_compare_func:
  136|  23.3k|static int route_compare_func(const Route *a, const Route *b) {
  137|  23.3k|        int r;
  138|       |
  139|  23.3k|        r = CMP(a->family, b->family);
  ------------------
  |  |  288|  23.3k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  23.3k|        ({                                              \
  |  |  |  |  291|  23.3k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  23.3k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  23.3k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  23.3k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  23.3k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  23.3k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  23.3k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  23.3k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  23.3k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 1.75k, False: 21.5k]
  |  |  |  |  ------------------
  |  |  |  |  294|  23.3k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  21.5k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  21.5k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  21.5k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  21.5k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  21.5k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  21.5k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 716, False: 20.8k]
  |  |  |  |  ------------------
  |  |  |  |  295|  23.3k|        })
  |  |  ------------------
  ------------------
  140|  23.3k|        if (r != 0)
  ------------------
  |  Branch (140:13): [True: 2.46k, False: 20.8k]
  ------------------
  141|  2.46k|                return r;
  142|       |
  143|  20.8k|        switch (a->family) {
  144|  6.67k|        case AF_INET:
  ------------------
  |  Branch (144:9): [True: 6.67k, False: 14.1k]
  ------------------
  145|  6.67k|                r = CMP(a->table, b->table);
  ------------------
  |  |  288|  6.67k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  6.67k|        ({                                              \
  |  |  |  |  291|  6.67k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  6.67k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  6.67k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  6.67k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  6.67k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  6.67k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  6.67k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  6.67k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  6.67k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 658, False: 6.01k]
  |  |  |  |  ------------------
  |  |  |  |  294|  6.67k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  6.01k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  6.01k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  6.01k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  6.01k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  6.01k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  6.01k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 648, False: 5.36k]
  |  |  |  |  ------------------
  |  |  |  |  295|  6.67k|        })
  |  |  ------------------
  ------------------
  146|  6.67k|                if (r != 0)
  ------------------
  |  Branch (146:21): [True: 1.30k, False: 5.36k]
  ------------------
  147|  1.30k|                        return r;
  148|       |
  149|  5.36k|                r = memcmp(&a->dst, &b->dst, FAMILY_ADDRESS_SIZE(a->family));
  150|  5.36k|                if (r != 0)
  ------------------
  |  Branch (150:21): [True: 1.31k, False: 4.05k]
  ------------------
  151|  1.31k|                        return r;
  152|       |
  153|  4.05k|                r = CMP(a->dst_prefixlen, b->dst_prefixlen);
  ------------------
  |  |  288|  4.05k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  4.05k|        ({                                              \
  |  |  |  |  291|  4.05k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  4.05k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  4.05k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  4.05k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  4.05k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  4.05k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  4.05k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  4.05k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  4.05k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 128, False: 3.92k]
  |  |  |  |  ------------------
  |  |  |  |  294|  4.05k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.92k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.92k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.92k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.92k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.92k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.92k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 258, False: 3.66k]
  |  |  |  |  ------------------
  |  |  |  |  295|  4.05k|        })
  |  |  ------------------
  ------------------
  154|  4.05k|                if (r != 0)
  ------------------
  |  Branch (154:21): [True: 386, False: 3.66k]
  ------------------
  155|    386|                        return r;
  156|       |
  157|  3.66k|                r = CMP(a->priority, b->priority);
  ------------------
  |  |  288|  3.66k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  3.66k|        ({                                              \
  |  |  |  |  291|  3.66k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  3.66k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  3.66k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.66k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.66k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.66k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.66k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.66k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.66k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 52, False: 3.61k]
  |  |  |  |  ------------------
  |  |  |  |  294|  3.66k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.61k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.61k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.61k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.61k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.61k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.61k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 144, False: 3.47k]
  |  |  |  |  ------------------
  |  |  |  |  295|  3.66k|        })
  |  |  ------------------
  ------------------
  158|  3.66k|                if (r != 0)
  ------------------
  |  Branch (158:21): [True: 196, False: 3.47k]
  ------------------
  159|    196|                        return r;
  160|       |
  161|  3.47k|                r = CMP(a->tos, b->tos);
  ------------------
  |  |  288|  3.47k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  3.47k|        ({                                              \
  |  |  |  |  291|  3.47k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  3.47k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  3.47k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 3.47k]
  |  |  |  |  ------------------
  |  |  |  |  294|  3.47k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 3.47k]
  |  |  |  |  ------------------
  |  |  |  |  295|  3.47k|        })
  |  |  ------------------
  ------------------
  162|  3.47k|                if (r != 0)
  ------------------
  |  Branch (162:21): [True: 0, False: 3.47k]
  ------------------
  163|      0|                        return r;
  164|       |
  165|  3.47k|                r = CMP(a->protocol, b->protocol);
  ------------------
  |  |  288|  3.47k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  3.47k|        ({                                              \
  |  |  |  |  291|  3.47k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  3.47k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  3.47k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 3.47k]
  |  |  |  |  ------------------
  |  |  |  |  294|  3.47k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 3.47k]
  |  |  |  |  ------------------
  |  |  |  |  295|  3.47k|        })
  |  |  ------------------
  ------------------
  166|  3.47k|                if (r != 0)
  ------------------
  |  Branch (166:21): [True: 0, False: 3.47k]
  ------------------
  167|      0|                        return r;
  168|       |
  169|  3.47k|                r = CMP(a->scope, b->scope);
  ------------------
  |  |  288|  3.47k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  3.47k|        ({                                              \
  |  |  |  |  291|  3.47k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  3.47k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  3.47k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 3.47k]
  |  |  |  |  ------------------
  |  |  |  |  294|  3.47k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 3.47k]
  |  |  |  |  ------------------
  |  |  |  |  295|  3.47k|        })
  |  |  ------------------
  ------------------
  170|  3.47k|                if (r != 0)
  ------------------
  |  Branch (170:21): [True: 0, False: 3.47k]
  ------------------
  171|      0|                        return r;
  172|       |
  173|  3.47k|                r = CMP(a->type, b->type);
  ------------------
  |  |  288|  3.47k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  3.47k|        ({                                              \
  |  |  |  |  291|  3.47k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  3.47k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  3.47k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 3.47k]
  |  |  |  |  ------------------
  |  |  |  |  294|  3.47k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 3.47k]
  |  |  |  |  ------------------
  |  |  |  |  295|  3.47k|        })
  |  |  ------------------
  ------------------
  174|  3.47k|                if (r != 0)
  ------------------
  |  Branch (174:21): [True: 0, False: 3.47k]
  ------------------
  175|      0|                        return r;
  176|       |
  177|  3.47k|                r = CMP(a->flags & ~RTNH_COMPARE_MASK, b->flags & ~RTNH_COMPARE_MASK);
  ------------------
  |  |  288|  3.47k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  3.47k|        ({                                              \
  |  |  |  |  291|  3.47k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  3.47k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  3.47k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 3.47k]
  |  |  |  |  ------------------
  |  |  |  |  294|  3.47k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  3.47k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  3.47k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  3.47k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 3.47k]
  |  |  |  |  ------------------
  |  |  |  |  295|  3.47k|        })
  |  |  ------------------
  ------------------
  178|  3.47k|                if (r != 0)
  ------------------
  |  Branch (178:21): [True: 0, False: 3.47k]
  ------------------
  179|      0|                        return r;
  180|       |
  181|  3.47k|                r = memcmp(&a->prefsrc, &b->prefsrc, FAMILY_ADDRESS_SIZE(a->family));
  182|  3.47k|                if (r != 0)
  ------------------
  |  Branch (182:21): [True: 0, False: 3.47k]
  ------------------
  183|      0|                        return r;
  184|       |
  185|  3.47k|                r = route_nexthops_compare_func(a, b);
  186|  3.47k|                if (r != 0)
  ------------------
  |  Branch (186:21): [True: 0, False: 3.47k]
  ------------------
  187|      0|                        return r;
  188|       |
  189|  3.47k|                return route_metric_compare_func(&a->metric, &b->metric);
  190|       |
  191|  14.1k|        case AF_INET6:
  ------------------
  |  Branch (191:9): [True: 14.1k, False: 6.67k]
  ------------------
  192|  14.1k|                r = CMP(a->table, b->table);
  ------------------
  |  |  288|  14.1k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  14.1k|        ({                                              \
  |  |  |  |  291|  14.1k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  14.1k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  14.1k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  14.1k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  14.1k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  14.1k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  14.1k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  14.1k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  14.1k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 281, False: 13.8k]
  |  |  |  |  ------------------
  |  |  |  |  294|  14.1k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  13.8k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  13.8k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  13.8k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  13.8k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  13.8k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  13.8k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 187, False: 13.7k]
  |  |  |  |  ------------------
  |  |  |  |  295|  14.1k|        })
  |  |  ------------------
  ------------------
  193|  14.1k|                if (r != 0)
  ------------------
  |  Branch (193:21): [True: 468, False: 13.7k]
  ------------------
  194|    468|                        return r;
  195|       |
  196|  13.7k|                r = memcmp(&a->dst, &b->dst, FAMILY_ADDRESS_SIZE(a->family));
  197|  13.7k|                if (r != 0)
  ------------------
  |  Branch (197:21): [True: 517, False: 13.1k]
  ------------------
  198|    517|                        return r;
  199|       |
  200|  13.1k|                r = CMP(a->dst_prefixlen, b->dst_prefixlen);
  ------------------
  |  |  288|  13.1k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  13.1k|        ({                                              \
  |  |  |  |  291|  13.1k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  13.1k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  13.1k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  13.1k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  13.1k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  13.1k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  13.1k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  13.1k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  13.1k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 218, False: 12.9k]
  |  |  |  |  ------------------
  |  |  |  |  294|  13.1k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  12.9k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  12.9k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  12.9k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  12.9k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  12.9k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  12.9k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 49, False: 12.9k]
  |  |  |  |  ------------------
  |  |  |  |  295|  13.1k|        })
  |  |  ------------------
  ------------------
  201|  13.1k|                if (r != 0)
  ------------------
  |  Branch (201:21): [True: 267, False: 12.9k]
  ------------------
  202|    267|                        return r;
  203|       |
  204|  12.9k|                r = memcmp(&a->src, &b->src, FAMILY_ADDRESS_SIZE(a->family));
  205|  12.9k|                if (r != 0)
  ------------------
  |  Branch (205:21): [True: 0, False: 12.9k]
  ------------------
  206|      0|                        return r;
  207|       |
  208|  12.9k|                r = CMP(a->src_prefixlen, b->src_prefixlen);
  ------------------
  |  |  288|  12.9k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  12.9k|        ({                                              \
  |  |  |  |  291|  12.9k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  12.9k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  12.9k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  12.9k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  12.9k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  12.9k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  12.9k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  12.9k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  12.9k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 0, False: 12.9k]
  |  |  |  |  ------------------
  |  |  |  |  294|  12.9k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  12.9k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  12.9k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  12.9k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  12.9k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  12.9k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  12.9k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 0, False: 12.9k]
  |  |  |  |  ------------------
  |  |  |  |  295|  12.9k|        })
  |  |  ------------------
  ------------------
  209|  12.9k|                if (r != 0)
  ------------------
  |  Branch (209:21): [True: 0, False: 12.9k]
  ------------------
  210|      0|                        return r;
  211|       |
  212|  12.9k|                r = CMP(a->priority, b->priority);
  ------------------
  |  |  288|  12.9k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|  12.9k|        ({                                              \
  |  |  |  |  291|  12.9k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|  12.9k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|  12.9k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  12.9k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  12.9k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  12.9k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  12.9k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  12.9k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  12.9k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 333, False: 12.5k]
  |  |  |  |  ------------------
  |  |  |  |  294|  12.9k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  12.5k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  12.5k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  12.5k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  12.5k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  12.5k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  12.5k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 300, False: 12.2k]
  |  |  |  |  ------------------
  |  |  |  |  295|  12.9k|        })
  |  |  ------------------
  ------------------
  213|  12.9k|                if (r != 0)
  ------------------
  |  Branch (213:21): [True: 633, False: 12.2k]
  ------------------
  214|    633|                        return r;
  215|       |
  216|  12.2k|                return route_nexthops_compare_func(a, b);
  217|       |
  218|      0|        default:
  ------------------
  |  Branch (218:9): [True: 0, False: 20.8k]
  ------------------
  219|      0|                assert_not_reached();
  ------------------
  |  |   76|      0|        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  220|  20.8k|        }
  221|  20.8k|}

networkd-manager.c:manager_remove_sysctl_monitor:
   31|  13.0k|static inline void manager_remove_sysctl_monitor(Manager *manager) { }

parse_compare_operator:
    8|  3.87k|CompareOperator parse_compare_operator(const char **s, CompareOperatorParseFlags flags) {
    9|       |
   10|  3.87k|        static const struct {
   11|  3.87k|                CompareOperator op;
   12|  3.87k|                const char *str;
   13|  3.87k|                CompareOperatorParseFlags valid_mask; /* If this operator appears when flags in mask not set, fail */
   14|  3.87k|                CompareOperatorParseFlags need_mask;  /* Skip over this operator when flags in mask not set */
   15|  3.87k|        } table[] = {
   16|  3.87k|                { COMPARE_FNMATCH_EQUAL,    "$=",  .valid_mask = COMPARE_ALLOW_FNMATCH   },
   17|  3.87k|                { COMPARE_FNMATCH_UNEQUAL,  "!$=", .valid_mask = COMPARE_ALLOW_FNMATCH   },
   18|       |
   19|  3.87k|                { COMPARE_UNEQUAL,          "<>"                                         },
   20|  3.87k|                { COMPARE_LOWER_OR_EQUAL,   "<="                                         },
   21|  3.87k|                { COMPARE_GREATER_OR_EQUAL, ">="                                         },
   22|  3.87k|                { COMPARE_LOWER,            "<"                                          },
   23|  3.87k|                { COMPARE_GREATER,          ">"                                          },
   24|  3.87k|                { COMPARE_EQUAL,            "=="                                         },
   25|  3.87k|                { COMPARE_STRING_EQUAL,     "=",   .need_mask = COMPARE_EQUAL_BY_STRING  },
   26|  3.87k|                { COMPARE_EQUAL,            "="                                          },
   27|  3.87k|                { COMPARE_STRING_UNEQUAL,   "!=",  .need_mask = COMPARE_EQUAL_BY_STRING  },
   28|  3.87k|                { COMPARE_UNEQUAL,          "!="                                         },
   29|       |
   30|  3.87k|                { COMPARE_LOWER,            "lt",  .valid_mask = COMPARE_ALLOW_TEXTUAL   },
   31|  3.87k|                { COMPARE_LOWER_OR_EQUAL,   "le",  .valid_mask = COMPARE_ALLOW_TEXTUAL   },
   32|  3.87k|                { COMPARE_EQUAL,            "eq",  .valid_mask = COMPARE_ALLOW_TEXTUAL   },
   33|  3.87k|                { COMPARE_UNEQUAL,          "ne",  .valid_mask = COMPARE_ALLOW_TEXTUAL   },
   34|  3.87k|                { COMPARE_GREATER_OR_EQUAL, "ge",  .valid_mask = COMPARE_ALLOW_TEXTUAL   },
   35|  3.87k|                { COMPARE_GREATER,          "gt",  .valid_mask = COMPARE_ALLOW_TEXTUAL   },
   36|  3.87k|        };
   37|       |
   38|  3.87k|        assert(s);
  ------------------
  |  |   72|  3.87k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.87k|        do {                                                            \
  |  |  |  |   59|  3.87k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.87k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.87k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.87k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.87k|        } while (false)
  |  |  ------------------
  ------------------
   39|       |
   40|  3.87k|        if (!*s) /* Hmm, we already reached the end, for example because extract_first_word() and
  ------------------
  |  Branch (40:13): [True: 0, False: 3.87k]
  ------------------
   41|       |                  * parse_compare_operator() are use on the same string? */
   42|      0|                return _COMPARE_OPERATOR_INVALID;
   43|       |
   44|  31.3k|        FOREACH_ELEMENT(i, table) {
  ------------------
  |  |  466|  3.87k|        FOREACH_ARRAY(i, array, ELEMENTSOF(array))
  |  |  ------------------
  |  |  |  |  463|  3.87k|        _FOREACH_ARRAY(i, array, num, UNIQ_T(m, UNIQ), UNIQ_T(end, UNIQ))
  |  |  |  |  ------------------
  |  |  |  |  |  |  457|  3.87k|        for (typeof(array[0]) *i = (array), *end = ({                   \
  |  |  |  |  |  |  458|  3.87k|                                typeof(num) m = (num);                  \
  |  |  |  |  |  |  459|  3.87k|                                (i && m > 0) ? i + m : NULL;            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (459:34): [True: 3.87k, False: 0]
  |  |  |  |  |  |  |  Branch (459:39): [True: 3.87k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  460|  31.9k|                        }); end && i < end; i++)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (460:29): [True: 31.9k, False: 0]
  |  |  |  |  |  |  |  Branch (460:36): [True: 31.3k, False: 644]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   45|  31.3k|                const char *e;
   46|       |
   47|  31.3k|                if (i->need_mask != 0 && !FLAGS_SET(flags, i->need_mask))
  ------------------
  |  |  414|  1.85k|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (47:21): [True: 1.85k, False: 29.4k]
  |  Branch (47:42): [True: 0, False: 1.85k]
  ------------------
   48|      0|                        continue;
   49|       |
   50|  31.3k|                e = startswith(*s, i->str);
   51|  31.3k|                if (e) {
  ------------------
  |  Branch (51:21): [True: 3.22k, False: 28.0k]
  ------------------
   52|  3.22k|                        if (i->valid_mask != 0 && !FLAGS_SET(flags, i->valid_mask))
  ------------------
  |  |  414|     82|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (52:29): [True: 82, False: 3.14k]
  |  Branch (52:51): [True: 1, False: 81]
  ------------------
   53|      1|                                return _COMPARE_OPERATOR_INVALID;
   54|       |
   55|  3.22k|                        *s = e;
   56|  3.22k|                        return i->op;
   57|  3.22k|                }
   58|  31.3k|        }
   59|       |
   60|    644|        return _COMPARE_OPERATOR_INVALID;
   61|  3.87k|}
test_order:
   63|  2.79k|int test_order(int k, CompareOperator op) {
   64|       |
   65|  2.79k|        switch (op) {
   66|       |
   67|    852|        case COMPARE_LOWER:
  ------------------
  |  Branch (67:9): [True: 852, False: 1.93k]
  ------------------
   68|    852|                return k < 0;
   69|       |
   70|    198|        case COMPARE_LOWER_OR_EQUAL:
  ------------------
  |  Branch (70:9): [True: 198, False: 2.59k]
  ------------------
   71|    198|                return k <= 0;
   72|       |
   73|      2|        case COMPARE_EQUAL:
  ------------------
  |  Branch (73:9): [True: 2, False: 2.78k]
  ------------------
   74|      2|                return k == 0;
   75|       |
   76|    436|        case COMPARE_UNEQUAL:
  ------------------
  |  Branch (76:9): [True: 436, False: 2.35k]
  ------------------
   77|    436|                return k != 0;
   78|       |
   79|    194|        case COMPARE_GREATER_OR_EQUAL:
  ------------------
  |  Branch (79:9): [True: 194, False: 2.59k]
  ------------------
   80|    194|                return k >= 0;
   81|       |
   82|  1.10k|        case COMPARE_GREATER:
  ------------------
  |  Branch (82:9): [True: 1.10k, False: 1.68k]
  ------------------
   83|  1.10k|                return k > 0;
   84|       |
   85|      0|        default:
  ------------------
  |  Branch (85:9): [True: 0, False: 2.79k]
  ------------------
   86|      0|                return -EINVAL;
   87|  2.79k|        }
   88|  2.79k|}
version_or_fnmatch_compare:
   93|  3.79k|                const char *b) {
   94|  3.79k|        int r;
   95|       |
   96|  3.79k|        switch (op) {
   97|       |
   98|     51|        case COMPARE_STRING_EQUAL:
  ------------------
  |  Branch (98:9): [True: 51, False: 3.74k]
  ------------------
   99|     51|                return streq_ptr(a, b);
  100|       |
  101|    247|        case COMPARE_STRING_UNEQUAL:
  ------------------
  |  Branch (101:9): [True: 247, False: 3.54k]
  ------------------
  102|    247|                return !streq_ptr(a, b);
  103|       |
  104|    626|        case COMPARE_FNMATCH_EQUAL:
  ------------------
  |  Branch (104:9): [True: 626, False: 3.16k]
  ------------------
  105|    626|                r = fnmatch(b, a, 0);
  106|    626|                return r == 0 ? true :
  ------------------
  |  Branch (106:24): [True: 488, False: 138]
  ------------------
  107|    626|                        r == FNM_NOMATCH ? false : -EINVAL;
  ------------------
  |  Branch (107:25): [True: 138, False: 0]
  ------------------
  108|       |
  109|     78|        case COMPARE_FNMATCH_UNEQUAL:
  ------------------
  |  Branch (109:9): [True: 78, False: 3.71k]
  ------------------
  110|     78|                r = fnmatch(b, a, 0);
  111|     78|                return r == FNM_NOMATCH ? true:
  ------------------
  |  Branch (111:24): [True: 77, False: 1]
  ------------------
  112|     78|                        r == 0 ? false : -EINVAL;
  ------------------
  |  Branch (112:25): [True: 1, False: 0]
  ------------------
  113|       |
  114|  2.79k|        case _COMPARE_OPERATOR_ORDER_FIRST..._COMPARE_OPERATOR_ORDER_LAST:
  ------------------
  |  Branch (114:9): [True: 2.79k, False: 1.00k]
  ------------------
  115|  2.79k|                return test_order(strverscmp_improved(a, b), op);
  116|       |
  117|      0|        default:
  ------------------
  |  Branch (117:9): [True: 0, False: 3.79k]
  ------------------
  118|      0|                return -EINVAL;
  119|  3.79k|        }
  120|  3.79k|}

condition_new:
   68|  2.25k|Condition* condition_new(ConditionType type, const char *parameter, bool trigger, bool negate) {
   69|  2.25k|        Condition *c;
   70|       |
   71|  2.25k|        assert(type >= 0);
  ------------------
  |  |   72|  2.25k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.25k|        do {                                                            \
  |  |  |  |   59|  2.25k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.25k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.25k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.25k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.25k|        } while (false)
  |  |  ------------------
  ------------------
   72|  2.25k|        assert(type < _CONDITION_TYPE_MAX);
  ------------------
  |  |   72|  2.25k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.25k|        do {                                                            \
  |  |  |  |   59|  2.25k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.25k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.25k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.25k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.25k|        } while (false)
  |  |  ------------------
  ------------------
   73|  2.25k|        assert(parameter);
  ------------------
  |  |   72|  2.25k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.25k|        do {                                                            \
  |  |  |  |   59|  2.25k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.25k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.25k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.25k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.25k|        } while (false)
  |  |  ------------------
  ------------------
   74|       |
   75|  2.25k|        c = new(Condition, 1);
  ------------------
  |  |   17|  2.25k|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
   76|  2.25k|        if (!c)
  ------------------
  |  Branch (76:13): [True: 0, False: 2.25k]
  ------------------
   77|      0|                return NULL;
   78|       |
   79|  2.25k|        *c = (Condition) {
   80|  2.25k|                .type = type,
   81|  2.25k|                .trigger = trigger,
   82|  2.25k|                .negate = negate,
   83|  2.25k|        };
   84|       |
   85|  2.25k|        if (parameter) {
  ------------------
  |  Branch (85:13): [True: 2.25k, False: 0]
  ------------------
   86|  2.25k|                c->parameter = strdup(parameter);
   87|  2.25k|                if (!c->parameter)
  ------------------
  |  Branch (87:21): [True: 0, False: 2.25k]
  ------------------
   88|      0|                        return mfree(c);
  ------------------
  |  |  404|      0|        ({                                      \
  |  |  405|      0|                free(memory);                   \
  |  |  406|      0|                (typeof(memory)) NULL;          \
  |  |  407|      0|        })
  ------------------
   89|  2.25k|        }
   90|       |
   91|  2.25k|        return c;
   92|  2.25k|}
condition_free:
   94|  2.25k|Condition* condition_free(Condition *c) {
   95|  2.25k|        assert(c);
  ------------------
  |  |   72|  2.25k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.25k|        do {                                                            \
  |  |  |  |   59|  2.25k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.25k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.25k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.25k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.25k|        } while (false)
  |  |  ------------------
  ------------------
   96|       |
   97|  2.25k|        free(c->parameter);
   98|  2.25k|        return mfree(c);
  ------------------
  |  |  404|  2.25k|        ({                                      \
  |  |  405|  2.25k|                free(memory);                   \
  |  |  406|  2.25k|                (typeof(memory)) NULL;          \
  |  |  407|  2.25k|        })
  ------------------
   99|  2.25k|}
condition_free_list_type:
  101|  25.6k|Condition* condition_free_list_type(Condition *head, ConditionType type) {
  102|  25.6k|        LIST_FOREACH(conditions, c, head)
  ------------------
  |  |  145|  25.6k|        LIST_FOREACH_WITH_NEXT(name, i, UNIQ_T(n, UNIQ), head)
  |  |  ------------------
  |  |  |  |  142|  28.6k|        for (typeof(*(head)) *n, *i = (head); i && (n = i->name##_next, true); i = n)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (142:47): [True: 3.00k, False: 25.6k]
  |  |  |  |  |  Branch (142:52): [True: 3.00k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  103|  3.00k|                if (type < 0 || c->type == type) {
  ------------------
  |  Branch (103:21): [True: 1.36k, False: 1.64k]
  |  Branch (103:33): [True: 885, False: 756]
  ------------------
  104|  2.25k|                        LIST_REMOVE(conditions, head, c);
  ------------------
  |  |   51|  2.25k|        ({                                                              \
  |  |   52|  2.25k|                typeof(*(head)) **_head = &(head), *_item = (item);     \
  |  |   53|  2.25k|                assert(_item);                                          \
  |  |  ------------------
  |  |  |  |   72|  2.25k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|  2.25k|        do {                                                            \
  |  |  |  |  |  |   59|  2.25k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   95|  2.25k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.25k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   60|  2.25k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   61|  2.25k|        } while (false)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   54|  2.25k|                if (_item->name##_next)                                 \
  |  |  ------------------
  |  |  |  Branch (54:21): [True: 279, False: 1.97k]
  |  |  ------------------
  |  |   55|  2.25k|                        _item->name##_next->name##_prev = _item->name##_prev; \
  |  |   56|  2.25k|                if (_item->name##_prev)                                 \
  |  |  ------------------
  |  |  |  Branch (56:21): [True: 194, False: 2.05k]
  |  |  ------------------
  |  |   57|  2.25k|                        _item->name##_prev->name##_next = _item->name##_next; \
  |  |   58|  2.25k|                else {                                                  \
  |  |   59|  2.05k|                        assert(*_head == _item);                        \
  |  |  ------------------
  |  |  |  |   72|  2.05k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|  2.05k|        do {                                                            \
  |  |  |  |  |  |   59|  2.05k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   95|  2.05k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.05k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   60|  2.05k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   61|  2.05k|        } while (false)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|  2.05k|                        *_head = _item->name##_next;                    \
  |  |   61|  2.05k|                }                                                       \
  |  |   62|  2.25k|                _item->name##_next = _item->name##_prev = NULL;         \
  |  |   63|  2.25k|                _item;                                                  \
  |  |   64|  2.25k|        })
  ------------------
  105|  2.25k|                        condition_free(c);
  106|  2.25k|                }
  107|       |
  108|  25.6k|        assert(type >= 0 || !head);
  ------------------
  |  |   72|  25.6k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  25.6k|        do {                                                            \
  |  |  |  |   59|  25.6k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  48.7k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 25.6k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 2.58k, False: 23.0k]
  |  |  |  |  |  |  |  Branch (95:44): [True: 23.0k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  25.6k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  25.6k|        } while (false)
  |  |  ------------------
  ------------------
  109|  25.6k|        return head;
  110|  25.6k|}
condition_test:
 1227|  1.31k|int condition_test(Condition *c, char **env) {
 1228|       |
 1229|  1.31k|        static int (*const condition_tests[_CONDITION_TYPE_MAX])(Condition *c, char **env) = {
 1230|  1.31k|                [CONDITION_PATH_EXISTS]              = condition_test_path_exists,
 1231|  1.31k|                [CONDITION_PATH_EXISTS_GLOB]         = condition_test_path_exists_glob,
 1232|  1.31k|                [CONDITION_PATH_IS_DIRECTORY]        = condition_test_path_is_directory,
 1233|  1.31k|                [CONDITION_PATH_IS_SYMBOLIC_LINK]    = condition_test_path_is_symbolic_link,
 1234|  1.31k|                [CONDITION_PATH_IS_MOUNT_POINT]      = condition_test_path_is_mount_point,
 1235|  1.31k|                [CONDITION_PATH_IS_READ_WRITE]       = condition_test_path_is_read_write,
 1236|  1.31k|                [CONDITION_PATH_IS_ENCRYPTED]        = condition_test_path_is_encrypted,
 1237|  1.31k|                [CONDITION_DIRECTORY_NOT_EMPTY]      = condition_test_directory_not_empty,
 1238|  1.31k|                [CONDITION_FILE_NOT_EMPTY]           = condition_test_file_not_empty,
 1239|  1.31k|                [CONDITION_FILE_IS_EXECUTABLE]       = condition_test_file_is_executable,
 1240|  1.31k|                [CONDITION_KERNEL_COMMAND_LINE]      = condition_test_kernel_command_line,
 1241|  1.31k|                [CONDITION_VERSION]                  = condition_test_version,
 1242|  1.31k|                [CONDITION_CREDENTIAL]               = condition_test_credential,
 1243|  1.31k|                [CONDITION_VIRTUALIZATION]           = condition_test_virtualization,
 1244|  1.31k|                [CONDITION_SECURITY]                 = condition_test_security,
 1245|  1.31k|                [CONDITION_CAPABILITY]               = condition_test_capability,
 1246|  1.31k|                [CONDITION_HOST]                     = condition_test_host,
 1247|  1.31k|                [CONDITION_AC_POWER]                 = condition_test_ac_power,
 1248|  1.31k|                [CONDITION_ARCHITECTURE]             = condition_test_architecture,
 1249|  1.31k|                [CONDITION_FIRMWARE]                 = condition_test_firmware,
 1250|  1.31k|                [CONDITION_NEEDS_UPDATE]             = condition_test_needs_update,
 1251|  1.31k|                [CONDITION_FIRST_BOOT]               = condition_test_first_boot,
 1252|  1.31k|                [CONDITION_USER]                     = condition_test_user,
 1253|  1.31k|                [CONDITION_GROUP]                    = condition_test_group,
 1254|  1.31k|                [CONDITION_CONTROL_GROUP_CONTROLLER] = condition_test_control_group_controller,
 1255|  1.31k|                [CONDITION_CPUS]                     = condition_test_cpus,
 1256|  1.31k|                [CONDITION_MEMORY]                   = condition_test_memory,
 1257|  1.31k|                [CONDITION_ENVIRONMENT]              = condition_test_environment,
 1258|  1.31k|                [CONDITION_CPU_FEATURE]              = condition_test_cpufeature,
 1259|  1.31k|                [CONDITION_OS_RELEASE]               = condition_test_osrelease,
 1260|  1.31k|                [CONDITION_MEMORY_PRESSURE]          = condition_test_psi,
 1261|  1.31k|                [CONDITION_CPU_PRESSURE]             = condition_test_psi,
 1262|  1.31k|                [CONDITION_IO_PRESSURE]              = condition_test_psi,
 1263|  1.31k|                [CONDITION_KERNEL_MODULE_LOADED]     = condition_test_kernel_module_loaded,
 1264|  1.31k|        };
 1265|       |
 1266|  1.31k|        int r, b;
 1267|       |
 1268|  1.31k|        assert(c);
  ------------------
  |  |   72|  1.31k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.31k|        do {                                                            \
  |  |  |  |   59|  1.31k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.31k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.31k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.31k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.31k|        } while (false)
  |  |  ------------------
  ------------------
 1269|  1.31k|        assert(c->type >= 0);
  ------------------
  |  |   72|  1.31k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.31k|        do {                                                            \
  |  |  |  |   59|  1.31k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.31k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.31k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.31k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.31k|        } while (false)
  |  |  ------------------
  ------------------
 1270|  1.31k|        assert(c->type < _CONDITION_TYPE_MAX);
  ------------------
  |  |   72|  1.31k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.31k|        do {                                                            \
  |  |  |  |   59|  1.31k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.31k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.31k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.31k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.31k|        } while (false)
  |  |  ------------------
  ------------------
 1271|       |
 1272|  1.31k|        r = condition_tests[c->type](c, env);
 1273|  1.31k|        if (r < 0) {
  ------------------
  |  Branch (1273:13): [True: 138, False: 1.18k]
  ------------------
 1274|    138|                c->result = CONDITION_ERROR;
 1275|    138|                return r;
 1276|    138|        }
 1277|       |
 1278|  1.18k|        b = (r > 0) == !c->negate;
 1279|  1.18k|        c->result = b ? CONDITION_SUCCEEDED : CONDITION_FAILED;
  ------------------
  |  Branch (1279:21): [True: 253, False: 927]
  ------------------
 1280|  1.18k|        return b;
 1281|  1.31k|}
condition_test_list:
 1288|  12.8k|                void *userdata) {
 1289|       |
 1290|  12.8k|        int triggered = -1;
 1291|       |
 1292|       |        /* If the condition list is empty, then it is true */
 1293|  12.8k|        if (!first)
  ------------------
  |  Branch (1293:13): [True: 11.5k, False: 1.29k]
  ------------------
 1294|  11.5k|                return true;
 1295|       |
 1296|       |        /* Otherwise, if all of the non-trigger conditions apply and
 1297|       |         * if any of the trigger conditions apply (unless there are
 1298|       |         * none) we return true */
 1299|  1.31k|        LIST_FOREACH(conditions, c, first) {
  ------------------
  |  |  145|  1.29k|        LIST_FOREACH_WITH_NEXT(name, i, UNIQ_T(n, UNIQ), head)
  |  |  ------------------
  |  |  |  |  142|  1.54k|        for (typeof(*(head)) *n, *i = (head); i && (n = i->name##_next, true); i = n)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (142:47): [True: 1.31k, False: 226]
  |  |  |  |  |  Branch (142:52): [True: 1.31k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1300|  1.31k|                int r;
 1301|       |
 1302|  1.31k|                r = condition_test(c, env);
 1303|       |
 1304|  1.31k|                if (logger) {
  ------------------
  |  Branch (1304:21): [True: 0, False: 1.31k]
  ------------------
 1305|      0|                        if (r < 0)
  ------------------
  |  Branch (1305:29): [True: 0, False: 0]
  ------------------
 1306|      0|                                logger(userdata, LOG_WARNING, r, PROJECT_FILE, __LINE__, __func__,
  ------------------
  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  ------------------
  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  ------------------
  ------------------
 1307|      0|                                       "Couldn't determine result for %s=%s%s%s, assuming failed: %m",
 1308|      0|                                       to_string(c->type),
 1309|      0|                                       c->trigger ? "|" : "",
  ------------------
  |  Branch (1309:40): [True: 0, False: 0]
  ------------------
 1310|      0|                                       c->negate ? "!" : "",
  ------------------
  |  Branch (1310:40): [True: 0, False: 0]
  ------------------
 1311|      0|                                       c->parameter);
 1312|      0|                        else
 1313|      0|                                logger(userdata, LOG_DEBUG, 0, PROJECT_FILE, __LINE__, __func__,
  ------------------
  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  ------------------
  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  ------------------
  ------------------
 1314|      0|                                       "%s=%s%s%s %s.",
 1315|      0|                                       to_string(c->type),
 1316|      0|                                       c->trigger ? "|" : "",
  ------------------
  |  Branch (1316:40): [True: 0, False: 0]
  ------------------
 1317|      0|                                       c->negate ? "!" : "",
  ------------------
  |  Branch (1317:40): [True: 0, False: 0]
  ------------------
 1318|      0|                                       c->parameter,
 1319|      0|                                       condition_result_to_string(c->result));
 1320|      0|                }
 1321|       |
 1322|  1.31k|                if (!c->trigger && r <= 0)
  ------------------
  |  Branch (1322:21): [True: 1.31k, False: 0]
  |  Branch (1322:36): [True: 1.06k, False: 253]
  ------------------
 1323|  1.06k|                        return false;
 1324|       |
 1325|    253|                if (c->trigger && triggered <= 0)
  ------------------
  |  Branch (1325:21): [True: 0, False: 253]
  |  Branch (1325:35): [True: 0, False: 0]
  ------------------
 1326|      0|                        triggered = r > 0;
 1327|    253|        }
 1328|       |
 1329|    226|        return triggered != 0;
 1330|  1.29k|}
condition.c:condition_test_architecture:
  489|     57|static int condition_test_architecture(Condition *c, char **env) {
  490|     57|        Architecture a, b;
  491|       |
  492|     57|        assert(c);
  ------------------
  |  |   72|     57|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     57|        do {                                                            \
  |  |  |  |   59|     57|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     57|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 57]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     57|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     57|        } while (false)
  |  |  ------------------
  ------------------
  493|     57|        assert(c->parameter);
  ------------------
  |  |   72|     57|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     57|        do {                                                            \
  |  |  |  |   59|     57|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     57|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 57]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     57|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     57|        } while (false)
  |  |  ------------------
  ------------------
  494|     57|        assert(c->type == CONDITION_ARCHITECTURE);
  ------------------
  |  |   72|     57|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     57|        do {                                                            \
  |  |  |  |   59|     57|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     57|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 57]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     57|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     57|        } while (false)
  |  |  ------------------
  ------------------
  495|       |
  496|     57|        a = uname_architecture();
  497|     57|        if (a < 0)
  ------------------
  |  Branch (497:13): [True: 0, False: 57]
  ------------------
  498|      0|                return a;
  499|       |
  500|     57|        if (streq(c->parameter, "native"))
  ------------------
  |  |   46|     57|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 1, False: 56]
  |  |  ------------------
  ------------------
  501|      1|                b = native_architecture();
  ------------------
  |  |   64|      1|#  define native_architecture() ARCHITECTURE_X86_64
  ------------------
  502|     56|        else {
  503|     56|                b = architecture_from_string(c->parameter);
  504|     56|                if (b < 0) /* unknown architecture? Then it's definitely not ours */
  ------------------
  |  Branch (504:21): [True: 52, False: 4]
  ------------------
  505|     52|                        return false;
  506|     56|        }
  507|       |
  508|      5|        return a == b;
  509|     57|}
condition.c:condition_test_firmware:
  595|    233|static int condition_test_firmware(Condition *c, char **env) {
  596|    233|        sd_char *arg;
  597|    233|        int r;
  598|       |
  599|    233|        assert(c);
  ------------------
  |  |   72|    233|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    233|        do {                                                            \
  |  |  |  |   59|    233|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    233|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 233]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    233|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    233|        } while (false)
  |  |  ------------------
  ------------------
  600|    233|        assert(c->parameter);
  ------------------
  |  |   72|    233|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    233|        do {                                                            \
  |  |  |  |   59|    233|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    233|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 233]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    233|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    233|        } while (false)
  |  |  ------------------
  ------------------
  601|    233|        assert(c->type == CONDITION_FIRMWARE);
  ------------------
  |  |   72|    233|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    233|        do {                                                            \
  |  |  |  |   59|    233|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    233|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 233]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    233|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    233|        } while (false)
  |  |  ------------------
  ------------------
  602|       |
  603|    233|        if (streq(c->parameter, "device-tree")) {
  ------------------
  |  |   46|    233|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 1, False: 232]
  |  |  ------------------
  ------------------
  604|      1|                if (access("/sys/firmware/devicetree/", F_OK) < 0) {
  ------------------
  |  Branch (604:21): [True: 1, False: 0]
  ------------------
  605|      1|                        if (errno != ENOENT)
  ------------------
  |  Branch (605:29): [True: 0, False: 1]
  ------------------
  606|      1|                                log_debug_errno(errno, "Unexpected error when checking for /sys/firmware/devicetree/: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  607|      1|                        return false;
  608|      1|                } else
  609|      0|                        return true;
  610|    232|        } else if ((arg = startswith(c->parameter, "device-tree-compatible("))) {
  ------------------
  |  Branch (610:20): [True: 4, False: 228]
  ------------------
  611|      4|                _cleanup_free_ char *dtc_arg = NULL;
  ------------------
  |  |   82|      4|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|      4|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  612|      4|                char *end;
  613|       |
  614|      4|                end = strrchr(arg, ')');
  615|      4|                if (!end || *(end + 1) != '\0') {
  ------------------
  |  Branch (615:21): [True: 1, False: 3]
  |  Branch (615:29): [True: 2, False: 1]
  ------------------
  616|      3|                        log_debug("Malformed ConditionFirmware=%s", c->parameter);
  ------------------
  |  |  220|      3|#define log_debug(...)     log_full(LOG_DEBUG,   __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      3|        ({                                                             \
  |  |  |  |  212|      3|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      3|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      3|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      3|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      3|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      3|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      3|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      3|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      3|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      3|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      3|        ({                                                              \
  |  |  |  |  |  |  190|      3|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      3|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      3|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      3|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      6|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      3|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      3|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      3|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      3|        })
  |  |  ------------------
  ------------------
  617|      3|                        return false;
  618|      3|                }
  619|       |
  620|      1|                dtc_arg = strndup(arg, end - arg);
  621|      1|                if (!dtc_arg)
  ------------------
  |  Branch (621:21): [True: 0, False: 1]
  ------------------
  622|      0|                        return -ENOMEM;
  623|       |
  624|      1|                return condition_test_firmware_devicetree_compatible(dtc_arg);
  625|    228|        } else if (streq(c->parameter, "uefi"))
  ------------------
  |  |   46|    228|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 2, False: 226]
  |  |  ------------------
  ------------------
  626|      2|                return is_efi_boot();
  627|    226|        else if ((arg = startswith(c->parameter, "smbios-field("))) {
  ------------------
  |  Branch (627:18): [True: 59, False: 167]
  ------------------
  628|     59|                _cleanup_free_ char *smbios_arg = NULL;
  ------------------
  |  |   82|     59|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|     59|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  629|     59|                char *end;
  630|       |
  631|     59|                end = strrchr(arg, ')');
  632|     59|                if (!end || *(end + 1) != '\0')
  ------------------
  |  Branch (632:21): [True: 1, False: 58]
  |  Branch (632:29): [True: 6, False: 52]
  ------------------
  633|      7|                        return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Malformed ConditionFirmware=%s.", c->parameter);
  ------------------
  |  |  228|      7|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      7|        ({                                                              \
  |  |  |  |  205|      7|                int _error = (error);                                   \
  |  |  |  |  206|      7|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      7|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      7|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      7|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      7|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      7|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 7]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      7|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      7|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      7|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      7|        ({                                                              \
  |  |  |  |  |  |  190|      7|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      7|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      7|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      7|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|     14|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      7|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      7|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 7, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      7|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      7|        })
  |  |  ------------------
  ------------------
  634|       |
  635|     52|                smbios_arg = strndup(arg, end - arg);
  636|     52|                if (!smbios_arg)
  ------------------
  |  Branch (636:21): [True: 0, False: 52]
  ------------------
  637|      0|                        return log_oom_debug();
  ------------------
  |  |  281|      0|#define log_oom_debug()     log_oom_full(LOG_DEBUG)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  638|       |
  639|     52|                r = condition_test_firmware_smbios_field(smbios_arg);
  640|     52|                if (r < 0)
  ------------------
  |  Branch (640:21): [True: 44, False: 8]
  ------------------
  641|     44|                        return log_debug_errno(r, "Malformed ConditionFirmware=%s: %m", c->parameter);
  ------------------
  |  |  228|     44|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|     44|        ({                                                              \
  |  |  |  |  205|     44|                int _error = (error);                                   \
  |  |  |  |  206|     44|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|     44|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|     44|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|     44|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|     44|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|     44|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 44]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|     44|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|     44|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|     44|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|     44|        ({                                                              \
  |  |  |  |  |  |  190|     44|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|     44|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 44]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|     44|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|     44|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|     88|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|     44|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|     44|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 44, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     44|        })
  |  |  |  |  ------------------
  |  |  |  |  208|     44|        })
  |  |  ------------------
  ------------------
  642|      8|                return r;
  643|    167|        } else {
  644|    167|                log_debug("Unsupported Firmware condition \"%s\"", c->parameter);
  ------------------
  |  |  220|    167|#define log_debug(...)     log_full(LOG_DEBUG,   __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|    167|        ({                                                             \
  |  |  |  |  212|    167|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|    167|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|    167|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|    167|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|    167|        do {                                                            \
  |  |  |  |  |  |  |  |   59|    167|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|    167|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 167]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|    167|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|    167|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|    167|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|    167|        ({                                                              \
  |  |  |  |  |  |  190|    167|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|    167|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 167]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|    167|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|    167|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|    334|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|    167|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|    167|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 167]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    167|        })
  |  |  |  |  ------------------
  |  |  |  |  215|    167|        })
  |  |  ------------------
  ------------------
  645|    167|                return false;
  646|    167|        }
  647|    233|}
condition.c:condition_test_firmware_devicetree_compatible:
  512|      1|static int condition_test_firmware_devicetree_compatible(const char *dtcarg) {
  513|      1|        int r;
  514|      1|        _cleanup_free_ char *dtcompat = NULL;
  ------------------
  |  |   82|      1|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|      1|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  515|      1|        _cleanup_strv_free_ char **dtcompatlist = NULL;
  ------------------
  |  |   21|      1|#define _cleanup_strv_free_ _cleanup_(strv_freep)
  |  |  ------------------
  |  |  |  |   78|      1|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  516|      1|        size_t size;
  517|       |
  518|      1|        r = read_full_virtual_file(DTCOMPAT_FILE, &dtcompat, &size);
  ------------------
  |  |  511|      1|#define DTCOMPAT_FILE "/proc/device-tree/compatible"
  ------------------
  519|      1|        if (r < 0) {
  ------------------
  |  Branch (519:13): [True: 1, False: 0]
  ------------------
  520|       |                /* if the path doesn't exist it is incompatible */
  521|      1|                if (r != -ENOENT)
  ------------------
  |  Branch (521:21): [True: 0, False: 1]
  ------------------
  522|      1|                        log_debug_errno(r, "Failed to open '%s', assuming machine is incompatible: %m", DTCOMPAT_FILE);
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  523|      1|                return false;
  524|      1|        }
  525|       |
  526|       |        /* Not sure this can happen, but play safe. */
  527|      0|        if (size == 0) {
  ------------------
  |  Branch (527:13): [True: 0, False: 0]
  ------------------
  528|      0|                log_debug("%s has zero length, assuming machine is incompatible", DTCOMPAT_FILE);
  ------------------
  |  |  220|      0|#define log_debug(...)     log_full(LOG_DEBUG,   __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
  529|      0|                return false;
  530|      0|        }
  531|       |
  532|       |         /* /proc/device-tree/compatible consists of one or more strings, each ending in '\0'.
  533|       |          * So the last character in dtcompat must be a '\0'. */
  534|      0|        if (dtcompat[size - 1] != '\0') {
  ------------------
  |  Branch (534:13): [True: 0, False: 0]
  ------------------
  535|      0|                log_debug("%s is in an unknown format, assuming machine is incompatible", DTCOMPAT_FILE);
  ------------------
  |  |  220|      0|#define log_debug(...)     log_full(LOG_DEBUG,   __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
  536|      0|                return false;
  537|      0|        }
  538|       |
  539|      0|        dtcompatlist = strv_parse_nulstr(dtcompat, size);
  540|      0|        if (!dtcompatlist)
  ------------------
  |  Branch (540:13): [True: 0, False: 0]
  ------------------
  541|      0|                return -ENOMEM;
  542|       |
  543|      0|        return strv_contains(dtcompatlist, dtcarg);
  ------------------
  |  |   16|      0|#define strv_contains(l, s) (!!strv_find((l), (s)))
  ------------------
  544|      0|}
condition.c:condition_test_firmware_smbios_field:
  546|     52|static int condition_test_firmware_smbios_field(const char *expression) {
  547|     52|        _cleanup_free_ char *field = NULL, *expected_value = NULL, *actual_value = NULL;
  ------------------
  |  |   82|     52|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|     52|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  548|     52|        CompareOperator operator;
  549|     52|        int r;
  550|       |
  551|     52|        assert(expression);
  ------------------
  |  |   72|     52|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     52|        do {                                                            \
  |  |  |  |   59|     52|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     52|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 52]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     52|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     52|        } while (false)
  |  |  ------------------
  ------------------
  552|       |
  553|       |        /* Parse SMBIOS field */
  554|     52|        r = extract_first_word(&expression, &field, COMPARE_OPERATOR_WITH_FNMATCH_CHARS, EXTRACT_RETAIN_SEPARATORS);
  ------------------
  |  |    7|     52|#define COMPARE_OPERATOR_WITH_FNMATCH_CHARS COMPARE_OPERATOR_CHARS "$"
  |  |  ------------------
  |  |  |  |    6|     52|#define COMPARE_OPERATOR_CHARS "!<=>"
  |  |  ------------------
  ------------------
  555|     52|        if (r < 0)
  ------------------
  |  Branch (555:13): [True: 1, False: 51]
  ------------------
  556|      1|                return r;
  557|     51|        if (r == 0 || isempty(expression))
  ------------------
  |  Branch (557:13): [True: 2, False: 49]
  |  Branch (557:23): [True: 1, False: 48]
  ------------------
  558|      3|                return -EINVAL;
  ------------------
  |  |    5|      3|#  define EINVAL 22
  ------------------
  559|       |
  560|       |        /* Remove trailing spaces from SMBIOS field */
  561|     48|        delete_trailing_chars(field, WHITESPACE);
  ------------------
  |  |   15|     48|#define WHITESPACE          " \t\n\r"
  ------------------
  562|       |
  563|       |        /* Parse operator */
  564|     48|        operator = parse_compare_operator(&expression, COMPARE_ALLOW_FNMATCH|COMPARE_EQUAL_BY_STRING);
  565|     48|        if (operator < 0)
  ------------------
  |  Branch (565:13): [True: 12, False: 36]
  ------------------
  566|     12|                return operator;
  567|       |
  568|       |        /* Parse expected value */
  569|     36|        r = extract_first_word(&expression, &expected_value, NULL, EXTRACT_UNQUOTE);
  570|     36|        if (r < 0)
  ------------------
  |  Branch (570:13): [True: 1, False: 35]
  ------------------
  571|      1|                return r;
  572|     35|        if (r == 0 || !isempty(expression))
  ------------------
  |  Branch (572:13): [True: 13, False: 22]
  |  Branch (572:23): [True: 9, False: 13]
  ------------------
  573|     22|                return -EINVAL;
  ------------------
  |  |    5|     22|#  define EINVAL 22
  ------------------
  574|       |
  575|       |        /* Read actual value from sysfs */
  576|     13|        if (!filename_is_valid(field))
  ------------------
  |  Branch (576:13): [True: 5, False: 8]
  ------------------
  577|      5|                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid SMBIOS field name.");
  ------------------
  |  |  228|      5|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      5|        ({                                                              \
  |  |  |  |  205|      5|                int _error = (error);                                   \
  |  |  |  |  206|      5|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      5|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      5|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      5|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      5|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      5|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      5|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      5|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      5|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      5|        ({                                                              \
  |  |  |  |  |  |  190|      5|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      5|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      5|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      5|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|     10|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      5|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      5|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 5, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      5|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      5|        })
  |  |  ------------------
  ------------------
  578|       |
  579|      8|        const char *p = strjoina("/sys/class/dmi/id/", field);
  ------------------
  |  |   94|      8|        ({                                                              \
  |  |   95|      8|                const char *_appendees_[] = { a, __VA_ARGS__ };         \
  |  |   96|      8|                char *_d_, *_p_;                                        \
  |  |   97|      8|                size_t _len_ = 0;                                       \
  |  |   98|      8|                size_t _i_;                                             \
  |  |   99|     24|                for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
  |  |  ------------------
  |  |  |  |  134|     48|        (__builtin_choose_expr(                                         \
  |  |  |  |  135|     48|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  |  |  136|     48|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  |  |  137|     48|                VOID_0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  128|     24|#  define VOID_0 ((void)0)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (99:31): [True: 16, False: 8]
  |  |  |  Branch (99:64): [True: 16, False: 0]
  |  |  ------------------
  |  |  100|     16|                        _len_ += strlen(_appendees_[_i_]);              \
  |  |  101|      8|                _p_ = _d_ = newa(char, _len_ + 1);                      \
  |  |  ------------------
  |  |  |  |   29|      8|        ({                                                              \
  |  |  |  |   30|      8|                size_t _n_ = (n);                                       \
  |  |  |  |   31|      8|                assert_se(MUL_ASSIGN_SAFE(&_n_, sizeof(t)));            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      8|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      8|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      8|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      8|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 8]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      8|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      8|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   32|      8|                (t*) alloca_safe(_n_);                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      8|        ({                                                              \
  |  |  |  |  |  |   23|      8|                size_t _nn_ = (n);                                      \
  |  |  |  |  |  |   24|      8|                assert(_nn_ <= ALLOCA_MAX);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      8|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      8|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      8|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      8|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 8]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      8|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      8|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      8|                alloca(_nn_ == 0 ? 1 : _nn_);                           \
  |  |  |  |  |  |   26|      8|        })                                                              \
  |  |  |  |  ------------------
  |  |  |  |   33|      8|        })
  |  |  ------------------
  |  |  102|     24|                for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
  |  |  ------------------
  |  |  |  |  134|     48|        (__builtin_choose_expr(                                         \
  |  |  |  |  135|     48|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  |  |  136|     48|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  |  |  137|     48|                VOID_0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  128|     24|#  define VOID_0 ((void)0)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (102:31): [True: 16, False: 8]
  |  |  |  Branch (102:64): [True: 16, False: 0]
  |  |  ------------------
  |  |  103|     16|                        _p_ = stpcpy(_p_, _appendees_[_i_]);            \
  |  |  104|      8|                *_p_ = 0;                                               \
  |  |  105|      8|                _d_;                                                    \
  |  |  106|      8|        })
  ------------------
  580|      8|        r = read_virtual_file(p, SIZE_MAX, &actual_value, NULL);
  581|      8|        if (r < 0) {
  ------------------
  |  Branch (581:13): [True: 8, False: 0]
  ------------------
  582|      8|                log_debug_errno(r, "Failed to read %s: %m", p);
  ------------------
  |  |  228|      8|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      8|        ({                                                              \
  |  |  |  |  205|      8|                int _error = (error);                                   \
  |  |  |  |  206|      8|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      8|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      8|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      8|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      8|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      8|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 8]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      8|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      8|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      8|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      8|        ({                                                              \
  |  |  |  |  |  |  190|      8|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      8|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 8]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      8|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      8|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|     16|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      8|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      8|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 8, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      8|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      8|        })
  |  |  ------------------
  ------------------
  583|      8|                if (r == -ENOENT)
  ------------------
  |  Branch (583:21): [True: 8, False: 0]
  ------------------
  584|      8|                        return false;
  585|      0|                return r;
  586|      8|        }
  587|       |
  588|       |        /* Remove trailing newline */
  589|      0|        delete_trailing_chars(actual_value, WHITESPACE);
  ------------------
  |  |   15|      0|#define WHITESPACE          " \t\n\r"
  ------------------
  590|       |
  591|       |        /* Finally compare actual and expected value */
  592|      0|        return version_or_fnmatch_compare(operator, actual_value, expected_value);
  593|      8|}
condition.c:condition_test_virtualization:
  458|    226|static int condition_test_virtualization(Condition *c, char **env) {
  459|    226|        Virtualization v;
  460|    226|        int b;
  461|       |
  462|    226|        assert(c);
  ------------------
  |  |   72|    226|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    226|        do {                                                            \
  |  |  |  |   59|    226|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    226|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 226]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    226|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    226|        } while (false)
  |  |  ------------------
  ------------------
  463|    226|        assert(c->parameter);
  ------------------
  |  |   72|    226|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    226|        do {                                                            \
  |  |  |  |   59|    226|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    226|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 226]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    226|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    226|        } while (false)
  |  |  ------------------
  ------------------
  464|    226|        assert(c->type == CONDITION_VIRTUALIZATION);
  ------------------
  |  |   72|    226|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    226|        do {                                                            \
  |  |  |  |   59|    226|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    226|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 226]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    226|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    226|        } while (false)
  |  |  ------------------
  ------------------
  465|       |
  466|    226|        if (streq(c->parameter, "private-users"))
  ------------------
  |  |   46|    226|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 1, False: 225]
  |  |  ------------------
  ------------------
  467|      1|                return running_in_userns();
  468|       |
  469|    225|        v = detect_virtualization();
  470|    225|        if (v < 0)
  ------------------
  |  Branch (470:13): [True: 0, False: 225]
  ------------------
  471|      0|                return v;
  472|       |
  473|       |        /* First, compare with yes/no */
  474|    225|        b = parse_boolean(c->parameter);
  475|    225|        if (b >= 0)
  ------------------
  |  Branch (475:13): [True: 5, False: 220]
  ------------------
  476|      5|                return b == (v != VIRTUALIZATION_NONE);
  477|       |
  478|       |        /* Then, compare categorization */
  479|    220|        if (streq(c->parameter, "vm"))
  ------------------
  |  |   46|    220|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 1, False: 219]
  |  |  ------------------
  ------------------
  480|      1|                return VIRTUALIZATION_IS_VM(v);
  481|       |
  482|    219|        if (streq(c->parameter, "container"))
  ------------------
  |  |   46|    219|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 1, False: 218]
  |  |  ------------------
  ------------------
  483|      1|                return VIRTUALIZATION_IS_CONTAINER(v);
  484|       |
  485|       |        /* Finally compare id */
  486|    218|        return v != VIRTUALIZATION_NONE && streq(c->parameter, virtualization_to_string(v));
  ------------------
  |  |   46|    218|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 1, False: 217]
  |  |  ------------------
  ------------------
  |  Branch (486:16): [True: 218, False: 0]
  ------------------
  487|    219|}
condition.c:condition_test_host:
  649|    105|static int condition_test_host(Condition *c, char **env) {
  650|    105|        _cleanup_free_ char *h = NULL;
  ------------------
  |  |   82|    105|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    105|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  651|    105|        int r;
  652|       |
  653|    105|        assert(c);
  ------------------
  |  |   72|    105|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    105|        do {                                                            \
  |  |  |  |   59|    105|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    105|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 105]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    105|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    105|        } while (false)
  |  |  ------------------
  ------------------
  654|    105|        assert(c->parameter);
  ------------------
  |  |   72|    105|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    105|        do {                                                            \
  |  |  |  |   59|    105|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    105|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 105]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    105|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    105|        } while (false)
  |  |  ------------------
  ------------------
  655|    105|        assert(c->type == CONDITION_HOST);
  ------------------
  |  |   72|    105|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    105|        do {                                                            \
  |  |  |  |   59|    105|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    105|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 105]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    105|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    105|        } while (false)
  |  |  ------------------
  ------------------
  656|       |
  657|    105|        sd_id128_t x;
  658|    105|        if (sd_id128_from_string(c->parameter, &x) >= 0) {
  ------------------
  |  Branch (658:13): [True: 12, False: 93]
  ------------------
  659|     12|                static const struct {
  660|     12|                        const char *name;
  661|     12|                        int (*get_id)(sd_id128_t *ret);
  662|     12|                } table[] = {
  663|     12|                        { "machine ID",   sd_id128_get_machine },
  664|     12|                        { "boot ID",      sd_id128_get_boot    },
  665|     12|                        { "product UUID", id128_get_product    },
  666|     12|                };
  667|       |
  668|       |                /* If this is a UUID, check if this matches the machine ID, boot ID or product UUID */
  669|     36|                FOREACH_ELEMENT(i, table) {
  ------------------
  |  |  466|     12|        FOREACH_ARRAY(i, array, ELEMENTSOF(array))
  |  |  ------------------
  |  |  |  |  463|     12|        _FOREACH_ARRAY(i, array, num, UNIQ_T(m, UNIQ), UNIQ_T(end, UNIQ))
  |  |  |  |  ------------------
  |  |  |  |  |  |  457|     12|        for (typeof(array[0]) *i = (array), *end = ({                   \
  |  |  |  |  |  |  458|     12|                                typeof(num) m = (num);                  \
  |  |  |  |  |  |  459|     12|                                (i && m > 0) ? i + m : NULL;            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (459:34): [True: 12, False: 0]
  |  |  |  |  |  |  |  Branch (459:39): [True: 12, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  460|     48|                        }); end && i < end; i++)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (460:29): [True: 48, False: 0]
  |  |  |  |  |  |  |  Branch (460:36): [True: 36, False: 12]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  670|     36|                        sd_id128_t y;
  671|       |
  672|     36|                        r = i->get_id(&y);
  673|     36|                        if (r < 0)
  ------------------
  |  Branch (673:29): [True: 24, False: 12]
  ------------------
  674|     36|                                log_debug_errno(r, "Failed to get %s, ignoring: %m", i->name);
  ------------------
  |  |  228|     24|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|     24|        ({                                                              \
  |  |  |  |  205|     24|                int _error = (error);                                   \
  |  |  |  |  206|     24|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|     24|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|     24|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|     24|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|     24|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|     24|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 24]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|     24|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|     24|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|     24|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|     24|        ({                                                              \
  |  |  |  |  |  |  190|     24|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|     24|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 24]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|     24|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|     24|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|     48|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|     24|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|     24|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 24, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     24|        })
  |  |  |  |  ------------------
  |  |  |  |  208|     24|        })
  |  |  ------------------
  ------------------
  675|     12|                        else if (sd_id128_equal(x, y))
  ------------------
  |  Branch (675:34): [True: 0, False: 12]
  ------------------
  676|      0|                                return true;
  677|     36|                }
  678|       |
  679|       |                /* Fall through, also allow setups where people set hostnames to UUIDs. Kinda weird, but no
  680|       |                 * reason not to allow that */
  681|     12|        }
  682|       |
  683|    105|        h = gethostname_malloc();
  684|    105|        if (!h)
  ------------------
  |  Branch (684:13): [True: 0, False: 105]
  ------------------
  685|      0|                return -ENOMEM;
  686|       |
  687|    105|        r = fnmatch(c->parameter, h, FNM_CASEFOLD);
  688|    105|        if (r == FNM_NOMATCH)
  ------------------
  |  Branch (688:13): [True: 102, False: 3]
  ------------------
  689|    102|                return false;
  690|      3|        if (r != 0)
  ------------------
  |  Branch (690:13): [True: 0, False: 3]
  ------------------
  691|      0|                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "fnmatch() failed.");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  692|       |
  693|      3|        return true;
  694|      3|}
condition.c:condition_test_kernel_command_line:
  112|     72|static int condition_test_kernel_command_line(Condition *c, char **env) {
  113|     72|        _cleanup_strv_free_ char **args = NULL;
  ------------------
  |  |   21|     72|#define _cleanup_strv_free_ _cleanup_(strv_freep)
  |  |  ------------------
  |  |  |  |   78|     72|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  114|     72|        int r;
  115|       |
  116|     72|        assert(c);
  ------------------
  |  |   72|     72|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     72|        do {                                                            \
  |  |  |  |   59|     72|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     72|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 72]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     72|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     72|        } while (false)
  |  |  ------------------
  ------------------
  117|     72|        assert(c->parameter);
  ------------------
  |  |   72|     72|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     72|        do {                                                            \
  |  |  |  |   59|     72|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     72|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 72]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     72|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     72|        } while (false)
  |  |  ------------------
  ------------------
  118|     72|        assert(c->type == CONDITION_KERNEL_COMMAND_LINE);
  ------------------
  |  |   72|     72|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     72|        do {                                                            \
  |  |  |  |   59|     72|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     72|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 72]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     72|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     72|        } while (false)
  |  |  ------------------
  ------------------
  119|       |
  120|     72|        r = proc_cmdline_strv(&args);
  121|     72|        if (r < 0)
  ------------------
  |  Branch (121:13): [True: 0, False: 72]
  ------------------
  122|      0|                return r;
  123|       |
  124|     72|        bool equal = strchr(c->parameter, '=');
  125|       |
  126|    214|        STRV_FOREACH(word, args) {
  ------------------
  |  |   10|     72|        _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |    7|    285|        for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (7:41): [True: 285, False: 0]
  |  |  |  |  |  Branch (7:52): [True: 214, False: 71]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  127|    214|                bool found;
  128|       |
  129|    214|                if (equal)
  ------------------
  |  Branch (129:21): [True: 192, False: 22]
  ------------------
  130|    192|                        found = streq(*word, c->parameter);
  ------------------
  |  |   46|    192|#define streq(a,b) (strcmp((a),(b)) == 0)
  ------------------
  131|     22|                else {
  132|     22|                        const char *f;
  133|       |
  134|     22|                        f = startswith(*word, c->parameter);
  135|     22|                        found = f && IN_SET(*f, 0, '=');
  ------------------
  |  |  361|     29|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 1, False: 6]
  |  |  ------------------
  |  |  362|     29|                bool _found = false;                                    \
  |  |  363|     29|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|     29|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|     29|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|     29|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|      7|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|     29|                switch (x) {                                            \
  |  |  368|      1|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|      1|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|      1|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|      1|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|      1|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|      1|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 0, False: 7]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 1, False: 6]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|      1|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|      1|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|      1|                        _found = true;                                  \
  |  |  370|      1|                        break;                                          \
  |  |  371|      6|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 6, False: 1]
  |  |  ------------------
  |  |  372|      6|                        ;                                               \
  |  |  373|     29|                }                                                       \
  |  |  374|     29|                _found;                                                 \
  |  |  375|      7|        })
  ------------------
  |  Branch (135:33): [True: 7, False: 15]
  ------------------
  136|     22|                }
  137|       |
  138|    214|                if (found)
  ------------------
  |  Branch (138:21): [True: 1, False: 213]
  ------------------
  139|      1|                        return true;
  140|    214|        }
  141|       |
  142|     71|        return false;
  143|     72|}
condition.c:condition_test_version:
  237|    564|static int condition_test_version(Condition *c, char **env) {
  238|    564|        int r;
  239|       |
  240|    564|        assert(c);
  ------------------
  |  |   72|    564|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    564|        do {                                                            \
  |  |  |  |   59|    564|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    564|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 564]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    564|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    564|        } while (false)
  |  |  ------------------
  ------------------
  241|    564|        assert(c->type == CONDITION_VERSION);
  ------------------
  |  |   72|    564|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    564|        do {                                                            \
  |  |  |  |   59|    564|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    564|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 564]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    564|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    564|        } while (false)
  |  |  ------------------
  ------------------
  242|       |
  243|       |        /* An empty condition is considered true. */
  244|    564|        if (isempty(c->parameter))
  ------------------
  |  Branch (244:13): [True: 1, False: 563]
  ------------------
  245|      1|                return true;
  246|       |
  247|    563|        const char *p = c->parameter;
  248|    563|        _cleanup_free_ char *word = NULL;
  ------------------
  |  |   82|    563|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    563|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  249|    563|        r = extract_first_word(&p, &word, COMPARE_OPERATOR_WITH_FNMATCH_CHARS WHITESPACE,
  ------------------
  |  |    7|    563|#define COMPARE_OPERATOR_WITH_FNMATCH_CHARS COMPARE_OPERATOR_CHARS "$"
  |  |  ------------------
  |  |  |  |    6|    563|#define COMPARE_OPERATOR_CHARS "!<=>"
  |  |  ------------------
  ------------------
                      r = extract_first_word(&p, &word, COMPARE_OPERATOR_WITH_FNMATCH_CHARS WHITESPACE,
  ------------------
  |  |   15|    563|#define WHITESPACE          " \t\n\r"
  ------------------
  250|    563|                               EXTRACT_DONT_COALESCE_SEPARATORS|EXTRACT_RETAIN_SEPARATORS);
  251|    563|        if (r < 0)
  ------------------
  |  Branch (251:13): [True: 1, False: 562]
  ------------------
  252|      1|                return log_debug_errno(r, "Failed to parse compare predicate \"%s\": %m", p);
  ------------------
  |  |  228|      1|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      1|        ({                                                              \
  |  |  |  |  205|      1|                int _error = (error);                                   \
  |  |  |  |  206|      1|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      1|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      1|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      1|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      1|        ({                                                              \
  |  |  |  |  |  |  190|      1|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      1|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      1|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      1|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      2|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      1|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      1|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      1|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      1|        })
  |  |  ------------------
  ------------------
  253|    562|        if (r == 0)
  ------------------
  |  Branch (253:13): [True: 0, False: 562]
  ------------------
  254|      0|                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Missing right operand in condition: %s", c->parameter);
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  255|       |
  256|    562|        if (streq(word, "systemd"))
  ------------------
  |  |   46|    562|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 1, False: 561]
  |  |  ------------------
  ------------------
  257|      1|                return condition_test_version_cmp(p, STRINGIFY(PROJECT_VERSION));
  ------------------
  |  |  121|      1|#define STRINGIFY(x) XSTRINGIFY(x)
  |  |  ------------------
  |  |  |  |  120|      1|#define XSTRINGIFY(x) #x
  |  |  ------------------
  ------------------
  258|       |
  259|    561|        if (streq(word, "glibc"))
  ------------------
  |  |   46|    561|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 1, False: 560]
  |  |  ------------------
  ------------------
  260|      1|                return condition_test_version_cmp(p, gnu_get_libc_version());
  261|       |
  262|       |        /* if no predicate has been set, default to "kernel" and use the whole parameter as condition */
  263|    560|        if (!streq(word, "kernel"))
  ------------------
  |  |   46|    560|#define streq(a,b) (strcmp((a),(b)) == 0)
  ------------------
  |  Branch (263:13): [True: 559, False: 1]
  ------------------
  264|    559|                p = c->parameter;
  265|       |
  266|    560|        struct utsname u;
  267|    560|        assert_se(uname(&u) >= 0);
  ------------------
  |  |   65|    560|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    560|        do {                                                            \
  |  |  |  |   59|    560|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    560|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 560]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    560|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    560|        } while (false)
  |  |  ------------------
  ------------------
  268|    560|        return condition_test_version_cmp(p, u.release);
  269|    561|}
condition.c:condition_test_version_cmp:
  186|    562|static int condition_test_version_cmp(const char *condition, const char *ver) {
  187|    562|        CompareOperator operator;
  188|    562|        bool first = true;
  189|       |
  190|    562|        assert(condition);
  ------------------
  |  |   72|    562|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    562|        do {                                                            \
  |  |  |  |   59|    562|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    562|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 562]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    562|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    562|        } while (false)
  |  |  ------------------
  ------------------
  191|    562|        assert(ver);
  ------------------
  |  |   72|    562|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    562|        do {                                                            \
  |  |  |  |   59|    562|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    562|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 562]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    562|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    562|        } while (false)
  |  |  ------------------
  ------------------
  192|       |
  193|  4.08k|        for (const char *p = condition;;) {
  194|  4.08k|                _cleanup_free_ char *word = NULL;
  ------------------
  |  |   82|  4.08k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  4.08k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  195|  4.08k|                const char *s;
  196|  4.08k|                int r;
  197|       |
  198|  4.08k|                r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
  199|  4.08k|                if (r < 0)
  ------------------
  |  Branch (199:21): [True: 53, False: 4.03k]
  ------------------
  200|     53|                        return log_debug_errno(r, "Failed to parse condition string \"%s\": %m", p);
  ------------------
  |  |  228|     53|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|     53|        ({                                                              \
  |  |  |  |  205|     53|                int _error = (error);                                   \
  |  |  |  |  206|     53|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|     53|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|     53|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|     53|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|     53|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|     53|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 53]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|     53|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|     53|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|     53|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|     53|        ({                                                              \
  |  |  |  |  |  |  190|     53|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|     53|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 53]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|     53|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|     53|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|    106|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|     53|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|     53|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 53, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     53|        })
  |  |  |  |  ------------------
  |  |  |  |  208|     53|        })
  |  |  ------------------
  ------------------
  201|  4.03k|                if (r == 0)
  ------------------
  |  Branch (201:21): [True: 206, False: 3.82k]
  ------------------
  202|    206|                        break;
  203|       |
  204|  3.82k|                s = strstrip(word);
  205|  3.82k|                operator = parse_compare_operator(&s, COMPARE_ALLOW_FNMATCH|COMPARE_EQUAL_BY_STRING);
  206|  3.82k|                if (operator < 0) /* No prefix? Then treat as glob string */
  ------------------
  |  Branch (206:21): [True: 633, False: 3.19k]
  ------------------
  207|    633|                        operator = COMPARE_FNMATCH_EQUAL;
  208|       |
  209|  3.82k|                s += strspn(s, WHITESPACE);
  ------------------
  |  |   15|  3.82k|#define WHITESPACE          " \t\n\r"
  ------------------
  210|  3.82k|                if (isempty(s)) {
  ------------------
  |  Branch (210:21): [True: 39, False: 3.78k]
  ------------------
  211|     39|                        if (first) {
  ------------------
  |  Branch (211:29): [True: 21, False: 18]
  ------------------
  212|       |                                /* For backwards compatibility, allow whitespace between the operator and
  213|       |                                 * value, without quoting, but only in the first expression. */
  214|     21|                                word = mfree(word);
  ------------------
  |  |  404|     21|        ({                                      \
  |  |  405|     21|                free(memory);                   \
  |  |  406|     21|                (typeof(memory)) NULL;          \
  |  |  407|     21|        })
  ------------------
  215|     21|                                r = extract_first_word(&p, &word, NULL, 0);
  216|     21|                                if (r < 0)
  ------------------
  |  Branch (216:37): [True: 1, False: 20]
  ------------------
  217|      1|                                        return log_debug_errno(r, "Failed to parse condition string \"%s\": %m", p);
  ------------------
  |  |  228|      1|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      1|        ({                                                              \
  |  |  |  |  205|      1|                int _error = (error);                                   \
  |  |  |  |  206|      1|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      1|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      1|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      1|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      1|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      1|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      1|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      1|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      1|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      1|        ({                                                              \
  |  |  |  |  |  |  190|      1|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      1|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      1|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      1|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      2|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      1|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      1|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      1|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      1|        })
  |  |  ------------------
  ------------------
  218|     20|                                if (r == 0)
  ------------------
  |  Branch (218:37): [True: 14, False: 6]
  ------------------
  219|     14|                                        return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Unexpected end of expression: %s", p);
  ------------------
  |  |  228|     14|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|     14|        ({                                                              \
  |  |  |  |  205|     14|                int _error = (error);                                   \
  |  |  |  |  206|     14|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|     14|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|     14|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|     14|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|     14|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|     14|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 14]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|     14|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|     14|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|     14|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|     14|        ({                                                              \
  |  |  |  |  |  |  190|     14|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|     14|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|     14|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|     14|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|     28|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|     14|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|     14|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 14, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     14|        })
  |  |  |  |  ------------------
  |  |  |  |  208|     14|        })
  |  |  ------------------
  ------------------
  220|      6|                                s = word;
  221|      6|                        } else
  222|     18|                                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Unexpected end of expression: %s", p);
  ------------------
  |  |  228|     18|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|     18|        ({                                                              \
  |  |  |  |  205|     18|                int _error = (error);                                   \
  |  |  |  |  206|     18|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|     18|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|     18|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|     18|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|     18|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|     18|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|     18|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|     18|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|     18|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|     18|        ({                                                              \
  |  |  |  |  |  |  190|     18|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|     18|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 18]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|     18|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|     18|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|     36|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|     18|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|     18|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 18, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     18|        })
  |  |  |  |  ------------------
  |  |  |  |  208|     18|        })
  |  |  ------------------
  ------------------
  223|     39|                }
  224|       |
  225|  3.79k|                r = version_or_fnmatch_compare(operator, ver, s);
  226|  3.79k|                if (r < 0)
  ------------------
  |  Branch (226:21): [True: 0, False: 3.79k]
  ------------------
  227|      0|                        return r;
  228|  3.79k|                if (!r)
  ------------------
  |  Branch (228:21): [True: 270, False: 3.52k]
  ------------------
  229|    270|                        return false;
  230|       |
  231|  3.52k|                first = false;
  232|  3.52k|        }
  233|       |
  234|    206|        return true;
  235|    562|}
condition.c:condition_test_credential:
  145|     61|static int condition_test_credential(Condition *c, char **env) {
  146|     61|        int r;
  147|       |
  148|     61|        assert(c);
  ------------------
  |  |   72|     61|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     61|        do {                                                            \
  |  |  |  |   59|     61|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     61|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 61]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     61|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     61|        } while (false)
  |  |  ------------------
  ------------------
  149|     61|        assert(c->parameter);
  ------------------
  |  |   72|     61|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     61|        do {                                                            \
  |  |  |  |   59|     61|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     61|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 61]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     61|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     61|        } while (false)
  |  |  ------------------
  ------------------
  150|     61|        assert(c->type == CONDITION_CREDENTIAL);
  ------------------
  |  |   72|     61|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     61|        do {                                                            \
  |  |  |  |   59|     61|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     61|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 61]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     61|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     61|        } while (false)
  |  |  ------------------
  ------------------
  151|       |
  152|       |        /* For now we'll do a very simple existence check and are happy with either a regular or an encrypted
  153|       |         * credential. Given that we check the syntax of the argument we have the option to later maybe allow
  154|       |         * contents checks too without breaking compatibility, but for now let's be minimalistic. */
  155|       |
  156|     61|        if (!credential_name_valid(c->parameter)) /* credentials with invalid names do not exist */
  ------------------
  |  Branch (156:13): [True: 26, False: 35]
  ------------------
  157|     26|                return false;
  158|       |
  159|     35|        int (*gd)(const char **ret);
  160|     70|        FOREACH_ARGUMENT(gd, get_credentials_dir, get_encrypted_credentials_dir) {
  ------------------
  |  |  204|     35|        _FOREACH_ARGUMENT(entry, UNIQ_T(_entries_, UNIQ), UNIQ_T(_current_, UNIQ), UNIQ_T(_va_sentinel_, UNIQ), ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |  206|     35|        for (typeof(entry) _va_sentinel_[1] = {}, _entries_[] = { __VA_ARGS__ __VA_OPT__(,) _va_sentinel_[0] }, *_current_ = _entries_; \
  |  |  |  |  207|    105|             ((long)(_current_ - _entries_) < (long)(ELEMENTSOF(_entries_) - 1)) && ({ entry = *_current_; true; }); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|    105|        (__builtin_choose_expr(                                         \
  |  |  |  |  |  |  135|    105|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  |  |  |  |  136|    105|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  |  |  |  |  137|    105|                VOID_0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  128|    105|#  define VOID_0 ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (207:14): [True: 70, False: 35]
  |  |  |  |  |  Branch (207:85): [True: 70, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  208|     70|             _current_++)
  |  |  ------------------
  ------------------
  161|     70|                _cleanup_free_ char *j = NULL;
  ------------------
  |  |   82|     70|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|     70|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  162|     70|                const char *cd;
  163|       |
  164|     70|                r = gd(&cd);
  165|     70|                if (r == -ENXIO) /* no env var set */
  ------------------
  |  Branch (165:21): [True: 70, False: 0]
  ------------------
  166|     70|                        continue;
  167|      0|                if (r < 0)
  ------------------
  |  Branch (167:21): [True: 0, False: 0]
  ------------------
  168|      0|                        return r;
  169|       |
  170|      0|                j = path_join(cd, c->parameter);
  ------------------
  |  |   70|      0|#define path_join(...) path_extend_internal(NULL, __VA_ARGS__, POINTER_MAX)
  |  |  ------------------
  |  |  |  |  159|      0|#define POINTER_MAX ((void*) UINTPTR_MAX)
  |  |  ------------------
  ------------------
  171|      0|                if (!j)
  ------------------
  |  Branch (171:21): [True: 0, False: 0]
  ------------------
  172|      0|                        return -ENOMEM;
  173|       |
  174|      0|                r = access_nofollow(j, F_OK);
  175|      0|                if (r >= 0)
  ------------------
  |  Branch (175:21): [True: 0, False: 0]
  ------------------
  176|      0|                        return true; /* yay! */
  177|      0|                if (r != -ENOENT)
  ------------------
  |  Branch (177:21): [True: 0, False: 0]
  ------------------
  178|      0|                        return r;
  179|       |
  180|       |                /* not found in this dir */
  181|      0|        }
  182|       |
  183|     35|        return false;
  184|     35|}

netdev.c:condition_free_list:
   76|  23.0k|static inline Condition* condition_free_list(Condition *first) {
   77|  23.0k|        return condition_free_list_type(first, _CONDITION_TYPE_INVALID);
   78|  23.0k|}

l2tp-tunnel.c:l2tp_session_free_or_set_invalid:
   34|  52.9k|        static inline type* free_func##_or_set_invalid(type *p) {       \
   35|  52.9k|                assert(p);                                              \
  ------------------
  |  |   72|  52.9k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  52.9k|        do {                                                            \
  |  |  |  |   59|  52.9k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  52.9k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 52.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  52.9k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  52.9k|        } while (false)
  |  |  ------------------
  ------------------
   36|  52.9k|                                                                        \
   37|  52.9k|                if (p->section)                                         \
  ------------------
  |  Branch (37:21): [True: 52.9k, False: 0]
  ------------------
   38|  52.9k|                        p->section->invalid = true;                     \
   39|  52.9k|                else                                                    \
   40|  52.9k|                        free_func(p);                                   \
   41|  52.9k|                return NULL;                                            \
   42|  52.9k|        }                                                               \
macsec.c:macsec_receive_association_free_or_set_invalid:
   34|  3.92k|        static inline type* free_func##_or_set_invalid(type *p) {       \
   35|  3.92k|                assert(p);                                              \
  ------------------
  |  |   72|  3.92k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  3.92k|        do {                                                            \
  |  |  |  |   59|  3.92k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  3.92k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 3.92k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  3.92k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  3.92k|        } while (false)
  |  |  ------------------
  ------------------
   36|  3.92k|                                                                        \
   37|  3.92k|                if (p->section)                                         \
  ------------------
  |  Branch (37:21): [True: 3.92k, False: 0]
  ------------------
   38|  3.92k|                        p->section->invalid = true;                     \
   39|  3.92k|                else                                                    \
   40|  3.92k|                        free_func(p);                                   \
   41|  3.92k|                return NULL;                                            \
   42|  3.92k|        }                                                               \
macsec.c:macsec_receive_channel_free_or_set_invalid:
   34|  1.23k|        static inline type* free_func##_or_set_invalid(type *p) {       \
   35|  1.23k|                assert(p);                                              \
  ------------------
  |  |   72|  1.23k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.23k|        do {                                                            \
  |  |  |  |   59|  1.23k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.23k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.23k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.23k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.23k|        } while (false)
  |  |  ------------------
  ------------------
   36|  1.23k|                                                                        \
   37|  1.23k|                if (p->section)                                         \
  ------------------
  |  Branch (37:21): [True: 1.23k, False: 0]
  ------------------
   38|  1.23k|                        p->section->invalid = true;                     \
   39|  1.23k|                else                                                    \
   40|  1.23k|                        free_func(p);                                   \
   41|  1.23k|                return NULL;                                            \
   42|  1.23k|        }                                                               \
macsec.c:macsec_transmit_association_free_or_set_invalid:
   34|  2.95k|        static inline type* free_func##_or_set_invalid(type *p) {       \
   35|  2.95k|                assert(p);                                              \
  ------------------
  |  |   72|  2.95k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.95k|        do {                                                            \
  |  |  |  |   59|  2.95k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.95k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.95k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.95k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.95k|        } while (false)
  |  |  ------------------
  ------------------
   36|  2.95k|                                                                        \
   37|  2.95k|                if (p->section)                                         \
  ------------------
  |  Branch (37:21): [True: 2.95k, False: 0]
  ------------------
   38|  2.95k|                        p->section->invalid = true;                     \
   39|  2.95k|                else                                                    \
   40|  2.95k|                        free_func(p);                                   \
   41|  2.95k|                return NULL;                                            \
   42|  2.95k|        }                                                               \
wireguard.c:wireguard_peer_free_or_set_invalid:
   34|  14.8k|        static inline type* free_func##_or_set_invalid(type *p) {       \
   35|  14.8k|                assert(p);                                              \
  ------------------
  |  |   72|  14.8k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  14.8k|        do {                                                            \
  |  |  |  |   59|  14.8k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  14.8k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 14.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  14.8k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  14.8k|        } while (false)
  |  |  ------------------
  ------------------
   36|  14.8k|                                                                        \
   37|  14.8k|                if (p->section)                                         \
  ------------------
  |  Branch (37:21): [True: 14.8k, False: 0]
  ------------------
   38|  14.8k|                        p->section->invalid = true;                     \
   39|  14.8k|                else                                                    \
   40|  14.8k|                        free_func(p);                                   \
   41|  14.8k|                return NULL;                                            \
   42|  14.8k|        }                                                               \

config_item_perf_lookup:
   92|   296k|                void *userdata) {
   93|       |
   94|   296k|        ConfigPerfItemLookup lookup = (ConfigPerfItemLookup) table;
   95|   296k|        const ConfigPerfItem *p;
   96|       |
   97|   296k|        assert(table);
  ------------------
  |  |   72|   296k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   296k|        do {                                                            \
  |  |  |  |   59|   296k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   296k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 296k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   296k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   296k|        } while (false)
  |  |  ------------------
  ------------------
   98|   296k|        assert(lvalue);
  ------------------
  |  |   72|   296k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   296k|        do {                                                            \
  |  |  |  |   59|   296k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   296k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 296k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   296k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   296k|        } while (false)
  |  |  ------------------
  ------------------
   99|   296k|        assert(ret_func);
  ------------------
  |  |   72|   296k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   296k|        do {                                                            \
  |  |  |  |   59|   296k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   296k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 296k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   296k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   296k|        } while (false)
  |  |  ------------------
  ------------------
  100|   296k|        assert(ret_ltype);
  ------------------
  |  |   72|   296k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   296k|        do {                                                            \
  |  |  |  |   59|   296k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   296k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 296k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   296k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   296k|        } while (false)
  |  |  ------------------
  ------------------
  101|   296k|        assert(ret_data);
  ------------------
  |  |   72|   296k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   296k|        do {                                                            \
  |  |  |  |   59|   296k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   296k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 296k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   296k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   296k|        } while (false)
  |  |  ------------------
  ------------------
  102|       |
  103|   296k|        if (section) {
  ------------------
  |  Branch (103:13): [True: 296k, False: 0]
  ------------------
  104|   296k|                const char *key;
  105|       |
  106|   296k|                key = strjoina(section, ".", lvalue);
  ------------------
  |  |   94|   296k|        ({                                                              \
  |  |   95|   296k|                const char *_appendees_[] = { a, __VA_ARGS__ };         \
  |  |   96|   296k|                char *_d_, *_p_;                                        \
  |  |   97|   296k|                size_t _len_ = 0;                                       \
  |  |   98|   296k|                size_t _i_;                                             \
  |  |   99|  1.18M|                for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
  |  |  ------------------
  |  |  |  |  134|  2.36M|        (__builtin_choose_expr(                                         \
  |  |  |  |  135|  2.36M|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  |  |  136|  2.36M|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  |  |  137|  2.36M|                VOID_0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  128|  1.18M|#  define VOID_0 ((void)0)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (99:31): [True: 888k, False: 296k]
  |  |  |  Branch (99:64): [True: 888k, False: 0]
  |  |  ------------------
  |  |  100|   888k|                        _len_ += strlen(_appendees_[_i_]);              \
  |  |  101|   296k|                _p_ = _d_ = newa(char, _len_ + 1);                      \
  |  |  ------------------
  |  |  |  |   29|   296k|        ({                                                              \
  |  |  |  |   30|   296k|                size_t _n_ = (n);                                       \
  |  |  |  |   31|   296k|                assert_se(MUL_ASSIGN_SAFE(&_n_, sizeof(t)));            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|   296k|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|   296k|        do {                                                            \
  |  |  |  |  |  |  |  |   59|   296k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|   296k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 296k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|   296k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|   296k|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   32|   296k|                (t*) alloca_safe(_n_);                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|   296k|        ({                                                              \
  |  |  |  |  |  |   23|   296k|                size_t _nn_ = (n);                                      \
  |  |  |  |  |  |   24|   296k|                assert(_nn_ <= ALLOCA_MAX);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|   296k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|   296k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|   296k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|   296k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 296k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|   296k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|   296k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   25|   296k|                alloca(_nn_ == 0 ? 1 : _nn_);                           \
  |  |  |  |  |  |   26|   296k|        })                                                              \
  |  |  |  |  ------------------
  |  |  |  |   33|   296k|        })
  |  |  ------------------
  |  |  102|  1.18M|                for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
  |  |  ------------------
  |  |  |  |  134|  2.36M|        (__builtin_choose_expr(                                         \
  |  |  |  |  135|  2.36M|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  |  |  136|  2.36M|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  |  |  137|  2.36M|                VOID_0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  128|  1.18M|#  define VOID_0 ((void)0)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (102:31): [True: 888k, False: 296k]
  |  |  |  Branch (102:64): [True: 888k, False: 0]
  |  |  ------------------
  |  |  103|   888k|                        _p_ = stpcpy(_p_, _appendees_[_i_]);            \
  |  |  104|   296k|                *_p_ = 0;                                               \
  |  |  105|   296k|                _d_;                                                    \
  |  |  106|   296k|        })
  ------------------
  107|   296k|                p = lookup(key, strlen(key));
  108|   296k|        } else
  109|      0|                p = lookup(lvalue, strlen(lvalue));
  110|   296k|        if (!p) {
  ------------------
  |  Branch (110:13): [True: 32.1k, False: 264k]
  ------------------
  111|  32.1k|                *ret_func = NULL;
  112|  32.1k|                *ret_ltype = 0;
  113|  32.1k|                *ret_data = NULL;
  114|  32.1k|                return 0;
  115|  32.1k|        }
  116|       |
  117|   264k|        *ret_func = p->parse;
  118|   264k|        *ret_ltype = p->ltype;
  119|   264k|        *ret_data = (uint8_t*) userdata + p->offset;
  120|   264k|        return 1;
  121|   296k|}
config_parse:
  288|  23.0k|                struct stat *ret_stat) {
  289|       |
  290|  23.0k|        _cleanup_free_ char *section = NULL, *continuation = NULL;
  ------------------
  |  |   82|  23.0k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  23.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  291|  23.0k|        _cleanup_fclose_ FILE *ours = NULL;
  ------------------
  |  |   61|  23.0k|#define _cleanup_fclose_ _cleanup_(fclosep)
  |  |  ------------------
  |  |  |  |   78|  23.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  292|  23.0k|        unsigned line = 0, section_line = 0;
  293|  23.0k|        bool section_ignored = false, bom_seen = false;
  294|  23.0k|        struct stat st;
  295|  23.0k|        int r, fd;
  296|       |
  297|  23.0k|        assert(filename);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
  298|  23.0k|        assert(lookup);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
  299|       |
  300|  23.0k|        if (!f) {
  ------------------
  |  Branch (300:13): [True: 0, False: 23.0k]
  ------------------
  301|      0|                f = ours = fopen(filename, "re");
  302|      0|                if (!f) {
  ------------------
  |  Branch (302:21): [True: 0, False: 0]
  ------------------
  303|       |                        /* Only log on request, except for ENOENT,
  304|       |                         * since we return 0 to the caller. */
  305|      0|                        if ((flags & CONFIG_PARSE_WARN) || errno == ENOENT)
  ------------------
  |  Branch (305:29): [True: 0, False: 0]
  |  Branch (305:60): [True: 0, False: 0]
  ------------------
  306|      0|                                log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_ERR, errno,
  ------------------
  |  |  204|      0|        ({                                                              \
  |  |  205|      0|                int _error = (error);                                   \
  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  ------------------
  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  ------------------
  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  195|      0|        })
  |  |  ------------------
  |  |  208|      0|        })
  ------------------
  307|      0|                                               "Failed to open configuration file '%s': %m", filename);
  308|       |
  309|      0|                        if (errno == ENOENT) {
  ------------------
  |  Branch (309:29): [True: 0, False: 0]
  ------------------
  310|      0|                                if (ret_stat)
  ------------------
  |  Branch (310:37): [True: 0, False: 0]
  ------------------
  311|      0|                                        *ret_stat = (struct stat) {};
  312|       |
  313|      0|                                return 0;
  314|      0|                        }
  315|       |
  316|      0|                        return -errno;
  317|      0|                }
  318|      0|        }
  319|       |
  320|  23.0k|        fd = fileno(f);
  321|  23.0k|        if (fd >= 0) { /* stream might not have an fd, let's be careful hence */
  ------------------
  |  Branch (321:13): [True: 23.0k, False: 0]
  ------------------
  322|       |
  323|  23.0k|                if (fstat(fd, &st) < 0)
  ------------------
  |  Branch (323:21): [True: 0, False: 23.0k]
  ------------------
  324|      0|                        return log_full_errno(FLAGS_SET(flags, CONFIG_PARSE_WARN) ? LOG_ERR : LOG_DEBUG, errno,
  ------------------
  |  |  204|      0|        ({                                                              \
  |  |  205|      0|                int _error = (error);                                   \
  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  ------------------
  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  ------------------
  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  195|      0|        })
  |  |  ------------------
  |  |  208|      0|        })
  ------------------
  325|  23.0k|                                              "Failed to fstat(%s): %m", filename);
  326|       |
  327|  23.0k|                (void) stat_warn_permissions(filename, &st);
  328|  23.0k|        } else
  329|      0|                st = (struct stat) {};
  330|       |
  331|  1.80M|        for (;;) {
  332|  1.80M|                _cleanup_free_ char *buf = NULL;
  ------------------
  |  |   82|  1.80M|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  1.80M|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  333|  1.80M|                bool escaped = false;
  334|  1.80M|                char *l, *p, *e;
  335|       |
  336|  1.80M|                r = read_line(f, LONG_LINE_MAX, &buf);
  ------------------
  |  |    6|  1.80M|#define LONG_LINE_MAX (1U*1024U*1024U)
  ------------------
  337|  1.80M|                if (r == 0)
  ------------------
  |  Branch (337:21): [True: 22.8k, False: 1.78M]
  ------------------
  338|  22.8k|                        break;
  339|  1.78M|                if (r == -ENOBUFS) {
  ------------------
  |  Branch (339:21): [True: 0, False: 1.78M]
  ------------------
  340|      0|                        if (flags & CONFIG_PARSE_WARN)
  ------------------
  |  Branch (340:29): [True: 0, False: 0]
  ------------------
  341|      0|                                log_error_errno(r, "%s:%u: Line too long", filename, line);
  ------------------
  |  |  232|      0|#define log_error_errno(error, ...)     log_full_errno(LOG_ERR,     error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  342|       |
  343|      0|                        return r;
  344|      0|                }
  345|  1.78M|                if (r < 0) {
  ------------------
  |  Branch (345:21): [True: 0, False: 1.78M]
  ------------------
  346|      0|                        if (FLAGS_SET(flags, CONFIG_PARSE_WARN))
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  347|      0|                                log_error_errno(r, "%s:%u: Error while reading configuration file: %m", filename, line);
  ------------------
  |  |  232|      0|#define log_error_errno(error, ...)     log_full_errno(LOG_ERR,     error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  348|       |
  349|      0|                        return r;
  350|      0|                }
  351|       |
  352|  1.78M|                line++;
  353|       |
  354|  1.78M|                l = skip_leading_chars(buf, WHITESPACE);
  ------------------
  |  |   15|  1.78M|#define WHITESPACE          " \t\n\r"
  ------------------
  355|  1.78M|                if (*l != '\0' && strchr(COMMENTS, *l))
  ------------------
  |  |   18|   847k|#define COMMENTS            "#;"
  ------------------
  |  Branch (355:21): [True: 847k, False: 939k]
  |  Branch (355:35): [True: 1.21k, False: 846k]
  ------------------
  356|  1.21k|                        continue;
  357|       |
  358|  1.78M|                l = buf;
  359|  1.78M|                if (!bom_seen) {
  ------------------
  |  Branch (359:21): [True: 1.76M, False: 15.6k]
  ------------------
  360|  1.76M|                        char *q;
  361|       |
  362|  1.76M|                        q = startswith(buf, UTF8_BYTE_ORDER_MARK);
  ------------------
  |  |    7|  1.76M|#define UTF8_BYTE_ORDER_MARK "\xef\xbb\xbf"
  ------------------
  363|  1.76M|                        if (q) {
  ------------------
  |  Branch (363:29): [True: 185, False: 1.76M]
  ------------------
  364|    185|                                l = q;
  365|    185|                                bom_seen = true;
  366|    185|                        }
  367|  1.76M|                }
  368|       |
  369|  1.78M|                if (continuation) {
  ------------------
  |  Branch (369:21): [True: 5.86k, False: 1.77M]
  ------------------
  370|  5.86k|                        if (strlen(continuation) + strlen(l) > LONG_LINE_MAX) {
  ------------------
  |  |    6|  5.86k|#define LONG_LINE_MAX (1U*1024U*1024U)
  ------------------
  |  Branch (370:29): [True: 0, False: 5.86k]
  ------------------
  371|      0|                                if (flags & CONFIG_PARSE_WARN)
  ------------------
  |  Branch (371:37): [True: 0, False: 0]
  ------------------
  372|      0|                                        log_error("%s:%u: Continuation line too long", filename, line);
  ------------------
  |  |  224|      0|#define log_error(...)     log_full(LOG_ERR,     __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
  373|      0|                                return -ENOBUFS;
  374|      0|                        }
  375|       |
  376|  5.86k|                        if (!strextend(&continuation, l)) {
  ------------------
  |  |  174|  5.86k|#define strextend(x, ...) strextend_with_separator_internal(x, NULL, __VA_ARGS__, NULL)
  ------------------
  |  Branch (376:29): [True: 0, False: 5.86k]
  ------------------
  377|      0|                                if (flags & CONFIG_PARSE_WARN)
  ------------------
  |  Branch (377:37): [True: 0, False: 0]
  ------------------
  378|      0|                                        log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  379|      0|                                return -ENOMEM;
  380|      0|                        }
  381|       |
  382|  5.86k|                        p = continuation;
  383|  5.86k|                } else
  384|  1.77M|                        p = l;
  385|       |
  386|  19.1M|                for (e = p; *e; e++) {
  ------------------
  |  Branch (386:29): [True: 17.3M, False: 1.78M]
  ------------------
  387|  17.3M|                        if (escaped)
  ------------------
  |  Branch (387:29): [True: 106k, False: 17.2M]
  ------------------
  388|   106k|                                escaped = false;
  389|  17.2M|                        else if (*e == '\\')
  ------------------
  |  Branch (389:34): [True: 112k, False: 17.1M]
  ------------------
  390|   112k|                                escaped = true;
  391|  17.3M|                }
  392|       |
  393|  1.78M|                if (escaped) {
  ------------------
  |  Branch (393:21): [True: 5.96k, False: 1.77M]
  ------------------
  394|  5.96k|                        *(e-1) = ' ';
  395|       |
  396|  5.96k|                        if (!continuation) {
  ------------------
  |  Branch (396:29): [True: 703, False: 5.25k]
  ------------------
  397|    703|                                continuation = strdup(l);
  398|    703|                                if (!continuation) {
  ------------------
  |  Branch (398:37): [True: 0, False: 703]
  ------------------
  399|      0|                                        if (flags & CONFIG_PARSE_WARN)
  ------------------
  |  Branch (399:45): [True: 0, False: 0]
  ------------------
  400|      0|                                                log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  401|      0|                                        return -ENOMEM;
  402|      0|                                }
  403|    703|                        }
  404|       |
  405|  5.96k|                        continue;
  406|  5.96k|                }
  407|       |
  408|  1.77M|                r = parse_line(unit,
  409|  1.77M|                               filename,
  410|  1.77M|                               line,
  411|  1.77M|                               sections,
  412|  1.77M|                               lookup,
  413|  1.77M|                               table,
  414|  1.77M|                               flags,
  415|  1.77M|                               &section,
  416|  1.77M|                               &section_line,
  417|  1.77M|                               &section_ignored,
  418|  1.77M|                               p,
  419|  1.77M|                               userdata);
  420|  1.77M|                if (r < 0) {
  ------------------
  |  Branch (420:21): [True: 272, False: 1.77M]
  ------------------
  421|    272|                        if (flags & CONFIG_PARSE_WARN)
  ------------------
  |  Branch (421:29): [True: 272, False: 0]
  ------------------
  422|    272|                                log_warning_errno(r, "%s:%u: Failed to parse file: %m", filename, line);
  ------------------
  |  |  231|    272|#define log_warning_errno(error, ...)   log_full_errno(LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|    272|        ({                                                              \
  |  |  |  |  205|    272|                int _error = (error);                                   \
  |  |  |  |  206|    272|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    272|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    272|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    272|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    272|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    272|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 272]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    272|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    272|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|    272|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|    272|        ({                                                              \
  |  |  |  |  |  |  190|    272|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|    272|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 272]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|    272|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|    272|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|    544|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|    272|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|    272|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 272, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    272|        })
  |  |  |  |  ------------------
  |  |  |  |  208|    272|        })
  |  |  ------------------
  ------------------
  423|    272|                        return r;
  424|    272|                }
  425|       |
  426|  1.77M|                continuation = mfree(continuation);
  ------------------
  |  |  404|  1.77M|        ({                                      \
  |  |  405|  1.77M|                free(memory);                   \
  |  |  406|  1.77M|                (typeof(memory)) NULL;          \
  |  |  407|  1.77M|        })
  ------------------
  427|  1.77M|        }
  428|       |
  429|  22.8k|        if (continuation) {
  ------------------
  |  Branch (429:13): [True: 98, False: 22.7k]
  ------------------
  430|     98|                r = parse_line(unit,
  431|     98|                               filename,
  432|     98|                               ++line,
  433|     98|                               sections,
  434|     98|                               lookup,
  435|     98|                               table,
  436|     98|                               flags,
  437|     98|                               &section,
  438|     98|                               &section_line,
  439|     98|                               &section_ignored,
  440|     98|                               continuation,
  441|     98|                               userdata);
  442|     98|                if (r < 0) {
  ------------------
  |  Branch (442:21): [True: 8, False: 90]
  ------------------
  443|      8|                        if (flags & CONFIG_PARSE_WARN)
  ------------------
  |  Branch (443:29): [True: 8, False: 0]
  ------------------
  444|      8|                                log_warning_errno(r, "%s:%u: Failed to parse file: %m", filename, line);
  ------------------
  |  |  231|      8|#define log_warning_errno(error, ...)   log_full_errno(LOG_WARNING, error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      8|        ({                                                              \
  |  |  |  |  205|      8|                int _error = (error);                                   \
  |  |  |  |  206|      8|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      8|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      8|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      8|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      8|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      8|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 8]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      8|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      8|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      8|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      8|        ({                                                              \
  |  |  |  |  |  |  190|      8|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      8|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 8]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      8|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      8|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|     16|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      8|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      8|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 8, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      8|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      8|        })
  |  |  ------------------
  ------------------
  445|      8|                        return r;
  446|      8|                }
  447|     98|        }
  448|       |
  449|  22.7k|        if (ret_stat)
  ------------------
  |  Branch (449:13): [True: 22.7k, False: 0]
  ------------------
  450|  22.7k|                *ret_stat = st;
  451|       |
  452|  22.7k|        return 1;
  453|  22.8k|}
hashmap_put_stats_by_path:
  455|  9.97k|int hashmap_put_stats_by_path(Hashmap **stats_by_path, const char *path, const struct stat *st) {
  456|  9.97k|        _cleanup_free_ struct stat *st_copy = NULL;
  ------------------
  |  |   82|  9.97k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  9.97k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  457|  9.97k|        _cleanup_free_ char *path_copy = NULL;
  ------------------
  |  |   82|  9.97k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  9.97k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  458|  9.97k|        int r;
  459|       |
  460|  9.97k|        assert(stats_by_path);
  ------------------
  |  |   72|  9.97k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  9.97k|        do {                                                            \
  |  |  |  |   59|  9.97k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  9.97k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 9.97k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  9.97k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  9.97k|        } while (false)
  |  |  ------------------
  ------------------
  461|  9.97k|        assert(path);
  ------------------
  |  |   72|  9.97k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  9.97k|        do {                                                            \
  |  |  |  |   59|  9.97k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  9.97k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 9.97k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  9.97k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  9.97k|        } while (false)
  |  |  ------------------
  ------------------
  462|  9.97k|        assert(st);
  ------------------
  |  |   72|  9.97k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  9.97k|        do {                                                            \
  |  |  |  |   59|  9.97k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  9.97k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 9.97k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  9.97k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  9.97k|        } while (false)
  |  |  ------------------
  ------------------
  463|       |
  464|  9.97k|        st_copy = newdup(struct stat, st, 1);
  ------------------
  |  |   42|  9.97k|#define newdup(t, p, n) ((t*) memdup_multiply(p, n, sizeof(t)))
  ------------------
  465|  9.97k|        if (!st_copy)
  ------------------
  |  Branch (465:13): [True: 0, False: 9.97k]
  ------------------
  466|      0|                return -ENOMEM;
  467|       |
  468|  9.97k|        path_copy = strdup(path);
  469|  9.97k|        if (!path_copy)
  ------------------
  |  Branch (469:13): [True: 0, False: 9.97k]
  ------------------
  470|      0|                return -ENOMEM;
  471|       |
  472|  9.97k|        r = hashmap_ensure_put(stats_by_path, &path_hash_ops_free_free, path_copy, st_copy);
  473|  9.97k|        if (r < 0)
  ------------------
  |  Branch (473:13): [True: 0, False: 9.97k]
  ------------------
  474|      0|                return r;
  475|       |
  476|  9.97k|        assert(r > 0);
  ------------------
  |  |   72|  9.97k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  9.97k|        do {                                                            \
  |  |  |  |   59|  9.97k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  9.97k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 9.97k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  9.97k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  9.97k|        } while (false)
  |  |  ------------------
  ------------------
  477|  9.97k|        TAKE_PTR(path_copy);
  ------------------
  |  |  388|  9.97k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  9.97k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  9.97k|        ({                                                       \
  |  |  |  |  |  |  381|  9.97k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  9.97k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  9.97k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  9.97k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  9.97k|                _var_;                                           \
  |  |  |  |  |  |  386|  9.97k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  478|  9.97k|        TAKE_PTR(st_copy);
  ------------------
  |  |  388|  9.97k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  9.97k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  9.97k|        ({                                                       \
  |  |  |  |  |  |  381|  9.97k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  9.97k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  9.97k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  9.97k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  9.97k|                _var_;                                           \
  |  |  |  |  |  |  386|  9.97k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  479|  9.97k|        return 0;
  480|  9.97k|}
config_parse_many:
  609|  23.0k|                char ***ret_dropin_files) {
  610|       |
  611|  23.0k|        _cleanup_strv_free_ char **files = NULL;
  ------------------
  |  |   21|  23.0k|#define _cleanup_strv_free_ _cleanup_(strv_freep)
  |  |  ------------------
  |  |  |  |   78|  23.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  612|  23.0k|        int r;
  613|       |
  614|  23.0k|        assert(conf_file_dirs);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
  615|  23.0k|        assert(dropin_dirname);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
  616|  23.0k|        assert(table);
  ------------------
  |  |   72|  23.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  23.0k|        do {                                                            \
  |  |  |  |   59|  23.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  23.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  23.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  23.0k|        } while (false)
  |  |  ------------------
  ------------------
  617|       |
  618|  23.0k|        r = conf_files_list_dropins(&files, dropin_dirname, root, conf_file_dirs);
  619|  23.0k|        if (r < 0)
  ------------------
  |  Branch (619:13): [True: 0, False: 23.0k]
  ------------------
  620|      0|                return log_full_errno(FLAGS_SET(flags, CONFIG_PARSE_WARN) ? LOG_WARNING : LOG_DEBUG, r,
  ------------------
  |  |  204|      0|        ({                                                              \
  |  |  205|      0|                int _error = (error);                                   \
  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  ------------------
  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  ------------------
  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:31): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  195|      0|        })
  |  |  ------------------
  |  |  208|      0|        })
  ------------------
  621|  23.0k|                                      "Failed to list up drop-in configs in %s: %m", dropin_dirname);
  622|       |
  623|  23.0k|        r = config_parse_many_files(root, conf_files, files, sections, lookup, table, flags, userdata, ret_stats_by_path);
  624|  23.0k|        if (r < 0)
  ------------------
  |  Branch (624:13): [True: 280, False: 22.7k]
  ------------------
  625|    280|                return r; /* config_parse_many_files() logs internally. */
  626|       |
  627|  22.7k|        if (ret_dropin_files)
  ------------------
  |  Branch (627:13): [True: 9.97k, False: 12.8k]
  ------------------
  628|  9.97k|                *ret_dropin_files = TAKE_PTR(files);
  ------------------
  |  |  388|  9.97k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  9.97k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  9.97k|        ({                                                       \
  |  |  |  |  |  |  381|  9.97k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  9.97k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  9.97k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  9.97k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  9.97k|                _var_;                                           \
  |  |  |  |  |  |  386|  9.97k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  629|       |
  630|  22.7k|        return 0;
  631|  23.0k|}
config_section_hash_func:
  819|   400k|void config_section_hash_func(const ConfigSection *c, struct siphash *state) {
  820|   400k|        siphash24_compress_string(c->filename, state);
  821|   400k|        siphash24_compress_typesafe(c->line, state);
  ------------------
  |  |   20|   400k|        siphash24_compress(&(in), sizeof(typeof(in)), (state))
  ------------------
  822|   400k|}
config_section_compare_func:
  824|   181k|int config_section_compare_func(const ConfigSection *x, const ConfigSection *y) {
  825|   181k|        int r;
  826|       |
  827|   181k|        r = strcmp(x->filename, y->filename);
  828|   181k|        if (r != 0)
  ------------------
  |  Branch (828:13): [True: 0, False: 181k]
  ------------------
  829|      0|                return r;
  830|       |
  831|   181k|        return CMP(x->line, y->line);
  ------------------
  |  |  288|   181k|#define CMP(a, b) __CMP(UNIQ, (a), UNIQ, (b))
  |  |  ------------------
  |  |  |  |  290|   181k|        ({                                              \
  |  |  |  |  291|   181k|                const typeof(a) UNIQ_T(A, aq) = (a);    \
  |  |  |  |  292|   181k|                const typeof(b) UNIQ_T(B, bq) = (b);    \
  |  |  |  |  293|   181k|                UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|   181k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|   181k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|   181k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) < UNIQ_T(B, bq) ? -1 :    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|   181k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|   181k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|   181k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:17): [True: 102k, False: 79.8k]
  |  |  |  |  ------------------
  |  |  |  |  294|   181k|                UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  79.8k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  79.8k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  79.8k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                               UNIQ_T(A, aq) > UNIQ_T(B, bq) ? 1 : 0;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  144|  79.8k|#define UNIQ_T(x, uniq) CONCATENATE(__unique_prefix_, CONCATENATE(x, uniq))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  140|  79.8k|#define CONCATENATE(x, y) XCONCATENATE(x, y)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  139|  79.8k|#define XCONCATENATE(x, y) x ## y
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:17): [True: 17.2k, False: 62.5k]
  |  |  |  |  ------------------
  |  |  |  |  295|   181k|        })
  |  |  ------------------
  ------------------
  832|   181k|}
config_section_new:
  836|   145k|int config_section_new(const char *filename, unsigned line, ConfigSection **ret) {
  837|   145k|        ConfigSection *cs;
  838|       |
  839|   145k|        assert(filename);
  ------------------
  |  |   72|   145k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   145k|        do {                                                            \
  |  |  |  |   59|   145k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   145k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 145k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   145k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   145k|        } while (false)
  |  |  ------------------
  ------------------
  840|   145k|        assert(line > 0);
  ------------------
  |  |   72|   145k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   145k|        do {                                                            \
  |  |  |  |   59|   145k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   145k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 145k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   145k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   145k|        } while (false)
  |  |  ------------------
  ------------------
  841|   145k|        assert(ret);
  ------------------
  |  |   72|   145k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   145k|        do {                                                            \
  |  |  |  |   59|   145k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   145k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 145k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   145k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   145k|        } while (false)
  |  |  ------------------
  ------------------
  842|       |
  843|   145k|        cs = malloc0(offsetof(ConfigSection, filename) + strlen(filename) + 1);
  ------------------
  |  |   46|   145k|#define malloc0(n) (calloc(1, (n) ?: 1))
  |  |  ------------------
  |  |  |  Branch (46:31): [True: 145k, False: 0]
  |  |  ------------------
  ------------------
  844|   145k|        if (!cs)
  ------------------
  |  Branch (844:13): [True: 0, False: 0]
  ------------------
  845|      0|                return -ENOMEM;
  846|       |
  847|      0|        strcpy(cs->filename, filename);
  848|      0|        cs->line = line;
  849|       |
  850|      0|        *ret = TAKE_PTR(cs);
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  851|      0|        return 0;
  852|      0|}
config_parse_bool:
 1027|    486|                void *userdata) {
 1028|       |
 1029|    486|        bool *b = ASSERT_PTR(data);
  ------------------
  |  |   81|    486|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    486|        ({                                 \
  |  |  |  |   85|    486|                typeof(expr) var = (expr); \
  |  |  |  |   86|    486|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    486|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    486|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    486|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    486|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    486|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 486]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    486|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    486|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    486|                var;                       \
  |  |  |  |   88|    486|        })
  |  |  ------------------
  ------------------
 1030|    486|        bool fatal = ltype;
 1031|    486|        int r;
 1032|       |
 1033|    486|        assert(filename);
  ------------------
  |  |   72|    486|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    486|        do {                                                            \
  |  |  |  |   59|    486|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    486|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 486]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    486|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    486|        } while (false)
  |  |  ------------------
  ------------------
 1034|    486|        assert(lvalue);
  ------------------
  |  |   72|    486|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    486|        do {                                                            \
  |  |  |  |   59|    486|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    486|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 486]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    486|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    486|        } while (false)
  |  |  ------------------
  ------------------
 1035|    486|        assert(rvalue);
  ------------------
  |  |   72|    486|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    486|        do {                                                            \
  |  |  |  |   59|    486|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    486|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 486]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    486|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    486|        } while (false)
  |  |  ------------------
  ------------------
 1036|       |
 1037|    486|        r = parse_boolean(rvalue);
 1038|    486|        if (r < 0) {
  ------------------
  |  Branch (1038:13): [True: 197, False: 289]
  ------------------
 1039|    197|                log_syntax_parse_error_full(unit, filename, line, r, fatal, lvalue, rvalue);
  ------------------
  |  |  369|    197|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  472|    197|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|    197|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1040|    197|                return fatal ? -ENOEXEC : 0;
  ------------------
  |  Branch (1040:24): [True: 0, False: 197]
  ------------------
 1041|    197|        }
 1042|       |
 1043|    289|        *b = r;
 1044|    289|        return 1; /* set */
 1045|    486|}
config_parse_tristate:
 1137|    874|                void *userdata) {
 1138|       |
 1139|    874|        int r, *t = ASSERT_PTR(data);
  ------------------
  |  |   81|    874|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    874|        ({                                 \
  |  |  |  |   85|    874|                typeof(expr) var = (expr); \
  |  |  |  |   86|    874|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    874|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    874|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    874|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    874|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    874|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 874]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    874|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    874|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    874|                var;                       \
  |  |  |  |   88|    874|        })
  |  |  ------------------
  ------------------
 1140|       |
 1141|    874|        assert(filename);
  ------------------
  |  |   72|    874|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    874|        do {                                                            \
  |  |  |  |   59|    874|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    874|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 874]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    874|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    874|        } while (false)
  |  |  ------------------
  ------------------
 1142|    874|        assert(lvalue);
  ------------------
  |  |   72|    874|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    874|        do {                                                            \
  |  |  |  |   59|    874|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    874|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 874]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    874|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    874|        } while (false)
  |  |  ------------------
  ------------------
 1143|    874|        assert(rvalue);
  ------------------
  |  |   72|    874|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    874|        do {                                                            \
  |  |  |  |   59|    874|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    874|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 874]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    874|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    874|        } while (false)
  |  |  ------------------
  ------------------
 1144|       |
 1145|       |        /* A tristate is pretty much a boolean, except that it can also take an empty string,
 1146|       |         * indicating "uninitialized", much like NULL is for a pointer type. */
 1147|       |
 1148|    874|        if (isempty(rvalue)) {
  ------------------
  |  Branch (1148:13): [True: 196, False: 678]
  ------------------
 1149|    196|                *t = -1;
 1150|    196|                return 1;
 1151|    196|        }
 1152|       |
 1153|    678|        r = parse_tristate(rvalue, t);
 1154|    678|        if (r < 0)
  ------------------
  |  Branch (1154:13): [True: 288, False: 390]
  ------------------
 1155|    288|                return log_syntax_parse_error(unit, filename, line, r, lvalue, rvalue);
  ------------------
  |  |  372|    288|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    288|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    288|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    288|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1156|       |
 1157|    390|        return 1;
 1158|    678|}
config_parse_string:
 1170|  2.02k|                void *userdata) {
 1171|       |
 1172|  2.02k|        char **s = ASSERT_PTR(data);
  ------------------
  |  |   81|  2.02k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  2.02k|        ({                                 \
  |  |  |  |   85|  2.02k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  2.02k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  2.02k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  2.02k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  2.02k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  2.02k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  2.02k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.02k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  2.02k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  2.02k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  2.02k|                var;                       \
  |  |  |  |   88|  2.02k|        })
  |  |  ------------------
  ------------------
 1173|  2.02k|        int r;
 1174|       |
 1175|  2.02k|        assert(filename);
  ------------------
  |  |   72|  2.02k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.02k|        do {                                                            \
  |  |  |  |   59|  2.02k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.02k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.02k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.02k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.02k|        } while (false)
  |  |  ------------------
  ------------------
 1176|  2.02k|        assert(lvalue);
  ------------------
  |  |   72|  2.02k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.02k|        do {                                                            \
  |  |  |  |   59|  2.02k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.02k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.02k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.02k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.02k|        } while (false)
  |  |  ------------------
  ------------------
 1177|  2.02k|        assert(rvalue);
  ------------------
  |  |   72|  2.02k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.02k|        do {                                                            \
  |  |  |  |   59|  2.02k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.02k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.02k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.02k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.02k|        } while (false)
  |  |  ------------------
  ------------------
 1178|       |
 1179|  2.02k|        if (isempty(rvalue)) {
  ------------------
  |  Branch (1179:13): [True: 201, False: 1.82k]
  ------------------
 1180|    201|                *s = mfree(*s);
  ------------------
  |  |  404|    201|        ({                                      \
  |  |  405|    201|                free(memory);                   \
  |  |  406|    201|                (typeof(memory)) NULL;          \
  |  |  407|    201|        })
  ------------------
 1181|    201|                return 1;
 1182|    201|        }
 1183|       |
 1184|  1.82k|        if (FLAGS_SET(ltype, CONFIG_PARSE_STRING_SAFE) && !string_is_safe(rvalue)) {
  ------------------
  |  |  414|  3.65k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 1.62k, False: 198]
  |  |  ------------------
  ------------------
  |  Branch (1184:59): [True: 533, False: 1.09k]
  ------------------
 1185|    533|                _cleanup_free_ char *escaped = NULL;
  ------------------
  |  |   82|    533|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    533|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1186|       |
 1187|    533|                escaped = cescape(rvalue);
 1188|    533|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|    533|        ({                                                              \
  |  |  354|    533|                int _level = (level), _e = (error);                     \
  |  |  355|    533|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 533]
  |  |  ------------------
  |  |  356|    533|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    533|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    533|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    533|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    533|        })
  ------------------
 1189|    533|                           "Specified string contains unsafe characters, ignoring: %s", strna(escaped));
 1190|    533|                return 0;
 1191|    533|        }
 1192|       |
 1193|  1.29k|        if (FLAGS_SET(ltype, CONFIG_PARSE_STRING_ASCII) && !ascii_is_valid(rvalue)) {
  ------------------
  |  |  414|  2.58k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 1.29k]
  |  |  ------------------
  ------------------
  |  Branch (1193:60): [True: 0, False: 0]
  ------------------
 1194|      0|                _cleanup_free_ char *escaped = NULL;
  ------------------
  |  |   82|      0|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1195|       |
 1196|      0|                escaped = cescape(rvalue);
 1197|      0|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|      0|        ({                                                              \
  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|      0|        })
  ------------------
 1198|      0|                           "Specified string contains invalid ASCII characters, ignoring: %s", strna(escaped));
 1199|      0|                return 0;
 1200|      0|        }
 1201|       |
 1202|  1.29k|        r = free_and_strdup_warn(s, rvalue);
 1203|  1.29k|        if (r < 0)
  ------------------
  |  Branch (1203:13): [True: 0, False: 1.29k]
  ------------------
 1204|      0|                return r;
 1205|       |
 1206|  1.29k|        return 1;
 1207|  1.29k|}
config_parse_warn_compat:
 1379|    194|                void *userdata) {
 1380|       |
 1381|    194|        Disabled reason = ltype;
 1382|       |
 1383|    194|        switch (reason) {
  ------------------
  |  Branch (1383:17): [True: 0, False: 194]
  ------------------
 1384|       |
 1385|      0|        case DISABLED_CONFIGURATION:
  ------------------
  |  Branch (1385:9): [True: 0, False: 194]
  ------------------
 1386|      0|                log_syntax(unit, LOG_DEBUG, filename, line, 0,
  ------------------
  |  |  353|      0|        ({                                                              \
  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|      0|        })
  ------------------
 1387|      0|                           "Support for option %s= has been disabled at compile time and it is ignored", lvalue);
 1388|      0|                break;
 1389|       |
 1390|    194|        case DISABLED_LEGACY:
  ------------------
  |  Branch (1390:9): [True: 194, False: 0]
  ------------------
 1391|    194|                log_syntax(unit, LOG_INFO, filename, line, 0,
  ------------------
  |  |  353|    194|        ({                                                              \
  |  |  354|    194|                int _level = (level), _e = (error);                     \
  |  |  355|    194|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 194]
  |  |  ------------------
  |  |  356|    194|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    194|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    194|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    194|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    194|        })
  ------------------
 1392|    194|                           "Support for option %s= has been removed and it is ignored", lvalue);
 1393|    194|                break;
 1394|       |
 1395|      0|        case DISABLED_EXPERIMENTAL:
  ------------------
  |  Branch (1395:9): [True: 0, False: 194]
  ------------------
 1396|      0|                log_syntax(unit, LOG_INFO, filename, line, 0,
  ------------------
  |  |  353|      0|        ({                                                              \
  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|      0|        })
  ------------------
 1397|      0|                           "Support for option %s= has not yet been enabled and it is ignored", lvalue);
 1398|      0|                break;
 1399|    194|        }
 1400|       |
 1401|    194|        return 0;
 1402|    194|}
config_parse_ifname:
 1532|  28.5k|                void *userdata) {
 1533|       |
 1534|  28.5k|        char **s = ASSERT_PTR(data);
  ------------------
  |  |   81|  28.5k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  28.5k|        ({                                 \
  |  |  |  |   85|  28.5k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  28.5k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  28.5k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  28.5k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  28.5k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  28.5k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  28.5k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 28.5k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  28.5k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  28.5k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  28.5k|                var;                       \
  |  |  |  |   88|  28.5k|        })
  |  |  ------------------
  ------------------
 1535|  28.5k|        int r;
 1536|       |
 1537|  28.5k|        assert(filename);
  ------------------
  |  |   72|  28.5k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  28.5k|        do {                                                            \
  |  |  |  |   59|  28.5k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  28.5k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 28.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  28.5k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  28.5k|        } while (false)
  |  |  ------------------
  ------------------
 1538|  28.5k|        assert(lvalue);
  ------------------
  |  |   72|  28.5k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  28.5k|        do {                                                            \
  |  |  |  |   59|  28.5k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  28.5k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 28.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  28.5k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  28.5k|        } while (false)
  |  |  ------------------
  ------------------
 1539|  28.5k|        assert(rvalue);
  ------------------
  |  |   72|  28.5k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  28.5k|        do {                                                            \
  |  |  |  |   59|  28.5k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  28.5k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 28.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  28.5k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  28.5k|        } while (false)
  |  |  ------------------
  ------------------
 1540|       |
 1541|  28.5k|        if (isempty(rvalue)) {
  ------------------
  |  Branch (1541:13): [True: 766, False: 27.7k]
  ------------------
 1542|    766|                *s = mfree(*s);
  ------------------
  |  |  404|    766|        ({                                      \
  |  |  405|    766|                free(memory);                   \
  |  |  406|    766|                (typeof(memory)) NULL;          \
  |  |  407|    766|        })
  ------------------
 1543|    766|                return 1;
 1544|    766|        }
 1545|       |
 1546|  27.7k|        if (!ifname_valid(rvalue)) {
  ------------------
  |  Branch (1546:13): [True: 3.19k, False: 24.5k]
  ------------------
 1547|  3.19k|                log_syntax(unit, LOG_WARNING, filename, line, 0, "Interface name is not valid or too long, ignoring assignment: %s", rvalue);
  ------------------
  |  |  353|  3.19k|        ({                                                              \
  |  |  354|  3.19k|                int _level = (level), _e = (error);                     \
  |  |  355|  3.19k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 3.19k]
  |  |  ------------------
  |  |  356|  3.19k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  3.19k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  3.19k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  3.19k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  3.19k|        })
  ------------------
 1548|  3.19k|                return 0;
 1549|  3.19k|        }
 1550|       |
 1551|  24.5k|        r = free_and_strdup_warn(s, rvalue);
 1552|  24.5k|        if (r < 0)
  ------------------
  |  Branch (1552:13): [True: 0, False: 24.5k]
  ------------------
 1553|      0|                return r;
 1554|       |
 1555|  24.5k|        return 1;
 1556|  24.5k|}
config_parse_ip_port:
 1621|    944|                void *userdata) {
 1622|       |
 1623|    944|        uint16_t *s = ASSERT_PTR(data);
  ------------------
  |  |   81|    944|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    944|        ({                                 \
  |  |  |  |   85|    944|                typeof(expr) var = (expr); \
  |  |  |  |   86|    944|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    944|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    944|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    944|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    944|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    944|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 944]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    944|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    944|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    944|                var;                       \
  |  |  |  |   88|    944|        })
  |  |  ------------------
  ------------------
 1624|    944|        uint16_t port;
 1625|    944|        int r;
 1626|       |
 1627|    944|        assert(filename);
  ------------------
  |  |   72|    944|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    944|        do {                                                            \
  |  |  |  |   59|    944|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    944|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 944]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    944|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    944|        } while (false)
  |  |  ------------------
  ------------------
 1628|    944|        assert(lvalue);
  ------------------
  |  |   72|    944|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    944|        do {                                                            \
  |  |  |  |   59|    944|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    944|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 944]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    944|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    944|        } while (false)
  |  |  ------------------
  ------------------
 1629|    944|        assert(rvalue);
  ------------------
  |  |   72|    944|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    944|        do {                                                            \
  |  |  |  |   59|    944|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    944|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 944]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    944|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    944|        } while (false)
  |  |  ------------------
  ------------------
 1630|       |
 1631|    944|        if (isempty(rvalue)) {
  ------------------
  |  Branch (1631:13): [True: 323, False: 621]
  ------------------
 1632|    323|                *s = 0;
 1633|    323|                return 1;
 1634|    323|        }
 1635|       |
 1636|    621|        r = parse_ip_port(rvalue, &port);
 1637|    621|        if (r < 0)
  ------------------
  |  Branch (1637:13): [True: 398, False: 223]
  ------------------
 1638|    398|                return log_syntax_parse_error(unit, filename, line, r, lvalue, rvalue);
  ------------------
  |  |  372|    398|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    398|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    398|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    398|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1639|       |
 1640|    223|        *s = port;
 1641|    223|        return 1;
 1642|    621|}
config_parse_mtu:
 1654|  2.75k|                void *userdata) {
 1655|       |
 1656|  2.75k|        uint32_t *mtu = ASSERT_PTR(data);
  ------------------
  |  |   81|  2.75k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  2.75k|        ({                                 \
  |  |  |  |   85|  2.75k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  2.75k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  2.75k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  2.75k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  2.75k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  2.75k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  2.75k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.75k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  2.75k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  2.75k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  2.75k|                var;                       \
  |  |  |  |   88|  2.75k|        })
  |  |  ------------------
  ------------------
 1657|  2.75k|        int r;
 1658|       |
 1659|  2.75k|        assert(rvalue);
  ------------------
  |  |   72|  2.75k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.75k|        do {                                                            \
  |  |  |  |   59|  2.75k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.75k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.75k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.75k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.75k|        } while (false)
  |  |  ------------------
  ------------------
 1660|       |
 1661|  2.75k|        r = parse_mtu(ltype, rvalue, mtu);
 1662|  2.75k|        if (r == -ERANGE) {
  ------------------
  |  Branch (1662:13): [True: 1.38k, False: 1.36k]
  ------------------
 1663|  1.38k|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|  1.38k|        ({                                                              \
  |  |  354|  1.38k|                int _level = (level), _e = (error);                     \
  |  |  355|  1.38k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 1.38k]
  |  |  ------------------
  |  |  356|  1.38k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (356:125): [True: 0, False: 0]
  |  |  ------------------
  |  |  357|  1.38k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  1.38k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  1.38k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  1.38k|        })
  ------------------
 1664|  1.38k|                           "Maximum transfer unit (MTU) value out of range. Permitted range is %" PRIu32 "…%" PRIu32 ", ignoring: %s",
 1665|  1.38k|                           (uint32_t) (ltype == AF_INET6 ? IPV6_MIN_MTU : IPV4_MIN_MTU), (uint32_t) UINT32_MAX,
 1666|  1.38k|                           rvalue);
 1667|  1.38k|                return 0;
 1668|  1.38k|        }
 1669|  1.36k|        if (r < 0)
  ------------------
  |  Branch (1669:13): [True: 904, False: 460]
  ------------------
 1670|    904|                return log_syntax_parse_error(unit, filename, line, r, lvalue, rvalue);
  ------------------
  |  |  372|    904|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    904|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    904|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    904|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1671|       |
 1672|    460|        return 1;
 1673|  1.36k|}
config_parse_vlanprotocol:
 1749|    796|                void *userdata) {
 1750|       |
 1751|    796|        int *vlan_protocol = data;
 1752|       |
 1753|    796|        assert(filename);
  ------------------
  |  |   72|    796|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    796|        do {                                                            \
  |  |  |  |   59|    796|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    796|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 796]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    796|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    796|        } while (false)
  |  |  ------------------
  ------------------
 1754|    796|        assert(lvalue);
  ------------------
  |  |   72|    796|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    796|        do {                                                            \
  |  |  |  |   59|    796|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    796|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 796]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    796|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    796|        } while (false)
  |  |  ------------------
  ------------------
 1755|       |
 1756|    796|        if (isempty(rvalue)) {
  ------------------
  |  Branch (1756:13): [True: 194, False: 602]
  ------------------
 1757|    194|                *vlan_protocol = -1;
 1758|    194|                return 1;
 1759|    194|        }
 1760|       |
 1761|    602|        if (STR_IN_SET(rvalue, "802.1ad", "802.1AD"))
  ------------------
  |  |  163|    602|#define STR_IN_SET(x, ...) strv_contains(STRV_MAKE(__VA_ARGS__), x)
  |  |  ------------------
  |  |  |  |   16|    602|#define strv_contains(l, s) (!!strv_find((l), (s)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (16:29): [True: 196, False: 406]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1762|    196|                *vlan_protocol = ETH_P_8021AD;
 1763|    406|        else if (STR_IN_SET(rvalue, "802.1q", "802.1Q"))
  ------------------
  |  |  163|    406|#define STR_IN_SET(x, ...) strv_contains(STRV_MAKE(__VA_ARGS__), x)
  |  |  ------------------
  |  |  |  |   16|    406|#define strv_contains(l, s) (!!strv_find((l), (s)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (16:29): [True: 194, False: 212]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1764|    194|                *vlan_protocol = ETH_P_8021Q;
 1765|    212|        else
 1766|    212|                return log_syntax_parse_error(unit, filename, line, 0, lvalue, rvalue);
  ------------------
  |  |  372|    212|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    212|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    212|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    212|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1767|       |
 1768|    390|        return 1;
 1769|    602|}
config_parse_hw_addr:
 1781|  1.42k|                void *userdata) {
 1782|       |
 1783|  1.42k|        struct hw_addr_data *hwaddr = ASSERT_PTR(data);
  ------------------
  |  |   81|  1.42k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  1.42k|        ({                                 \
  |  |  |  |   85|  1.42k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  1.42k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  1.42k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  1.42k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  1.42k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  1.42k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  1.42k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.42k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  1.42k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  1.42k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  1.42k|                var;                       \
  |  |  |  |   88|  1.42k|        })
  |  |  ------------------
  ------------------
 1784|  1.42k|        int r;
 1785|       |
 1786|  1.42k|        assert(filename);
  ------------------
  |  |   72|  1.42k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.42k|        do {                                                            \
  |  |  |  |   59|  1.42k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.42k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.42k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.42k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.42k|        } while (false)
  |  |  ------------------
  ------------------
 1787|  1.42k|        assert(lvalue);
  ------------------
  |  |   72|  1.42k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.42k|        do {                                                            \
  |  |  |  |   59|  1.42k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.42k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.42k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.42k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.42k|        } while (false)
  |  |  ------------------
  ------------------
 1788|  1.42k|        assert(rvalue);
  ------------------
  |  |   72|  1.42k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.42k|        do {                                                            \
  |  |  |  |   59|  1.42k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.42k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.42k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.42k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.42k|        } while (false)
  |  |  ------------------
  ------------------
 1789|       |
 1790|  1.42k|        if (isempty(rvalue)) {
  ------------------
  |  Branch (1790:13): [True: 196, False: 1.22k]
  ------------------
 1791|    196|                *hwaddr = HW_ADDR_NULL;
  ------------------
  |  |   50|    196|#define HW_ADDR_NULL ((const struct hw_addr_data){})
  ------------------
 1792|    196|                return 1;
 1793|    196|        }
 1794|       |
 1795|  1.22k|        r = parse_hw_addr_full(rvalue, ltype, hwaddr);
 1796|  1.22k|        if (r < 0)
  ------------------
  |  Branch (1796:13): [True: 971, False: 255]
  ------------------
 1797|    971|                return log_syntax_parse_error(unit, filename, line, r, lvalue, rvalue);
  ------------------
  |  |  372|    971|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    971|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    971|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    971|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1798|       |
 1799|    255|        return 1;
 1800|  1.22k|}
config_parse_ether_addrs:
 1901|    769|                void *userdata) {
 1902|       |
 1903|    769|        Set **hwaddrs = ASSERT_PTR(data);
  ------------------
  |  |   81|    769|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    769|        ({                                 \
  |  |  |  |   85|    769|                typeof(expr) var = (expr); \
  |  |  |  |   86|    769|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    769|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    769|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    769|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    769|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    769|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 769]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    769|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    769|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    769|                var;                       \
  |  |  |  |   88|    769|        })
  |  |  ------------------
  ------------------
 1904|    769|        int r;
 1905|       |
 1906|    769|        assert(filename);
  ------------------
  |  |   72|    769|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    769|        do {                                                            \
  |  |  |  |   59|    769|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    769|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 769]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    769|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    769|        } while (false)
  |  |  ------------------
  ------------------
 1907|    769|        assert(lvalue);
  ------------------
  |  |   72|    769|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    769|        do {                                                            \
  |  |  |  |   59|    769|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    769|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 769]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    769|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    769|        } while (false)
  |  |  ------------------
  ------------------
 1908|    769|        assert(rvalue);
  ------------------
  |  |   72|    769|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    769|        do {                                                            \
  |  |  |  |   59|    769|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    769|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 769]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    769|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    769|        } while (false)
  |  |  ------------------
  ------------------
 1909|       |
 1910|    769|        if (isempty(rvalue)) {
  ------------------
  |  Branch (1910:13): [True: 325, False: 444]
  ------------------
 1911|       |                /* Empty assignment resets the list */
 1912|    325|                *hwaddrs = set_free(*hwaddrs);
 1913|    325|                return 1;
 1914|    325|        }
 1915|       |
 1916|  2.17k|        for (const char *p = rvalue;;) {
 1917|  2.17k|                _cleanup_free_ char *word = NULL;
  ------------------
  |  |   82|  2.17k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  2.17k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1918|  2.17k|                _cleanup_free_ struct ether_addr *n = NULL;
  ------------------
  |  |   82|  2.17k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  2.17k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1919|       |
 1920|  2.17k|                r = extract_first_word(&p, &word, NULL, 0);
 1921|  2.17k|                if (r < 0)
  ------------------
  |  Branch (1921:21): [True: 204, False: 1.96k]
  ------------------
 1922|    204|                        return log_syntax_parse_error(unit, filename, line, r, lvalue, rvalue);
  ------------------
  |  |  372|    204|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    204|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    204|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    204|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1923|  1.96k|                if (r == 0)
  ------------------
  |  Branch (1923:21): [True: 240, False: 1.72k]
  ------------------
 1924|    240|                        return 1;
 1925|       |
 1926|  1.72k|                n = new(struct ether_addr, 1);
  ------------------
  |  |   17|  1.72k|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
 1927|  1.72k|                if (!n)
  ------------------
  |  Branch (1927:21): [True: 0, False: 1.72k]
  ------------------
 1928|      0|                        return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1929|       |
 1930|  1.72k|                r = parse_ether_addr(word, n);
 1931|  1.72k|                if (r < 0) {
  ------------------
  |  Branch (1931:21): [True: 1.35k, False: 375]
  ------------------
 1932|  1.35k|                        log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|  1.35k|        ({                                                              \
  |  |  354|  1.35k|                int _level = (level), _e = (error);                     \
  |  |  355|  1.35k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 1.35k]
  |  |  ------------------
  |  |  356|  1.35k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  1.35k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  1.35k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  1.35k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  1.35k|        })
  ------------------
 1933|  1.35k|                                   "Not a valid MAC address, ignoring: %s", word);
 1934|  1.35k|                        continue;
 1935|  1.35k|                }
 1936|       |
 1937|    375|                r = set_ensure_consume(hwaddrs, &ether_addr_hash_ops_free, TAKE_PTR(n));
  ------------------
  |  |  388|    375|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|    375|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|    375|        ({                                                       \
  |  |  |  |  |  |  381|    375|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|    375|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|    375|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|    375|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|    375|                _var_;                                           \
  |  |  |  |  |  |  386|    375|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1938|    375|                if (r < 0)
  ------------------
  |  Branch (1938:21): [True: 0, False: 375]
  ------------------
 1939|      0|                        return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1940|    375|        }
 1941|    444|}
config_parse_unsigned_bounded:
 2069|  11.9k|                unsigned *ret) {
 2070|       |
 2071|  11.9k|        int r;
 2072|       |
 2073|  11.9k|        assert(filename);
  ------------------
  |  |   72|  11.9k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  11.9k|        do {                                                            \
  |  |  |  |   59|  11.9k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  11.9k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 11.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  11.9k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  11.9k|        } while (false)
  |  |  ------------------
  ------------------
 2074|  11.9k|        assert(lvalue);
  ------------------
  |  |   72|  11.9k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  11.9k|        do {                                                            \
  |  |  |  |   59|  11.9k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  11.9k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 11.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  11.9k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  11.9k|        } while (false)
  |  |  ------------------
  ------------------
 2075|  11.9k|        assert(rvalue);
  ------------------
  |  |   72|  11.9k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  11.9k|        do {                                                            \
  |  |  |  |   59|  11.9k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  11.9k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 11.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  11.9k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  11.9k|        } while (false)
  |  |  ------------------
  ------------------
 2076|  11.9k|        assert(ret);
  ------------------
  |  |   72|  11.9k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  11.9k|        do {                                                            \
  |  |  |  |   59|  11.9k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  11.9k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 11.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  11.9k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  11.9k|        } while (false)
  |  |  ------------------
  ------------------
 2077|       |
 2078|  11.9k|        r = safe_atou_bounded(rvalue, min, max, ret);
 2079|  11.9k|        if (r == -ERANGE) {
  ------------------
  |  Branch (2079:13): [True: 669, False: 11.2k]
  ------------------
 2080|    669|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    669|        ({                                                              \
  |  |  354|    669|                int _level = (level), _e = (error);                     \
  |  |  355|    669|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 669]
  |  |  ------------------
  |  |  356|    669|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (356:125): [True: 0, False: 0]
  |  |  ------------------
  |  |  357|    669|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    669|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    669|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    669|        })
  ------------------
 2081|    669|                           "Invalid '%s=%s', allowed range is %u..%u%s.",
 2082|    669|                           lvalue, rvalue, min, max, ignoring ? ", ignoring" : "");
 2083|    669|                return ignoring ? 0 : r;
  ------------------
  |  Branch (2083:24): [True: 669, False: 0]
  ------------------
 2084|    669|        }
 2085|  11.2k|        if (r < 0)
  ------------------
  |  Branch (2085:13): [True: 3.01k, False: 8.23k]
  ------------------
 2086|  3.01k|                return log_syntax_parse_error_full(unit, filename, line, r, /* critical = */ !ignoring, lvalue, rvalue);
  ------------------
  |  |  369|  3.01k|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  472|  3.01k|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|  3.01k|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2087|       |
 2088|  8.23k|        return 1;  /* Return 1 if something was set */
 2089|  11.2k|}
config_parse_ip_protocol:
 2174|  2.46k|                void *userdata) {
 2175|       |
 2176|  2.46k|        uint8_t *proto = ASSERT_PTR(data);
  ------------------
  |  |   81|  2.46k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  2.46k|        ({                                 \
  |  |  |  |   85|  2.46k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  2.46k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  2.46k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  2.46k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  2.46k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  2.46k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  2.46k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.46k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  2.46k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  2.46k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  2.46k|                var;                       \
  |  |  |  |   88|  2.46k|        })
  |  |  ------------------
  ------------------
 2177|  2.46k|        int r;
 2178|       |
 2179|  2.46k|        r = isempty(rvalue) ? 0 : parse_ip_protocol_full(rvalue, /* relaxed= */ ltype);
  ------------------
  |  Branch (2179:13): [True: 198, False: 2.27k]
  ------------------
 2180|  2.46k|        if (r < 0)
  ------------------
  |  Branch (2180:13): [True: 1.53k, False: 936]
  ------------------
 2181|  1.53k|                return log_syntax_parse_error(unit, filename, line, r, lvalue, rvalue);
  ------------------
  |  |  372|  1.53k|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|  1.53k|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|  1.53k|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|  1.53k|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2182|       |
 2183|    936|        if (r > UINT8_MAX) {
  ------------------
  |  Branch (2183:13): [True: 311, False: 625]
  ------------------
 2184|       |                /* linux/fib_rules.h and linux/fou.h define the netlink field as one byte, so we need to
 2185|       |                 * reject protocols numbers that don't fit in one byte. */
 2186|    311|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    311|        ({                                                              \
  |  |  354|    311|                int _level = (level), _e = (error);                     \
  |  |  355|    311|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 311]
  |  |  ------------------
  |  |  356|    311|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    311|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    311|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    311|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    311|        })
  ------------------
 2187|    311|                           "Invalid '%s=%s', allowed range is 0..255, ignoring.",
 2188|    311|                           lvalue, rvalue);
 2189|    311|                return 0;
 2190|    311|        }
 2191|       |
 2192|    625|        *proto = r;
 2193|    625|        return 1; /* done. */
 2194|    936|}
conf-parser.c:parse_line:
  184|  1.77M|                void *userdata) {
  185|       |
  186|  1.77M|        char *e;
  187|       |
  188|  1.77M|        assert(filename);
  ------------------
  |  |   72|  1.77M|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.77M|        do {                                                            \
  |  |  |  |   59|  1.77M|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.77M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.77M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.77M|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.77M|        } while (false)
  |  |  ------------------
  ------------------
  189|  1.77M|        assert(line > 0);
  ------------------
  |  |   72|  1.77M|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.77M|        do {                                                            \
  |  |  |  |   59|  1.77M|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.77M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.77M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.77M|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.77M|        } while (false)
  |  |  ------------------
  ------------------
  190|  1.77M|        assert(lookup);
  ------------------
  |  |   72|  1.77M|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.77M|        do {                                                            \
  |  |  |  |   59|  1.77M|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.77M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.77M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.77M|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.77M|        } while (false)
  |  |  ------------------
  ------------------
  191|  1.77M|        assert(l);
  ------------------
  |  |   72|  1.77M|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.77M|        do {                                                            \
  |  |  |  |   59|  1.77M|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.77M|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.77M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.77M|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.77M|        } while (false)
  |  |  ------------------
  ------------------
  192|       |
  193|  1.77M|        l = strstrip(l);
  194|  1.77M|        if (isempty(l))
  ------------------
  |  Branch (194:13): [True: 939k, False: 840k]
  ------------------
  195|   939k|                return 0;
  196|       |
  197|   840k|        if (l[0] == '\n')
  ------------------
  |  Branch (197:13): [True: 0, False: 840k]
  ------------------
  198|      0|                return 0;
  199|       |
  200|   840k|        if (!utf8_is_valid(l))
  ------------------
  |  Branch (200:13): [True: 235, False: 840k]
  ------------------
  201|    235|                return log_syntax_invalid_utf8(unit, LOG_WARNING, filename, line, l);
  ------------------
  |  |  361|    235|        ({                                                              \
  |  |  362|    235|                int _level = (level);                                   \
  |  |  363|    235|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (363:17): [True: 0, False: 235]
  |  |  ------------------
  |  |  364|    235|                        ? log_syntax_invalid_utf8_internal(unit, _level, config_file, config_line, PROJECT_FILE, __LINE__, __func__, rvalue) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  365|    235|                        : -EINVAL;                                      \
  |  |  366|    235|        })
  ------------------
  202|       |
  203|   840k|        if (l[0] == '[') {
  ------------------
  |  Branch (203:13): [True: 220k, False: 620k]
  ------------------
  204|   220k|                _cleanup_free_ char *n = NULL;
  ------------------
  |  |   82|   220k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|   220k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  205|   220k|                size_t k;
  206|       |
  207|   220k|                k = strlen(l);
  208|   220k|                assert(k > 0);
  ------------------
  |  |   72|   220k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   220k|        do {                                                            \
  |  |  |  |   59|   220k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   220k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 220k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   220k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   220k|        } while (false)
  |  |  ------------------
  ------------------
  209|       |
  210|   220k|                if (l[k-1] != ']')
  ------------------
  |  Branch (210:21): [True: 32, False: 220k]
  ------------------
  211|     32|                        return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EBADMSG), "Invalid section header '%s'", l);
  ------------------
  |  |  353|     32|        ({                                                              \
  |  |  354|     32|                int _level = (level), _e = (error);                     \
  |  |  355|     32|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 32]
  |  |  ------------------
  |  |  356|     32|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|     32|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|     32|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     32|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|     32|        })
  ------------------
  212|       |
  213|   220k|                n = strndup(l+1, k-2);
  214|   220k|                if (!n)
  ------------------
  |  Branch (214:21): [True: 0, False: 220k]
  ------------------
  215|      0|                        return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  216|       |
  217|   220k|                if (!string_is_safe(n))
  ------------------
  |  Branch (217:21): [True: 10, False: 220k]
  ------------------
  218|     10|                        return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EBADMSG), "Bad characters in section header '%s'", l);
  ------------------
  |  |  353|     10|        ({                                                              \
  |  |  354|     10|                int _level = (level), _e = (error);                     \
  |  |  355|     10|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 10]
  |  |  ------------------
  |  |  356|     10|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|     10|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|     10|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     10|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|     10|        })
  ------------------
  219|       |
  220|   220k|                if (sections && !nulstr_contains(sections, n)) {
  ------------------
  |  Branch (220:21): [True: 220k, False: 0]
  |  Branch (220:33): [True: 102k, False: 118k]
  ------------------
  221|   102k|                        bool ignore;
  222|       |
  223|   102k|                        ignore = (flags & CONFIG_PARSE_RELAXED) || startswith(n, "X-");
  ------------------
  |  Branch (223:34): [True: 0, False: 102k]
  |  Branch (223:68): [True: 331, False: 101k]
  ------------------
  224|       |
  225|   102k|                        if (!ignore)
  ------------------
  |  Branch (225:29): [True: 101k, False: 331]
  ------------------
  226|   101k|                                NULSTR_FOREACH(t, sections)
  ------------------
  |  |    9|  1.77M|        for (typeof(*(l)) *(i) = (l); (i) && *(i); (i) = strchr((i), 0)+1)
  |  |  ------------------
  |  |  |  Branch (9:39): [True: 1.77M, False: 0]
  |  |  |  Branch (9:46): [True: 1.76M, False: 9.88k]
  |  |  ------------------
  ------------------
  227|  1.76M|                                        if (streq_ptr(n, startswith(t, "-"))) { /* Ignore sections prefixed with "-" in valid section list */
  ------------------
  |  Branch (227:45): [True: 91.8k, False: 1.67M]
  ------------------
  228|  91.8k|                                                ignore = true;
  229|  91.8k|                                                break;
  230|  91.8k|                                        }
  231|       |
  232|   102k|                        if (!ignore)
  ------------------
  |  Branch (232:29): [True: 9.88k, False: 92.1k]
  ------------------
  233|  9.88k|                                log_syntax(unit, LOG_WARNING, filename, line, 0, "Unknown section '%s'. Ignoring.", n);
  ------------------
  |  |  353|  9.88k|        ({                                                              \
  |  |  354|  9.88k|                int _level = (level), _e = (error);                     \
  |  |  355|  9.88k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 9.88k]
  |  |  ------------------
  |  |  356|  9.88k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  9.88k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  9.88k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  9.88k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  9.88k|        })
  ------------------
  234|       |
  235|   102k|                        *section = mfree(*section);
  ------------------
  |  |  404|   102k|        ({                                      \
  |  |  405|   102k|                free(memory);                   \
  |  |  406|   102k|                (typeof(memory)) NULL;          \
  |  |  407|   102k|        })
  ------------------
  236|   102k|                        *section_line = 0;
  237|   102k|                        *section_ignored = true;
  238|   118k|                } else {
  239|   118k|                        free_and_replace(*section, n);
  ------------------
  |  |   49|   118k|        free_and_replace_full(a, b, free)
  |  |  ------------------
  |  |  |  |   10|   118k|        ({                                      \
  |  |  |  |   11|   118k|                typeof(a)* _a = &(a);           \
  |  |  |  |   12|   118k|                typeof(b)* _b = &(b);           \
  |  |  |  |   13|   118k|                free_func(*_a);                 \
  |  |  |  |   14|   118k|                *_a = *_b;                      \
  |  |  |  |   15|   118k|                *_b = NULL;                     \
  |  |  |  |   16|   118k|                0;                              \
  |  |  |  |   17|   118k|        })
  |  |  ------------------
  ------------------
  240|   118k|                        *section_line = line;
  241|   118k|                        *section_ignored = false;
  242|   118k|                }
  243|       |
  244|   220k|                return 0;
  245|   220k|        }
  246|       |
  247|   620k|        if (sections && !*section) {
  ------------------
  |  Branch (247:13): [True: 620k, False: 0]
  |  Branch (247:25): [True: 285k, False: 335k]
  ------------------
  248|   285k|                if (!(flags & CONFIG_PARSE_RELAXED) && !*section_ignored)
  ------------------
  |  Branch (248:21): [True: 285k, False: 0]
  |  Branch (248:56): [True: 1.27k, False: 283k]
  ------------------
  249|  1.27k|                        log_syntax(unit, LOG_WARNING, filename, line, 0, "Assignment outside of section. Ignoring.");
  ------------------
  |  |  353|  1.27k|        ({                                                              \
  |  |  354|  1.27k|                int _level = (level), _e = (error);                     \
  |  |  355|  1.27k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 1.27k]
  |  |  ------------------
  |  |  356|  1.27k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  1.27k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  1.27k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  1.27k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  1.27k|        })
  ------------------
  250|       |
  251|   285k|                return 0;
  252|   285k|        }
  253|       |
  254|   335k|        e = strchr(l, '=');
  255|   335k|        if (!e)
  ------------------
  |  Branch (255:13): [True: 36.6k, False: 298k]
  ------------------
  256|  36.6k|                return log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|  36.6k|        ({                                                              \
  |  |  354|  36.6k|                int _level = (level), _e = (error);                     \
  |  |  355|  36.6k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 36.6k]
  |  |  ------------------
  |  |  356|  36.6k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  36.6k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  36.6k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  36.6k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  36.6k|        })
  ------------------
  257|   335k|                                  "Missing '=', ignoring line.");
  258|   298k|        if (e == l)
  ------------------
  |  Branch (258:13): [True: 2.20k, False: 296k]
  ------------------
  259|  2.20k|                return log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|  2.20k|        ({                                                              \
  |  |  354|  2.20k|                int _level = (level), _e = (error);                     \
  |  |  355|  2.20k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 2.20k]
  |  |  ------------------
  |  |  356|  2.20k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|  2.20k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  2.20k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  2.20k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  2.20k|        })
  ------------------
  260|   298k|                                  "Missing key name before '=', ignoring line.");
  261|       |
  262|   296k|        *e = 0;
  263|   296k|        e++;
  264|       |
  265|   296k|        return next_assignment(unit,
  266|   296k|                               filename,
  267|   296k|                               line,
  268|   296k|                               lookup,
  269|   296k|                               table,
  270|   296k|                               *section,
  271|   296k|                               *section_line,
  272|   296k|                               strstrip(l),
  273|   296k|                               strstrip(e),
  274|   296k|                               flags,
  275|   296k|                               userdata);
  276|   298k|}
conf-parser.c:next_assignment:
  135|   296k|                void *userdata) {
  136|       |
  137|   296k|        ConfigParserCallback func = NULL;
  138|   296k|        int ltype = 0;
  139|   296k|        void *data = NULL;
  140|   296k|        int r;
  141|       |
  142|   296k|        assert(filename);
  ------------------
  |  |   72|   296k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   296k|        do {                                                            \
  |  |  |  |   59|   296k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   296k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 296k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   296k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   296k|        } while (false)
  |  |  ------------------
  ------------------
  143|   296k|        assert(line > 0);
  ------------------
  |  |   72|   296k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   296k|        do {                                                            \
  |  |  |  |   59|   296k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   296k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 296k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   296k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   296k|        } while (false)
  |  |  ------------------
  ------------------
  144|   296k|        assert(lookup);
  ------------------
  |  |   72|   296k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   296k|        do {                                                            \
  |  |  |  |   59|   296k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   296k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 296k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   296k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   296k|        } while (false)
  |  |  ------------------
  ------------------
  145|   296k|        assert(lvalue);
  ------------------
  |  |   72|   296k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   296k|        do {                                                            \
  |  |  |  |   59|   296k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   296k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 296k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   296k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   296k|        } while (false)
  |  |  ------------------
  ------------------
  146|   296k|        assert(rvalue);
  ------------------
  |  |   72|   296k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|   296k|        do {                                                            \
  |  |  |  |   59|   296k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|   296k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 296k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|   296k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|   296k|        } while (false)
  |  |  ------------------
  ------------------
  147|       |
  148|   296k|        r = lookup(table, section, lvalue, &func, &ltype, &data, userdata);
  149|   296k|        if (r < 0)
  ------------------
  |  Branch (149:13): [True: 0, False: 296k]
  ------------------
  150|      0|                return r;
  151|   296k|        if (r > 0) {
  ------------------
  |  Branch (151:13): [True: 264k, False: 32.1k]
  ------------------
  152|   264k|                if (!func)
  ------------------
  |  Branch (152:21): [True: 0, False: 264k]
  ------------------
  153|      0|                        return 0;
  154|       |
  155|   264k|                return func(unit, filename, line, section, section_line,
  156|   264k|                            lvalue, ltype, rvalue, data, userdata);
  157|   264k|        }
  158|       |
  159|       |        /* Warn about unknown non-extension fields. */
  160|  32.1k|        if (!(flags & CONFIG_PARSE_RELAXED) && !startswith(lvalue, "X-"))
  ------------------
  |  Branch (160:13): [True: 32.1k, False: 0]
  |  Branch (160:48): [True: 31.9k, False: 214]
  ------------------
  161|  31.9k|                log_syntax(unit, LOG_WARNING, filename, line, 0,
  ------------------
  |  |  353|  31.9k|        ({                                                              \
  |  |  354|  31.9k|                int _level = (level), _e = (error);                     \
  |  |  355|  31.9k|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 31.9k]
  |  |  ------------------
  |  |  356|  31.9k|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (356:125): [True: 0, False: 0]
  |  |  |  Branch (356:125): [True: 0, False: 0]
  |  |  ------------------
  |  |  357|  31.9k|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|  31.9k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  31.9k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|  31.9k|        })
  ------------------
  162|  32.1k|                           "Unknown key '%s'%s%s%s, ignoring.",
  163|  32.1k|                           lvalue,
  164|  32.1k|                           section ? " in section [" : "",
  165|  32.1k|                           strempty(section),
  166|  32.1k|                           section ? "]" : "");
  167|       |
  168|  32.1k|        return 0;
  169|   296k|}
conf-parser.c:config_parse_many_files:
  491|  23.0k|                Hashmap **ret_stats_by_path) {
  492|       |
  493|  23.0k|        _cleanup_hashmap_free_ Hashmap *stats_by_path = NULL;
  ------------------
  |  |  367|  23.0k|#define _cleanup_hashmap_free_ _cleanup_(hashmap_freep)
  |  |  ------------------
  |  |  |  |   78|  23.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  494|  23.0k|        _cleanup_ordered_hashmap_free_ OrderedHashmap *dropins = NULL;
  ------------------
  |  |  368|  23.0k|#define _cleanup_ordered_hashmap_free_ _cleanup_(ordered_hashmap_freep)
  |  |  ------------------
  |  |  |  |   78|  23.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  495|  23.0k|        _cleanup_set_free_ Set *inodes = NULL;
  ------------------
  |  |  119|  23.0k|#define _cleanup_set_free_ _cleanup_(set_freep)
  |  |  ------------------
  |  |  |  |   78|  23.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  496|  23.0k|        struct stat st;
  497|  23.0k|        int r, level = FLAGS_SET(flags, CONFIG_PARSE_WARN) ? LOG_WARNING : LOG_DEBUG;
  ------------------
  |  |  414|  23.0k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 23.0k, False: 0]
  |  |  ------------------
  ------------------
  498|       |
  499|  23.0k|        if (ret_stats_by_path) {
  ------------------
  |  Branch (499:13): [True: 9.98k, False: 13.0k]
  ------------------
  500|  9.98k|                stats_by_path = hashmap_new(&path_hash_ops_free_free);
  501|  9.98k|                if (!stats_by_path)
  ------------------
  |  Branch (501:21): [True: 0, False: 9.98k]
  ------------------
  502|      0|                        return log_oom_full(level);
  ------------------
  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  503|  9.98k|        }
  504|       |
  505|  23.0k|        STRV_FOREACH(fn, files) {
  ------------------
  |  |   10|  23.0k|        _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |    7|  23.0k|        for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (7:41): [True: 23.0k, False: 0]
  |  |  |  |  |  Branch (7:52): [True: 0, False: 23.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  506|      0|                _cleanup_fclose_ FILE *f = NULL;
  ------------------
  |  |   61|      0|#define _cleanup_fclose_ _cleanup_(fclosep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  507|      0|                _cleanup_free_ char *fname = NULL;
  ------------------
  |  |   82|      0|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  508|       |
  509|      0|                r = chase_and_fopen_unlocked(*fn, root, CHASE_AT_RESOLVE_IN_ROOT, "re", &fname, &f);
  510|      0|                if (r == -ENOENT)
  ------------------
  |  Branch (510:21): [True: 0, False: 0]
  ------------------
  511|      0|                        continue;
  512|      0|                if (r < 0)
  ------------------
  |  Branch (512:21): [True: 0, False: 0]
  ------------------
  513|      0|                        return log_full_errno(level, r, "Failed to open %s: %m", *fn);
  ------------------
  |  |  204|      0|        ({                                                              \
  |  |  205|      0|                int _error = (error);                                   \
  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  ------------------
  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  ------------------
  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  195|      0|        })
  |  |  ------------------
  |  |  208|      0|        })
  ------------------
  514|       |
  515|      0|                int fd = fileno(f);
  516|       |
  517|      0|                r = ordered_hashmap_ensure_put(&dropins, &config_file_hash_ops_fclose, *fn, f);
  518|      0|                if (r < 0) {
  ------------------
  |  Branch (518:21): [True: 0, False: 0]
  ------------------
  519|      0|                        assert(r == -ENOMEM);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  520|      0|                        return log_oom_full(level);
  ------------------
  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|      0|                }
  522|      0|                assert(r > 0);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  523|      0|                TAKE_PTR(f);
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  524|       |
  525|       |                /* Get inodes for all drop-ins. Later we'll verify if main config is a symlink to or is
  526|       |                 * symlinked as one of them. If so, we skip reading main config file directly. */
  527|       |
  528|      0|                _cleanup_free_ struct stat *st_dropin = new(struct stat, 1);
  ------------------
  |  |   82|      0|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
                              _cleanup_free_ struct stat *st_dropin = new(struct stat, 1);
  ------------------
  |  |   17|      0|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
  529|      0|                if (!st_dropin)
  ------------------
  |  Branch (529:21): [True: 0, False: 0]
  ------------------
  530|      0|                        return log_oom_full(level);
  ------------------
  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  531|       |
  532|      0|                if (fstat(fd, st_dropin) < 0)
  ------------------
  |  Branch (532:21): [True: 0, False: 0]
  ------------------
  533|      0|                        return log_full_errno(level, errno, "Failed to stat %s: %m", *fn);
  ------------------
  |  |  204|      0|        ({                                                              \
  |  |  205|      0|                int _error = (error);                                   \
  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  ------------------
  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  ------------------
  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  195|      0|        })
  |  |  ------------------
  |  |  208|      0|        })
  ------------------
  534|       |
  535|      0|                r = set_ensure_consume(&inodes, &inode_hash_ops, TAKE_PTR(st_dropin));
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  536|      0|                if (r < 0)
  ------------------
  |  Branch (536:21): [True: 0, False: 0]
  ------------------
  537|      0|                        return log_oom_full(level);
  ------------------
  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  538|      0|        }
  539|       |
  540|       |        /* First read the first found main config file. */
  541|  23.0k|        STRV_FOREACH(fn, conf_files) {
  ------------------
  |  |   10|  23.0k|        _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |    7|  23.0k|        for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (7:41): [True: 23.0k, False: 0]
  |  |  |  |  |  Branch (7:52): [True: 23.0k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  542|  23.0k|                _cleanup_fclose_ FILE *f = NULL;
  ------------------
  |  |   61|  23.0k|#define _cleanup_fclose_ _cleanup_(fclosep)
  |  |  ------------------
  |  |  |  |   78|  23.0k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  543|       |
  544|  23.0k|                r = chase_and_fopen_unlocked(*fn, root, CHASE_AT_RESOLVE_IN_ROOT, "re", NULL, &f);
  545|  23.0k|                if (r == -ENOENT)
  ------------------
  |  Branch (545:21): [True: 0, False: 23.0k]
  ------------------
  546|      0|                        continue;
  547|  23.0k|                if (r < 0)
  ------------------
  |  Branch (547:21): [True: 0, False: 23.0k]
  ------------------
  548|      0|                        return log_full_errno(level, r, "Failed to open %s: %m", *fn);
  ------------------
  |  |  204|      0|        ({                                                              \
  |  |  205|      0|                int _error = (error);                                   \
  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  ------------------
  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  ------------------
  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  195|      0|        })
  |  |  ------------------
  |  |  208|      0|        })
  ------------------
  549|       |
  550|  23.0k|                if (inodes) {
  ------------------
  |  Branch (550:21): [True: 0, False: 23.0k]
  ------------------
  551|      0|                        if (fstat(fileno(f), &st) < 0)
  ------------------
  |  Branch (551:29): [True: 0, False: 0]
  ------------------
  552|      0|                                return log_full_errno(level, errno, "Failed to stat %s: %m", *fn);
  ------------------
  |  |  204|      0|        ({                                                              \
  |  |  205|      0|                int _error = (error);                                   \
  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  ------------------
  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  ------------------
  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  195|      0|        })
  |  |  ------------------
  |  |  208|      0|        })
  ------------------
  553|       |
  554|      0|                        if (set_contains(inodes, &st)) {
  ------------------
  |  Branch (554:29): [True: 0, False: 0]
  ------------------
  555|      0|                                log_debug("%s: symlink to/symlinked as drop-in, will be read later.", *fn);
  ------------------
  |  |  220|      0|#define log_debug(...)     log_full(LOG_DEBUG,   __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
  556|      0|                                break;
  557|      0|                        }
  558|      0|                }
  559|       |
  560|  23.0k|                r = config_parse(/* unit= */ NULL, *fn, f, sections, lookup, table, flags, userdata, &st);
  561|  23.0k|                if (r < 0)
  ------------------
  |  Branch (561:21): [True: 280, False: 22.7k]
  ------------------
  562|    280|                        return r; /* config_parse() logs internally. */
  563|  22.7k|                assert(r > 0);
  ------------------
  |  |   72|  22.7k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  22.7k|        do {                                                            \
  |  |  |  |   59|  22.7k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  22.7k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 22.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  22.7k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  22.7k|        } while (false)
  |  |  ------------------
  ------------------
  564|       |
  565|  22.7k|                if (ret_stats_by_path) {
  ------------------
  |  Branch (565:21): [True: 9.97k, False: 12.8k]
  ------------------
  566|  9.97k|                        r = hashmap_put_stats_by_path(&stats_by_path, *fn, &st);
  567|  9.97k|                        if (r < 0)
  ------------------
  |  Branch (567:29): [True: 0, False: 9.97k]
  ------------------
  568|      0|                                return log_full_errno(level, r, "Failed to save stats of %s: %m", *fn);
  ------------------
  |  |  204|      0|        ({                                                              \
  |  |  205|      0|                int _error = (error);                                   \
  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  ------------------
  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  ------------------
  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  195|      0|        })
  |  |  ------------------
  |  |  208|      0|        })
  ------------------
  569|  9.97k|                }
  570|       |
  571|  22.7k|                break;
  572|  22.7k|        }
  573|       |
  574|       |        /* Then read all the drop-ins. */
  575|       |
  576|  22.7k|        const char *path_dropin;
  577|  22.7k|        FILE *f_dropin;
  578|  22.7k|        ORDERED_HASHMAP_FOREACH_KEY(f_dropin, path_dropin, dropins) {
  ------------------
  |  |  362|  22.7k|        _ORDERED_HASHMAP_FOREACH_KEY(e, k, h, UNIQ_T(i, UNIQ))
  |  |  ------------------
  |  |  |  |  360|  22.7k|        for (Iterator i = ITERATOR_FIRST; ordered_hashmap_iterate((h), &i, (void**)&(e), (const void**) &(k)); )
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|  22.7k|#define ITERATOR_FIRST ((Iterator) { .idx = _IDX_ITERATOR_FIRST, .next_key = NULL })
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|  22.7k|#define _IDX_ITERATOR_FIRST (UINT_MAX - 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (360:43): [True: 0, False: 22.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  579|      0|                r = config_parse(/* unit= */ NULL, path_dropin, f_dropin, sections, lookup, table, flags, userdata, &st);
  580|      0|                if (r < 0)
  ------------------
  |  Branch (580:21): [True: 0, False: 0]
  ------------------
  581|      0|                        return r; /* config_parse() logs internally. */
  582|      0|                assert(r > 0);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  583|       |
  584|      0|                if (ret_stats_by_path) {
  ------------------
  |  Branch (584:21): [True: 0, False: 0]
  ------------------
  585|      0|                        r = hashmap_put_stats_by_path(&stats_by_path, path_dropin, &st);
  586|      0|                        if (r < 0)
  ------------------
  |  Branch (586:29): [True: 0, False: 0]
  ------------------
  587|      0|                                return log_full_errno(level, r, "Failed to save stats of %s: %m", path_dropin);
  ------------------
  |  |  204|      0|        ({                                                              \
  |  |  205|      0|                int _error = (error);                                   \
  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  ------------------
  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  ------------------
  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  195|      0|        })
  |  |  ------------------
  |  |  208|      0|        })
  ------------------
  588|      0|                }
  589|      0|        }
  590|       |
  591|  22.7k|        if (ret_stats_by_path)
  ------------------
  |  Branch (591:13): [True: 9.97k, False: 12.8k]
  ------------------
  592|  9.97k|                *ret_stats_by_path = TAKE_PTR(stats_by_path);
  ------------------
  |  |  388|  9.97k|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|  9.97k|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|  9.97k|        ({                                                       \
  |  |  |  |  |  |  381|  9.97k|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|  9.97k|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|  9.97k|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|  9.97k|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|  9.97k|                _var_;                                           \
  |  |  |  |  |  |  386|  9.97k|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  593|       |
  594|  22.7k|        return 0;
  595|  22.7k|}

config_parse_bare_udp_iftype:
  305|    400|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  306|    400|                type *i = data, x;                                      \
  307|    400|                                                                        \
  308|    400|                assert(filename);                                       \
  ------------------
  |  |   72|    400|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    400|        do {                                                            \
  |  |  |  |   59|    400|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    400|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 400]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    400|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    400|        } while (false)
  |  |  ------------------
  ------------------
  309|    400|                assert(lvalue);                                         \
  ------------------
  |  |   72|    400|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    400|        do {                                                            \
  |  |  |  |   59|    400|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    400|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 400]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    400|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    400|        } while (false)
  |  |  ------------------
  ------------------
  310|    400|                assert(rvalue);                                         \
  ------------------
  |  |   72|    400|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    400|        do {                                                            \
  |  |  |  |   59|    400|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    400|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 400]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    400|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    400|        } while (false)
  |  |  ------------------
  ------------------
  311|    400|                assert(data);                                           \
  ------------------
  |  |   72|    400|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    400|        do {                                                            \
  |  |  |  |   59|    400|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    400|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 400]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    400|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    400|        } while (false)
  |  |  ------------------
  ------------------
  312|    400|                                                                        \
  313|    400|                x = from_string(rvalue);                                \
  314|    400|                if (x < 0)                                              \
  ------------------
  |  Branch (314:21): [True: 204, False: 196]
  ------------------
  315|    400|                        return log_syntax_parse_error(unit, filename, line, x, lvalue, rvalue); \
  ------------------
  |  |  372|    204|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    204|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    204|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    204|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|    400|                                                                        \
  317|    400|                *i = x;                                                 \
  318|    196|                return 1;                                               \
  319|    400|        }
config_parse_batadv_gateway_mode:
  305|    415|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  306|    415|                type *i = data, x;                                      \
  307|    415|                                                                        \
  308|    415|                assert(filename);                                       \
  ------------------
  |  |   72|    415|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    415|        do {                                                            \
  |  |  |  |   59|    415|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    415|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 415]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    415|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    415|        } while (false)
  |  |  ------------------
  ------------------
  309|    415|                assert(lvalue);                                         \
  ------------------
  |  |   72|    415|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    415|        do {                                                            \
  |  |  |  |   59|    415|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    415|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 415]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    415|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    415|        } while (false)
  |  |  ------------------
  ------------------
  310|    415|                assert(rvalue);                                         \
  ------------------
  |  |   72|    415|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    415|        do {                                                            \
  |  |  |  |   59|    415|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    415|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 415]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    415|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    415|        } while (false)
  |  |  ------------------
  ------------------
  311|    415|                assert(data);                                           \
  ------------------
  |  |   72|    415|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    415|        do {                                                            \
  |  |  |  |   59|    415|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    415|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 415]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    415|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    415|        } while (false)
  |  |  ------------------
  ------------------
  312|    415|                                                                        \
  313|    415|                x = from_string(rvalue);                                \
  314|    415|                if (x < 0)                                              \
  ------------------
  |  Branch (314:21): [True: 221, False: 194]
  ------------------
  315|    415|                        return log_syntax_parse_error(unit, filename, line, x, lvalue, rvalue); \
  ------------------
  |  |  372|    221|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    221|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    221|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    221|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|    415|                                                                        \
  317|    415|                *i = x;                                                 \
  318|    194|                return 1;                                               \
  319|    415|        }
config_parse_batadv_routing_algorithm:
  305|    395|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  306|    395|                type *i = data, x;                                      \
  307|    395|                                                                        \
  308|    395|                assert(filename);                                       \
  ------------------
  |  |   72|    395|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    395|        do {                                                            \
  |  |  |  |   59|    395|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    395|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 395]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    395|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    395|        } while (false)
  |  |  ------------------
  ------------------
  309|    395|                assert(lvalue);                                         \
  ------------------
  |  |   72|    395|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    395|        do {                                                            \
  |  |  |  |   59|    395|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    395|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 395]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    395|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    395|        } while (false)
  |  |  ------------------
  ------------------
  310|    395|                assert(rvalue);                                         \
  ------------------
  |  |   72|    395|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    395|        do {                                                            \
  |  |  |  |   59|    395|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    395|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 395]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    395|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    395|        } while (false)
  |  |  ------------------
  ------------------
  311|    395|                assert(data);                                           \
  ------------------
  |  |   72|    395|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    395|        do {                                                            \
  |  |  |  |   59|    395|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    395|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 395]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    395|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    395|        } while (false)
  |  |  ------------------
  ------------------
  312|    395|                                                                        \
  313|    395|                x = from_string(rvalue);                                \
  314|    395|                if (x < 0)                                              \
  ------------------
  |  Branch (314:21): [True: 201, False: 194]
  ------------------
  315|    395|                        return log_syntax_parse_error(unit, filename, line, x, lvalue, rvalue); \
  ------------------
  |  |  372|    201|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    201|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    201|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    201|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|    395|                                                                        \
  317|    395|                *i = x;                                                 \
  318|    194|                return 1;                                               \
  319|    395|        }
config_parse_bond_mode:
  305|    435|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  306|    435|                type *i = data, x;                                      \
  307|    435|                                                                        \
  308|    435|                assert(filename);                                       \
  ------------------
  |  |   72|    435|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    435|        do {                                                            \
  |  |  |  |   59|    435|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    435|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 435]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    435|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    435|        } while (false)
  |  |  ------------------
  ------------------
  309|    435|                assert(lvalue);                                         \
  ------------------
  |  |   72|    435|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    435|        do {                                                            \
  |  |  |  |   59|    435|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    435|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 435]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    435|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    435|        } while (false)
  |  |  ------------------
  ------------------
  310|    435|                assert(rvalue);                                         \
  ------------------
  |  |   72|    435|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    435|        do {                                                            \
  |  |  |  |   59|    435|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    435|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 435]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    435|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    435|        } while (false)
  |  |  ------------------
  ------------------
  311|    435|                assert(data);                                           \
  ------------------
  |  |   72|    435|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    435|        do {                                                            \
  |  |  |  |   59|    435|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    435|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 435]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    435|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    435|        } while (false)
  |  |  ------------------
  ------------------
  312|    435|                                                                        \
  313|    435|                x = from_string(rvalue);                                \
  314|    435|                if (x < 0)                                              \
  ------------------
  |  Branch (314:21): [True: 224, False: 211]
  ------------------
  315|    435|                        return log_syntax_parse_error(unit, filename, line, x, lvalue, rvalue); \
  ------------------
  |  |  372|    224|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    224|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    224|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    224|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|    435|                                                                        \
  317|    435|                *i = x;                                                 \
  318|    211|                return 1;                                               \
  319|    435|        }
config_parse_bond_xmit_hash_policy:
  305|    440|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  306|    440|                type *i = data, x;                                      \
  307|    440|                                                                        \
  308|    440|                assert(filename);                                       \
  ------------------
  |  |   72|    440|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    440|        do {                                                            \
  |  |  |  |   59|    440|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    440|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 440]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    440|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    440|        } while (false)
  |  |  ------------------
  ------------------
  309|    440|                assert(lvalue);                                         \
  ------------------
  |  |   72|    440|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    440|        do {                                                            \
  |  |  |  |   59|    440|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    440|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 440]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    440|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    440|        } while (false)
  |  |  ------------------
  ------------------
  310|    440|                assert(rvalue);                                         \
  ------------------
  |  |   72|    440|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    440|        do {                                                            \
  |  |  |  |   59|    440|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    440|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 440]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    440|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    440|        } while (false)
  |  |  ------------------
  ------------------
  311|    440|                assert(data);                                           \
  ------------------
  |  |   72|    440|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    440|        do {                                                            \
  |  |  |  |   59|    440|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    440|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 440]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    440|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    440|        } while (false)
  |  |  ------------------
  ------------------
  312|    440|                                                                        \
  313|    440|                x = from_string(rvalue);                                \
  314|    440|                if (x < 0)                                              \
  ------------------
  |  Branch (314:21): [True: 243, False: 197]
  ------------------
  315|    440|                        return log_syntax_parse_error(unit, filename, line, x, lvalue, rvalue); \
  ------------------
  |  |  372|    243|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    243|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    243|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    243|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|    440|                                                                        \
  317|    440|                *i = x;                                                 \
  318|    197|                return 1;                                               \
  319|    440|        }
config_parse_bond_lacp_rate:
  305|    397|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  306|    397|                type *i = data, x;                                      \
  307|    397|                                                                        \
  308|    397|                assert(filename);                                       \
  ------------------
  |  |   72|    397|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    397|        do {                                                            \
  |  |  |  |   59|    397|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    397|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 397]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    397|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    397|        } while (false)
  |  |  ------------------
  ------------------
  309|    397|                assert(lvalue);                                         \
  ------------------
  |  |   72|    397|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    397|        do {                                                            \
  |  |  |  |   59|    397|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    397|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 397]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    397|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    397|        } while (false)
  |  |  ------------------
  ------------------
  310|    397|                assert(rvalue);                                         \
  ------------------
  |  |   72|    397|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    397|        do {                                                            \
  |  |  |  |   59|    397|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    397|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 397]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    397|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    397|        } while (false)
  |  |  ------------------
  ------------------
  311|    397|                assert(data);                                           \
  ------------------
  |  |   72|    397|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    397|        do {                                                            \
  |  |  |  |   59|    397|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    397|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 397]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    397|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    397|        } while (false)
  |  |  ------------------
  ------------------
  312|    397|                                                                        \
  313|    397|                x = from_string(rvalue);                                \
  314|    397|                if (x < 0)                                              \
  ------------------
  |  Branch (314:21): [True: 198, False: 199]
  ------------------
  315|    397|                        return log_syntax_parse_error(unit, filename, line, x, lvalue, rvalue); \
  ------------------
  |  |  372|    198|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    198|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    198|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    198|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|    397|                                                                        \
  317|    397|                *i = x;                                                 \
  318|    199|                return 1;                                               \
  319|    397|        }
config_parse_bond_ad_select:
  305|    414|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  306|    414|                type *i = data, x;                                      \
  307|    414|                                                                        \
  308|    414|                assert(filename);                                       \
  ------------------
  |  |   72|    414|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    414|        do {                                                            \
  |  |  |  |   59|    414|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    414|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 414]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    414|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    414|        } while (false)
  |  |  ------------------
  ------------------
  309|    414|                assert(lvalue);                                         \
  ------------------
  |  |   72|    414|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    414|        do {                                                            \
  |  |  |  |   59|    414|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    414|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 414]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    414|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    414|        } while (false)
  |  |  ------------------
  ------------------
  310|    414|                assert(rvalue);                                         \
  ------------------
  |  |   72|    414|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    414|        do {                                                            \
  |  |  |  |   59|    414|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    414|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 414]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    414|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    414|        } while (false)
  |  |  ------------------
  ------------------
  311|    414|                assert(data);                                           \
  ------------------
  |  |   72|    414|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    414|        do {                                                            \
  |  |  |  |   59|    414|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    414|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 414]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    414|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    414|        } while (false)
  |  |  ------------------
  ------------------
  312|    414|                                                                        \
  313|    414|                x = from_string(rvalue);                                \
  314|    414|                if (x < 0)                                              \
  ------------------
  |  Branch (314:21): [True: 220, False: 194]
  ------------------
  315|    414|                        return log_syntax_parse_error(unit, filename, line, x, lvalue, rvalue); \
  ------------------
  |  |  372|    220|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    220|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    220|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    220|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|    414|                                                                        \
  317|    414|                *i = x;                                                 \
  318|    194|                return 1;                                               \
  319|    414|        }
config_parse_bond_fail_over_mac:
  305|    389|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  306|    389|                type *i = data, x;                                      \
  307|    389|                                                                        \
  308|    389|                assert(filename);                                       \
  ------------------
  |  |   72|    389|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    389|        do {                                                            \
  |  |  |  |   59|    389|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    389|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 389]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    389|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    389|        } while (false)
  |  |  ------------------
  ------------------
  309|    389|                assert(lvalue);                                         \
  ------------------
  |  |   72|    389|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    389|        do {                                                            \
  |  |  |  |   59|    389|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    389|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 389]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    389|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    389|        } while (false)
  |  |  ------------------
  ------------------
  310|    389|                assert(rvalue);                                         \
  ------------------
  |  |   72|    389|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    389|        do {                                                            \
  |  |  |  |   59|    389|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    389|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 389]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    389|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    389|        } while (false)
  |  |  ------------------
  ------------------
  311|    389|                assert(data);                                           \
  ------------------
  |  |   72|    389|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    389|        do {                                                            \
  |  |  |  |   59|    389|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    389|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 389]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    389|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    389|        } while (false)
  |  |  ------------------
  ------------------
  312|    389|                                                                        \
  313|    389|                x = from_string(rvalue);                                \
  314|    389|                if (x < 0)                                              \
  ------------------
  |  Branch (314:21): [True: 194, False: 195]
  ------------------
  315|    389|                        return log_syntax_parse_error(unit, filename, line, x, lvalue, rvalue); \
  ------------------
  |  |  372|    194|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    194|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    194|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    194|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|    389|                                                                        \
  317|    389|                *i = x;                                                 \
  318|    195|                return 1;                                               \
  319|    389|        }
config_parse_bond_arp_validate:
  305|    394|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  306|    394|                type *i = data, x;                                      \
  307|    394|                                                                        \
  308|    394|                assert(filename);                                       \
  ------------------
  |  |   72|    394|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    394|        do {                                                            \
  |  |  |  |   59|    394|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    394|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 394]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    394|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    394|        } while (false)
  |  |  ------------------
  ------------------
  309|    394|                assert(lvalue);                                         \
  ------------------
  |  |   72|    394|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    394|        do {                                                            \
  |  |  |  |   59|    394|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    394|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 394]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    394|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    394|        } while (false)
  |  |  ------------------
  ------------------
  310|    394|                assert(rvalue);                                         \
  ------------------
  |  |   72|    394|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    394|        do {                                                            \
  |  |  |  |   59|    394|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    394|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 394]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    394|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    394|        } while (false)
  |  |  ------------------
  ------------------
  311|    394|                assert(data);                                           \
  ------------------
  |  |   72|    394|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    394|        do {                                                            \
  |  |  |  |   59|    394|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    394|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 394]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    394|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    394|        } while (false)
  |  |  ------------------
  ------------------
  312|    394|                                                                        \
  313|    394|                x = from_string(rvalue);                                \
  314|    394|                if (x < 0)                                              \
  ------------------
  |  Branch (314:21): [True: 200, False: 194]
  ------------------
  315|    394|                        return log_syntax_parse_error(unit, filename, line, x, lvalue, rvalue); \
  ------------------
  |  |  372|    200|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    200|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    200|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    200|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|    394|                                                                        \
  317|    394|                *i = x;                                                 \
  318|    194|                return 1;                                               \
  319|    394|        }
config_parse_bond_arp_all_targets:
  305|    397|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  306|    397|                type *i = data, x;                                      \
  307|    397|                                                                        \
  308|    397|                assert(filename);                                       \
  ------------------
  |  |   72|    397|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    397|        do {                                                            \
  |  |  |  |   59|    397|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    397|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 397]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    397|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    397|        } while (false)
  |  |  ------------------
  ------------------
  309|    397|                assert(lvalue);                                         \
  ------------------
  |  |   72|    397|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    397|        do {                                                            \
  |  |  |  |   59|    397|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    397|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 397]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    397|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    397|        } while (false)
  |  |  ------------------
  ------------------
  310|    397|                assert(rvalue);                                         \
  ------------------
  |  |   72|    397|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    397|        do {                                                            \
  |  |  |  |   59|    397|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    397|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 397]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    397|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    397|        } while (false)
  |  |  ------------------
  ------------------
  311|    397|                assert(data);                                           \
  ------------------
  |  |   72|    397|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    397|        do {                                                            \
  |  |  |  |   59|    397|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    397|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 397]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    397|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    397|        } while (false)
  |  |  ------------------
  ------------------
  312|    397|                                                                        \
  313|    397|                x = from_string(rvalue);                                \
  314|    397|                if (x < 0)                                              \
  ------------------
  |  Branch (314:21): [True: 201, False: 196]
  ------------------
  315|    397|                        return log_syntax_parse_error(unit, filename, line, x, lvalue, rvalue); \
  ------------------
  |  |  372|    201|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    201|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    201|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    201|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|    397|                                                                        \
  317|    397|                *i = x;                                                 \
  318|    196|                return 1;                                               \
  319|    397|        }
config_parse_bond_primary_reselect:
  305|    392|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  306|    392|                type *i = data, x;                                      \
  307|    392|                                                                        \
  308|    392|                assert(filename);                                       \
  ------------------
  |  |   72|    392|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    392|        do {                                                            \
  |  |  |  |   59|    392|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    392|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 392]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    392|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    392|        } while (false)
  |  |  ------------------
  ------------------
  309|    392|                assert(lvalue);                                         \
  ------------------
  |  |   72|    392|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    392|        do {                                                            \
  |  |  |  |   59|    392|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    392|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 392]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    392|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    392|        } while (false)
  |  |  ------------------
  ------------------
  310|    392|                assert(rvalue);                                         \
  ------------------
  |  |   72|    392|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    392|        do {                                                            \
  |  |  |  |   59|    392|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    392|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 392]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    392|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    392|        } while (false)
  |  |  ------------------
  ------------------
  311|    392|                assert(data);                                           \
  ------------------
  |  |   72|    392|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    392|        do {                                                            \
  |  |  |  |   59|    392|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    392|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 392]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    392|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    392|        } while (false)
  |  |  ------------------
  ------------------
  312|    392|                                                                        \
  313|    392|                x = from_string(rvalue);                                \
  314|    392|                if (x < 0)                                              \
  ------------------
  |  Branch (314:21): [True: 198, False: 194]
  ------------------
  315|    392|                        return log_syntax_parse_error(unit, filename, line, x, lvalue, rvalue); \
  ------------------
  |  |  372|    198|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    198|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    198|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    198|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|    392|                                                                        \
  317|    392|                *i = x;                                                 \
  318|    194|                return 1;                                               \
  319|    392|        }
bond.c:config_parse_uint16_bounded:
  455|    821|                uint16_t *ret) {
  456|       |
  457|    821|        unsigned t;
  458|    821|        int r;
  459|       |
  460|    821|        r = config_parse_unsigned_bounded(
  461|    821|                        unit, filename, line, section, section_line, lvalue, rvalue,
  462|    821|                        min, max, ignoring,
  463|    821|                        &t);
  464|    821|        if (r <= 0)
  ------------------
  |  Branch (464:13): [True: 396, False: 425]
  ------------------
  465|    396|                return r;
  466|    425|        assert(t <= UINT16_MAX);
  ------------------
  |  |   72|    425|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    425|        do {                                                            \
  |  |  |  |   59|    425|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    425|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 425]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    425|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    425|        } while (false)
  |  |  ------------------
  ------------------
  467|    425|        *ret = t;
  468|    425|        return 1;
  469|    821|}
config_parse_fou_encap_type:
  305|    418|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  306|    418|                type *i = data, x;                                      \
  307|    418|                                                                        \
  308|    418|                assert(filename);                                       \
  ------------------
  |  |   72|    418|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    418|        do {                                                            \
  |  |  |  |   59|    418|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    418|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 418]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    418|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    418|        } while (false)
  |  |  ------------------
  ------------------
  309|    418|                assert(lvalue);                                         \
  ------------------
  |  |   72|    418|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    418|        do {                                                            \
  |  |  |  |   59|    418|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    418|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 418]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    418|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    418|        } while (false)
  |  |  ------------------
  ------------------
  310|    418|                assert(rvalue);                                         \
  ------------------
  |  |   72|    418|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    418|        do {                                                            \
  |  |  |  |   59|    418|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    418|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 418]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    418|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    418|        } while (false)
  |  |  ------------------
  ------------------
  311|    418|                assert(data);                                           \
  ------------------
  |  |   72|    418|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    418|        do {                                                            \
  |  |  |  |   59|    418|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    418|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 418]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    418|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    418|        } while (false)
  |  |  ------------------
  ------------------
  312|    418|                                                                        \
  313|    418|                x = from_string(rvalue);                                \
  314|    418|                if (x < 0)                                              \
  ------------------
  |  Branch (314:21): [True: 224, False: 194]
  ------------------
  315|    418|                        return log_syntax_parse_error(unit, filename, line, x, lvalue, rvalue); \
  ------------------
  |  |  372|    224|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    224|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    224|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    224|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|    418|                                                                        \
  317|    418|                *i = x;                                                 \
  318|    194|                return 1;                                               \
  319|    418|        }
config_parse_geneve_df:
  305|    577|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  306|    577|                type *i = data, x;                                      \
  307|    577|                                                                        \
  308|    577|                assert(filename);                                       \
  ------------------
  |  |   72|    577|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    577|        do {                                                            \
  |  |  |  |   59|    577|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    577|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 577]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    577|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    577|        } while (false)
  |  |  ------------------
  ------------------
  309|    577|                assert(lvalue);                                         \
  ------------------
  |  |   72|    577|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    577|        do {                                                            \
  |  |  |  |   59|    577|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    577|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 577]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    577|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    577|        } while (false)
  |  |  ------------------
  ------------------
  310|    577|                assert(rvalue);                                         \
  ------------------
  |  |   72|    577|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    577|        do {                                                            \
  |  |  |  |   59|    577|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    577|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 577]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    577|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    577|        } while (false)
  |  |  ------------------
  ------------------
  311|    577|                assert(data);                                           \
  ------------------
  |  |   72|    577|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    577|        do {                                                            \
  |  |  |  |   59|    577|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    577|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 577]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    577|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    577|        } while (false)
  |  |  ------------------
  ------------------
  312|    577|                                                                        \
  313|    577|                x = from_string(rvalue);                                \
  314|    577|                if (x < 0)                                              \
  ------------------
  |  Branch (314:21): [True: 207, False: 370]
  ------------------
  315|    577|                        return log_syntax_parse_error(unit, filename, line, x, lvalue, rvalue); \
  ------------------
  |  |  372|    207|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    207|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    207|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    207|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|    577|                                                                        \
  317|    577|                *i = x;                                                 \
  318|    370|                return 1;                                               \
  319|    577|        }
geneve.c:config_parse_uint32_bounded:
  428|    617|                uint32_t *ret) {
  429|       |
  430|    617|        unsigned t;
  431|    617|        int r;
  432|       |
  433|    617|        r = config_parse_unsigned_bounded(
  434|    617|                        unit, filename, line, section, section_line, lvalue, rvalue,
  435|    617|                        min, max, ignoring,
  436|    617|                        &t);
  437|    617|        if (r <= 0)
  ------------------
  |  Branch (437:13): [True: 396, False: 221]
  ------------------
  438|    396|                return r;
  439|    221|        assert(t <= UINT32_MAX);
  ------------------
  |  |   72|    221|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    221|        do {                                                            \
  |  |  |  |   59|    221|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    221|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 221]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    221|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    221|        } while (false)
  |  |  ------------------
  ------------------
  440|    221|        *ret = t;
  441|    221|        return 1;
  442|    617|}
geneve.c:config_parse_uint8_bounded:
  482|    477|                uint8_t *ret) {
  483|       |
  484|    477|        unsigned t;
  485|    477|        int r;
  486|       |
  487|    477|        r = config_parse_unsigned_bounded(
  488|    477|                        unit, filename, line, section, section_line, lvalue, rvalue,
  489|    477|                        min, max, ignoring,
  490|    477|                        &t);
  491|    477|        if (r <= 0)
  ------------------
  |  Branch (491:13): [True: 273, False: 204]
  ------------------
  492|    273|                return r;
  493|    204|        assert(t <= UINT8_MAX);
  ------------------
  |  |   72|    204|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    204|        do {                                                            \
  |  |  |  |   59|    204|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    204|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 204]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    204|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    204|        } while (false)
  |  |  ------------------
  ------------------
  494|    204|        *ret = t;
  495|    204|        return 1;
  496|    477|}
config_parse_ipoib_mode:
  305|    543|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  306|    543|                type *i = data, x;                                      \
  307|    543|                                                                        \
  308|    543|                assert(filename);                                       \
  ------------------
  |  |   72|    543|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    543|        do {                                                            \
  |  |  |  |   59|    543|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    543|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 543]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    543|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    543|        } while (false)
  |  |  ------------------
  ------------------
  309|    543|                assert(lvalue);                                         \
  ------------------
  |  |   72|    543|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    543|        do {                                                            \
  |  |  |  |   59|    543|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    543|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 543]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    543|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    543|        } while (false)
  |  |  ------------------
  ------------------
  310|    543|                assert(rvalue);                                         \
  ------------------
  |  |   72|    543|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    543|        do {                                                            \
  |  |  |  |   59|    543|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    543|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 543]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    543|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    543|        } while (false)
  |  |  ------------------
  ------------------
  311|    543|                assert(data);                                           \
  ------------------
  |  |   72|    543|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    543|        do {                                                            \
  |  |  |  |   59|    543|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    543|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 543]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    543|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    543|        } while (false)
  |  |  ------------------
  ------------------
  312|    543|                                                                        \
  313|    543|                x = from_string(rvalue);                                \
  314|    543|                if (x < 0)                                              \
  ------------------
  |  Branch (314:21): [True: 266, False: 277]
  ------------------
  315|    543|                        return log_syntax_parse_error(unit, filename, line, x, lvalue, rvalue); \
  ------------------
  |  |  372|    266|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    266|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    266|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    266|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|    543|                                                                        \
  317|    543|                *i = x;                                                 \
  318|    277|                return 1;                                               \
  319|    543|        }
config_parse_ipvlan_mode:
  305|    390|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  306|    390|                type *i = data, x;                                      \
  307|    390|                                                                        \
  308|    390|                assert(filename);                                       \
  ------------------
  |  |   72|    390|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    390|        do {                                                            \
  |  |  |  |   59|    390|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    390|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 390]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    390|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    390|        } while (false)
  |  |  ------------------
  ------------------
  309|    390|                assert(lvalue);                                         \
  ------------------
  |  |   72|    390|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    390|        do {                                                            \
  |  |  |  |   59|    390|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    390|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 390]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    390|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    390|        } while (false)
  |  |  ------------------
  ------------------
  310|    390|                assert(rvalue);                                         \
  ------------------
  |  |   72|    390|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    390|        do {                                                            \
  |  |  |  |   59|    390|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    390|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 390]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    390|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    390|        } while (false)
  |  |  ------------------
  ------------------
  311|    390|                assert(data);                                           \
  ------------------
  |  |   72|    390|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    390|        do {                                                            \
  |  |  |  |   59|    390|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    390|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 390]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    390|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    390|        } while (false)
  |  |  ------------------
  ------------------
  312|    390|                                                                        \
  313|    390|                x = from_string(rvalue);                                \
  314|    390|                if (x < 0)                                              \
  ------------------
  |  Branch (314:21): [True: 195, False: 195]
  ------------------
  315|    390|                        return log_syntax_parse_error(unit, filename, line, x, lvalue, rvalue); \
  ------------------
  |  |  372|    195|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    195|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    195|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    195|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|    390|                                                                        \
  317|    390|                *i = x;                                                 \
  318|    195|                return 1;                                               \
  319|    390|        }
config_parse_ipvlan_flags:
  305|    389|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  306|    389|                type *i = data, x;                                      \
  307|    389|                                                                        \
  308|    389|                assert(filename);                                       \
  ------------------
  |  |   72|    389|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    389|        do {                                                            \
  |  |  |  |   59|    389|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    389|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 389]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    389|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    389|        } while (false)
  |  |  ------------------
  ------------------
  309|    389|                assert(lvalue);                                         \
  ------------------
  |  |   72|    389|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    389|        do {                                                            \
  |  |  |  |   59|    389|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    389|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 389]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    389|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    389|        } while (false)
  |  |  ------------------
  ------------------
  310|    389|                assert(rvalue);                                         \
  ------------------
  |  |   72|    389|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    389|        do {                                                            \
  |  |  |  |   59|    389|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    389|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 389]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    389|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    389|        } while (false)
  |  |  ------------------
  ------------------
  311|    389|                assert(data);                                           \
  ------------------
  |  |   72|    389|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    389|        do {                                                            \
  |  |  |  |   59|    389|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    389|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 389]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    389|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    389|        } while (false)
  |  |  ------------------
  ------------------
  312|    389|                                                                        \
  313|    389|                x = from_string(rvalue);                                \
  314|    389|                if (x < 0)                                              \
  ------------------
  |  Branch (314:21): [True: 195, False: 194]
  ------------------
  315|    389|                        return log_syntax_parse_error(unit, filename, line, x, lvalue, rvalue); \
  ------------------
  |  |  372|    195|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    195|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    195|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    195|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|    389|                                                                        \
  317|    389|                *i = x;                                                 \
  318|    194|                return 1;                                               \
  319|    389|        }
config_parse_l2tp_encap_type:
  305|    408|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  306|    408|                type *i = data, x;                                      \
  307|    408|                                                                        \
  308|    408|                assert(filename);                                       \
  ------------------
  |  |   72|    408|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    408|        do {                                                            \
  |  |  |  |   59|    408|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    408|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 408]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    408|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    408|        } while (false)
  |  |  ------------------
  ------------------
  309|    408|                assert(lvalue);                                         \
  ------------------
  |  |   72|    408|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    408|        do {                                                            \
  |  |  |  |   59|    408|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    408|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 408]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    408|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    408|        } while (false)
  |  |  ------------------
  ------------------
  310|    408|                assert(rvalue);                                         \
  ------------------
  |  |   72|    408|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    408|        do {                                                            \
  |  |  |  |   59|    408|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    408|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 408]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    408|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    408|        } while (false)
  |  |  ------------------
  ------------------
  311|    408|                assert(data);                                           \
  ------------------
  |  |   72|    408|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    408|        do {                                                            \
  |  |  |  |   59|    408|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    408|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 408]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    408|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    408|        } while (false)
  |  |  ------------------
  ------------------
  312|    408|                                                                        \
  313|    408|                x = from_string(rvalue);                                \
  314|    408|                if (x < 0)                                              \
  ------------------
  |  Branch (314:21): [True: 212, False: 196]
  ------------------
  315|    408|                        return log_syntax_parse_error(unit, filename, line, x, lvalue, rvalue); \
  ------------------
  |  |  372|    212|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    212|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    212|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    212|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|    408|                                                                        \
  317|    408|                *i = x;                                                 \
  318|    196|                return 1;                                               \
  319|    408|        }
l2tp-tunnel.c:config_parse_uint32_bounded:
  428|  6.64k|                uint32_t *ret) {
  429|       |
  430|  6.64k|        unsigned t;
  431|  6.64k|        int r;
  432|       |
  433|  6.64k|        r = config_parse_unsigned_bounded(
  434|  6.64k|                        unit, filename, line, section, section_line, lvalue, rvalue,
  435|  6.64k|                        min, max, ignoring,
  436|  6.64k|                        &t);
  437|  6.64k|        if (r <= 0)
  ------------------
  |  Branch (437:13): [True: 841, False: 5.80k]
  ------------------
  438|    841|                return r;
  439|  5.80k|        assert(t <= UINT32_MAX);
  ------------------
  |  |   72|  5.80k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  5.80k|        do {                                                            \
  |  |  |  |   59|  5.80k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  5.80k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 5.80k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  5.80k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  5.80k|        } while (false)
  |  |  ------------------
  ------------------
  440|  5.80k|        *ret = t;
  441|  5.80k|        return 1;
  442|  6.64k|}
l2tp-tunnel.c:config_section_free:
  142|  66.6k|static inline ConfigSection* config_section_free(ConfigSection *cs) {
  143|  66.6k|        return mfree(cs);
  ------------------
  |  |  404|  66.6k|        ({                                      \
  |  |  405|  66.6k|                free(memory);                   \
  |  |  406|  66.6k|                (typeof(memory)) NULL;          \
  |  |  407|  66.6k|        })
  ------------------
  144|  66.6k|}
l2tp-tunnel.c:section_is_invalid:
  156|  6.74k|static inline bool section_is_invalid(ConfigSection *section) {
  157|       |        /* If this returns false, then it does _not_ mean the section is valid. */
  158|       |
  159|  6.74k|        if (!section)
  ------------------
  |  Branch (159:13): [True: 0, False: 6.74k]
  ------------------
  160|      0|                return false;
  161|       |
  162|  6.74k|        return section->invalid;
  163|  6.74k|}
macsec.c:config_section_free:
  142|  27.1k|static inline ConfigSection* config_section_free(ConfigSection *cs) {
  143|  27.1k|        return mfree(cs);
  ------------------
  |  |  404|  27.1k|        ({                                      \
  |  |  405|  27.1k|                free(memory);                   \
  |  |  406|  27.1k|                (typeof(memory)) NULL;          \
  |  |  407|  27.1k|        })
  ------------------
  144|  27.1k|}
macsec.c:section_is_invalid:
  156|  8.88k|static inline bool section_is_invalid(ConfigSection *section) {
  157|       |        /* If this returns false, then it does _not_ mean the section is valid. */
  158|       |
  159|  8.88k|        if (!section)
  ------------------
  |  Branch (159:13): [True: 0, False: 8.88k]
  ------------------
  160|      0|                return false;
  161|       |
  162|  8.88k|        return section->invalid;
  163|  8.88k|}
config_parse_macvlan_mode:
  305|    398|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  306|    398|                type *i = data, x;                                      \
  307|    398|                                                                        \
  308|    398|                assert(filename);                                       \
  ------------------
  |  |   72|    398|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    398|        do {                                                            \
  |  |  |  |   59|    398|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    398|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 398]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    398|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    398|        } while (false)
  |  |  ------------------
  ------------------
  309|    398|                assert(lvalue);                                         \
  ------------------
  |  |   72|    398|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    398|        do {                                                            \
  |  |  |  |   59|    398|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    398|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 398]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    398|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    398|        } while (false)
  |  |  ------------------
  ------------------
  310|    398|                assert(rvalue);                                         \
  ------------------
  |  |   72|    398|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    398|        do {                                                            \
  |  |  |  |   59|    398|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    398|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 398]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    398|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    398|        } while (false)
  |  |  ------------------
  ------------------
  311|    398|                assert(data);                                           \
  ------------------
  |  |   72|    398|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    398|        do {                                                            \
  |  |  |  |   59|    398|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    398|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 398]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    398|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    398|        } while (false)
  |  |  ------------------
  ------------------
  312|    398|                                                                        \
  313|    398|                x = from_string(rvalue);                                \
  314|    398|                if (x < 0)                                              \
  ------------------
  |  Branch (314:21): [True: 203, False: 195]
  ------------------
  315|    398|                        return log_syntax_parse_error(unit, filename, line, x, lvalue, rvalue); \
  ------------------
  |  |  372|    203|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    203|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    203|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    203|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|    398|                                                                        \
  317|    398|                *i = x;                                                 \
  318|    195|                return 1;                                               \
  319|    398|        }
macvlan.c:config_parse_uint32_bounded:
  428|    421|                uint32_t *ret) {
  429|       |
  430|    421|        unsigned t;
  431|    421|        int r;
  432|       |
  433|    421|        r = config_parse_unsigned_bounded(
  434|    421|                        unit, filename, line, section, section_line, lvalue, rvalue,
  435|    421|                        min, max, ignoring,
  436|    421|                        &t);
  437|    421|        if (r <= 0)
  ------------------
  |  Branch (437:13): [True: 196, False: 225]
  ------------------
  438|    196|                return r;
  439|    225|        assert(t <= UINT32_MAX);
  ------------------
  |  |   72|    225|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    225|        do {                                                            \
  |  |  |  |   59|    225|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    225|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 225]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    225|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    225|        } while (false)
  |  |  ------------------
  ------------------
  440|    225|        *ret = t;
  441|    225|        return 1;
  442|    421|}
config_parse_ip6tnl_mode:
  305|    397|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  306|    397|                type *i = data, x;                                      \
  307|    397|                                                                        \
  308|    397|                assert(filename);                                       \
  ------------------
  |  |   72|    397|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    397|        do {                                                            \
  |  |  |  |   59|    397|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    397|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 397]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    397|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    397|        } while (false)
  |  |  ------------------
  ------------------
  309|    397|                assert(lvalue);                                         \
  ------------------
  |  |   72|    397|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    397|        do {                                                            \
  |  |  |  |   59|    397|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    397|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 397]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    397|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    397|        } while (false)
  |  |  ------------------
  ------------------
  310|    397|                assert(rvalue);                                         \
  ------------------
  |  |   72|    397|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    397|        do {                                                            \
  |  |  |  |   59|    397|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    397|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 397]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    397|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    397|        } while (false)
  |  |  ------------------
  ------------------
  311|    397|                assert(data);                                           \
  ------------------
  |  |   72|    397|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    397|        do {                                                            \
  |  |  |  |   59|    397|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    397|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 397]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    397|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    397|        } while (false)
  |  |  ------------------
  ------------------
  312|    397|                                                                        \
  313|    397|                x = from_string(rvalue);                                \
  314|    397|                if (x < 0)                                              \
  ------------------
  |  Branch (314:21): [True: 201, False: 196]
  ------------------
  315|    397|                        return log_syntax_parse_error(unit, filename, line, x, lvalue, rvalue); \
  ------------------
  |  |  372|    201|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    201|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    201|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    201|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|    397|                                                                        \
  317|    397|                *i = x;                                                 \
  318|    196|                return 1;                                               \
  319|    397|        }
tunnel.c:config_parse_uint32_bounded:
  428|    867|                uint32_t *ret) {
  429|       |
  430|    867|        unsigned t;
  431|    867|        int r;
  432|       |
  433|    867|        r = config_parse_unsigned_bounded(
  434|    867|                        unit, filename, line, section, section_line, lvalue, rvalue,
  435|    867|                        min, max, ignoring,
  436|    867|                        &t);
  437|    867|        if (r <= 0)
  ------------------
  |  Branch (437:13): [True: 456, False: 411]
  ------------------
  438|    456|                return r;
  439|    411|        assert(t <= UINT32_MAX);
  ------------------
  |  |   72|    411|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    411|        do {                                                            \
  |  |  |  |   59|    411|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    411|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 411]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    411|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    411|        } while (false)
  |  |  ------------------
  ------------------
  440|    411|        *ret = t;
  441|    411|        return 1;
  442|    867|}
tunnel.c:config_parse_uint8_bounded:
  482|    857|                uint8_t *ret) {
  483|       |
  484|    857|        unsigned t;
  485|    857|        int r;
  486|       |
  487|    857|        r = config_parse_unsigned_bounded(
  488|    857|                        unit, filename, line, section, section_line, lvalue, rvalue,
  489|    857|                        min, max, ignoring,
  490|    857|                        &t);
  491|    857|        if (r <= 0)
  ------------------
  |  Branch (491:13): [True: 443, False: 414]
  ------------------
  492|    443|                return r;
  493|    414|        assert(t <= UINT8_MAX);
  ------------------
  |  |   72|    414|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    414|        do {                                                            \
  |  |  |  |   59|    414|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    414|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 414]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    414|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    414|        } while (false)
  |  |  ------------------
  ------------------
  494|    414|        *ret = t;
  495|    414|        return 1;
  496|    857|}
tunnel.c:config_parse_uint16_bounded:
  455|    530|                uint16_t *ret) {
  456|       |
  457|    530|        unsigned t;
  458|    530|        int r;
  459|       |
  460|    530|        r = config_parse_unsigned_bounded(
  461|    530|                        unit, filename, line, section, section_line, lvalue, rvalue,
  462|    530|                        min, max, ignoring,
  463|    530|                        &t);
  464|    530|        if (r <= 0)
  ------------------
  |  Branch (464:13): [True: 201, False: 329]
  ------------------
  465|    201|                return r;
  466|    329|        assert(t <= UINT16_MAX);
  ------------------
  |  |   72|    329|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    329|        do {                                                            \
  |  |  |  |   59|    329|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    329|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 329]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    329|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    329|        } while (false)
  |  |  ------------------
  ------------------
  467|    329|        *ret = t;
  468|    329|        return 1;
  469|    530|}
config_parse_df:
  305|  1.03k|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  306|  1.03k|                type *i = data, x;                                      \
  307|  1.03k|                                                                        \
  308|  1.03k|                assert(filename);                                       \
  ------------------
  |  |   72|  1.03k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.03k|        do {                                                            \
  |  |  |  |   59|  1.03k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.03k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.03k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.03k|        } while (false)
  |  |  ------------------
  ------------------
  309|  1.03k|                assert(lvalue);                                         \
  ------------------
  |  |   72|  1.03k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.03k|        do {                                                            \
  |  |  |  |   59|  1.03k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.03k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.03k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.03k|        } while (false)
  |  |  ------------------
  ------------------
  310|  1.03k|                assert(rvalue);                                         \
  ------------------
  |  |   72|  1.03k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.03k|        do {                                                            \
  |  |  |  |   59|  1.03k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.03k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.03k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.03k|        } while (false)
  |  |  ------------------
  ------------------
  311|  1.03k|                assert(data);                                           \
  ------------------
  |  |   72|  1.03k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  1.03k|        do {                                                            \
  |  |  |  |   59|  1.03k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  1.03k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  1.03k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  1.03k|        } while (false)
  |  |  ------------------
  ------------------
  312|  1.03k|                                                                        \
  313|  1.03k|                x = from_string(rvalue);                                \
  314|  1.03k|                if (x < 0)                                              \
  ------------------
  |  Branch (314:21): [True: 619, False: 415]
  ------------------
  315|  1.03k|                        return log_syntax_parse_error(unit, filename, line, x, lvalue, rvalue); \
  ------------------
  |  |  372|    619|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    619|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    619|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    619|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|  1.03k|                                                                        \
  317|  1.03k|                *i = x;                                                 \
  318|    415|                return 1;                                               \
  319|  1.03k|        }
wireguard.c:config_section_free:
  142|  31.7k|static inline ConfigSection* config_section_free(ConfigSection *cs) {
  143|  31.7k|        return mfree(cs);
  ------------------
  |  |  404|  31.7k|        ({                                      \
  |  |  405|  31.7k|                free(memory);                   \
  |  |  406|  31.7k|                (typeof(memory)) NULL;          \
  |  |  407|  31.7k|        })
  ------------------
  144|  31.7k|}
wireguard.c:section_is_invalid:
  156|  4.99k|static inline bool section_is_invalid(ConfigSection *section) {
  157|       |        /* If this returns false, then it does _not_ mean the section is valid. */
  158|       |
  159|  4.99k|        if (!section)
  ------------------
  |  Branch (159:13): [True: 0, False: 4.99k]
  ------------------
  160|      0|                return false;
  161|       |
  162|  4.99k|        return section->invalid;
  163|  4.99k|}
networkd-route.c:config_section_free:
  142|  20.2k|static inline ConfigSection* config_section_free(ConfigSection *cs) {
  143|  20.2k|        return mfree(cs);
  ------------------
  |  |  404|  20.2k|        ({                                      \
  |  |  405|  20.2k|                free(memory);                   \
  |  |  406|  20.2k|                (typeof(memory)) NULL;          \
  |  |  407|  20.2k|        })
  ------------------
  144|  20.2k|}
networkd-route.c:section_is_invalid:
  156|  20.2k|static inline bool section_is_invalid(ConfigSection *section) {
  157|       |        /* If this returns false, then it does _not_ mean the section is valid. */
  158|       |
  159|  20.2k|        if (!section)
  ------------------
  |  Branch (159:13): [True: 0, False: 20.2k]
  ------------------
  160|      0|                return false;
  161|       |
  162|  20.2k|        return section->invalid;
  163|  20.2k|}
config_parse_uint8:
  289|    651|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  290|    651|                type *i = ASSERT_PTR(data);                             \
  ------------------
  |  |   81|    651|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    651|        ({                                 \
  |  |  |  |   85|    651|                typeof(expr) var = (expr); \
  |  |  |  |   86|    651|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    651|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    651|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    651|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    651|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    651|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 651]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    651|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    651|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    651|                var;                       \
  |  |  |  |   88|    651|        })
  |  |  ------------------
  ------------------
  291|    651|                int r;                                                  \
  292|    651|                                                                        \
  293|    651|                assert(filename);                                       \
  ------------------
  |  |   72|    651|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    651|        do {                                                            \
  |  |  |  |   59|    651|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    651|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 651]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    651|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    651|        } while (false)
  |  |  ------------------
  ------------------
  294|    651|                assert(lvalue);                                         \
  ------------------
  |  |   72|    651|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    651|        do {                                                            \
  |  |  |  |   59|    651|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    651|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 651]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    651|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    651|        } while (false)
  |  |  ------------------
  ------------------
  295|    651|                assert(rvalue);                                         \
  ------------------
  |  |   72|    651|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    651|        do {                                                            \
  |  |  |  |   59|    651|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    651|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 651]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    651|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    651|        } while (false)
  |  |  ------------------
  ------------------
  296|    651|                                                                        \
  297|    651|                r = parser(rvalue, i);                                  \
  298|    651|                if (r < 0)                                              \
  ------------------
  |  Branch (298:21): [True: 423, False: 228]
  ------------------
  299|    651|                        return log_syntax_parse_error(unit, filename, line, r, lvalue, rvalue); \
  ------------------
  |  |  372|    423|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    423|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    423|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    423|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  300|    651|                                                                        \
  301|    651|                return 1;                                               \
  302|    651|        }
config_parse_uint16:
  289|    389|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  290|    389|                type *i = ASSERT_PTR(data);                             \
  ------------------
  |  |   81|    389|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    389|        ({                                 \
  |  |  |  |   85|    389|                typeof(expr) var = (expr); \
  |  |  |  |   86|    389|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    389|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    389|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    389|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    389|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    389|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 389]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    389|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    389|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    389|                var;                       \
  |  |  |  |   88|    389|        })
  |  |  ------------------
  ------------------
  291|    389|                int r;                                                  \
  292|    389|                                                                        \
  293|    389|                assert(filename);                                       \
  ------------------
  |  |   72|    389|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    389|        do {                                                            \
  |  |  |  |   59|    389|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    389|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 389]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    389|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    389|        } while (false)
  |  |  ------------------
  ------------------
  294|    389|                assert(lvalue);                                         \
  ------------------
  |  |   72|    389|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    389|        do {                                                            \
  |  |  |  |   59|    389|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    389|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 389]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    389|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    389|        } while (false)
  |  |  ------------------
  ------------------
  295|    389|                assert(rvalue);                                         \
  ------------------
  |  |   72|    389|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    389|        do {                                                            \
  |  |  |  |   59|    389|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    389|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 389]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    389|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    389|        } while (false)
  |  |  ------------------
  ------------------
  296|    389|                                                                        \
  297|    389|                r = parser(rvalue, i);                                  \
  298|    389|                if (r < 0)                                              \
  ------------------
  |  Branch (298:21): [True: 195, False: 194]
  ------------------
  299|    389|                        return log_syntax_parse_error(unit, filename, line, r, lvalue, rvalue); \
  ------------------
  |  |  372|    195|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    195|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    195|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    195|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  300|    389|                                                                        \
  301|    389|                return 1;                                               \
  302|    389|        }
config_parse_uint32:
  289|    495|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  290|    495|                type *i = ASSERT_PTR(data);                             \
  ------------------
  |  |   81|    495|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    495|        ({                                 \
  |  |  |  |   85|    495|                typeof(expr) var = (expr); \
  |  |  |  |   86|    495|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    495|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    495|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    495|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    495|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    495|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 495]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    495|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    495|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    495|                var;                       \
  |  |  |  |   88|    495|        })
  |  |  ------------------
  ------------------
  291|    495|                int r;                                                  \
  292|    495|                                                                        \
  293|    495|                assert(filename);                                       \
  ------------------
  |  |   72|    495|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    495|        do {                                                            \
  |  |  |  |   59|    495|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    495|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 495]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    495|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    495|        } while (false)
  |  |  ------------------
  ------------------
  294|    495|                assert(lvalue);                                         \
  ------------------
  |  |   72|    495|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    495|        do {                                                            \
  |  |  |  |   59|    495|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    495|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 495]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    495|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    495|        } while (false)
  |  |  ------------------
  ------------------
  295|    495|                assert(rvalue);                                         \
  ------------------
  |  |   72|    495|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    495|        do {                                                            \
  |  |  |  |   59|    495|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    495|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 495]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    495|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    495|        } while (false)
  |  |  ------------------
  ------------------
  296|    495|                                                                        \
  297|    495|                r = parser(rvalue, i);                                  \
  298|    495|                if (r < 0)                                              \
  ------------------
  |  Branch (298:21): [True: 218, False: 277]
  ------------------
  299|    495|                        return log_syntax_parse_error(unit, filename, line, r, lvalue, rvalue); \
  ------------------
  |  |  372|    218|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    218|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    218|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    218|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  300|    495|                                                                        \
  301|    495|                return 1;                                               \
  302|    495|        }
config_parse_unsigned:
  289|    406|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  290|    406|                type *i = ASSERT_PTR(data);                             \
  ------------------
  |  |   81|    406|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    406|        ({                                 \
  |  |  |  |   85|    406|                typeof(expr) var = (expr); \
  |  |  |  |   86|    406|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    406|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    406|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    406|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    406|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    406|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 406]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    406|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    406|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    406|                var;                       \
  |  |  |  |   88|    406|        })
  |  |  ------------------
  ------------------
  291|    406|                int r;                                                  \
  292|    406|                                                                        \
  293|    406|                assert(filename);                                       \
  ------------------
  |  |   72|    406|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    406|        do {                                                            \
  |  |  |  |   59|    406|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    406|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 406]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    406|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    406|        } while (false)
  |  |  ------------------
  ------------------
  294|    406|                assert(lvalue);                                         \
  ------------------
  |  |   72|    406|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    406|        do {                                                            \
  |  |  |  |   59|    406|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    406|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 406]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    406|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    406|        } while (false)
  |  |  ------------------
  ------------------
  295|    406|                assert(rvalue);                                         \
  ------------------
  |  |   72|    406|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    406|        do {                                                            \
  |  |  |  |   59|    406|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    406|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 406]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    406|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    406|        } while (false)
  |  |  ------------------
  ------------------
  296|    406|                                                                        \
  297|    406|                r = parser(rvalue, i);                                  \
  298|    406|                if (r < 0)                                              \
  ------------------
  |  Branch (298:21): [True: 209, False: 197]
  ------------------
  299|    406|                        return log_syntax_parse_error(unit, filename, line, r, lvalue, rvalue); \
  ------------------
  |  |  372|    209|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|    209|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|    209|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|    209|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  300|    406|                                                                        \
  301|    406|                return 1;                                               \
  302|    406|        }
config_parse_sec:
  289|  2.93k|        CONFIG_PARSER_PROTOTYPE(function) {                             \
  290|  2.93k|                type *i = ASSERT_PTR(data);                             \
  ------------------
  |  |   81|  2.93k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  2.93k|        ({                                 \
  |  |  |  |   85|  2.93k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  2.93k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  2.93k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  2.93k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  2.93k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  2.93k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  2.93k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.93k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  2.93k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  2.93k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  2.93k|                var;                       \
  |  |  |  |   88|  2.93k|        })
  |  |  ------------------
  ------------------
  291|  2.93k|                int r;                                                  \
  292|  2.93k|                                                                        \
  293|  2.93k|                assert(filename);                                       \
  ------------------
  |  |   72|  2.93k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.93k|        do {                                                            \
  |  |  |  |   59|  2.93k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.93k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.93k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.93k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.93k|        } while (false)
  |  |  ------------------
  ------------------
  294|  2.93k|                assert(lvalue);                                         \
  ------------------
  |  |   72|  2.93k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.93k|        do {                                                            \
  |  |  |  |   59|  2.93k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.93k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.93k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.93k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.93k|        } while (false)
  |  |  ------------------
  ------------------
  295|  2.93k|                assert(rvalue);                                         \
  ------------------
  |  |   72|  2.93k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.93k|        do {                                                            \
  |  |  |  |   59|  2.93k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.93k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.93k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.93k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.93k|        } while (false)
  |  |  ------------------
  ------------------
  296|  2.93k|                                                                        \
  297|  2.93k|                r = parser(rvalue, i);                                  \
  298|  2.93k|                if (r < 0)                                              \
  ------------------
  |  Branch (298:21): [True: 2.39k, False: 533]
  ------------------
  299|  2.93k|                        return log_syntax_parse_error(unit, filename, line, r, lvalue, rvalue); \
  ------------------
  |  |  372|  2.39k|        log_syntax_parse_error_full(unit, config_file, config_line, error, /* critical = */ false, lvalue, rvalue)
  |  |  ------------------
  |  |  |  |  369|  2.39k|        log_syntax_parse_error_internal(unit, config_file, config_line, error, critical, PROJECT_FILE, __LINE__, __func__, lvalue, rvalue)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|  2.39k|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|  2.39k|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  300|  2.93k|                                                                        \
  301|  2.93k|                return 1;                                               \
  302|  2.93k|        }

credential_name_valid:
   49|  2.21k|bool credential_name_valid(const char *s) {
   50|       |        /* We want that credential names are both valid in filenames (since that's our primary way to pass
   51|       |         * them around) and as fdnames (which is how we might want to pass them around eventually) */
   52|  2.21k|        return filename_is_valid(s) && fdname_is_valid(s);
  ------------------
  |  Branch (52:16): [True: 1.01k, False: 1.20k]
  |  Branch (52:40): [True: 253, False: 759]
  ------------------
   53|  2.21k|}
get_credentials_dir:
  109|    253|int get_credentials_dir(const char **ret) {
  110|    253|        return get_credentials_dir_internal("CREDENTIALS_DIRECTORY", ret);
  111|    253|}
get_encrypted_credentials_dir:
  113|     35|int get_encrypted_credentials_dir(const char **ret) {
  114|     35|        return get_credentials_dir_internal("ENCRYPTED_CREDENTIALS_DIRECTORY", ret);
  115|     35|}
read_credential:
  128|  2.15k|int read_credential(const char *name, void **ret, size_t *ret_size) {
  129|  2.15k|        _cleanup_free_ char *fn = NULL;
  ------------------
  |  |   82|  2.15k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  2.15k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  130|  2.15k|        const char *d;
  131|  2.15k|        int r;
  132|       |
  133|  2.15k|        assert(ret);
  ------------------
  |  |   72|  2.15k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.15k|        do {                                                            \
  |  |  |  |   59|  2.15k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.15k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.15k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.15k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.15k|        } while (false)
  |  |  ------------------
  ------------------
  134|       |
  135|  2.15k|        if (!credential_name_valid(name))
  ------------------
  |  Branch (135:13): [True: 1.93k, False: 218]
  ------------------
  136|  1.93k|                return -EINVAL;
  ------------------
  |  |    5|  1.93k|#  define EINVAL 22
  ------------------
  137|       |
  138|    218|        r = get_credentials_dir(&d);
  139|    218|        if (r < 0)
  ------------------
  |  Branch (139:13): [True: 218, False: 0]
  ------------------
  140|    218|                return r;
  141|       |
  142|      0|        fn = path_join(d, name);
  ------------------
  |  |   70|      0|#define path_join(...) path_extend_internal(NULL, __VA_ARGS__, POINTER_MAX)
  |  |  ------------------
  |  |  |  |  159|      0|#define POINTER_MAX ((void*) UINTPTR_MAX)
  |  |  ------------------
  ------------------
  143|      0|        if (!fn)
  ------------------
  |  Branch (143:13): [True: 0, False: 0]
  ------------------
  144|      0|                return -ENOMEM;
  145|       |
  146|      0|        return read_full_file_full(
  147|      0|                        AT_FDCWD, fn,
  ------------------
  |  |  308|      0|#define AT_FDCWD                -100
  ------------------
  148|      0|                        UINT64_MAX, SIZE_MAX,
  149|      0|                        READ_FULL_FILE_SECURE,
  150|      0|                        NULL,
  151|      0|                        (char**) ret, ret_size);
  152|      0|}
creds-util.c:get_credentials_dir_internal:
   93|    288|static int get_credentials_dir_internal(const char *envvar, const char **ret) {
   94|    288|        const char *e;
   95|       |
   96|    288|        assert(ret);
  ------------------
  |  |   72|    288|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    288|        do {                                                            \
  |  |  |  |   59|    288|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    288|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 288]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    288|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    288|        } while (false)
  |  |  ------------------
  ------------------
   97|       |
   98|    288|        e = secure_getenv(envvar);
   99|    288|        if (!e)
  ------------------
  |  Branch (99:13): [True: 288, False: 0]
  ------------------
  100|    288|                return -ENXIO;
  101|       |
  102|      0|        if (!path_is_absolute(e) || !path_is_normalized(e))
  ------------------
  |  Branch (102:13): [True: 0, False: 0]
  |  Branch (102:37): [True: 0, False: 0]
  ------------------
  103|      0|                return -EINVAL;
  ------------------
  |  |    5|      0|#  define EINVAL 22
  ------------------
  104|       |
  105|      0|        *ret = e;
  106|      0|        return 0;
  107|      0|}

dns_label_unescape:
   24|  24.0k|int dns_label_unescape(const char **name, char *dest, size_t sz, DNSLabelFlags flags) {
   25|  24.0k|        const char *n;
   26|  24.0k|        char *d, last_char = 0;
   27|  24.0k|        int r = 0;
   28|       |
   29|  24.0k|        assert(name);
  ------------------
  |  |   72|  24.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  24.0k|        do {                                                            \
  |  |  |  |   59|  24.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  24.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 24.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  24.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  24.0k|        } while (false)
  |  |  ------------------
  ------------------
   30|  24.0k|        assert(*name);
  ------------------
  |  |   72|  24.0k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  24.0k|        do {                                                            \
  |  |  |  |   59|  24.0k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  24.0k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 24.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  24.0k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  24.0k|        } while (false)
  |  |  ------------------
  ------------------
   31|       |
   32|  24.0k|        n = *name;
   33|  24.0k|        d = dest;
   34|       |
   35|  89.5k|        for (;;) {
   36|  89.5k|                if (IN_SET(*n, 0, '.')) {
  ------------------
  |  |  361|  89.5k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 20.7k, False: 68.7k]
  |  |  ------------------
  |  |  362|  89.5k|                bool _found = false;                                    \
  |  |  363|  89.5k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  89.5k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  89.5k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  89.5k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  89.5k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  89.5k|                switch (x) {                                            \
  |  |  368|  20.7k|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|  3.82k|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|  3.82k|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|  3.82k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|  20.7k|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|  20.7k|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 16.9k, False: 72.6k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 3.82k, False: 85.7k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|  20.7k|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|  20.7k|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|  20.7k|                        _found = true;                                  \
  |  |  370|  20.7k|                        break;                                          \
  |  |  371|  68.7k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 68.7k, False: 20.7k]
  |  |  ------------------
  |  |  372|  68.7k|                        ;                                               \
  |  |  373|  89.5k|                }                                                       \
  |  |  374|  89.5k|                _found;                                                 \
  |  |  375|  89.5k|        })
  ------------------
   37|  20.7k|                        if (FLAGS_SET(flags, DNS_LABEL_LDH) && last_char == '-')
  ------------------
  |  |  414|  41.4k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 20.7k]
  |  |  ------------------
  ------------------
  |  Branch (37:64): [True: 0, False: 0]
  ------------------
   38|       |                                /* Trailing dash */
   39|      0|                                return -EINVAL;
   40|       |
   41|  20.7k|                        if (n[0] == '.' && (n[1] != 0 || !FLAGS_SET(flags, DNS_LABEL_LEAVE_TRAILING_DOT)))
  ------------------
  |  |  414|    229|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (41:29): [True: 16.9k, False: 3.82k]
  |  Branch (41:45): [True: 16.6k, False: 229]
  |  Branch (41:58): [True: 229, False: 0]
  ------------------
   42|  16.9k|                                n++;
   43|       |
   44|  20.7k|                        break;
   45|  20.7k|                }
   46|       |
   47|  68.7k|                if (r >= DNS_LABEL_MAX)
  ------------------
  |  |    7|  68.7k|#define DNS_LABEL_MAX 63
  ------------------
  |  Branch (47:21): [True: 196, False: 68.5k]
  ------------------
   48|    196|                        return -EINVAL;
   49|       |
   50|  68.5k|                if (sz <= 0)
  ------------------
  |  Branch (50:21): [True: 0, False: 68.5k]
  ------------------
   51|      0|                        return -ENOBUFS;
   52|       |
   53|  68.5k|                if (*n == '\\') {
  ------------------
  |  Branch (53:21): [True: 3.06k, False: 65.5k]
  ------------------
   54|       |                        /* Escaped character */
   55|  3.06k|                        if (FLAGS_SET(flags, DNS_LABEL_NO_ESCAPES))
  ------------------
  |  |  414|  3.06k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 3.06k]
  |  |  ------------------
  ------------------
   56|      0|                                return -EINVAL;
   57|       |
   58|  3.06k|                        n++;
   59|       |
   60|  3.06k|                        if (*n == 0)
  ------------------
  |  Branch (60:29): [True: 328, False: 2.73k]
  ------------------
   61|       |                                /* Ending NUL */
   62|    328|                                return -EINVAL;
   63|       |
   64|  2.73k|                        else if (IN_SET(*n, '\\', '.')) {
  ------------------
  |  |  361|  2.73k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 680, False: 2.05k]
  |  |  ------------------
  |  |  362|  2.73k|                bool _found = false;                                    \
  |  |  363|  2.73k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  2.73k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  2.73k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  2.73k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  2.73k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  2.73k|                switch (x) {                                            \
  |  |  368|    680|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|    227|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|    227|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|    227|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|    680|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|    680|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 453, False: 2.28k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 227, False: 2.50k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|    680|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|    680|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|    680|                        _found = true;                                  \
  |  |  370|    680|                        break;                                          \
  |  |  371|  2.05k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 2.05k, False: 680]
  |  |  ------------------
  |  |  372|  2.05k|                        ;                                               \
  |  |  373|  2.73k|                }                                                       \
  |  |  374|  2.73k|                _found;                                                 \
  |  |  375|  2.73k|        })
  ------------------
   65|       |                                /* Escaped backslash or dot */
   66|       |
   67|    680|                                if (FLAGS_SET(flags, DNS_LABEL_LDH))
  ------------------
  |  |  414|    680|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 680]
  |  |  ------------------
  ------------------
   68|      0|                                        return -EINVAL;
   69|       |
   70|    680|                                last_char = *n;
   71|    680|                                if (d)
  ------------------
  |  Branch (71:37): [True: 680, False: 0]
  ------------------
   72|    680|                                        *(d++) = *n;
   73|    680|                                sz--;
   74|    680|                                r++;
   75|    680|                                n++;
   76|       |
   77|  2.05k|                        } else if (n[0] >= '0' && n[0] <= '9') {
  ------------------
  |  Branch (77:36): [True: 1.85k, False: 202]
  |  Branch (77:51): [True: 1.63k, False: 222]
  ------------------
   78|  1.63k|                                unsigned k;
   79|       |
   80|       |                                /* Escaped literal ASCII character */
   81|       |
   82|  1.63k|                                if (!(n[1] >= '0' && n[1] <= '9') ||
  ------------------
  |  Branch (82:39): [True: 1.14k, False: 488]
  |  Branch (82:54): [True: 929, False: 213]
  ------------------
   83|  1.63k|                                    !(n[2] >= '0' && n[2] <= '9'))
  ------------------
  |  Branch (83:39): [True: 720, False: 209]
  |  Branch (83:54): [True: 517, False: 203]
  ------------------
   84|  1.11k|                                        return -EINVAL;
   85|       |
   86|    517|                                k = ((unsigned) (n[0] - '0') * 100) +
   87|    517|                                        ((unsigned) (n[1] - '0') * 10) +
   88|    517|                                        ((unsigned) (n[2] - '0'));
   89|       |
   90|       |                                /* Don't allow anything that doesn't fit in 8 bits. Note that we do allow
   91|       |                                 * control characters, as some servers (e.g. cloudflare) are happy to
   92|       |                                 * generate labels with them inside. */
   93|    517|                                if (k > 255)
  ------------------
  |  Branch (93:37): [True: 198, False: 319]
  ------------------
   94|    198|                                        return -EINVAL;
   95|       |
   96|    319|                                if (FLAGS_SET(flags, DNS_LABEL_LDH) &&
  ------------------
  |  |  414|    638|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 319]
  |  |  ------------------
  ------------------
   97|    319|                                    !valid_ldh_char((char) k))
  ------------------
  |  Branch (97:37): [True: 0, False: 0]
  ------------------
   98|      0|                                        return -EINVAL;
   99|       |
  100|    319|                                last_char = (char) k;
  101|    319|                                if (d)
  ------------------
  |  Branch (101:37): [True: 319, False: 0]
  ------------------
  102|    319|                                        *(d++) = (char) k;
  103|    319|                                sz--;
  104|    319|                                r++;
  105|       |
  106|    319|                                n += 3;
  107|    319|                        } else
  108|    424|                                return -EINVAL;
  109|       |
  110|  65.5k|                } else if ((uint8_t) *n >= (uint8_t) ' ' && *n != 127) {
  ------------------
  |  Branch (110:28): [True: 65.3k, False: 202]
  |  Branch (110:61): [True: 64.5k, False: 814]
  ------------------
  111|       |
  112|       |                        /* Normal character */
  113|       |
  114|  64.5k|                        if (FLAGS_SET(flags, DNS_LABEL_LDH)) {
  ------------------
  |  |  414|  64.5k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 64.5k]
  |  |  ------------------
  ------------------
  115|      0|                                if (!valid_ldh_char(*n))
  ------------------
  |  Branch (115:37): [True: 0, False: 0]
  ------------------
  116|      0|                                        return -EINVAL;
  117|      0|                                if (r == 0 && *n == '-')
  ------------------
  |  Branch (117:37): [True: 0, False: 0]
  |  Branch (117:47): [True: 0, False: 0]
  ------------------
  118|       |                                        /* Leading dash */
  119|      0|                                        return -EINVAL;
  120|      0|                        }
  121|       |
  122|  64.5k|                        last_char = *n;
  123|  64.5k|                        if (d)
  ------------------
  |  Branch (123:29): [True: 64.5k, False: 0]
  ------------------
  124|  64.5k|                                *(d++) = *n;
  125|  64.5k|                        sz--;
  126|  64.5k|                        r++;
  127|  64.5k|                        n++;
  128|  64.5k|                } else
  129|  1.01k|                        return -EINVAL;
  130|  68.5k|        }
  131|       |
  132|       |        /* Empty label that is not at the end? */
  133|  20.7k|        if (r == 0 && *n)
  ------------------
  |  Branch (133:13): [True: 2.43k, False: 18.3k]
  |  Branch (133:23): [True: 198, False: 2.23k]
  ------------------
  134|    198|                return -EINVAL;
  135|       |
  136|       |        /* More than one trailing dot? */
  137|  20.5k|        if (n[0] == '.' && !FLAGS_SET(flags, DNS_LABEL_LEAVE_TRAILING_DOT))
  ------------------
  |  |  414|    206|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (137:13): [True: 206, False: 20.3k]
  |  Branch (137:28): [True: 206, False: 0]
  ------------------
  138|    206|                return -EINVAL;
  139|       |
  140|  20.3k|        if (sz >= 1 && d)
  ------------------
  |  Branch (140:13): [True: 20.3k, False: 0]
  |  Branch (140:24): [True: 20.3k, False: 0]
  ------------------
  141|  20.3k|                *d = 0;
  142|       |
  143|  20.3k|        *name = n;
  144|  20.3k|        return r;
  145|  20.5k|}
dns_label_escape:
  207|  18.1k|int dns_label_escape(const char *p, size_t l, char *dest, size_t sz) {
  208|  18.1k|        char *q;
  209|       |
  210|       |        /* DNS labels must be between 1 and 63 characters long. A
  211|       |         * zero-length label does not exist. See RFC 2181, Section
  212|       |         * 11. */
  213|       |
  214|  18.1k|        if (l <= 0 || l > DNS_LABEL_MAX)
  ------------------
  |  |    7|  18.1k|#define DNS_LABEL_MAX 63
  ------------------
  |  Branch (214:13): [True: 0, False: 18.1k]
  |  Branch (214:23): [True: 0, False: 18.1k]
  ------------------
  215|      0|                return -EINVAL;
  216|  18.1k|        if (sz < 1)
  ------------------
  |  Branch (216:13): [True: 0, False: 18.1k]
  ------------------
  217|      0|                return -ENOBUFS;
  218|       |
  219|  18.1k|        assert(p);
  ------------------
  |  |   72|  18.1k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  18.1k|        do {                                                            \
  |  |  |  |   59|  18.1k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  18.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 18.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  18.1k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  18.1k|        } while (false)
  |  |  ------------------
  ------------------
  220|  18.1k|        assert(dest);
  ------------------
  |  |   72|  18.1k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  18.1k|        do {                                                            \
  |  |  |  |   59|  18.1k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  18.1k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 18.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  18.1k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  18.1k|        } while (false)
  |  |  ------------------
  ------------------
  221|       |
  222|  18.1k|        q = dest;
  223|  70.5k|        while (l > 0) {
  ------------------
  |  Branch (223:16): [True: 52.4k, False: 18.1k]
  ------------------
  224|       |
  225|  52.4k|                if (IN_SET(*p, '.', '\\')) {
  ------------------
  |  |  361|  52.4k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 595, False: 51.8k]
  |  |  ------------------
  |  |  362|  52.4k|                bool _found = false;                                    \
  |  |  363|  52.4k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|  52.4k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|  52.4k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|  52.4k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  52.4k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|  52.4k|                switch (x) {                                            \
  |  |  368|    595|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|    389|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|    389|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|    389|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|    595|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|    595|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 206, False: 52.2k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 389, False: 52.0k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|    595|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|    595|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|    595|                        _found = true;                                  \
  |  |  370|    595|                        break;                                          \
  |  |  371|  51.8k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 51.8k, False: 595]
  |  |  ------------------
  |  |  372|  51.8k|                        ;                                               \
  |  |  373|  52.4k|                }                                                       \
  |  |  374|  52.4k|                _found;                                                 \
  |  |  375|  52.4k|        })
  ------------------
  226|       |
  227|       |                        /* Dot or backslash */
  228|       |
  229|    595|                        if (sz < 3)
  ------------------
  |  Branch (229:29): [True: 0, False: 595]
  ------------------
  230|      0|                                return -ENOBUFS;
  231|       |
  232|    595|                        *(q++) = '\\';
  233|    595|                        *(q++) = *p;
  234|       |
  235|    595|                        sz -= 2;
  236|       |
  237|  51.8k|                } else if (IN_SET(*p, '_', '-') ||
  ------------------
  |  |  361|   103k|        ({                                                              \
  |  |  ------------------
  |  |  |  Branch (361:9): [True: 257, False: 51.5k]
  |  |  ------------------
  |  |  362|   103k|                bool _found = false;                                    \
  |  |  363|   103k|                /* If the build breaks in the line below, you need to extend the case macros. We use typeof(+x) \
  |  |  364|   103k|                 * here to widen the type of x if it is a bit-field as this would otherwise be illegal. */      \
  |  |  365|   103k|                static const typeof(+x) __assert_in_set[] _unused_ = { first, __VA_ARGS__ }; \
  |  |  366|   103k|                assert_cc(ELEMENTSOF(__assert_in_set) <= 20);           \
  |  |  ------------------
  |  |  |  |  142|  51.8k|#define assert_cc(expr) _Static_assert(expr, #expr)
  |  |  ------------------
  |  |  367|   103k|                switch (x) {                                            \
  |  |  368|    257|                FOR_EACH_MAKE_CASE(first, __VA_ARGS__)                  \
  |  |  ------------------
  |  |  |  |  356|    186|        GET_CASE_F(__VA_ARGS__,CASE_F_20,CASE_F_19,CASE_F_18,CASE_F_17,CASE_F_16,CASE_F_15,CASE_F_14,CASE_F_13,CASE_F_12,CASE_F_11, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  354|    186|#define GET_CASE_F(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20,NAME,...) NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  357|    186|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  334|    257|#define  CASE_F_2(X, ...) case X:  CASE_F_1( __VA_ARGS__)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  333|    257|#define  CASE_F_1(X)      case X:
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (333:27): [True: 71, False: 51.7k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (334:27): [True: 186, False: 51.6k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  357|    257|                               CASE_F_10,CASE_F_9,CASE_F_8,CASE_F_7,CASE_F_6,CASE_F_5,CASE_F_4,CASE_F_3,CASE_F_2,CASE_F_1) \
  |  |  |  |  358|    257|                   (__VA_ARGS__)
  |  |  ------------------
  |  |  369|    257|                        _found = true;                                  \
  |  |  370|    257|                        break;                                          \
  |  |  371|  51.5k|                default:                                                \
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 51.5k, False: 257]
  |  |  ------------------
  |  |  372|  51.5k|                        ;                                               \
  |  |  373|   103k|                }                                                       \
  |  |  374|   103k|                _found;                                                 \
  |  |  375|  51.8k|        })
  ------------------
  238|  51.8k|                           ascii_isdigit(*p) ||
  ------------------
  |  Branch (238:28): [True: 25.5k, False: 26.0k]
  ------------------
  239|  51.8k|                           ascii_isalpha(*p)) {
  ------------------
  |  Branch (239:28): [True: 11.7k, False: 14.2k]
  ------------------
  240|       |
  241|       |                        /* Proper character */
  242|       |
  243|  37.5k|                        if (sz < 2)
  ------------------
  |  Branch (243:29): [True: 0, False: 37.5k]
  ------------------
  244|      0|                                return -ENOBUFS;
  245|       |
  246|  37.5k|                        *(q++) = *p;
  247|  37.5k|                        sz -= 1;
  248|       |
  249|  37.5k|                } else {
  250|       |
  251|       |                        /* Everything else */
  252|       |
  253|  14.2k|                        if (sz < 5)
  ------------------
  |  Branch (253:29): [True: 0, False: 14.2k]
  ------------------
  254|      0|                                return -ENOBUFS;
  255|       |
  256|  14.2k|                        *(q++) = '\\';
  257|  14.2k|                        *(q++) = '0' + (char) ((uint8_t) *p / 100);
  258|  14.2k|                        *(q++) = '0' + (char) (((uint8_t) *p / 10) % 10);
  259|  14.2k|                        *(q++) = '0' + (char) ((uint8_t) *p % 10);
  260|       |
  261|  14.2k|                        sz -= 4;
  262|  14.2k|                }
  263|       |
  264|  52.4k|                p++;
  265|  52.4k|                l--;
  266|  52.4k|        }
  267|       |
  268|  18.1k|        *q = 0;
  269|  18.1k|        return (int) (q - dest);
  270|  18.1k|}
dns_name_concat:
  404|  5.91k|int dns_name_concat(const char *a, const char *b, DNSLabelFlags flags, char **ret) {
  405|  5.91k|        _cleanup_free_ char *result = NULL;
  ------------------
  |  |   82|  5.91k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  5.91k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  406|  5.91k|        size_t n_result = 0, n_unescaped = 0;
  407|  5.91k|        const char *p;
  408|  5.91k|        bool first = true;
  409|  5.91k|        int r;
  410|       |
  411|  5.91k|        if (a)
  ------------------
  |  Branch (411:13): [True: 5.91k, False: 0]
  ------------------
  412|  5.91k|                p = a;
  413|      0|        else if (b)
  ------------------
  |  Branch (413:18): [True: 0, False: 0]
  ------------------
  414|      0|                p = TAKE_PTR(b);
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  415|      0|        else
  416|      0|                goto finish;
  417|       |
  418|  24.0k|        for (;;) {
  419|  24.0k|                char label[DNS_LABEL_MAX+1];
  420|       |
  421|  24.0k|                r = dns_label_unescape(&p, label, sizeof label, flags);
  422|  24.0k|                if (r < 0)
  ------------------
  |  Branch (422:21): [True: 3.67k, False: 20.3k]
  ------------------
  423|  3.67k|                        return r;
  424|  20.3k|                if (r == 0) {
  ------------------
  |  Branch (424:21): [True: 2.23k, False: 18.1k]
  ------------------
  425|  2.23k|                        if (*p != 0)
  ------------------
  |  Branch (425:29): [True: 0, False: 2.23k]
  ------------------
  426|      0|                                return -EINVAL;
  427|       |
  428|  2.23k|                        if (b) {
  ------------------
  |  Branch (428:29): [True: 0, False: 2.23k]
  ------------------
  429|       |                                /* Now continue with the second string, if there is one */
  430|      0|                                p = TAKE_PTR(b);
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  431|      0|                                continue;
  432|      0|                        }
  433|       |
  434|  2.23k|                        break;
  435|  2.23k|                }
  436|  18.1k|                n_unescaped += r + !first; /* Count unescaped length to make max length determination below */
  437|       |
  438|  18.1k|                if (ret) {
  ------------------
  |  Branch (438:21): [True: 0, False: 18.1k]
  ------------------
  439|      0|                        if (!GREEDY_REALLOC(result, n_result + !first + DNS_LABEL_ESCAPED_MAX))
  ------------------
  |  |  139|      0|        greedy_realloc((void**) &(array), (need), sizeof((array)[0]))
  ------------------
  |  Branch (439:29): [True: 0, False: 0]
  ------------------
  440|      0|                                return -ENOMEM;
  441|       |
  442|      0|                        r = dns_label_escape(label, r, result + n_result + !first, DNS_LABEL_ESCAPED_MAX);
  ------------------
  |  |   10|      0|#define DNS_LABEL_ESCAPED_MAX (DNS_LABEL_MAX*4+1)
  |  |  ------------------
  |  |  |  |    7|      0|#define DNS_LABEL_MAX 63
  |  |  ------------------
  ------------------
  443|      0|                        if (r < 0)
  ------------------
  |  Branch (443:29): [True: 0, False: 0]
  ------------------
  444|      0|                                return r;
  445|       |
  446|      0|                        if (!first)
  ------------------
  |  Branch (446:29): [True: 0, False: 0]
  ------------------
  447|      0|                                result[n_result] = '.';
  448|  18.1k|                } else {
  449|  18.1k|                        char escaped[DNS_LABEL_ESCAPED_MAX];
  450|       |
  451|  18.1k|                        r = dns_label_escape(label, r, escaped, sizeof(escaped));
  452|  18.1k|                        if (r < 0)
  ------------------
  |  Branch (452:29): [True: 0, False: 18.1k]
  ------------------
  453|      0|                                return r;
  454|  18.1k|                }
  455|       |
  456|  18.1k|                n_result += r + !first;
  457|  18.1k|                first = false;
  458|  18.1k|        }
  459|       |
  460|  2.23k|finish:
  461|  2.23k|        if (n_unescaped == 0) {
  ------------------
  |  Branch (461:13): [True: 417, False: 1.81k]
  ------------------
  462|       |                /* Nothing appended? If so, generate at least a single dot, to indicate the DNS root domain */
  463|       |
  464|    417|                if (ret) {
  ------------------
  |  Branch (464:21): [True: 0, False: 417]
  ------------------
  465|      0|                        if (!GREEDY_REALLOC(result, 2)) /* Room for dot, and already pre-allocate space for the trailing NUL byte at the same time */
  ------------------
  |  |  139|      0|        greedy_realloc((void**) &(array), (need), sizeof((array)[0]))
  ------------------
  |  Branch (465:29): [True: 0, False: 0]
  ------------------
  466|      0|                                return -ENOMEM;
  467|       |
  468|      0|                        result[n_result++] = '.';
  469|      0|                }
  470|       |
  471|    417|                n_unescaped++;
  472|    417|        }
  473|       |
  474|  2.23k|        if (n_unescaped > DNS_HOSTNAME_MAX) /* Enforce max length check on unescaped length */
  ------------------
  |  |   13|  2.23k|#define DNS_HOSTNAME_MAX 253
  ------------------
  |  Branch (474:13): [True: 202, False: 2.03k]
  ------------------
  475|    202|                return -EINVAL;
  476|       |
  477|  2.03k|        if (ret) {
  ------------------
  |  Branch (477:13): [True: 0, False: 2.03k]
  ------------------
  478|       |                /* Suffix with a NUL byte */
  479|      0|                if (!GREEDY_REALLOC(result, n_result + 1))
  ------------------
  |  |  139|      0|        greedy_realloc((void**) &(array), (need), sizeof((array)[0]))
  ------------------
  |  Branch (479:21): [True: 0, False: 0]
  ------------------
  480|      0|                        return -ENOMEM;
  481|       |
  482|      0|                result[n_result] = 0;
  483|      0|                *ret = TAKE_PTR(result);
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  484|      0|        }
  485|       |
  486|  2.03k|        return 0;
  487|  2.03k|}

wireguard.c:dns_name_is_valid:
   31|  5.91k|static inline int dns_name_is_valid(const char *s) {
   32|  5.91k|        int r;
   33|       |
   34|       |        /* dns_name_concat() verifies as a side effect */
   35|  5.91k|        r = dns_name_concat(s, NULL, 0, NULL);
   36|  5.91k|        if (r == -EINVAL)
  ------------------
  |  Branch (36:13): [True: 3.88k, False: 2.03k]
  ------------------
   37|  3.88k|                return 0;
   38|  2.03k|        if (r < 0)
  ------------------
  |  Branch (38:13): [True: 0, False: 2.03k]
  ------------------
   39|      0|                return r;
   40|  2.03k|        return 1;
   41|  2.03k|}

mempool_enabled:
    7|  16.0k|bool mempool_enabled(void) {
    8|  16.0k|        static int cache = -1;
    9|       |
   10|  16.0k|        if (!is_main_thread())
  ------------------
  |  Branch (10:13): [True: 0, False: 16.0k]
  ------------------
   11|      0|                return false;
   12|       |
   13|  16.0k|        if (cache < 0)
  ------------------
  |  Branch (13:13): [True: 1, False: 16.0k]
  ------------------
   14|      1|                cache = getenv_bool("SYSTEMD_MEMPOOL") != 0;
   15|       |
   16|  16.0k|        return cache;
   17|  16.0k|}

fw_ctx_free:
   85|  13.0k|FirewallContext *fw_ctx_free(FirewallContext *ctx) {
   86|  13.0k|        if (!ctx)
  ------------------
  |  Branch (86:13): [True: 13.0k, False: 0]
  ------------------
   87|  13.0k|                return NULL;
   88|       |
   89|      0|        fw_nftables_exit(ctx);
   90|       |
   91|      0|        return mfree(ctx);
  ------------------
  |  |  404|      0|        ({                                      \
  |  |  405|      0|                free(memory);                   \
  |  |  406|      0|                (typeof(memory)) NULL;          \
  |  |  407|      0|        })
  ------------------
   92|  13.0k|}

group_record_new:
   13|     70|GroupRecord* group_record_new(void) {
   14|     70|        GroupRecord *h;
   15|       |
   16|     70|        h = new(GroupRecord, 1);
  ------------------
  |  |   17|     70|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
   17|     70|        if (!h)
  ------------------
  |  Branch (17:13): [True: 0, False: 70]
  ------------------
   18|      0|                return NULL;
   19|       |
   20|     70|        *h = (GroupRecord) {
   21|     70|                .n_ref = 1,
   22|     70|                .disposition = _USER_DISPOSITION_INVALID,
   23|     70|                .last_change_usec = UINT64_MAX,
   24|     70|                .gid = GID_INVALID,
  ------------------
  |  |   73|     70|#define GID_INVALID ((gid_t) -1)
  ------------------
   25|     70|        };
   26|       |
   27|     70|        return h;
   28|     70|}
group_record_load:
  175|     40|                UserRecordLoadFlags load_flags) {
  176|       |
  177|     40|        static const sd_json_dispatch_field group_dispatch_table[] = {
  178|     40|                { "groupName",      SD_JSON_VARIANT_STRING,        json_dispatch_user_group_name,  offsetof(GroupRecord, group_name),       SD_JSON_RELAX  },
  179|     40|                { "realm",          SD_JSON_VARIANT_STRING,        json_dispatch_realm,            offsetof(GroupRecord, realm),            0              },
  180|     40|                { "uuid",           SD_JSON_VARIANT_STRING,        sd_json_dispatch_id128,         offsetof(GroupRecord, uuid),             0              },
  181|     40|                { "description",    SD_JSON_VARIANT_STRING,        json_dispatch_gecos,            offsetof(GroupRecord, description),      0              },
  182|     40|                { "disposition",    SD_JSON_VARIANT_STRING,        json_dispatch_user_disposition, offsetof(GroupRecord, disposition),      0              },
  183|     40|                { "service",        SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,        offsetof(GroupRecord, service),          SD_JSON_STRICT },
  184|     40|                { "lastChangeUSec", _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,        offsetof(GroupRecord, last_change_usec), 0              },
  185|     40|                { "gid",            SD_JSON_VARIANT_UNSIGNED,      sd_json_dispatch_uid_gid,       offsetof(GroupRecord, gid),              0              },
  186|     40|                { "members",        SD_JSON_VARIANT_ARRAY,         json_dispatch_user_group_list,  offsetof(GroupRecord, members),          SD_JSON_RELAX  },
  187|     40|                { "administrators", SD_JSON_VARIANT_ARRAY,         json_dispatch_user_group_list,  offsetof(GroupRecord, administrators),   SD_JSON_RELAX  },
  188|       |
  189|     40|                { "privileged",     SD_JSON_VARIANT_OBJECT,        dispatch_privileged,            0,                                       0              },
  190|       |
  191|       |                /* Not defined for now, for groups, but let's at least generate sensible errors about it */
  192|     40|                { "secret",         SD_JSON_VARIANT_OBJECT,        sd_json_dispatch_unsupported,   0,                                       0              },
  193|       |
  194|       |                /* Ignore the perMachine, binding and status stuff here, and process it later, so that it overrides whatever is set above */
  195|     40|                { "perMachine",     SD_JSON_VARIANT_ARRAY,         NULL,                           0,                                       0              },
  196|     40|                { "binding",        SD_JSON_VARIANT_OBJECT,        NULL,                           0,                                       0              },
  197|     40|                { "status",         SD_JSON_VARIANT_OBJECT,        NULL,                           0,                                       0              },
  198|       |
  199|       |                /* Ignore 'signature', we check it with explicit accessors instead */
  200|     40|                { "signature",      SD_JSON_VARIANT_ARRAY,         NULL,                           0,                                       0              },
  201|     40|                {},
  202|     40|        };
  203|       |
  204|     40|        sd_json_dispatch_flags_t json_flags = USER_RECORD_LOAD_FLAGS_TO_JSON_DISPATCH_FLAGS(load_flags);
  205|     40|        int r;
  206|       |
  207|     40|        assert(h);
  ------------------
  |  |   72|     40|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     40|        do {                                                            \
  |  |  |  |   59|     40|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     40|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 40]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     40|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     40|        } while (false)
  |  |  ------------------
  ------------------
  208|     40|        assert(!h->json);
  ------------------
  |  |   72|     40|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     40|        do {                                                            \
  |  |  |  |   59|     40|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     40|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 40]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     40|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     40|        } while (false)
  |  |  ------------------
  ------------------
  209|       |
  210|       |        /* Note that this call will leave a half-initialized record around on failure! */
  211|       |
  212|     40|        if ((USER_RECORD_REQUIRE_MASK(load_flags) & (USER_RECORD_SECRET|USER_RECORD_PRIVILEGED)))
  ------------------
  |  Branch (212:13): [True: 0, False: 40]
  ------------------
  213|      0|                return json_log(v, json_flags, SYNTHETIC_ERRNO(EINVAL), "Secret and privileged section currently not available for groups, refusing.");
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
  214|       |
  215|     40|        r = user_group_record_mangle(v, load_flags, &h->json, &h->mask);
  216|     40|        if (r < 0)
  ------------------
  |  Branch (216:13): [True: 0, False: 40]
  ------------------
  217|      0|                return r;
  218|       |
  219|     40|        r = sd_json_dispatch(h->json, group_dispatch_table, json_flags | SD_JSON_ALLOW_EXTENSIONS, h);
  220|     40|        if (r < 0)
  ------------------
  |  Branch (220:13): [True: 0, False: 40]
  ------------------
  221|      0|                return r;
  222|       |
  223|       |        /* During the parsing operation above we ignored the 'perMachine', 'binding' and 'status' fields, since we want
  224|       |         * them to override the global options. Let's process them now. */
  225|       |
  226|     40|        r = dispatch_per_machine("perMachine", sd_json_variant_by_key(h->json, "perMachine"), json_flags, h);
  227|     40|        if (r < 0)
  ------------------
  |  Branch (227:13): [True: 0, False: 40]
  ------------------
  228|      0|                return r;
  229|       |
  230|     40|        r = dispatch_binding("binding", sd_json_variant_by_key(h->json, "binding"), json_flags, h);
  231|     40|        if (r < 0)
  ------------------
  |  Branch (231:13): [True: 0, False: 40]
  ------------------
  232|      0|                return r;
  233|       |
  234|     40|        r = dispatch_status("status", sd_json_variant_by_key(h->json, "status"), json_flags, h);
  235|     40|        if (r < 0)
  ------------------
  |  Branch (235:13): [True: 0, False: 40]
  ------------------
  236|      0|                return r;
  237|       |
  238|     40|        if (FLAGS_SET(h->mask, USER_RECORD_REGULAR) && !h->group_name)
  ------------------
  |  |  414|     80|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 40, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (238:56): [True: 0, False: 40]
  ------------------
  239|      0|                return json_log(h->json, json_flags, SYNTHETIC_ERRNO(EINVAL), "Group name field missing, refusing.");
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
  240|       |
  241|     40|        r = group_record_augment(h, json_flags);
  242|     40|        if (r < 0)
  ------------------
  |  Branch (242:13): [True: 0, False: 40]
  ------------------
  243|      0|                return r;
  244|       |
  245|     40|        return 0;
  246|     40|}
group_record_build:
  248|     40|int group_record_build(GroupRecord **ret, ...) {
  249|     40|        _cleanup_(sd_json_variant_unrefp) sd_json_variant *v = NULL;
  ------------------
  |  |   78|     40|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  250|     40|        _cleanup_(group_record_unrefp) GroupRecord *g = NULL;
  ------------------
  |  |   78|     40|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  251|     40|        va_list ap;
  252|     40|        int r;
  253|       |
  254|     40|        assert(ret);
  ------------------
  |  |   72|     40|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     40|        do {                                                            \
  |  |  |  |   59|     40|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     40|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 40]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     40|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     40|        } while (false)
  |  |  ------------------
  ------------------
  255|       |
  256|     40|        va_start(ap, ret);
  257|     40|        r = sd_json_buildv(&v, ap);
  258|     40|        va_end(ap);
  259|       |
  260|     40|        if (r < 0)
  ------------------
  |  Branch (260:13): [True: 0, False: 40]
  ------------------
  261|      0|                return r;
  262|       |
  263|     40|        g = group_record_new();
  264|     40|        if (!g)
  ------------------
  |  Branch (264:13): [True: 0, False: 40]
  ------------------
  265|      0|                return -ENOMEM;
  266|       |
  267|     40|        r = group_record_load(g, v, USER_RECORD_LOAD_FULL);
  268|     40|        if (r < 0)
  ------------------
  |  Branch (268:13): [True: 0, False: 40]
  ------------------
  269|      0|                return r;
  270|       |
  271|     40|        *ret = TAKE_PTR(g);
  ------------------
  |  |  388|     40|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|     40|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|     40|        ({                                                       \
  |  |  |  |  |  |  381|     40|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|     40|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|     40|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|     40|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|     40|                _var_;                                           \
  |  |  |  |  |  |  386|     40|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  272|     40|        return 0;
  273|     40|}
group_record_disposition:
  287|     29|UserDisposition group_record_disposition(GroupRecord *h) {
  288|     29|        assert(h);
  ------------------
  |  |   72|     29|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     29|        do {                                                            \
  |  |  |  |   59|     29|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     29|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 29]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     29|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     29|        } while (false)
  |  |  ------------------
  ------------------
  289|       |
  290|     29|        if (h->disposition >= 0)
  ------------------
  |  Branch (290:13): [True: 0, False: 29]
  ------------------
  291|      0|                return h->disposition;
  292|       |
  293|       |        /* If not declared, derive from GID */
  294|       |
  295|     29|        if (!gid_is_valid(h->gid))
  ------------------
  |  Branch (295:13): [True: 0, False: 29]
  ------------------
  296|      0|                return _USER_DISPOSITION_INVALID;
  297|       |
  298|     29|        if (h->gid == 0 || h->gid == GID_NOBODY)
  ------------------
  |  |   76|     22|#define GID_NOBODY ((gid_t) 65534U)
  ------------------
  |  Branch (298:13): [True: 7, False: 22]
  |  Branch (298:28): [True: 0, False: 22]
  ------------------
  299|      7|                return USER_INTRINSIC;
  300|       |
  301|     22|        if (gid_is_system(h->gid))
  ------------------
  |  Branch (301:13): [True: 22, False: 0]
  ------------------
  302|     22|                return USER_SYSTEM;
  303|       |
  304|      0|        if (gid_is_dynamic(h->gid))
  ------------------
  |  Branch (304:13): [True: 0, False: 0]
  ------------------
  305|      0|                return USER_DYNAMIC;
  306|       |
  307|      0|        if (gid_is_container(h->gid))
  ------------------
  |  Branch (307:13): [True: 0, False: 0]
  ------------------
  308|      0|                return USER_CONTAINER;
  309|       |
  310|      0|        if (gid_is_foreign(h->gid))
  ------------------
  |  Branch (310:13): [True: 0, False: 0]
  ------------------
  311|      0|                return USER_FOREIGN;
  312|       |
  313|      0|        if (h->gid > INT32_MAX)
  ------------------
  |  Branch (313:13): [True: 0, False: 0]
  ------------------
  314|      0|                return USER_RESERVED;
  315|       |
  316|      0|        return USER_REGULAR;
  317|      0|}
group_record_match:
  351|     70|bool group_record_match(GroupRecord *h, const UserDBMatch *match) {
  352|     70|        assert(h);
  ------------------
  |  |   72|     70|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     70|        do {                                                            \
  |  |  |  |   59|     70|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     70|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 70]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     70|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     70|        } while (false)
  |  |  ------------------
  ------------------
  353|       |
  354|     70|        if (!match)
  ------------------
  |  Branch (354:13): [True: 0, False: 70]
  ------------------
  355|      0|                return true;
  356|       |
  357|     70|        if (!gid_is_valid(h->gid))
  ------------------
  |  Branch (357:13): [True: 0, False: 70]
  ------------------
  358|      0|                return false;
  359|       |
  360|     70|        if (h->gid < match->gid_min || h->gid > match->gid_max)
  ------------------
  |  Branch (360:13): [True: 0, False: 70]
  |  Branch (360:40): [True: 41, False: 29]
  ------------------
  361|     41|                return false;
  362|       |
  363|     29|        if (!BIT_SET(match->disposition_mask, group_record_disposition(h)))
  ------------------
  |  |   40|     29|#define BIT_SET(bits, i) FLAGS_SET(bits, INDEX_TO_MASK(typeof(bits), i))
  |  |  ------------------
  |  |  |  |  414|    174|        ((~(v) & (flags)) == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (414:19): [True: 0, False: 29]
  |  |  |  |  |  Branch (414:19): [Folded - Ignored]
  |  |  |  |  |  Branch (414:19): [True: 0, False: 29]
  |  |  |  |  |  Branch (414:19): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (363:13): [True: 0, False: 29]
  ------------------
  364|      0|                return false;
  365|       |
  366|     29|        if (!strv_isempty(match->fuzzy_names)) {
  ------------------
  |  Branch (366:13): [True: 0, False: 29]
  ------------------
  367|      0|                const char* names[] = {
  368|      0|                        h->group_name,
  369|      0|                        group_record_group_name_and_realm(h),
  370|      0|                        h->description,
  371|      0|                };
  372|       |
  373|      0|                if (!user_name_fuzzy_match(names, ELEMENTSOF(names), match->fuzzy_names))
  ------------------
  |  |  134|      0|        (__builtin_choose_expr(                                         \
  |  |  135|      0|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  136|      0|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  137|      0|                VOID_0))
  |  |  ------------------
  |  |  |  |  128|      0|#  define VOID_0 ((void)0)
  |  |  ------------------
  ------------------
  |  Branch (373:21): [True: 0, False: 0]
  ------------------
  374|      0|                        return false;
  375|      0|        }
  376|       |
  377|     29|        return true;
  378|     29|}
group-record.c:group_record_free:
   30|     70|static GroupRecord *group_record_free(GroupRecord *g) {
   31|     70|        if (!g)
  ------------------
  |  Branch (31:13): [True: 0, False: 70]
  ------------------
   32|      0|                return NULL;
   33|       |
   34|     70|        free(g->group_name);
   35|     70|        free(g->realm);
   36|     70|        free(g->group_name_and_realm_auto);
   37|     70|        free(g->description);
   38|       |
   39|     70|        strv_free(g->members);
   40|     70|        free(g->service);
   41|     70|        strv_free(g->administrators);
   42|     70|        strv_free_erase(g->hashed_password);
   43|       |
   44|     70|        sd_json_variant_unref(g->json);
   45|       |
   46|     70|        return mfree(g);
  ------------------
  |  |  404|     70|        ({                                      \
  |  |  405|     70|                free(memory);                   \
  |  |  406|     70|                (typeof(memory)) NULL;          \
  |  |  407|     70|        })
  ------------------
   47|     70|}
group-record.c:dispatch_per_machine:
   89|     40|static int dispatch_per_machine(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) {
   90|       |
   91|     40|        static const sd_json_dispatch_field per_machine_dispatch_table[] = {
   92|     40|                { "matchMachineId", _SD_JSON_VARIANT_TYPE_INVALID, NULL,                           0,                                     0             },
   93|     40|                { "matchHostname",  _SD_JSON_VARIANT_TYPE_INVALID, NULL,                           0,                                     0             },
   94|     40|                { "gid",            SD_JSON_VARIANT_UNSIGNED,      sd_json_dispatch_uid_gid,       offsetof(GroupRecord, gid),            0             },
   95|     40|                { "members",        SD_JSON_VARIANT_ARRAY,         json_dispatch_user_group_list,  offsetof(GroupRecord, members),        SD_JSON_RELAX },
   96|     40|                { "administrators", SD_JSON_VARIANT_ARRAY,         json_dispatch_user_group_list,  offsetof(GroupRecord, administrators), SD_JSON_RELAX },
   97|     40|                {},
   98|     40|        };
   99|       |
  100|     40|        sd_json_variant *e;
  101|     40|        int r;
  102|       |
  103|     40|        if (!variant)
  ------------------
  |  Branch (103:13): [True: 40, False: 0]
  ------------------
  104|     40|                return 0;
  105|       |
  106|      0|        if (!sd_json_variant_is_array(variant))
  ------------------
  |  Branch (106:13): [True: 0, False: 0]
  ------------------
  107|      0|                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an array.", strna(name));
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
  108|       |
  109|      0|        JSON_VARIANT_ARRAY_FOREACH(e, variant) {
  ------------------
  |  |   37|      0|        _JSON_VARIANT_ARRAY_FOREACH(i, v, UNIQ_T(state, UNIQ))
  |  |  ------------------
  |  |  |  |   30|      0|        for (struct json_variant_foreach_state state = { (v), 0 };      \
  |  |  |  |   31|      0|             sd_json_variant_is_array(state.variant) &&                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (31:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   32|      0|                     state.idx < sd_json_variant_elements(state.variant) && \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (32:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   33|      0|                     ({ i = sd_json_variant_by_index(state.variant, state.idx); \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (33:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   34|      0|                             true; });                                  \
  |  |  |  |   35|      0|             state.idx++)
  |  |  ------------------
  ------------------
  110|      0|                if (!sd_json_variant_is_object(e))
  ------------------
  |  Branch (110:21): [True: 0, False: 0]
  ------------------
  111|      0|                        return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an array of objects.", strna(name));
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
  112|       |
  113|      0|                r = per_machine_match(e, flags);
  114|      0|                if (r < 0)
  ------------------
  |  Branch (114:21): [True: 0, False: 0]
  ------------------
  115|      0|                        return r;
  116|      0|                if (r == 0)
  ------------------
  |  Branch (116:21): [True: 0, False: 0]
  ------------------
  117|      0|                        continue;
  118|       |
  119|      0|                r = sd_json_dispatch(e, per_machine_dispatch_table, flags, userdata);
  120|      0|                if (r < 0)
  ------------------
  |  Branch (120:21): [True: 0, False: 0]
  ------------------
  121|      0|                        return r;
  122|      0|        }
  123|       |
  124|      0|        return 0;
  125|      0|}
group-record.c:dispatch_binding:
   61|     40|static int dispatch_binding(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) {
   62|       |
   63|     40|        static const sd_json_dispatch_field binding_dispatch_table[] = {
   64|     40|                { "gid", SD_JSON_VARIANT_UNSIGNED, sd_json_dispatch_uid_gid, offsetof(GroupRecord, gid), 0 },
   65|     40|                {},
   66|     40|        };
   67|       |
   68|     40|        sd_json_variant *m;
   69|     40|        sd_id128_t mid;
   70|     40|        int r;
   71|       |
   72|     40|        if (!variant)
  ------------------
  |  Branch (72:13): [True: 40, False: 0]
  ------------------
   73|     40|                return 0;
   74|       |
   75|      0|        if (!sd_json_variant_is_object(variant))
  ------------------
  |  Branch (75:13): [True: 0, False: 0]
  ------------------
   76|      0|                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an object.", strna(name));
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
   77|       |
   78|      0|        r = sd_id128_get_machine(&mid);
   79|      0|        if (r < 0)
  ------------------
  |  Branch (79:13): [True: 0, False: 0]
  ------------------
   80|      0|                return json_log(variant, flags, r, "Failed to determine machine ID: %m");
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
   81|       |
   82|      0|        m = sd_json_variant_by_key(variant, SD_ID128_TO_STRING(mid));
  ------------------
  |  |   42|      0|#define SD_ID128_TO_STRING(id) sd_id128_to_string((id), (char[SD_ID128_STRING_MAX]) {})
  ------------------
   83|      0|        if (!m)
  ------------------
  |  Branch (83:13): [True: 0, False: 0]
  ------------------
   84|      0|                return 0;
   85|       |
   86|      0|        return sd_json_dispatch(m, binding_dispatch_table, flags, userdata);
   87|      0|}
group-record.c:dispatch_status:
  127|     40|static int dispatch_status(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) {
  128|       |
  129|     40|        static const sd_json_dispatch_field status_dispatch_table[] = {
  130|     40|                { "service", SD_JSON_VARIANT_STRING, sd_json_dispatch_string, offsetof(GroupRecord, service), SD_JSON_STRICT },
  131|     40|                {},
  132|     40|        };
  133|       |
  134|     40|        sd_json_variant *m;
  135|     40|        sd_id128_t mid;
  136|     40|        int r;
  137|       |
  138|     40|        if (!variant)
  ------------------
  |  Branch (138:13): [True: 40, False: 0]
  ------------------
  139|     40|                return 0;
  140|       |
  141|      0|        if (!sd_json_variant_is_object(variant))
  ------------------
  |  Branch (141:13): [True: 0, False: 0]
  ------------------
  142|      0|                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an object.", strna(name));
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
  143|       |
  144|      0|        r = sd_id128_get_machine(&mid);
  145|      0|        if (r < 0)
  ------------------
  |  Branch (145:13): [True: 0, False: 0]
  ------------------
  146|      0|                return json_log(variant, flags, r, "Failed to determine machine ID: %m");
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
  147|       |
  148|      0|        m = sd_json_variant_by_key(variant, SD_ID128_TO_STRING(mid));
  ------------------
  |  |   42|      0|#define SD_ID128_TO_STRING(id) sd_id128_to_string((id), (char[SD_ID128_STRING_MAX]) {})
  ------------------
  149|      0|        if (!m)
  ------------------
  |  Branch (149:13): [True: 0, False: 0]
  ------------------
  150|      0|                return 0;
  151|       |
  152|      0|        return sd_json_dispatch(m, status_dispatch_table, flags, userdata);
  153|      0|}
group-record.c:group_record_augment:
  155|     40|static int group_record_augment(GroupRecord *h, sd_json_dispatch_flags_t json_flags) {
  156|     40|        assert(h);
  ------------------
  |  |   72|     40|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     40|        do {                                                            \
  |  |  |  |   59|     40|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     40|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 40]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     40|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     40|        } while (false)
  |  |  ------------------
  ------------------
  157|       |
  158|     40|        if (!FLAGS_SET(h->mask, USER_RECORD_REGULAR))
  ------------------
  |  |  414|     40|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (158:13): [True: 0, False: 40]
  ------------------
  159|      0|                return 0;
  160|       |
  161|     40|        assert(h->group_name);
  ------------------
  |  |   72|     40|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     40|        do {                                                            \
  |  |  |  |   59|     40|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     40|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 40]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     40|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     40|        } while (false)
  |  |  ------------------
  ------------------
  162|       |
  163|     40|        if (!h->group_name_and_realm_auto && h->realm) {
  ------------------
  |  Branch (163:13): [True: 40, False: 0]
  |  Branch (163:46): [True: 0, False: 40]
  ------------------
  164|      0|                h->group_name_and_realm_auto = strjoin(h->group_name, "@", h->realm);
  ------------------
  |  |   91|      0|#define strjoin(a, ...) strextend_with_separator_internal(NULL, NULL, a, __VA_ARGS__, NULL)
  ------------------
  165|      0|                if (!h->group_name_and_realm_auto)
  ------------------
  |  Branch (165:21): [True: 0, False: 0]
  ------------------
  166|      0|                        return json_log_oom(h->json, json_flags);
  ------------------
  |  |  109|      0|        json_log(variant, flags, SYNTHETIC_ERRNO(ENOMEM), "Out of memory.")
  |  |  ------------------
  |  |  |  |  101|      0|        ({                                                              \
  |  |  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  106|      0|        })
  |  |  ------------------
  ------------------
  167|      0|        }
  168|       |
  169|     40|        return 0;
  170|     40|}

gethostname_full:
  312|    105|int gethostname_full(GetHostnameFlags flags, char **ret) {
  313|    105|        _cleanup_free_ char *buf = NULL, *fallback = NULL;
  ------------------
  |  |   82|    105|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    105|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  314|    105|        struct utsname u;
  315|    105|        const char *s;
  316|       |
  317|    105|        assert(ret);
  ------------------
  |  |   72|    105|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    105|        do {                                                            \
  |  |  |  |   59|    105|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    105|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 105]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    105|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    105|        } while (false)
  |  |  ------------------
  ------------------
  318|       |
  319|    105|        assert_se(uname(&u) >= 0);
  ------------------
  |  |   65|    105|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    105|        do {                                                            \
  |  |  |  |   59|    105|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    105|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 105]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    105|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    105|        } while (false)
  |  |  ------------------
  ------------------
  320|       |
  321|    105|        s = u.nodename;
  322|    105|        if (isempty(s) || streq(s, "(none)") ||
  ------------------
  |  |   46|    210|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 0, False: 105]
  |  |  ------------------
  ------------------
  |  Branch (322:13): [True: 0, False: 105]
  ------------------
  323|    105|            (!FLAGS_SET(flags, GET_HOSTNAME_ALLOW_LOCALHOST) && is_localhost(s)) ||
  ------------------
  |  |  414|    210|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (323:14): [True: 0, False: 105]
  |  Branch (323:65): [True: 0, False: 0]
  ------------------
  324|    105|            (FLAGS_SET(flags, GET_HOSTNAME_SHORT) && s[0] == '.')) {
  ------------------
  |  |  414|    210|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 105]
  |  |  ------------------
  ------------------
  |  Branch (324:54): [True: 0, False: 0]
  ------------------
  325|      0|                if (!FLAGS_SET(flags, GET_HOSTNAME_FALLBACK_DEFAULT))
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (325:21): [True: 0, False: 0]
  ------------------
  326|      0|                        return -ENXIO;
  327|       |
  328|      0|                s = fallback = get_default_hostname();
  329|      0|                if (!s)
  ------------------
  |  Branch (329:21): [True: 0, False: 0]
  ------------------
  330|      0|                        return -ENOMEM;
  331|       |
  332|      0|                if (FLAGS_SET(flags, GET_HOSTNAME_SHORT) && s[0] == '.')
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (332:61): [True: 0, False: 0]
  ------------------
  333|      0|                        return -ENXIO;
  334|      0|        }
  335|       |
  336|    105|        if (FLAGS_SET(flags, GET_HOSTNAME_SHORT))
  ------------------
  |  |  414|    105|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 105]
  |  |  ------------------
  ------------------
  337|      0|                buf = strdupcspn(s, ".");
  338|    105|        else
  339|    105|                buf = strdup(s);
  340|    105|        if (!buf)
  ------------------
  |  Branch (340:13): [True: 0, False: 105]
  ------------------
  341|      0|                return -ENOMEM;
  342|       |
  343|    105|        *ret = TAKE_PTR(buf);
  ------------------
  |  |  388|    105|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|    105|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|    105|        ({                                                       \
  |  |  |  |  |  |  381|    105|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|    105|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|    105|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|    105|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|    105|                _var_;                                           \
  |  |  |  |  |  |  386|    105|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  344|    105|        return 0;
  345|    105|}

condition.c:gethostname_malloc:
   42|    105|static inline char* gethostname_malloc(void) {
   43|    105|        char *s;
   44|       |
   45|    105|        if (gethostname_full(GET_HOSTNAME_ALLOW_LOCALHOST | GET_HOSTNAME_FALLBACK_DEFAULT, &s) < 0)
  ------------------
  |  Branch (45:13): [True: 0, False: 105]
  ------------------
   46|      0|                return NULL;
   47|       |
   48|    105|        return s;
   49|    105|}

ip_protocol_from_name:
   24|  4.32k|int ip_protocol_from_name(const char *name) {
   25|  4.32k|        const struct ip_protocol_name *sc;
   26|       |
   27|  4.32k|        assert(name);
  ------------------
  |  |   72|  4.32k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  4.32k|        do {                                                            \
  |  |  |  |   59|  4.32k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  4.32k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 4.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  4.32k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  4.32k|        } while (false)
  |  |  ------------------
  ------------------
   28|       |
   29|  4.32k|        sc = lookup_ip_protocol(name, strlen(name));
   30|  4.32k|        if (!sc)
  ------------------
  |  Branch (30:13): [True: 4.10k, False: 219]
  ------------------
   31|  4.10k|                return -EINVAL;
   32|       |
   33|    219|        return sc->id;
   34|  4.32k|}
parse_ip_protocol_full:
   36|  2.27k|int parse_ip_protocol_full(const char *s, bool relaxed) {
   37|  2.27k|        int r, p;
   38|       |
   39|  2.27k|        assert(s);
  ------------------
  |  |   72|  2.27k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.27k|        do {                                                            \
  |  |  |  |   59|  2.27k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.27k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.27k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.27k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.27k|        } while (false)
  |  |  ------------------
  ------------------
   40|       |
   41|  2.27k|        if (isempty(s))
  ------------------
  |  Branch (41:13): [True: 0, False: 2.27k]
  ------------------
   42|      0|                return IPPROTO_IP;
   43|       |
   44|       |        /* People commonly use lowercase protocol names, which we can look up very quickly, so let's try that
   45|       |         * first. */
   46|  2.27k|        r = ip_protocol_from_name(s);
   47|  2.27k|        if (r >= 0)
  ------------------
  |  Branch (47:13): [True: 219, False: 2.05k]
  ------------------
   48|    219|                return r;
   49|       |
   50|       |        /* Do not use strdupa() here, as the input string may come from command line or config files. */
   51|  2.05k|        _cleanup_free_ char *t = strdup(s);
  ------------------
  |  |   82|  2.05k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  2.05k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
   52|  2.05k|        if (!t)
  ------------------
  |  Branch (52:13): [True: 0, False: 2.05k]
  ------------------
   53|      0|                return -ENOMEM;
   54|       |
   55|  2.05k|        r = ip_protocol_from_name(ascii_strlower(t));
   56|  2.05k|        if (r >= 0)
  ------------------
  |  Branch (56:13): [True: 0, False: 2.05k]
  ------------------
   57|      0|                return r;
   58|       |
   59|  2.05k|        r = safe_atoi(t, &p);
   60|  2.05k|        if (r < 0)
  ------------------
  |  Branch (60:13): [True: 1.09k, False: 959]
  ------------------
   61|  1.09k|                return r;
   62|    959|        if (p < 0)
  ------------------
  |  Branch (62:13): [True: 440, False: 519]
  ------------------
   63|    440|                return -ERANGE;
   64|       |
   65|       |        /* If @relaxed, we don't check that we have a name for the protocol. */
   66|    519|        if (!relaxed && !ip_protocol_to_name(p))
  ------------------
  |  Branch (66:13): [True: 0, False: 519]
  |  Branch (66:25): [True: 0, False: 0]
  ------------------
   67|      0|                return -EPROTONOSUPPORT;
   68|       |
   69|    519|        return p;
   70|    519|}

config_parse_net_condition:
  197|  2.58k|                void *userdata) {
  198|       |
  199|  2.58k|        ConditionType cond = ltype;
  200|  2.58k|        Condition **list = data, *c;
  201|  2.58k|        bool negate;
  202|       |
  203|  2.58k|        assert(filename);
  ------------------
  |  |   72|  2.58k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.58k|        do {                                                            \
  |  |  |  |   59|  2.58k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.58k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.58k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.58k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.58k|        } while (false)
  |  |  ------------------
  ------------------
  204|  2.58k|        assert(lvalue);
  ------------------
  |  |   72|  2.58k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.58k|        do {                                                            \
  |  |  |  |   59|  2.58k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.58k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.58k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.58k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.58k|        } while (false)
  |  |  ------------------
  ------------------
  205|  2.58k|        assert(rvalue);
  ------------------
  |  |   72|  2.58k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.58k|        do {                                                            \
  |  |  |  |   59|  2.58k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.58k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.58k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.58k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.58k|        } while (false)
  |  |  ------------------
  ------------------
  206|  2.58k|        assert(data);
  ------------------
  |  |   72|  2.58k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.58k|        do {                                                            \
  |  |  |  |   59|  2.58k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.58k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.58k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.58k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.58k|        } while (false)
  |  |  ------------------
  ------------------
  207|       |
  208|  2.58k|        if (isempty(rvalue)) {
  ------------------
  |  Branch (208:13): [True: 335, False: 2.25k]
  ------------------
  209|    335|                *list = condition_free_list_type(*list, cond);
  210|    335|                return 0;
  211|    335|        }
  212|       |
  213|  2.25k|        negate = rvalue[0] == '!';
  214|  2.25k|        if (negate)
  ------------------
  |  Branch (214:13): [True: 668, False: 1.58k]
  ------------------
  215|    668|                rvalue++;
  216|       |
  217|  2.25k|        c = condition_new(cond, rvalue, false, negate);
  218|  2.25k|        if (!c)
  ------------------
  |  Branch (218:13): [True: 0, False: 2.25k]
  ------------------
  219|      0|                return log_oom();
  ------------------
  |  |  280|      0|#define log_oom()           log_oom_full(LOG_ERR)
  |  |  ------------------
  |  |  |  |  279|      0|#define log_oom_full(level) log_oom_internal(level, PROJECT_FILE, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  220|       |
  221|       |        /* Drop previous assignment. */
  222|  2.25k|        *list = condition_free_list_type(*list, cond);
  223|       |
  224|  2.25k|        LIST_PREPEND(conditions, *list, c);
  ------------------
  |  |   31|  2.25k|        ({                                                              \
  |  |   32|  2.25k|                typeof(*(head)) **_head = &(head), *_item = (item);     \
  |  |   33|  2.25k|                assert(_item);                                          \
  |  |  ------------------
  |  |  |  |   72|  2.25k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|  2.25k|        do {                                                            \
  |  |  |  |  |  |   59|  2.25k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   95|  2.25k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.25k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   60|  2.25k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   61|  2.25k|        } while (false)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   34|  2.25k|                if ((_item->name##_next = *_head))                      \
  |  |  ------------------
  |  |  |  Branch (34:21): [True: 473, False: 1.77k]
  |  |  ------------------
  |  |   35|  2.25k|                        _item->name##_next->name##_prev = _item;        \
  |  |   36|  2.25k|                _item->name##_prev = NULL;                              \
  |  |   37|  2.25k|                *_head = _item;                                         \
  |  |   38|  2.25k|                _item;                                                  \
  |  |   39|  2.25k|        })
  ------------------
  225|  2.25k|        return 0;
  226|  2.25k|}

path_simplify_and_warn:
   39|  10.6k|                const char *lvalue) {
   40|       |
   41|  10.6k|        bool fatal = flags & PATH_CHECK_FATAL;
   42|  10.6k|        int level = fatal ? LOG_ERR : LOG_WARNING;
  ------------------
  |  Branch (42:21): [True: 0, False: 10.6k]
  ------------------
   43|       |
   44|  10.6k|        assert(path);
  ------------------
  |  |   72|  10.6k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  10.6k|        do {                                                            \
  |  |  |  |   59|  10.6k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  10.6k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 10.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  10.6k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  10.6k|        } while (false)
  |  |  ------------------
  ------------------
   45|  10.6k|        assert(!FLAGS_SET(flags, PATH_CHECK_ABSOLUTE | PATH_CHECK_RELATIVE));
  ------------------
  |  |   72|  10.6k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  10.6k|        do {                                                            \
  |  |  |  |   59|  10.6k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  10.6k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 10.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  10.6k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  10.6k|        } while (false)
  |  |  ------------------
  ------------------
   46|  10.6k|        assert(!FLAGS_SET(flags, PATH_CHECK_NON_API_VFS | PATH_CHECK_NON_API_VFS_DEV_OK));
  ------------------
  |  |   72|  10.6k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  10.6k|        do {                                                            \
  |  |  |  |   59|  10.6k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  10.6k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 10.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  10.6k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  10.6k|        } while (false)
  |  |  ------------------
  ------------------
   47|  10.6k|        assert(lvalue);
  ------------------
  |  |   72|  10.6k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  10.6k|        do {                                                            \
  |  |  |  |   59|  10.6k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  10.6k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 10.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  10.6k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  10.6k|        } while (false)
  |  |  ------------------
  ------------------
   48|       |
   49|  10.6k|        if (!utf8_is_valid(path))
  ------------------
  |  Branch (49:13): [True: 0, False: 10.6k]
  ------------------
   50|      0|                return log_syntax_invalid_utf8(unit, LOG_ERR, filename, line, path);
  ------------------
  |  |  361|      0|        ({                                                              \
  |  |  362|      0|                int _level = (level);                                   \
  |  |  363|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (363:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  364|      0|                        ? log_syntax_invalid_utf8_internal(unit, _level, config_file, config_line, PROJECT_FILE, __LINE__, __func__, rvalue) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  365|      0|                        : -EINVAL;                                      \
  |  |  366|      0|        })
  ------------------
   51|       |
   52|  10.6k|        if (flags & (PATH_CHECK_ABSOLUTE | PATH_CHECK_RELATIVE)) {
  ------------------
  |  Branch (52:13): [True: 10.6k, False: 0]
  ------------------
   53|  10.6k|                bool absolute;
   54|       |
   55|  10.6k|                absolute = path_is_absolute(path);
   56|       |
   57|  10.6k|                if (!absolute && (flags & PATH_CHECK_ABSOLUTE))
  ------------------
  |  Branch (57:21): [True: 518, False: 10.1k]
  |  Branch (57:34): [True: 518, False: 0]
  ------------------
   58|    518|                        return log_syntax(unit, level, filename, line, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  353|    518|        ({                                                              \
  |  |  354|    518|                int _level = (level), _e = (error);                     \
  |  |  355|    518|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 518]
  |  |  ------------------
  |  |  356|    518|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (356:125): [True: 0, False: 0]
  |  |  ------------------
  |  |  357|    518|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    518|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    518|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    518|        })
  ------------------
   59|  10.6k|                                          "%s= path is not absolute%s: %s",
   60|  10.6k|                                          lvalue, fatal ? "" : ", ignoring", path);
   61|       |
   62|  10.1k|                if (absolute && (flags & PATH_CHECK_RELATIVE))
  ------------------
  |  Branch (62:21): [True: 10.1k, False: 0]
  |  Branch (62:33): [True: 0, False: 10.1k]
  ------------------
   63|      0|                        return log_syntax(unit, level, filename, line, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  353|      0|        ({                                                              \
  |  |  354|      0|                int _level = (level), _e = (error);                     \
  |  |  355|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  356|      0|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (356:125): [True: 0, False: 0]
  |  |  ------------------
  |  |  357|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|      0|        })
  ------------------
   64|  10.1k|                                          "%s= path is absolute%s: %s",
   65|  10.1k|                                          lvalue, fatal ? "" : ", ignoring", path);
   66|  10.1k|        }
   67|       |
   68|  10.1k|        path_simplify_full(path, flags & PATH_KEEP_TRAILING_SLASH ? PATH_SIMPLIFY_KEEP_TRAILING_SLASH : 0);
  ------------------
  |  Branch (68:34): [True: 0, False: 10.1k]
  ------------------
   69|       |
   70|  10.1k|        if (!path_is_valid(path))
  ------------------
  |  Branch (70:13): [True: 294, False: 9.87k]
  ------------------
   71|    294|                return log_syntax(unit, level, filename, line, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  353|    294|        ({                                                              \
  |  |  354|    294|                int _level = (level), _e = (error);                     \
  |  |  355|    294|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 294]
  |  |  ------------------
  |  |  356|    294|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (356:125): [True: 0, False: 0]
  |  |  ------------------
  |  |  357|    294|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    294|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    294|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    294|        })
  ------------------
   72|  10.1k|                                  "%s= path has invalid length (%zu bytes)%s.",
   73|  10.1k|                                  lvalue, strlen(path), fatal ? "" : ", ignoring");
   74|       |
   75|  9.87k|        if (!path_is_normalized(path))
  ------------------
  |  Branch (75:13): [True: 216, False: 9.65k]
  ------------------
   76|    216|                return log_syntax(unit, level, filename, line, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  353|    216|        ({                                                              \
  |  |  354|    216|                int _level = (level), _e = (error);                     \
  |  |  355|    216|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 216]
  |  |  ------------------
  |  |  356|    216|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (356:125): [True: 0, False: 0]
  |  |  ------------------
  |  |  357|    216|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    216|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    216|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    216|        })
  ------------------
   77|  9.87k|                                  "%s= path is not normalized%s: %s",
   78|  9.87k|                                  lvalue, fatal ? "" : ", ignoring", path);
   79|       |
   80|  9.65k|        if (!validate_api_vfs(path, flags))
  ------------------
  |  Branch (80:13): [True: 699, False: 8.95k]
  ------------------
   81|    699|                return log_syntax(unit, level, filename, line, SYNTHETIC_ERRNO(EINVAL),
  ------------------
  |  |  353|    699|        ({                                                              \
  |  |  354|    699|                int _level = (level), _e = (error);                     \
  |  |  355|    699|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 699]
  |  |  ------------------
  |  |  356|    699|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (356:125): [True: 0, False: 0]
  |  |  ------------------
  |  |  357|    699|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    699|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    699|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    699|        })
  ------------------
   82|  9.65k|                                  "%s= path is below API VFS%s: %s",
   83|  9.65k|                                  lvalue, fatal ? ", refusing" : ", ignoring",
   84|  9.65k|                                  path);
   85|       |
   86|  8.95k|        return 0;
   87|  9.65k|}
parse-helpers.c:validate_api_vfs:
   17|  9.65k|static bool validate_api_vfs(const char *path, PathSimplifyWarnFlags flags) {
   18|       |
   19|  9.65k|        assert(path);
  ------------------
  |  |   72|  9.65k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  9.65k|        do {                                                            \
  |  |  |  |   59|  9.65k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  9.65k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 9.65k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  9.65k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  9.65k|        } while (false)
  |  |  ------------------
  ------------------
   20|       |
   21|  9.65k|        if ((flags & (PATH_CHECK_NON_API_VFS|PATH_CHECK_NON_API_VFS_DEV_OK)) == 0)
  ------------------
  |  Branch (21:13): [True: 0, False: 9.65k]
  ------------------
   22|      0|                return true;
   23|       |
   24|  9.65k|        if (!path_below_api_vfs(path))
  ------------------
  |  Branch (24:13): [True: 8.95k, False: 699]
  ------------------
   25|  8.95k|                return true;
   26|       |
   27|    699|        if (FLAGS_SET(flags, PATH_CHECK_NON_API_VFS_DEV_OK) && path_startswith(path, "/dev"))
  ------------------
  |  |  414|  1.39k|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 699]
  |  |  ------------------
  ------------------
  |  Branch (27:64): [True: 0, False: 0]
  ------------------
   28|      0|                return true;
   29|       |
   30|    699|        return false;
   31|    699|}

in_addr_port_ifindex_name_from_string_auto:
  210|  13.7k|                char **ret_server_name) {
  211|       |
  212|  13.7k|        _cleanup_free_ char *buf1 = NULL, *buf2 = NULL, *name = NULL;
  ------------------
  |  |   82|  13.7k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  13.7k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  213|  13.7k|        int family, ifindex = 0, r;
  214|  13.7k|        union in_addr_union a;
  215|  13.7k|        uint16_t port = 0;
  216|  13.7k|        const char *m;
  217|       |
  218|  13.7k|        assert(s);
  ------------------
  |  |   72|  13.7k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  13.7k|        do {                                                            \
  |  |  |  |   59|  13.7k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  13.7k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 13.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  13.7k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  13.7k|        } while (false)
  |  |  ------------------
  ------------------
  219|       |
  220|       |        /* This accepts the following:
  221|       |         * 192.168.0.1:53#example.com
  222|       |         * [2001:4860:4860::8888]:53%eth0#example.com
  223|       |         *
  224|       |         * If ret_port is NULL, then the port cannot be specified.
  225|       |         * If ret_ifindex is NULL, then the interface index cannot be specified.
  226|       |         * If ret_server_name is NULL, then server_name cannot be specified.
  227|       |         *
  228|       |         * ret_family is always AF_INET or AF_INET6.
  229|       |         */
  230|       |
  231|  13.7k|        m = strchr(s, '#');
  232|  13.7k|        if (m) {
  ------------------
  |  Branch (232:13): [True: 202, False: 13.5k]
  ------------------
  233|    202|                if (!ret_server_name)
  ------------------
  |  Branch (233:21): [True: 202, False: 0]
  ------------------
  234|    202|                        return -EINVAL;
  235|       |
  236|      0|                if (isempty(m + 1))
  ------------------
  |  Branch (236:21): [True: 0, False: 0]
  ------------------
  237|      0|                        return -EINVAL;
  238|       |
  239|      0|                name = strdup(m + 1);
  240|      0|                if (!name)
  ------------------
  |  Branch (240:21): [True: 0, False: 0]
  ------------------
  241|      0|                        return -ENOMEM;
  242|       |
  243|      0|                s = buf1 = strndup(s, m - s);
  244|      0|                if (!buf1)
  ------------------
  |  Branch (244:21): [True: 0, False: 0]
  ------------------
  245|      0|                        return -ENOMEM;
  246|      0|        }
  247|       |
  248|  13.5k|        m = strchr(s, '%');
  249|  13.5k|        if (m) {
  ------------------
  |  Branch (249:13): [True: 226, False: 13.2k]
  ------------------
  250|    226|                if (!ret_ifindex)
  ------------------
  |  Branch (250:21): [True: 226, False: 0]
  ------------------
  251|    226|                        return -EINVAL;
  252|       |
  253|      0|                if (isempty(m + 1))
  ------------------
  |  Branch (253:21): [True: 0, False: 0]
  ------------------
  254|      0|                        return -EINVAL;
  255|       |
  256|      0|                if (!ifname_valid_full(m + 1, IFNAME_VALID_ALTERNATIVE | IFNAME_VALID_NUMERIC))
  ------------------
  |  Branch (256:21): [True: 0, False: 0]
  ------------------
  257|      0|                        return -EINVAL; /* We want to return -EINVAL for syntactically invalid names,
  258|       |                                         * and -ENODEV for valid but nonexistent interfaces. */
  259|       |
  260|      0|                ifindex = rtnl_resolve_interface(NULL, m + 1);
  261|      0|                if (ifindex < 0)
  ------------------
  |  Branch (261:21): [True: 0, False: 0]
  ------------------
  262|      0|                        return ifindex;
  263|       |
  264|      0|                s = buf2 = strndup(s, m - s);
  265|      0|                if (!buf2)
  ------------------
  |  Branch (265:21): [True: 0, False: 0]
  ------------------
  266|      0|                        return -ENOMEM;
  267|      0|        }
  268|       |
  269|  13.2k|        m = strrchr(s, ':');
  270|  13.2k|        if (m) {
  ------------------
  |  Branch (270:13): [True: 6.47k, False: 6.81k]
  ------------------
  271|  6.47k|                if (*s == '[') {
  ------------------
  |  Branch (271:21): [True: 1.63k, False: 4.84k]
  ------------------
  272|  1.63k|                        _cleanup_free_ char *ip_str = NULL;
  ------------------
  |  |   82|  1.63k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  1.63k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  273|       |
  274|  1.63k|                        if (!ret_port)
  ------------------
  |  Branch (274:29): [True: 0, False: 1.63k]
  ------------------
  275|      0|                                return -EINVAL;
  276|       |
  277|  1.63k|                        if (*(m - 1) != ']')
  ------------------
  |  Branch (277:29): [True: 534, False: 1.10k]
  ------------------
  278|    534|                                return -EINVAL;
  279|       |
  280|  1.10k|                        family = AF_INET6;
  281|       |
  282|  1.10k|                        r = parse_ip_port(m + 1, &port);
  283|  1.10k|                        if (r < 0)
  ------------------
  |  Branch (283:29): [True: 477, False: 623]
  ------------------
  284|    477|                                return r;
  285|       |
  286|    623|                        ip_str = strndup(s + 1, m - s - 2);
  287|    623|                        if (!ip_str)
  ------------------
  |  Branch (287:29): [True: 0, False: 623]
  ------------------
  288|      0|                                return -ENOMEM;
  289|       |
  290|    623|                        r = in_addr_from_string(family, ip_str, &a);
  291|    623|                        if (r < 0)
  ------------------
  |  Branch (291:29): [True: 417, False: 206]
  ------------------
  292|    417|                                return r;
  293|  4.84k|                } else {
  294|       |                        /* First try to parse the string as IPv6 address without port number */
  295|  4.84k|                        r = in_addr_from_string(AF_INET6, s, &a);
  296|  4.84k|                        if (r < 0) {
  ------------------
  |  Branch (296:29): [True: 4.65k, False: 194]
  ------------------
  297|       |                                /* Then the input should be IPv4 address with port number */
  298|  4.65k|                                _cleanup_free_ char *ip_str = NULL;
  ------------------
  |  |   82|  4.65k|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|  4.65k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  299|       |
  300|  4.65k|                                if (!ret_port)
  ------------------
  |  Branch (300:37): [True: 0, False: 4.65k]
  ------------------
  301|      0|                                        return -EINVAL;
  302|       |
  303|  4.65k|                                family = AF_INET;
  304|       |
  305|  4.65k|                                ip_str = strndup(s, m - s);
  306|  4.65k|                                if (!ip_str)
  ------------------
  |  Branch (306:37): [True: 0, False: 4.65k]
  ------------------
  307|      0|                                        return -ENOMEM;
  308|       |
  309|  4.65k|                                r = in_addr_from_string(family, ip_str, &a);
  310|  4.65k|                                if (r < 0)
  ------------------
  |  Branch (310:37): [True: 4.26k, False: 389]
  ------------------
  311|  4.26k|                                        return r;
  312|       |
  313|    389|                                r = parse_ip_port(m + 1, &port);
  314|    389|                                if (r < 0)
  ------------------
  |  Branch (314:37): [True: 194, False: 195]
  ------------------
  315|    194|                                        return r;
  316|    389|                        } else
  317|    194|                                family = AF_INET6;
  318|  4.84k|                }
  319|  6.81k|        } else {
  320|  6.81k|                family = AF_INET;
  321|  6.81k|                r = in_addr_from_string(family, s, &a);
  322|  6.81k|                if (r < 0)
  ------------------
  |  Branch (322:21): [True: 6.62k, False: 196]
  ------------------
  323|  6.62k|                        return r;
  324|  6.81k|        }
  325|       |
  326|    791|        if (ret_family)
  ------------------
  |  Branch (326:13): [True: 791, False: 0]
  ------------------
  327|    791|                *ret_family = family;
  328|    791|        if (ret_address)
  ------------------
  |  Branch (328:13): [True: 791, False: 0]
  ------------------
  329|    791|                *ret_address = a;
  330|    791|        if (ret_port)
  ------------------
  |  Branch (330:13): [True: 791, False: 0]
  ------------------
  331|    791|                *ret_port = port;
  332|    791|        if (ret_ifindex)
  ------------------
  |  Branch (332:13): [True: 0, False: 791]
  ------------------
  333|      0|                *ret_ifindex = ifindex;
  334|    791|        if (ret_server_name)
  ------------------
  |  Branch (334:13): [True: 0, False: 791]
  ------------------
  335|      0|                *ret_server_name = TAKE_PTR(name);
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  336|       |
  337|    791|        return r;
  338|  13.2k|}

nss_passwd_to_user_record:
   51|     44|                UserRecord **ret) {
   52|       |
   53|     44|        _cleanup_(user_record_unrefp) UserRecord *hr = NULL;
  ------------------
  |  |   78|     44|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
   54|     44|        int r;
   55|       |
   56|     44|        assert(pwd);
  ------------------
  |  |   72|     44|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     44|        do {                                                            \
  |  |  |  |   59|     44|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     44|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 44]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     44|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     44|        } while (false)
  |  |  ------------------
  ------------------
   57|       |
   58|     44|        if (isempty(pwd->pw_name))
  ------------------
  |  Branch (58:13): [True: 0, False: 44]
  ------------------
   59|      0|                return -EINVAL;
   60|       |
   61|     44|        if (spwd && !streq_ptr(spwd->sp_namp, pwd->pw_name))
  ------------------
  |  Branch (61:13): [True: 0, False: 44]
  |  Branch (61:21): [True: 0, False: 0]
  ------------------
   62|      0|                return -EINVAL;
   63|       |
   64|     44|        hr = user_record_new();
   65|     44|        if (!hr)
  ------------------
  |  Branch (65:13): [True: 0, False: 44]
  ------------------
   66|      0|                return -ENOMEM;
   67|       |
   68|     44|        r = free_and_strdup(&hr->user_name, pwd->pw_name);
   69|     44|        if (r < 0)
  ------------------
  |  Branch (69:13): [True: 0, False: 44]
  ------------------
   70|      0|                return r;
   71|       |
   72|       |        /* Some bad NSS modules synthesize GECOS fields with embedded ":" or "\n" characters, which are not
   73|       |         * something we can output in /etc/passwd compatible format, since these are record separators
   74|       |         * there. We normally refuse that, but we need to maintain compatibility with arbitrary NSS modules,
   75|       |         * hence let's do what glibc does: mangle the data to fit the format. */
   76|     44|        if (isempty(pwd->pw_gecos) || streq_ptr(pwd->pw_gecos, hr->user_name))
  ------------------
  |  Branch (76:13): [True: 1, False: 43]
  |  Branch (76:39): [True: 27, False: 16]
  ------------------
   77|     28|                hr->real_name = mfree(hr->real_name);
  ------------------
  |  |  404|     28|        ({                                      \
  |  |  405|     28|                free(memory);                   \
  |  |  406|     28|                (typeof(memory)) NULL;          \
  |  |  407|     28|        })
  ------------------
   78|     16|        else if (valid_gecos(pwd->pw_gecos)) {
  ------------------
  |  Branch (78:18): [True: 16, False: 0]
  ------------------
   79|     16|                r = free_and_strdup(&hr->real_name, pwd->pw_gecos);
   80|     16|                if (r < 0)
  ------------------
  |  Branch (80:21): [True: 0, False: 16]
  ------------------
   81|      0|                        return r;
   82|     16|        } else {
   83|      0|                _cleanup_free_ char *mangled = NULL;
  ------------------
  |  |   82|      0|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
   84|       |
   85|      0|                mangled = mangle_gecos(pwd->pw_gecos);
   86|      0|                if (!mangled)
  ------------------
  |  Branch (86:21): [True: 0, False: 0]
  ------------------
   87|      0|                        return -ENOMEM;
   88|       |
   89|      0|                free_and_replace(hr->real_name, mangled);
  ------------------
  |  |   49|      0|        free_and_replace_full(a, b, free)
  |  |  ------------------
  |  |  |  |   10|      0|        ({                                      \
  |  |  |  |   11|      0|                typeof(a)* _a = &(a);           \
  |  |  |  |   12|      0|                typeof(b)* _b = &(b);           \
  |  |  |  |   13|      0|                free_func(*_a);                 \
  |  |  |  |   14|      0|                *_a = *_b;                      \
  |  |  |  |   15|      0|                *_b = NULL;                     \
  |  |  |  |   16|      0|                0;                              \
  |  |  |  |   17|      0|        })
  |  |  ------------------
  ------------------
   90|      0|        }
   91|       |
   92|     44|        r = free_and_strdup(&hr->home_directory, utf8_only(empty_to_null(pwd->pw_dir)));
  ------------------
  |  |   59|     44|        ({                                              \
  |  |   60|     44|                const char *_p = (p);                   \
  |  |   61|     44|                (typeof(p)) (isempty(_p) ? NULL : _p);  \
  |  |  ------------------
  |  |  |  Branch (61:30): [True: 0, False: 44]
  |  |  ------------------
  |  |   62|     44|        })
  ------------------
   93|     44|        if (r < 0)
  ------------------
  |  Branch (93:13): [True: 0, False: 44]
  ------------------
   94|      0|                return r;
   95|       |
   96|     44|        r = free_and_strdup(&hr->shell, utf8_only(empty_to_null(pwd->pw_shell)));
  ------------------
  |  |   59|     44|        ({                                              \
  |  |   60|     44|                const char *_p = (p);                   \
  |  |   61|     44|                (typeof(p)) (isempty(_p) ? NULL : _p);  \
  |  |  ------------------
  |  |  |  Branch (61:30): [True: 0, False: 44]
  |  |  ------------------
  |  |   62|     44|        })
  ------------------
   97|     44|        if (r < 0)
  ------------------
  |  Branch (97:13): [True: 0, False: 44]
  ------------------
   98|      0|                return r;
   99|       |
  100|     44|        hr->uid = pwd->pw_uid;
  101|     44|        hr->gid = pwd->pw_gid;
  102|       |
  103|     44|        if (spwd &&
  ------------------
  |  Branch (103:13): [True: 0, False: 44]
  ------------------
  104|     44|            looks_like_hashed_password(utf8_only(spwd->sp_pwdp))) { /* Ignore locked, disabled, and mojibake passwords */
  ------------------
  |  Branch (104:13): [True: 0, False: 0]
  ------------------
  105|      0|                strv_free_erase(hr->hashed_password);
  106|      0|                hr->hashed_password = strv_new(spwd->sp_pwdp);
  ------------------
  |  |   94|      0|#define strv_new(...) strv_new_internal(__VA_ARGS__, NULL)
  ------------------
  107|      0|                if (!hr->hashed_password)
  ------------------
  |  Branch (107:21): [True: 0, False: 0]
  ------------------
  108|      0|                        return -ENOMEM;
  109|      0|        } else
  110|     44|                hr->hashed_password = strv_free_erase(hr->hashed_password);
  111|       |
  112|       |        /* shadow-utils suggests using "chage -E 0" (or -E 1, depending on which man page you check)
  113|       |         * for locking a whole account, hence check for that. Note that it also defines a way to lock
  114|       |         * just a password instead of the whole account, but that's mostly pointless in times of
  115|       |         * password-less authorization, hence let's not bother. */
  116|       |
  117|     44|        SET_IF(hr->locked,
  ------------------
  |  |   22|     44|        field = (condition) ? (value) : (fallback)
  |  |  ------------------
  |  |  |  Branch (22:18): [True: 0, False: 44]
  |  |  |  Branch (22:18): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  118|     44|               spwd && spwd->sp_expire >= 0,
  119|     44|               spwd->sp_expire <= 1, -1);
  120|       |
  121|     44|        SET_IF(hr->not_after_usec,
  ------------------
  |  |   22|     88|        field = (condition) ? (value) : (fallback)
  |  |  ------------------
  |  |  |  Branch (22:18): [True: 0, False: 44]
  |  |  |  Branch (22:18): [True: 0, False: 0]
  |  |  |  Branch (22:18): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  122|     44|               spwd && spwd->sp_expire > 1 && (uint64_t) spwd->sp_expire < (UINT64_MAX-1)/USEC_PER_DAY,
  123|     44|               spwd->sp_expire * USEC_PER_DAY, UINT64_MAX);
  124|       |
  125|     44|        SET_IF(hr->password_change_now,
  ------------------
  |  |   22|     44|        field = (condition) ? (value) : (fallback)
  |  |  ------------------
  |  |  |  Branch (22:18): [True: 0, False: 44]
  |  |  |  Branch (22:18): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  126|     44|               spwd && spwd->sp_lstchg >= 0,
  127|     44|               spwd->sp_lstchg == 0, -1);
  128|       |
  129|     44|        SET_IF(hr->last_password_change_usec,
  ------------------
  |  |   22|     88|        field = (condition) ? (value) : (fallback)
  |  |  ------------------
  |  |  |  Branch (22:18): [True: 0, False: 44]
  |  |  |  Branch (22:18): [True: 0, False: 0]
  |  |  |  Branch (22:18): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  130|     44|               spwd && spwd->sp_lstchg > 0 && (uint64_t) spwd->sp_lstchg <= (UINT64_MAX-1)/USEC_PER_DAY,
  131|     44|               spwd->sp_lstchg * USEC_PER_DAY, UINT64_MAX);
  132|       |
  133|     44|        SET_IF(hr->password_change_min_usec,
  ------------------
  |  |   22|     88|        field = (condition) ? (value) : (fallback)
  |  |  ------------------
  |  |  |  Branch (22:18): [True: 0, False: 44]
  |  |  |  Branch (22:18): [True: 0, False: 0]
  |  |  |  Branch (22:18): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  134|     44|               spwd && spwd->sp_min > 0 && (uint64_t) spwd->sp_min <= (UINT64_MAX-1)/USEC_PER_DAY,
  135|     44|               spwd->sp_min * USEC_PER_DAY, UINT64_MAX);
  136|       |
  137|     44|        SET_IF(hr->password_change_max_usec,
  ------------------
  |  |   22|     88|        field = (condition) ? (value) : (fallback)
  |  |  ------------------
  |  |  |  Branch (22:18): [True: 0, False: 44]
  |  |  |  Branch (22:18): [True: 0, False: 0]
  |  |  |  Branch (22:18): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  138|     44|               spwd && spwd->sp_max > 0 && (uint64_t) spwd->sp_max <= (UINT64_MAX-1)/USEC_PER_DAY,
  139|     44|               spwd->sp_max * USEC_PER_DAY, UINT64_MAX);
  140|       |
  141|     44|        SET_IF(hr->password_change_warn_usec,
  ------------------
  |  |   22|     88|        field = (condition) ? (value) : (fallback)
  |  |  ------------------
  |  |  |  Branch (22:18): [True: 0, False: 44]
  |  |  |  Branch (22:18): [True: 0, False: 0]
  |  |  |  Branch (22:18): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  142|     44|               spwd && spwd->sp_warn > 0 && (uint64_t) spwd->sp_warn <= (UINT64_MAX-1)/USEC_PER_DAY,
  143|     44|               spwd->sp_warn * USEC_PER_DAY, UINT64_MAX);
  144|       |
  145|     44|        SET_IF(hr->password_change_inactive_usec,
  ------------------
  |  |   22|     88|        field = (condition) ? (value) : (fallback)
  |  |  ------------------
  |  |  |  Branch (22:18): [True: 0, False: 44]
  |  |  |  Branch (22:18): [True: 0, False: 0]
  |  |  |  Branch (22:18): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  146|     44|               spwd && spwd->sp_inact > 0 && (uint64_t) spwd->sp_inact <= (UINT64_MAX-1)/USEC_PER_DAY,
  147|     44|               spwd->sp_inact * USEC_PER_DAY, UINT64_MAX);
  148|       |
  149|     44|        hr->json = sd_json_variant_unref(hr->json);
  150|     44|        r = sd_json_buildo(
  ------------------
  |  |  276|     44|        sd_json_build((ret), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
  |  |  ------------------
  |  |  |  |  233|     44|#define SD_JSON_BUILD_OBJECT(...) _SD_JSON_BUILD_OBJECT_BEGIN, __VA_ARGS__, _SD_JSON_BUILD_OBJECT_END
  |  |  ------------------
  ------------------
  151|     44|                        &hr->json,
  152|     44|                        SD_JSON_BUILD_PAIR("userName", SD_JSON_BUILD_STRING(hr->user_name)),
  153|     44|                        SD_JSON_BUILD_PAIR("uid", SD_JSON_BUILD_UNSIGNED(hr->uid)),
  154|     44|                        SD_JSON_BUILD_PAIR("gid", SD_JSON_BUILD_UNSIGNED(user_record_gid(hr))),
  155|     44|                        SD_JSON_BUILD_PAIR_CONDITION(!!hr->real_name, "realName", SD_JSON_BUILD_STRING(hr->real_name)),
  156|     44|                        SD_JSON_BUILD_PAIR_CONDITION(!!hr->home_directory, "homeDirectory", SD_JSON_BUILD_STRING(hr->home_directory)),
  157|     44|                        SD_JSON_BUILD_PAIR_CONDITION(!!hr->shell, "shell", SD_JSON_BUILD_STRING(hr->shell)),
  158|     44|                        SD_JSON_BUILD_PAIR_CONDITION(!strv_isempty(hr->hashed_password), "privileged", SD_JSON_BUILD_OBJECT(SD_JSON_BUILD_PAIR("hashedPassword", SD_JSON_BUILD_STRV(hr->hashed_password)))),
  159|     44|                        SD_JSON_BUILD_PAIR_CONDITION(hr->locked >= 0, "locked", SD_JSON_BUILD_BOOLEAN(hr->locked)),
  160|     44|                        SD_JSON_BUILD_PAIR_CONDITION(hr->not_after_usec != UINT64_MAX, "notAfterUSec", SD_JSON_BUILD_UNSIGNED(hr->not_after_usec)),
  161|     44|                        SD_JSON_BUILD_PAIR_CONDITION(hr->password_change_now >= 0, "passwordChangeNow", SD_JSON_BUILD_BOOLEAN(hr->password_change_now)),
  162|     44|                        SD_JSON_BUILD_PAIR_CONDITION(hr->last_password_change_usec != UINT64_MAX, "lastPasswordChangeUSec", SD_JSON_BUILD_UNSIGNED(hr->last_password_change_usec)),
  163|     44|                        SD_JSON_BUILD_PAIR_CONDITION(hr->password_change_min_usec != UINT64_MAX, "passwordChangeMinUSec", SD_JSON_BUILD_UNSIGNED(hr->password_change_min_usec)),
  164|     44|                        SD_JSON_BUILD_PAIR_CONDITION(hr->password_change_max_usec != UINT64_MAX, "passwordChangeMaxUSec", SD_JSON_BUILD_UNSIGNED(hr->password_change_max_usec)),
  165|     44|                        SD_JSON_BUILD_PAIR_CONDITION(hr->password_change_warn_usec != UINT64_MAX, "passwordChangeWarnUSec", SD_JSON_BUILD_UNSIGNED(hr->password_change_warn_usec)),
  166|     44|                        SD_JSON_BUILD_PAIR_CONDITION(hr->password_change_inactive_usec != UINT64_MAX, "passwordChangeInactiveUSec", SD_JSON_BUILD_UNSIGNED(hr->password_change_inactive_usec)));
  167|     44|        if (r < 0)
  ------------------
  |  Branch (167:13): [True: 0, False: 44]
  ------------------
  168|      0|                return r;
  169|       |
  170|     44|        hr->mask = USER_RECORD_REGULAR |
  171|     44|                (!strv_isempty(hr->hashed_password) ? USER_RECORD_PRIVILEGED : 0);
  ------------------
  |  Branch (171:18): [True: 0, False: 44]
  ------------------
  172|       |
  173|     44|        if (ret)
  ------------------
  |  Branch (173:13): [True: 44, False: 0]
  ------------------
  174|     44|                *ret = TAKE_PTR(hr);
  ------------------
  |  |  388|     44|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|     44|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|     44|        ({                                                       \
  |  |  |  |  |  |  381|     44|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|     44|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|     44|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|     44|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|     44|                _var_;                                           \
  |  |  |  |  |  |  386|     44|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  175|     44|        return 0;
  176|     44|}
nss_user_record_by_name:
  219|    244|                UserRecord **ret) {
  220|       |
  221|    244|        _cleanup_free_ char *sbuf = NULL;
  ------------------
  |  |   82|    244|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    244|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  222|    244|        _cleanup_free_ struct passwd *result = NULL;
  ------------------
  |  |   82|    244|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    244|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  223|    244|        bool incomplete = false;
  224|    244|        struct spwd spwd, *sresult = NULL;
  225|    244|        int r;
  226|       |
  227|    244|        assert(name);
  ------------------
  |  |   72|    244|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    244|        do {                                                            \
  |  |  |  |   59|    244|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    244|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 244]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    244|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    244|        } while (false)
  |  |  ------------------
  ------------------
  228|       |
  229|    244|        r = getpwnam_malloc(name, &result);
  230|    244|        if (r < 0)
  ------------------
  |  Branch (230:13): [True: 240, False: 4]
  ------------------
  231|    240|                return r;
  232|       |
  233|      4|        if (with_shadow) {
  ------------------
  |  Branch (233:13): [True: 0, False: 4]
  ------------------
  234|      0|                r = nss_spwd_for_passwd(result, &spwd, &sbuf);
  235|      0|                if (r < 0) {
  ------------------
  |  Branch (235:21): [True: 0, False: 0]
  ------------------
  236|      0|                        log_debug_errno(r, "Failed to do shadow lookup for user %s, ignoring: %m", name);
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  237|      0|                        incomplete = ERRNO_IS_PRIVILEGE(r);
  238|      0|                } else
  239|      0|                        sresult = &spwd;
  240|      0|        } else
  241|      4|                incomplete = true;
  242|       |
  243|      4|        r = nss_passwd_to_user_record(result, sresult, ret);
  244|      4|        if (r < 0)
  ------------------
  |  Branch (244:13): [True: 0, False: 4]
  ------------------
  245|      0|                return r;
  246|       |
  247|      4|        if (ret)
  ------------------
  |  Branch (247:13): [True: 4, False: 0]
  ------------------
  248|      4|                (*ret)->incomplete = incomplete;
  249|      4|        return 0;
  250|      4|}
nss_user_record_by_uid:
  255|    171|                UserRecord **ret) {
  256|       |
  257|    171|        _cleanup_free_ char *sbuf = NULL;
  ------------------
  |  |   82|    171|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    171|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  258|    171|        _cleanup_free_ struct passwd *result = NULL;
  ------------------
  |  |   82|    171|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    171|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  259|    171|        bool incomplete = false;
  260|    171|        struct spwd spwd, *sresult = NULL;
  261|    171|        int r;
  262|       |
  263|    171|        r = getpwuid_malloc(uid, &result);
  264|    171|        if (r < 0)
  ------------------
  |  Branch (264:13): [True: 131, False: 40]
  ------------------
  265|    131|                return r;
  266|       |
  267|     40|        if (with_shadow)  {
  ------------------
  |  Branch (267:13): [True: 0, False: 40]
  ------------------
  268|      0|                r = nss_spwd_for_passwd(result, &spwd, &sbuf);
  269|      0|                if (r < 0) {
  ------------------
  |  Branch (269:21): [True: 0, False: 0]
  ------------------
  270|      0|                        log_debug_errno(r, "Failed to do shadow lookup for UID " UID_FMT ", ignoring: %m", uid);
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  271|      0|                        incomplete = ERRNO_IS_PRIVILEGE(r);
  272|      0|                } else
  273|      0|                        sresult = &spwd;
  274|      0|        } else
  275|     40|                incomplete = true;
  276|       |
  277|     40|        r = nss_passwd_to_user_record(result, sresult, ret);
  278|     40|        if (r < 0)
  ------------------
  |  Branch (278:13): [True: 0, False: 40]
  ------------------
  279|      0|                return r;
  280|       |
  281|     40|        if (ret)
  ------------------
  |  Branch (281:13): [True: 40, False: 0]
  ------------------
  282|     40|                (*ret)->incomplete = incomplete;
  283|     40|        return 0;
  284|     40|}
nss_group_to_group_record:
  289|     30|                GroupRecord **ret) {
  290|       |
  291|     30|        _cleanup_(group_record_unrefp) GroupRecord *g = NULL;
  ------------------
  |  |   78|     30|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  292|     30|        int r;
  293|       |
  294|     30|        assert(grp);
  ------------------
  |  |   72|     30|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     30|        do {                                                            \
  |  |  |  |   59|     30|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     30|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 30]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     30|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     30|        } while (false)
  |  |  ------------------
  ------------------
  295|       |
  296|     30|        if (isempty(grp->gr_name))
  ------------------
  |  Branch (296:13): [True: 0, False: 30]
  ------------------
  297|      0|                return -EINVAL;
  298|       |
  299|     30|        if (sgrp && !streq_ptr(sgrp->sg_namp, grp->gr_name))
  ------------------
  |  Branch (299:13): [True: 0, False: 30]
  |  Branch (299:21): [True: 0, False: 0]
  ------------------
  300|      0|                return -EINVAL;
  301|       |
  302|     30|        g = group_record_new();
  303|     30|        if (!g)
  ------------------
  |  Branch (303:13): [True: 0, False: 30]
  ------------------
  304|      0|                return -ENOMEM;
  305|       |
  306|     30|        g->group_name = strdup(grp->gr_name);
  307|     30|        if (!g->group_name)
  ------------------
  |  Branch (307:13): [True: 0, False: 30]
  ------------------
  308|      0|                return -ENOMEM;
  309|       |
  310|     30|        r = strv_extend_strv_utf8_only(&g->members, grp->gr_mem, false);
  311|     30|        if (r < 0)
  ------------------
  |  Branch (311:13): [True: 0, False: 30]
  ------------------
  312|      0|                return r;
  313|       |
  314|     30|        g->gid = grp->gr_gid;
  315|       |
  316|     30|        if (sgrp) {
  ------------------
  |  Branch (316:13): [True: 0, False: 30]
  ------------------
  317|      0|                if (looks_like_hashed_password(utf8_only(sgrp->sg_passwd))) {
  ------------------
  |  Branch (317:21): [True: 0, False: 0]
  ------------------
  318|      0|                        g->hashed_password = strv_new(sgrp->sg_passwd);
  ------------------
  |  |   94|      0|#define strv_new(...) strv_new_internal(__VA_ARGS__, NULL)
  ------------------
  319|      0|                        if (!g->hashed_password)
  ------------------
  |  Branch (319:29): [True: 0, False: 0]
  ------------------
  320|      0|                                return -ENOMEM;
  321|      0|                }
  322|       |
  323|      0|                r = strv_extend_strv_utf8_only(&g->members, sgrp->sg_mem, true);
  324|      0|                if (r < 0)
  ------------------
  |  Branch (324:21): [True: 0, False: 0]
  ------------------
  325|      0|                        return r;
  326|       |
  327|      0|                r = strv_extend_strv_utf8_only(&g->administrators, sgrp->sg_adm, false);
  328|      0|                if (r < 0)
  ------------------
  |  Branch (328:21): [True: 0, False: 0]
  ------------------
  329|      0|                        return r;
  330|      0|        }
  331|       |
  332|     30|        r = sd_json_buildo(
  ------------------
  |  |  276|     30|        sd_json_build((ret), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
  |  |  ------------------
  |  |  |  |  233|     30|#define SD_JSON_BUILD_OBJECT(...) _SD_JSON_BUILD_OBJECT_BEGIN, __VA_ARGS__, _SD_JSON_BUILD_OBJECT_END
  |  |  ------------------
  ------------------
  333|     30|                        &g->json,
  334|     30|                        SD_JSON_BUILD_PAIR("groupName", SD_JSON_BUILD_STRING(g->group_name)),
  335|     30|                        SD_JSON_BUILD_PAIR("gid", SD_JSON_BUILD_UNSIGNED(g->gid)),
  336|     30|                        SD_JSON_BUILD_PAIR_CONDITION(!strv_isempty(g->members), "members", SD_JSON_BUILD_STRV(g->members)),
  337|     30|                        SD_JSON_BUILD_PAIR_CONDITION(!strv_isempty(g->hashed_password), "privileged", SD_JSON_BUILD_OBJECT(SD_JSON_BUILD_PAIR("hashedPassword", SD_JSON_BUILD_STRV(g->hashed_password)))),
  338|     30|                        SD_JSON_BUILD_PAIR_CONDITION(!strv_isempty(g->administrators), "administrators", SD_JSON_BUILD_STRV(g->administrators)));
  339|     30|        if (r < 0)
  ------------------
  |  Branch (339:13): [True: 0, False: 30]
  ------------------
  340|      0|                return r;
  341|       |
  342|     30|        g->mask = USER_RECORD_REGULAR |
  343|     30|                (!strv_isempty(g->hashed_password) ? USER_RECORD_PRIVILEGED : 0);
  ------------------
  |  Branch (343:18): [True: 0, False: 30]
  ------------------
  344|       |
  345|     30|        if (ret)
  ------------------
  |  Branch (345:13): [True: 30, False: 0]
  ------------------
  346|     30|                *ret = TAKE_PTR(g);
  ------------------
  |  |  388|     30|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|     30|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|     30|        ({                                                       \
  |  |  |  |  |  |  381|     30|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|     30|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|     30|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|     30|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|     30|                _var_;                                           \
  |  |  |  |  |  |  386|     30|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  347|     30|        return 0;
  348|     30|}
nss_group_record_by_name:
  391|    285|                GroupRecord **ret) {
  392|       |
  393|    285|        _cleanup_free_ char *sbuf = NULL;
  ------------------
  |  |   82|    285|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    285|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  394|    285|        _cleanup_free_ struct group *result = NULL;
  ------------------
  |  |   82|    285|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    285|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  395|    285|        bool incomplete = false;
  396|    285|        struct sgrp sgrp, *sresult = NULL;
  397|    285|        int r;
  398|       |
  399|    285|        assert(name);
  ------------------
  |  |   72|    285|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    285|        do {                                                            \
  |  |  |  |   59|    285|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    285|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 285]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    285|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    285|        } while (false)
  |  |  ------------------
  ------------------
  400|       |
  401|    285|        r = getgrnam_malloc(name, &result);
  402|    285|        if (r < 0)
  ------------------
  |  Branch (402:13): [True: 284, False: 1]
  ------------------
  403|    284|                return r;
  404|       |
  405|      1|        if (with_shadow) {
  ------------------
  |  Branch (405:13): [True: 0, False: 1]
  ------------------
  406|      0|                r = nss_sgrp_for_group(result, &sgrp, &sbuf);
  407|      0|                if (r < 0) {
  ------------------
  |  Branch (407:21): [True: 0, False: 0]
  ------------------
  408|      0|                        log_debug_errno(r, "Failed to do shadow lookup for group %s, ignoring: %m", result->gr_name);
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  409|      0|                        incomplete = ERRNO_IS_PRIVILEGE(r);
  410|      0|                } else
  411|      0|                        sresult = &sgrp;
  412|      0|        } else
  413|      1|                incomplete = true;
  414|       |
  415|      1|        r = nss_group_to_group_record(result, sresult, ret);
  416|      1|        if (r < 0)
  ------------------
  |  Branch (416:13): [True: 0, False: 1]
  ------------------
  417|      0|                return r;
  418|       |
  419|      1|        if (ret)
  ------------------
  |  Branch (419:13): [True: 1, False: 0]
  ------------------
  420|      1|                (*ret)->incomplete = incomplete;
  421|      1|        return 0;
  422|      1|}
nss_group_record_by_gid:
  427|    135|                GroupRecord **ret) {
  428|       |
  429|    135|        _cleanup_free_ char *sbuf = NULL;
  ------------------
  |  |   82|    135|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    135|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  430|    135|        _cleanup_free_ struct group *result = NULL;
  ------------------
  |  |   82|    135|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    135|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  431|    135|        bool incomplete = false;
  432|    135|        struct sgrp sgrp, *sresult = NULL;
  433|    135|        int r;
  434|       |
  435|    135|        r = getgrgid_malloc(gid, &result);
  436|    135|        if (r < 0)
  ------------------
  |  Branch (436:13): [True: 106, False: 29]
  ------------------
  437|    106|                return r;
  438|       |
  439|     29|        if (with_shadow) {
  ------------------
  |  Branch (439:13): [True: 0, False: 29]
  ------------------
  440|      0|                r = nss_sgrp_for_group(result, &sgrp, &sbuf);
  441|      0|                if (r < 0) {
  ------------------
  |  Branch (441:21): [True: 0, False: 0]
  ------------------
  442|      0|                        log_debug_errno(r, "Failed to do shadow lookup for group %s, ignoring: %m", result->gr_name);
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  443|      0|                        incomplete = ERRNO_IS_PRIVILEGE(r);
  444|      0|                } else
  445|      0|                        sresult = &sgrp;
  446|      0|        } else
  447|     29|                incomplete = true;
  448|       |
  449|     29|        r = nss_group_to_group_record(result, sresult, ret);
  450|     29|        if (r < 0)
  ------------------
  |  Branch (450:13): [True: 0, False: 29]
  ------------------
  451|      0|                return r;
  452|       |
  453|     29|        if (ret)
  ------------------
  |  Branch (453:13): [True: 29, False: 0]
  ------------------
  454|     29|                (*ret)->incomplete = incomplete;
  455|     29|        return 0;
  456|     29|}
user-record-nss.c:utf8_only:
   24|     88|static const char* utf8_only(const char *s) {
   25|     88|        return s && utf8_is_valid(s) ? s : NULL;
  ------------------
  |  Branch (25:16): [True: 88, False: 0]
  |  Branch (25:21): [True: 88, False: 0]
  ------------------
   26|     88|}
user-record-nss.c:strv_extend_strv_utf8_only:
   28|     30|static int strv_extend_strv_utf8_only(char ***dst, char **src, bool filter_duplicates) {
   29|     30|        _cleanup_free_ char **t = NULL;
  ------------------
  |  |   82|     30|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|     30|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
   30|     30|        size_t l, j = 0;
   31|       |
   32|       |        /* First, do a shallow copy of s, filtering for only valid utf-8 strings */
   33|     30|        l = strv_length(src);
   34|     30|        t = new(char*, l + 1);
  ------------------
  |  |   17|     30|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
   35|     30|        if (!t)
  ------------------
  |  Branch (35:13): [True: 0, False: 30]
  ------------------
   36|      0|                return -ENOMEM;
   37|       |
   38|     30|        for (size_t i = 0; i < l; i++)
  ------------------
  |  Branch (38:28): [True: 0, False: 30]
  ------------------
   39|      0|                if (utf8_is_valid(src[i]))
  ------------------
  |  Branch (39:21): [True: 0, False: 0]
  ------------------
   40|      0|                        t[j++] = src[i];
   41|     30|        if (j == 0)
  ------------------
  |  Branch (41:13): [True: 30, False: 0]
  ------------------
   42|     30|                return 0;
   43|       |
   44|      0|        t[j] = NULL;
   45|      0|        return strv_extend_strv(dst, t, filter_duplicates);
   46|     30|}

user_record_new:
   33|     84|UserRecord* user_record_new(void) {
   34|     84|        UserRecord *h;
   35|       |
   36|     84|        h = new(UserRecord, 1);
  ------------------
  |  |   17|     84|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
   37|     84|        if (!h)
  ------------------
  |  Branch (37:13): [True: 0, False: 84]
  ------------------
   38|      0|                return NULL;
   39|       |
   40|     84|        *h = (UserRecord) {
   41|     84|                .n_ref = 1,
   42|     84|                .disposition = _USER_DISPOSITION_INVALID,
   43|     84|                .last_change_usec = UINT64_MAX,
   44|     84|                .last_password_change_usec = UINT64_MAX,
   45|     84|                .umask = MODE_INVALID,
   46|     84|                .nice_level = INT_MAX,
   47|     84|                .not_before_usec = UINT64_MAX,
   48|     84|                .not_after_usec = UINT64_MAX,
   49|     84|                .locked = -1,
   50|     84|                .storage = _USER_STORAGE_INVALID,
   51|     84|                .access_mode = MODE_INVALID,
   52|     84|                .disk_size = UINT64_MAX,
   53|     84|                .disk_size_relative = UINT64_MAX,
   54|     84|                .tasks_max = UINT64_MAX,
   55|     84|                .memory_high = UINT64_MAX,
   56|     84|                .memory_max = UINT64_MAX,
   57|     84|                .cpu_weight = UINT64_MAX,
   58|     84|                .io_weight = UINT64_MAX,
   59|     84|                .uid = UID_INVALID,
  ------------------
  |  |   72|     84|#define UID_INVALID ((uid_t) -1)
  ------------------
   60|     84|                .gid = GID_INVALID,
  ------------------
  |  |   73|     84|#define GID_INVALID ((gid_t) -1)
  ------------------
   61|     84|                .nodev = true,
   62|     84|                .nosuid = true,
   63|     84|                .luks_discard = -1,
   64|     84|                .luks_offline_discard = -1,
   65|     84|                .luks_volume_key_size = UINT64_MAX,
   66|     84|                .luks_pbkdf_force_iterations = UINT64_MAX,
   67|     84|                .luks_pbkdf_time_cost_usec = UINT64_MAX,
   68|     84|                .luks_pbkdf_memory_cost = UINT64_MAX,
   69|     84|                .luks_pbkdf_parallel_threads = UINT64_MAX,
   70|     84|                .luks_sector_size = UINT64_MAX,
   71|     84|                .disk_usage = UINT64_MAX,
   72|     84|                .disk_free = UINT64_MAX,
   73|     84|                .disk_ceiling = UINT64_MAX,
   74|     84|                .disk_floor = UINT64_MAX,
   75|     84|                .signed_locally = -1,
   76|     84|                .good_authentication_counter = UINT64_MAX,
   77|     84|                .bad_authentication_counter = UINT64_MAX,
   78|     84|                .last_good_authentication_usec = UINT64_MAX,
   79|     84|                .last_bad_authentication_usec = UINT64_MAX,
   80|     84|                .ratelimit_begin_usec = UINT64_MAX,
   81|     84|                .ratelimit_count = UINT64_MAX,
   82|     84|                .ratelimit_interval_usec = UINT64_MAX,
   83|     84|                .ratelimit_burst = UINT64_MAX,
   84|     84|                .removable = -1,
   85|     84|                .enforce_password_policy = -1,
   86|     84|                .auto_login = -1,
   87|     84|                .stop_delay_usec = UINT64_MAX,
   88|     84|                .kill_processes = -1,
   89|     84|                .password_change_min_usec = UINT64_MAX,
   90|     84|                .password_change_max_usec = UINT64_MAX,
   91|     84|                .password_change_warn_usec = UINT64_MAX,
   92|     84|                .password_change_inactive_usec = UINT64_MAX,
   93|     84|                .password_change_now = -1,
   94|     84|                .pkcs11_protected_authentication_path_permitted = -1,
   95|     84|                .fido2_user_presence_permitted = -1,
   96|     84|                .fido2_user_verification_permitted = -1,
   97|     84|                .drop_caches = -1,
   98|     84|                .auto_resize_mode = _AUTO_RESIZE_MODE_INVALID,
   99|     84|                .rebalance_weight = REBALANCE_WEIGHT_UNSET,
  ------------------
  |  |  238|     84|#define REBALANCE_WEIGHT_UNSET UINT64_MAX
  ------------------
  100|     84|                .tmp_limit = TMPFS_LIMIT_NULL,
  ------------------
  |  |  248|     84|        (TmpfsLimit) {                          \
  |  |  249|     84|                .limit = UINT64_MAX,            \
  |  |  250|     84|                .limit_scale = UINT32_MAX,      \
  |  |  251|     84|        }                                       \
  ------------------
  101|     84|                .dev_shm_limit = TMPFS_LIMIT_NULL,
  ------------------
  |  |  248|     84|        (TmpfsLimit) {                          \
  |  |  249|     84|                .limit = UINT64_MAX,            \
  |  |  250|     84|                .limit_scale = UINT32_MAX,      \
  |  |  251|     84|        }                                       \
  ------------------
  102|     84|        };
  103|       |
  104|     84|        return h;
  105|     84|}
USER_RECORD_LOAD_FLAGS_TO_JSON_DISPATCH_FLAGS:
  107|    160|sd_json_dispatch_flags_t USER_RECORD_LOAD_FLAGS_TO_JSON_DISPATCH_FLAGS(UserRecordLoadFlags flags) {
  108|    160|        return (FLAGS_SET(flags, USER_RECORD_LOG) ? SD_JSON_LOG : 0) |
  109|    160|                (FLAGS_SET(flags, USER_RECORD_PERMISSIVE) ? SD_JSON_PERMISSIVE : 0);
  110|    160|}
json_dispatch_gecos:
  261|     74|int json_dispatch_gecos(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) {
  262|     74|        char **s = userdata;
  263|     74|        const char *n;
  264|       |
  265|     74|        if (sd_json_variant_is_null(variant)) {
  ------------------
  |  Branch (265:13): [True: 0, False: 74]
  ------------------
  266|      0|                *s = mfree(*s);
  267|      0|                return 0;
  268|      0|        }
  269|       |
  270|     74|        if (!sd_json_variant_is_string(variant))
  ------------------
  |  Branch (270:13): [True: 0, False: 74]
  ------------------
  271|      0|                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a string.", strna(name));
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
  272|       |
  273|     74|        n = sd_json_variant_string(variant);
  274|     74|        if (valid_gecos(n)) {
  ------------------
  |  Branch (274:13): [True: 74, False: 0]
  ------------------
  275|     74|                if (free_and_strdup(s, n) < 0)
  ------------------
  |  Branch (275:21): [True: 0, False: 74]
  ------------------
  276|      0|                        return json_log_oom(variant, flags);
  ------------------
  |  |  109|      0|        json_log(variant, flags, SYNTHETIC_ERRNO(ENOMEM), "Out of memory.")
  |  |  ------------------
  |  |  |  |  101|      0|        ({                                                              \
  |  |  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  106|      0|        })
  |  |  ------------------
  ------------------
  277|     74|        } else {
  278|      0|                _cleanup_free_ char *m = NULL;
  ------------------
  |  |   82|      0|#define _cleanup_free_ _cleanup_(freep)
  ------------------
  279|       |
  280|      0|                json_log(variant, flags|SD_JSON_DEBUG, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a valid GECOS compatible string, mangling.", strna(name));
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
  281|       |
  282|      0|                m = mangle_gecos(n);
  283|      0|                if (!m)
  ------------------
  |  Branch (283:21): [True: 0, False: 0]
  ------------------
  284|      0|                        return json_log_oom(variant, flags);
  ------------------
  |  |  109|      0|        json_log(variant, flags, SYNTHETIC_ERRNO(ENOMEM), "Out of memory.")
  |  |  ------------------
  |  |  |  |  101|      0|        ({                                                              \
  |  |  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  106|      0|        })
  |  |  ------------------
  ------------------
  285|       |
  286|      0|                free_and_replace(*s, m);
  ------------------
  |  |   49|      0|        free_and_replace_full(a, b, free)
  ------------------
  287|      0|        }
  288|       |
  289|     74|        return 0;
  290|     74|}
user_group_record_mangle:
 1494|     80|                UserRecordMask *ret_mask) {
 1495|       |
 1496|     80|        static const struct {
 1497|     80|                UserRecordMask mask;
 1498|     80|                const char *name;
 1499|     80|        } mask_field[] = {
 1500|     80|                { USER_RECORD_PRIVILEGED,  "privileged" },
 1501|     80|                { USER_RECORD_SECRET,      "secret"     },
 1502|     80|                { USER_RECORD_BINDING,     "binding"    },
 1503|     80|                { USER_RECORD_PER_MACHINE, "perMachine" },
 1504|     80|                { USER_RECORD_STATUS,      "status"     },
 1505|     80|                { USER_RECORD_SIGNATURE,   "signature"  },
 1506|     80|        };
 1507|       |
 1508|     80|        sd_json_dispatch_flags_t json_flags = USER_RECORD_LOAD_FLAGS_TO_JSON_DISPATCH_FLAGS(load_flags);
 1509|     80|        _cleanup_(sd_json_variant_unrefp) sd_json_variant *w = NULL;
 1510|     80|        sd_json_variant *array[ELEMENTSOF(mask_field) * 2];
 1511|     80|        size_t n_retain = 0;
 1512|     80|        UserRecordMask m = 0;
 1513|     80|        int r;
 1514|       |
 1515|     80|        assert((load_flags & _USER_RECORD_MASK_MAX) == 0); /* detect mistakes when accidentally passing
 1516|       |                                                            * UserRecordMask bit masks as UserRecordLoadFlags
 1517|       |                                                            * value */
 1518|       |
 1519|     80|        assert(v);
 1520|     80|        assert(ret_variant);
 1521|       |
 1522|       |        /* Note that this function is shared with the group record parser, hence we try to be generic in our
 1523|       |         * log message wording here, to cover both cases. */
 1524|       |
 1525|     80|        if (!sd_json_variant_is_object(v))
  ------------------
  |  Branch (1525:13): [True: 0, False: 80]
  ------------------
 1526|      0|                return json_log(v, json_flags, SYNTHETIC_ERRNO(EBADMSG), "Record is not a JSON object, refusing.");
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 1527|       |
 1528|     80|        if (USER_RECORD_ALLOW_MASK(load_flags) == 0) /* allow nothing? */
  ------------------
  |  Branch (1528:13): [True: 0, False: 80]
  ------------------
 1529|      0|                return json_log(v, json_flags, SYNTHETIC_ERRNO(EINVAL), "Nothing allowed in record, refusing.");
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 1530|       |
 1531|     80|        if (USER_RECORD_STRIP_MASK(load_flags) == _USER_RECORD_MASK_MAX) /* strip everything? */
  ------------------
  |  Branch (1531:13): [True: 0, False: 80]
  ------------------
 1532|      0|                return json_log(v, json_flags, SYNTHETIC_ERRNO(EINVAL), "Stripping everything from record, refusing.");
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 1533|       |
 1534|       |        /* Check if we have the special sections and if they match our flags set */
 1535|    480|        FOREACH_ELEMENT(i, mask_field) {
 1536|    480|                sd_json_variant *e, *k;
 1537|       |
 1538|    480|                if (FLAGS_SET(USER_RECORD_STRIP_MASK(load_flags), i->mask)) {
 1539|      0|                        if (!w)
  ------------------
  |  Branch (1539:29): [True: 0, False: 0]
  ------------------
 1540|      0|                                w = sd_json_variant_ref(v);
 1541|       |
 1542|      0|                        r = sd_json_variant_filter(&w, STRV_MAKE(i->name));
 1543|      0|                        if (r < 0)
  ------------------
  |  Branch (1543:29): [True: 0, False: 0]
  ------------------
 1544|      0|                                return json_log(w, json_flags, r, "Failed to remove field from variant: %m");
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 1545|       |
 1546|      0|                        continue;
 1547|      0|                }
 1548|       |
 1549|    480|                e = sd_json_variant_by_key_full(v, i->name, &k);
 1550|    480|                if (e) {
  ------------------
  |  Branch (1550:21): [True: 0, False: 480]
  ------------------
 1551|      0|                        if (!FLAGS_SET(USER_RECORD_ALLOW_MASK(load_flags), i->mask))
  ------------------
  |  Branch (1551:29): [True: 0, False: 0]
  ------------------
 1552|      0|                                return json_log(e, json_flags, SYNTHETIC_ERRNO(EBADMSG), "Record contains '%s' field, which is not allowed.", i->name);
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 1553|       |
 1554|      0|                        if (FLAGS_SET(load_flags, USER_RECORD_STRIP_REGULAR)) {
 1555|      0|                                array[n_retain++] = k;
 1556|      0|                                array[n_retain++] = e;
 1557|      0|                        }
 1558|       |
 1559|      0|                        m |= i->mask;
 1560|    480|                } else {
 1561|    480|                        if (FLAGS_SET(USER_RECORD_REQUIRE_MASK(load_flags), i->mask))
 1562|      0|                                return json_log(v, json_flags, SYNTHETIC_ERRNO(EBADMSG), "Record lacks '%s' field, which is required.", i->name);
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 1563|    480|                }
 1564|    480|        }
 1565|       |
 1566|     80|        if (FLAGS_SET(load_flags, USER_RECORD_STRIP_REGULAR)) {
 1567|       |                /* If we are supposed to strip regular items, then let's instead just allocate a new object
 1568|       |                 * with just the stuff we need. */
 1569|       |
 1570|      0|                w = sd_json_variant_unref(w);
 1571|      0|                r = sd_json_variant_new_object(&w, array, n_retain);
 1572|      0|                if (r < 0)
  ------------------
  |  Branch (1572:21): [True: 0, False: 0]
  ------------------
 1573|      0|                        return json_log(v, json_flags, r, "Failed to allocate new object: %m");
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 1574|      0|        } else
 1575|       |                /* And now check if there's anything else in the record */
 1576|     80|                for (size_t i = 0; i < sd_json_variant_elements(v); i += 2) {
  ------------------
  |  Branch (1576:36): [True: 80, False: 0]
  ------------------
 1577|     80|                        const char *f;
 1578|     80|                        bool special = false;
 1579|       |
 1580|     80|                        assert_se(f = sd_json_variant_string(sd_json_variant_by_index(v, i)));
 1581|       |
 1582|     80|                        FOREACH_ELEMENT(j, mask_field)
 1583|    480|                                if (streq(f, j->name)) { /* already covered in the loop above */
  ------------------
  |  |   46|    480|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 0, False: 480]
  |  |  ------------------
  ------------------
 1584|      0|                                        special = true;
 1585|      0|                                        continue;
 1586|      0|                                }
 1587|       |
 1588|     80|                        if (!special) {
  ------------------
  |  Branch (1588:29): [True: 80, False: 0]
  ------------------
 1589|     80|                                if ((load_flags & (USER_RECORD_ALLOW_REGULAR|USER_RECORD_REQUIRE_REGULAR)) == 0)
  ------------------
  |  Branch (1589:37): [True: 0, False: 80]
  ------------------
 1590|      0|                                        return json_log(v, json_flags, SYNTHETIC_ERRNO(EBADMSG), "Record contains '%s' field, which is not allowed.", f);
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 1591|       |
 1592|     80|                                m |= USER_RECORD_REGULAR;
 1593|     80|                                break;
 1594|     80|                        }
 1595|     80|                }
 1596|       |
 1597|     80|        if (FLAGS_SET(load_flags, USER_RECORD_REQUIRE_REGULAR) && !FLAGS_SET(m, USER_RECORD_REGULAR))
  ------------------
  |  Branch (1597:67): [True: 0, False: 80]
  ------------------
 1598|      0|                return json_log(v, json_flags, SYNTHETIC_ERRNO(EBADMSG), "Record lacks basic identity fields, which are required.");
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 1599|       |
 1600|     80|        if (!FLAGS_SET(load_flags, USER_RECORD_EMPTY_OK) && m == 0)
  ------------------
  |  Branch (1600:13): [True: 80, False: 0]
  |  Branch (1600:61): [True: 0, False: 80]
  ------------------
 1601|      0|                return json_log(v, json_flags, SYNTHETIC_ERRNO(EBADMSG), "Record is empty.");
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 1602|       |
 1603|     80|        if (w)
  ------------------
  |  Branch (1603:13): [True: 0, False: 80]
  ------------------
 1604|      0|                *ret_variant = TAKE_PTR(w);
 1605|     80|        else
 1606|     80|                *ret_variant = sd_json_variant_ref(v);
 1607|       |
 1608|     80|        if (ret_mask)
  ------------------
  |  Branch (1608:13): [True: 80, False: 0]
  ------------------
 1609|     80|                *ret_mask = m;
 1610|     80|        return 0;
 1611|     80|}
user_record_load:
 1613|     40|int user_record_load(UserRecord *h, sd_json_variant *v, UserRecordLoadFlags load_flags) {
 1614|       |
 1615|     40|        static const sd_json_dispatch_field user_dispatch_table[] = {
 1616|     40|                { "userName",                   SD_JSON_VARIANT_STRING,        json_dispatch_user_group_name,        offsetof(UserRecord, user_name),                     SD_JSON_RELAX  },
 1617|     40|                { "aliases",                    SD_JSON_VARIANT_ARRAY,         json_dispatch_user_group_list,        offsetof(UserRecord, aliases),                       SD_JSON_RELAX  },
 1618|     40|                { "realm",                      SD_JSON_VARIANT_STRING,        json_dispatch_realm,                  offsetof(UserRecord, realm),                         0              },
 1619|     40|                { "uuid",                       SD_JSON_VARIANT_STRING,        sd_json_dispatch_id128,               offsetof(UserRecord, uuid),                          0              },
 1620|     40|                { "blobDirectory",              SD_JSON_VARIANT_STRING,        json_dispatch_path,                   offsetof(UserRecord, blob_directory),                SD_JSON_STRICT },
 1621|     40|                { "blobManifest",               SD_JSON_VARIANT_OBJECT,        dispatch_blob_manifest,               offsetof(UserRecord, blob_manifest),                 0              },
 1622|     40|                { "realName",                   SD_JSON_VARIANT_STRING,        json_dispatch_gecos,                  offsetof(UserRecord, real_name),                     0              },
 1623|     40|                { "emailAddress",               SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, email_address),                 SD_JSON_STRICT },
 1624|     40|                { "iconName",                   SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, icon_name),                     SD_JSON_STRICT },
 1625|     40|                { "location",                   SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, location),                      0              },
 1626|     40|                { "disposition",                SD_JSON_VARIANT_STRING,        json_dispatch_user_disposition,       offsetof(UserRecord, disposition),                   0              },
 1627|     40|                { "lastChangeUSec",             _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, last_change_usec),              0              },
 1628|     40|                { "lastPasswordChangeUSec",     _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, last_password_change_usec),     0              },
 1629|     40|                { "shell",                      SD_JSON_VARIANT_STRING,        json_dispatch_filename_or_path,       offsetof(UserRecord, shell),                         0              },
 1630|     40|                { "umask",                      SD_JSON_VARIANT_UNSIGNED,      json_dispatch_umask,                  offsetof(UserRecord, umask),                         0              },
 1631|     40|                { "environment",                SD_JSON_VARIANT_ARRAY,         json_dispatch_strv_environment,       offsetof(UserRecord, environment),                   0              },
 1632|     40|                { "timeZone",                   SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, time_zone),                     SD_JSON_STRICT },
 1633|     40|                { "preferredLanguage",          SD_JSON_VARIANT_STRING,        json_dispatch_locale,                 offsetof(UserRecord, preferred_language),            0              },
 1634|     40|                { "additionalLanguages",        SD_JSON_VARIANT_ARRAY,         json_dispatch_locales,                offsetof(UserRecord, additional_languages),          0              },
 1635|     40|                { "niceLevel",                  _SD_JSON_VARIANT_TYPE_INVALID, json_dispatch_nice,                   offsetof(UserRecord, nice_level),                    0              },
 1636|     40|                { "resourceLimits",             _SD_JSON_VARIANT_TYPE_INVALID, json_dispatch_rlimits,                offsetof(UserRecord, rlimits),                       0              },
 1637|     40|                { "locked",                     SD_JSON_VARIANT_BOOLEAN,       sd_json_dispatch_tristate,            offsetof(UserRecord, locked),                        0              },
 1638|     40|                { "notBeforeUSec",              _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, not_before_usec),               0              },
 1639|     40|                { "notAfterUSec",               _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, not_after_usec),                0              },
 1640|     40|                { "storage",                    SD_JSON_VARIANT_STRING,        json_dispatch_user_storage,           offsetof(UserRecord, storage),                       0              },
 1641|     40|                { "diskSize",                   _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, disk_size),                     0              },
 1642|     40|                { "diskSizeRelative",           _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, disk_size_relative),            0              },
 1643|     40|                { "skeletonDirectory",          SD_JSON_VARIANT_STRING,        json_dispatch_path,                   offsetof(UserRecord, skeleton_directory),            SD_JSON_STRICT },
 1644|     40|                { "accessMode",                 SD_JSON_VARIANT_UNSIGNED,      json_dispatch_access_mode,            offsetof(UserRecord, access_mode),                   0              },
 1645|     40|                { "tasksMax",                   SD_JSON_VARIANT_UNSIGNED,      json_dispatch_tasks_or_memory_max,    offsetof(UserRecord, tasks_max),                     0              },
 1646|     40|                { "memoryHigh",                 SD_JSON_VARIANT_UNSIGNED,      json_dispatch_tasks_or_memory_max,    offsetof(UserRecord, memory_high),                   0              },
 1647|     40|                { "memoryMax",                  SD_JSON_VARIANT_UNSIGNED,      json_dispatch_tasks_or_memory_max,    offsetof(UserRecord, memory_max),                    0              },
 1648|     40|                { "cpuWeight",                  SD_JSON_VARIANT_UNSIGNED,      json_dispatch_weight,                 offsetof(UserRecord, cpu_weight),                    0              },
 1649|     40|                { "ioWeight",                   SD_JSON_VARIANT_UNSIGNED,      json_dispatch_weight,                 offsetof(UserRecord, io_weight),                     0              },
 1650|     40|                { "mountNoDevices",             SD_JSON_VARIANT_BOOLEAN,       sd_json_dispatch_stdbool,             offsetof(UserRecord, nodev),                         0              },
 1651|     40|                { "mountNoSuid",                SD_JSON_VARIANT_BOOLEAN,       sd_json_dispatch_stdbool,             offsetof(UserRecord, nosuid),                        0              },
 1652|     40|                { "mountNoExecute",             SD_JSON_VARIANT_BOOLEAN,       sd_json_dispatch_stdbool,             offsetof(UserRecord, noexec),                        0              },
 1653|     40|                { "cifsDomain",                 SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, cifs_domain),                   SD_JSON_STRICT },
 1654|     40|                { "cifsUserName",               SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, cifs_user_name),                SD_JSON_STRICT },
 1655|     40|                { "cifsService",                SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, cifs_service),                  SD_JSON_STRICT },
 1656|     40|                { "cifsExtraMountOptions",      SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, cifs_extra_mount_options),      0              },
 1657|     40|                { "imagePath",                  SD_JSON_VARIANT_STRING,        json_dispatch_path,                   offsetof(UserRecord, image_path),                    SD_JSON_STRICT },
 1658|     40|                { "homeDirectory",              SD_JSON_VARIANT_STRING,        json_dispatch_home_directory,         offsetof(UserRecord, home_directory),                0              },
 1659|     40|                { "uid",                        SD_JSON_VARIANT_UNSIGNED,      sd_json_dispatch_uid_gid,             offsetof(UserRecord, uid),                           0              },
 1660|     40|                { "gid",                        SD_JSON_VARIANT_UNSIGNED,      sd_json_dispatch_uid_gid,             offsetof(UserRecord, gid),                           0              },
 1661|     40|                { "memberOf",                   SD_JSON_VARIANT_ARRAY,         json_dispatch_user_group_list,        offsetof(UserRecord, member_of),                     SD_JSON_RELAX  },
 1662|     40|                { "capabilityBoundingSet",      SD_JSON_VARIANT_ARRAY,         sd_json_dispatch_strv,                offsetof(UserRecord, capability_bounding_set),       SD_JSON_STRICT },
 1663|     40|                { "capabilityAmbientSet",       SD_JSON_VARIANT_ARRAY,         sd_json_dispatch_strv,                offsetof(UserRecord, capability_ambient_set),        SD_JSON_STRICT },
 1664|     40|                { "fileSystemType",             SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, file_system_type),              SD_JSON_STRICT },
 1665|     40|                { "partitionUuid",              SD_JSON_VARIANT_STRING,        sd_json_dispatch_id128,               offsetof(UserRecord, partition_uuid),                0              },
 1666|     40|                { "luksUuid",                   SD_JSON_VARIANT_STRING,        sd_json_dispatch_id128,               offsetof(UserRecord, luks_uuid),                     0              },
 1667|     40|                { "fileSystemUuid",             SD_JSON_VARIANT_STRING,        sd_json_dispatch_id128,               offsetof(UserRecord, file_system_uuid),              0              },
 1668|     40|                { "luksDiscard",                _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_tristate,            offsetof(UserRecord, luks_discard),                  0              },
 1669|     40|                { "luksOfflineDiscard",         _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_tristate,            offsetof(UserRecord, luks_offline_discard),          0              },
 1670|     40|                { "luksCipher",                 SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, luks_cipher),                   SD_JSON_STRICT },
 1671|     40|                { "luksCipherMode",             SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, luks_cipher_mode),              SD_JSON_STRICT },
 1672|     40|                { "luksVolumeKeySize",          _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, luks_volume_key_size),          0              },
 1673|     40|                { "luksPbkdfHashAlgorithm",     SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, luks_pbkdf_hash_algorithm),     SD_JSON_STRICT },
 1674|     40|                { "luksPbkdfType",              SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, luks_pbkdf_type),               SD_JSON_STRICT },
 1675|     40|                { "luksPbkdfForceIterations",   _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, luks_pbkdf_force_iterations),   0              },
 1676|     40|                { "luksPbkdfTimeCostUSec",      _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, luks_pbkdf_time_cost_usec),     0              },
 1677|     40|                { "luksPbkdfMemoryCost",        _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, luks_pbkdf_memory_cost),        0              },
 1678|     40|                { "luksPbkdfParallelThreads",   _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, luks_pbkdf_parallel_threads),   0              },
 1679|     40|                { "luksSectorSize",             _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, luks_sector_size),              0              },
 1680|     40|                { "luksExtraMountOptions",      SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, luks_extra_mount_options),      0              },
 1681|     40|                { "dropCaches",                 SD_JSON_VARIANT_BOOLEAN,       sd_json_dispatch_tristate,            offsetof(UserRecord, drop_caches),                   0              },
 1682|     40|                { "autoResizeMode",             _SD_JSON_VARIANT_TYPE_INVALID, dispatch_auto_resize_mode,            offsetof(UserRecord, auto_resize_mode),              0              },
 1683|     40|                { "rebalanceWeight",            _SD_JSON_VARIANT_TYPE_INVALID, dispatch_rebalance_weight,            offsetof(UserRecord, rebalance_weight),              0              },
 1684|     40|                { "service",                    SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, service),                       SD_JSON_STRICT },
 1685|     40|                { "rateLimitIntervalUSec",      _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, ratelimit_interval_usec),       0              },
 1686|     40|                { "rateLimitBurst",             _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, ratelimit_burst),               0              },
 1687|     40|                { "enforcePasswordPolicy",      SD_JSON_VARIANT_BOOLEAN,       sd_json_dispatch_tristate,            offsetof(UserRecord, enforce_password_policy),       0              },
 1688|     40|                { "autoLogin",                  SD_JSON_VARIANT_BOOLEAN,       sd_json_dispatch_tristate,            offsetof(UserRecord, auto_login),                    0              },
 1689|     40|                { "preferredSessionType",       SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, preferred_session_type),        SD_JSON_STRICT },
 1690|     40|                { "preferredSessionLauncher",   SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, preferred_session_launcher),    SD_JSON_STRICT },
 1691|     40|                { "stopDelayUSec",              _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, stop_delay_usec),               0              },
 1692|     40|                { "killProcesses",              SD_JSON_VARIANT_BOOLEAN,       sd_json_dispatch_tristate,            offsetof(UserRecord, kill_processes),                0              },
 1693|     40|                { "passwordChangeMinUSec",      _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, password_change_min_usec),      0              },
 1694|     40|                { "passwordChangeMaxUSec",      _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, password_change_max_usec),      0              },
 1695|     40|                { "passwordChangeWarnUSec",     _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, password_change_warn_usec),     0              },
 1696|     40|                { "passwordChangeInactiveUSec", _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, password_change_inactive_usec), 0              },
 1697|     40|                { "passwordChangeNow",          SD_JSON_VARIANT_BOOLEAN,       sd_json_dispatch_tristate,            offsetof(UserRecord, password_change_now),           0              },
 1698|     40|                { "pkcs11TokenUri",             SD_JSON_VARIANT_ARRAY,         dispatch_pkcs11_uri_array,            offsetof(UserRecord, pkcs11_token_uri),              0              },
 1699|     40|                { "fido2HmacCredential",        SD_JSON_VARIANT_ARRAY,         dispatch_fido2_hmac_credential_array, 0,                                                   0              },
 1700|     40|                { "recoveryKeyType",            SD_JSON_VARIANT_ARRAY,         sd_json_dispatch_strv,                offsetof(UserRecord, recovery_key_type),             0              },
 1701|     40|                { "selfModifiableFields",       SD_JSON_VARIANT_ARRAY,         sd_json_dispatch_strv,                offsetof(UserRecord, self_modifiable_fields),        SD_JSON_STRICT },
 1702|     40|                { "selfModifiableBlobs",        SD_JSON_VARIANT_ARRAY,         sd_json_dispatch_strv,                offsetof(UserRecord, self_modifiable_blobs),         SD_JSON_STRICT },
 1703|     40|                { "selfModifiablePrivileged",   SD_JSON_VARIANT_ARRAY,         sd_json_dispatch_strv,                offsetof(UserRecord, self_modifiable_privileged),    SD_JSON_STRICT },
 1704|     40|                { "tmpLimit",                   _SD_JSON_VARIANT_TYPE_INVALID, dispatch_tmpfs_limit,                 offsetof(UserRecord, tmp_limit),                     0,             },
 1705|     40|                { "tmpLimitScale",              _SD_JSON_VARIANT_TYPE_INVALID, dispatch_tmpfs_limit_scale,           offsetof(UserRecord, tmp_limit),                     0,             },
 1706|     40|                { "devShmLimit",                _SD_JSON_VARIANT_TYPE_INVALID, dispatch_tmpfs_limit,                 offsetof(UserRecord, dev_shm_limit),                 0,             },
 1707|     40|                { "devShmLimitScale",           _SD_JSON_VARIANT_TYPE_INVALID, dispatch_tmpfs_limit_scale,           offsetof(UserRecord, dev_shm_limit),                 0,             },
 1708|     40|                { "defaultArea",                SD_JSON_VARIANT_STRING,        json_dispatch_filename,               offsetof(UserRecord, default_area),                  0              },
 1709|       |
 1710|     40|                { "secret",                     SD_JSON_VARIANT_OBJECT,        dispatch_secret,                      0,                                                   0              },
 1711|     40|                { "privileged",                 SD_JSON_VARIANT_OBJECT,        dispatch_privileged,                  0,                                                   0              },
 1712|       |
 1713|       |                /* Ignore the perMachine, binding, status stuff here, and process it later, so that it overrides whatever is set above */
 1714|     40|                { "perMachine",                 SD_JSON_VARIANT_ARRAY,         NULL,                                 0,                                                   0              },
 1715|     40|                { "binding",                    SD_JSON_VARIANT_OBJECT,        NULL,                                 0,                                                   0              },
 1716|     40|                { "status",                     SD_JSON_VARIANT_OBJECT,        NULL,                                 0,                                                   0              },
 1717|       |
 1718|       |                /* Ignore 'signature', we check it with explicit accessors instead */
 1719|     40|                { "signature",                  SD_JSON_VARIANT_ARRAY,         NULL,                                 0,                                                   0              },
 1720|     40|                {},
 1721|     40|        };
 1722|       |
 1723|     40|        sd_json_dispatch_flags_t json_flags = USER_RECORD_LOAD_FLAGS_TO_JSON_DISPATCH_FLAGS(load_flags);
 1724|     40|        int r;
 1725|       |
 1726|     40|        assert(h);
 1727|     40|        assert(!h->json);
 1728|       |
 1729|       |        /* Note that this call will leave a half-initialized record around on failure! */
 1730|       |
 1731|     40|        r = user_group_record_mangle(v, load_flags, &h->json, &h->mask);
 1732|     40|        if (r < 0)
  ------------------
  |  Branch (1732:13): [True: 0, False: 40]
  ------------------
 1733|      0|                return r;
 1734|       |
 1735|     40|        r = sd_json_dispatch(h->json, user_dispatch_table, json_flags | SD_JSON_ALLOW_EXTENSIONS, h);
 1736|     40|        if (r < 0)
  ------------------
  |  Branch (1736:13): [True: 0, False: 40]
  ------------------
 1737|      0|                return r;
 1738|       |
 1739|       |        /* During the parsing operation above we ignored the 'perMachine', 'binding' and 'status' fields,
 1740|       |         * since we want them to override the global options. Let's process them now. */
 1741|       |
 1742|     40|        r = dispatch_per_machine("perMachine", sd_json_variant_by_key(h->json, "perMachine"), json_flags, h);
 1743|     40|        if (r < 0)
  ------------------
  |  Branch (1743:13): [True: 0, False: 40]
  ------------------
 1744|      0|                return r;
 1745|       |
 1746|     40|        r = dispatch_binding("binding", sd_json_variant_by_key(h->json, "binding"), json_flags, h);
 1747|     40|        if (r < 0)
  ------------------
  |  Branch (1747:13): [True: 0, False: 40]
  ------------------
 1748|      0|                return r;
 1749|       |
 1750|     40|        r = dispatch_status("status", sd_json_variant_by_key(h->json, "status"), json_flags, h);
 1751|     40|        if (r < 0)
  ------------------
  |  Branch (1751:13): [True: 0, False: 40]
  ------------------
 1752|      0|                return r;
 1753|       |
 1754|     40|        if (FLAGS_SET(h->mask, USER_RECORD_REGULAR) && !h->user_name)
  ------------------
  |  Branch (1754:56): [True: 0, False: 40]
  ------------------
 1755|      0|                return json_log(h->json, json_flags, SYNTHETIC_ERRNO(EINVAL), "User name field missing, refusing.");
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 1756|       |
 1757|     40|        r = user_record_augment(h, json_flags);
 1758|     40|        if (r < 0)
  ------------------
  |  Branch (1758:13): [True: 0, False: 40]
  ------------------
 1759|      0|                return r;
 1760|       |
 1761|     40|        return 0;
 1762|     40|}
user_record_build:
 1764|     40|int user_record_build(UserRecord **ret, ...) {
 1765|     40|        _cleanup_(sd_json_variant_unrefp) sd_json_variant *v = NULL;
 1766|     40|        _cleanup_(user_record_unrefp) UserRecord *u = NULL;
 1767|     40|        va_list ap;
 1768|     40|        int r;
 1769|       |
 1770|     40|        assert(ret);
 1771|       |
 1772|     40|        va_start(ap, ret);
 1773|     40|        r = sd_json_buildv(&v, ap);
 1774|     40|        va_end(ap);
 1775|       |
 1776|     40|        if (r < 0)
  ------------------
  |  Branch (1776:13): [True: 0, False: 40]
  ------------------
 1777|      0|                return r;
 1778|       |
 1779|     40|        u = user_record_new();
 1780|     40|        if (!u)
  ------------------
  |  Branch (1780:13): [True: 0, False: 40]
  ------------------
 1781|      0|                return -ENOMEM;
 1782|       |
 1783|     40|        r = user_record_load(u, v, USER_RECORD_LOAD_FULL);
 1784|     40|        if (r < 0)
  ------------------
  |  Branch (1784:13): [True: 0, False: 40]
  ------------------
 1785|      0|                return r;
 1786|       |
 1787|     40|        *ret = TAKE_PTR(u);
 1788|     40|        return 0;
 1789|     40|}
user_record_gid:
 2047|     44|gid_t user_record_gid(UserRecord *h) {
 2048|     44|        assert(h);
 2049|       |
 2050|     44|        if (gid_is_valid(h->gid))
  ------------------
  |  Branch (2050:13): [True: 44, False: 0]
  ------------------
 2051|     44|                return h->gid;
 2052|       |
 2053|      0|        return (gid_t) h->uid;
 2054|     44|}
user_record_disposition:
 2056|     82|UserDisposition user_record_disposition(UserRecord *h) {
 2057|     82|        assert(h);
 2058|       |
 2059|     82|        if (h->disposition >= 0)
  ------------------
  |  Branch (2059:13): [True: 40, False: 42]
  ------------------
 2060|     40|                return h->disposition;
 2061|       |
 2062|       |        /* If not declared, derive from UID */
 2063|       |
 2064|     42|        if (!uid_is_valid(h->uid))
  ------------------
  |  Branch (2064:13): [True: 0, False: 42]
  ------------------
 2065|      0|                return _USER_DISPOSITION_INVALID;
 2066|       |
 2067|     42|        if (user_record_is_root(h) || user_record_is_nobody(h))
  ------------------
  |  Branch (2067:13): [True: 5, False: 37]
  |  Branch (2067:39): [True: 0, False: 37]
  ------------------
 2068|      5|                return USER_INTRINSIC;
 2069|       |
 2070|     37|        if (uid_is_system(h->uid))
  ------------------
  |  Branch (2070:13): [True: 37, False: 0]
  ------------------
 2071|     37|                return USER_SYSTEM;
 2072|       |
 2073|      0|        if (uid_is_dynamic(h->uid) || uid_is_greeter(h->uid))
  ------------------
  |  Branch (2073:13): [True: 0, False: 0]
  |  Branch (2073:39): [True: 0, False: 0]
  ------------------
 2074|      0|                return USER_DYNAMIC;
 2075|       |
 2076|      0|        if (uid_is_container(h->uid))
  ------------------
  |  Branch (2076:13): [True: 0, False: 0]
  ------------------
 2077|      0|                return USER_CONTAINER;
 2078|       |
 2079|      0|        if (uid_is_foreign(h->uid))
  ------------------
  |  Branch (2079:13): [True: 0, False: 0]
  ------------------
 2080|      0|                return USER_FOREIGN;
 2081|       |
 2082|      0|        if (h->uid > INT32_MAX)
  ------------------
  |  Branch (2082:13): [True: 0, False: 0]
  ------------------
 2083|      0|                return USER_RESERVED;
 2084|       |
 2085|      0|        return USER_REGULAR;
 2086|      0|}
user_record_is_root:
 2726|     42|bool user_record_is_root(const UserRecord *u) {
 2727|     42|        assert(u);
 2728|       |
 2729|     42|        return u->uid == 0 || streq_ptr(u->user_name, "root");
  ------------------
  |  Branch (2729:16): [True: 5, False: 37]
  |  Branch (2729:31): [True: 0, False: 37]
  ------------------
 2730|     42|}
user_record_is_nobody:
 2732|     37|bool user_record_is_nobody(const UserRecord *u) {
 2733|     37|        assert(u);
 2734|       |
 2735|     37|        return u->uid == UID_NOBODY || STRPTR_IN_SET(u->user_name, NOBODY_USER_NAME, "nobody");
  ------------------
  |  |   75|     74|#define UID_NOBODY ((uid_t) 65534U)
  ------------------
                      return u->uid == UID_NOBODY || STRPTR_IN_SET(u->user_name, NOBODY_USER_NAME, "nobody");
  ------------------
  |  |  165|     74|        ({                                                       \
  |  |  ------------------
  |  |  |  Branch (165:9): [True: 0, False: 37]
  |  |  ------------------
  |  |  166|     74|                const char* _x = (x);                            \
  |  |  167|     74|                _x && strv_contains(STRV_MAKE(__VA_ARGS__), _x); \
  |  |  ------------------
  |  |  |  |   16|     37|#define strv_contains(l, s) (!!strv_find((l), (s)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (16:29): [True: 0, False: 37]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (167:17): [True: 37, False: 0]
  |  |  ------------------
  |  |  168|     74|        })
  ------------------
  |  Branch (2735:16): [True: 0, False: 37]
  ------------------
 2736|     37|}
userdb_match_is_set:
 2767|    835|bool userdb_match_is_set(const UserDBMatch *match) {
 2768|    835|        if (!match)
  ------------------
  |  Branch (2768:13): [True: 0, False: 835]
  ------------------
 2769|      0|                return false;
 2770|       |
 2771|    835|        return !strv_isempty(match->fuzzy_names) ||
  ------------------
  |  Branch (2771:16): [True: 0, False: 835]
  ------------------
 2772|    835|                !FLAGS_SET(match->disposition_mask, USER_DISPOSITION_MASK_ALL) ||
  ------------------
  |  Branch (2772:17): [True: 835, False: 0]
  ------------------
 2773|    835|                match->uid_min > 0 ||
  ------------------
  |  Branch (2773:17): [True: 0, False: 0]
  ------------------
 2774|    835|                match->uid_max < UID_INVALID-1;
  ------------------
  |  |   72|      0|#define UID_INVALID ((uid_t) -1)
  ------------------
  |  Branch (2774:17): [True: 0, False: 0]
  ------------------
 2775|    835|}
user_record_match:
 2818|     84|bool user_record_match(UserRecord *u, const UserDBMatch *match) {
 2819|     84|        assert(u);
 2820|       |
 2821|     84|        if (!match)
  ------------------
  |  Branch (2821:13): [True: 0, False: 84]
  ------------------
 2822|      0|                return true;
 2823|       |
 2824|     84|        if (!uid_is_valid(u->uid))
  ------------------
  |  Branch (2824:13): [True: 0, False: 84]
  ------------------
 2825|      0|                return false;
 2826|       |
 2827|     84|        if (u->uid < match->uid_min || u->uid > match->uid_max)
  ------------------
  |  Branch (2827:13): [True: 0, False: 84]
  |  Branch (2827:40): [True: 42, False: 42]
  ------------------
 2828|     42|                return false;
 2829|       |
 2830|     42|        if (!BIT_SET(match->disposition_mask, user_record_disposition(u)))
  ------------------
  |  |   40|     42|#define BIT_SET(bits, i) FLAGS_SET(bits, INDEX_TO_MASK(typeof(bits), i))
  ------------------
  |  Branch (2830:13): [True: 0, False: 42]
  ------------------
 2831|      0|                return false;
 2832|       |
 2833|     42|        if (!strv_isempty(match->fuzzy_names)) {
  ------------------
  |  Branch (2833:13): [True: 0, False: 42]
  ------------------
 2834|       |
 2835|       |                /* Note this array of names is sparse, i.e. various entries listed in it will be
 2836|       |                 * NULL. Because of that we are not using a NULL terminated strv here, but a regular
 2837|       |                 * array. */
 2838|      0|                const char* names[] = {
 2839|      0|                        u->user_name,
 2840|      0|                        user_record_user_name_and_realm(u),
 2841|      0|                        u->real_name,
 2842|      0|                        u->email_address,
 2843|      0|                        u->cifs_user_name,
 2844|      0|                };
 2845|       |
 2846|      0|                if (!user_name_fuzzy_match(names, ELEMENTSOF(names), match->fuzzy_names) &&
  ------------------
  |  Branch (2846:21): [True: 0, False: 0]
  ------------------
 2847|      0|                    !user_name_fuzzy_match((const char**) u->aliases, strv_length(u->aliases), match->fuzzy_names))
  ------------------
  |  Branch (2847:21): [True: 0, False: 0]
  ------------------
 2848|      0|                        return false;
 2849|      0|        }
 2850|       |
 2851|     42|        return true;
 2852|     42|}
user-record.c:user_record_free:
  145|     84|static UserRecord* user_record_free(UserRecord *h) {
  146|     84|        if (!h)
  ------------------
  |  Branch (146:13): [True: 0, False: 84]
  ------------------
  147|      0|                return NULL;
  148|       |
  149|     84|        free(h->user_name);
  150|     84|        free(h->realm);
  151|     84|        free(h->user_name_and_realm_auto);
  152|     84|        strv_free(h->aliases);
  153|     84|        free(h->real_name);
  154|     84|        free(h->email_address);
  155|     84|        erase_and_free(h->password_hint);
  156|     84|        free(h->location);
  157|     84|        free(h->icon_name);
  158|       |
  159|     84|        free(h->blob_directory);
  160|     84|        hashmap_free(h->blob_manifest);
  161|       |
  162|     84|        free(h->shell);
  163|       |
  164|     84|        strv_free(h->environment);
  165|     84|        free(h->time_zone);
  166|     84|        free(h->preferred_language);
  167|     84|        strv_free(h->additional_languages);
  168|     84|        rlimit_free_all(h->rlimits);
  169|       |
  170|     84|        free(h->skeleton_directory);
  171|       |
  172|     84|        strv_free_erase(h->hashed_password);
  173|     84|        strv_free_erase(h->ssh_authorized_keys);
  174|     84|        strv_free_erase(h->password);
  175|     84|        strv_free_erase(h->token_pin);
  176|       |
  177|     84|        free(h->cifs_service);
  178|     84|        free(h->cifs_user_name);
  179|     84|        free(h->cifs_domain);
  180|     84|        free(h->cifs_extra_mount_options);
  181|       |
  182|     84|        free(h->image_path);
  183|     84|        free(h->image_path_auto);
  184|     84|        free(h->home_directory);
  185|     84|        free(h->home_directory_auto);
  186|       |
  187|     84|        free(h->fallback_shell);
  188|     84|        free(h->fallback_home_directory);
  189|       |
  190|     84|        strv_free(h->member_of);
  191|     84|        strv_free(h->capability_bounding_set);
  192|     84|        strv_free(h->capability_ambient_set);
  193|       |
  194|     84|        free(h->file_system_type);
  195|     84|        free(h->luks_cipher);
  196|     84|        free(h->luks_cipher_mode);
  197|     84|        free(h->luks_pbkdf_hash_algorithm);
  198|     84|        free(h->luks_pbkdf_type);
  199|     84|        free(h->luks_extra_mount_options);
  200|       |
  201|     84|        free(h->state);
  202|     84|        free(h->service);
  203|       |
  204|     84|        free(h->preferred_session_type);
  205|     84|        free(h->preferred_session_launcher);
  206|       |
  207|     84|        strv_free(h->pkcs11_token_uri);
  208|     84|        for (size_t i = 0; i < h->n_pkcs11_encrypted_key; i++)
  ------------------
  |  Branch (208:28): [True: 0, False: 84]
  ------------------
  209|      0|                pkcs11_encrypted_key_done(h->pkcs11_encrypted_key + i);
  210|     84|        free(h->pkcs11_encrypted_key);
  211|       |
  212|     84|        for (size_t i = 0; i < h->n_fido2_hmac_credential; i++)
  ------------------
  |  Branch (212:28): [True: 0, False: 84]
  ------------------
  213|      0|                fido2_hmac_credential_done(h->fido2_hmac_credential + i);
  214|     84|        for (size_t i = 0; i < h->n_fido2_hmac_salt; i++)
  ------------------
  |  Branch (214:28): [True: 0, False: 84]
  ------------------
  215|      0|                fido2_hmac_salt_done(h->fido2_hmac_salt + i);
  216|       |
  217|     84|        strv_free(h->recovery_key_type);
  218|     84|        for (size_t i = 0; i < h->n_recovery_key; i++)
  ------------------
  |  Branch (218:28): [True: 0, False: 84]
  ------------------
  219|      0|                recovery_key_done(h->recovery_key + i);
  220|       |
  221|     84|        strv_free(h->self_modifiable_fields);
  222|     84|        strv_free(h->self_modifiable_blobs);
  223|     84|        strv_free(h->self_modifiable_privileged);
  224|       |
  225|     84|        free(h->default_area);
  226|       |
  227|     84|        sd_json_variant_unref(h->json);
  228|       |
  229|     84|        return mfree(h);
  230|     84|}
user-record.c:json_dispatch_filename_or_path:
  393|     40|static int json_dispatch_filename_or_path(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) {
  394|     40|        char **s = ASSERT_PTR(userdata);
  395|     40|        const char *n;
  396|     40|        int r;
  397|       |
  398|     40|        if (sd_json_variant_is_null(variant)) {
  ------------------
  |  Branch (398:13): [True: 0, False: 40]
  ------------------
  399|      0|                *s = mfree(*s);
  400|      0|                return 0;
  401|      0|        }
  402|       |
  403|     40|        if (!sd_json_variant_is_string(variant))
  ------------------
  |  Branch (403:13): [True: 0, False: 40]
  ------------------
  404|      0|                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a string.", strna(name));
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
  405|       |
  406|     40|        n = sd_json_variant_string(variant);
  407|     40|        if (!filename_is_valid(n) && !path_is_normalized(n))
  ------------------
  |  Branch (407:13): [True: 40, False: 0]
  |  Branch (407:38): [True: 0, False: 40]
  ------------------
  408|      0|                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a valid file name or normalized path.", strna(name));
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
  409|       |
  410|     40|        r = free_and_strdup(s, n);
  411|     40|        if (r < 0)
  ------------------
  |  Branch (411:13): [True: 0, False: 40]
  ------------------
  412|      0|                return json_log(variant, flags, r, "Failed to allocate string: %m");
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
  413|       |
  414|     40|        return 0;
  415|     40|}
user-record.c:dispatch_per_machine:
 1264|     40|static int dispatch_per_machine(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) {
 1265|       |
 1266|     40|        static const sd_json_dispatch_field per_machine_dispatch_table[] = {
 1267|     40|                { "matchMachineId",             _SD_JSON_VARIANT_TYPE_INVALID, NULL,                                 0,                                                   0              },
 1268|     40|                { "matchNotMachineId",          _SD_JSON_VARIANT_TYPE_INVALID, NULL,                                 0,                                                   0              },
 1269|     40|                { "matchHostname",              _SD_JSON_VARIANT_TYPE_INVALID, NULL,                                 0,                                                   0              },
 1270|     40|                { "matchNotHostname",           _SD_JSON_VARIANT_TYPE_INVALID, NULL,                                 0,                                                   0              },
 1271|     40|                { "blobDirectory",              SD_JSON_VARIANT_STRING,        json_dispatch_path,                   offsetof(UserRecord, blob_directory),                SD_JSON_STRICT },
 1272|     40|                { "blobManifest",               SD_JSON_VARIANT_OBJECT,        dispatch_blob_manifest,               offsetof(UserRecord, blob_manifest),                 0              },
 1273|     40|                { "iconName",                   SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, icon_name),                     SD_JSON_STRICT },
 1274|     40|                { "location",                   SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, location),                      0              },
 1275|     40|                { "shell",                      SD_JSON_VARIANT_STRING,        json_dispatch_filename_or_path,       offsetof(UserRecord, shell),                         0              },
 1276|     40|                { "umask",                      SD_JSON_VARIANT_UNSIGNED,      json_dispatch_umask,                  offsetof(UserRecord, umask),                         0              },
 1277|     40|                { "environment",                SD_JSON_VARIANT_ARRAY,         json_dispatch_strv_environment,       offsetof(UserRecord, environment),                   0              },
 1278|     40|                { "timeZone",                   SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, time_zone),                     SD_JSON_STRICT },
 1279|     40|                { "preferredLanguage",          SD_JSON_VARIANT_STRING,        json_dispatch_locale,                 offsetof(UserRecord, preferred_language),            0              },
 1280|     40|                { "additionalLanguages",        SD_JSON_VARIANT_ARRAY,         json_dispatch_locales,                offsetof(UserRecord, additional_languages),          0              },
 1281|     40|                { "niceLevel",                  _SD_JSON_VARIANT_TYPE_INVALID, json_dispatch_nice,                   offsetof(UserRecord, nice_level),                    0              },
 1282|     40|                { "resourceLimits",             _SD_JSON_VARIANT_TYPE_INVALID, json_dispatch_rlimits,                offsetof(UserRecord, rlimits),                       0              },
 1283|     40|                { "locked",                     SD_JSON_VARIANT_BOOLEAN,       sd_json_dispatch_tristate,            offsetof(UserRecord, locked),                        0              },
 1284|     40|                { "notBeforeUSec",              _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, not_before_usec),               0              },
 1285|     40|                { "notAfterUSec",               _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, not_after_usec),                0              },
 1286|     40|                { "storage",                    SD_JSON_VARIANT_STRING,        json_dispatch_user_storage,           offsetof(UserRecord, storage),                       0              },
 1287|     40|                { "diskSize",                   _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, disk_size),                     0              },
 1288|     40|                { "diskSizeRelative",           _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, disk_size_relative),            0              },
 1289|     40|                { "skeletonDirectory",          SD_JSON_VARIANT_STRING,        json_dispatch_path,                   offsetof(UserRecord, skeleton_directory),            SD_JSON_STRICT },
 1290|     40|                { "accessMode",                 SD_JSON_VARIANT_UNSIGNED,      json_dispatch_access_mode,            offsetof(UserRecord, access_mode),                   0              },
 1291|     40|                { "tasksMax",                   SD_JSON_VARIANT_UNSIGNED,      json_dispatch_tasks_or_memory_max,    offsetof(UserRecord, tasks_max),                     0              },
 1292|     40|                { "memoryHigh",                 SD_JSON_VARIANT_UNSIGNED,      json_dispatch_tasks_or_memory_max,    offsetof(UserRecord, memory_high),                   0              },
 1293|     40|                { "memoryMax",                  SD_JSON_VARIANT_UNSIGNED,      json_dispatch_tasks_or_memory_max,    offsetof(UserRecord, memory_max),                    0              },
 1294|     40|                { "cpuWeight",                  SD_JSON_VARIANT_UNSIGNED,      json_dispatch_weight,                 offsetof(UserRecord, cpu_weight),                    0              },
 1295|     40|                { "ioWeight",                   SD_JSON_VARIANT_UNSIGNED,      json_dispatch_weight,                 offsetof(UserRecord, io_weight),                     0              },
 1296|     40|                { "mountNoDevices",             SD_JSON_VARIANT_BOOLEAN,       sd_json_dispatch_stdbool,             offsetof(UserRecord, nodev),                         0              },
 1297|     40|                { "mountNoSuid",                SD_JSON_VARIANT_BOOLEAN,       sd_json_dispatch_stdbool,             offsetof(UserRecord, nosuid),                        0              },
 1298|     40|                { "mountNoExecute",             SD_JSON_VARIANT_BOOLEAN,       sd_json_dispatch_stdbool,             offsetof(UserRecord, noexec),                        0              },
 1299|     40|                { "cifsDomain",                 SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, cifs_domain),                   SD_JSON_STRICT },
 1300|     40|                { "cifsUserName",               SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, cifs_user_name),                SD_JSON_STRICT },
 1301|     40|                { "cifsService",                SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, cifs_service),                  SD_JSON_STRICT },
 1302|     40|                { "cifsExtraMountOptions",      SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, cifs_extra_mount_options),      0              },
 1303|     40|                { "imagePath",                  SD_JSON_VARIANT_STRING,        json_dispatch_path,                   offsetof(UserRecord, image_path),                    SD_JSON_STRICT },
 1304|     40|                { "uid",                        SD_JSON_VARIANT_UNSIGNED,      sd_json_dispatch_uid_gid,             offsetof(UserRecord, uid),                           0              },
 1305|     40|                { "gid",                        SD_JSON_VARIANT_UNSIGNED,      sd_json_dispatch_uid_gid,             offsetof(UserRecord, gid),                           0              },
 1306|     40|                { "memberOf",                   SD_JSON_VARIANT_ARRAY,         json_dispatch_user_group_list,        offsetof(UserRecord, member_of),                     SD_JSON_RELAX  },
 1307|     40|                { "capabilityBoundingSet",      SD_JSON_VARIANT_ARRAY,         sd_json_dispatch_strv,                offsetof(UserRecord, capability_bounding_set),       SD_JSON_STRICT },
 1308|     40|                { "capabilityAmbientSet",       SD_JSON_VARIANT_ARRAY,         sd_json_dispatch_strv,                offsetof(UserRecord, capability_ambient_set),        SD_JSON_STRICT },
 1309|     40|                { "fileSystemType",             SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, file_system_type),              SD_JSON_STRICT },
 1310|     40|                { "partitionUuid",              SD_JSON_VARIANT_STRING,        sd_json_dispatch_id128,               offsetof(UserRecord, partition_uuid),                0              },
 1311|     40|                { "luksUuid",                   SD_JSON_VARIANT_STRING,        sd_json_dispatch_id128,               offsetof(UserRecord, luks_uuid),                     0              },
 1312|     40|                { "fileSystemUuid",             SD_JSON_VARIANT_STRING,        sd_json_dispatch_id128,               offsetof(UserRecord, file_system_uuid),              0              },
 1313|     40|                { "luksDiscard",                _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_tristate,            offsetof(UserRecord, luks_discard),                  0,             },
 1314|     40|                { "luksOfflineDiscard",         _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_tristate,            offsetof(UserRecord, luks_offline_discard),          0,             },
 1315|     40|                { "luksCipher",                 SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, luks_cipher),                   SD_JSON_STRICT },
 1316|     40|                { "luksCipherMode",             SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, luks_cipher_mode),              SD_JSON_STRICT },
 1317|     40|                { "luksVolumeKeySize",          _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, luks_volume_key_size),          0              },
 1318|     40|                { "luksPbkdfHashAlgorithm",     SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, luks_pbkdf_hash_algorithm),     SD_JSON_STRICT },
 1319|     40|                { "luksPbkdfType",              SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, luks_pbkdf_type),               SD_JSON_STRICT },
 1320|     40|                { "luksPbkdfForceIterations",   _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, luks_pbkdf_force_iterations),   0              },
 1321|     40|                { "luksPbkdfTimeCostUSec",      _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, luks_pbkdf_time_cost_usec),     0              },
 1322|     40|                { "luksPbkdfMemoryCost",        _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, luks_pbkdf_memory_cost),        0              },
 1323|     40|                { "luksPbkdfParallelThreads",   _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, luks_pbkdf_parallel_threads),   0              },
 1324|     40|                { "luksSectorSize",             _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, luks_sector_size),              0              },
 1325|     40|                { "luksExtraMountOptions",      SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, luks_extra_mount_options),      0              },
 1326|     40|                { "dropCaches",                 SD_JSON_VARIANT_BOOLEAN,       sd_json_dispatch_tristate,            offsetof(UserRecord, drop_caches),                   0              },
 1327|     40|                { "autoResizeMode",             _SD_JSON_VARIANT_TYPE_INVALID, dispatch_auto_resize_mode,            offsetof(UserRecord, auto_resize_mode),              0              },
 1328|     40|                { "rebalanceWeight",            _SD_JSON_VARIANT_TYPE_INVALID, dispatch_rebalance_weight,            offsetof(UserRecord, rebalance_weight),              0              },
 1329|     40|                { "rateLimitIntervalUSec",      _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, ratelimit_interval_usec),       0              },
 1330|     40|                { "rateLimitBurst",             _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, ratelimit_burst),               0              },
 1331|     40|                { "enforcePasswordPolicy",      SD_JSON_VARIANT_BOOLEAN,       sd_json_dispatch_tristate,            offsetof(UserRecord, enforce_password_policy),       0              },
 1332|     40|                { "autoLogin",                  SD_JSON_VARIANT_BOOLEAN,       sd_json_dispatch_tristate,            offsetof(UserRecord, auto_login),                    0              },
 1333|     40|                { "preferredSessionType",       SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, preferred_session_type),        SD_JSON_STRICT },
 1334|     40|                { "preferredSessionLauncher",   SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,              offsetof(UserRecord, preferred_session_launcher),    SD_JSON_STRICT },
 1335|     40|                { "stopDelayUSec",              _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, stop_delay_usec),               0              },
 1336|     40|                { "killProcesses",              SD_JSON_VARIANT_BOOLEAN,       sd_json_dispatch_tristate,            offsetof(UserRecord, kill_processes),                0              },
 1337|     40|                { "passwordChangeMinUSec",      _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, password_change_min_usec),      0              },
 1338|     40|                { "passwordChangeMaxUSec",      _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, password_change_max_usec),      0              },
 1339|     40|                { "passwordChangeWarnUSec",     _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, password_change_warn_usec),     0              },
 1340|     40|                { "passwordChangeInactiveUSec", _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,              offsetof(UserRecord, password_change_inactive_usec), 0              },
 1341|     40|                { "passwordChangeNow",          SD_JSON_VARIANT_BOOLEAN,       sd_json_dispatch_tristate,            offsetof(UserRecord, password_change_now),           0              },
 1342|     40|                { "pkcs11TokenUri",             SD_JSON_VARIANT_ARRAY,         dispatch_pkcs11_uri_array,            offsetof(UserRecord, pkcs11_token_uri),              0              },
 1343|     40|                { "fido2HmacCredential",        SD_JSON_VARIANT_ARRAY,         dispatch_fido2_hmac_credential_array, 0,                                                   0              },
 1344|     40|                { "selfModifiableFields",       SD_JSON_VARIANT_ARRAY,         sd_json_dispatch_strv,                offsetof(UserRecord, self_modifiable_fields),        SD_JSON_STRICT },
 1345|     40|                { "selfModifiableBlobs",        SD_JSON_VARIANT_ARRAY,         sd_json_dispatch_strv,                offsetof(UserRecord, self_modifiable_blobs),         SD_JSON_STRICT },
 1346|     40|                { "selfModifiablePrivileged",   SD_JSON_VARIANT_ARRAY,         sd_json_dispatch_strv,                offsetof(UserRecord, self_modifiable_privileged),    SD_JSON_STRICT },
 1347|     40|                { "tmpLimit",                   _SD_JSON_VARIANT_TYPE_INVALID, dispatch_tmpfs_limit,                 offsetof(UserRecord, tmp_limit),                     0,             },
 1348|     40|                { "tmpLimitScale",              _SD_JSON_VARIANT_TYPE_INVALID, dispatch_tmpfs_limit_scale,           offsetof(UserRecord, tmp_limit),                     0,             },
 1349|     40|                { "devShmLimit",                _SD_JSON_VARIANT_TYPE_INVALID, dispatch_tmpfs_limit,                 offsetof(UserRecord, dev_shm_limit),                 0,             },
 1350|     40|                { "devShmLimitScale",           _SD_JSON_VARIANT_TYPE_INVALID, dispatch_tmpfs_limit_scale,           offsetof(UserRecord, dev_shm_limit),                 0,             },
 1351|     40|                { "defaultArea",                SD_JSON_VARIANT_STRING,        json_dispatch_filename,               offsetof(UserRecord, default_area),                  0              },
 1352|     40|                {},
 1353|     40|        };
 1354|       |
 1355|     40|        sd_json_variant *e;
 1356|     40|        int r;
 1357|       |
 1358|     40|        if (!variant)
  ------------------
  |  Branch (1358:13): [True: 40, False: 0]
  ------------------
 1359|     40|                return 0;
 1360|       |
 1361|      0|        if (!sd_json_variant_is_array(variant))
  ------------------
  |  Branch (1361:13): [True: 0, False: 0]
  ------------------
 1362|      0|                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an array.", strna(name));
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 1363|       |
 1364|      0|        JSON_VARIANT_ARRAY_FOREACH(e, variant) {
  ------------------
  |  |   37|      0|        _JSON_VARIANT_ARRAY_FOREACH(i, v, UNIQ_T(state, UNIQ))
  |  |  ------------------
  |  |  |  |   30|      0|        for (struct json_variant_foreach_state state = { (v), 0 };      \
  |  |  |  |   31|      0|             sd_json_variant_is_array(state.variant) &&                    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (31:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   32|      0|                     state.idx < sd_json_variant_elements(state.variant) && \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (32:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   33|      0|                     ({ i = sd_json_variant_by_index(state.variant, state.idx); \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (33:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   34|      0|                             true; });                                  \
  |  |  |  |   35|      0|             state.idx++)
  |  |  ------------------
  ------------------
 1365|      0|                if (!sd_json_variant_is_object(e))
  ------------------
  |  Branch (1365:21): [True: 0, False: 0]
  ------------------
 1366|      0|                        return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an array of objects.", strna(name));
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 1367|       |
 1368|      0|                r = per_machine_match(e, flags);
 1369|      0|                if (r < 0)
  ------------------
  |  Branch (1369:21): [True: 0, False: 0]
  ------------------
 1370|      0|                        return r;
 1371|      0|                if (r == 0)
  ------------------
  |  Branch (1371:21): [True: 0, False: 0]
  ------------------
 1372|      0|                        continue;
 1373|       |
 1374|      0|                r = sd_json_dispatch(e, per_machine_dispatch_table, flags, userdata);
 1375|      0|                if (r < 0)
  ------------------
  |  Branch (1375:21): [True: 0, False: 0]
  ------------------
 1376|      0|                        return r;
 1377|      0|        }
 1378|       |
 1379|      0|        return 0;
 1380|      0|}
user-record.c:dispatch_binding:
 1045|     40|static int dispatch_binding(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) {
 1046|       |
 1047|     40|        static const sd_json_dispatch_field binding_dispatch_table[] = {
 1048|     40|                { "blobDirectory",     SD_JSON_VARIANT_STRING,        json_dispatch_path,           offsetof(UserRecord, blob_directory),       SD_JSON_STRICT },
 1049|     40|                { "imagePath",         SD_JSON_VARIANT_STRING,        json_dispatch_image_path,     offsetof(UserRecord, image_path),           0              },
 1050|     40|                { "homeDirectory",     SD_JSON_VARIANT_STRING,        json_dispatch_home_directory, offsetof(UserRecord, home_directory),       0              },
 1051|     40|                { "partitionUuid",     SD_JSON_VARIANT_STRING,        sd_json_dispatch_id128,       offsetof(UserRecord, partition_uuid),       0              },
 1052|     40|                { "luksUuid",          SD_JSON_VARIANT_STRING,        sd_json_dispatch_id128,       offsetof(UserRecord, luks_uuid),            0              },
 1053|     40|                { "fileSystemUuid",    SD_JSON_VARIANT_STRING,        sd_json_dispatch_id128,       offsetof(UserRecord, file_system_uuid),     0              },
 1054|     40|                { "uid",               SD_JSON_VARIANT_UNSIGNED,      sd_json_dispatch_uid_gid,     offsetof(UserRecord, uid),                  0              },
 1055|     40|                { "gid",               SD_JSON_VARIANT_UNSIGNED,      sd_json_dispatch_uid_gid,     offsetof(UserRecord, gid),                  0              },
 1056|     40|                { "storage",           SD_JSON_VARIANT_STRING,        json_dispatch_user_storage,   offsetof(UserRecord, storage),              0              },
 1057|     40|                { "fileSystemType",    SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,      offsetof(UserRecord, file_system_type),     SD_JSON_STRICT },
 1058|     40|                { "luksCipher",        SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,      offsetof(UserRecord, luks_cipher),          SD_JSON_STRICT },
 1059|     40|                { "luksCipherMode",    SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,      offsetof(UserRecord, luks_cipher_mode),     SD_JSON_STRICT },
 1060|     40|                { "luksVolumeKeySize", _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,      offsetof(UserRecord, luks_volume_key_size), 0              },
 1061|     40|                {},
 1062|     40|        };
 1063|       |
 1064|     40|        sd_json_variant *m;
 1065|     40|        sd_id128_t mid;
 1066|     40|        int r;
 1067|       |
 1068|     40|        if (!variant)
  ------------------
  |  Branch (1068:13): [True: 40, False: 0]
  ------------------
 1069|     40|                return 0;
 1070|       |
 1071|      0|        if (!sd_json_variant_is_object(variant))
  ------------------
  |  Branch (1071:13): [True: 0, False: 0]
  ------------------
 1072|      0|                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an object.", strna(name));
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 1073|       |
 1074|      0|        r = sd_id128_get_machine(&mid);
 1075|      0|        if (r < 0)
  ------------------
  |  Branch (1075:13): [True: 0, False: 0]
  ------------------
 1076|      0|                return json_log(variant, flags, r, "Failed to determine machine ID: %m");
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 1077|       |
 1078|      0|        m = sd_json_variant_by_key(variant, SD_ID128_TO_STRING(mid));
  ------------------
  |  |   42|      0|#define SD_ID128_TO_STRING(id) sd_id128_to_string((id), (char[SD_ID128_STRING_MAX]) {})
  ------------------
 1079|      0|        if (!m)
  ------------------
  |  Branch (1079:13): [True: 0, False: 0]
  ------------------
 1080|      0|                return 0;
 1081|       |
 1082|      0|        return sd_json_dispatch(m, binding_dispatch_table, flags, userdata);
 1083|      0|}
user-record.c:dispatch_status:
 1382|     40|static int dispatch_status(const char *name, sd_json_variant *variant, sd_json_dispatch_flags_t flags, void *userdata) {
 1383|       |
 1384|     40|        static const sd_json_dispatch_field status_dispatch_table[] = {
 1385|     40|                { "diskUsage",                  _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,        offsetof(UserRecord, disk_usage),                    0              },
 1386|     40|                { "diskFree",                   _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,        offsetof(UserRecord, disk_free),                     0              },
 1387|     40|                { "diskSize",                   _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,        offsetof(UserRecord, disk_size),                     0              },
 1388|     40|                { "diskCeiling",                _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,        offsetof(UserRecord, disk_ceiling),                  0              },
 1389|     40|                { "diskFloor",                  _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,        offsetof(UserRecord, disk_floor),                    0              },
 1390|     40|                { "state",                      SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,        offsetof(UserRecord, state),                         SD_JSON_STRICT },
 1391|     40|                { "service",                    SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,        offsetof(UserRecord, service),                       SD_JSON_STRICT },
 1392|     40|                { "signedLocally",              _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_tristate,      offsetof(UserRecord, signed_locally),                0              },
 1393|     40|                { "goodAuthenticationCounter",  _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,        offsetof(UserRecord, good_authentication_counter),   0              },
 1394|     40|                { "badAuthenticationCounter",   _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,        offsetof(UserRecord, bad_authentication_counter),    0              },
 1395|     40|                { "lastGoodAuthenticationUSec", _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,        offsetof(UserRecord, last_good_authentication_usec), 0              },
 1396|     40|                { "lastBadAuthenticationUSec",  _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,        offsetof(UserRecord, last_bad_authentication_usec),  0              },
 1397|     40|                { "rateLimitBeginUSec",         _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,        offsetof(UserRecord, ratelimit_begin_usec),          0              },
 1398|     40|                { "rateLimitCount",             _SD_JSON_VARIANT_TYPE_INVALID, sd_json_dispatch_uint64,        offsetof(UserRecord, ratelimit_count),               0              },
 1399|     40|                { "removable",                  SD_JSON_VARIANT_BOOLEAN,       sd_json_dispatch_tristate,      offsetof(UserRecord, removable),                     0              },
 1400|     40|                { "accessMode",                 SD_JSON_VARIANT_UNSIGNED,      json_dispatch_access_mode,      offsetof(UserRecord, access_mode),                   0              },
 1401|     40|                { "fileSystemType",             SD_JSON_VARIANT_STRING,        sd_json_dispatch_string,        offsetof(UserRecord, file_system_type),              SD_JSON_STRICT },
 1402|     40|                { "fallbackShell",              SD_JSON_VARIANT_STRING,        json_dispatch_filename_or_path, offsetof(UserRecord, fallback_shell),                0              },
 1403|     40|                { "fallbackHomeDirectory",      SD_JSON_VARIANT_STRING,        json_dispatch_home_directory,   offsetof(UserRecord, fallback_home_directory),       0              },
 1404|     40|                { "useFallback",                SD_JSON_VARIANT_BOOLEAN,       sd_json_dispatch_stdbool,       offsetof(UserRecord, use_fallback),                  0              },
 1405|     40|                { "defaultArea",                SD_JSON_VARIANT_STRING,        json_dispatch_filename,         offsetof(UserRecord, default_area),                  0              },
 1406|     40|                {},
 1407|     40|        };
 1408|       |
 1409|     40|        sd_json_variant *m;
 1410|     40|        sd_id128_t mid;
 1411|     40|        int r;
 1412|       |
 1413|     40|        if (!variant)
  ------------------
  |  Branch (1413:13): [True: 40, False: 0]
  ------------------
 1414|     40|                return 0;
 1415|       |
 1416|      0|        if (!sd_json_variant_is_object(variant))
  ------------------
  |  Branch (1416:13): [True: 0, False: 0]
  ------------------
 1417|      0|                return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an object.", strna(name));
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 1418|       |
 1419|      0|        r = sd_id128_get_machine(&mid);
 1420|      0|        if (r < 0)
  ------------------
  |  Branch (1420:13): [True: 0, False: 0]
  ------------------
 1421|      0|                return json_log(variant, flags, r, "Failed to determine machine ID: %m");
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 1422|       |
 1423|      0|        m = sd_json_variant_by_key(variant, SD_ID128_TO_STRING(mid));
  ------------------
  |  |   42|      0|#define SD_ID128_TO_STRING(id) sd_id128_to_string((id), (char[SD_ID128_STRING_MAX]) {})
  ------------------
 1424|      0|        if (!m)
  ------------------
  |  Branch (1424:13): [True: 0, False: 0]
  ------------------
 1425|      0|                return 0;
 1426|       |
 1427|      0|        return sd_json_dispatch(m, status_dispatch_table, flags, userdata);
 1428|      0|}
user-record.c:user_record_augment:
 1455|     40|static int user_record_augment(UserRecord *h, sd_json_dispatch_flags_t json_flags) {
 1456|     40|        int r;
 1457|       |
 1458|     40|        assert(h);
 1459|       |
 1460|     40|        if (!FLAGS_SET(h->mask, USER_RECORD_REGULAR))
  ------------------
  |  Branch (1460:13): [True: 0, False: 40]
  ------------------
 1461|      0|                return 0;
 1462|       |
 1463|     40|        assert(h->user_name);
 1464|       |
 1465|     40|        if (!h->user_name_and_realm_auto && h->realm) {
  ------------------
  |  Branch (1465:13): [True: 40, False: 0]
  |  Branch (1465:45): [True: 0, False: 40]
  ------------------
 1466|      0|                h->user_name_and_realm_auto = strjoin(h->user_name, "@", h->realm);
  ------------------
  |  |   91|      0|#define strjoin(a, ...) strextend_with_separator_internal(NULL, NULL, a, __VA_ARGS__, NULL)
  ------------------
 1467|      0|                if (!h->user_name_and_realm_auto)
  ------------------
  |  Branch (1467:21): [True: 0, False: 0]
  ------------------
 1468|      0|                        return json_log_oom(h->json, json_flags);
  ------------------
  |  |  109|      0|        json_log(variant, flags, SYNTHETIC_ERRNO(ENOMEM), "Out of memory.")
  |  |  ------------------
  |  |  |  |  101|      0|        ({                                                              \
  |  |  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  106|      0|        })
  |  |  ------------------
  ------------------
 1469|      0|        }
 1470|       |
 1471|       |        /* Let's add in the following automatisms only for regular users, they don't make sense for any others */
 1472|     40|        if (user_record_disposition(h) != USER_REGULAR)
  ------------------
  |  Branch (1472:13): [True: 40, False: 0]
  ------------------
 1473|     40|                return 0;
 1474|       |
 1475|      0|        if (!h->home_directory && !h->home_directory_auto) {
  ------------------
  |  Branch (1475:13): [True: 0, False: 0]
  |  Branch (1475:35): [True: 0, False: 0]
  ------------------
 1476|      0|                h->home_directory_auto = path_join(get_home_root(), h->user_name);
  ------------------
  |  |   70|      0|#define path_join(...) path_extend_internal(NULL, __VA_ARGS__, POINTER_MAX)
  ------------------
 1477|      0|                if (!h->home_directory_auto)
  ------------------
  |  Branch (1477:21): [True: 0, False: 0]
  ------------------
 1478|      0|                        return json_log_oom(h->json, json_flags);
  ------------------
  |  |  109|      0|        json_log(variant, flags, SYNTHETIC_ERRNO(ENOMEM), "Out of memory.")
  |  |  ------------------
  |  |  |  |  101|      0|        ({                                                              \
  |  |  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  106|      0|        })
  |  |  ------------------
  ------------------
 1479|      0|        }
 1480|       |
 1481|      0|        if (!h->image_path && !h->image_path_auto) {
  ------------------
  |  Branch (1481:13): [True: 0, False: 0]
  |  Branch (1481:31): [True: 0, False: 0]
  ------------------
 1482|      0|                r = user_record_build_image_path(user_record_storage(h), user_record_user_name_and_realm(h), &h->image_path_auto);
 1483|      0|                if (r < 0)
  ------------------
  |  Branch (1483:21): [True: 0, False: 0]
  ------------------
 1484|      0|                        return json_log(h->json, json_flags, r, "Failed to determine default image path: %m");
  ------------------
  |  |  101|      0|        ({                                                              \
  |  |  102|      0|                int _level = json_dispatch_level(flags), _e = (error);  \
  |  |  103|      0|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (103:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|                        ? json_log_internal(variant, _level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  105|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  ------------------
  |  |  106|      0|        })
  ------------------
 1485|      0|        }
 1486|       |
 1487|      0|        return 0;
 1488|      0|}

group-record.c:USER_RECORD_REQUIRE_MASK:
  168|     40|static inline UserRecordMask USER_RECORD_REQUIRE_MASK(UserRecordLoadFlags f) {
  169|     40|        return (f >> 7) & _USER_RECORD_MASK_MAX;
  170|     40|}
user-record.c:USER_RECORD_ALLOW_MASK:
  172|     80|static inline UserRecordMask USER_RECORD_ALLOW_MASK(UserRecordLoadFlags f) {
  173|     80|        return ((f >> 14) & _USER_RECORD_MASK_MAX) | USER_RECORD_REQUIRE_MASK(f);
  174|     80|}
user-record.c:USER_RECORD_STRIP_MASK:
  176|    560|static inline UserRecordMask USER_RECORD_STRIP_MASK(UserRecordLoadFlags f) {
  177|    560|        return (f >> 21) & _USER_RECORD_MASK_MAX;
  178|    560|}
user-record.c:USER_RECORD_REQUIRE_MASK:
  168|    560|static inline UserRecordMask USER_RECORD_REQUIRE_MASK(UserRecordLoadFlags f) {
  169|    560|        return (f >> 7) & _USER_RECORD_MASK_MAX;
  170|    560|}

dropin_user_record_by_name:
  110|    244|int dropin_user_record_by_name(const char *name, const char *path, UserDBFlags flags, UserRecord **ret) {
  111|    244|        _cleanup_free_ char *found_path = NULL;
  ------------------
  |  |   82|    244|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    244|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  112|    244|        _cleanup_fclose_ FILE *f = NULL;
  ------------------
  |  |   61|    244|#define _cleanup_fclose_ _cleanup_(fclosep)
  |  |  ------------------
  |  |  |  |   78|    244|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  113|    244|        int r;
  114|       |
  115|    244|        assert(name);
  ------------------
  |  |   72|    244|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    244|        do {                                                            \
  |  |  |  |   59|    244|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    244|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 244]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    244|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    244|        } while (false)
  |  |  ------------------
  ------------------
  116|       |
  117|    244|        if (path) {
  ------------------
  |  Branch (117:13): [True: 0, False: 244]
  ------------------
  118|      0|                f = fopen(path, "re");
  119|      0|                if (!f)
  ------------------
  |  Branch (119:21): [True: 0, False: 0]
  ------------------
  120|      0|                        return errno == ENOENT ? -ESRCH : -errno; /* We generally want ESRCH to indicate no such user */
  ------------------
  |  Branch (120:32): [True: 0, False: 0]
  ------------------
  121|    244|        } else {
  122|    244|                const char *j;
  123|       |
  124|    244|                j = strjoina(name, ".user");
  ------------------
  |  |   94|    244|        ({                                                              \
  |  |   95|    244|                const char *_appendees_[] = { a, __VA_ARGS__ };         \
  |  |   96|    244|                char *_d_, *_p_;                                        \
  |  |   97|    244|                size_t _len_ = 0;                                       \
  |  |   98|    244|                size_t _i_;                                             \
  |  |   99|    732|                for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
  |  |  ------------------
  |  |  |  |  134|  1.46k|        (__builtin_choose_expr(                                         \
  |  |  |  |  135|  1.46k|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  |  |  136|  1.46k|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  |  |  137|  1.46k|                VOID_0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  128|    732|#  define VOID_0 ((void)0)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (99:31): [True: 488, False: 244]
  |  |  |  Branch (99:64): [True: 488, False: 0]
  |  |  ------------------
  |  |  100|    488|                        _len_ += strlen(_appendees_[_i_]);              \
  |  |  101|    244|                _p_ = _d_ = newa(char, _len_ + 1);                      \
  |  |  ------------------
  |  |  |  |   29|    244|        ({                                                              \
  |  |  |  |   30|    244|                size_t _n_ = (n);                                       \
  |  |  |  |   31|    244|                assert_se(MUL_ASSIGN_SAFE(&_n_, sizeof(t)));            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|    244|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|    244|        do {                                                            \
  |  |  |  |  |  |  |  |   59|    244|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|    244|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 244]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|    244|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|    244|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   32|    244|                (t*) alloca_safe(_n_);                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|    244|        ({                                                              \
  |  |  |  |  |  |   23|    244|                size_t _nn_ = (n);                                      \
  |  |  |  |  |  |   24|    244|                assert(_nn_ <= ALLOCA_MAX);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    244|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    244|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    244|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    244|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 244]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    244|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    244|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   25|    244|                alloca(_nn_ == 0 ? 1 : _nn_);                           \
  |  |  |  |  |  |   26|    244|        })                                                              \
  |  |  |  |  ------------------
  |  |  |  |   33|    244|        })
  |  |  ------------------
  |  |  102|    732|                for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
  |  |  ------------------
  |  |  |  |  134|  1.46k|        (__builtin_choose_expr(                                         \
  |  |  |  |  135|  1.46k|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  |  |  136|  1.46k|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  |  |  137|  1.46k|                VOID_0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  128|    732|#  define VOID_0 ((void)0)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (102:31): [True: 488, False: 244]
  |  |  |  Branch (102:64): [True: 488, False: 0]
  |  |  ------------------
  |  |  103|    488|                        _p_ = stpcpy(_p_, _appendees_[_i_]);            \
  |  |  104|    244|                *_p_ = 0;                                               \
  |  |  105|    244|                _d_;                                                    \
  |  |  106|    244|        })
  ------------------
  125|    244|                if (!filename_is_valid(j)) /* Doesn't qualify as valid filename? Then it's definitely not provided as a drop-in */
  ------------------
  |  Branch (125:21): [True: 19, False: 225]
  ------------------
  126|     19|                        return -ESRCH;
  127|       |
  128|    225|                r = search_and_fopen_nulstr(j, "re", NULL, USERDB_DROPIN_DIR_NULSTR("userdb"), &f, &found_path);
  ------------------
  |  |    9|    225|        "/etc/" n "\0"                          \
  |  |   10|    225|        "/run/" n "\0"                          \
  |  |   11|    225|        "/run/host/" n "\0"                     \
  |  |   12|    225|        "/usr/local/lib/" n "\0"                \
  |  |   13|    225|        "/usr/lib/" n "\0"
  ------------------
  129|    225|                if (r == -ENOENT)
  ------------------
  |  Branch (129:21): [True: 225, False: 0]
  ------------------
  130|    225|                        return -ESRCH;
  131|      0|                if (r < 0)
  ------------------
  |  Branch (131:21): [True: 0, False: 0]
  ------------------
  132|      0|                        return r;
  133|       |
  134|      0|                path = found_path;
  135|      0|        }
  136|       |
  137|      0|        return load_user(f, path, name, UID_INVALID, flags, ret);
  ------------------
  |  |   72|      0|#define UID_INVALID ((uid_t) -1)
  ------------------
  138|    244|}
dropin_user_record_by_uid:
  140|    171|int dropin_user_record_by_uid(uid_t uid, const char *path, UserDBFlags flags, UserRecord **ret) {
  141|    171|        _cleanup_free_ char *found_path = NULL;
  ------------------
  |  |   82|    171|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    171|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  142|    171|        _cleanup_fclose_ FILE *f = NULL;
  ------------------
  |  |   61|    171|#define _cleanup_fclose_ _cleanup_(fclosep)
  |  |  ------------------
  |  |  |  |   78|    171|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  143|    171|        int r;
  144|       |
  145|    171|        assert(uid_is_valid(uid));
  ------------------
  |  |   72|    171|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    171|        do {                                                            \
  |  |  |  |   59|    171|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    171|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 171]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    171|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    171|        } while (false)
  |  |  ------------------
  ------------------
  146|       |
  147|    171|        if (path) {
  ------------------
  |  Branch (147:13): [True: 0, False: 171]
  ------------------
  148|      0|                f = fopen(path, "re");
  149|      0|                if (!f)
  ------------------
  |  Branch (149:21): [True: 0, False: 0]
  ------------------
  150|      0|                        return errno == ENOENT ? -ESRCH : -errno;
  ------------------
  |  Branch (150:32): [True: 0, False: 0]
  ------------------
  151|    171|        } else {
  152|    171|                char buf[DECIMAL_STR_MAX(uid_t) + STRLEN(".user") + 1];
  153|       |
  154|    171|                xsprintf(buf, UID_FMT ".user", uid);
  ------------------
  |  |   22|    171|        assert_message_se(snprintf_ok(buf, ELEMENTSOF(buf), fmt, ##__VA_ARGS__), "xsprintf: " #buf "[] must be big enough")
  |  |  ------------------
  |  |  |  |   58|    171|        do {                                                            \
  |  |  |  |   59|    171|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    171|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 171]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    171|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    171|        } while (false)
  |  |  ------------------
  ------------------
  155|       |                /* Note that we don't bother to validate this as a filename, as this is generated from a decimal
  156|       |                 * integer, i.e. is definitely OK as a filename */
  157|       |
  158|    171|                r = search_and_fopen_nulstr(buf, "re", NULL, USERDB_DROPIN_DIR_NULSTR("userdb"), &f, &found_path);
  ------------------
  |  |    9|    171|        "/etc/" n "\0"                          \
  |  |   10|    171|        "/run/" n "\0"                          \
  |  |   11|    171|        "/run/host/" n "\0"                     \
  |  |   12|    171|        "/usr/local/lib/" n "\0"                \
  |  |   13|    171|        "/usr/lib/" n "\0"
  ------------------
  159|    171|                if (r == -ENOENT)
  ------------------
  |  Branch (159:21): [True: 171, False: 0]
  ------------------
  160|    171|                        return -ESRCH;
  161|      0|                if (r < 0)
  ------------------
  |  Branch (161:21): [True: 0, False: 0]
  ------------------
  162|      0|                        return r;
  163|       |
  164|      0|                path = found_path;
  165|      0|        }
  166|       |
  167|      0|        return load_user(f, path, NULL, uid, flags, ret);
  168|    171|}
dropin_group_record_by_name:
  254|    285|int dropin_group_record_by_name(const char *name, const char *path, UserDBFlags flags, GroupRecord **ret) {
  255|    285|        _cleanup_free_ char *found_path = NULL;
  ------------------
  |  |   82|    285|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    285|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  256|    285|        _cleanup_fclose_ FILE *f = NULL;
  ------------------
  |  |   61|    285|#define _cleanup_fclose_ _cleanup_(fclosep)
  |  |  ------------------
  |  |  |  |   78|    285|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  257|    285|        int r;
  258|       |
  259|    285|        assert(name);
  ------------------
  |  |   72|    285|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    285|        do {                                                            \
  |  |  |  |   59|    285|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    285|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 285]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    285|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    285|        } while (false)
  |  |  ------------------
  ------------------
  260|       |
  261|    285|        if (path) {
  ------------------
  |  Branch (261:13): [True: 0, False: 285]
  ------------------
  262|      0|                f = fopen(path, "re");
  263|      0|                if (!f)
  ------------------
  |  Branch (263:21): [True: 0, False: 0]
  ------------------
  264|      0|                        return errno == ENOENT ? -ESRCH : -errno;
  ------------------
  |  Branch (264:32): [True: 0, False: 0]
  ------------------
  265|    285|        } else {
  266|    285|                const char *j;
  267|       |
  268|    285|                j = strjoina(name, ".group");
  ------------------
  |  |   94|    285|        ({                                                              \
  |  |   95|    285|                const char *_appendees_[] = { a, __VA_ARGS__ };         \
  |  |   96|    285|                char *_d_, *_p_;                                        \
  |  |   97|    285|                size_t _len_ = 0;                                       \
  |  |   98|    285|                size_t _i_;                                             \
  |  |   99|    855|                for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
  |  |  ------------------
  |  |  |  |  134|  1.71k|        (__builtin_choose_expr(                                         \
  |  |  |  |  135|  1.71k|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  |  |  136|  1.71k|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  |  |  137|  1.71k|                VOID_0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  128|    855|#  define VOID_0 ((void)0)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (99:31): [True: 570, False: 285]
  |  |  |  Branch (99:64): [True: 570, False: 0]
  |  |  ------------------
  |  |  100|    570|                        _len_ += strlen(_appendees_[_i_]);              \
  |  |  101|    285|                _p_ = _d_ = newa(char, _len_ + 1);                      \
  |  |  ------------------
  |  |  |  |   29|    285|        ({                                                              \
  |  |  |  |   30|    285|                size_t _n_ = (n);                                       \
  |  |  |  |   31|    285|                assert_se(MUL_ASSIGN_SAFE(&_n_, sizeof(t)));            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|    285|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|    285|        do {                                                            \
  |  |  |  |  |  |  |  |   59|    285|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|    285|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 285]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|    285|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|    285|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   32|    285|                (t*) alloca_safe(_n_);                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|    285|        ({                                                              \
  |  |  |  |  |  |   23|    285|                size_t _nn_ = (n);                                      \
  |  |  |  |  |  |   24|    285|                assert(_nn_ <= ALLOCA_MAX);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    285|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    285|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    285|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    285|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 285]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    285|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    285|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   25|    285|                alloca(_nn_ == 0 ? 1 : _nn_);                           \
  |  |  |  |  |  |   26|    285|        })                                                              \
  |  |  |  |  ------------------
  |  |  |  |   33|    285|        })
  |  |  ------------------
  |  |  102|    855|                for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
  |  |  ------------------
  |  |  |  |  134|  1.71k|        (__builtin_choose_expr(                                         \
  |  |  |  |  135|  1.71k|                !__builtin_types_compatible_p(typeof(x), typeof(&*(x))), \
  |  |  |  |  136|  1.71k|                sizeof(x)/sizeof((x)[0]),                               \
  |  |  |  |  137|  1.71k|                VOID_0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  128|    855|#  define VOID_0 ((void)0)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (102:31): [True: 570, False: 285]
  |  |  |  Branch (102:64): [True: 570, False: 0]
  |  |  ------------------
  |  |  103|    570|                        _p_ = stpcpy(_p_, _appendees_[_i_]);            \
  |  |  104|    285|                *_p_ = 0;                                               \
  |  |  105|    285|                _d_;                                                    \
  |  |  106|    285|        })
  ------------------
  269|    285|                if (!filename_is_valid(j)) /* Doesn't qualify as valid filename? Then it's definitely not provided as a drop-in */
  ------------------
  |  Branch (269:21): [True: 28, False: 257]
  ------------------
  270|     28|                        return -ESRCH;
  271|       |
  272|    257|                r = search_and_fopen_nulstr(j, "re", NULL, USERDB_DROPIN_DIR_NULSTR("userdb"), &f, &found_path);
  ------------------
  |  |    9|    257|        "/etc/" n "\0"                          \
  |  |   10|    257|        "/run/" n "\0"                          \
  |  |   11|    257|        "/run/host/" n "\0"                     \
  |  |   12|    257|        "/usr/local/lib/" n "\0"                \
  |  |   13|    257|        "/usr/lib/" n "\0"
  ------------------
  273|    257|                if (r == -ENOENT)
  ------------------
  |  Branch (273:21): [True: 257, False: 0]
  ------------------
  274|    257|                        return -ESRCH;
  275|      0|                if (r < 0)
  ------------------
  |  Branch (275:21): [True: 0, False: 0]
  ------------------
  276|      0|                        return r;
  277|       |
  278|      0|                path = found_path;
  279|      0|        }
  280|       |
  281|      0|        return load_group(f, path, name, GID_INVALID, flags, ret);
  ------------------
  |  |   73|      0|#define GID_INVALID ((gid_t) -1)
  ------------------
  282|    285|}
dropin_group_record_by_gid:
  284|    135|int dropin_group_record_by_gid(gid_t gid, const char *path, UserDBFlags flags, GroupRecord **ret) {
  285|    135|        _cleanup_free_ char *found_path = NULL;
  ------------------
  |  |   82|    135|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|    135|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  286|    135|        _cleanup_fclose_ FILE *f = NULL;
  ------------------
  |  |   61|    135|#define _cleanup_fclose_ _cleanup_(fclosep)
  |  |  ------------------
  |  |  |  |   78|    135|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  287|    135|        int r;
  288|       |
  289|    135|        assert(gid_is_valid(gid));
  ------------------
  |  |   72|    135|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    135|        do {                                                            \
  |  |  |  |   59|    135|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    135|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 135]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    135|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    135|        } while (false)
  |  |  ------------------
  ------------------
  290|       |
  291|    135|        if (path) {
  ------------------
  |  Branch (291:13): [True: 0, False: 135]
  ------------------
  292|      0|                f = fopen(path, "re");
  293|      0|                if (!f)
  ------------------
  |  Branch (293:21): [True: 0, False: 0]
  ------------------
  294|      0|                        return errno == ENOENT ? -ESRCH : -errno;
  ------------------
  |  Branch (294:32): [True: 0, False: 0]
  ------------------
  295|    135|        } else {
  296|    135|                char buf[DECIMAL_STR_MAX(gid_t) + STRLEN(".group") + 1];
  297|       |
  298|    135|                xsprintf(buf, GID_FMT ".group", gid);
  ------------------
  |  |   22|    135|        assert_message_se(snprintf_ok(buf, ELEMENTSOF(buf), fmt, ##__VA_ARGS__), "xsprintf: " #buf "[] must be big enough")
  |  |  ------------------
  |  |  |  |   58|    135|        do {                                                            \
  |  |  |  |   59|    135|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    135|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 135]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    135|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    135|        } while (false)
  |  |  ------------------
  ------------------
  299|       |
  300|    135|                r = search_and_fopen_nulstr(buf, "re", NULL, USERDB_DROPIN_DIR_NULSTR("userdb"), &f, &found_path);
  ------------------
  |  |    9|    135|        "/etc/" n "\0"                          \
  |  |   10|    135|        "/run/" n "\0"                          \
  |  |   11|    135|        "/run/host/" n "\0"                     \
  |  |   12|    135|        "/usr/local/lib/" n "\0"                \
  |  |   13|    135|        "/usr/lib/" n "\0"
  ------------------
  301|    135|                if (r == -ENOENT)
  ------------------
  |  Branch (301:21): [True: 135, False: 0]
  ------------------
  302|    135|                        return -ESRCH;
  303|      0|                if (r < 0)
  ------------------
  |  Branch (303:21): [True: 0, False: 0]
  ------------------
  304|      0|                        return r;
  305|       |
  306|      0|                path = found_path;
  307|      0|        }
  308|       |
  309|      0|        return load_group(f, path, NULL, gid, flags, ret);
  310|    135|}

userdb_iterator_free:
   71|    835|UserDBIterator* userdb_iterator_free(UserDBIterator *iterator) {
   72|    835|        if (!iterator)
  ------------------
  |  Branch (72:13): [True: 0, False: 835]
  ------------------
   73|      0|                return NULL;
   74|       |
   75|    835|        sd_json_variant_unref(iterator->query);
   76|       |
   77|    835|        set_free(iterator->links);
   78|    835|        strv_free(iterator->dropins);
   79|       |
   80|    835|        switch (iterator->what) {
   81|       |
   82|    415|        case LOOKUP_USER:
  ------------------
  |  Branch (82:9): [True: 415, False: 420]
  ------------------
   83|    415|                user_record_unref(iterator->found_user);
   84|       |
   85|    415|                if (iterator->nss_iterating)
  ------------------
  |  Branch (85:21): [True: 0, False: 415]
  ------------------
   86|      0|                        endpwent();
   87|       |
   88|    415|                break;
   89|       |
   90|    420|        case LOOKUP_GROUP:
  ------------------
  |  Branch (90:9): [True: 420, False: 415]
  ------------------
   91|    420|                group_record_unref(iterator->found_group);
   92|       |
   93|    420|                if (iterator->nss_iterating)
  ------------------
  |  Branch (93:21): [True: 0, False: 420]
  ------------------
   94|      0|                        endgrent();
   95|       |
   96|    420|                break;
   97|       |
   98|      0|        case LOOKUP_MEMBERSHIP:
  ------------------
  |  Branch (98:9): [True: 0, False: 835]
  ------------------
   99|      0|                free(iterator->found_user_name);
  100|      0|                free(iterator->found_group_name);
  101|      0|                strv_free(iterator->members_of_group);
  102|      0|                free(iterator->filter_user_name);
  103|      0|                free(iterator->filter_group_name);
  104|       |
  105|      0|                if (iterator->nss_iterating)
  ------------------
  |  Branch (105:21): [True: 0, False: 0]
  ------------------
  106|      0|                        endgrent();
  107|       |
  108|      0|                break;
  109|       |
  110|      0|        default:
  ------------------
  |  Branch (110:9): [True: 0, False: 835]
  ------------------
  111|      0|                assert_not_reached();
  ------------------
  |  |   76|      0|        log_assert_failed_unreachable(PROJECT_FILE, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  112|    835|        }
  113|       |
  114|    835|        sd_event_unref(iterator->event);
  115|       |
  116|    835|        if (iterator->nss_systemd_blocked)
  ------------------
  |  Branch (116:13): [True: 835, False: 0]
  ------------------
  117|    835|                assert_se(userdb_block_nss_systemd(false) >= 0);
  ------------------
  |  |   65|    835|#define assert_se(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  118|       |
  119|    835|        return mfree(iterator);
  ------------------
  |  |  404|    835|        ({                                      \
  |  |  405|    835|                free(memory);                   \
  |  |  406|    835|                (typeof(memory)) NULL;          \
  |  |  407|    835|        })
  ------------------
  120|    835|}
userdb_by_name:
  893|    433|int userdb_by_name(const char *name, const UserDBMatch *match, UserDBFlags flags, UserRecord **ret) {
  894|    433|        _cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL;
  ------------------
  |  |   78|    433|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  895|    433|        _cleanup_(sd_json_variant_unrefp) sd_json_variant *query = NULL;
  ------------------
  |  |   78|    433|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  896|    433|        int r;
  897|       |
  898|       |        /* Well known errors this returns:
  899|       |         *         -EINVAL    → user name is not valid
  900|       |         *         -ESRCH     → no such user
  901|       |         *         -ENOEXEC   → found a user by request UID or name, but it does not match filter
  902|       |         *         -EHOSTDOWN → service failed for some reason
  903|       |         *         -ETIMEDOUT → service timed out
  904|       |         */
  905|       |
  906|    433|        assert(name);
  ------------------
  |  |   72|    433|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    433|        do {                                                            \
  |  |  |  |   59|    433|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    433|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 433]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    433|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    433|        } while (false)
  |  |  ------------------
  ------------------
  907|       |
  908|    433|        if (FLAGS_SET(flags, USERDB_PARSE_NUMERIC)) {
  ------------------
  |  |  414|    433|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 433, False: 0]
  |  |  ------------------
  ------------------
  909|    433|                uid_t uid;
  910|       |
  911|    433|                if (parse_uid(name, &uid) >= 0)
  ------------------
  |  Branch (911:21): [True: 171, False: 262]
  ------------------
  912|    171|                        return userdb_by_uid(uid, match, flags, ret);
  913|    433|        }
  914|       |
  915|    262|        if (!valid_user_group_name(name, VALID_USER_RELAX))
  ------------------
  |  Branch (915:13): [True: 18, False: 244]
  ------------------
  916|     18|                return -EINVAL;
  917|       |
  918|    244|        r = sd_json_buildo(&query, SD_JSON_BUILD_PAIR("userName", SD_JSON_BUILD_STRING(name)));
  ------------------
  |  |  276|    244|        sd_json_build((ret), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
  |  |  ------------------
  |  |  |  |  233|    244|#define SD_JSON_BUILD_OBJECT(...) _SD_JSON_BUILD_OBJECT_BEGIN, __VA_ARGS__, _SD_JSON_BUILD_OBJECT_END
  |  |  ------------------
  ------------------
  919|    244|        if (r < 0)
  ------------------
  |  Branch (919:13): [True: 0, False: 244]
  ------------------
  920|      0|                return r;
  921|       |
  922|    244|        r = query_append_uid_match(&query, match);
  923|    244|        if (r < 0)
  ------------------
  |  Branch (923:13): [True: 0, False: 244]
  ------------------
  924|      0|                return r;
  925|       |
  926|    244|        iterator = userdb_iterator_new(LOOKUP_USER, flags);
  927|    244|        if (!iterator)
  ------------------
  |  Branch (927:13): [True: 0, False: 244]
  ------------------
  928|      0|                return -ENOMEM;
  929|       |
  930|    244|        _cleanup_(user_record_unrefp) UserRecord *ur = NULL;
  ------------------
  |  |   78|    244|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  931|    244|        r = userdb_start_query(iterator, "io.systemd.UserDatabase.GetUserRecord", /* more= */ false, query, flags);
  932|    244|        if (r >= 0) {
  ------------------
  |  Branch (932:13): [True: 0, False: 244]
  ------------------
  933|      0|                r = userdb_process(iterator, &ur, /* ret_group_record= */ NULL, /* ret_user_name= */ NULL, /* ret_group_name= */ NULL);
  934|      0|                if (r == -ENOEXEC) /* found a user matching UID or name, but not filter. In this case the
  ------------------
  |  Branch (934:21): [True: 0, False: 0]
  ------------------
  935|       |                                    * fallback paths below are pointless */
  936|      0|                        return r;
  937|      0|        }
  938|    244|        if (r < 0) { /* If the above fails for any other reason, try fallback paths */
  ------------------
  |  Branch (938:13): [True: 244, False: 0]
  ------------------
  939|    244|                r = userdb_by_name_fallbacks(name, iterator, flags, &ur);
  940|    244|                if (r < 0)
  ------------------
  |  Branch (940:21): [True: 214, False: 30]
  ------------------
  941|    214|                        return r;
  942|    244|        }
  943|       |
  944|       |        /* NB: we always apply our own filtering here, explicitly, regardless if the server supported it or
  945|       |         * not. It's more robust this way, we never know how carefully the server is written, and whether it
  946|       |         * properly implements all details of the filtering logic. */
  947|     30|        if (!user_record_match(ur, match))
  ------------------
  |  Branch (947:13): [True: 27, False: 3]
  ------------------
  948|     27|                return -ENOEXEC;
  949|       |
  950|      3|        if (ret)
  ------------------
  |  Branch (950:13): [True: 3, False: 0]
  ------------------
  951|      3|                *ret = TAKE_PTR(ur);
  ------------------
  |  |  388|      3|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      3|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      3|        ({                                                       \
  |  |  |  |  |  |  381|      3|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      3|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      3|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      3|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      3|                _var_;                                           \
  |  |  |  |  |  |  386|      3|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  952|       |
  953|      3|        return 0;
  954|     30|}
userdb_by_uid:
 1000|    171|int userdb_by_uid(uid_t uid, const UserDBMatch *match, UserDBFlags flags, UserRecord **ret) {
 1001|    171|        _cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL;
  ------------------
  |  |   78|    171|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
 1002|    171|        _cleanup_(sd_json_variant_unrefp) sd_json_variant *query = NULL;
  ------------------
  |  |   78|    171|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
 1003|    171|        int r;
 1004|       |
 1005|    171|        if (!uid_is_valid(uid))
  ------------------
  |  Branch (1005:13): [True: 0, False: 171]
  ------------------
 1006|      0|                return -EINVAL;
 1007|       |
 1008|    171|        r = sd_json_buildo(&query, SD_JSON_BUILD_PAIR("uid", SD_JSON_BUILD_UNSIGNED(uid)));
  ------------------
  |  |  276|    171|        sd_json_build((ret), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
  |  |  ------------------
  |  |  |  |  233|    171|#define SD_JSON_BUILD_OBJECT(...) _SD_JSON_BUILD_OBJECT_BEGIN, __VA_ARGS__, _SD_JSON_BUILD_OBJECT_END
  |  |  ------------------
  ------------------
 1009|    171|        if (r < 0)
  ------------------
  |  Branch (1009:13): [True: 0, False: 171]
  ------------------
 1010|      0|                return r;
 1011|       |
 1012|    171|        r = query_append_uid_match(&query, match);
 1013|    171|        if (r < 0)
  ------------------
  |  Branch (1013:13): [True: 0, False: 171]
  ------------------
 1014|      0|                return r;
 1015|       |
 1016|    171|        iterator = userdb_iterator_new(LOOKUP_USER, flags);
 1017|    171|        if (!iterator)
  ------------------
  |  Branch (1017:13): [True: 0, False: 171]
  ------------------
 1018|      0|                return -ENOMEM;
 1019|       |
 1020|    171|        _cleanup_(user_record_unrefp) UserRecord *ur = NULL;
  ------------------
  |  |   78|    171|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
 1021|    171|        r = userdb_start_query(iterator, "io.systemd.UserDatabase.GetUserRecord", /* more= */ false, query, flags);
 1022|    171|        if (r >= 0) {
  ------------------
  |  Branch (1022:13): [True: 0, False: 171]
  ------------------
 1023|      0|                r = userdb_process(iterator, &ur, /* ret_group_record= */ NULL, /* ret_user_name= */ NULL, /* ret_group_name= */ NULL);
 1024|      0|                if (r == -ENOEXEC)
  ------------------
  |  Branch (1024:21): [True: 0, False: 0]
  ------------------
 1025|      0|                        return r;
 1026|      0|        }
 1027|    171|        if (r < 0) {
  ------------------
  |  Branch (1027:13): [True: 171, False: 0]
  ------------------
 1028|    171|                r = userdb_by_uid_fallbacks(uid, iterator, flags, &ur);
 1029|    171|                if (r < 0)
  ------------------
  |  Branch (1029:21): [True: 117, False: 54]
  ------------------
 1030|    117|                        return r;
 1031|    171|        }
 1032|       |
 1033|     54|        if (!user_record_match(ur, match))
  ------------------
  |  Branch (1033:13): [True: 15, False: 39]
  ------------------
 1034|     15|                return -ENOEXEC;
 1035|       |
 1036|     39|        if (ret)
  ------------------
  |  Branch (1036:13): [True: 39, False: 0]
  ------------------
 1037|     39|                *ret = TAKE_PTR(ur);
  ------------------
  |  |  388|     39|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|     39|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|     39|        ({                                                       \
  |  |  |  |  |  |  381|     39|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|     39|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|     39|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|     39|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|     39|                _var_;                                           \
  |  |  |  |  |  |  386|     39|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1038|       |
 1039|     39|        return 0;
 1040|     54|}
groupdb_by_name:
 1357|    428|int groupdb_by_name(const char *name, const UserDBMatch *match, UserDBFlags flags, GroupRecord **ret) {
 1358|    428|        _cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL;
  ------------------
  |  |   78|    428|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
 1359|    428|        _cleanup_(sd_json_variant_unrefp) sd_json_variant *query = NULL;
  ------------------
  |  |   78|    428|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
 1360|    428|        int r;
 1361|       |
 1362|    428|        assert(name);
  ------------------
  |  |   72|    428|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    428|        do {                                                            \
  |  |  |  |   59|    428|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    428|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 428]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    428|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    428|        } while (false)
  |  |  ------------------
  ------------------
 1363|       |
 1364|    428|        if (FLAGS_SET(flags, USERDB_PARSE_NUMERIC)) {
  ------------------
  |  |  414|    428|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 428, False: 0]
  |  |  ------------------
  ------------------
 1365|    428|                gid_t gid;
 1366|       |
 1367|    428|                if (parse_gid(name, &gid) >= 0)
  ------------------
  |  Branch (1367:21): [True: 135, False: 293]
  ------------------
 1368|    135|                        return groupdb_by_gid(gid, match, flags, ret);
 1369|    428|        }
 1370|       |
 1371|    293|        if (!valid_user_group_name(name, VALID_USER_RELAX))
  ------------------
  |  Branch (1371:13): [True: 8, False: 285]
  ------------------
 1372|      8|                return -EINVAL;
 1373|       |
 1374|    285|        r = sd_json_buildo(&query, SD_JSON_BUILD_PAIR("groupName", SD_JSON_BUILD_STRING(name)));
  ------------------
  |  |  276|    285|        sd_json_build((ret), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
  |  |  ------------------
  |  |  |  |  233|    285|#define SD_JSON_BUILD_OBJECT(...) _SD_JSON_BUILD_OBJECT_BEGIN, __VA_ARGS__, _SD_JSON_BUILD_OBJECT_END
  |  |  ------------------
  ------------------
 1375|    285|        if (r < 0)
  ------------------
  |  Branch (1375:13): [True: 0, False: 285]
  ------------------
 1376|      0|                return r;
 1377|       |
 1378|    285|        r = query_append_gid_match(&query, match);
 1379|    285|        if (r < 0)
  ------------------
  |  Branch (1379:13): [True: 0, False: 285]
  ------------------
 1380|      0|                return r;
 1381|       |
 1382|    285|        iterator = userdb_iterator_new(LOOKUP_GROUP, flags);
 1383|    285|        if (!iterator)
  ------------------
  |  Branch (1383:13): [True: 0, False: 285]
  ------------------
 1384|      0|                return -ENOMEM;
 1385|       |
 1386|    285|        _cleanup_(group_record_unrefp) GroupRecord *gr = NULL;
  ------------------
  |  |   78|    285|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
 1387|    285|        r = userdb_start_query(iterator, "io.systemd.UserDatabase.GetGroupRecord", /* more= */ false, query, flags);
 1388|    285|        if (r >= 0) {
  ------------------
  |  Branch (1388:13): [True: 0, False: 285]
  ------------------
 1389|      0|                r = userdb_process(iterator, /* ret_user_record= */ NULL, &gr, /* ret_user_name= */ NULL, /* ret_group_name= */ NULL);
 1390|      0|                if (r == -ENOEXEC)
  ------------------
  |  Branch (1390:21): [True: 0, False: 0]
  ------------------
 1391|      0|                        return r;
 1392|      0|        }
 1393|    285|        if (r < 0) {
  ------------------
  |  Branch (1393:13): [True: 285, False: 0]
  ------------------
 1394|    285|                r = groupdb_by_name_fallbacks(name, iterator, flags, &gr);
 1395|    285|                if (r < 0)
  ------------------
  |  Branch (1395:21): [True: 255, False: 30]
  ------------------
 1396|    255|                        return r;
 1397|    285|        }
 1398|       |
 1399|       |        /* As above, we apply our own client-side filtering even if server-side filtering worked, for robustness and simplicity reasons. */
 1400|     30|        if (!group_record_match(gr, match))
  ------------------
  |  Branch (1400:13): [True: 29, False: 1]
  ------------------
 1401|     29|                return -ENOEXEC;
 1402|       |
 1403|      1|        if (ret)
  ------------------
  |  Branch (1403:13): [True: 1, False: 0]
  ------------------
 1404|      1|                *ret = TAKE_PTR(gr);
  ------------------
  |  |  388|      1|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      1|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      1|        ({                                                       \
  |  |  |  |  |  |  381|      1|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      1|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      1|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      1|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      1|                _var_;                                           \
  |  |  |  |  |  |  386|      1|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1405|       |
 1406|      1|        return 0;
 1407|     30|}
groupdb_by_gid:
 1452|    135|int groupdb_by_gid(gid_t gid, const UserDBMatch *match, UserDBFlags flags, GroupRecord **ret) {
 1453|    135|        _cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL;
  ------------------
  |  |   78|    135|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
 1454|    135|        _cleanup_(sd_json_variant_unrefp) sd_json_variant *query = NULL;
  ------------------
  |  |   78|    135|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
 1455|    135|        int r;
 1456|       |
 1457|    135|        if (!gid_is_valid(gid))
  ------------------
  |  Branch (1457:13): [True: 0, False: 135]
  ------------------
 1458|      0|                return -EINVAL;
 1459|       |
 1460|    135|        r = sd_json_buildo(&query, SD_JSON_BUILD_PAIR("gid", SD_JSON_BUILD_UNSIGNED(gid)));
  ------------------
  |  |  276|    135|        sd_json_build((ret), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
  |  |  ------------------
  |  |  |  |  233|    135|#define SD_JSON_BUILD_OBJECT(...) _SD_JSON_BUILD_OBJECT_BEGIN, __VA_ARGS__, _SD_JSON_BUILD_OBJECT_END
  |  |  ------------------
  ------------------
 1461|    135|        if (r < 0)
  ------------------
  |  Branch (1461:13): [True: 0, False: 135]
  ------------------
 1462|      0|                return r;
 1463|       |
 1464|    135|        r = query_append_gid_match(&query, match);
 1465|    135|        if (r < 0)
  ------------------
  |  Branch (1465:13): [True: 0, False: 135]
  ------------------
 1466|      0|                return r;
 1467|       |
 1468|    135|        iterator = userdb_iterator_new(LOOKUP_GROUP, flags);
 1469|    135|        if (!iterator)
  ------------------
  |  Branch (1469:13): [True: 0, False: 135]
  ------------------
 1470|      0|                return -ENOMEM;
 1471|       |
 1472|    135|        _cleanup_(group_record_unrefp) GroupRecord *gr = NULL;
  ------------------
  |  |   78|    135|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
 1473|    135|        r = userdb_start_query(iterator, "io.systemd.UserDatabase.GetGroupRecord", /* more= */ false, query, flags);
 1474|    135|        if (r >= 0) {
  ------------------
  |  Branch (1474:13): [True: 0, False: 135]
  ------------------
 1475|      0|                r = userdb_process(iterator, /* ret_user_record= */ NULL, &gr, /* ret_user_name= */ NULL, /* ret_group_name= */ NULL);
 1476|      0|                if (r == -ENOEXEC)
  ------------------
  |  Branch (1476:21): [True: 0, False: 0]
  ------------------
 1477|      0|                        return r;
 1478|      0|        }
 1479|    135|        if (r < 0) {
  ------------------
  |  Branch (1479:13): [True: 135, False: 0]
  ------------------
 1480|    135|                r = groupdb_by_gid_fallbacks(gid, iterator, flags, &gr);
 1481|    135|                if (r < 0)
  ------------------
  |  Branch (1481:21): [True: 95, False: 40]
  ------------------
 1482|     95|                        return r;
 1483|    135|        }
 1484|       |
 1485|     40|        if (!group_record_match(gr, match))
  ------------------
  |  Branch (1485:13): [True: 12, False: 28]
  ------------------
 1486|     12|                return -ENOEXEC;
 1487|       |
 1488|     28|        if (ret)
  ------------------
  |  Branch (1488:13): [True: 28, False: 0]
  ------------------
 1489|     28|                *ret = TAKE_PTR(gr);
  ------------------
  |  |  388|     28|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|     28|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|     28|        ({                                                       \
  |  |  |  |  |  |  381|     28|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|     28|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|     28|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|     28|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|     28|                _var_;                                           \
  |  |  |  |  |  |  386|     28|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1490|       |
 1491|     28|        return 0;
 1492|     40|}
userdb_block_nss_systemd:
 1978|  1.67k|int userdb_block_nss_systemd(int b) {
 1979|  1.67k|        _cleanup_(dlclosep) void *dl = NULL;
  ------------------
  |  |   78|  1.67k|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
 1980|  1.67k|        int (*call)(bool b);
 1981|       |
 1982|       |        /* Note that we might be called from libnss_systemd.so.2 itself, but that should be fine, really. */
 1983|       |
 1984|  1.67k|        dl = dlopen(LIBDIR "/libnss_systemd.so.2", RTLD_NOW|RTLD_NODELETE);
  ------------------
  |  |  507|  1.67k|#define LIBDIR "/usr/lib/x86_64-linux-gnu"
  ------------------
 1985|  1.67k|        if (!dl) {
  ------------------
  |  Branch (1985:13): [True: 1.67k, False: 0]
  ------------------
 1986|       |                /* If the file isn't installed, don't complain loudly */
 1987|  1.67k|                log_debug("Failed to dlopen(libnss_systemd.so.2), ignoring: %s", dlerror());
  ------------------
  |  |  220|  1.67k|#define log_debug(...)     log_full(LOG_DEBUG,   __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|  1.67k|        ({                                                             \
  |  |  |  |  212|  1.67k|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|  1.67k|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|  1.67k|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|  1.67k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|  1.67k|        do {                                                            \
  |  |  |  |  |  |  |  |   59|  1.67k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|  1.67k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 1.67k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|  1.67k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|  1.67k|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|  1.67k|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|  1.67k|        ({                                                              \
  |  |  |  |  |  |  190|  1.67k|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|  1.67k|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 1.67k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|  1.67k|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|  1.67k|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|  3.34k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|  1.67k|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|  1.67k|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 1.67k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.67k|        })
  |  |  |  |  ------------------
  |  |  |  |  215|  1.67k|        })
  |  |  ------------------
  ------------------
 1988|  1.67k|                return 0;
 1989|  1.67k|        }
 1990|       |
 1991|      0|        log_debug("Loaded '%s' via dlopen()", LIBDIR "/libnss_systemd.so.2");
  ------------------
  |  |  220|      0|#define log_debug(...)     log_full(LOG_DEBUG,   __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  211|      0|        ({                                                             \
  |  |  |  |  212|      0|                if (BUILD_MODE_DEVELOPER)                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   23|      0|#define BUILD_MODE_DEVELOPER 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (23:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                        assert(!strstr(fmt, "%m"));                    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  214|      0|                (void) log_full_errno_zerook(level, 0, fmt, ##__VA_ARGS__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  215|      0|        })
  |  |  ------------------
  ------------------
 1992|       |
 1993|      0|        call = dlsym(dl, "_nss_systemd_block");
 1994|      0|        if (!call)
  ------------------
  |  Branch (1994:13): [True: 0, False: 0]
  ------------------
 1995|       |                /* If the file is installed but lacks the symbol we expect, things are weird, let's complain */
 1996|      0|                return log_debug_errno(SYNTHETIC_ERRNO(ELIBBAD),
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
 1997|      0|                                       "Unable to find symbol _nss_systemd_block in libnss_systemd.so.2: %s", dlerror());
 1998|       |
 1999|      0|        return call(b);
 2000|      0|}
userdb.c:query_append_uid_match:
  825|    415|static int query_append_uid_match(sd_json_variant **query, const UserDBMatch *match) {
  826|    415|        int r;
  827|       |
  828|    415|        assert(query);
  ------------------
  |  |   72|    415|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    415|        do {                                                            \
  |  |  |  |   59|    415|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    415|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 415]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    415|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    415|        } while (false)
  |  |  ------------------
  ------------------
  829|       |
  830|    415|        if (!userdb_match_is_set(match))
  ------------------
  |  Branch (830:13): [True: 0, False: 415]
  ------------------
  831|      0|                return 0;
  832|       |
  833|    415|        r = sd_json_variant_merge_objectbo(
  ------------------
  |  |  178|    415|        sd_json_variant_merge_objectb((v), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
  |  |  ------------------
  |  |  |  |  233|    415|#define SD_JSON_BUILD_OBJECT(...) _SD_JSON_BUILD_OBJECT_BEGIN, __VA_ARGS__, _SD_JSON_BUILD_OBJECT_END
  |  |  ------------------
  ------------------
  834|    415|                        query,
  835|    415|                        SD_JSON_BUILD_PAIR_CONDITION(!strv_isempty(match->fuzzy_names), "fuzzyNames", SD_JSON_BUILD_STRV(match->fuzzy_names)),
  836|    415|                        SD_JSON_BUILD_PAIR_CONDITION(match->uid_min > 0, "uidMin", SD_JSON_BUILD_UNSIGNED(match->uid_min)),
  837|    415|                        SD_JSON_BUILD_PAIR_CONDITION(match->uid_max < UID_INVALID-1, "uidMax", SD_JSON_BUILD_UNSIGNED(match->uid_max)));
  838|    415|        if (r < 0)
  ------------------
  |  Branch (838:13): [True: 0, False: 415]
  ------------------
  839|      0|                return r;
  840|       |
  841|    415|        return query_append_disposition_mask(query, match->disposition_mask);
  842|    415|}
userdb.c:query_append_disposition_mask:
  802|    835|static int query_append_disposition_mask(sd_json_variant **query, uint64_t mask) {
  803|    835|        int r;
  804|       |
  805|    835|        assert(query);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  806|       |
  807|    835|        if (FLAGS_SET(mask, USER_DISPOSITION_MASK_ALL))
  ------------------
  |  |  414|    835|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 835]
  |  |  ------------------
  ------------------
  808|      0|                return 0;
  809|       |
  810|    835|        _cleanup_strv_free_ char **dispositions = NULL;
  ------------------
  |  |   21|    835|#define _cleanup_strv_free_ _cleanup_(strv_freep)
  |  |  ------------------
  |  |  |  |   78|    835|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  811|  6.68k|        for (UserDisposition d = 0; d < _USER_DISPOSITION_MAX; d++) {
  ------------------
  |  Branch (811:37): [True: 5.84k, False: 835]
  ------------------
  812|  5.84k|                if (!BITS_SET(mask, d))
  ------------------
  |  |   46|  5.84k|#define BITS_SET(bits, ...) FLAGS_SET(bits, INDEXES_TO_MASK(typeof(bits), ##__VA_ARGS__))
  |  |  ------------------
  |  |  |  |  414|  75.9k|        ((~(v) & (flags)) == 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (414:19): [True: 0, False: 5.84k]
  |  |  |  |  |  Branch (414:19): [Folded - Ignored]
  |  |  |  |  |  Branch (414:19): [True: 0, False: 5.84k]
  |  |  |  |  |  Branch (414:19): [Folded - Ignored]
  |  |  |  |  |  Branch (414:19): [True: 5.84k, False: 5.84k]
  |  |  |  |  |  Branch (414:19): [True: 5.84k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (812:21): [True: 4.17k, False: 1.67k]
  ------------------
  813|  4.17k|                        continue;
  814|       |
  815|  1.67k|                r = strv_extend(&dispositions, user_disposition_to_string(d));
  816|  1.67k|                if (r < 0)
  ------------------
  |  Branch (816:21): [True: 0, False: 1.67k]
  ------------------
  817|      0|                        return r;
  818|  1.67k|        }
  819|       |
  820|    835|        return sd_json_variant_merge_objectbo(
  ------------------
  |  |  178|    835|        sd_json_variant_merge_objectb((v), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
  |  |  ------------------
  |  |  |  |  233|    835|#define SD_JSON_BUILD_OBJECT(...) _SD_JSON_BUILD_OBJECT_BEGIN, __VA_ARGS__, _SD_JSON_BUILD_OBJECT_END
  |  |  ------------------
  ------------------
  821|    835|                        query,
  822|    835|                        SD_JSON_BUILD_PAIR_STRV("dispositionMask", dispositions));
  823|    835|}
userdb.c:userdb_iterator_new:
  122|    835|static UserDBIterator* userdb_iterator_new(LookupWhat what, UserDBFlags flags) {
  123|    835|        UserDBIterator *i;
  124|       |
  125|    835|        assert(what >= 0);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  126|    835|        assert(what < _LOOKUP_WHAT_MAX);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  127|       |
  128|    835|        i = new(UserDBIterator, 1);
  ------------------
  |  |   17|    835|#define new(t, n) ((t*) malloc_multiply(n, sizeof(t)))
  ------------------
  129|    835|        if (!i)
  ------------------
  |  Branch (129:13): [True: 0, False: 835]
  ------------------
  130|      0|                return NULL;
  131|       |
  132|    835|        *i = (UserDBIterator) {
  133|    835|                .what = what,
  134|    835|                .flags = flags,
  135|    835|                .synthesize_root = !FLAGS_SET(flags, USERDB_DONT_SYNTHESIZE_INTRINSIC),
  ------------------
  |  |  414|    835|        ((~(v) & (flags)) == 0)
  ------------------
  136|    835|                .synthesize_nobody = !FLAGS_SET(flags, USERDB_DONT_SYNTHESIZE_INTRINSIC),
  ------------------
  |  |  414|    835|        ((~(v) & (flags)) == 0)
  ------------------
  137|    835|        };
  138|       |
  139|    835|        return i;
  140|    835|}
userdb.c:userdb_start_query:
  513|    835|                UserDBFlags flags) {
  514|       |
  515|    835|        _cleanup_strv_free_ char **except = NULL, **only = NULL;
  ------------------
  |  |   21|    835|#define _cleanup_strv_free_ _cleanup_(strv_freep)
  |  |  ------------------
  |  |  |  |   78|    835|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  516|    835|        _cleanup_closedir_ DIR *d = NULL;
  ------------------
  |  |   63|    835|#define _cleanup_closedir_ _cleanup_(closedirp)
  |  |  ------------------
  |  |  |  |   78|    835|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  517|    835|        const char *e;
  518|    835|        int r, ret = 0;
  519|       |
  520|    835|        assert(iterator);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  521|    835|        assert(method);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  522|       |
  523|    835|        if (FLAGS_SET(flags, USERDB_EXCLUDE_VARLINK))
  ------------------
  |  |  414|    835|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 835]
  |  |  ------------------
  ------------------
  524|      0|                return -ENOLINK;
  525|       |
  526|    835|        assert(!iterator->query);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  527|    835|        iterator->method = method; /* note: we don't make a copy here! */
  528|    835|        iterator->query = sd_json_variant_ref(query);
  529|    835|        iterator->more = more;
  530|       |
  531|    835|        e = getenv("SYSTEMD_BYPASS_USERDB");
  532|    835|        if (e) {
  ------------------
  |  Branch (532:13): [True: 0, False: 835]
  ------------------
  533|      0|                r = parse_boolean(e);
  534|      0|                if (r > 0)
  ------------------
  |  Branch (534:21): [True: 0, False: 0]
  ------------------
  535|      0|                        return -ENOLINK;
  536|      0|                if (r < 0) {
  ------------------
  |  Branch (536:21): [True: 0, False: 0]
  ------------------
  537|      0|                        except = strv_split(e, ":");
  538|      0|                        if (!except)
  ------------------
  |  Branch (538:29): [True: 0, False: 0]
  ------------------
  539|      0|                                return -ENOMEM;
  540|      0|                }
  541|      0|        }
  542|       |
  543|    835|        e = getenv("SYSTEMD_ONLY_USERDB");
  544|    835|        if (e) {
  ------------------
  |  Branch (544:13): [True: 0, False: 835]
  ------------------
  545|      0|                only = strv_split(e, ":");
  546|      0|                if (!only)
  ------------------
  |  Branch (546:21): [True: 0, False: 0]
  ------------------
  547|      0|                        return -ENOMEM;
  548|      0|        }
  549|       |
  550|       |        /* First, let's talk to the multiplexer, if we can */
  551|    835|        if ((flags & (USERDB_AVOID_MULTIPLEXER|USERDB_EXCLUDE_DYNAMIC_USER|USERDB_EXCLUDE_NSS|USERDB_EXCLUDE_DROPIN|USERDB_DONT_SYNTHESIZE_INTRINSIC|USERDB_DONT_SYNTHESIZE_FOREIGN)) == 0 &&
  ------------------
  |  Branch (551:13): [True: 835, False: 0]
  ------------------
  552|    835|            !strv_contains(except, "io.systemd.Multiplexer") &&
  ------------------
  |  |   16|  1.67k|#define strv_contains(l, s) (!!strv_find((l), (s)))
  ------------------
  |  Branch (552:13): [True: 835, False: 0]
  ------------------
  553|    835|            (!only || strv_contains(only, "io.systemd.Multiplexer"))) {
  ------------------
  |  |   16|      0|#define strv_contains(l, s) (!!strv_find((l), (s)))
  |  |  ------------------
  |  |  |  Branch (16:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (553:14): [True: 835, False: 0]
  ------------------
  554|    835|                r = userdb_connect(iterator, "/run/systemd/userdb/io.systemd.Multiplexer", method, more, query);
  555|    835|                if (r >= 0) {
  ------------------
  |  Branch (555:21): [True: 0, False: 835]
  ------------------
  556|      0|                        iterator->nss_covered = true; /* The multiplexer does NSS */
  557|      0|                        iterator->dropin_covered = true; /* It also handles drop-in stuff */
  558|      0|                        return 0;
  559|      0|                }
  560|    835|        }
  561|       |
  562|    835|        d = opendir("/run/systemd/userdb/");
  563|    835|        if (!d) {
  ------------------
  |  Branch (563:13): [True: 835, False: 0]
  ------------------
  564|    835|                if (errno == ENOENT)
  ------------------
  |  Branch (564:21): [True: 835, False: 0]
  ------------------
  565|    835|                        return -ESRCH;
  566|       |
  567|      0|                return -errno;
  568|    835|        }
  569|       |
  570|    835|        FOREACH_DIRENT(de, d, return -errno) {
  ------------------
  |  |   26|      0|        FOREACH_DIRENT_ALL(de, d, on_error)                             \
  |  |  ------------------
  |  |  |  |   17|      0|        for (struct dirent *(de) = readdir_ensure_type(d);; (de) = readdir_ensure_type(d)) \
  |  |  |  |   18|      0|                if (!de) {                                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (18:21): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   19|      0|                        if (errno > 0) {                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (19:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   20|      0|                                on_error;                               \
  |  |  |  |   21|      0|                        }                                               \
  |  |  |  |   22|      0|                        break;                                          \
  |  |  |  |   23|      0|                } else
  |  |  ------------------
  |  |   27|      0|             if (hidden_or_backup_file((de)->d_name))                   \
  |  |  ------------------
  |  |  |  Branch (27:18): [True: 0, False: 0]
  |  |  ------------------
  |  |   28|      0|                     continue;                                          \
  |  |   29|      0|             else
  ------------------
  571|      0|                _cleanup_free_ char *p = NULL;
  ------------------
  |  |   82|      0|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  572|      0|                bool is_nss, is_dropin;
  573|       |
  574|      0|                if (streq(de->d_name, "io.systemd.Multiplexer")) /* We already tried this above, don't try this again */
  ------------------
  |  |   46|      0|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  575|      0|                        continue;
  576|       |
  577|      0|                if (FLAGS_SET(flags, USERDB_EXCLUDE_DYNAMIC_USER) &&
  ------------------
  |  |  414|      0|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  578|      0|                    streq(de->d_name, "io.systemd.DynamicUser"))
  ------------------
  |  |   46|      0|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  579|      0|                        continue;
  580|       |
  581|       |                /* Avoid NSS if this is requested. Note that we also skip NSS when we were asked to skip the
  582|       |                 * multiplexer, since in that case it's safer to do NSS in the client side emulation below
  583|       |                 * (and when we run as part of systemd-userdbd.service we don't want to talk to ourselves
  584|       |                 * anyway). */
  585|      0|                is_nss = streq(de->d_name, "io.systemd.NameServiceSwitch");
  ------------------
  |  |   46|      0|#define streq(a,b) (strcmp((a),(b)) == 0)
  ------------------
  586|      0|                if ((flags & (USERDB_EXCLUDE_NSS|USERDB_AVOID_MULTIPLEXER)) && is_nss)
  ------------------
  |  Branch (586:21): [True: 0, False: 0]
  |  Branch (586:80): [True: 0, False: 0]
  ------------------
  587|      0|                        continue;
  588|       |
  589|       |                /* Similar for the drop-in service */
  590|      0|                is_dropin = streq(de->d_name, "io.systemd.DropIn");
  ------------------
  |  |   46|      0|#define streq(a,b) (strcmp((a),(b)) == 0)
  ------------------
  591|      0|                if ((flags & (USERDB_EXCLUDE_DROPIN|USERDB_AVOID_MULTIPLEXER)) && is_dropin)
  ------------------
  |  Branch (591:21): [True: 0, False: 0]
  |  Branch (591:83): [True: 0, False: 0]
  ------------------
  592|      0|                        continue;
  593|       |
  594|      0|                if (strv_contains(except, de->d_name))
  ------------------
  |  |   16|      0|#define strv_contains(l, s) (!!strv_find((l), (s)))
  |  |  ------------------
  |  |  |  Branch (16:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  595|      0|                        continue;
  596|       |
  597|      0|                if (only && !strv_contains(only, de->d_name))
  ------------------
  |  |   16|      0|#define strv_contains(l, s) (!!strv_find((l), (s)))
  ------------------
  |  Branch (597:21): [True: 0, False: 0]
  |  Branch (597:29): [True: 0, False: 0]
  ------------------
  598|      0|                        continue;
  599|       |
  600|      0|                p = path_join("/run/systemd/userdb/", de->d_name);
  ------------------
  |  |   70|      0|#define path_join(...) path_extend_internal(NULL, __VA_ARGS__, POINTER_MAX)
  |  |  ------------------
  |  |  |  |  159|      0|#define POINTER_MAX ((void*) UINTPTR_MAX)
  |  |  ------------------
  ------------------
  601|      0|                if (!p)
  ------------------
  |  Branch (601:21): [True: 0, False: 0]
  ------------------
  602|      0|                        return -ENOMEM;
  603|       |
  604|      0|                r = userdb_connect(iterator, p, method, more, query);
  605|      0|                if (is_nss && r >= 0) /* Turn off fallback NSS + dropin if we found the NSS/dropin service
  ------------------
  |  Branch (605:21): [True: 0, False: 0]
  |  Branch (605:31): [True: 0, False: 0]
  ------------------
  606|       |                                       * and could connect to it */
  607|      0|                        iterator->nss_covered = true;
  608|      0|                if (is_dropin && r >= 0)
  ------------------
  |  Branch (608:21): [True: 0, False: 0]
  |  Branch (608:34): [True: 0, False: 0]
  ------------------
  609|      0|                        iterator->dropin_covered = true;
  610|       |
  611|      0|                RET_GATHER(ret, r);
  ------------------
  |  |   84|      0|        ({                                      \
  |  |   85|      0|                int *__a = &(acc), __e = (err); \
  |  |   86|      0|                if (*__a >= 0 && __e < 0)       \
  |  |  ------------------
  |  |  |  Branch (86:21): [True: 0, False: 0]
  |  |  |  Branch (86:34): [True: 0, False: 0]
  |  |  ------------------
  |  |   87|      0|                        *__a = __e;             \
  |  |   88|      0|                *__a;                           \
  |  |   89|      0|        })
  ------------------
  612|      0|        }
  613|       |
  614|      0|        if (set_isempty(iterator->links))
  ------------------
  |  Branch (614:13): [True: 0, False: 0]
  ------------------
  615|      0|                return ret < 0 ? ret : -ESRCH; /* propagate the first error we saw if we couldn't connect to anything. */
  ------------------
  |  Branch (615:24): [True: 0, False: 0]
  ------------------
  616|       |
  617|       |        /* We connected to some services, in this case, ignore the ones we failed on */
  618|      0|        return 0;
  619|      0|}
userdb.c:userdb_connect:
  448|    835|                sd_json_variant *query) {
  449|       |
  450|    835|        _cleanup_(sd_varlink_unrefp) sd_varlink *vl = NULL;
  ------------------
  |  |   78|    835|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  451|    835|        int r;
  452|       |
  453|    835|        assert(iterator);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  454|    835|        assert(path);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  455|    835|        assert(method);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  456|       |
  457|    835|        r = sd_varlink_connect_address(&vl, path);
  458|    835|        if (r < 0)
  ------------------
  |  Branch (458:13): [True: 835, False: 0]
  ------------------
  459|    835|                return log_debug_errno(r, "Unable to connect to %s: %m", path);
  ------------------
  |  |  228|    835|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|    835|        ({                                                              \
  |  |  |  |  205|    835|                int _error = (error);                                   \
  |  |  |  |  206|    835|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|    835|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    835|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|    835|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|    835|        ({                                                              \
  |  |  |  |  |  |  190|    835|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|    835|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|    835|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|    835|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|  1.67k|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|    835|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|    835|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 835, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    835|        })
  |  |  |  |  ------------------
  |  |  |  |  208|    835|        })
  |  |  ------------------
  ------------------
  460|       |
  461|      0|        sd_varlink_set_userdata(vl, iterator);
  462|       |
  463|      0|        if (!iterator->event) {
  ------------------
  |  Branch (463:13): [True: 0, False: 0]
  ------------------
  464|      0|                r = sd_event_new(&iterator->event);
  465|      0|                if (r < 0)
  ------------------
  |  Branch (465:21): [True: 0, False: 0]
  ------------------
  466|      0|                        return log_debug_errno(r, "Unable to allocate event loop: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  467|      0|        }
  468|       |
  469|      0|        r = sd_varlink_attach_event(vl, iterator->event, SD_EVENT_PRIORITY_NORMAL);
  470|      0|        if (r < 0)
  ------------------
  |  Branch (470:13): [True: 0, False: 0]
  ------------------
  471|      0|                return log_debug_errno(r, "Failed to attach varlink connection to event loop: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  472|       |
  473|       |        /* Note, this is load bearing: we store the socket path as description for the varlink
  474|       |         * connection. That's not just good for debugging, but we reuse this information in case we need to
  475|       |         * reissue the query with a reduced set of parameters. */
  476|      0|        r = sd_varlink_set_description(vl, path);
  477|      0|        if (r < 0)
  ------------------
  |  Branch (477:13): [True: 0, False: 0]
  ------------------
  478|      0|                return log_debug_errno(r, "Failed to set varlink connection description: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  479|       |
  480|      0|        r = sd_varlink_bind_reply(vl, userdb_on_query_reply);
  481|      0|        if (r < 0)
  ------------------
  |  Branch (481:13): [True: 0, False: 0]
  ------------------
  482|      0|                return log_debug_errno(r, "Failed to bind reply callback: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  483|       |
  484|      0|        _cleanup_free_ char *service = NULL;
  ------------------
  |  |   82|      0|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  485|      0|        r = path_extract_filename(path, &service);
  486|      0|        if (r < 0)
  ------------------
  |  Branch (486:13): [True: 0, False: 0]
  ------------------
  487|      0|                return log_debug_errno(r, "Failed to extract service name from socket path: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  488|      0|        assert(r != O_DIRECTORY);
  ------------------
  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|      0|        } while (false)
  |  |  ------------------
  ------------------
  489|       |
  490|      0|        _cleanup_(sd_json_variant_unrefp) sd_json_variant *patched_query = sd_json_variant_ref(query);
  ------------------
  |  |   78|      0|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  ------------------
  491|      0|        r = sd_json_variant_set_field_string(&patched_query, "service", service);
  492|      0|        if (r < 0)
  ------------------
  |  Branch (492:13): [True: 0, False: 0]
  ------------------
  493|      0|                return log_debug_errno(r, "Unable to set service JSON field: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  494|       |
  495|      0|        if (more)
  ------------------
  |  Branch (495:13): [True: 0, False: 0]
  ------------------
  496|      0|                r = sd_varlink_observe(vl, method, patched_query);
  497|      0|        else
  498|      0|                r = sd_varlink_invoke(vl, method, patched_query);
  499|      0|        if (r < 0)
  ------------------
  |  Branch (499:13): [True: 0, False: 0]
  ------------------
  500|      0|                return log_debug_errno(r, "Failed to invoke varlink method: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  501|       |
  502|      0|        r = set_ensure_consume(&iterator->links, &link_hash_ops, TAKE_PTR(vl));
  ------------------
  |  |  388|      0|#define TAKE_PTR(ptr) TAKE_PTR_TYPE(ptr, typeof(ptr))
  |  |  ------------------
  |  |  |  |  387|      0|#define TAKE_PTR_TYPE(ptr, type) TAKE_GENERIC(ptr, type, NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  380|      0|        ({                                                       \
  |  |  |  |  |  |  381|      0|                type *_pvar_ = &(var);                           \
  |  |  |  |  |  |  382|      0|                type _var_ = *_pvar_;                            \
  |  |  |  |  |  |  383|      0|                type _nullvalue_ = nullvalue;                    \
  |  |  |  |  |  |  384|      0|                *_pvar_ = _nullvalue_;                           \
  |  |  |  |  |  |  385|      0|                _var_;                                           \
  |  |  |  |  |  |  386|      0|        })
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  503|      0|        if (r < 0)
  ------------------
  |  Branch (503:13): [True: 0, False: 0]
  ------------------
  504|      0|                return log_debug_errno(r, "Failed to add varlink connection to set: %m");
  ------------------
  |  |  228|      0|#define log_debug_errno(error, ...)     log_full_errno(LOG_DEBUG,   error, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  204|      0|        ({                                                              \
  |  |  |  |  205|      0|                int _error = (error);                                   \
  |  |  |  |  206|      0|                ASSERT_NON_ZERO(_error);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  198|      0|#  define ASSERT_NON_ZERO(x) assert((x) != 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|      0|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|      0|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|      0|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|      0|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|      0|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|      0|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|                log_full_errno_zerook(level, _error, __VA_ARGS__);      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  189|      0|        ({                                                              \
  |  |  |  |  |  |  190|      0|                int _level = (level), _e = (error);                     \
  |  |  |  |  |  |  191|      0|                _e = (log_get_max_level() >= LOG_PRI(_level))           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|                        ? log_internal(_level, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                        : -ERRNO_VALUE(_e);                             \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   36|      0|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  172|      0|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                _e < 0 ? _e : -ESTRPIPE;                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|        })
  |  |  |  |  ------------------
  |  |  |  |  208|      0|        })
  |  |  ------------------
  ------------------
  505|      0|        return r;
  506|      0|}
userdb.c:userdb_by_name_fallbacks:
  848|    244|                UserRecord **ret) {
  849|    244|        int r;
  850|       |
  851|    244|        assert(name);
  ------------------
  |  |   72|    244|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    244|        do {                                                            \
  |  |  |  |   59|    244|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    244|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 244]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    244|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    244|        } while (false)
  |  |  ------------------
  ------------------
  852|    244|        assert(iterator);
  ------------------
  |  |   72|    244|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    244|        do {                                                            \
  |  |  |  |   59|    244|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    244|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 244]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    244|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    244|        } while (false)
  |  |  ------------------
  ------------------
  853|    244|        assert(ret);
  ------------------
  |  |   72|    244|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    244|        do {                                                            \
  |  |  |  |   59|    244|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    244|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 244]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    244|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    244|        } while (false)
  |  |  ------------------
  ------------------
  854|       |
  855|    244|        if (!FLAGS_SET(flags, USERDB_EXCLUDE_DROPIN) && !iterator->dropin_covered) {
  ------------------
  |  |  414|    488|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (855:13): [True: 244, False: 0]
  |  Branch (855:57): [True: 244, False: 0]
  ------------------
  856|    244|                r = dropin_user_record_by_name(name, /* path= */ NULL, flags, ret);
  857|    244|                if (r >= 0)
  ------------------
  |  Branch (857:21): [True: 0, False: 244]
  ------------------
  858|      0|                        return r;
  859|    244|        }
  860|       |
  861|    244|        if (!FLAGS_SET(flags, USERDB_EXCLUDE_NSS) && !iterator->nss_covered) {
  ------------------
  |  |  414|    488|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (861:13): [True: 244, False: 0]
  |  Branch (861:54): [True: 244, False: 0]
  ------------------
  862|       |                /* Make sure the NSS lookup doesn't recurse back to us. */
  863|       |
  864|    244|                r = userdb_iterator_block_nss_systemd(iterator);
  865|    244|                if (r >= 0) {
  ------------------
  |  Branch (865:21): [True: 244, False: 0]
  ------------------
  866|       |                        /* Client-side NSS fallback */
  867|    244|                        r = nss_user_record_by_name(name, !FLAGS_SET(flags, USERDB_SUPPRESS_SHADOW), ret);
  ------------------
  |  |  414|    244|        ((~(v) & (flags)) == 0)
  ------------------
  868|    244|                        if (r >= 0)
  ------------------
  |  Branch (868:29): [True: 4, False: 240]
  ------------------
  869|      4|                                return r;
  870|    244|                }
  871|    244|        }
  872|       |
  873|    240|        if (!FLAGS_SET(flags, USERDB_DONT_SYNTHESIZE_INTRINSIC)) {
  ------------------
  |  |  414|    240|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (873:13): [True: 240, False: 0]
  ------------------
  874|    240|                if (streq(name, "root"))
  ------------------
  |  |   46|    240|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 0, False: 240]
  |  |  ------------------
  ------------------
  875|      0|                        return synthetic_root_user_build(ret);
  876|       |
  877|    240|                if (streq(name, NOBODY_USER_NAME) && synthesize_nobody())
  ------------------
  |  |   46|    480|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 0, False: 240]
  |  |  ------------------
  ------------------
  |  Branch (877:54): [True: 0, False: 0]
  ------------------
  878|      0|                        return synthetic_nobody_user_build(ret);
  879|    240|        }
  880|       |
  881|    240|        if (!FLAGS_SET(flags, USERDB_DONT_SYNTHESIZE_FOREIGN)) {
  ------------------
  |  |  414|    240|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (881:13): [True: 240, False: 0]
  ------------------
  882|    240|                uid_t foreign_uid;
  883|    240|                r = user_name_foreign_extract_uid(name, &foreign_uid);
  884|    240|                if (r < 0)
  ------------------
  |  Branch (884:21): [True: 0, False: 240]
  ------------------
  885|      0|                        return r;
  886|    240|                if (r > 0)
  ------------------
  |  Branch (886:21): [True: 26, False: 214]
  ------------------
  887|     26|                        return synthetic_foreign_user_build(foreign_uid, ret);
  888|    240|        }
  889|       |
  890|    214|        return -ESRCH;
  891|    240|}
userdb.c:user_name_foreign_extract_uid:
  773|    518|static int user_name_foreign_extract_uid(const char *name, uid_t *ret_uid) {
  774|    518|        int r;
  775|       |
  776|    518|        assert(name);
  ------------------
  |  |   72|    518|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    518|        do {                                                            \
  |  |  |  |   59|    518|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    518|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 518]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    518|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    518|        } while (false)
  |  |  ------------------
  ------------------
  777|    518|        assert(ret_uid);
  ------------------
  |  |   72|    518|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    518|        do {                                                            \
  |  |  |  |   59|    518|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    518|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 518]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    518|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    518|        } while (false)
  |  |  ------------------
  ------------------
  778|       |
  779|       |        /* Parses the inner UID from a user name of the foreign UID range, in the form "foreign-NNN". Returns
  780|       |         * > 0 if that worked, 0 if it didn't. */
  781|       |
  782|    518|        const char *e = startswith(name, "foreign-");
  783|    518|        if (!e)
  ------------------
  |  Branch (783:13): [True: 406, False: 112]
  ------------------
  784|    406|                goto nomatch;
  785|       |
  786|    112|        uid_t uid;
  787|    112|        r = parse_uid(e, &uid);
  788|    112|        if (r < 0)
  ------------------
  |  Branch (788:13): [True: 16, False: 96]
  ------------------
  789|     16|                goto nomatch;
  790|       |
  791|     96|        if (uid > 0xFFFF)
  ------------------
  |  Branch (791:13): [True: 47, False: 49]
  ------------------
  792|     47|                goto nomatch;
  793|       |
  794|     49|        *ret_uid = uid;
  795|     49|        return 1;
  796|       |
  797|    469|nomatch:
  798|    469|        *ret_uid = UID_INVALID;
  ------------------
  |  |   72|    469|#define UID_INVALID ((uid_t) -1)
  ------------------
  799|    469|        return 0;
  800|     96|}
userdb.c:synthetic_foreign_user_build:
  721|     41|static int synthetic_foreign_user_build(uid_t foreign_uid, UserRecord **ret) {
  722|     41|        assert(ret);
  ------------------
  |  |   72|     41|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     41|        do {                                                            \
  |  |  |  |   59|     41|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     41|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 41]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     41|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     41|        } while (false)
  |  |  ------------------
  ------------------
  723|       |
  724|     41|        if (!uid_is_valid(foreign_uid))
  ------------------
  |  Branch (724:13): [True: 1, False: 40]
  ------------------
  725|      1|                return -ESRCH;
  726|     40|        if (foreign_uid > 0xFFFF)
  ------------------
  |  Branch (726:13): [True: 0, False: 40]
  ------------------
  727|      0|                return -ESRCH;
  728|       |
  729|     40|        _cleanup_free_ char *un = NULL;
  ------------------
  |  |   82|     40|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|     40|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  730|     40|        if (asprintf(&un, "foreign-" UID_FMT, foreign_uid) < 0)
  ------------------
  |  |   13|     40|#define UID_FMT "%" PRIu32
  ------------------
  |  Branch (730:13): [True: 0, False: 40]
  ------------------
  731|      0|                return -ENOMEM;
  732|       |
  733|     40|        _cleanup_free_ char *rn = NULL;
  ------------------
  |  |   82|     40|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|     40|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
  734|     40|        if (asprintf(&rn, "Foreign System Image UID " UID_FMT, foreign_uid) < 0)
  ------------------
  |  |   13|     40|#define UID_FMT "%" PRIu32
  ------------------
  |  Branch (734:13): [True: 0, False: 40]
  ------------------
  735|      0|                return -ENOMEM;
  736|       |
  737|     40|        return user_record_buildo(
  ------------------
  |  |  429|     40|        user_record_build((ret), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
  |  |  ------------------
  |  |  |  |  233|    240|#define SD_JSON_BUILD_OBJECT(...) _SD_JSON_BUILD_OBJECT_BEGIN, __VA_ARGS__, _SD_JSON_BUILD_OBJECT_END
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:64): [True: 0, False: 40]
  |  |  |  |  |  Branch (233:64): [Folded - Ignored]
  |  |  |  |  |  Branch (233:64): [True: 0, False: 40]
  |  |  |  |  |  Branch (233:64): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  738|     40|                        ret,
  739|     40|                        SD_JSON_BUILD_PAIR("userName", SD_JSON_BUILD_STRING(un)),
  740|     40|                        SD_JSON_BUILD_PAIR("realName", SD_JSON_BUILD_STRING(rn)),
  741|     40|                        SD_JSON_BUILD_PAIR("uid", SD_JSON_BUILD_UNSIGNED(FOREIGN_UID_BASE + foreign_uid)),
  742|     40|                        SD_JSON_BUILD_PAIR("gid", SD_JSON_BUILD_UNSIGNED(FOREIGN_UID_BASE + foreign_uid)),
  743|     40|                        SD_JSON_BUILD_PAIR("shell", JSON_BUILD_CONST_STRING(NOLOGIN)),
  744|     40|                        SD_JSON_BUILD_PAIR("locked", SD_JSON_BUILD_BOOLEAN(true)),
  745|     40|                        SD_JSON_BUILD_PAIR("disposition", JSON_BUILD_CONST_STRING("foreign")));
  746|     40|}
userdb.c:userdb_by_uid_fallbacks:
  960|    171|                UserRecord **ret) {
  961|    171|        int r;
  962|       |
  963|    171|        assert(uid_is_valid(uid));
  ------------------
  |  |   72|    171|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    171|        do {                                                            \
  |  |  |  |   59|    171|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    171|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 171]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    171|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    171|        } while (false)
  |  |  ------------------
  ------------------
  964|    171|        assert(iterator);
  ------------------
  |  |   72|    171|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    171|        do {                                                            \
  |  |  |  |   59|    171|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    171|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 171]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    171|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    171|        } while (false)
  |  |  ------------------
  ------------------
  965|    171|        assert(ret);
  ------------------
  |  |   72|    171|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    171|        do {                                                            \
  |  |  |  |   59|    171|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    171|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 171]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    171|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    171|        } while (false)
  |  |  ------------------
  ------------------
  966|       |
  967|    171|        if (!FLAGS_SET(flags, USERDB_EXCLUDE_DROPIN) && !iterator->dropin_covered) {
  ------------------
  |  |  414|    342|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (967:13): [True: 171, False: 0]
  |  Branch (967:57): [True: 171, False: 0]
  ------------------
  968|    171|                r = dropin_user_record_by_uid(uid, NULL, flags, ret);
  969|    171|                if (r >= 0)
  ------------------
  |  Branch (969:21): [True: 0, False: 171]
  ------------------
  970|      0|                        return r;
  971|    171|        }
  972|       |
  973|    171|        if (!FLAGS_SET(flags, USERDB_EXCLUDE_NSS) && !iterator->nss_covered) {
  ------------------
  |  |  414|    342|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (973:13): [True: 171, False: 0]
  |  Branch (973:54): [True: 171, False: 0]
  ------------------
  974|    171|                r = userdb_iterator_block_nss_systemd(iterator);
  975|    171|                if (r >= 0) {
  ------------------
  |  Branch (975:21): [True: 171, False: 0]
  ------------------
  976|       |                        /* Client-side NSS fallback */
  977|    171|                        r = nss_user_record_by_uid(uid, !FLAGS_SET(flags, USERDB_SUPPRESS_SHADOW), ret);
  ------------------
  |  |  414|    171|        ((~(v) & (flags)) == 0)
  ------------------
  978|    171|                        if (r >= 0)
  ------------------
  |  Branch (978:29): [True: 40, False: 131]
  ------------------
  979|     40|                                return r;
  980|    171|                }
  981|    171|        }
  982|       |
  983|    131|        if (!FLAGS_SET(flags, USERDB_DONT_SYNTHESIZE_INTRINSIC)) {
  ------------------
  |  |  414|    131|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (983:13): [True: 131, False: 0]
  ------------------
  984|    131|                if (uid == 0)
  ------------------
  |  Branch (984:21): [True: 0, False: 131]
  ------------------
  985|      0|                        return synthetic_root_user_build(ret);
  986|       |
  987|    131|                if (uid == UID_NOBODY && synthesize_nobody())
  ------------------
  |  |   75|    262|#define UID_NOBODY ((uid_t) 65534U)
  ------------------
  |  Branch (987:21): [True: 0, False: 131]
  |  Branch (987:42): [True: 0, False: 0]
  ------------------
  988|      0|                        return synthetic_nobody_user_build(ret);
  989|    131|        }
  990|       |
  991|    131|        if (!FLAGS_SET(flags, USERDB_DONT_SYNTHESIZE_FOREIGN) && uid_is_foreign(uid))
  ------------------
  |  |  414|    262|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (991:13): [True: 131, False: 0]
  |  Branch (991:66): [True: 15, False: 116]
  ------------------
  992|     15|                return synthetic_foreign_user_build(uid - FOREIGN_UID_BASE, ret);
  ------------------
  |  |  260|     15|#define FOREIGN_UID_BASE 2147352576
  ------------------
  993|       |
  994|    116|        if (FLAGS_SET(flags, USERDB_SYNTHESIZE_NUMERIC))
  ------------------
  |  |  414|    116|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 116]
  |  |  ------------------
  ------------------
  995|      0|                return synthetic_numeric_user_build(uid, ret);
  996|       |
  997|    116|        return -ESRCH;
  998|    116|}
userdb.c:userdb_iterator_block_nss_systemd:
  142|    835|static int userdb_iterator_block_nss_systemd(UserDBIterator *iterator) {
  143|    835|        int r;
  144|       |
  145|    835|        assert(iterator);
  ------------------
  |  |   72|    835|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    835|        do {                                                            \
  |  |  |  |   59|    835|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    835|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 835]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    835|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    835|        } while (false)
  |  |  ------------------
  ------------------
  146|       |
  147|    835|        if (iterator->nss_systemd_blocked)
  ------------------
  |  Branch (147:13): [True: 0, False: 835]
  ------------------
  148|      0|                return 0;
  149|       |
  150|    835|        r = userdb_block_nss_systemd(true);
  151|    835|        if (r < 0)
  ------------------
  |  Branch (151:13): [True: 0, False: 835]
  ------------------
  152|      0|                return r;
  153|       |
  154|    835|        iterator->nss_systemd_blocked = true;
  155|    835|        return 1;
  156|    835|}
userdb.c:query_append_gid_match:
 1291|    420|static int query_append_gid_match(sd_json_variant **query, const UserDBMatch *match) {
 1292|    420|        int r;
 1293|       |
 1294|    420|        assert(query);
  ------------------
  |  |   72|    420|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    420|        do {                                                            \
  |  |  |  |   59|    420|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    420|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 420]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    420|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    420|        } while (false)
  |  |  ------------------
  ------------------
 1295|       |
 1296|    420|        if (!userdb_match_is_set(match))
  ------------------
  |  Branch (1296:13): [True: 0, False: 420]
  ------------------
 1297|      0|                return 0;
 1298|       |
 1299|    420|        r = sd_json_variant_merge_objectbo(
  ------------------
  |  |  178|    420|        sd_json_variant_merge_objectb((v), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
  |  |  ------------------
  |  |  |  |  233|    420|#define SD_JSON_BUILD_OBJECT(...) _SD_JSON_BUILD_OBJECT_BEGIN, __VA_ARGS__, _SD_JSON_BUILD_OBJECT_END
  |  |  ------------------
  ------------------
 1300|    420|                        query,
 1301|    420|                        SD_JSON_BUILD_PAIR_CONDITION(!strv_isempty(match->fuzzy_names), "fuzzyNames", SD_JSON_BUILD_STRV(match->fuzzy_names)),
 1302|    420|                        SD_JSON_BUILD_PAIR_CONDITION(match->gid_min > 0, "gidMin", SD_JSON_BUILD_UNSIGNED(match->gid_min)),
 1303|    420|                        SD_JSON_BUILD_PAIR_CONDITION(match->gid_max < GID_INVALID-1, "gidMax", SD_JSON_BUILD_UNSIGNED(match->gid_max)));
 1304|    420|        if (r < 0)
  ------------------
  |  Branch (1304:13): [True: 0, False: 420]
  ------------------
 1305|      0|                return r;
 1306|       |
 1307|    420|        return query_append_disposition_mask(query, match->disposition_mask);
 1308|    420|}
userdb.c:groupdb_by_name_fallbacks:
 1314|    285|                GroupRecord **ret) {
 1315|       |
 1316|    285|        int r;
 1317|       |
 1318|    285|        assert(name);
  ------------------
  |  |   72|    285|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    285|        do {                                                            \
  |  |  |  |   59|    285|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    285|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 285]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    285|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    285|        } while (false)
  |  |  ------------------
  ------------------
 1319|    285|        assert(iterator);
  ------------------
  |  |   72|    285|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    285|        do {                                                            \
  |  |  |  |   59|    285|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    285|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 285]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    285|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    285|        } while (false)
  |  |  ------------------
  ------------------
 1320|    285|        assert(ret);
  ------------------
  |  |   72|    285|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    285|        do {                                                            \
  |  |  |  |   59|    285|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    285|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 285]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    285|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    285|        } while (false)
  |  |  ------------------
  ------------------
 1321|       |
 1322|    285|        if (!FLAGS_SET(flags, USERDB_EXCLUDE_DROPIN) && !iterator->dropin_covered) {
  ------------------
  |  |  414|    570|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (1322:13): [True: 285, False: 0]
  |  Branch (1322:57): [True: 285, False: 0]
  ------------------
 1323|    285|                r = dropin_group_record_by_name(name, NULL, flags, ret);
 1324|    285|                if (r >= 0)
  ------------------
  |  Branch (1324:21): [True: 0, False: 285]
  ------------------
 1325|      0|                        return r;
 1326|    285|        }
 1327|       |
 1328|    285|        if (!FLAGS_SET(flags, USERDB_EXCLUDE_NSS) && !iterator->nss_covered) {
  ------------------
  |  |  414|    570|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (1328:13): [True: 285, False: 0]
  |  Branch (1328:54): [True: 285, False: 0]
  ------------------
 1329|    285|                r = userdb_iterator_block_nss_systemd(iterator);
 1330|    285|                if (r >= 0) {
  ------------------
  |  Branch (1330:21): [True: 285, False: 0]
  ------------------
 1331|    285|                        r = nss_group_record_by_name(name, !FLAGS_SET(flags, USERDB_SUPPRESS_SHADOW), ret);
  ------------------
  |  |  414|    285|        ((~(v) & (flags)) == 0)
  ------------------
 1332|    285|                        if (r >= 0)
  ------------------
  |  Branch (1332:29): [True: 1, False: 284]
  ------------------
 1333|      1|                                return r;
 1334|    285|                }
 1335|    285|        }
 1336|       |
 1337|    284|        if (!FLAGS_SET(flags, USERDB_DONT_SYNTHESIZE_INTRINSIC)) {
  ------------------
  |  |  414|    284|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (1337:13): [True: 284, False: 0]
  ------------------
 1338|    284|                if (streq(name, "root"))
  ------------------
  |  |   46|    284|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 0, False: 284]
  |  |  ------------------
  ------------------
 1339|      0|                        return synthetic_root_group_build(ret);
 1340|       |
 1341|    284|                if (streq(name, NOBODY_GROUP_NAME) && synthesize_nobody())
  ------------------
  |  |   46|    568|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 6, False: 278]
  |  |  ------------------
  ------------------
  |  Branch (1341:55): [True: 6, False: 0]
  ------------------
 1342|      6|                        return synthetic_nobody_group_build(ret);
 1343|    284|        }
 1344|       |
 1345|    278|        if (!FLAGS_SET(flags, USERDB_DONT_SYNTHESIZE_FOREIGN)) {
  ------------------
  |  |  414|    278|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (1345:13): [True: 278, False: 0]
  ------------------
 1346|    278|                uid_t foreign_gid;
 1347|    278|                r = user_name_foreign_extract_uid(name, &foreign_gid); /* Same for UID + GID */
 1348|    278|                if (r < 0)
  ------------------
  |  Branch (1348:21): [True: 0, False: 278]
  ------------------
 1349|      0|                        return r;
 1350|    278|                if (r > 0)
  ------------------
  |  Branch (1350:21): [True: 23, False: 255]
  ------------------
 1351|     23|                        return synthetic_foreign_group_build(foreign_gid, ret);
 1352|    278|        }
 1353|       |
 1354|    255|        return -ESRCH;
 1355|    278|}
userdb.c:synthetic_nobody_group_build:
 1234|      6|static int synthetic_nobody_group_build(GroupRecord **ret) {
 1235|      6|        return group_record_buildo(
  ------------------
  |  |   45|      6|        group_record_build((ret), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
  |  |  ------------------
  |  |  |  |  233|     36|#define SD_JSON_BUILD_OBJECT(...) _SD_JSON_BUILD_OBJECT_BEGIN, __VA_ARGS__, _SD_JSON_BUILD_OBJECT_END
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:64): [True: 0, False: 6]
  |  |  |  |  |  Branch (233:64): [Folded - Ignored]
  |  |  |  |  |  Branch (233:64): [True: 0, False: 6]
  |  |  |  |  |  Branch (233:64): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1236|      6|                        ret,
 1237|      6|                        SD_JSON_BUILD_PAIR("groupName", JSON_BUILD_CONST_STRING(NOBODY_GROUP_NAME)),
 1238|      6|                        SD_JSON_BUILD_PAIR("gid", SD_JSON_BUILD_UNSIGNED(GID_NOBODY)),
 1239|      6|                        SD_JSON_BUILD_PAIR("disposition", JSON_BUILD_CONST_STRING("intrinsic")));
 1240|      6|}
userdb.c:synthetic_foreign_group_build:
 1242|     34|static int synthetic_foreign_group_build(gid_t foreign_gid, GroupRecord **ret) {
 1243|     34|        assert(ret);
  ------------------
  |  |   72|     34|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|     34|        do {                                                            \
  |  |  |  |   59|     34|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|     34|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 34]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|     34|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|     34|        } while (false)
  |  |  ------------------
  ------------------
 1244|       |
 1245|     34|        if (!gid_is_valid(foreign_gid))
  ------------------
  |  Branch (1245:13): [True: 0, False: 34]
  ------------------
 1246|      0|                return -ESRCH;
 1247|     34|        if (foreign_gid > 0xFFFF)
  ------------------
  |  Branch (1247:13): [True: 0, False: 34]
  ------------------
 1248|      0|                return -ESRCH;
 1249|       |
 1250|     34|        _cleanup_free_ char *gn = NULL;
  ------------------
  |  |   82|     34|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|     34|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1251|     34|        if (asprintf(&gn, "foreign-" GID_FMT, foreign_gid) < 0)
  ------------------
  |  |   16|     34|#define GID_FMT "%" PRIu32
  ------------------
  |  Branch (1251:13): [True: 0, False: 34]
  ------------------
 1252|      0|                return -ENOMEM;
 1253|       |
 1254|     34|        _cleanup_free_ char *d = NULL;
  ------------------
  |  |   82|     34|#define _cleanup_free_ _cleanup_(freep)
  |  |  ------------------
  |  |  |  |   78|     34|#define _cleanup_(x) __attribute__((__cleanup__(x)))
  |  |  ------------------
  ------------------
 1255|     34|        if (asprintf(&d, "Foreign System Image GID " GID_FMT, foreign_gid) < 0)
  ------------------
  |  |   16|     34|#define GID_FMT "%" PRIu32
  ------------------
  |  Branch (1255:13): [True: 0, False: 34]
  ------------------
 1256|      0|                return -ENOMEM;
 1257|       |
 1258|     34|        return group_record_buildo(
  ------------------
  |  |   45|     34|        group_record_build((ret), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
  |  |  ------------------
  |  |  |  |  233|    102|#define SD_JSON_BUILD_OBJECT(...) _SD_JSON_BUILD_OBJECT_BEGIN, __VA_ARGS__, _SD_JSON_BUILD_OBJECT_END
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:64): [True: 0, False: 34]
  |  |  |  |  |  Branch (233:64): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1259|     34|                        ret,
 1260|     34|                        SD_JSON_BUILD_PAIR("groupName", SD_JSON_BUILD_STRING(gn)),
 1261|     34|                        SD_JSON_BUILD_PAIR("description", SD_JSON_BUILD_STRING(d)),
 1262|     34|                        SD_JSON_BUILD_PAIR("gid", SD_JSON_BUILD_UNSIGNED(FOREIGN_UID_BASE + foreign_gid)),
 1263|     34|                        SD_JSON_BUILD_PAIR("disposition", JSON_BUILD_CONST_STRING("foreign")));
 1264|     34|}
userdb.c:groupdb_by_gid_fallbacks:
 1413|    135|                GroupRecord **ret) {
 1414|    135|        int r;
 1415|       |
 1416|    135|        assert(gid_is_valid(gid));
  ------------------
  |  |   72|    135|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    135|        do {                                                            \
  |  |  |  |   59|    135|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    135|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 135]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    135|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    135|        } while (false)
  |  |  ------------------
  ------------------
 1417|    135|        assert(iterator);
  ------------------
  |  |   72|    135|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    135|        do {                                                            \
  |  |  |  |   59|    135|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    135|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 135]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    135|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    135|        } while (false)
  |  |  ------------------
  ------------------
 1418|    135|        assert(ret);
  ------------------
  |  |   72|    135|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    135|        do {                                                            \
  |  |  |  |   59|    135|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    135|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 135]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    135|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    135|        } while (false)
  |  |  ------------------
  ------------------
 1419|       |
 1420|    135|        if (!FLAGS_SET(flags, USERDB_EXCLUDE_DROPIN) && !(iterator && iterator->dropin_covered)) {
  ------------------
  |  |  414|    270|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (1420:13): [True: 135, False: 0]
  |  Branch (1420:59): [True: 135, False: 0]
  |  Branch (1420:71): [True: 0, False: 135]
  ------------------
 1421|    135|                r = dropin_group_record_by_gid(gid, NULL, flags, ret);
 1422|    135|                if (r >= 0)
  ------------------
  |  Branch (1422:21): [True: 0, False: 135]
  ------------------
 1423|      0|                        return r;
 1424|    135|        }
 1425|       |
 1426|    135|        if (!FLAGS_SET(flags, USERDB_EXCLUDE_NSS) && !(iterator && iterator->nss_covered)) {
  ------------------
  |  |  414|    270|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (1426:13): [True: 135, False: 0]
  |  Branch (1426:56): [True: 135, False: 0]
  |  Branch (1426:68): [True: 0, False: 135]
  ------------------
 1427|    135|                r = userdb_iterator_block_nss_systemd(iterator);
 1428|    135|                if (r >= 0) {
  ------------------
  |  Branch (1428:21): [True: 135, False: 0]
  ------------------
 1429|    135|                        r = nss_group_record_by_gid(gid, !FLAGS_SET(flags, USERDB_SUPPRESS_SHADOW), ret);
  ------------------
  |  |  414|    135|        ((~(v) & (flags)) == 0)
  ------------------
 1430|    135|                        if (r >= 0)
  ------------------
  |  Branch (1430:29): [True: 29, False: 106]
  ------------------
 1431|     29|                                return r;
 1432|    135|                }
 1433|    135|        }
 1434|       |
 1435|    106|        if (!FLAGS_SET(flags, USERDB_DONT_SYNTHESIZE_INTRINSIC)) {
  ------------------
  |  |  414|    106|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (1435:13): [True: 106, False: 0]
  ------------------
 1436|    106|                if (gid == 0)
  ------------------
  |  Branch (1436:21): [True: 0, False: 106]
  ------------------
 1437|      0|                        return synthetic_root_group_build(ret);
 1438|       |
 1439|    106|                if (gid == GID_NOBODY && synthesize_nobody())
  ------------------
  |  |   76|    212|#define GID_NOBODY ((gid_t) 65534U)
  ------------------
  |  Branch (1439:21): [True: 0, False: 106]
  |  Branch (1439:42): [True: 0, False: 0]
  ------------------
 1440|      0|                        return synthetic_nobody_group_build(ret);
 1441|    106|        }
 1442|       |
 1443|    106|        if (!FLAGS_SET(flags, USERDB_DONT_SYNTHESIZE_FOREIGN) && gid_is_foreign(gid))
  ------------------
  |  |  414|    212|        ((~(v) & (flags)) == 0)
  ------------------
  |  Branch (1443:13): [True: 106, False: 0]
  |  Branch (1443:66): [True: 11, False: 95]
  ------------------
 1444|     11|                return synthetic_foreign_group_build(gid - FOREIGN_UID_BASE, ret);
  ------------------
  |  |  260|     11|#define FOREIGN_UID_BASE 2147352576
  ------------------
 1445|       |
 1446|     95|        if (FLAGS_SET(flags, USERDB_SYNTHESIZE_NUMERIC))
  ------------------
  |  |  414|     95|        ((~(v) & (flags)) == 0)
  |  |  ------------------
  |  |  |  Branch (414:9): [True: 0, False: 95]
  |  |  ------------------
  ------------------
 1447|      0|                return synthetic_numeric_group_build(gid, ret);
 1448|       |
 1449|     95|        return -ESRCH;
 1450|     95|}

parse_vlanid:
    8|  2.03k|int parse_vlanid(const char *p, uint16_t *ret) {
    9|  2.03k|        uint16_t id;
   10|  2.03k|        int r;
   11|       |
   12|  2.03k|        assert(p);
  ------------------
  |  |   72|  2.03k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.03k|        do {                                                            \
  |  |  |  |   59|  2.03k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.03k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.03k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.03k|        } while (false)
  |  |  ------------------
  ------------------
   13|  2.03k|        assert(ret);
  ------------------
  |  |   72|  2.03k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.03k|        do {                                                            \
  |  |  |  |   59|  2.03k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.03k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.03k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.03k|        } while (false)
  |  |  ------------------
  ------------------
   14|       |
   15|  2.03k|        r = safe_atou16(p, &id);
   16|  2.03k|        if (r < 0)
  ------------------
  |  Branch (16:13): [True: 1.56k, False: 470]
  ------------------
   17|  1.56k|                return r;
   18|    470|        if (!vlanid_is_valid(id))
  ------------------
  |  Branch (18:13): [True: 208, False: 262]
  ------------------
   19|    208|                return -ERANGE;
   20|       |
   21|    262|        *ret = id;
   22|    262|        return 0;
   23|    470|}
config_parse_default_port_vlanid:
   51|    588|                void *userdata) {
   52|    588|        uint16_t *id = ASSERT_PTR(data);
  ------------------
  |  |   81|    588|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|    588|        ({                                 \
  |  |  |  |   85|    588|                typeof(expr) var = (expr); \
  |  |  |  |   86|    588|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|    588|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|    588|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|    588|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|    588|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|    588|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 588]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|    588|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|    588|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|    588|                var;                       \
  |  |  |  |   88|    588|        })
  |  |  ------------------
  ------------------
   53|       |
   54|    588|        assert(lvalue);
  ------------------
  |  |   72|    588|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    588|        do {                                                            \
  |  |  |  |   59|    588|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    588|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 588]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    588|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    588|        } while (false)
  |  |  ------------------
  ------------------
   55|    588|        assert(rvalue);
  ------------------
  |  |   72|    588|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|    588|        do {                                                            \
  |  |  |  |   59|    588|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|    588|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 588]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|    588|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|    588|        } while (false)
  |  |  ------------------
  ------------------
   56|       |
   57|    588|        if (streq(rvalue, "none")) {
  ------------------
  |  |   46|    588|#define streq(a,b) (strcmp((a),(b)) == 0)
  |  |  ------------------
  |  |  |  Branch (46:20): [True: 319, False: 269]
  |  |  ------------------
  ------------------
   58|    319|                *id = 0;
   59|    319|                return 0;
   60|    319|        }
   61|       |
   62|    269|        return config_parse_vlanid(unit, filename, line, section, section_line,
   63|    269|                                   lvalue, ltype, rvalue, data, userdata);
   64|    588|}
config_parse_vlanid:
   76|  2.03k|                void *userdata) {
   77|       |
   78|  2.03k|        uint16_t *id = ASSERT_PTR(data);
  ------------------
  |  |   81|  2.03k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  ------------------
  |  |  |  |   84|  2.03k|        ({                                 \
  |  |  |  |   85|  2.03k|                typeof(expr) var = (expr); \
  |  |  |  |   86|  2.03k|                check(var);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   81|  2.03k|#define ASSERT_PTR(expr) _ASSERT_PTR(expr, UNIQ_T(_expr_, UNIQ), assert)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   72|  2.03k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   58|  2.03k|        do {                                                            \
  |  |  |  |  |  |  |  |  |  |   59|  2.03k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   95|  2.03k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.03k]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   60|  2.03k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   61|  2.03k|        } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   87|  2.03k|                var;                       \
  |  |  |  |   88|  2.03k|        })
  |  |  ------------------
  ------------------
   79|  2.03k|        int r;
   80|       |
   81|  2.03k|        assert(filename);
  ------------------
  |  |   72|  2.03k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.03k|        do {                                                            \
  |  |  |  |   59|  2.03k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.03k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.03k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.03k|        } while (false)
  |  |  ------------------
  ------------------
   82|  2.03k|        assert(lvalue);
  ------------------
  |  |   72|  2.03k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.03k|        do {                                                            \
  |  |  |  |   59|  2.03k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.03k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.03k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.03k|        } while (false)
  |  |  ------------------
  ------------------
   83|  2.03k|        assert(rvalue);
  ------------------
  |  |   72|  2.03k|#define assert(expr) assert_message_se(expr, #expr)
  |  |  ------------------
  |  |  |  |   58|  2.03k|        do {                                                            \
  |  |  |  |   59|  2.03k|                if (_unlikely_(!(expr)))                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   95|  2.03k|#define _unlikely_(x) (__builtin_expect(!!(x), 0))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (95:23): [True: 0, False: 2.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   60|  2.03k|                        log_assert_failed(message, PROJECT_FILE, __LINE__, __func__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   61|  2.03k|        } while (false)
  |  |  ------------------
  ------------------
   84|       |
   85|  2.03k|        r = parse_vlanid(rvalue, id);
   86|  2.03k|        if (r == -ERANGE) {
  ------------------
  |  Branch (86:13): [True: 805, False: 1.23k]
  ------------------
   87|    805|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    805|        ({                                                              \
  |  |  354|    805|                int _level = (level), _e = (error);                     \
  |  |  355|    805|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 805]
  |  |  ------------------
  |  |  356|    805|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    805|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    805|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    805|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    805|        })
  ------------------
   88|    805|                           "VLAN identifier outside of valid range 0…4094, ignoring: %s", rvalue);
   89|    805|                return 0;
   90|    805|        }
   91|  1.23k|        if (r < 0) {
  ------------------
  |  Branch (91:13): [True: 971, False: 262]
  ------------------
   92|    971|                log_syntax(unit, LOG_WARNING, filename, line, r,
  ------------------
  |  |  353|    971|        ({                                                              \
  |  |  354|    971|                int _level = (level), _e = (error);                     \
  |  |  355|    971|                (log_get_max_level() >= LOG_PRI(_level))                \
  |  |  ------------------
  |  |  |  Branch (355:17): [True: 0, False: 971]
  |  |  ------------------
  |  |  356|    971|                        ? log_syntax_internal(unit, _level, config_file, config_line, _e, PROJECT_FILE, __LINE__, __func__, __VA_ARGS__) \
  |  |  ------------------
  |  |  |  |  472|      0|#define PROJECT_FILE (&__FILE__[STRLEN(RELATIVE_SOURCE_PATH) + 1])
  |  |  |  |  ------------------
  |  |  |  |  |  |  397|      0|#define STRLEN(x) (sizeof(""x"") - sizeof(typeof(x[0])))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  357|    971|                        : -ERRNO_VALUE(_e);                             \
  |  |  ------------------
  |  |  |  |   36|    971|#define ERRNO_VALUE(val)                    (ABS(val) & ~(1 << 30))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    971|#  define ABS(a) __builtin_llabs(a)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  358|    971|        })
  ------------------
   93|    971|                           "Failed to parse VLAN identifier value, ignoring: %s", rvalue);
   94|    971|                return 0;
   95|    971|        }
   96|       |
   97|    262|        return 0;
   98|  1.23k|}

vlan-util.c:vlanid_is_valid:
   11|    470|static inline bool vlanid_is_valid(uint16_t id) {
   12|    470|        return id <= VLANID_MAX;
  ------------------
  |  |    7|    470|#define VLANID_MAX 4094
  ------------------
   13|    470|}

group-record.c:sd_json_variant_unrefp:
  107|     40|        static __inline__ void func##p(type **p) {              \
  108|     40|                if (*p)                                         \
  ------------------
  |  Branch (108:21): [True: 40, False: 0]
  ------------------
  109|     40|                        func(*p);                               \
  110|     40|        }                                                       \
user-record.c:sd_json_variant_unrefp:
  107|    120|        static __inline__ void func##p(type **p) {              \
  108|    120|                if (*p)                                         \
  ------------------
  |  Branch (108:21): [True: 40, False: 80]
  ------------------
  109|    120|                        func(*p);                               \
  110|    120|        }                                                       \
userdb.c:sd_json_variant_unrefp:
  107|  1.16k|        static __inline__ void func##p(type **p) {              \
  108|  1.16k|                if (*p)                                         \
  ------------------
  |  Branch (108:21): [True: 835, False: 332]
  ------------------
  109|  1.16k|                        func(*p);                               \
  110|  1.16k|        }                                                       \
userdb.c:sd_varlink_unrefp:
  107|    835|        static __inline__ void func##p(type **p) {              \
  108|    835|                if (*p)                                         \
  ------------------
  |  Branch (108:21): [True: 0, False: 835]
  ------------------
  109|    835|                        func(*p);                               \
  110|    835|        }                                                       \
sd-json.c:sd_json_variant_unrefp:
  107|  46.5k|        static __inline__ void func##p(type **p) {              \
  108|  46.5k|                if (*p)                                         \
  ------------------
  |  Branch (108:21): [True: 1.67k, False: 44.9k]
  ------------------
  109|  46.5k|                        func(*p);                               \
  110|  46.5k|        }                                                       \
sd-varlink.c:sd_varlink_unrefp:
  107|    835|        static __inline__ void func##p(type **p) {              \
  108|    835|                if (*p)                                         \
  ------------------
  |  Branch (108:21): [True: 835, False: 0]
  ------------------
  109|    835|                        func(*p);                               \
  110|    835|        }                                                       \

condition.c:sd_id128_equal:
  118|     12|_sd_const_ static __inline__ int sd_id128_equal(sd_id128_t a, sd_id128_t b) {
  119|     12|        return a.qwords[0] == b.qwords[0] && a.qwords[1] == b.qwords[1];
  ------------------
  |  Branch (119:16): [True: 0, False: 12]
  |  Branch (119:46): [True: 0, False: 0]
  ------------------
  120|     12|}
id128-util.c:sd_id128_is_null:
  124|      1|_sd_const_ static __inline__ int sd_id128_is_null(sd_id128_t a) {
  125|      1|        return a.qwords[0] == 0 && a.qwords[1] == 0;
  ------------------
  |  Branch (125:16): [True: 0, False: 1]
  |  Branch (125:36): [True: 0, False: 0]
  ------------------
  126|      1|}
sd-id128.c:sd_id128_is_null:
  124|     24|_sd_const_ static __inline__ int sd_id128_is_null(sd_id128_t a) {
  125|     24|        return a.qwords[0] == 0 && a.qwords[1] == 0;
  ------------------
  |  Branch (125:16): [True: 13, False: 11]
  |  Branch (125:36): [True: 13, False: 0]
  ------------------
  126|     24|}

network_netdev_gperf_lookup:
  171|   296k|{
  172|   296k|  static const struct ConfigPerfItem wordlist[] =
  173|   296k|    {
  174|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  175|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  176|   296k|#line 208 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  177|   296k|      {"Tap.User",                                 config_parse_string,                       CONFIG_PARSE_STRING_SAFE,      offsetof(TunTap, user_name)},
  178|   296k|      {(char*)0}, {(char*)0},
  179|   296k|#line 56 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  180|   296k|      {"NetDev.Name",                              config_parse_ifname,                       0,                             offsetof(NetDev, ifname)},
  181|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  182|   296k|#line 111 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  183|   296k|      {"FooOverUDP.Peer",                          config_parse_fou_tunnel_address,           0,                             offsetof(FouTunnel, peer)},
  184|   296k|      {(char*)0}, {(char*)0},
  185|   296k|#line 201 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  186|   296k|      {"Tun.User",                                 config_parse_string,                       CONFIG_PARSE_STRING_SAFE,      offsetof(TunTap, user_name)},
  187|   296k|#line 109 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  188|   296k|      {"FooOverUDP.PeerPort",                      config_parse_ip_port,                      0,                             offsetof(FouTunnel, peer_port)},
  189|   296k|#line 108 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  190|   296k|      {"FooOverUDP.Port",                          config_parse_ip_port,                      0,                             offsetof(FouTunnel, port)},
  191|   296k|#line 110 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  192|   296k|      {"FooOverUDP.Local",                         config_parse_fou_tunnel_address,           0,                             offsetof(FouTunnel, local)},
  193|   296k|      {(char*)0}, {(char*)0},
  194|   296k|#line 106 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  195|   296k|      {"FooOverUDP.Protocol",                      config_parse_ip_protocol,                  /* relax = */ true,            offsetof(FouTunnel, fou_protocol)},
  196|   296k|#line 131 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  197|   296k|      {"VXCAN.Peer",                               config_parse_ifname,                       0,                             offsetof(VxCan, ifname_peer)},
  198|   296k|#line 134 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  199|   296k|      {"VXLAN.Group",                              config_parse_vxlan_address,                0,                             offsetof(VxLan, group)},
  200|   296k|      {(char*)0}, {(char*)0},
  201|   296k|#line 181 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  202|   296k|      {"MACsec.Encrypt",                           config_parse_tristate,                     0,                             offsetof(MACsec, encrypt)},
  203|   296k|#line 227 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  204|   296k|      {"Bond.UpDelaySec",                          config_parse_sec,                          0,                             offsetof(Bond, updelay)},
  205|   296k|#line 135 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  206|   296k|      {"VXLAN.Local",                              config_parse_vxlan_address,                0,                             offsetof(VxLan, local)},
  207|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  208|   296k|#line 180 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  209|   296k|      {"MACsec.Port",                              config_parse_macsec_port,                  0,                             0},
  210|   296k|      {(char*)0},
  211|   296k|#line 133 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  212|   296k|      {"VXLAN.Id",                                 config_parse_uint32,                       0,                             offsetof(VxLan, vni) /* deprecated */},
  213|   296k|#line 186 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  214|   296k|      {"MACsecTransmitAssociation.Key",            config_parse_macsec_key,                   0,                             0},
  215|   296k|      {(char*)0},
  216|   296k|#line 185 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  217|   296k|      {"MACsecTransmitAssociation.KeyId",          config_parse_macsec_key_id,                0,                             0},
  218|   296k|#line 139 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  219|   296k|      {"VXLAN.MacLearning",                        config_parse_bool,                         0,                             offsetof(VxLan, learning)},
  220|   296k|#line 187 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  221|   296k|      {"MACsecTransmitAssociation.KeyFile",        config_parse_macsec_key_file,              0,                             0},
  222|   296k|#line 188 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  223|   296k|      {"MACsecTransmitAssociation.Activate",       config_parse_macsec_sa_activate,           0,                             0},
  224|   296k|      {(char*)0}, {(char*)0},
  225|   296k|#line 59 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  226|   296k|      {"NetDev.MACAddress",                        config_parse_netdev_hw_addr,               ETH_ALEN,                      offsetof(NetDev, hw_addr)},
  227|   296k|#line 184 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  228|   296k|      {"MACsecTransmitAssociation.PacketNumber",   config_parse_macsec_packet_number,         0,                             0},
  229|   296k|#line 107 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  230|   296k|      {"FooOverUDP.Encapsulation",                 config_parse_fou_encap_type,               0,                             offsetof(FouTunnel, fou_encap_type)},
  231|   296k|#line 189 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  232|   296k|      {"MACsecTransmitAssociation.UseForEncoding", config_parse_macsec_use_for_encoding,      0,                             0},
  233|   296k|      {(char*)0}, {(char*)0},
  234|   296k|#line 194 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  235|   296k|      {"MACsecReceiveAssociation.Key",             config_parse_macsec_key,                   0,                             0},
  236|   296k|#line 190 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  237|   296k|      {"MACsecReceiveAssociation.Port",            config_parse_macsec_port,                  0,                             0},
  238|   296k|#line 193 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  239|   296k|      {"MACsecReceiveAssociation.KeyId",           config_parse_macsec_key_id,                0,                             0},
  240|   296k|#line 57 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  241|   296k|      {"NetDev.Kind",                              config_parse_netdev_kind,                  0,                             offsetof(NetDev, kind)},
  242|   296k|#line 195 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  243|   296k|      {"MACsecReceiveAssociation.KeyFile",         config_parse_macsec_key_file,              0,                             0},
  244|   296k|#line 196 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  245|   296k|      {"MACsecReceiveAssociation.Activate",        config_parse_macsec_sa_activate,           0,                             0},
  246|   296k|#line 205 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  247|   296k|      {"Tap.MultiQueue",                           config_parse_bool,                         0,                             offsetof(TunTap, multi_queue)},
  248|   296k|#line 191 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  249|   296k|      {"MACsecReceiveAssociation.MACAddress",      config_parse_macsec_hw_address,            0,                             0},
  250|   296k|#line 74 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  251|   296k|      {"IPVLAN.Mode",                              config_parse_ipvlan_mode,                  0,                             offsetof(IPVlan, mode)},
  252|   296k|#line 192 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  253|   296k|      {"MACsecReceiveAssociation.PacketNumber",    config_parse_macsec_packet_number,         0,                             0},
  254|   296k|#line 253 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  255|   296k|      {"BareUDP.DestinationPort",                  config_parse_ip_port,                      0,                             offsetof(BareUDP, dest_port)},
  256|   296k|#line 211 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  257|   296k|      {"Bond.Mode",                                config_parse_bond_mode,                    0,                             offsetof(Bond, mode)},
  258|   296k|#line 157 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  259|   296k|      {"VXLAN.PortRange",                          config_parse_port_range,                   0,                             0},
  260|   296k|#line 158 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  261|   296k|      {"VXLAN.DestinationPort",                    config_parse_ip_port,                      0,                             offsetof(VxLan, dest_port)},
  262|   296k|#line 161 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  263|   296k|      {"VXLAN.Independent",                        config_parse_bool,                         0,                             offsetof(VxLan, independent)},
  264|   296k|#line 144 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  265|   296k|      {"VXLAN.RouteShortCircuit",                  config_parse_bool,                         0,                             offsetof(VxLan, route_short_circuit)},
  266|   296k|#line 198 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  267|   296k|      {"Tun.MultiQueue",                           config_parse_bool,                         0,                             offsetof(TunTap, multi_queue)},
  268|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  269|   296k|#line 214 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  270|   296k|      {"Bond.AdSelect",                            config_parse_bond_ad_select,               0,                             offsetof(Bond, ad_select)},
  271|   296k|#line 129 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  272|   296k|      {"Peer.Name",                                config_parse_ifname,                       0,                             offsetof(Veth, ifname_peer)},
  273|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  274|   296k|#line 242 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  275|   296k|      {"Bridge.DefaultPVID",                       config_parse_default_port_vlanid,          0,                             offsetof(Bridge, default_pvid)},
  276|   296k|      {(char*)0}, {(char*)0},
  277|   296k|#line 76 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  278|   296k|      {"IPVTAP.Mode",                              config_parse_ipvlan_mode,                  0,                             offsetof(IPVlan, mode)},
  279|   296k|#line 136 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  280|   296k|      {"VXLAN.Remote",                             config_parse_vxlan_address,                0,                             offsetof(VxLan, remote)},
  281|   296k|#line 218 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  282|   296k|      {"Bond.ARPAllTargets",                       config_parse_bond_arp_all_targets,         0,                             offsetof(Bond, arp_all_targets)},
  283|   296k|#line 177 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  284|   296k|      {"HSR.Ports",                                config_parse_ifnames,                      IFNAME_VALID_ALTERNATIVE,      offsetof(Hsr, ports)},
  285|   296k|#line 58 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  286|   296k|      {"NetDev.MTUBytes",                          config_parse_mtu,                          AF_UNSPEC,                     offsetof(NetDev, mtu)},
  287|   296k|      {(char*)0},
  288|   296k|#line 178 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  289|   296k|      {"HSR.Protocol",                             config_parse_hsr_protocol,                 0,                             offsetof(Hsr, protocol)},
  290|   296k|#line 65 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  291|   296k|      {"VLAN.ReorderHeader",                       config_parse_tristate,                     0,                             offsetof(VLan, reorder_hdr)},
  292|   296k|#line 143 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  293|   296k|      {"VXLAN.L3MissNotification",                 config_parse_bool,                         0,                             offsetof(VxLan, l3miss)},
  294|   296k|#line 220 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  295|   296k|      {"Bond.ResendIGMP",                          config_parse_unsigned,                     0,                             offsetof(Bond, resend_igmp)},
  296|   296k|#line 284 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  297|   296k|      {"BatmanAdvanced.OriginatorIntervalSec",     config_parse_sec,                          0,                             offsetof(BatmanAdvanced, originator_interval)},
  298|   296k|#line 72 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  299|   296k|      {"MACVTAP.Mode",                             config_parse_macvlan_mode,                 0,                             offsetof(MacVlan, mode)},
  300|   296k|#line 61 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  301|   296k|      {"VLAN.Protocol",                            config_parse_vlanprotocol,                 0,                             offsetof(VLan, protocol)},
  302|   296k|#line 276 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  303|   296k|      {"BatmanAdvanced.DistributedArpTable",       config_parse_bool,                         0,                             offsetof(BatmanAdvanced, distributed_arp_table)},
  304|   296k|      {(char*)0},
  305|   296k|#line 254 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  306|   296k|      {"BareUDP.MinSourcePort",                    config_parse_ip_port,                      0,                             offsetof(BareUDP, min_port)},
  307|   296k|#line 68 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  308|   296k|      {"MACVLAN.Mode",                             config_parse_macvlan_mode,                 0,                             offsetof(MacVlan, mode)},
  309|   296k|#line 79 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  310|   296k|      {"Tunnel.Remote",                            config_parse_tunnel_remote_address,        0,                             0},
  311|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  312|   296k|#line 225 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  313|   296k|      {"Bond.MinLinks",                            config_parse_unsigned,                     0,                             offsetof(Bond, min_links)},
  314|   296k|      {(char*)0}, {(char*)0},
  315|   296k|#line 154 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  316|   296k|      {"VXLAN.GroupPolicyExtension",               config_parse_bool,                         0,                             offsetof(VxLan, group_policy)},
  317|   296k|      {(char*)0},
  318|   296k|#line 243 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  319|   296k|      {"Bridge.MulticastQuerier",                  config_parse_tristate,                     0,                             offsetof(Bridge, mcast_querier)},
  320|   296k|#line 138 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  321|   296k|      {"VXLAN.TTL",                                config_parse_vxlan_ttl,                    0,                             offsetof(VxLan, ttl)},
  322|   296k|      {(char*)0},
  323|   296k|#line 87 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  324|   296k|      {"Tunnel.Mode",                              config_parse_ip6tnl_mode,                  0,                             offsetof(Tunnel, ip6tnl_mode)},
  325|   296k|#line 101 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  326|   296k|      {"Tunnel.ERSPANDirection",                   config_parse_erspan_direction,             0,                             offsetof(Tunnel, erspan_direction)},
  327|   296k|#line 165 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  328|   296k|      {"GENEVE.Remote",                            config_parse_geneve_address,               0,                             offsetof(Geneve, remote)},
  329|   296k|#line 275 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  330|   296k|      {"BatmanAdvanced.BridgeLoopAvoidance",       config_parse_bool,                         0,                             offsetof(BatmanAdvanced, bridge_loop_avoidance)},
  331|   296k|      {(char*)0}, {(char*)0},
  332|   296k|#line 173 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  333|   296k|      {"GENEVE.DestinationPort",                   config_parse_ip_port,                      0,                             offsetof(Geneve, dest_port)},
  334|   296k|#line 291 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  335|   296k|      {"WLAN.WDS",                                 config_parse_tristate,                     0,                             offsetof(WLan, wds)},
  336|   296k|      {(char*)0},
  337|   296k|#line 287 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  338|   296k|      {"IPoIB.Mode",                               config_parse_ipoib_mode,                   0,                             offsetof(IPoIB, mode)},
  339|   296k|      {(char*)0},
  340|   296k|#line 235 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  341|   296k|      {"Bond.ARPMissedMax",                        config_parse_uint8,                        0,                             offsetof(Bond, arp_missed_max)},
  342|   296k|      {(char*)0},
  343|   296k|#line 252 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  344|   296k|      {"VRF.Table",                                config_parse_uint32,                       0,                             offsetof(Vrf, table)},
  345|   296k|#line 82 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  346|   296k|      {"Tunnel.Key",                               config_parse_tunnel_key,                   0,                             offsetof(Tunnel, key)},
  347|   296k|#line 251 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  348|   296k|      {"VRF.TableId",                              config_parse_uint32,                       0,                             offsetof(Vrf, table) /* deprecated */},
  349|   296k|#line 78 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  350|   296k|      {"Tunnel.Local",                             config_parse_tunnel_local_address,         0,                             0},
  351|   296k|      {(char*)0},
  352|   296k|#line 63 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  353|   296k|      {"VLAN.MVRP",                                config_parse_tristate,                     0,                             offsetof(VLan, mvrp)},
  354|   296k|#line 179 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  355|   296k|      {"HSR.Supervision",                          config_parse_uint8,                        0,                             offsetof(Hsr, supervision)},
  356|   296k|#line 237 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  357|   296k|      {"Bridge.MaxAgeSec",                         config_parse_sec,                          0,                             offsetof(Bridge, max_age)},
  358|   296k|#line 64 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  359|   296k|      {"VLAN.LooseBinding",                        config_parse_tristate,                     0,                             offsetof(VLan, loose_binding)},
  360|   296k|#line 277 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  361|   296k|      {"BatmanAdvanced.Fragmentation",             config_parse_bool,                         0,                             offsetof(BatmanAdvanced, fragmentation)},
  362|   296k|#line 206 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  363|   296k|      {"Tap.PacketInfo",                           config_parse_bool,                         0,                             offsetof(TunTap, packet_info)},
  364|   296k|#line 247 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  365|   296k|      {"Bridge.STP",                               config_parse_tristate,                     0,                             offsetof(Bridge, stp)},
  366|   296k|#line 217 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  367|   296k|      {"Bond.ARPValidate",                         config_parse_bond_arp_validate,            0,                             offsetof(Bond, arp_validate)},
  368|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  369|   296k|#line 223 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  370|   296k|      {"Bond.AllSlavesActive",                     config_parse_bool,                         0,                             offsetof(Bond, all_slaves_active)},
  371|   296k|      {(char*)0}, {(char*)0},
  372|   296k|#line 153 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  373|   296k|      {"VXLAN.FDBAgeingSec",                       config_parse_sec,                          0,                             offsetof(VxLan, fdb_ageing)},
  374|   296k|#line 199 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  375|   296k|      {"Tun.PacketInfo",                           config_parse_bool,                         0,                             offsetof(TunTap, packet_info)},
  376|   296k|      {(char*)0},
  377|   296k|#line 274 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  378|   296k|      {"BatmanAdvanced.Aggregation",               config_parse_bool,                         0,                             offsetof(BatmanAdvanced, aggregation)},
  379|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  380|   296k|#line 159 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  381|   296k|      {"VXLAN.FlowLabel",                          config_parse_flow_label,                   0,                             0},
  382|   296k|#line 285 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  383|   296k|      {"BatmanAdvanced.RoutingAlgorithm",          config_parse_batadv_routing_algorithm,     0,                             offsetof(BatmanAdvanced, routing_algorithm)},
  384|   296k|#line 146 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  385|   296k|      {"VXLAN.UDPChecksum",                        config_parse_bool,                         0,                             offsetof(VxLan, udpcsum)},
  386|   296k|#line 66 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  387|   296k|      {"VLAN.EgressQOSMaps",                       config_parse_vlan_qos_maps,                0,                             offsetof(VLan, egress_qos_maps)},
  388|   296k|#line 250 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  389|   296k|      {"Bridge.LinkLocalLearning",                 config_parse_tristate,                     0,                             offsetof(Bridge, linklocal_learn)},
  390|   296k|#line 221 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  391|   296k|      {"Bond.PacketsPerSlave",                     config_parse_unsigned,                     0,                             offsetof(Bond, packets_per_slave)},
  392|   296k|#line 204 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  393|   296k|      {"Tap.OneQueue",                             config_parse_warn_compat,                  DISABLED_LEGACY,               0},
  394|   296k|      {(char*)0},
  395|   296k|#line 137 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  396|   296k|      {"VXLAN.TOS",                                config_parse_unsigned,                     0,                             offsetof(VxLan, tos)},
  397|   296k|      {(char*)0},
  398|   296k|#line 81 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  399|   296k|      {"Tunnel.TTL",                               config_parse_unsigned,                     0,                             offsetof(Tunnel, ttl)},
  400|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  401|   296k|      {(char*)0},
  402|   296k|#line 197 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  403|   296k|      {"Tun.OneQueue",                             config_parse_warn_compat,                  DISABLED_LEGACY,               0},
  404|   296k|#line 85 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  405|   296k|      {"Tunnel.DiscoverPathMTU",                   config_parse_tristate,                     0,                             offsetof(Tunnel, pmtudisc)},
  406|   296k|#line 224 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  407|   296k|      {"Bond.DynamicTransmitLoadBalancing",        config_parse_tristate,                     0,                             offsetof(Bond, tlb_dynamic_lb)},
  408|   296k|#line 73 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  409|   296k|      {"MACVTAP.SourceMACAddress",                 config_parse_ether_addrs,                  0,                             offsetof(MacVlan, match_source_mac)},
  410|   296k|#line 97 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  411|   296k|      {"Tunnel.Encapsulation",                     config_parse_fou_encap_type,               0,                             offsetof(Tunnel, fou_encap_type)},
  412|   296k|#line 278 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  413|   296k|      {"BatmanAdvanced.GatewayMode",               config_parse_batadv_gateway_mode,          0,                             offsetof(BatmanAdvanced, gateway_mode)},
  414|   296k|      {(char*)0}, {(char*)0},
  415|   296k|#line 69 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  416|   296k|      {"MACVLAN.SourceMACAddress",                 config_parse_ether_addrs,                  0,                             offsetof(MacVlan, match_source_mac)},
  417|   296k|#line 167 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  418|   296k|      {"GENEVE.TTL",                               config_parse_geneve_ttl,                   0,                             offsetof(Geneve, ttl)},
  419|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  420|   296k|#line 116 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  421|   296k|      {"L2TP.Local",                               config_parse_l2tp_tunnel_local_address,    0,                             0},
  422|   296k|#line 103 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  423|   296k|      {"Tunnel.SerializeTunneledPackets",          config_parse_tristate,                     0,                             offsetof(Tunnel, gre_erspan_sequence)},
  424|   296k|      {(char*)0},
  425|   296k|#line 112 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  426|   296k|      {"L2TP.TunnelId",                            config_parse_l2tp_tunnel_id,               0,                             offsetof(L2tpTunnel, tunnel_id)},
  427|   296k|#line 132 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  428|   296k|      {"VXLAN.VNI",                                config_parse_uint32,                       0,                             offsetof(VxLan, vni)},
  429|   296k|#line 238 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  430|   296k|      {"Bridge.AgeingTimeSec",                     config_parse_sec,                          0,                             offsetof(Bridge, ageing_time)},
  431|   296k|#line 257 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  432|   296k|      {"WireGuard.FwMark",                         config_parse_unsigned,                     0,                             offsetof(Wireguard, fwmark) /* deprecated */},
  433|   296k|      {(char*)0}, {(char*)0},
  434|   296k|#line 246 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  435|   296k|      {"Bridge.VLANProtocol",                      config_parse_vlanprotocol,                 0,                             offsetof(Bridge, vlan_protocol)},
  436|   296k|#line 163 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  437|   296k|      {"VXLAN.VNIFilter",                          config_parse_bool,                         0,                             offsetof(VxLan, vnifilter)},
  438|   296k|      {(char*)0}, {(char*)0},
  439|   296k|#line 115 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  440|   296k|      {"L2TP.UDPDestinationPort",                  config_parse_ip_port,                      0,                             offsetof(L2tpTunnel, l2tp_udp_dport)},
  441|   296k|#line 142 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  442|   296k|      {"VXLAN.L2MissNotification",                 config_parse_bool,                         0,                             offsetof(VxLan, l2miss)},
  443|   296k|#line 99 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  444|   296k|      {"Tunnel.ERSPANVersion",                     config_parse_erspan_version,               0,                             offsetof(Tunnel, erspan_version)},
  445|   296k|#line 219 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  446|   296k|      {"Bond.PrimaryReselectPolicy",               config_parse_bond_primary_reselect,        0,                             offsetof(Bond, primary_reselect)},
  447|   296k|      {(char*)0},
  448|   296k|#line 55 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  449|   296k|      {"NetDev.Description",                       config_parse_string,                       0,                             offsetof(NetDev, description)},
  450|   296k|      {(char*)0},
  451|   296k|#line 258 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  452|   296k|      {"WireGuard.ListenPort",                     config_parse_wireguard_listen_port,        0,                             offsetof(Wireguard, port)},
  453|   296k|#line 117 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  454|   296k|      {"L2TP.Remote",                              config_parse_l2tp_tunnel_remote_address,   0,                             0},
  455|   296k|#line 145 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  456|   296k|      {"VXLAN.UDPCheckSum",                        config_parse_bool,                         0,                             offsetof(VxLan, udpcsum)},
  457|   296k|      {(char*)0},
  458|   296k|#line 80 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  459|   296k|      {"Tunnel.TOS",                               config_parse_unsigned,                     0,                             offsetof(Tunnel, tos)},
  460|   296k|#line 130 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  461|   296k|      {"Peer.MACAddress",                          config_parse_netdev_hw_addr,               ETH_ALEN,                      offsetof(Veth, hw_addr_peer)},
  462|   296k|#line 262 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  463|   296k|      {"WireGuard.RouteMetric",                    config_parse_wireguard_route_priority,     0,                             offsetof(Wireguard, route_priority)},
  464|   296k|      {(char*)0},
  465|   296k|#line 222 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  466|   296k|      {"Bond.GratuitousARP",                       config_parse_unsigned,                     0,                             offsetof(Bond, num_grat_arp)},
  467|   296k|#line 229 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  468|   296k|      {"Bond.ARPIntervalSec",                      config_parse_sec,                          0,                             offsetof(Bond, arp_interval)},
  469|   296k|      {(char*)0}, {(char*)0},
  470|   296k|#line 280 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  471|   296k|      {"BatmanAdvanced.GatewayBandwithUp",         config_parse_badadv_bandwidth,             0,                             offsetof(BatmanAdvanced, gateway_bandwidth_up)},
  472|   296k|#line 282 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  473|   296k|      {"BatmanAdvanced.GatewayBandwidthUp",        config_parse_badadv_bandwidth,             0,                             offsetof(BatmanAdvanced, gateway_bandwidth_up)},
  474|   296k|#line 279 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  475|   296k|      {"BatmanAdvanced.GatewayBandwithDown",       config_parse_badadv_bandwidth,             0,                             offsetof(BatmanAdvanced, gateway_bandwidth_down)},
  476|   296k|#line 281 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  477|   296k|      {"BatmanAdvanced.GatewayBandwidthDown",      config_parse_badadv_bandwidth,             0,                             offsetof(BatmanAdvanced, gateway_bandwidth_down)},
  478|   296k|      {(char*)0},
  479|   296k|#line 113 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  480|   296k|      {"L2TP.PeerTunnelId",                        config_parse_l2tp_tunnel_id,               0,                             offsetof(L2tpTunnel, peer_tunnel_id)},
  481|   296k|#line 233 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  482|   296k|      {"Bond.AdUserPortKey",                       config_parse_ad_user_port_key,             0,                             offsetof(Bond, ad_user_port_key)},
  483|   296k|#line 166 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  484|   296k|      {"GENEVE.TOS",                               config_parse_uint8,                        0,                             offsetof(Geneve, tos)},
  485|   296k|#line 47 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  486|   296k|      {"Match.Host",                               config_parse_net_condition,                CONDITION_HOST,                offsetof(NetDev, conditions)},
  487|   296k|      {(char*)0},
  488|   296k|#line 60 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  489|   296k|      {"VLAN.Id",                                  config_parse_vlanid,                       0,                             offsetof(VLan, id)},
  490|   296k|#line 51 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  491|   296k|      {"Match.Version",                            config_parse_net_condition,                CONDITION_VERSION,             offsetof(NetDev, conditions)},
  492|   296k|#line 54 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  493|   296k|      {"Match.Firmware",                           config_parse_net_condition,                CONDITION_FIRMWARE,            offsetof(NetDev, conditions)},
  494|   296k|#line 84 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  495|   296k|      {"Tunnel.OutputKey",                         config_parse_tunnel_key,                   0,                             offsetof(Tunnel, okey)},
  496|   296k|#line 52 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  497|   296k|      {"Match.Credential",                         config_parse_net_condition,                CONDITION_CREDENTIAL,          offsetof(NetDev, conditions)},
  498|   296k|      {(char*)0},
  499|   296k|#line 93 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  500|   296k|      {"Tunnel.AllowLocalRemote",                  config_parse_tristate,                     0,                             offsetof(Tunnel, allow_localremote)},
  501|   296k|#line 50 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  502|   296k|      {"Match.KernelVersion",                      config_parse_net_condition,                CONDITION_VERSION,             offsetof(NetDev, conditions)},
  503|   296k|#line 261 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  504|   296k|      {"WireGuard.RouteTable",                     config_parse_wireguard_route_table,        0,                             offsetof(Wireguard, route_table)},
  505|   296k|#line 128 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  506|   296k|      {"L2TPSession.Name",                         config_parse_l2tp_session_name,            0,                             0},
  507|   296k|#line 94 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  508|   296k|      {"Tunnel.FooOverUDP",                        config_parse_bool,                         0,                             offsetof(Tunnel, fou_tunnel)},
  509|   296k|#line 114 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  510|   296k|      {"L2TP.UDPSourcePort",                       config_parse_ip_port,                      0,                             offsetof(L2tpTunnel, l2tp_udp_sport)},
  511|   296k|      {(char*)0},
  512|   296k|#line 48 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  513|   296k|      {"Match.Virtualization",                     config_parse_net_condition,                CONDITION_VIRTUALIZATION,      offsetof(NetDev, conditions)},
  514|   296k|#line 273 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  515|   296k|      {"Xfrm.Independent",                         config_parse_bool,                         0,                             offsetof(Xfrm, independent)},
  516|   296k|#line 75 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  517|   296k|      {"IPVLAN.Flags",                             config_parse_ipvlan_flags,                 0,                             offsetof(IPVlan, flags)},
  518|   296k|      {(char*)0},
  519|   296k|#line 263 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  520|   296k|      {"WireGuardPeer.AllowedIPs",                 config_parse_wireguard_allowed_ips,        0,                             0},
  521|   296k|      {(char*)0}, {(char*)0},
  522|   296k|#line 216 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  523|   296k|      {"Bond.ARPIPTargets",                        config_parse_arp_ip_target_address,        0,                             0},
  524|   296k|#line 53 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  525|   296k|      {"Match.Architecture",                       config_parse_net_condition,                CONDITION_ARCHITECTURE,        offsetof(NetDev, conditions)},
  526|   296k|#line 62 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  527|   296k|      {"VLAN.GVRP",                                config_parse_tristate,                     0,                             offsetof(VLan, gvrp)},
  528|   296k|      {(char*)0}, {(char*)0},
  529|   296k|#line 230 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  530|   296k|      {"Bond.LearnPacketIntervalSec",              config_parse_sec,                          0,                             offsetof(Bond, lp_interval)},
  531|   296k|#line 269 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  532|   296k|      {"WireGuardPeer.PersistentKeepalive",        config_parse_wireguard_keepalive,          0,                             0},
  533|   296k|#line 140 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  534|   296k|      {"VXLAN.ARPProxy",                           config_parse_bool,                         0,                             offsetof(VxLan, arp_proxy)},
  535|   296k|      {(char*)0}, {(char*)0},
  536|   296k|#line 255 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  537|   296k|      {"BareUDP.EtherType",                        config_parse_bare_udp_iftype,              0,                             offsetof(BareUDP, iftype)},
  538|   296k|#line 226 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  539|   296k|      {"Bond.MIIMonitorSec",                       config_parse_sec,                          0,                             offsetof(Bond, miimon)},
  540|   296k|      {(char*)0},
  541|   296k|#line 271 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  542|   296k|      {"WireGuardPeer.RouteMetric",                config_parse_wireguard_peer_route_priority,0,                             0},
  543|   296k|      {(char*)0},
  544|   296k|#line 77 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  545|   296k|      {"IPVTAP.Flags",                             config_parse_ipvlan_flags,                 0,                             offsetof(IPVlan, flags)},
  546|   296k|      {(char*)0}, {(char*)0},
  547|   296k|#line 240 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  548|   296k|      {"Bridge.Priority",                          config_parse_uint16,                       0,                             offsetof(Bridge, priority)},
  549|   296k|      {(char*)0},
  550|   296k|#line 70 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  551|   296k|      {"MACVLAN.BroadcastMulticastQueueLength",    config_parse_macvlan_broadcast_queue_size, 0,                             offsetof(MacVlan, bc_queue_length)},
  552|   296k|#line 168 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  553|   296k|      {"GENEVE.UDPChecksum",                       config_parse_bool,                         0,                             offsetof(Geneve, udpcsum)},
  554|   296k|      {(char*)0},
  555|   296k|#line 249 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  556|   296k|      {"Bridge.FDBMaxLearned",                     config_parse_bridge_fdb_max_learned,       0,                             offsetof(Bridge, fdb_max_learned)},
  557|   296k|#line 160 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  558|   296k|      {"VXLAN.IPDoNotFragment",                    config_parse_df,                           0,                             offsetof(VxLan, df)},
  559|   296k|#line 239 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  560|   296k|      {"Bridge.ForwardDelaySec",                   config_parse_sec,                          0,                             offsetof(Bridge, forward_delay)},
  561|   296k|#line 92 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  562|   296k|      {"Tunnel.AssignToLoopback",                  config_parse_bool,                         0,                             offsetof(Tunnel, assign_to_loopback)},
  563|   296k|#line 164 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  564|   296k|      {"GENEVE.Id",                                config_parse_geneve_vni,                   0,                             offsetof(Geneve, id)},
  565|   296k|#line 141 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  566|   296k|      {"VXLAN.ReduceARPProxy",                     config_parse_bool,                         0,                             offsetof(VxLan, arp_proxy)},
  567|   296k|      {(char*)0},
  568|   296k|#line 215 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  569|   296k|      {"Bond.FailOverMACPolicy",                   config_parse_bond_fail_over_mac,           0,                             offsetof(Bond, fail_over_mac)},
  570|   296k|#line 234 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  571|   296k|      {"Bond.AdActorSystem",                       config_parse_ad_actor_system,              0,                             offsetof(Bond, ad_actor_system)},
  572|   296k|#line 290 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  573|   296k|      {"WLAN.Type",                                config_parse_wlan_iftype,                  0,                             offsetof(WLan, iftype)},
  574|   296k|#line 90 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  575|   296k|      {"Tunnel.EncapsulationLimit",                config_parse_encap_limit,                  0,                             0},
  576|   296k|      {(char*)0}, {(char*)0},
  577|   296k|#line 91 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  578|   296k|      {"Tunnel.Independent",                       config_parse_bool,                         0,                             offsetof(Tunnel, independent)},
  579|   296k|      {(char*)0},
  580|   296k|#line 170 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  581|   296k|      {"GENEVE.UDP6ZeroChecksumRx",                config_parse_bool,                         0,                             offsetof(Geneve, udp6zerocsumrx)},
  582|   296k|#line 232 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  583|   296k|      {"Bond.AdActorSystemPriority",               config_parse_ad_actor_sys_prio,            0,                             offsetof(Bond, ad_actor_sys_prio)},
  584|   296k|      {(char*)0}, {(char*)0},
  585|   296k|#line 289 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  586|   296k|      {"WLAN.PhysicalDevice",                      config_parse_wiphy,                        0,                             0},
  587|   296k|#line 245 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  588|   296k|      {"Bridge.VLANFiltering",                     config_parse_tristate,                     0,                             offsetof(Bridge, vlan_filtering)},
  589|   296k|#line 267 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  590|   296k|      {"WireGuardPeer.PresharedKey",               config_parse_wireguard_peer_key,           0,                             0},
  591|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  592|   296k|#line 268 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  593|   296k|      {"WireGuardPeer.PresharedKeyFile",           config_parse_wireguard_peer_key_file,      0,                             0},
  594|   296k|      {(char*)0}, {(char*)0},
  595|   296k|#line 104 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  596|   296k|      {"Tunnel.ISATAP",                            config_parse_tristate,                     0,                             offsetof(Tunnel, isatap)},
  597|   296k|#line 162 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  598|   296k|      {"VXLAN.External",                           config_parse_bool,                         0,                             offsetof(VxLan, external)},
  599|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  600|   296k|#line 207 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  601|   296k|      {"Tap.VNetHeader",                           config_parse_bool,                         0,                             offsetof(TunTap, vnet_hdr)},
  602|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  603|   296k|#line 286 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  604|   296k|      {"IPoIB.PartitionKey",                       config_parse_ipoib_pkey,                   0,                             offsetof(IPoIB, pkey)},
  605|   296k|#line 236 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  606|   296k|      {"Bridge.HelloTimeSec",                      config_parse_sec,                          0,                             offsetof(Bridge, hello_time)},
  607|   296k|#line 172 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  608|   296k|      {"GENEVE.UDP6ZeroChecksumTx",                config_parse_bool,                         0,                             offsetof(Geneve, udp6zerocsumtx)},
  609|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  610|   296k|#line 200 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  611|   296k|      {"Tun.VNetHeader",                           config_parse_bool,                         0,                             offsetof(TunTap, vnet_hdr)},
  612|   296k|#line 283 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  613|   296k|      {"BatmanAdvanced.HopPenalty",                config_parse_uint8,                        0,                             offsetof(BatmanAdvanced, hop_penalty)},
  614|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  615|   296k|#line 244 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  616|   296k|      {"Bridge.MulticastSnooping",                 config_parse_tristate,                     0,                             offsetof(Bridge, mcast_snooping)},
  617|   296k|      {(char*)0},
  618|   296k|#line 119 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  619|   296k|      {"L2TP.UDPChecksum",                         config_parse_bool,                         0,                             offsetof(L2tpTunnel, udp_csum)},
  620|   296k|#line 256 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  621|   296k|      {"WireGuard.FirewallMark",                   config_parse_unsigned,                     0,                             offsetof(Wireguard, fwmark)},
  622|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  623|   296k|#line 213 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  624|   296k|      {"Bond.LACPTransmitRate",                    config_parse_bond_lacp_rate,               0,                             offsetof(Bond, lacp_rate)},
  625|   296k|      {(char*)0}, {(char*)0},
  626|   296k|#line 270 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  627|   296k|      {"WireGuardPeer.RouteTable",                 config_parse_wireguard_peer_route_table,   0,                             0},
  628|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  629|   296k|#line 96 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  630|   296k|      {"Tunnel.FOUSourcePort",                     config_parse_ip_port,                      0,                             offsetof(Tunnel, encap_src_port)},
  631|   296k|#line 169 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  632|   296k|      {"GENEVE.UDP6ZeroCheckSumRx",                config_parse_bool,                         0,                             offsetof(Geneve, udp6zerocsumrx)},
  633|   296k|      {(char*)0},
  634|   296k|#line 228 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  635|   296k|      {"Bond.DownDelaySec",                        config_parse_sec,                          0,                             offsetof(Bond, downdelay)},
  636|   296k|#line 241 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  637|   296k|      {"Bridge.GroupForwardMask",                  config_parse_uint16,                       0,                             offsetof(Bridge, group_fwd_mask)},
  638|   296k|#line 209 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  639|   296k|      {"Tap.Group",                                config_parse_string,                       CONFIG_PARSE_STRING_SAFE,      offsetof(TunTap, group_name)},
  640|   296k|#line 155 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  641|   296k|      {"VXLAN.GenericProtocolExtension",           config_parse_bool,                         0,                             offsetof(VxLan, generic_protocol_extension)},
  642|   296k|      {(char*)0}, {(char*)0},
  643|   296k|#line 49 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  644|   296k|      {"Match.KernelCommandLine",                  config_parse_net_condition,                CONDITION_KERNEL_COMMAND_LINE, offsetof(NetDev, conditions)},
  645|   296k|#line 95 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  646|   296k|      {"Tunnel.FOUDestinationPort",                config_parse_ip_port,                      0,                             offsetof(Tunnel, fou_destination_port)},
  647|   296k|      {(char*)0},
  648|   296k|#line 175 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  649|   296k|      {"GENEVE.FlowLabel",                         config_parse_geneve_flow_label,            0,                             0},
  650|   296k|      {(char*)0}, {(char*)0},
  651|   296k|#line 202 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  652|   296k|      {"Tun.Group",                                config_parse_string,                       CONFIG_PARSE_STRING_SAFE,      offsetof(TunTap, group_name)},
  653|   296k|#line 105 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  654|   296k|      {"Tunnel.External",                          config_parse_bool,                         0,                             offsetof(Tunnel, external)},
  655|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  656|   296k|#line 121 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  657|   296k|      {"L2TP.UDP6ChecksumRx",                      config_parse_bool,                         0,                             offsetof(L2tpTunnel, udp6_csum_rx)},
  658|   296k|#line 126 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  659|   296k|      {"L2TPSession.PeerSessionId",                config_parse_l2tp_session_id,              0,                             0},
  660|   296k|      {(char*)0},
  661|   296k|#line 248 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  662|   296k|      {"Bridge.MulticastIGMPVersion",              config_parse_bridge_igmp_version,          0,                             offsetof(Bridge, igmp_version)},
  663|   296k|      {(char*)0}, {(char*)0},
  664|   296k|#line 171 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  665|   296k|      {"GENEVE.UDP6ZeroCheckSumTx",                config_parse_bool,                         0,                             offsetof(Geneve, udp6zerocsumtx)},
  666|   296k|#line 125 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  667|   296k|      {"L2TPSession.SessionId",                    config_parse_l2tp_session_id,              0,                             0},
  668|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  669|   296k|      {(char*)0},
  670|   296k|#line 152 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  671|   296k|      {"VXLAN.RemoteChecksumRx",                   config_parse_bool,                         0,                             offsetof(VxLan, remote_csum_rx)},
  672|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  673|   296k|#line 120 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  674|   296k|      {"L2TP.UDPCheckSum",                         config_parse_bool,                         0,                             offsetof(L2tpTunnel, udp_csum) /* deprecated */},
  675|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  676|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  677|   296k|#line 123 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  678|   296k|      {"L2TP.UDP6ChecksumTx",                      config_parse_bool,                         0,                             offsetof(L2tpTunnel, udp6_csum_tx)},
  679|   296k|      {(char*)0}, {(char*)0},
  680|   296k|#line 264 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  681|   296k|      {"WireGuardPeer.Endpoint",                   config_parse_wireguard_endpoint,           0,                             0},
  682|   296k|      {(char*)0}, {(char*)0},
  683|   296k|#line 210 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  684|   296k|      {"Tap.KeepCarrier",                          config_parse_bool,                         0,                             offsetof(TunTap, keep_fd)},
  685|   296k|#line 272 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  686|   296k|      {"Xfrm.InterfaceId",                         config_parse_uint32,                       0,                             offsetof(Xfrm, if_id)},
  687|   296k|      {(char*)0},
  688|   296k|#line 102 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  689|   296k|      {"Tunnel.ERSPANHardwareId",                  config_parse_erspan_hwid,                  0,                             offsetof(Tunnel, erspan_hwid)},
  690|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  691|   296k|#line 151 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  692|   296k|      {"VXLAN.RemoteChecksumTx",                   config_parse_bool,                         0,                             offsetof(VxLan, remote_csum_tx)},
  693|   296k|#line 156 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  694|   296k|      {"VXLAN.MaximumFDBEntries",                  config_parse_unsigned,                     0,                             offsetof(VxLan, max_fdb)},
  695|   296k|      {(char*)0},
  696|   296k|#line 203 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  697|   296k|      {"Tun.KeepCarrier",                          config_parse_bool,                         0,                             offsetof(TunTap, keep_fd)},
  698|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  699|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  700|   296k|#line 122 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  701|   296k|      {"L2TP.UDP6CheckSumRx",                      config_parse_bool,                         0,                             offsetof(L2tpTunnel, udp6_csum_rx) /* deprecated */},
  702|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  703|   296k|      {(char*)0},
  704|   296k|#line 89 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  705|   296k|      {"Tunnel.CopyDSCP",                          config_parse_bool,                         0,                             offsetof(Tunnel, copy_dscp)},
  706|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  707|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  708|   296k|      {(char*)0}, {(char*)0},
  709|   296k|#line 288 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  710|   296k|      {"IPoIB.IgnoreUserspaceMulticastGroups",     config_parse_tristate,                     0,                             offsetof(IPoIB, umcast)},
  711|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  712|   296k|#line 259 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  713|   296k|      {"WireGuard.PrivateKey",                     config_parse_wireguard_private_key,        0,                             0},
  714|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  715|   296k|#line 124 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  716|   296k|      {"L2TP.UDP6CheckSumTx",                      config_parse_bool,                         0,                             offsetof(L2tpTunnel, udp6_csum_tx) /* deprecated */},
  717|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  718|   296k|      {(char*)0},
  719|   296k|#line 88 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  720|   296k|      {"Tunnel.IPv6FlowLabel",                     config_parse_ipv6_flowlabel,               0,                             0},
  721|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  722|   296k|#line 83 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  723|   296k|      {"Tunnel.InputKey",                          config_parse_tunnel_key,                   0,                             offsetof(Tunnel, ikey)},
  724|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  725|   296k|#line 148 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  726|   296k|      {"VXLAN.UDP6ZeroChecksumRx",                 config_parse_bool,                         0,                             offsetof(VxLan, udp6zerocsumrx)},
  727|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  728|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  729|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  730|   296k|#line 71 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  731|   296k|      {"MACVLAN.BroadcastQueueThreshold",          config_parse_macvlan_broadcast_queue_threshold, 0,                        offsetof(MacVlan, bc_queue_threshold)},
  732|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  733|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  734|   296k|#line 182 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  735|   296k|      {"MACsecReceiveChannel.Port",                config_parse_macsec_port,                  0,                             0},
  736|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  737|   296k|#line 150 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  738|   296k|      {"VXLAN.UDP6ZeroChecksumTx",                 config_parse_bool,                         0,                             offsetof(VxLan, udp6zerocsumtx)},
  739|   296k|      {(char*)0}, {(char*)0},
  740|   296k|#line 176 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  741|   296k|      {"GENEVE.InheritInnerProtocol",              config_parse_bool,                         0,                             offsetof(Geneve, inherit_inner_protocol)},
  742|   296k|#line 100 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  743|   296k|      {"Tunnel.ERSPANIndex",                       config_parse_erspan_index,                 0,                             offsetof(Tunnel, erspan_index)},
  744|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  745|   296k|      {(char*)0}, {(char*)0},
  746|   296k|#line 86 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  747|   296k|      {"Tunnel.IgnoreDontFragment",                config_parse_bool,                         0,                             offsetof(Tunnel, ignore_df)},
  748|   296k|      {(char*)0},
  749|   296k|#line 174 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  750|   296k|      {"GENEVE.IPDoNotFragment",                   config_parse_geneve_df,                    0,                             offsetof(Geneve, geneve_df)},
  751|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  752|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  753|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  754|   296k|#line 147 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  755|   296k|      {"VXLAN.UDP6ZeroCheckSumRx",                 config_parse_bool,                         0,                             offsetof(VxLan, udp6zerocsumrx)},
  756|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  757|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  758|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  759|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  760|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  761|   296k|      {(char*)0}, {(char*)0},
  762|   296k|#line 118 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  763|   296k|      {"L2TP.EncapsulationType",                   config_parse_l2tp_encap_type,              0,                             offsetof(L2tpTunnel, l2tp_encap_type)},
  764|   296k|      {(char*)0},
  765|   296k|#line 149 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  766|   296k|      {"VXLAN.UDP6ZeroCheckSumTx",                 config_parse_bool,                         0,                             offsetof(VxLan, udp6zerocsumtx)},
  767|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  768|   296k|#line 265 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  769|   296k|      {"WireGuardPeer.PublicKey",                  config_parse_wireguard_peer_key,           0,                             0},
  770|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  771|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  772|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  773|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  774|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  775|   296k|#line 212 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  776|   296k|      {"Bond.TransmitHashPolicy",                  config_parse_bond_xmit_hash_policy,        0,                             offsetof(Bond, xmit_hash_policy)},
  777|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  778|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  779|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  780|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  781|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  782|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  783|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  784|   296k|#line 98 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  785|   296k|      {"Tunnel.IPv6RapidDeploymentPrefix",         config_parse_6rd_prefix,                   0,                             0},
  786|   296k|#line 231 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  787|   296k|      {"Bond.PeerNotifyDelaySec",                  config_parse_sec,                          0,                             offsetof(Bond, peer_notify_delay)},
  788|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  789|   296k|#line 67 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  790|   296k|      {"VLAN.IngressQOSMaps",                      config_parse_vlan_qos_maps,                0,                             offsetof(VLan, ingress_qos_maps)},
  791|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  792|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  793|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  794|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  795|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  796|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  797|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  798|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  799|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  800|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  801|   296k|      {(char*)0}, {(char*)0},
  802|   296k|#line 183 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  803|   296k|      {"MACsecReceiveChannel.MACAddress",          config_parse_macsec_hw_address,            0,                             0},
  804|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  805|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  806|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  807|   296k|#line 260 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  808|   296k|      {"WireGuard.PrivateKeyFile",                 config_parse_wireguard_private_key_file,   0,                             0},
  809|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  810|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  811|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  812|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  813|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  814|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  815|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  816|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  817|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  818|   296k|      {(char*)0},
  819|   296k|#line 266 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  820|   296k|      {"WireGuardPeer.PublicKeyFile",              config_parse_wireguard_peer_key_file,      0,                             0},
  821|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  822|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  823|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  824|   296k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  825|   296k|      {(char*)0}, {(char*)0}, {(char*)0},
  826|   296k|#line 127 "../../src/systemd/src/network/netdev/netdev-gperf.gperf"
  827|   296k|      {"L2TPSession.Layer2SpecificHeader",         config_parse_l2tp_session_l2spec,          0,                             0}
  828|   296k|    };
  829|       |
  830|   296k|  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  ------------------
  |  |   70|   592k|#define MAX_WORD_LENGTH 40
  ------------------
                if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  ------------------
  |  |   69|   295k|#define MIN_WORD_LENGTH 7
  ------------------
  |  Branch (830:7): [True: 295k, False: 1.16k]
  |  Branch (830:33): [True: 294k, False: 384]
  ------------------
  831|   294k|    {
  832|   294k|      register unsigned int key = network_netdev_gperf_hash (str, len);
  833|       |
  834|   294k|      if (key <= MAX_HASH_VALUE)
  ------------------
  |  |   72|   294k|#define MAX_HASH_VALUE 687
  ------------------
  |  Branch (834:11): [True: 290k, False: 4.47k]
  ------------------
  835|   290k|        {
  836|   290k|          register const char *s = wordlist[key].section_and_lvalue;
  837|       |
  838|   290k|          if (s && *str == *s && !strcmp (str + 1, s + 1))
  ------------------
  |  Branch (838:15): [True: 280k, False: 9.40k]
  |  Branch (838:20): [True: 266k, False: 14.0k]
  |  Branch (838:34): [True: 264k, False: 2.65k]
  ------------------
  839|   264k|            return &wordlist[key];
  840|   290k|        }
  841|   294k|    }
  842|  32.1k|  return 0;
  843|   296k|}
netdev-gperf.c:network_netdev_gperf_hash:
   84|   294k|{
   85|   294k|  static const unsigned short asso_values[] =
   86|   294k|    {
   87|   294k|      688, 688, 688, 688, 688, 688, 688, 688, 688, 688,
   88|   294k|      688, 688, 688, 688, 688, 688, 688, 688, 688, 688,
   89|   294k|      688, 688, 688, 688, 688, 688, 688, 688, 688, 688,
   90|   294k|      688, 688, 688, 688, 688, 688, 688, 688, 688, 688,
   91|   294k|      688, 688, 688, 688, 688, 688,  10, 688, 688, 688,
   92|   294k|      110,   5, 688, 688,  75, 688, 688, 688, 688, 688,
   93|   294k|      688, 688, 688, 688, 688,   0,  65, 150,   0,   0,
   94|   294k|      145, 145, 195, 160, 688,  45,  45,  30,   0,  84,
   95|   294k|       20,  45,  15,  50,  40,   0,  85,   5,   5, 688,
   96|   294k|      688, 688, 688, 688, 688, 688, 688,   0,  35,   5,
   97|   294k|       15,   0,  30,  35, 200,   0, 688, 100,  60,  55,
   98|   294k|        5,   0, 170, 688,   0,   0,   5,  10,   0,  65,
   99|   294k|      200, 185,   0, 688, 688, 688, 688, 688, 688, 688,
  100|   294k|      688, 688, 688, 688, 688, 688, 688, 688, 688, 688,
  101|   294k|      688, 688, 688, 688, 688, 688, 688, 688, 688, 688,
  102|   294k|      688, 688, 688, 688, 688, 688, 688, 688, 688, 688,
  103|   294k|      688, 688, 688, 688, 688, 688, 688, 688, 688, 688,
  104|   294k|      688, 688, 688, 688, 688, 688, 688, 688, 688, 688,
  105|   294k|      688, 688, 688, 688, 688, 688, 688, 688, 688, 688,
  106|   294k|      688, 688, 688, 688, 688, 688, 688, 688, 688, 688,
  107|   294k|      688, 688, 688, 688, 688, 688, 688, 688, 688, 688,
  108|   294k|      688, 688, 688, 688, 688, 688, 688, 688, 688, 688,
  109|   294k|      688, 688, 688, 688, 688, 688, 688, 688, 688, 688,
  110|   294k|      688, 688, 688, 688, 688, 688, 688, 688, 688, 688,
  111|   294k|      688, 688, 688, 688, 688, 688, 688, 688, 688, 688,
  112|   294k|      688, 688, 688, 688, 688, 688
  113|   294k|    };
  114|   294k|  register unsigned int hval = len;
  115|       |
  116|   294k|  switch (hval)
  117|   294k|    {
  118|  54.1k|      default:
  ------------------
  |  Branch (118:7): [True: 54.1k, False: 240k]
  ------------------
  119|  54.1k|        hval += asso_values[(unsigned char)str[23]];
  120|       |      /*FALLTHROUGH*/
  121|  60.9k|      case 23:
  ------------------
  |  Branch (121:7): [True: 6.85k, False: 287k]
  ------------------
  122|  60.9k|        hval += asso_values[(unsigned char)str[22]];
  123|       |      /*FALLTHROUGH*/
  124|  79.8k|      case 22:
  ------------------
  |  Branch (124:7): [True: 18.8k, False: 275k]
  ------------------
  125|  86.0k|      case 21:
  ------------------
  |  Branch (125:7): [True: 6.23k, False: 288k]
  ------------------
  126|  86.0k|        hval += asso_values[(unsigned char)str[20]];
  127|       |      /*FALLTHROUGH*/
  128|  97.2k|      case 20:
  ------------------
  |  Branch (128:7): [True: 11.1k, False: 283k]
  ------------------
  129|  97.2k|        hval += asso_values[(unsigned char)str[19]];
  130|       |      /*FALLTHROUGH*/
  131|   107k|      case 19:
  ------------------
  |  Branch (131:7): [True: 10.1k, False: 284k]
  ------------------
  132|   117k|      case 18:
  ------------------
  |  Branch (132:7): [True: 10.1k, False: 284k]
  ------------------
  133|   117k|        hval += asso_values[(unsigned char)str[17]];
  134|       |      /*FALLTHROUGH*/
  135|   126k|      case 17:
  ------------------
  |  Branch (135:7): [True: 8.81k, False: 285k]
  ------------------
  136|   190k|      case 16:
  ------------------
  |  Branch (136:7): [True: 63.9k, False: 230k]
  ------------------
  137|   201k|      case 15:
  ------------------
  |  Branch (137:7): [True: 11.2k, False: 283k]
  ------------------
  138|   201k|        hval += asso_values[(unsigned char)str[14]];
  139|       |      /*FALLTHROUGH*/
  140|   203k|      case 14:
  ------------------
  |  Branch (140:7): [True: 1.96k, False: 292k]
  ------------------
  141|   203k|        hval += asso_values[(unsigned char)str[13]];
  142|       |      /*FALLTHROUGH*/
  143|   211k|      case 13:
  ------------------
  |  Branch (143:7): [True: 7.64k, False: 286k]
  ------------------
  144|   215k|      case 12:
  ------------------
  |  Branch (144:7): [True: 4.76k, False: 289k]
  ------------------
  145|   273k|      case 11:
  ------------------
  |  Branch (145:7): [True: 57.1k, False: 237k]
  ------------------
  146|   280k|      case 10:
  ------------------
  |  Branch (146:7): [True: 7.90k, False: 286k]
  ------------------
  147|   287k|      case 9:
  ------------------
  |  Branch (147:7): [True: 6.61k, False: 288k]
  ------------------
  148|   287k|        hval += asso_values[(unsigned char)str[8]];
  149|       |      /*FALLTHROUGH*/
  150|   292k|      case 8:
  ------------------
  |  Branch (150:7): [True: 4.72k, False: 289k]
  ------------------
  151|   292k|        hval += asso_values[(unsigned char)str[7]];
  152|       |      /*FALLTHROUGH*/
  153|   294k|      case 7:
  ------------------
  |  Branch (153:7): [True: 2.30k, False: 292k]
  ------------------
  154|   294k|      case 6:
  ------------------
  |  Branch (154:7): [True: 0, False: 294k]
  ------------------
  155|   294k|        hval += asso_values[(unsigned char)str[5]];
  156|       |      /*FALLTHROUGH*/
  157|   294k|      case 5:
  ------------------
  |  Branch (157:7): [True: 0, False: 294k]
  ------------------
  158|   294k|        hval += asso_values[(unsigned char)str[4]];
  159|       |      /*FALLTHROUGH*/
  160|   294k|      case 4:
  ------------------
  |  Branch (160:7): [True: 0, False: 294k]
  ------------------
  161|   294k|      case 3:
  ------------------
  |  Branch (161:7): [True: 0, False: 294k]
  ------------------
  162|   294k|      case 2:
  ------------------
  |  Branch (162:7): [True: 0, False: 294k]
  ------------------
  163|   294k|        hval += asso_values[(unsigned char)str[1]];
  164|   294k|        break;
  165|   294k|    }
  166|   294k|  return hval;
  167|   294k|}

ip-protocol-list.c:lookup_ip_protocol:
  148|  4.32k|{
  149|  4.32k|  static const struct ip_protocol_name wordlist[] =
  150|  4.32k|    {
  151|  4.32k|      {(char*)0}, {(char*)0},
  152|  4.32k|#line 26 "src/shared/ip-protocol-from-name.gperf"
  153|  4.32k|      {"IP", IPPROTO_IP},
  154|  4.32k|#line 33 "src/shared/ip-protocol-from-name.gperf"
  155|  4.32k|      {"PIM", IPPROTO_PIM},
  156|  4.32k|#line 27 "src/shared/ip-protocol-from-name.gperf"
  157|  4.32k|      {"IPIP", IPPROTO_IPIP},
  158|  4.32k|      {(char*)0}, {(char*)0},
  159|  4.32k|#line 29 "src/shared/ip-protocol-from-name.gperf"
  160|  4.32k|      {"MH", IPPROTO_MH},
  161|  4.32k|#line 24 "src/shared/ip-protocol-from-name.gperf"
  162|  4.32k|      {"IDP", IPPROTO_IDP},
  163|  4.32k|#line 22 "src/shared/ip-protocol-from-name.gperf"
  164|  4.32k|      {"ICMP", IPPROTO_ICMP},
  165|  4.32k|      {(char*)0},
  166|  4.32k|#line 23 "src/shared/ip-protocol-from-name.gperf"
  167|  4.32k|      {"ICMPV6", IPPROTO_ICMPV6},
  168|  4.32k|#line 11 "src/shared/ip-protocol-from-name.gperf"
  169|  4.32k|      {"AH", IPPROTO_AH},
  170|  4.32k|#line 34 "src/shared/ip-protocol-from-name.gperf"
  171|  4.32k|      {"PUP", IPPROTO_PUP},
  172|  4.32k|#line 25 "src/shared/ip-protocol-from-name.gperf"
  173|  4.32k|      {"IGMP", IPPROTO_IGMP},
  174|  4.32k|      {(char*)0}, {(char*)0}, {(char*)0},
  175|  4.32k|#line 41 "src/shared/ip-protocol-from-name.gperf"
  176|  4.32k|      {"UDP", IPPROTO_UDP},
  177|  4.32k|#line 14 "src/shared/ip-protocol-from-name.gperf"
  178|  4.32k|      {"DCCP", IPPROTO_DCCP},
  179|  4.32k|      {(char*)0}, {(char*)0},
  180|  4.32k|#line 42 "src/shared/ip-protocol-from-name.gperf"
  181|  4.32k|      {"UDPLITE", IPPROTO_UDPLITE},
  182|  4.32k|#line 35 "src/shared/ip-protocol-from-name.gperf"
  183|  4.32k|      {"RAW", IPPROTO_RAW},
  184|  4.32k|#line 32 "src/shared/ip-protocol-from-name.gperf"
  185|  4.32k|      {"NONE", IPPROTO_NONE},
  186|  4.32k|      {(char*)0}, {(char*)0},
  187|  4.32k|#line 40 "src/shared/ip-protocol-from-name.gperf"
  188|  4.32k|      {"TP", IPPROTO_TP},
  189|  4.32k|#line 31 "src/shared/ip-protocol-from-name.gperf"
  190|  4.32k|      {"MTP", IPPROTO_MTP},
  191|  4.32k|#line 13 "src/shared/ip-protocol-from-name.gperf"
  192|  4.32k|      {"COMP", IPPROTO_COMP},
  193|  4.32k|      {(char*)0}, {(char*)0},
  194|  4.32k|#line 21 "src/shared/ip-protocol-from-name.gperf"
  195|  4.32k|      {"HOPOPTS", IPPROTO_HOPOPTS},
  196|  4.32k|#line 39 "src/shared/ip-protocol-from-name.gperf"
  197|  4.32k|      {"TCP", IPPROTO_TCP},
  198|  4.32k|#line 38 "src/shared/ip-protocol-from-name.gperf"
  199|  4.32k|      {"SCTP", IPPROTO_SCTP},
  200|  4.32k|      {(char*)0}, {(char*)0},
  201|  4.32k|#line 15 "src/shared/ip-protocol-from-name.gperf"
  202|  4.32k|      {"DSTOPTS", IPPROTO_DSTOPTS},
  203|  4.32k|#line 18 "src/shared/ip-protocol-from-name.gperf"
  204|  4.32k|      {"ESP", IPPROTO_ESP},
  205|  4.32k|#line 28 "src/shared/ip-protocol-from-name.gperf"
  206|  4.32k|      {"IPV6", IPPROTO_IPV6},
  207|  4.32k|      {(char*)0}, {(char*)0},
  208|  4.32k|#line 36 "src/shared/ip-protocol-from-name.gperf"
  209|  4.32k|      {"ROUTING", IPPROTO_ROUTING},
  210|  4.32k|#line 19 "src/shared/ip-protocol-from-name.gperf"
  211|  4.32k|      {"FRAGMENT", IPPROTO_FRAGMENT},
  212|  4.32k|#line 37 "src/shared/ip-protocol-from-name.gperf"
  213|  4.32k|      {"RSVP", IPPROTO_RSVP},
  214|  4.32k|#line 17 "src/shared/ip-protocol-from-name.gperf"
  215|  4.32k|      {"ENCAP", IPPROTO_ENCAP},
  216|  4.32k|      {(char*)0}, {(char*)0},
  217|  4.32k|#line 16 "src/shared/ip-protocol-from-name.gperf"
  218|  4.32k|      {"EGP", IPPROTO_EGP},
  219|  4.32k|#line 30 "src/shared/ip-protocol-from-name.gperf"
  220|  4.32k|      {"MPLS", IPPROTO_MPLS},
  221|  4.32k|      {(char*)0}, {(char*)0}, {(char*)0},
  222|  4.32k|#line 20 "src/shared/ip-protocol-from-name.gperf"
  223|  4.32k|      {"GRE", IPPROTO_GRE},
  224|  4.32k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  225|  4.32k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  226|  4.32k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  227|  4.32k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  228|  4.32k|      {(char*)0}, {(char*)0}, {(char*)0}, {(char*)0},
  229|  4.32k|      {(char*)0}, {(char*)0},
  230|  4.32k|#line 12 "src/shared/ip-protocol-from-name.gperf"
  231|  4.32k|      {"BEETPH", IPPROTO_BEETPH}
  232|  4.32k|    };
  233|       |
  234|  4.32k|  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  ------------------
  |  |   44|  8.64k|#define MAX_WORD_LENGTH 8
  ------------------
                if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  ------------------
  |  |   43|  3.85k|#define MIN_WORD_LENGTH 2
  ------------------
  |  Branch (234:7): [True: 3.85k, False: 472]
  |  Branch (234:33): [True: 3.41k, False: 432]
  ------------------
  235|  3.41k|    {
  236|  3.41k|      register unsigned int key = hash_ip_protocol_name (str, len);
  237|       |
  238|  3.41k|      if (key <= MAX_HASH_VALUE)
  ------------------
  |  |   46|  3.41k|#define MAX_HASH_VALUE 76
  ------------------
  |  Branch (238:11): [True: 2.07k, False: 1.34k]
  ------------------
  239|  2.07k|        {
  240|  2.07k|          register const char *s = wordlist[key].name;
  241|       |
  242|  2.07k|          if (s && (((unsigned char)*str ^ (unsigned char)*s) & ~32) == 0 && !gperf_case_strcmp (str, s))
  ------------------
  |  Branch (242:15): [True: 1.67k, False: 406]
  |  Branch (242:20): [True: 1.26k, False: 402]
  |  Branch (242:78): [True: 219, False: 1.05k]
  ------------------
  243|    219|            return &wordlist[key];
  244|  2.07k|        }
  245|  3.41k|    }
  246|  4.10k|  return 0;
  247|  4.32k|}
ip-protocol-list.c:hash_ip_protocol_name:
   99|  3.41k|{
  100|  3.41k|  static const unsigned char asso_values[] =
  101|  3.41k|    {
  102|  3.41k|      77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
  103|  3.41k|      77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
  104|  3.41k|      77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
  105|  3.41k|      77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
  106|  3.41k|      77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
  107|  3.41k|      77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
  108|  3.41k|      77, 77, 77, 77, 77,  5,  0,  5,  5, 35,
  109|  3.41k|      25, 10,  5,  0, 77, 77, 45,  0,  0, 20,
  110|  3.41k|       0, 77,  5,  0, 25, 10, 35, 10, 77, 77,
  111|  3.41k|      77, 77, 77, 77, 77, 77, 77,  5,  0,  5,
  112|  3.41k|       5, 35, 25, 10,  5,  0, 77, 77, 45,  0,
  113|  3.41k|       0, 20,  0, 77,  5,  0, 25, 10, 35, 10,
  114|  3.41k|      77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
  115|  3.41k|      77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
  116|  3.41k|      77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
  117|  3.41k|      77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
  118|  3.41k|      77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
  119|  3.41k|      77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
  120|  3.41k|      77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
  121|  3.41k|      77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
  122|  3.41k|      77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
  123|  3.41k|      77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
  124|  3.41k|      77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
  125|  3.41k|      77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
  126|  3.41k|      77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
  127|  3.41k|      77, 77, 77, 77, 77, 77
  128|  3.41k|    };
  129|  3.41k|  register unsigned int hval = len;
  130|       |
  131|  3.41k|  switch (hval)
  132|  3.41k|    {
  133|  1.10k|      default:
  ------------------
  |  Branch (133:7): [True: 1.10k, False: 2.31k]
  ------------------
  134|  1.10k|        hval += asso_values[(unsigned char)str[2]];
  135|       |      /*FALLTHROUGH*/
  136|  3.41k|      case 2:
  ------------------
  |  Branch (136:7): [True: 2.31k, False: 1.10k]
  ------------------
  137|  3.41k|        hval += asso_values[(unsigned char)str[1]];
  138|       |      /*FALLTHROUGH*/
  139|  3.41k|      case 1:
  ------------------
  |  Branch (139:7): [True: 0, False: 3.41k]
  ------------------
  140|  3.41k|        hval += asso_values[(unsigned char)str[0]];
  141|  3.41k|        break;
  142|  3.41k|    }
  143|  3.41k|  return hval;
  144|  3.41k|}
ip-protocol-list.c:gperf_case_strcmp:
   78|  1.26k|{
   79|  1.26k|  for (;;)
   80|  3.64k|    {
   81|  3.64k|      unsigned char c1 = gperf_downcase[(unsigned char)*s1++];
   82|  3.64k|      unsigned char c2 = gperf_downcase[(unsigned char)*s2++];
   83|  3.64k|      if (c1 != 0 && c1 == c2)
  ------------------
  |  Branch (83:11): [True: 3.42k, False: 219]
  |  Branch (83:22): [True: 2.37k, False: 1.05k]
  ------------------
   84|  2.37k|        continue;
   85|  1.26k|      return (int)c1 - (int)c2;
   86|  3.64k|    }
   87|  1.26k|}

