getpwuid(mingw): initialize the structure only once

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Johannes Schindelin committed Oct 15, 2018 at 02:47 UTC 55b6513e730126ce5512a83d2e00dea30971a523
1 file changed +18 -7
compat/mingw.c
+18 -7
@@ -1770,16 +1770,27 @@ int mingw_getpagesize(void)
1770
1771 struct passwd *getpwuid(int uid)
1772 {
1773 + static unsigned initialized;
1774 static char user_name[100];
1774 - static struct passwd p;
1775 + static struct passwd *p;
1776 + DWORD len;
1777
1776 - DWORD len = sizeof(user_name);
1777 - if (!GetUserName(user_name, &len))
1778 + if (initialized)
1779 + return p;
1780 +
1781 + len = sizeof(user_name);
1782 + if (!GetUserName(user_name, &len)) {
1783 + initialized = 1;
1784 return NULL;
1779 - p.pw_name = user_name;
1780 - p.pw_gecos = "unknown";
1781 - p.pw_dir = NULL;
1782 - return &p;
1785 + }
1786 +
1787 + p = xmalloc(sizeof(*p));
1788 + p->pw_name = user_name;
1789 + p->pw_gecos = "unknown";
1790 + p->pw_dir = NULL;
1791 +
1792 + initialized = 1;
1793 + return p;
1794 }
1795
1796 static HANDLE timer_event;