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