Parse semver major.minor.patch into array. Returns number of parts parsed. */
| 817 | |
| 818 | /* Parse semver major.minor.patch into array. Returns number of parts parsed. */ |
| 819 | static int parse_semver(const char *v, int out[SEMVER_PARTS]) { |
| 820 | out[0] = out[CLI_IDX_1] = out[CLI_IDX_2] = 0; |
| 821 | /* Skip v prefix */ |
| 822 | if (*v == 'v' || *v == 'V') { |
| 823 | v++; |
| 824 | } |
| 825 | |
| 826 | int count = 0; |
| 827 | while (*v && count < SEMVER_PARTS) { |
| 828 | if (*v == '-') { |
| 829 | break; /* stop at pre-release suffix */ |
| 830 | } |
| 831 | char *endptr; |
| 832 | long val = strtol(v, &endptr, CLI_STRTOL_BASE); |
| 833 | out[count++] = (int)val; |
| 834 | if (*endptr == '.') { |
| 835 | v = endptr + CLI_SKIP_ONE; |
| 836 | } else { |
| 837 | break; |
| 838 | } |
| 839 | } |
| 840 | return count; |
| 841 | } |
| 842 | |
| 843 | static bool has_prerelease(const char *v) { |
| 844 | if (*v == 'v' || *v == 'V') { |
no outgoing calls
no test coverage detected