@@ -1951,18 +1951,63 @@ int mingw_getpagesize(void)
1951
1951
return si .dwAllocationGranularity ;
1952
1952
}
1953
1953
1954
+ /* See https://msdn.microsoft.com/en-us/library/windows/desktop/ms724435.aspx */
1955
+ enum EXTENDED_NAME_FORMAT {
1956
+ NameDisplay = 3 ,
1957
+ NameUserPrincipal = 8
1958
+ };
1959
+
1960
+ static char * get_extended_user_info (enum EXTENDED_NAME_FORMAT type )
1961
+ {
1962
+ DECLARE_PROC_ADDR (secur32 .dll , BOOL , GetUserNameExW ,
1963
+ enum EXTENDED_NAME_FORMAT , LPCWSTR , PULONG );
1964
+ static wchar_t wbuffer [1024 ];
1965
+ DWORD len ;
1966
+
1967
+ if (!INIT_PROC_ADDR (GetUserNameExW ))
1968
+ return NULL ;
1969
+
1970
+ len = ARRAY_SIZE (wbuffer );
1971
+ if (GetUserNameExW (type , wbuffer , & len )) {
1972
+ char * converted = xmalloc ((len *= 3 ));
1973
+ if (xwcstoutf (converted , wbuffer , len ) >= 0 )
1974
+ return converted ;
1975
+ free (converted );
1976
+ }
1977
+
1978
+ return NULL ;
1979
+ }
1980
+
1981
+ char * mingw_query_user_email (void )
1982
+ {
1983
+ return get_extended_user_info (NameUserPrincipal );
1984
+ }
1985
+
1954
1986
struct passwd * getpwuid (int uid )
1955
1987
{
1988
+ static unsigned initialized ;
1956
1989
static char user_name [100 ];
1957
- static struct passwd p ;
1990
+ static struct passwd * p ;
1991
+ DWORD len ;
1992
+
1993
+ if (initialized )
1994
+ return p ;
1958
1995
1959
- DWORD len = sizeof (user_name );
1960
- if (!GetUserName (user_name , & len ))
1996
+ len = sizeof (user_name );
1997
+ if (!GetUserName (user_name , & len )) {
1998
+ initialized = 1 ;
1961
1999
return NULL ;
1962
- p .pw_name = user_name ;
1963
- p .pw_gecos = "unknown" ;
1964
- p .pw_dir = NULL ;
1965
- return & p ;
2000
+ }
2001
+
2002
+ p = xmalloc (sizeof (* p ));
2003
+ p -> pw_name = user_name ;
2004
+ p -> pw_gecos = get_extended_user_info (NameDisplay );
2005
+ if (!p -> pw_gecos )
2006
+ p -> pw_gecos = "unknown" ;
2007
+ p -> pw_dir = NULL ;
2008
+
2009
+ initialized = 1 ;
2010
+ return p ;
1966
2011
}
1967
2012
1968
2013
static HANDLE timer_event ;
0 commit comments