Skip to content
KvConfigGetPtr

KvConfigGetPtr

Description

Get stored value for key by internal reference.

Parameters

Name Direction Description
cfg in,out Parsed config.
key in Lookup key. Prefer Str *; Zstr accepted.

Success

Pointer to stored Str value. Do not deinitialize or mutate through ownership-sensitive APIs.

Failure

NULL if key does not exist.

Usage example (Cross-references)

Usage examples (Cross-references)
    
        (void)KvConfigParse(input, &cfg);
        got = KvConfigGetPtr(&cfg, key);
        ok  = got && (StrCmp(got, expect) == 0);
    
        (void)KvConfigParse(input, &cfg);
        v = KvConfigGetPtr(&cfg, "k");
    
        result = result && v && (StrLen(v) == 0);
        result = result && (StrIterIndex(&si) == StrIterLength(&si));
        result = result && (MapPairCount(&cfg) == 1);
        v      = KvConfigGetPtr(&cfg, "k");
        result = result && v && (StrCmp(v, "v") == 0);
        result = result && (StrIterIndex(&si) == StrIterLength(&si));
        result = result && (MapPairCount(&cfg) == 1);
        v      = KvConfigGetPtr(&cfg, "k");
        result = result && v && (StrCmp(v, "v") == 0);
        StrIter input  = StrIterFromStr(src);
        StrIter si     = KvConfigParse(input, &cfg);
        Str    *host   = KvConfigGetPtr(&cfg, "host");
        i64     port   = 0;
        bool    debug  = false;
        StrIter input  = StrIterFromStr(src);
        StrIter si     = KvConfigParse(input, &cfg);
        Str    *path   = KvConfigGetPtr(&cfg, "path");
        Str    *user   = KvConfigGetPtr(&cfg, "user");
        Str    *greet  = KvConfigGetPtr(&cfg, "greeting");
        StrIter si     = KvConfigParse(input, &cfg);
        Str    *path   = KvConfigGetPtr(&cfg, "path");
        Str    *user   = KvConfigGetPtr(&cfg, "user");
        Str    *greet  = KvConfigGetPtr(&cfg, "greeting");
        Str    *empty  = KvConfigGetPtr(&cfg, "empty");
        Str    *path   = KvConfigGetPtr(&cfg, "path");
        Str    *user   = KvConfigGetPtr(&cfg, "user");
        Str    *greet  = KvConfigGetPtr(&cfg, "greeting");
        Str    *empty  = KvConfigGetPtr(&cfg, "empty");
        bool    result = true;
        Str    *user   = KvConfigGetPtr(&cfg, "user");
        Str    *greet  = KvConfigGetPtr(&cfg, "greeting");
        Str    *empty  = KvConfigGetPtr(&cfg, "empty");
        bool    result = true;
        (void)KvConfigParse(input, &cfg);
    
        stored_host = KvConfigGetPtr(&cfg, "host");
        host_copy   = KvConfigGet(&cfg, "host");
        (void)KvConfigParse(input, &cfg);
    
        a = KvConfigGetPtr(&cfg, "a");
        b = KvConfigGetPtr(&cfg, "b");
        c = KvConfigGetPtr(&cfg, "c");
    
        a = KvConfigGetPtr(&cfg, "a");
        b = KvConfigGetPtr(&cfg, "b");
        c = KvConfigGetPtr(&cfg, "c");
        a = KvConfigGetPtr(&cfg, "a");
        b = KvConfigGetPtr(&cfg, "b");
        c = KvConfigGetPtr(&cfg, "c");
    
        result = result && a && (StrCmp(a, "value one") == 0);
        bool    result = true;
    
        host = KvConfigGetPtr(&cfg, "host");
        name = KvConfigGetPtr(&cfg, "name");
    
        host = KvConfigGetPtr(&cfg, "host");
        name = KvConfigGetPtr(&cfg, "name");
    
        result = result && (StrIterIndex(&si) == StrIterLength(&si));
        (void)KvConfigParse(input, &cfg);
    
        Str *got = KvConfigGetPtr(&cfg, "key");
        bool ok  = got && (StrCmp(got, "spaced-out-value-here") == 0);
        (void)KvConfigParse(input, &cfg);
    
        Str *got = KvConfigGetPtr(&cfg, "a-reasonably-long-config-key");
        bool ok  = got && (StrCmp(got, "v") == 0);
        (void)KvConfigParse(input, &cfg);
    
        Str *got = KvConfigGetPtr(&cfg, "k");
        bool ok  = got && (StrCmp(got, "a-reasonably-long-config-value") == 0);
        // Each KvConfigGetPtr with a Zstr key routes through kvconfig_get_ptr_zstr,
        // building and (at L351) freeing a temp lookup Str.
        Str *hit = KvConfigGetPtr(&cfg, "present-config-key");
        ok       = ok && (hit != NULL) && (StrCmp(hit, "value") == 0);
        // Misses also build + free a lookup; pile several on so a dropped L351
        // leaks multiple buffers.
        ok = ok && (KvConfigGetPtr(&cfg, "absent-config-key-0001") == NULL);
        ok = ok && (KvConfigGetPtr(&cfg, "absent-config-key-0002") == NULL);
        ok = ok && (KvConfigGetPtr(&cfg, "absent-config-key-0003") == NULL);
        // leaks multiple buffers.
        ok = ok && (KvConfigGetPtr(&cfg, "absent-config-key-0001") == NULL);
        ok = ok && (KvConfigGetPtr(&cfg, "absent-config-key-0002") == NULL);
        ok = ok && (KvConfigGetPtr(&cfg, "absent-config-key-0003") == NULL);
        ok = ok && (KvConfigGetPtr(&cfg, "absent-config-key-0001") == NULL);
        ok = ok && (KvConfigGetPtr(&cfg, "absent-config-key-0002") == NULL);
        ok = ok && (KvConfigGetPtr(&cfg, "absent-config-key-0003") == NULL);
    
        StrDeinit(&text);
Last updated on