Skip to content

KvConfigParse

Description

Parse complete key-value config text into cfg.

Supported syntax:

  • key = value
  • key: value
  • blank lines
  • comments starting with # or ;
  • quoted values using ' or "

If the same key appears multiple times, the last parsed value replaces earlier ones.

Parameters

Name Direction Description
si in Input iterator.
cfg in,out Destination config map.

Success

Returns iterator advanced to end of parsed config.

Failure

Returns original iterator on first invalid line.

Usage example (Cross-references)

Usage examples (Cross-references)
    }
    
    StrIter KvConfigParse(StrIter si, KvConfig *cfg) {
        StrIter saved_si = si;
        bool             ok    = false;
    
        (void)KvConfigParse(input, &cfg);
        got = KvConfigGetPtr(&cfg, key);
        ok  = got && (StrCmp(got, expect) == 0);
        bool             result = true;
    
        (void)KvConfigParse(input, &cfg);
    
        result = result && KvConfigGetBool(&cfg, "flag", &v);
        Str              src    = StrInitFromZstr("a=1\r\nb=2\r\n", &alloc);
        StrIter          input  = StrIterFromStr(src);
        StrIter          si     = KvConfigParse(input, &cfg);
        i64              a      = 0;
        i64              b      = 0;
        bool             result = true;
    
        (void)KvConfigParse(input, &cfg);
        v = KvConfigGetPtr(&cfg, "k");
        Str     src    = StrInitFromZstr("a = 1 # c\nb = 2\n", &alloc);
        StrIter input  = StrIterFromStr(src);
        StrIter si     = KvConfigParse(input, &cfg);
        i64     a      = 0;
        i64     b      = 0;
        Str              src    = StrInitFromZstr("k = \"v\" junk\n", &alloc);
        StrIter          input  = StrIterFromStr(src);
        StrIter          si     = KvConfigParse(input, &cfg);
        bool             result = true;
        Str              src    = StrInitFromZstr("   k = v\n", &alloc);
        StrIter          input  = StrIterFromStr(src);
        StrIter          si     = KvConfigParse(input, &cfg);
        Str             *v      = NULL;
        bool             result = true;
        Str     src    = StrInitFromZstr("   \nk = v\n", &alloc);
        StrIter input  = StrIterFromStr(src);
        StrIter si     = KvConfigParse(input, &cfg);
        Str    *v      = NULL;
        bool    result = true;
        Str              src    = StrInitFromZstr("k = v\n   \n", &alloc);
        StrIter          input  = StrIterFromStr(src);
        StrIter          si     = KvConfigParse(input, &cfg);
        bool             result = true;
        );
        StrIter input  = StrIterFromStr(src);
        StrIter si     = KvConfigParse(input, &cfg);
        Str    *host   = KvConfigGetPtr(&cfg, "host");
        i64     port   = 0;
        );
        StrIter input  = StrIterFromStr(src);
        StrIter si     = KvConfigParse(input, &cfg);
        Str    *path   = KvConfigGetPtr(&cfg, "path");
        Str    *user   = KvConfigGetPtr(&cfg, "user");
        bool             result      = true;
    
        (void)KvConfigParse(input, &cfg);
    
        stored_host = KvConfigGetPtr(&cfg, "host");
        StrIter input    = StrIterFromStr(src);
    
        (void)KvConfigParse(input, &cfg);
    
        result = result && KvConfigGetI64(&cfg, "workers", &workers) && (workers == 16);
        );
        StrIter input   = StrIterFromStr(src);
        StrIter si      = KvConfigParse(input, &cfg);
        bool    enabled = false;
        bool    result  = true;
        bool    v      = false;
    
        (void)KvConfigParse(input, &cfg);
    
        Zstr trues[]  = {"t1", "t2", "t3", "t4"};
        bool    result = true;
    
        (void)KvConfigParse(input, &cfg);
    
        Str k_name    = StrInitFromZstr("name", &alloc);
        bool    result = true;
    
        (void)KvConfigParse(input, &cfg);
    
        a = KvConfigGetPtr(&cfg, "a");
        );
        StrIter input  = StrIterFromStr(src);
        StrIter si     = KvConfigParse(input, &cfg);
        Str    *host   = NULL;
        Str    *name   = NULL;
        StrIter  input = StrIterFromStr(text);
    
        (void)KvConfigParse(input, &cfg);
    
        StrDeinit(&text);
        StrIter input = StrIterFromStr(text);
    
        (void)KvConfigParse(input, &cfg);
    
        Str *got = KvConfigGetPtr(&cfg, "key");
        StrIter  input = StrIterFromStr(text);
    
        (void)KvConfigParse(input, &cfg);
    
        Str *got = KvConfigGetPtr(&cfg, "a-reasonably-long-config-key");
        StrIter  input = StrIterFromStr(text);
    
        (void)KvConfigParse(input, &cfg);
    
        Str *got = KvConfigGetPtr(&cfg, "k");
        StrIter  input = StrIterFromStr(text);
    
        (void)KvConfigParse(input, &cfg);
    
        bool ok = true;
Last updated on