Port: Add utsname.h compat for mingw
authorMichael Jeanson <mjeanson@efficios.com>
Thu, 15 Sep 2016 20:52:05 +0000 (20:52 +0000)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 9 Jun 2017 20:58:15 +0000 (16:58 -0400)
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
include/Makefile.am
include/babeltrace/compat/utsname-internal.h [new file with mode: 0644]
tests/lib/test_ctf_writer.c

index f00544c01f9d89be0f2cf2dc419e6514ee6b47a4..0ffa35a16fec6910796d60bd8c143a45d3da48d7 100644 (file)
@@ -89,6 +89,7 @@ noinst_HEADERS = \
        babeltrace/compat/time-internal.h \
        babeltrace/compat/unistd-internal.h \
        babeltrace/compat/utc-internal.h \
+       babeltrace/compat/utsname-internal.h \
        babeltrace/compat/uuid-internal.h \
        babeltrace/compiler-internal.h \
        babeltrace/ctf-ir/attributes-internal.h \
diff --git a/include/babeltrace/compat/utsname-internal.h b/include/babeltrace/compat/utsname-internal.h
new file mode 100644 (file)
index 0000000..8ca4ea7
--- /dev/null
@@ -0,0 +1,111 @@
+
+#ifndef UTSNAME_H
+#define UTSNAME_H
+
+/*
+ * Copyright 2011 Martin T. Sandsmark <sandsmark@samfundet.no>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef __MINGW32__
+
+#include <winsock2.h>
+#include <windows.h>
+#include <stdio.h>
+
+#define UTSNAME_LENGTH 257
+struct utsname {
+       char sysname[UTSNAME_LENGTH];
+       char nodename[UTSNAME_LENGTH];
+       char release[UTSNAME_LENGTH];
+       char version[UTSNAME_LENGTH];
+       char machine[UTSNAME_LENGTH];
+};
+
+static inline
+int uname(struct utsname *name)
+{
+       OSVERSIONINFO versionInfo;
+       SYSTEM_INFO sysInfo;
+       int ret = 0;
+
+       /* Get Windows version info */
+       memset(&versionInfo, 0, sizeof(OSVERSIONINFO));
+       versionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+       GetVersionEx(&versionInfo);
+
+       /* Get hardware info */
+       ZeroMemory(&sysInfo, sizeof(SYSTEM_INFO));
+       GetSystemInfo(&sysInfo);
+
+       /* Fill the sysname */
+       strcpy(name->sysname, "Windows");
+
+       /* Fill the release */
+       snprintf(name->release, UTSNAME_LENGTH, "%lu",
+                       versionInfo.dwBuildNumber);
+
+       /* Fill the version */
+       snprintf(name->version, UTSNAME_LENGTH, "%lu.%lu",
+                       versionInfo.dwMajorVersion,
+                       versionInfo.dwMinorVersion);
+
+       /* Fill ithe nodename */
+       if (gethostname(name->nodename, UTSNAME_LENGTH) != 0) {
+               if (WSAGetLastError() == WSANOTINITIALISED) {
+                       /* WinSock not initialized */
+                       WSADATA WSAData;
+                       WSAStartup(MAKEWORD(1, 0), &WSAData);
+                       gethostname(name->nodename, UTSNAME_LENGTH);
+                       WSACleanup();
+               } else {
+                       ret = -1;
+                       goto end;
+               }
+       }
+
+       /* Fill the machine */
+       switch(sysInfo.wProcessorArchitecture) {
+       case PROCESSOR_ARCHITECTURE_AMD64:
+               strcpy(name->machine, "x86_64");
+               break;
+       case PROCESSOR_ARCHITECTURE_IA64:
+               strcpy(name->machine, "ia64");
+               break;
+       case PROCESSOR_ARCHITECTURE_INTEL:
+               strcpy(name->machine, "x86");
+               break;
+       case PROCESSOR_ARCHITECTURE_UNKNOWN:
+       default:
+               strcpy(name->machine, "unknown");
+       }
+
+end:
+       return ret;
+}
+#else /* __MINGW32__ */
+#include <sys/utsname.h>
+#endif /* __MINGW32__ */
+
+#endif //UTSNAME_H
index c849ca5eae71efda0200b7e93e4b92380137e2d3..a7a55b949db0ccb9b867ada31d23e2d4fd0c17a9 100644 (file)
@@ -35,7 +35,7 @@
 #include <unistd.h>
 #include <babeltrace/compat/stdlib-internal.h>
 #include <stdio.h>
-#include <sys/utsname.h>
+#include <babeltrace/compat/utsname-internal.h>
 #include <babeltrace/compat/limits-internal.h>
 #include <babeltrace/compat/stdio-internal.h>
 #include <string.h>
This page took 0.027967 seconds and 4 git commands to generate.