#include <stdio.h>
#include <stdlib.h> /* exit() */
#include <string.h> /* memset() */
#include <errno.h>
#include "x-uname.h"
int main(void) {
struct utsname buffer;
memset(&buffer, 0, sizeof(buffer));
errno = 0;
if (x_uname(&buffer) != 0)
{
perror("uname");
exit(EXIT_FAILURE);
}
printf("system name = %s\n", buffer.sysname);
printf("node name = %s\n", buffer.nodename);
printf("release = %s\n", buffer.release);
printf("version = %s\n", buffer.version);
printf("machine = %s\n", buffer.machine);
#ifdef _GNU_SOURCE
printf("domain name = %s\n", buffer.domainname);
#endif
/* 'utsname' does not distinguish Android from other Linux platforms. */
/* On Android, 'uname -o' returns 'Android' because it is hardcoded (#define HOST_OPERATING_SYSTEM) at build time. */
/* https://stackoverflow.com/questions/61711186/where-does-host-operating-system-in-uname-c-comes-from */
/* https://github.com/coreutils/gnulib/blob/master/m4/host-os.m4 */
/* https://www.maizure.org/projects/decoded-gnu-coreutils/uname.html */
/* The following will NOT work: */
#ifdef HOST_OPERATING_SYSTEM
printf("operating system = %s\n", HOST_OPERATING_SYSTEM);
#endif
/* The following should work: */
#if (MYOS == MYOS_ANDROID)
{
/* TODO: check system() syntax by running 'uname -o'. */
const char *HOST_OPERATING_SYSTEM = system("uname -o");
printf("operating system = %s\n", HOST_OPERATING_SYSTEM);
}
#endif
return EXIT_SUCCESS;
}