| 
Semantic version v2.0 parser and render written in ANSI C with zero dependencies.
Features
    * Standard compliant (otherwise, open an issue)
    * Version metadata parsing
    * Version prerelease parsing
    * Version comparison helpers
    * Supports comparison operators
    * Version render
    * Version bump
    * Version sanitizer
    * 100% test coverage
    * No regexp (ANSI C doesn't support it)
    * Numeric conversion for sorting/filtering
Usage
    Basic comparison:
    #include <stdio.h>
    #include <semver.h>
    char current[] = "1.5.10";
    char compare[] = "2.3.0";
    int
    main(int argc, char *argv[]) {
        semver_t current_version = {};
        semver_t compare_version = {};
        if (semver_parse(current, ¤t_version)
        || semver_parse(compare, &compare_version)) {
        fprintf(stderr,"Invalid semver string\n");
        return -1;
        }
        int resolution = semver_compare(compare_version, current_version);
        if (resolution == 0) {
        printf("Versions %s is equal to: %s\n", compare, current);
        }
        else if (resolution == -1) {
        printf("Version %s is lower than: %s\n", compare, current);
        }
        else {
        printf("Version %s is higher than: %s\n", compare, current);
        }
        // Free allocated memory when we're done
        semver_free(¤t_version);
        semver_free(&compare_version);
        return 0;
    }
    Satisfies version:
    #include <stdio.h>
    #include <semver.h>
    semver_t current = {};
    semver_t compare = {};
    int
    main(int argc, char *argv[]) {
        semver_parse("1.3.10", ¤t);
        semver_parse("1.5.2", &compare);
        // Use caret operator for the comparison
        char operator[] = "^";
        if (semver_satisfies(current, compare, operator)) {
        printf("Version %s can be satisfied by %s", "1.3.10", "1.5.2");
        }
        // Free allocated memory when we're done
        semver_free(¤t);
        semver_free(&compare);
        return 0;
    }
Installation
    Copy semver.h and semver.c to you source code tree.
API
---
struct semver_t { int major, int minor, int patch,
                  char * prerelease, char * metadata }
    semver base struct.
semver_parse(const char *str, semver_t *ver) => int
    Parses a string as semver expression.
    Returns:
        -1 - In case of invalid semver or parsing error.
        0 - All was fine!
semver_compare(semver_t a, semver_t b) => int
    Compare versions a with b.
    Returns:
        -1 in case of lower version.
        0 in case of equal versions.
        1 in case of higher version.
semver_satisfies(semver_t a, semver_t b, char *operator) => int
    Checks if both versions can be satisfied based on the given comparison
    operator.
    Allowed operators:
        = - Equality
        >= - Higher or equal to
        <= - Lower or equal to
        < - Lower than
        > - Higher than
        ^ - Caret operator comparison (more info)
        ~ - Tilde operator comparison (more info)
    Returns:
        1 - Can be satisfied
        0 - Cannot be satisfied
semver_satisfies_caret(semver_t a, semver_t b) => int
    Checks if version x can be satisfied by y performing a comparison with
    caret operator.
    See: https://docs.npmjs.com/misc/semver#caret-ranges-1-2-3-0-2-5-0-0-4
    Returns:
        1 - Can be satisfied
        0 - Cannot be satisfied
semver_satisfies_patch(semver_t a, semver_t b) => int
    Checks if version x can be satisfied by y performing a comparison with
    tilde operator.
    See: https://docs.npmjs.com/misc/semver#tilde-ranges-1-2-3-1-2-1
    Returns:
        1 - Can be satisfied
        0 - Cannot be satisfied
semver_eq(semver_t a, semver_t b) => int
    Equality comparison.
semver_ne(semver_t a, semver_t b) => int
    Non equal comparison.
semver_gt(semver_t a, semver_t b) => int
    Greater than comparison.
semver_lt(semver_t a, semver_t b) => int
    Lower than comparison.
semver_gte(semver_t a, semver_t b) => int
    Greater than or equal comparison.
semver_lte(semver_t a, semver_t b) => int
    Lower than or equal comparison.
semver_render(semver_t *v, char *dest) => void
    Render as string.
semver_numeric(semver_t *v) => int
    Render as numeric value. Useful for ordering and filtering.
semver_bump(semver_t *a) => void
    Bump major version.
semver_bump_minor(semver_t *a) => void
    Bump minor version.
semver_bump_patch(semver_t *a) => void
    Bump patch version.
semver_free(semver_t *a) => void
    Helper to free allocated memory from heap.
semver_is_valid(char *str) => int
    Checks if the given string is a valid semver expression.
semver_clean(char *str) => int
    Removes invalid semver characters in a given string.
License
    MIT - Tomas Aparicio
 |