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