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;
}
uint16_t parseNumNonZero(char *vp, long *out) {
uint16_t parseU12NonZero(char *vp, long *out) {
long val;
char *ep;
@ -114,7 +114,7 @@ uint16_t parseNumNonZero(char *vp, long *out) {
*out = 0;
}
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;
} else {
return 1;
@ -123,8 +123,27 @@ uint16_t parseNumNonZero(char *vp, long *out) {
}
int parseGitRev(char *vp, GitRevision *git) {
// todo
return 1;
char hash[7];
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) {
@ -139,17 +158,17 @@ int parsePreRelease(PreRelease *pr, char *s) {
if (strncasecmp(s, "alpha", 5) == 0) {
tag = Alpha;
vp = s + 5;
if (parseNumNonZero(vp, &val) != 0)
if (parseU12NonZero(vp, &val) != 0)
return 1;
} else if (strncasecmp(s, "beta", 4) == 0) {
tag = Beta;
vp = s + 4;
if (parseNumNonZero(vp, &val) != 0)
if (parseU12NonZero(vp, &val) != 0)
return 1;
} else if (strncasecmp(s, "rc", 2) == 0) {
tag = ReleaseCandidate;
vp = s + 2;
if (parseNumNonZero(vp, &val) != 0)
if (parseU12NonZero(vp, &val) != 0)
return 1;
} else if (strncasecmp(s, "git_", 4) == 0) {
tag = GitRev;