Annotation of embedaddon/confuse/tests/setopt_ptr.c, revision 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>