Parse semver major.minor.patch into array. Returns number of parts parsed. */
| 795 | |
| 796 | /* Parse semver major.minor.patch into array. Returns number of parts parsed. */ |
| 797 | static int parse_semver(const char *v, int out[SEMVER_PARTS]) { |
| 798 | out[0] = out[CLI_IDX_1] = out[CLI_IDX_2] = 0; |
| 799 | /* Skip v prefix */ |
| 800 | if (*v == 'v' || *v == 'V') { |
| 801 | v++; |
| 802 | } |
| 803 | |
| 804 | int count = 0; |
| 805 | while (*v && count < SEMVER_PARTS) { |
| 806 | if (*v == '-') { |
| 807 | break; /* stop at pre-release suffix */ |
| 808 | } |
| 809 | char *endptr; |
| 810 | long val = strtol(v, &endptr, CLI_STRTOL_BASE); |
| 811 | out[count++] = (int)val; |
| 812 | if (*endptr == '.') { |
| 813 | v = endptr + CLI_SKIP_ONE; |
| 814 | } else { |
| 815 | break; |
| 816 | } |
| 817 | } |
| 818 | return count; |
| 819 | } |
| 820 | |
| 821 | static bool has_prerelease(const char *v) { |
| 822 | if (*v == 'v' || *v == 'V') { |
no outgoing calls
no test coverage detected