mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 07:38:48 +00:00
odin report: Add FreeBSD OS & RAM detection.
This commit is contained in:
+91
-38
@@ -22,6 +22,10 @@
|
|||||||
#include <sys/utsname.h>
|
#include <sys/utsname.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(GB_SYSTEM_FREEBSD)
|
||||||
|
#include <sys/sysctl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
NOTE(Jeroen): This prints the Windows product edition only, to be called from `print_platform_details`.
|
NOTE(Jeroen): This prints the Windows product edition only, to be called from `print_platform_details`.
|
||||||
*/
|
*/
|
||||||
@@ -217,7 +221,6 @@ void report_cpu_info() {
|
|||||||
Report the amount of installed RAM.
|
Report the amount of installed RAM.
|
||||||
*/
|
*/
|
||||||
void report_ram_info() {
|
void report_ram_info() {
|
||||||
|
|
||||||
gb_printf("\tRAM: ");
|
gb_printf("\tRAM: ");
|
||||||
|
|
||||||
#if defined(GB_SYSTEM_WINDOWS)
|
#if defined(GB_SYSTEM_WINDOWS)
|
||||||
@@ -255,41 +258,20 @@ void report_ram_info() {
|
|||||||
if (sysctl(sysctls, 2, &ram_amount, &val_size, NULL, 0) != -1) {
|
if (sysctl(sysctls, 2, &ram_amount, &val_size, NULL, 0) != -1) {
|
||||||
gb_printf("%lld MiB\n", ram_amount / gb_megabytes(1));
|
gb_printf("%lld MiB\n", ram_amount / gb_megabytes(1));
|
||||||
}
|
}
|
||||||
|
#elif defined(GB_SYSTEM_FREEBSD)
|
||||||
|
uint64_t ram_amount;
|
||||||
|
size_t val_size = sizeof(ram_amount);
|
||||||
|
|
||||||
|
int sysctls[] = { CTL_HW, HW_PHYSMEM };
|
||||||
|
if (sysctl(sysctls, 2, &ram_amount, &val_size, NULL, 0) != -1) {
|
||||||
|
gb_printf("%lu MiB\n", ram_amount / gb_megabytes(1));
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
gb_printf("Unknown.\n");
|
gb_printf("Unknown.\n");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
void report_os_info() {
|
||||||
NOTE(Jeroen): `odin report` prints some system information for easier bug reporting.
|
|
||||||
*/
|
|
||||||
void print_bug_report_help() {
|
|
||||||
gb_printf("Where to find more information and get into contact when you encounter a bug:\n\n");
|
|
||||||
gb_printf("\tWebsite: https://odin-lang.org\n");
|
|
||||||
gb_printf("\tGitHub: https://github.com/odin-lang/Odin/issues\n");
|
|
||||||
/*
|
|
||||||
Uncomment and update URL once we have a Discord vanity URL. For now people can get here from the site.
|
|
||||||
gb_printf("\tDiscord: https://discord.com/invite/sVBPHEv\n");
|
|
||||||
*/
|
|
||||||
gb_printf("\n\n");
|
|
||||||
|
|
||||||
gb_printf("Useful information to add to a bug report:\n\n");
|
|
||||||
|
|
||||||
gb_printf("\tOdin: %.*s", LIT(ODIN_VERSION));
|
|
||||||
|
|
||||||
#ifdef NIGHTLY
|
|
||||||
gb_printf("-nightly");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GIT_SHA
|
|
||||||
gb_printf(":%s", GIT_SHA);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
gb_printf("\n");
|
|
||||||
|
|
||||||
/*
|
|
||||||
Print OS information.
|
|
||||||
*/
|
|
||||||
gb_printf("\tOS: ");
|
gb_printf("\tOS: ");
|
||||||
|
|
||||||
#if defined(GB_SYSTEM_WINDOWS)
|
#if defined(GB_SYSTEM_WINDOWS)
|
||||||
@@ -483,7 +465,6 @@ void print_bug_report_help() {
|
|||||||
}
|
}
|
||||||
gb_printf("\n");
|
gb_printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined(GB_SYSTEM_LINUX)
|
#elif defined(GB_SYSTEM_LINUX)
|
||||||
/*
|
/*
|
||||||
Try to parse `/etc/os-release` for `PRETTY_NAME="Ubuntu 20.04.3 LTS`
|
Try to parse `/etc/os-release` for `PRETTY_NAME="Ubuntu 20.04.3 LTS`
|
||||||
@@ -542,10 +523,10 @@ void print_bug_report_help() {
|
|||||||
b32 found = 1;
|
b32 found = 1;
|
||||||
uint32_t major, minor;
|
uint32_t major, minor;
|
||||||
|
|
||||||
#define osx_version_buffer 100
|
#define freebsd_version_buffer 100
|
||||||
char buffer[osx_version_buffer];
|
char buffer[freebsd_version_buffer];
|
||||||
size_t buffer_size = osx_version_buffer - 1;
|
size_t buffer_size = freebsd_version_buffer - 1;
|
||||||
#undef osx_version_buffer
|
#undef freebsd_version_buffer
|
||||||
|
|
||||||
int sysctls[] = { CTL_KERN, KERN_OSRELEASE };
|
int sysctls[] = { CTL_KERN, KERN_OSRELEASE };
|
||||||
if (sysctl(sysctls, 2, buffer, &buffer_size, NULL, 0) == -1) {
|
if (sysctl(sysctls, 2, buffer, &buffer_size, NULL, 0) == -1) {
|
||||||
@@ -664,10 +645,82 @@ void print_bug_report_help() {
|
|||||||
} else {
|
} else {
|
||||||
gb_printf("OpenBSD: Unknown\n");
|
gb_printf("OpenBSD: Unknown\n");
|
||||||
}
|
}
|
||||||
#else
|
#elif defined(GB_SYSTEM_FREEBSD)
|
||||||
gb_printf("Unknown\n");
|
#define freebsd_version_buffer 129
|
||||||
|
char buffer[freebsd_version_buffer];
|
||||||
|
size_t buffer_size = freebsd_version_buffer - 1;
|
||||||
|
#undef freebsd_version_buffer
|
||||||
|
|
||||||
|
int sysctls[] = { CTL_KERN, KERN_VERSION };
|
||||||
|
if (sysctl(sysctls, 2, buffer, &buffer_size, NULL, 0) == -1) {
|
||||||
|
gb_printf("FreeBSD: Unknown\n");
|
||||||
|
} else {
|
||||||
|
// KERN_VERSION can end in a \n, replace it with a \0
|
||||||
|
for (int i = 0; i < buffer_size; i += 1) {
|
||||||
|
if (buffer[i] == '\n') buffer[i] = 0;
|
||||||
|
}
|
||||||
|
gb_printf("%s", &buffer[0]);
|
||||||
|
|
||||||
|
// Retrieve kernel revision using `sysctl`, e.g. 199506
|
||||||
|
sysctls[1] = KERN_OSREV;
|
||||||
|
uint64_t revision;
|
||||||
|
size_t revision_size = sizeof(revision);
|
||||||
|
|
||||||
|
if (sysctl(sysctls, 2, &revision, &revision_size, NULL, 0) == -1) {
|
||||||
|
gb_printf("\n");
|
||||||
|
} else {
|
||||||
|
gb_printf(", revision %ld\n", revision);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (found) {
|
||||||
|
// gb_printf("FreeBSD ")
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // Retrieve kernel revision using `sysctl`, e.g. 199506
|
||||||
|
// mib = []i32{sys.CTL_KERN, sys.KERN_OSREV}
|
||||||
|
// revision: int
|
||||||
|
// if !sys.sysctl(mib, &revision) {
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// os_version.patch = revision
|
||||||
|
|
||||||
|
// strings.write_string(&b, ", revision ")
|
||||||
|
// strings.write_int(&b, revision)
|
||||||
|
#else
|
||||||
|
gb_printf("Unknown");
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE(Jeroen): `odin report` prints some system information for easier bug reporting.
|
||||||
|
void print_bug_report_help() {
|
||||||
|
gb_printf("Where to find more information and get into contact when you encounter a bug:\n\n");
|
||||||
|
gb_printf("\tWebsite: https://odin-lang.org\n");
|
||||||
|
gb_printf("\tGitHub: https://github.com/odin-lang/Odin/issues\n");
|
||||||
|
/*
|
||||||
|
Uncomment and update URL once we have a Discord vanity URL. For now people can get here from the site.
|
||||||
|
gb_printf("\tDiscord: https://discord.com/invite/sVBPHEv\n");
|
||||||
|
*/
|
||||||
|
gb_printf("\n\n");
|
||||||
|
|
||||||
|
gb_printf("Useful information to add to a bug report:\n\n");
|
||||||
|
|
||||||
|
gb_printf("\tOdin: %.*s", LIT(ODIN_VERSION));
|
||||||
|
|
||||||
|
#ifdef NIGHTLY
|
||||||
|
gb_printf("-nightly");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef GIT_SHA
|
||||||
|
gb_printf(":%s", GIT_SHA);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
gb_printf("\n");
|
||||||
|
|
||||||
|
/*
|
||||||
|
Print OS information.
|
||||||
|
*/
|
||||||
|
report_os_info();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Now print CPU info.
|
Now print CPU info.
|
||||||
|
|||||||
Reference in New Issue
Block a user