Coverage Report

Created: 2026-02-23 20:32

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/Users/alexjokela/projects/lattice/src/env_ops.c
Line
Count
Source
1
#include "env_ops.h"
2
#include <stdlib.h>
3
#include <string.h>
4
#include <stdio.h>
5
6
#ifndef __EMSCRIPTEN__
7
8
9
char *envvar_get(const char *name) {
9
9
    const char *val = getenv(name);
10
9
    if (!val) return NULL;
11
6
    return strdup(val);
12
9
}
13
14
6
bool envvar_set(const char *name, const char *value, char **err) {
15
6
    if (setenv(name, value, 1) != 0) {
16
0
        char buf[256];
17
0
        snprintf(buf, sizeof(buf), "envvar_set: failed to set '%s'", name);
18
0
        *err = strdup(buf);
19
0
        return false;
20
0
    }
21
6
    return true;
22
6
}
23
24
extern char **environ;
25
26
3
void envvar_keys(char ***out_keys, size_t *out_count) {
27
3
    size_t count = 0;
28
3
    if (environ) {
29
228
        for (char **e = environ; *e; e++)
30
225
            count++;
31
3
    }
32
33
3
    char **keys = malloc(count * sizeof(char *));
34
3
    if (!keys) {
35
0
        *out_keys = NULL;
36
0
        *out_count = 0;
37
0
        return;
38
0
    }
39
40
228
    for (size_t i = 0; i < count; i++) {
41
225
        const char *eq = strchr(environ[i], '=');
42
225
        if (eq) {
43
225
            size_t klen = (size_t)(eq - environ[i]);
44
225
            keys[i] = malloc(klen + 1);
45
225
            memcpy(keys[i], environ[i], klen);
46
225
            keys[i][klen] = '\0';
47
225
        } else {
48
0
            keys[i] = strdup(environ[i]);
49
0
        }
50
225
    }
51
52
3
    *out_keys = keys;
53
3
    *out_count = count;
54
3
}
55
56
#else /* __EMSCRIPTEN__ */
57
58
char *envvar_get(const char *name) {
59
    (void)name;
60
    return NULL;
61
}
62
63
bool envvar_set(const char *name, const char *value, char **err) {
64
    (void)name; (void)value;
65
    *err = strdup("env_set: not available in browser");
66
    return false;
67
}
68
69
void envvar_keys(char ***out_keys, size_t *out_count) {
70
    *out_keys = NULL;
71
    *out_count = 0;
72
}
73
74
#endif /* __EMSCRIPTEN__ */