* [PATCH] Windows: avoid static dependency on advapi32.dll
@ 2010-01-24 18:53 Michael Lukashov
2010-01-24 19:20 ` Johannes Sixt
0 siblings, 1 reply; 2+ messages in thread
From: Michael Lukashov @ 2010-01-24 18:53 UTC (permalink / raw)
To: git; +Cc: Johannes Sixt, Michael Lukashov
This DLL is used to get default user name. By looking
up the only function that we need at runtime, we can
avoid the startup costs of this DLL.
Signed-off-by: Michael Lukashov <michael.lukashov@gmail.com>
---
compat/mingw.c | 31 ++++++++++++++++++++++++++++++-
1 files changed, 30 insertions(+), 1 deletions(-)
diff --git a/compat/mingw.c b/compat/mingw.c
index ab65f77..6ce398c 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -1176,13 +1176,42 @@ int mingw_getpagesize(void)
return si.dwAllocationGranularity;
}
+static HMODULE advapi32_dll = NULL;
+static BOOL (WINAPI *advapi32_get_user_name)(char *, DWORD *);
+
+static void advapi32_cleanup(void)
+{
+ if (advapi32_dll)
+ FreeLibrary(advapi32_dll);
+ advapi32_dll = NULL;
+ advapi32_get_user_name = NULL;
+}
+
struct passwd *getpwuid(int uid)
{
static char user_name[100];
static struct passwd p;
+ static int advapi32_initialized = 0;
DWORD len = sizeof(user_name);
- if (!GetUserName(user_name, &len))
+
+ if (!advapi32_initialized)
+ {
+ advapi32_dll = LoadLibrary("advapi32.dll");
+ if (!advapi32_dll)
+ die("cannot load advapi32.dll");
+ advapi32_get_user_name = (BOOL (WINAPI *)(char *, DWORD *))
+ GetProcAddress(advapi32_dll, "GetUserNameA");
+ if (!advapi32_get_user_name) {
+ FreeLibrary(advapi32_dll);
+ advapi32_dll = NULL;
+ die("cannot find GetUserNameA");
+ }
+ atexit(advapi32_cleanup);
+ advapi32_initialized = 1;
+ }
+
+ if (!advapi32_get_user_name(user_name, &len))
return NULL;
p.pw_name = user_name;
p.pw_gecos = "unknown";
--
1.6.6.1599.gaed1a
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2010-01-24 19:21 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-24 18:53 [PATCH] Windows: avoid static dependency on advapi32.dll Michael Lukashov
2010-01-24 19:20 ` Johannes Sixt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).