Use $HOME instead of getpwuid for user's home directory.
Fixed messed up indentation.
diff --git a/misc/registry.c b/misc/registry.c
index d55b46a..32dfe65 100644
--- a/misc/registry.c
+++ b/misc/registry.c
@@ -28,7 +28,6 @@
#include <sys/types.h>
#include <sys/fcntl.h>
#include <sys/stat.h>
-#include <pwd.h>
#include <assert.h>
#include <time.h>
#include "windef.h"
@@ -715,89 +714,79 @@
*/
void SHELL_SaveRegistry( void )
{
- char *fn;
- struct passwd *pwd;
- char buf[4];
- HKEY hkey;
- int all;
- int usedCfgUser = 0;
- int usedCfgLM = 0;
+ char *fn, *home, *tmp;
+ char buf[4];
+ HKEY hkey;
+ int all;
+ int usedCfgUser = 0;
+ int usedCfgLM = 0;
- TRACE(reg,"(void)\n");
+ TRACE(reg,"(void)\n");
- all=0;
- if (RegOpenKey16(HKEY_CURRENT_USER,KEY_REGISTRY,&hkey)!=ERROR_SUCCESS)
- {
- strcpy(buf,"yes");
- }
- else
- {
- DWORD len,junk,type;
-
- len=4;
- if ( (ERROR_SUCCESS!=RegQueryValueExA(
- hkey,
- VAL_SAVEUPDATED,
- &junk,
- &type,
- buf,
- &len)) || (type!=REG_SZ))
+ all=0;
+ if (RegOpenKey16(HKEY_CURRENT_USER,KEY_REGISTRY,&hkey)!=ERROR_SUCCESS)
{
- strcpy(buf,"yes");
+ strcpy(buf,"yes");
+ }
+ else
+ {
+ DWORD len,junk,type;
+
+ len=4;
+ if ((ERROR_SUCCESS!=RegQueryValueExA( hkey,
+ VAL_SAVEUPDATED,
+ &junk,
+ &type,
+ buf,
+ &len)) || (type!=REG_SZ))
+ {
+ strcpy(buf,"yes");
+ }
+ RegCloseKey(hkey);
}
- RegCloseKey(hkey);
- }
- if (lstrcmpiA(buf,"yes"))
- all=1;
+ if (lstrcmpiA(buf,"yes")) all=1;
- pwd=getpwuid(getuid());
- if ( (pwd!=NULL) && (pwd->pw_dir!=NULL))
- {
- char *tmp;
+ if (!(home = getenv( "HOME" )))
+ {
+ WARN(reg,"Failed to get homedirectory of UID %d.\n",getuid());
+ return;
+ }
/*
* Save HKEY_CURRENT_USER
* Try first saving according to the defined location in .winerc
*/
- fn = xmalloc( MAX_PATHNAME_LEN );
- if (PROFILE_GetWineIniString (
- "Registry",
- "UserFileName",
- "",
- fn,
- MAX_PATHNAME_LEN - 1))
+ fn = xmalloc( MAX_PATHNAME_LEN );
+ if (PROFILE_GetWineIniString ( "Registry", "UserFileName", "", fn, MAX_PATHNAME_LEN - 1))
{
- _savereg(lookup_hkey(HKEY_CURRENT_USER),fn,all);
- usedCfgUser = 1;
- }
- free (fn);
+ _savereg(lookup_hkey(HKEY_CURRENT_USER),fn,all);
+ usedCfgUser = 1;
+ }
+ free (fn);
if (usedCfgUser != 1)
{
- fn=(char*)xmalloc(
- strlen(pwd->pw_dir) +
- strlen(WINE_PREFIX) +
- strlen(SAVE_CURRENT_USER) + 2 );
+ fn=(char*)xmalloc( strlen(home) + strlen(WINE_PREFIX) +
+ strlen(SAVE_CURRENT_USER) + 2 );
+ strcpy(fn,home);
+ strcat(fn,WINE_PREFIX);
+
+ /* create the directory. don't care about errorcodes. */
+ mkdir(fn,0755); /* drwxr-xr-x */
+ strcat(fn,"/"SAVE_CURRENT_USER);
- strcpy(fn,pwd->pw_dir);
- strcat(fn,WINE_PREFIX);
+ tmp = (char*)xmalloc(strlen(fn)+strlen(".tmp")+1);
+ strcpy(tmp,fn);
+ strcat(tmp,".tmp");
- /* create the directory. don't care about errorcodes. */
- mkdir(fn,0755); /* drwxr-xr-x */
- strcat(fn,"/"SAVE_CURRENT_USER);
-
- tmp = (char*)xmalloc(strlen(fn)+strlen(".tmp")+1);
- strcpy(tmp,fn);
- strcat(tmp,".tmp");
-
- if (_savereg(lookup_hkey(HKEY_CURRENT_USER),tmp,all)) {
- if (-1==rename(tmp,fn)) {
- perror("rename tmp registry");
- unlink(tmp);
- }
- }
- free(tmp);
- free(fn);
+ if (_savereg(lookup_hkey(HKEY_CURRENT_USER),tmp,all)) {
+ if (-1==rename(tmp,fn)) {
+ perror("rename tmp registry");
+ unlink(tmp);
+ }
+ }
+ free(tmp);
+ free(fn);
}
/*
@@ -805,68 +794,52 @@
* Try first saving according to the defined location in .winerc
*/
fn = xmalloc ( MAX_PATHNAME_LEN);
- if (PROFILE_GetWineIniString (
- "Registry",
- "LocalMachineFileName",
- "",
- fn,
- MAX_PATHNAME_LEN - 1))
+ if (PROFILE_GetWineIniString ( "Registry", "LocalMachineFileName", "", fn,
+ MAX_PATHNAME_LEN - 1))
{
- _savereg(lookup_hkey(HKEY_LOCAL_MACHINE), fn, all);
- usedCfgLM = 1;
+ _savereg(lookup_hkey(HKEY_LOCAL_MACHINE), fn, all);
+ usedCfgLM = 1;
}
- free (fn);
+ free (fn);
if ( usedCfgLM != 1)
{
- fn=(char*)xmalloc(
- strlen(pwd->pw_dir)+
- strlen(WINE_PREFIX)+
- strlen(SAVE_LOCAL_MACHINE)+2);
-
- strcpy(fn,pwd->pw_dir);
- strcat(fn,WINE_PREFIX"/"SAVE_LOCAL_MACHINE);
-
- tmp = (char*)xmalloc(strlen(fn)+strlen(".tmp")+1);
- strcpy(tmp,fn);
- strcat(tmp,".tmp");
-
- if (_savereg(lookup_hkey(HKEY_LOCAL_MACHINE),tmp,all)) {
- if (-1==rename(tmp,fn)) {
- perror("rename tmp registry");
- unlink(tmp);
- }
- }
- free(tmp);
- free(fn);
+ fn=(char*)xmalloc( strlen(home)+ strlen(WINE_PREFIX)+ strlen(SAVE_LOCAL_MACHINE)+2);
+ strcpy(fn,home);
+ strcat(fn,WINE_PREFIX"/"SAVE_LOCAL_MACHINE);
+
+ tmp = (char*)xmalloc(strlen(fn)+strlen(".tmp")+1);
+ strcpy(tmp,fn);
+ strcat(tmp,".tmp");
+
+ if (_savereg(lookup_hkey(HKEY_LOCAL_MACHINE),tmp,all)) {
+ if (-1==rename(tmp,fn)) {
+ perror("rename tmp registry");
+ unlink(tmp);
+ }
+ }
+ free(tmp);
+ free(fn);
}
/*
* Save HKEY_USERS
*/
- fn=(char*)xmalloc(
- strlen(pwd->pw_dir)+
- strlen(WINE_PREFIX)+
- strlen(SAVE_LOCAL_USERS_DEFAULT)+2);
+ fn=(char*)xmalloc( strlen(home)+ strlen(WINE_PREFIX)+ strlen(SAVE_LOCAL_USERS_DEFAULT)+2);
- strcpy(fn,pwd->pw_dir);
+ strcpy(fn,home);
strcat(fn,WINE_PREFIX"/"SAVE_LOCAL_USERS_DEFAULT);
tmp = (char*)xmalloc(strlen(fn)+strlen(".tmp")+1);
strcpy(tmp,fn);strcat(tmp,".tmp");
if ( _savereg(lookup_hkey(HKEY_USERS),tmp,FALSE)) {
- if (-1==rename(tmp,fn)) {
- perror("rename tmp registry");
- unlink(tmp);
- }
+ if (-1==rename(tmp,fn)) {
+ perror("rename tmp registry");
+ unlink(tmp);
+ }
}
free(tmp);
free(fn);
- }
- else
- {
- WARN(reg,"Failed to get homedirectory of UID %d.\n",getuid());
- }
}
@@ -1912,8 +1885,7 @@
*/
void SHELL_LoadRegistry( void )
{
- char *fn;
- struct passwd *pwd;
+ char *fn, *home;
LPKEYSTRUCT lpkey, HKCU, HKU, HKLM;
HKEY hkey;
@@ -1940,24 +1912,20 @@
*/
_wine_loadreg( HKLM, SAVE_LOCAL_MACHINE_DEFAULT, 0);
- /* Get current user info */
- pwd=getpwuid(getuid());
-
/*
* Load the user saved registries
*/
- if ( (pwd != NULL) &&
- (pwd->pw_dir != NULL) )
+ if ((home = getenv( "HOME" )))
{
/*
* Load user's personal versions of global HKU/.Default keys
*/
fn=(char*)xmalloc(
- strlen(pwd->pw_dir)+
+ strlen(home)+
strlen(WINE_PREFIX)+
strlen(SAVE_LOCAL_USERS_DEFAULT)+2);
- strcpy(fn, pwd->pw_dir);
+ strcpy(fn, home);
strcat(fn, WINE_PREFIX"/"SAVE_LOCAL_USERS_DEFAULT);
_wine_loadreg(HKU, fn, REG_OPTION_TAINTED);
free(fn);
@@ -1979,11 +1947,11 @@
free (fn);
fn=(char*)xmalloc(
- strlen(pwd->pw_dir)+
+ strlen(home)+
strlen(WINE_PREFIX)+
strlen(SAVE_CURRENT_USER)+2);
- strcpy(fn, pwd->pw_dir);
+ strcpy(fn, home);
strcat(fn, WINE_PREFIX"/"SAVE_CURRENT_USER);
_wine_loadreg(HKCU, fn, REG_OPTION_TAINTED);
free(fn);
@@ -2000,16 +1968,16 @@
fn,
MAX_PATHNAME_LEN - 1))
{
- _wine_loadreg(HKLM, fn, 0);
- }
+ _wine_loadreg(HKLM, fn, 0);
+ }
free(fn);
fn=(char*)xmalloc(
- strlen(pwd->pw_dir)+
+ strlen(home)+
strlen(WINE_PREFIX)+
strlen(SAVE_LOCAL_MACHINE)+2);
- strcpy(fn,pwd->pw_dir);
+ strcpy(fn,home);
strcat(fn,WINE_PREFIX"/"SAVE_LOCAL_MACHINE);
_wine_loadreg(HKLM, fn, REG_OPTION_TAINTED);
free(fn);
@@ -2043,17 +2011,18 @@
_flush_registry(HKU);
/* Reload user's local HKU hive */
- fn=(char*)xmalloc(
- strlen(pwd->pw_dir)+
- strlen(WINE_PREFIX)+
- strlen(SAVE_LOCAL_USERS_DEFAULT)+2);
+ if (home)
+ {
+ fn=(char*)xmalloc( strlen(home) + strlen(WINE_PREFIX)
+ + strlen(SAVE_LOCAL_USERS_DEFAULT) + 2);
+
+ strcpy(fn,home);
+ strcat(fn,WINE_PREFIX"/"SAVE_LOCAL_USERS_DEFAULT);
- strcpy(fn,pwd->pw_dir);
- strcat(fn,WINE_PREFIX"/"SAVE_LOCAL_USERS_DEFAULT);
+ _wine_loadreg( HKU, fn, REG_OPTION_TAINTED);
- _wine_loadreg( HKU, fn, REG_OPTION_TAINTED);
-
- free(fn);
+ free(fn);
+ }
/*
* Make sure the update mode is there