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;