aboutsummaryrefslogtreecommitdiff
path: root/compat
diff options
context:
space:
mode:
authorJohannes Sixt <j6t@kdbg.org>2010-01-15 21:12:16 +0100
committerJunio C Hamano <gitster@pobox.com>2010-01-16 16:43:51 -0800
commit928500e00e0a73a11f5b2296d9baa82dafa7a1a8 (patch)
tree9cdfc88d54c2e8dd34a843128a76e5313db2826a /compat
parent56932249cf7d327115eae608d550e3a8cca4ea06 (diff)
downloadgit-928500e00e0a73a11f5b2296d9baa82dafa7a1a8.tar.gz
git-928500e00e0a73a11f5b2296d9baa82dafa7a1a8.tar.xz
Windows: boost startup by avoiding a static dependency on shell32.dll
This DLL is only needed to invoke the browser in a "git help" call. By looking up the only function that we need at runtime, we can avoid the startup costs of this DLL. DLL usage can be profiled with Microsoft's Dependency Walker. For example, a call to "git diff-files" loaded before: 19 DLLs after: 9 DLLs As a result, the runtime of 'make -j2 test' went down from 16:00min to 12:40min on one of my boxes. Signed-off-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'compat')
-rw-r--r--compat/mingw.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/compat/mingw.c b/compat/mingw.c
index 0d73f15fa..2afc978df 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -3,8 +3,6 @@
#include <conio.h>
#include "../strbuf.h"
-#include <shellapi.h>
-
static int err_win_to_posix(DWORD winerr)
{
int error = ENOSYS;
@@ -1338,8 +1336,22 @@ static const char *make_backslash_path(const char *path)
void mingw_open_html(const char *unixpath)
{
const char *htmlpath = make_backslash_path(unixpath);
+ typedef HINSTANCE (WINAPI *T)(HWND, const char *,
+ const char *, const char *, const char *, INT);
+ T ShellExecute;
+ HMODULE shell32;
+
+ shell32 = LoadLibrary("shell32.dll");
+ if (!shell32)
+ die("cannot load shell32.dll");
+ ShellExecute = (T)GetProcAddress(shell32, "ShellExecuteA");
+ if (!ShellExecute)
+ die("cannot run browser");
+
printf("Launching default browser to display HTML ...\n");
ShellExecute(NULL, "open", htmlpath, NULL, "\\", 0);
+
+ FreeLibrary(shell32);
}
int link(const char *oldpath, const char *newpath)