win32.cc: (dirExists) Internal helper function to test for directory existence.

* win32.cc: (dirExists) Internal helper function to
	test for directory existence.
	(getUserHome) New helper function refactored out
	of _Jv_platform_initProperties. Uses USERPROFILE
	instead of HOMEDIR and attempts to support Win9X and NT.
	(_Jv_platform_initProperties) Use getUserHome.

From-SVN: r73117
This commit is contained in:
Mohan Embar 2003-10-31 03:31:54 +00:00 committed by Mohan Embar
parent 76506a3ee3
commit 748e241eab
2 changed files with 53 additions and 30 deletions

View file

@ -1,3 +1,12 @@
2003-10-30 Mohan Embar <gnustuff@thisiscool.com>
* win32.cc: (dirExists) Internal helper function to
test for directory existence.
(getUserHome) New helper function refactored out
of _Jv_platform_initProperties. Uses USERPROFILE
instead of HOMEDIR and attempts to support Win9X and NT.
(_Jv_platform_initProperties) Use getUserHome.
2003-10-30 Mohan Embar <gnustuff@thisiscool.com>
PR libgcj/11521:

View file

@ -177,6 +177,43 @@ __mingwthr_key_dtor (DWORD, void (*) (void *))
return 0;
}
static bool dirExists (const char* dir)
{
DWORD dwAttrs = ::GetFileAttributes (dir);
return dwAttrs != 0xFFFFFFFF &&
(dwAttrs & FILE_ATTRIBUTE_DIRECTORY) != 0;
}
static void getUserHome(char* userHome, const char* userId)
{
char* uh = ::getenv ("USERPROFILE");
if (uh)
{
strcpy(userHome, uh);
}
else
{
// Make a half-hearted attempt to support this
// legacy version of Windows. Try %WINDIR%\Profiles\%USERNAME%
// and failing this, use %WINDIR%.
//
// See:http://java.sun.com/docs/books/tutorial/security1.2/summary/files.html#UserPolicy
//
// To do this correctly, we'd have to factor in the
// Windows version, but if we did that, then this attempt
// wouldn't be half-hearted.
char userHomePath[MAX_PATH], winHome[MAX_PATH];
::GetWindowsDirectory(winHome, MAX_PATH);
// assume this call always succeeds
sprintf(userHomePath, "%s\\Profiles\\%s", winHome, userId);
if (dirExists (userHomePath))
strcpy(userHome, userHomePath);
else
strcpy(userHome, winHome);
}
}
// Set platform-specific System properties.
void
_Jv_platform_initProperties (java::util::Properties* newprops)
@ -205,37 +242,14 @@ _Jv_platform_initProperties (java::util::Properties* newprops)
// Use GetUserName to set 'user.name'.
buflen = 257; // UNLEN + 1
buffer = (char *) _Jv_MallocUnchecked (buflen);
if (buffer != NULL)
{
if (GetUserName (buffer, &buflen))
SET ("user.name", buffer);
_Jv_Free (buffer);
}
char userName[buflen];
if (GetUserName (userName, &buflen))
SET ("user.name", userName);
// According to the api documentation for 'GetWindowsDirectory()', the
// environmental variable HOMEPATH always specifies the user's home
// directory or a default directory. On the 3 windows machines I checked
// only 1 had it set. If it's not set, JDK1.3.1 seems to set it to
// the windows directory, so we'll do the same.
char *userHome = NULL;
if ((userHome = ::getenv ("HOMEPATH")) == NULL )
{
// Check HOME since it's what I use.
if ((userHome = ::getenv ("HOME")) == NULL )
{
// Not found - use the windows directory like JDK1.3.1 does.
char *winHome = (char *) _Jv_MallocUnchecked (MAX_PATH);
if (winHome != NULL)
{
if (GetWindowsDirectory (winHome, MAX_PATH))
SET ("user.home", winHome);
_Jv_Free (winHome);
}
}
}
if (userHome != NULL)
SET ("user.home", userHome);
// Set user.home
char userHome[MAX_PATH];
getUserHome(userHome, userName);
SET ("user.home", userHome);
// Get and set some OS info.
OSVERSIONINFO osvi;