Annotation of embedaddon/confuse/tests/setopt_ptr.c, revision 1.1.1.1
1.1 misho 1: #include "check_confuse.h"
2: #include <stdio.h>
3: #include <stdlib.h>
4:
5: static int ptr_count;
6:
7: static int parse_ptr(cfg_t *cfg, cfg_opt_t *opt,
8: const char *value, void *result)
9: {
10: int *ptr = malloc(sizeof(int));
11: if (!ptr)
12: return -1;
13:
14: *ptr = atoi(value);
15: *(void **)result = ptr;
16:
17: fprintf(stderr, "make ptr %p (value '%s')\n", ptr, value);
18: ptr_count++;
19:
20: return 0;
21: }
22:
23: static void free_ptr(void *ptr)
24: {
25: ptr_count--;
26: fprintf(stderr, "free ptr %p\n", ptr);
27:
28: free(ptr);
29: }
30:
31: int main(void)
32: {
33: cfg_opt_t opts[] = {
34: CFG_PTR_CB("ptr", "1", CFGF_NONE, parse_ptr, free_ptr),
35: CFG_END()
36: };
37:
38: cfg_t *cfg = cfg_init(opts, 0);
39: fail_unless(cfg_setopt(cfg, cfg_getopt(cfg, "ptr"), "2"));
40: fail_unless(cfg_setopt(cfg, cfg_getopt(cfg, "ptr"), "3"));
41: char *ptr4[] = { "4" };
42: fail_unless(cfg_setmulti(cfg, "ptr", 1, ptr4) == CFG_SUCCESS);
43: char *ptr5[] = { "5" };
44: fail_unless(cfg_setmulti(cfg, "ptr", 1, ptr5) == CFG_SUCCESS);
45: fail_unless(cfg_parse_buf(cfg, "ptr = 6") == CFG_SUCCESS);
46: fail_unless(cfg_parse_buf(cfg, "ptr = 7") == CFG_SUCCESS);
47: cfg_free(cfg);
48:
49: /* Is malloc/free of ptrs balanced? */
50: fail_unless(ptr_count == 0);
51:
52: return 0;
53: }
54:
55: /**
56: * Local Variables:
57: * indent-tabs-mode: t
58: * c-file-style: "linux"
59: * End:
60: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>