File: keyval.c

package info (click to toggle)
libconfuse 3.3-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,192 kB
  • sloc: ansic: 5,532; lex: 451; xml: 439; makefile: 213; sh: 39
file content (91 lines) | stat: -rw-r--r-- 1,922 bytes parent folder | download | duplicates (3)
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
85
86
87
88
89
90
91
/* Test key=value pairs, e.g. env vars. a program should set to children */

#include "config.h"
#include <string.h>
#include <stdlib.h>
#include "check_confuse.h"

static void check_byname(cfg_t *cfg, const char *key, const char *val)
{
	char *value;

	printf("Checking for key:%s, expected value %s\n", key, val);

	value = cfg_getstr(cfg, key);
	printf("Found value %s\n", value);

	fail_unless(value != NULL);
	fail_unless(!strcmp(value, val));
}

static void check_keyval(cfg_t *cfg, unsigned int index, const char *key, const char *val)
{
	cfg_opt_t *opt;
	int rc;

	printf("Checking index %u for key:%s val:%s\n", index, key, val);

	opt = cfg_getnopt(cfg, index);
	fail_unless(opt != NULL);

	printf("Found key:%s val:%s\n", cfg_opt_name(opt), cfg_opt_getstr(opt));

	rc =strcmp(cfg_opt_name(opt), key);
	fail_unless(rc == 0);

	rc =strcmp(cfg_opt_getstr(opt), val);
	fail_unless(rc == 0);
}

int main(void)
{
	cfg_opt_t opts[] = {
		CFG_SEC("env", NULL, CFGF_KEYSTRVAL),
		CFG_END()
	};
	unsigned int num;
	cfg_t *cfg, *sec;
	cfg_opt_t *opt;
	char *key;
	int rc;

	cfg = cfg_init(opts, CFGF_NONE);
	fail_unless(cfg != NULL);

	rc = cfg_parse_buf(cfg, "env {\n"
			   "	foo=bar\n"
			   "	bar=for"
			   "	baz=qux\n"
			   "	bar=xyzzy\n" /* Should replace previous 'bar' */
			   "}");
	fail_unless(rc == CFG_SUCCESS);

	sec = cfg_getsec(cfg, "env");
	fail_unless(sec != NULL);

	/* Fuzz internals a bit, check for non-existing key */
	cfg_getstr(sec, "some-key-not-in-the-config-file");

	num = cfg_num(sec);
	fail_unless(num == 3);	/* { foo, bar, baz } */

	check_keyval(sec, 0, "foo", "bar");
	check_keyval(sec, 1, "bar", "xyzzy");
	check_keyval(sec, 2, "baz", "qux");

	check_byname(sec, "foo", "bar");
	check_byname(sec, "baz", "qux");
	check_byname(sec, "bar", "xyzzy");

	printf("PASS\n");
	cfg_free(cfg);

	return 0;
}

/**
 * Local Variables:
 *  indent-tabs-mode: t
 *  c-file-style: "linux"
 * End:
 */