1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
/* See LICENSE file for copyright and license details. */
#include "libenv.h"
#include <assert.h> /* TODO improve output */
#include <stdio.h>
#define ELEMSOF(A) (sizeof(A) / sizeof(*(A)))
static const char *class_names[] = {
"LIBENV_END",
"display",
"display-config",
"desktop",
"terminal-caps",
"local-terminal",
"locale",
"timezone",
"session",
"theme-config",
"theme-plugin",
"internet",
"audio",
"user",
"applications",
"preferences",
"system-paths",
"user-paths",
"pwd",
"exec",
"path",
"remote-unsafe",
"remote-safe",
"login-unsafe",
"login-safe",
"su-unsafe",
"su-safe"
};
int
main(void)
{
const struct libenv_variable *vars;
size_t nclasswords1 = 0, nclasswords2 = 1, nclasswords;
size_t count1 = 0, count2 = 1, count;
size_t i, j;
assert(vars = libenv_get_complete_list(NULL, NULL));
assert(vars == libenv_get_complete_list(&nclasswords1, NULL));
assert(vars == libenv_get_complete_list(NULL, &count1));
assert(vars == libenv_get_complete_list(&nclasswords2, &count2));
assert(vars == libenv_get_complete_list(&nclasswords, &count));
assert(nclasswords1 == nclasswords2);
assert(nclasswords1 == nclasswords);
assert(count1 == count2);
assert(count1 == count);
assert(!vars[count].name);
assert(!vars[count].classes);
assert(nclasswords == (ELEMSOF(class_names) + 63) / 64);
for (i = 0; i < count; i++) {
const char *prefix = " ";
assert(vars[i].name);
assert(*vars[i].name);
assert(vars[i].classes);
assert(!(vars[i].classes[0] & 1)); /* LIBENV_END */
printf("%s:", vars[i].name);
for (j = 0; j < ELEMSOF(class_names); j++) {
if ((vars[i].classes[j / 64] >> (j % 64)) & 1) {
printf("%s%s", prefix, class_names[j]);
prefix = ", ";
}
}
printf("\n");
}
return 0;
}
|