Add versionToString function

This commit is contained in:
Nathan Fisher 2024-02-10 01:50:01 -05:00
parent 7d5622a714
commit 9d72c50f34

View file

@ -1,4 +1,8 @@
#include "semver.h"
#include "epoch.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
u128 u128FromVersion(Version *self) {
u128 out = 0;
@ -28,8 +32,6 @@ u128 u128FromVersion(Version *self) {
build = (uint64_t)self->vk_data.extended.build << 16;
out = (u128)(major | minor | patch | build) << 64;
break;
default:
break;
}
switch (self->pr_tag) {
case Alpha:
@ -55,8 +57,6 @@ u128 u128FromVersion(Version *self) {
case PRNone:
out |= ((u128)0100000 << 64);
break;
default:
break;
}
return out;
}
@ -78,3 +78,90 @@ Comparison compareVersion(Version *self, Version *other) {
return CompNone;
}
char *archToString(Arch self) {
switch (self) {
case any: return "any";
case arm: return "arm";
case arm64: return "aarch64";
case loongson: return "loongson";
case mips32: return "mips32";
case mips64: return "mips64";
case powerepc: return "ppc";
case powerpc64: return "ppc64";
case riscv64: return "riscv64";
case s390x: return "s390x";
case sparc: return "sparc";
case sparc64: return "sparc64";
case x86: return "x86";
case x86_64: return "x86_64";
}
return NULL;
}
char *versionToString(Version *self) {
char *buf, *temp;
buf = calloc(75, sizeof(char));
if (buf == NULL) return NULL;
temp = calloc(50, sizeof(char));
if (temp == NULL) {
free(buf);
return NULL;
}
switch (self->vk_tag) {
case Simple:
snprintf(buf, 6, "%d", self->vk_data.simple.major);
break;
case Rapid:
snprintf(buf, 13, "%d.%d", self->vk_data.rapid.major, self->vk_data.rapid.minor);
break;
case SemVer:
snprintf(
buf, 20, "%d.%d.%d",
self->vk_data.semver.major,
self->vk_data.semver.minor,
self->vk_data.semver.patch
);
break;
case Extended:
snprintf(
buf, 27, "%d.%d.%d.%d",
self->vk_data.extended.major,
self->vk_data.extended.minor,
self->vk_data.extended.patch,
self->vk_data.extended.build
);
break;
}
switch (self->pr_tag) {
case PRNone:
snprintf(temp, 9, "-%s", archToString(self->arch));
break;
case Alpha:
snprintf(temp, 25, "_alpha%d-%s", self->pr_data.alpha, archToString(self->arch));
break;
case Beta:
snprintf(temp, 25, "_beta%d-%s", self->pr_data.beta, archToString(self->arch));
break;
case ReleaseCandidate:
snprintf(temp, 25, "_rc%d-%s", self->pr_data.rc, archToString(self->arch));
break;
case GitRev:
snprintf(
temp, 30, "_git_%c%c%c%c%c%c%c.%li-%s",
self->pr_data.git->hash[0],
self->pr_data.git->hash[1],
self->pr_data.git->hash[2],
self->pr_data.git->hash[3],
self->pr_data.git->hash[4],
self->pr_data.git->hash[5],
self->pr_data.git->hash[6],
dateTimeGetTimestamp(&self->pr_data.git->dt),
archToString(self->arch)
);
}
strncat(buf, temp, 50);
free(temp);
return buf;
}