Add parseGitRev function

This commit is contained in:
Nathan Fisher 2024-02-12 19:05:52 -05:00
parent 0606189269
commit e4fe1c5740

View file

@ -106,7 +106,7 @@ int parseArch(char *s) {
return -1; return -1;
} }
uint16_t parseNumNonZero(char *vp, long *out) { uint16_t parseU12NonZero(char *vp, long *out) {
long val; long val;
char *ep; char *ep;
@ -114,7 +114,7 @@ uint16_t parseNumNonZero(char *vp, long *out) {
*out = 0; *out = 0;
} }
val = strtol(vp, &ep, 10); val = strtol(vp, &ep, 10);
if (vp != ep && ep == NULL && val <= U12_MAX) { if (vp != ep && ep == NULL && val <= U12_MAX && val > 0) {
*out = val; *out = val;
} else { } else {
return 1; return 1;
@ -123,8 +123,27 @@ uint16_t parseNumNonZero(char *vp, long *out) {
} }
int parseGitRev(char *vp, GitRevision *git) { int parseGitRev(char *vp, GitRevision *git) {
// todo char hash[7];
return 1; int64_t ts;
char *hash_str, *ts_str, *ep;
int i;
hash_str = strtok(vp, ".");
if (hash_str == NULL) return 1;
if (strnlen(hash_str, 8) != 7) return 2;
for (i = 0; i < 7; i++) {
hash[i] = hash_str[i];
}
ts_str = strtok(NULL, ".");
if (ts_str == NULL) return 1;
ts = strtoll(ts_str, &ep, 10);
if (ts_str == ep || ep != NULL) return 3;
if (strtok(NULL, ".") != NULL) return 4;
for (i = 0; i < 7; i++) {
git->hash[i] = hash[i];
}
dateTimeFromTimestampParts(ts, 0, &git->dt);
return 0;
} }
int parsePreRelease(PreRelease *pr, char *s) { int parsePreRelease(PreRelease *pr, char *s) {
@ -139,17 +158,17 @@ int parsePreRelease(PreRelease *pr, char *s) {
if (strncasecmp(s, "alpha", 5) == 0) { if (strncasecmp(s, "alpha", 5) == 0) {
tag = Alpha; tag = Alpha;
vp = s + 5; vp = s + 5;
if (parseNumNonZero(vp, &val) != 0) if (parseU12NonZero(vp, &val) != 0)
return 1; return 1;
} else if (strncasecmp(s, "beta", 4) == 0) { } else if (strncasecmp(s, "beta", 4) == 0) {
tag = Beta; tag = Beta;
vp = s + 4; vp = s + 4;
if (parseNumNonZero(vp, &val) != 0) if (parseU12NonZero(vp, &val) != 0)
return 1; return 1;
} else if (strncasecmp(s, "rc", 2) == 0) { } else if (strncasecmp(s, "rc", 2) == 0) {
tag = ReleaseCandidate; tag = ReleaseCandidate;
vp = s + 2; vp = s + 2;
if (parseNumNonZero(vp, &val) != 0) if (parseU12NonZero(vp, &val) != 0)
return 1; return 1;
} else if (strncasecmp(s, "git_", 4) == 0) { } else if (strncasecmp(s, "git_", 4) == 0) {
tag = GitRev; tag = GitRev;