@@ -1932,18 +1932,63 @@ int mingw_getpagesize(void)
1932
1932
return si .dwAllocationGranularity ;
1933
1933
}
1934
1934
1935
+ /* See https://msdn.microsoft.com/en-us/library/windows/desktop/ms724435.aspx */
1936
+ enum EXTENDED_NAME_FORMAT {
1937
+ NameDisplay = 3 ,
1938
+ NameUserPrincipal = 8
1939
+ };
1940
+
1941
+ static char * get_extended_user_info (enum EXTENDED_NAME_FORMAT type )
1942
+ {
1943
+ DECLARE_PROC_ADDR (secur32 .dll , BOOL , GetUserNameExW ,
1944
+ enum EXTENDED_NAME_FORMAT , LPCWSTR , PULONG );
1945
+ static wchar_t wbuffer [1024 ];
1946
+ DWORD len ;
1947
+
1948
+ if (!INIT_PROC_ADDR (GetUserNameExW ))
1949
+ return NULL ;
1950
+
1951
+ len = ARRAY_SIZE (wbuffer );
1952
+ if (GetUserNameExW (type , wbuffer , & len )) {
1953
+ char * converted = xmalloc ((len *= 3 ));
1954
+ if (xwcstoutf (converted , wbuffer , len ) >= 0 )
1955
+ return converted ;
1956
+ free (converted );
1957
+ }
1958
+
1959
+ return NULL ;
1960
+ }
1961
+
1962
+ char * mingw_query_user_email (void )
1963
+ {
1964
+ return get_extended_user_info (NameUserPrincipal );
1965
+ }
1966
+
1935
1967
struct passwd * getpwuid (int uid )
1936
1968
{
1969
+ static unsigned initialized ;
1937
1970
static char user_name [100 ];
1938
- static struct passwd p ;
1971
+ static struct passwd * p ;
1972
+ DWORD len ;
1973
+
1974
+ if (initialized )
1975
+ return p ;
1939
1976
1940
- DWORD len = sizeof (user_name );
1941
- if (!GetUserName (user_name , & len ))
1977
+ len = sizeof (user_name );
1978
+ if (!GetUserName (user_name , & len )) {
1979
+ initialized = 1 ;
1942
1980
return NULL ;
1943
- p .pw_name = user_name ;
1944
- p .pw_gecos = "unknown" ;
1945
- p .pw_dir = NULL ;
1946
- return & p ;
1981
+ }
1982
+
1983
+ p = xmalloc (sizeof (* p ));
1984
+ p -> pw_name = user_name ;
1985
+ p -> pw_gecos = get_extended_user_info (NameDisplay );
1986
+ if (!p -> pw_gecos )
1987
+ p -> pw_gecos = "unknown" ;
1988
+ p -> pw_dir = NULL ;
1989
+
1990
+ initialized = 1 ;
1991
+ return p ;
1947
1992
}
1948
1993
1949
1994
static HANDLE timer_event ;
0 commit comments