]> git.sesse.net Git - vlc/blobdiff - bin/winvlc.c
Use var_InheritString for --decklink-video-connection.
[vlc] / bin / winvlc.c
index e752d080f21a5355d1ff8055121f138403190a13..b91cea1a791b845ab38f4853a35f2341a36465fe 100644 (file)
 #include <windows.h>
 
 #if !defined(UNDER_CE)
-#   define  _WIN32_IE 0x500
+# ifndef _WIN32_IE
+#   define  _WIN32_IE 0x501
+# endif
 #   include <shlobj.h>
 #   include <tlhelp32.h>
 #   include <wininet.h>
-static void check_crashdump();
+# ifndef _WIN64
+static void check_crashdump(void);
 LONG WINAPI vlc_exception_filter(struct _EXCEPTION_POINTERS *lpExceptionInfo);
+# endif
+#define HeapEnableTerminationOnCorruption (HEAP_INFORMATION_CLASS)1
 #endif
 
 #ifndef UNDER_CE
@@ -113,17 +118,57 @@ int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
 #endif
                     int nCmdShow )
 {
-    int argc, ret;
+    int argc;
 #ifndef UNDER_CE
+    HeapSetInformation(NULL, HeapEnableTerminationOnCorruption, NULL, 0);
+
+    HINSTANCE h_Kernel32 = LoadLibraryW(L"kernel32.dll");
+    if(h_Kernel32)
+    {
+        BOOL (WINAPI * mySetProcessDEPPolicy)( DWORD dwFlags);
+# define PROCESS_DEP_ENABLE 1
+
+        mySetProcessDEPPolicy = (BOOL WINAPI (*)(DWORD))
+                            GetProcAddress(h_Kernel32, "SetProcessDEPPolicy");
+        if(mySetProcessDEPPolicy)
+            mySetProcessDEPPolicy(PROCESS_DEP_ENABLE);
+        FreeLibrary(h_Kernel32);
+    }
+
     wchar_t **wargv = CommandLineToArgvW (GetCommandLine (), &argc);
     if (wargv == NULL)
         return 1;
 
     char *argv[argc + 1];
-    for (int i = 0; i < argc; i++)
-        argv[i] = FromWide (wargv[i]);
+    BOOL crash_handling = TRUE;
+    int j = 0;
+
+    argv[j++] = FromWide( L"--no-ignore-config" );
+    for (int i = 1; i < argc; i++)
+    {
+        if(!wcscmp(wargv[i], L"--no-crashdump"))
+        {
+            crash_handling = FALSE;
+        }
+        else
+        {
+            argv[j] = FromWide (wargv[i]);
+            j++;
+        }
+    }
+
+    argc = j;
     argv[argc] = NULL;
     LocalFree (wargv);
+
+# ifndef _WIN64
+    if(crash_handling)
+    {
+        check_crashdump();
+        SetUnhandledExceptionFilter(vlc_exception_filter);
+    }
+# endif /* WIN64 */
+
 #else
     char **argv, psz_cmdline[wcslen(lpCmdLine) * 4];
 
@@ -133,38 +178,26 @@ int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
     argc = parse_cmdline (psz_cmdline, &argv);
 #endif
 
-    libvlc_exception_t ex, dummy;
-    libvlc_exception_init (&ex);
-    libvlc_exception_init (&dummy);
-
-#if !defined( UNDER_CE )
-    check_crashdump();
-    SetUnhandledExceptionFilter(vlc_exception_filter);
-#endif
-
     /* Initialize libvlc */
     libvlc_instance_t *vlc;
-    vlc = libvlc_new (argc - 1, (const char **)argv + 1, &ex);
+    vlc = libvlc_new (argc, (const char **)argv);
     if (vlc != NULL)
     {
-        libvlc_add_intf (vlc, NULL, &ex);
-        libvlc_playlist_play (vlc, -1, 0, NULL, &dummy);
+        libvlc_add_intf (vlc, "globalhotkeys,none");
+        libvlc_add_intf (vlc, NULL);
+        libvlc_playlist_play (vlc, -1, 0, NULL);
         libvlc_wait (vlc);
         libvlc_release (vlc);
     }
 
-    ret = libvlc_exception_raised (&ex);
-    libvlc_exception_clear (&ex);
-    libvlc_exception_clear (&dummy);
-
     for (int i = 0; i < argc; i++)
         free (argv[i]);
 
     (void)hInstance; (void)hPrevInstance; (void)lpCmdLine; (void)nCmdShow;
-    return ret;
+    return 0;
 }
 
-#if !defined( UNDER_CE )
+#if !defined( UNDER_CE ) && !defined( _WIN64 )
 
 static void get_crashdump_path(wchar_t * wdir)
 {