From 0d768672de70e2db323bf8faa1948fac08b97d97 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Wed, 31 Mar 2021 14:36:55 +0100 Subject: [PATCH] Implement getting OS version from BeOS and Haiku. --- setter/src/beos/os.c | 52 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/setter/src/beos/os.c b/setter/src/beos/os.c index f2bc711..51c4c73 100644 --- a/setter/src/beos/os.c +++ b/setter/src/beos/os.c @@ -22,9 +22,59 @@ Aaru Data Preservation Suite Copyright (C) 2011-2021 Natalia Portillo *****************************************************************************/ +// BeOS R3: BeOS, release 1, version 9 +// BeOS R4.5.2: BeOS, release 4.5, version 1000009 +// Haiku: Haiku, release 1, version hrevXXXXXX+ + +#include +#include +#include + #include "../include/defs.h" +#include "../log.h" void GetOsInfo() { - // TODO + struct utsname buf; + int ret; + char version[_SYS_NAMELEN]; + char* version_date; + + memset(version, 0, _SYS_NAMELEN); + + ret = uname(&buf); + + if(ret) + { + log_write("Error %d retrieving OS information.\n", errno); + return; + } + + if(strncmp(buf.sysname, "BeOS", 4) == 0) + { + if(strncmp(buf.release, "1", 1) == 0) + { + if(strncmp(buf.version, "9", 1) == 0) log_write("Running under BeOS R3\n"); + else + log_write("Running under BeOS DR%s\n", buf.version); + } + else + log_write("Running under BeOS R%s\n", buf.release); + } + else if(strncmp(buf.sysname, "Haiku", 5) == 0) + { + strncpy(version, buf.version, _SYS_NAMELEN); + version_date = strchr(version, '+'); + *version_date = '\0'; + + log_write("Running under Haiku %s\n", buf.version); + } + else + { + log_write("OS information:\n"); + log_write("\tOS name: %s\n", buf.sysname); + log_write("\tRelease: %s\n", buf.release); + log_write("\tVersion: %s\n", buf.version); + log_write("\tMachine: %s\n", buf.machine); + } }