mirror of
https://github.com/aaru-dps/fstester.git
synced 2025-12-16 19:24:39 +00:00
Add OS detection for Darwin.
This commit is contained in:
@@ -24,17 +24,23 @@ Copyright (C) 2011-2021 Natalia Portillo
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/utsname.h>
|
||||
|
||||
#include "../include/defs.h"
|
||||
#include "../log.h"
|
||||
|
||||
void DarwinGetOsInfo()
|
||||
{
|
||||
struct utsname buf;
|
||||
int ret;
|
||||
struct stat finder;
|
||||
struct stat finder;
|
||||
struct stat server;
|
||||
int macosx;
|
||||
int macosx_server;
|
||||
int major = 0, minor = 0, release = 0;
|
||||
char sysname[256];
|
||||
char sysversion[256];
|
||||
|
||||
ret = uname(&buf);
|
||||
|
||||
@@ -44,9 +50,232 @@ void DarwinGetOsInfo()
|
||||
return;
|
||||
}
|
||||
|
||||
// Darwin does not have Finder, Mac OS X does
|
||||
// TODO: Mac OS X Server 1.x
|
||||
memset(&finder, 0, sizeof(struct stat));
|
||||
ret = stat("/System/Library/CoreServices/Finder.app", &finder);
|
||||
macosx = ret == 0;
|
||||
|
||||
memset(&server, 0, sizeof(struct stat));
|
||||
ret = stat("/System/Library/CoreServices/ServerVersion.plist", &server);
|
||||
macosx_server = ret == 0;
|
||||
|
||||
memset(sysname, 0, 256);
|
||||
memset(sysversion, 0, 256);
|
||||
|
||||
memcpy(sysname, buf.sysname, strlen(buf.sysname));
|
||||
memcpy(sysversion, buf.release, strlen(buf.release));
|
||||
|
||||
if(macosx)
|
||||
{
|
||||
sscanf(buf.release, "%d.%d.%d", &major, &minor, &release);
|
||||
|
||||
memset(sysname, 0, 256);
|
||||
sprintf(sysname, "%s", macosx_server ? "Mac OS X Server" : "Mac OS X");
|
||||
|
||||
switch(major)
|
||||
{
|
||||
case 0:
|
||||
if(minor == 2)
|
||||
{
|
||||
memset(sysname, 0, 256);
|
||||
memset(sysversion, 0, 256);
|
||||
|
||||
sprintf(sysname, "Mac OS X Server");
|
||||
sprintf(sysversion, "1.0.1");
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case 1:
|
||||
switch(minor)
|
||||
{
|
||||
case 0:
|
||||
memset(sysversion, 0, 256);
|
||||
sprintf(sysversion, "Developer Preview 3");
|
||||
|
||||
break;
|
||||
case 1:
|
||||
memset(sysversion, 0, 256);
|
||||
sprintf(sysversion, "Developer Preview 4");
|
||||
|
||||
break;
|
||||
case 2:
|
||||
if(release == 1)
|
||||
{
|
||||
memset(sysversion, 0, 256);
|
||||
sprintf(sysversion, "Public Beta");
|
||||
}
|
||||
|
||||
break;
|
||||
case 3:
|
||||
if(release == 1)
|
||||
{
|
||||
memset(sysversion, 0, 256);
|
||||
sprintf(sysversion, "\"Cheetah\" 10.0");
|
||||
}
|
||||
|
||||
break;
|
||||
case 4:
|
||||
if(release == 1)
|
||||
{
|
||||
memset(sysversion, 0, 256);
|
||||
sprintf(sysversion, "\"Puma\" 10.1");
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case 5:
|
||||
memset(sysname, 0, 256);
|
||||
sprintf(sysname, "%s", macosx_server ? "Mac OS X Server \"Puma\"" : "Mac OS X \"Puma\"");
|
||||
memset(sysversion, 0, 256);
|
||||
sprintf(sysversion, "10.1.%d", minor);
|
||||
|
||||
break;
|
||||
case 6:
|
||||
memset(sysname, 0, 256);
|
||||
sprintf(sysname, "%s", macosx_server ? "Mac OS X Server \"Jaguar\"" : "Mac OS X \"Jaguar\"");
|
||||
memset(sysversion, 0, 256);
|
||||
if(minor > 0) sprintf(sysversion, "10.2.%d", minor);
|
||||
else
|
||||
sprintf(sysversion, "10.2");
|
||||
|
||||
break;
|
||||
case 7:
|
||||
memset(sysname, 0, 256);
|
||||
sprintf(sysname, "%s", macosx_server ? "Mac OS X Server \"Panther\"" : "Mac OS X \"Panther\"");
|
||||
memset(sysversion, 0, 256);
|
||||
if(minor > 0) sprintf(sysversion, "10.3.%d", minor);
|
||||
else
|
||||
sprintf(sysversion, "10.3");
|
||||
|
||||
break;
|
||||
case 8:
|
||||
memset(sysname, 0, 256);
|
||||
sprintf(sysname, "%s", macosx_server ? "Mac OS X Server \"Tiger\"" : "Mac OS X \"Tiger\"");
|
||||
memset(sysversion, 0, 256);
|
||||
if(minor > 0) sprintf(sysversion, "10.4.%d", minor);
|
||||
else
|
||||
sprintf(sysversion, "10.4");
|
||||
|
||||
break;
|
||||
case 9:
|
||||
memset(sysname, 0, 256);
|
||||
sprintf(sysname, "%s", macosx_server ? "Mac OS X Server \"Leopard\"" : "Mac OS X \"Leopard\"");
|
||||
memset(sysversion, 0, 256);
|
||||
if(minor > 0) sprintf(sysversion, "10.5.%d", minor);
|
||||
else
|
||||
sprintf(sysversion, "10.5");
|
||||
|
||||
break;
|
||||
case 10:
|
||||
memset(sysname, 0, 256);
|
||||
sprintf(
|
||||
sysname, "%s", macosx_server ? "Mac OS X Server \"Snow Leopard\"" : "Mac OS X \"Snow Leopard\"");
|
||||
memset(sysversion, 0, 256);
|
||||
if(minor > 0) sprintf(sysversion, "10.6.%d", minor);
|
||||
else
|
||||
sprintf(sysversion, "10.6");
|
||||
|
||||
break;
|
||||
case 11:
|
||||
memset(sysname, 0, 256);
|
||||
sprintf(sysname, "Mac OS X \"Lion\"");
|
||||
memset(sysversion, 0, 256);
|
||||
if(minor > 0) sprintf(sysversion, "10.7.%d", minor);
|
||||
else
|
||||
sprintf(sysversion, "10.7");
|
||||
|
||||
break;
|
||||
case 12:
|
||||
memset(sysname, 0, 256);
|
||||
sprintf(sysname, "OS X \"Mountain Lion\"");
|
||||
memset(sysversion, 0, 256);
|
||||
if(minor > 0) sprintf(sysversion, "10.8.%d", minor);
|
||||
else
|
||||
sprintf(sysversion, "10.8");
|
||||
|
||||
break;
|
||||
case 13:
|
||||
memset(sysname, 0, 256);
|
||||
sprintf(sysname, "OS X \"Mavericks\"");
|
||||
memset(sysversion, 0, 256);
|
||||
if(minor > 0) sprintf(sysversion, "10.9.%d", minor);
|
||||
else
|
||||
sprintf(sysversion, "10.9");
|
||||
|
||||
break;
|
||||
case 14:
|
||||
memset(sysname, 0, 256);
|
||||
sprintf(sysname, "OS X \"Yosemite\"");
|
||||
memset(sysversion, 0, 256);
|
||||
if(minor > 0) sprintf(sysversion, "10.10.%d", minor);
|
||||
else
|
||||
sprintf(sysversion, "10.10");
|
||||
|
||||
break;
|
||||
case 15:
|
||||
memset(sysname, 0, 256);
|
||||
sprintf(sysname, "OS X \"El Capitan\"");
|
||||
memset(sysversion, 0, 256);
|
||||
if(minor > 0) sprintf(sysversion, "10.11.%d", minor);
|
||||
else
|
||||
sprintf(sysversion, "10.11");
|
||||
|
||||
break;
|
||||
case 16:
|
||||
memset(sysname, 0, 256);
|
||||
sprintf(sysname, "macOS \"Sierra\"");
|
||||
memset(sysversion, 0, 256);
|
||||
if(minor > 0) sprintf(sysversion, "10.12.%d", minor);
|
||||
else
|
||||
sprintf(sysversion, "10.12");
|
||||
|
||||
break;
|
||||
case 17:
|
||||
memset(sysname, 0, 256);
|
||||
sprintf(sysname, "macOS \"High Sierra\"");
|
||||
memset(sysversion, 0, 256);
|
||||
if(minor > 0) sprintf(sysversion, "10.13.%d", minor);
|
||||
else
|
||||
sprintf(sysversion, "10.13");
|
||||
|
||||
break;
|
||||
case 18:
|
||||
memset(sysname, 0, 256);
|
||||
sprintf(sysname, "macOS \"Mojave\"");
|
||||
memset(sysversion, 0, 256);
|
||||
if(minor > 0) sprintf(sysversion, "10.14.%d", minor);
|
||||
else
|
||||
sprintf(sysversion, "10.14");
|
||||
|
||||
break;
|
||||
case 19:
|
||||
memset(sysname, 0, 256);
|
||||
sprintf(sysname, "macOS \"Catalina\"");
|
||||
memset(sysversion, 0, 256);
|
||||
if(minor > 0) sprintf(sysversion, "10.15.%d", minor);
|
||||
else
|
||||
sprintf(sysversion, "10.15");
|
||||
|
||||
break;
|
||||
case 20:
|
||||
memset(sysname, 0, 256);
|
||||
sprintf(sysname, "macOS \"Big Sur\"");
|
||||
memset(sysversion, 0, 256);
|
||||
if(minor > 0) sprintf(sysversion, "11.%d", minor);
|
||||
else
|
||||
sprintf(sysversion, "11");
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
log_write("\t%s %s\n", sysname, sysversion);
|
||||
log_write("\tKernel version: %s\n", buf.version);
|
||||
log_write("\tArchitecture: %s\n", buf.machine);
|
||||
}
|
||||
|
||||
@@ -22,15 +22,23 @@ Aaru Data Preservation Suite
|
||||
Copyright (C) 2011-2021 Natalia Portillo
|
||||
*****************************************************************************/
|
||||
|
||||
#if defined(__APPLE__) && defined(__MACH__)
|
||||
#include "../darwin/darwin.h"
|
||||
#else
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/utsname.h>
|
||||
|
||||
#include "../include/defs.h"
|
||||
#include "../log.h"
|
||||
#endif
|
||||
|
||||
#include "../include/defs.h"
|
||||
|
||||
void GetOsInfo()
|
||||
{
|
||||
#if defined(__APPLE__) && defined(__MACH__)
|
||||
DarwinGetOsInfo();
|
||||
#else
|
||||
struct utsname buf;
|
||||
int ret;
|
||||
|
||||
@@ -47,4 +55,5 @@ void GetOsInfo()
|
||||
log_write("\tRelease: %s\n", buf.release);
|
||||
log_write("\tVersion: %s\n", buf.version);
|
||||
log_write("\tMachine: %s\n", buf.machine);
|
||||
#endif
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user