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@xxxxxxxxx> --- 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html