--- ui/xemu-os-utils-freebsd.c.orig 2026-07-19 21:17:55 UTC
+++ ui/xemu-os-utils-freebsd.c
@@ -0,0 +1,86 @@
+/*
+ * OS-specific Helpers
+ *
+ * Copyright (C) 2020-2021 Matt Borgerson
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "xemu-os-utils.h"
+#include
+#include
+#include
+#include
+#include
+
+static char *read_file_if_possible(const char *path)
+{
+ FILE *fd = fopen(path, "rb");
+ if (fd == NULL) {
+ return NULL;
+ }
+
+ fseek(fd, 0, SEEK_END);
+ size_t size = ftell(fd);
+ fseek(fd, 0, SEEK_SET);
+
+ char *buf = malloc(size+1);
+ int status = fread(buf, 1, size, fd);
+ if (status != size) {
+ free(buf);
+ return NULL;
+ }
+
+ buf[size] = '\x00';
+ return buf;
+}
+
+const char *xemu_get_os_info(void)
+{
+ static const char *os_info = NULL;
+ static int attempted_init = 0;
+
+ if (!attempted_init) {
+ char *os_release = NULL;
+
+ // Try to get the Linux distro "pretty name" from /etc/os-release
+ char *os_release_file = read_file_if_possible("/etc/os-release");
+ if (os_release_file != NULL) {
+ char *pretty_name = strstr(os_release_file, "PRETTY_NAME=\"");
+ if (pretty_name != NULL) {
+ pretty_name = pretty_name + 13;
+ char *pretty_name_end = strchr(pretty_name, '"');
+ if (pretty_name_end != NULL) {
+ size_t len = pretty_name_end-pretty_name;
+ os_release = malloc(len+1);
+ assert(os_release != NULL);
+ memcpy(os_release, pretty_name, len);
+ os_release[len] = '\x00';
+ }
+ }
+ free(os_release_file);
+ }
+
+ os_info = g_strdup_printf("%s",
+ os_release ? os_release : "Unknown Distro"
+ );
+ if (os_release) {
+ free(os_release);
+ }
+
+ attempted_init = 1;
+ }
+
+ return os_info;
+}