From 8cc405362f35fb927d923c7aec2bfbf9eea34cf3 Mon Sep 17 00:00:00 2001 From: eccles Date: Mon, 19 Aug 2002 23:39:23 +0000 Subject: [PATCH] SetShellVarContext all - was failing to fall back to current user Optimised this a little too git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@695 212acab6-be3b-0410-9dea-997c60f758d6 --- Source/exehead/util.c | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/Source/exehead/util.c b/Source/exehead/util.c index 58c71ebe..3464f12a 100644 --- a/Source/exehead/util.c +++ b/Source/exehead/util.c @@ -328,21 +328,25 @@ void NSISCALL myRegGetStr(HKEY root, const char *sub, const char *name, char *ou char g_all_user_var_flag; -static void NSISCALL queryShellFolders(const char *name, char *out) +static void NSISCALL queryShellFolders(const char *name_, char *out) { - char f=g_all_user_var_flag; -again: - - myRegGetStr(g_all_user_var_flag?HKEY_LOCAL_MACHINE:HKEY_CURRENT_USER, - "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", - name+(f?0:7),out); - if (!out[0]) + static char name[20] = "Common "; + mystrcpy(name + 7, name_); { - if (f) + char f=g_all_user_var_flag; + again: + + myRegGetStr(f?HKEY_LOCAL_MACHINE:HKEY_CURRENT_USER, + "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", + name+(f?0:7),out); + if (!out[0]) { - f=0; goto again; + if (f) + { + f=0; goto again; + } + GetTempPath(NSIS_MAX_STRLEN,out); } - GetTempPath(NSIS_MAX_STRLEN,out); } } @@ -497,17 +501,17 @@ void NSISCALL process_string(char *out, const char *in) case VAR_CODES_START + 29: // STARTMENU { static const char *tab[]={ - "Common Programs", - "Common Startup", - "Common Desktop", - "Common Start Menu" + "Programs", + "Startup", + "Desktop", + "Start Menu" }; queryShellFolders(tab[nVarIdx-(VAR_CODES_START+26)], out); } break; case VAR_CODES_START + 30: // QUICKLAUNCH - queryShellFolders("Common AppData", out); + queryShellFolders("AppData", out); lstrcat(out, "\\Microsoft\\Internet Explorer\\Quick Launch"); f = GetFileAttributes(out); if (f != (DWORD)-1 && (f & FILE_ATTRIBUTE_DIRECTORY))