query registry to get correct mydocuments path on all windows versions

git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@2860 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
driAn
2008-10-06 23:05:20 +00:00
parent b432f62756
commit 8a2e537927
2 changed files with 43 additions and 3 deletions
+43 -1
View File
@@ -15,6 +15,30 @@
string homedir = "";
vector<char *> packagedirs;
#ifdef WIN32
char *getregszvalue(HKEY root, const char *keystr, const char *query)
{
HKEY key;
if(RegOpenKeyEx(HKEY_CURRENT_USER, keystr, 0, KEY_READ, &key)==ERROR_SUCCESS)
{
DWORD type = 0, len = 0;
if(RegQueryValueEx(key, query, 0, &type, 0, &len)==ERROR_SUCCESS && type==REG_SZ)
{
LPSTR val = new char[len];
long result = RegQueryValueEx(key, query, 0, &type, (unsigned char *)val, &len);
if(result==ERROR_SUCCESS)
{
RegCloseKey(key);
return val;
}
else delete[] val;
}
RegCloseKey(key);
}
return NULL;
}
#endif
char *path(char *s)
{
for(char *t = s; (t = strpbrk(t, "/\\")); *t++ = PATHDIV);
@@ -104,12 +128,30 @@ static void fixdir(char *dir)
void sethomedir(const char *dir)
{
fixdir(s_strcpy(homedir, dir));
string tmpdir;
s_strcpy(tmpdir, dir);
#ifdef WIN32
const char substitute[] = "?MYDOCUMENTS?";
if(!strncmp(dir, substitute, strlen(substitute)))
{
char *mydocuments = getregszvalue(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", "Personal");
if(mydocuments)
{
s_sprintf(tmpdir)("%s%s", mydocuments, dir+strlen(substitute));
DELETEP(mydocuments);
}
}
#endif
printf("Using home directory: %s\n", tmpdir);
fixdir(s_strcpy(homedir, tmpdir));
createdir(homedir);
}
void addpackagedir(const char *dir)
{
printf("Adding package directory: %s\n", dir);
fixdir(packagedirs.add(newstringbuf(dir)));
}