]> wimlib.net Git - wimlib/blobdiff - src/win32_common.c
add_params: Embed inode table and sd_set directly
[wimlib] / src / win32_common.c
index 2610c59aace053457115e44ea67526bba37966da..668f96d8a57efea6fe27ee3fb421b18de3001daf 100644 (file)
@@ -27,6 +27,7 @@
 
 #include <shlwapi.h> /* for PathMatchSpecW() */
 #include <errno.h>
+#include <pthread.h>
 
 #include "win32_common.h"
 
@@ -619,8 +620,20 @@ HANDLE (WINAPI *win32func_FindFirstStreamW)(LPCWSTR lpFileName,
 BOOL (WINAPI *win32func_FindNextStreamW)(HANDLE hFindStream,
                                         LPVOID lpFindStreamData) = NULL;
 
+static OSVERSIONINFO windows_version_info = {
+       .dwOSVersionInfoSize = sizeof(OSVERSIONINFO),
+};
+
 static HMODULE hKernel32 = NULL;
 
+bool
+windows_version_is_at_least(unsigned major, unsigned minor)
+{
+       return windows_version_info.dwMajorVersion > major ||
+               (windows_version_info.dwMajorVersion == major &&
+                windows_version_info.dwMinorVersion >= minor);
+}
+
 /* Try to dynamically load some functions */
 void
 win32_global_init()
@@ -634,25 +647,21 @@ win32_global_init()
                        err = GetLastError();
                        WARNING("Can't load Kernel32.dll");
                        win32_error(err);
-                       return;
                }
        }
 
-       DEBUG("Looking for FindFirstStreamW");
-       win32func_FindFirstStreamW = (void*)GetProcAddress(hKernel32, "FindFirstStreamW");
-       if (!win32func_FindFirstStreamW) {
-               WARNING("Could not find function FindFirstStreamW() in Kernel32.dll!");
-               WARNING("Capturing alternate data streams will not be supported.");
-               return;
+       if (hKernel32) {
+               win32func_FindFirstStreamW = (void*)GetProcAddress(hKernel32,
+                                                                  "FindFirstStreamW");
+               if (win32func_FindFirstStreamW) {
+                       win32func_FindNextStreamW = (void*)GetProcAddress(hKernel32,
+                                                                         "FindNextStreamW");
+                       if (!win32func_FindNextStreamW)
+                               win32func_FindFirstStreamW = NULL;
+               }
        }
 
-       DEBUG("Looking for FindNextStreamW");
-       win32func_FindNextStreamW = (void*)GetProcAddress(hKernel32, "FindNextStreamW");
-       if (!win32func_FindNextStreamW) {
-               WARNING("Could not find function FindNextStreamW() in Kernel32.dll!");
-               WARNING("Capturing alternate data streams will not be supported.");
-               win32func_FindFirstStreamW = NULL;
-       }
+       GetVersionEx(&windows_version_info);
 }
 
 void