forked from launchdarkly/c-server-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
semver.patch
85 lines (78 loc) · 2.48 KB
/
semver.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
diff --git a/semver.c b/semver.c
index 77a11ba..8cca674 100644
--- a/semver.c
+++ b/semver.c
@@ -187,12 +187,16 @@ semver_parse_version (const char *str, semver_t *ver) {
value = strtol(slice, &endptr, 10);
if (endptr != next && *endptr != '\0') return -1;
+ if (*slice == '0' && endptr - slice > 1) return -1;
+
switch (index) {
case 1: ver->major = value; break;
case 2: ver->minor = value; break;
case 3: ver->patch = value; break;
}
+ if (index == 3 && next) return -1;
+
/* Continue with the next slice */
if (next == NULL)
slice = NULL;
@@ -370,32 +374,11 @@ semver_lte (semver_t x, semver_t y) {
int
semver_satisfies_caret (semver_t x, semver_t y) {
- /* Major versions must always match. */
if (x.major == y.major) {
- /* If major version is 0, minor versions must match */
if (x.major == 0) {
- /* If minor version is 0, patch must match */
- if (x.minor == 0){
- return (x.minor == y.minor) && (x.patch == y.patch);
- }
- /* If minor version is not 0, patch must be >= */
- else if (x.minor == y.minor){
- return x.patch >= y.patch;
- }
- else{
- return 0;
- }
- }
- else if (x.minor > y.minor){
- return 1;
- }
- else if (x.minor == y.minor)
- {
- return x.patch >= y.patch;
- }
- else {
- return 0;
+ return x.minor >= y.minor;
}
+ return 1;
}
return 0;
}
@@ -519,9 +502,9 @@ concat_char (char * str, char * x, char * sep) {
void
semver_render (semver_t *x, char *dest) {
- concat_num(dest, x->major, NULL);
- concat_num(dest, x->minor, DELIMITER);
- concat_num(dest, x->patch, DELIMITER);
+ if (x->major) concat_num(dest, x->major, NULL);
+ if (x->minor) concat_num(dest, x->minor, DELIMITER);
+ if (x->patch) concat_num(dest, x->patch, DELIMITER);
if (x->prerelease) concat_char(dest, x->prerelease, PR_DELIMITER);
if (x->metadata) concat_char(dest, x->metadata, MT_DELIMITER);
}
@@ -625,8 +608,8 @@ semver_numeric (semver_t *x) {
memset(&buf, 0, SLICE_SIZE * 3);
if (x->major) concat_num(buf, x->major, NULL);
- if (x->major || x->minor) concat_num(buf, x->minor, NULL);
- if (x->major || x->minor || x->patch) concat_num(buf, x->patch, NULL);
+ if (x->minor) concat_num(buf, x->minor, NULL);
+ if (x->patch) concat_num(buf, x->patch, NULL);
num = parse_int(buf);
if(num == -1) return -1;
@@ -636,3 +619,4 @@ semver_numeric (semver_t *x) {
return num;
}
+