Skip to content
ArgParseDeinit

ArgParseDeinit

Description

Release the spec Vec. Safe on a fully-initialised parser; not safe on a zero-initialised one.

Success

Returns to the caller; the spec Vec backing *self is freed through its allocator. The rest of *self is left as-is and must not be used.

Failure

Function cannot fail. NULL self is a no-op.

Usage example (Cross-references)

Usage examples (Cross-references)
    // ---------------------------------------------------------------------------
    
    void ArgParseDeinit(ArgParse *self) {
        if (!self)
            return;
    
            ArgRun rc = ArgParseRun(&ap, argc, argv);
            ArgParseDeinit(&ap);
            if (rc != ARG_RUN_OK) {
                return rc == ARG_RUN_HELP ? 0 : 1;
    
            ArgRun rc = ArgParseRun(&ap, argc, argv);
            ArgParseDeinit(&ap);
            if (rc != ARG_RUN_OK) {
                return rc == ARG_RUN_HELP ? 0 : 1;
    
        bool ok = (rc == ARG_RUN_OK) && listen && ZstrCompare(listen, "0.0.0.0:8080") == 0;
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK) && listen && ZstrCompare(listen, "0.0.0.0:8080") == 0;
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK) && listen && ZstrCompare(listen, "127.0.0.1:9") == 0;
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK) && timeout == 30;
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK) && timeout == 5;
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK) && verbose == true;
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK) && verbose == false;
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK) && verbose == 3;
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK) && verbose == 3;
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK) && ZstrCompare(src, "a.txt") == 0 && ZstrCompare(dst, "b.txt") == 0;
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK) && ZstrCompare(src, "a.txt") == 0 && ZstrCompare(dst, "b.txt") == 0 && verbose == true;
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK) && n == 12345;
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK) && v == -42;
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK) && ratio > 2.4 && ratio < 2.6;
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK) && StrLen(&name) == 5 && StrBegin(&name)[0] == 'a' && StrBegin(&name)[4] == 'e';
        ArgParseDeinit(&p);
        StrDeinit(&name);
        DefaultAllocatorDeinit(&a);
    
        bool ok = (rc == ARG_RUN_ERROR) && listen == NULL;
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_ERROR);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_ERROR);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_ERROR) && n == 0;
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_ERROR) && v == 0;
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_ERROR);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        char  *argv[] = {(char *)"prog", (char *)"--enable", (char *)text};
        ArgRun rc     = ArgParseRun(&p, 3, argv);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return rc == ARG_RUN_OK;
        ArgRun rc     = ArgParseRun(&p, 3, argv);
        bool   ok     = (rc == ARG_RUN_ERROR) && (v == true);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 3, argv);
        bool   ok     = (rc == ARG_RUN_OK) && (n == 2);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        bool   ok     = (rc == ARG_RUN_OK) && (n == 4);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 4, argv);
        bool   ok     = (rc == ARG_RUN_OK) && (n == 3);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        bool   ok     = (rc == ARG_RUN_ERROR) && (listen == NULL);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        bool   ok     = (rc == ARG_RUN_ERROR) && (v == false);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        bool   ok     = (rc == ARG_RUN_ERROR) && (n == 0);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        bool   ok     = (rc == ARG_RUN_ERROR);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 3, argv);
        bool   ok     = (rc == ARG_RUN_OK) && (lo == -32768) && (hi == 32767);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        bool   ok     = (rc == ARG_RUN_ERROR) && (v == 5);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK) && ZstrCompare(file, "--unusual-name") == 0;
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        // --help should beat the missing-required check.
        bool ok = (rc == ARG_RUN_HELP);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = help_equals(&p, expected);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = help_equals(&p, expected);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = help_equals(&p, expected);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = help_equals(&p, expected);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = help_equals(&p, expected);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        }
        StrDeinit(&out);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a2);
        DefaultAllocatorDeinit(&a);
        char *argv[] = {(char *)"prog", (char *)"--n", (char *)text};
        *rc          = ArgParseRun(&p, 3, argv);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return true;
        char *argv[] = {(char *)"prog", (char *)"--n", (char *)text};
        *rc          = ArgParseRun(&p, 3, argv);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return true;
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        bool   ok     = (rc == ARG_RUN_OK) && (v == 200);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        bool   ok     = (rc == ARG_RUN_OK) && (v == 255);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        bool   ok     = (rc == ARG_RUN_OK) && (v == 65535);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        bool   ok     = (rc == ARG_RUN_ERROR) && (v == 9);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        bool   ok     = (rc == ARG_RUN_OK) && (v == 70000);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        bool   ok     = (rc == ARG_RUN_ERROR) && (v == 11);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        bool   ok     = (rc == ARG_RUN_OK) && (v == 5000000000ULL);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 3, argv);
        bool ok = (rc == ARG_RUN_OK) && (StrLen(&name) == 3) && (StrBegin(&name)[0] == 'b') && (StrBegin(&name)[2] == 'b');
        ArgParseDeinit(&p);
        StrDeinit(&name);
        DefaultAllocatorDeinit(&a);
        ArgRun rc     = ArgParseRun(&p, 3, argv);
        bool   ok     = (rc == ARG_RUN_OK) && s && (ZstrCompare(s, "carol") == 0);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        bool   ok     = (rc == ARG_RUN_OK) && (v == -5);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 3, argv);
        bool   ok     = (rc == ARG_RUN_ERROR) && (v == 7);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        bool   ok     = (rc == ARG_RUN_OK) && (v == -100000);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 3, argv);
        bool   ok     = (rc == ARG_RUN_ERROR) && (v == 13);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 2, argv);
        bool   ok     = (rc == ARG_RUN_OK) && (v > 2.4f) && (v < 2.6f);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 3, argv);
        bool   ok     = (rc == ARG_RUN_ERROR) && (v > 8.9f) && (v < 9.1f);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        bool ok   = got && str_contains(&help, "<LISTEN>");
        StrDeinit(&help);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        bool ok   = got && str_contains(&help, "<READ_ONLY>");
        StrDeinit(&help);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        bool ok = got && str_contains(&help, "<PORT>") && !str_contains(&help, "__PORT");
        StrDeinit(&help);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        bool ok   = got && str_contains(&help, "<VALUE>");
        StrDeinit(&help);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        bool ok   = got && str_contains(&help, "<IP6>");
        StrDeinit(&help);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        bool ok = got && str_contains(&help, "<GZIP>") && !str_contains(&help, "GzIP");
        StrDeinit(&help);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        bool ok   = got && str_contains(&help, "<ABC>");
        StrDeinit(&help);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        bool ok   = got && str_contains(&help, "<source>");
        StrDeinit(&help);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        bool ok   = got && str_contains(&help, "-l, --listen");
        StrDeinit(&help);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        bool ok = got && str_contains(&help, "  -l, --listen <LISTEN>");
        StrDeinit(&help);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        bool ok = got && str_contains(&help, "    --timeout <TIMEOUT>");
        StrDeinit(&help);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        bool ok = got && str_contains(&help, "-v, --verbose") && !str_contains(&help, "<VERBOSE>");
        StrDeinit(&help);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
                  str_contains(&help, "          AAA");
        StrDeinit(&help);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK) && listen && ZstrCompare(listen, "host:9") == 0;
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        // Mutant: find_short returns first spec (-a) -> aflag set instead.
        bool ok = (rc == ARG_RUN_OK) && (bflag == true) && (aflag == false);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_ERROR);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK) && (verbose == 2);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK) && (f == true) && (g == true);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK) && (f == true);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_ERROR) && (verbose == 2) && (listen == NULL);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        bool ok = (rc == ARG_RUN_OK) && (v == true);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
    
        // Unreachable on real code (LOG_FATAL above longjmps out).
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return true;
    
        bool ok = help_equals(&p, expected);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
            (rc == ARG_RUN_ERROR) && str_has(&out, "unexpected positional argument") && !str_has(&out, "internal error");
        StrDeinit(&out);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
                  !str_has(&out, "missing required positional");
        StrDeinit(&out);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        bool ok = (rc == ARG_RUN_ERROR) && str_has(&out, "flag name too long");
        StrDeinit(&out);
        ArgParseDeinit(&p);
        DefaultAllocatorDeinit(&a);
        return ok;
        ArgRun rc     = ArgParseRun(&p, 2, argv);
    
        ArgParseDeinit(&p);
    
        // With four registered specs (plus the auto --help spec) left_col is
Last updated on