only free the PIDL in DirProc, don't parse it too so g_tmp gets overwritten with the entire path instaed of just the display name

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3472 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
kichik 2004-02-06 22:37:46 +00:00
parent 80c8c38055
commit 4a8e19199a
3 changed files with 11 additions and 12 deletions

View file

@ -855,17 +855,17 @@ static BOOL CALLBACK DirProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPar
idlist = SHBrowseForFolder(&bi); idlist = SHBrowseForFolder(&bi);
if (idlist) if (idlist)
{ {
// Get and free idlist // free idlist
my_PIDL2Path(g_tmp, idlist); FreePIDL(idlist);
if (g_header->install_directory_auto_append) if (g_header->install_directory_auto_append)
{ {
const char *post_str=ps_tmpbuf; const char *post_str = ps_tmpbuf;
GetNSISStringTT(g_header->install_directory_auto_append); GetNSISStringTT(g_header->install_directory_auto_append);
// name gives just the folder name // display name gives just the folder name
if (lstrcmpi(post_str,g_tmp)) if (lstrcmpi(post_str, g_tmp))
{ {
lstrcat(addtrailingslash(dir),post_str); lstrcat(addtrailingslash(dir), post_str);
} }
} }

View file

@ -27,18 +27,15 @@ NSIS_STRING g_usrvars[1];
#define SECTION_VARS_RWD "/section:" ## VARS_SECTION_NAME ## ",rwd" #define SECTION_VARS_RWD "/section:" ## VARS_SECTION_NAME ## ",rwd"
#pragma comment(linker, SECTION_VARS_RWD) #pragma comment(linker, SECTION_VARS_RWD)
int NSISCALL my_PIDL2Path(char *out, LPITEMIDLIST idl) void NSISCALL FreePIDL(LPITEMIDLIST idl)
{ {
int Res;
IMalloc *m; IMalloc *m;
SHGetMalloc(&m); SHGetMalloc(&m);
Res = SHGetPathFromIDList(idl, out);
if (m) if (m)
{ {
m->lpVtbl->Free(m, idl); m->lpVtbl->Free(m, idl);
m->lpVtbl->Release(m); m->lpVtbl->Release(m);
} }
return Res;
} }
HANDLE NSISCALL myCreateProcess(char *cmd, char *dir) HANDLE NSISCALL myCreateProcess(char *cmd, char *dir)
@ -537,7 +534,9 @@ char * NSISCALL GetNSISString(char *outbuf, int strtab)
{ {
if (!SHGetSpecialFolderLocation(g_hwnd, fldrs[x], &idl)) if (!SHGetSpecialFolderLocation(g_hwnd, fldrs[x], &idl))
{ {
if (my_PIDL2Path(out, idl)) BOOL res = SHGetPathFromIDList(idl, out);
FreePIDL(idl);
if (res)
{ {
break; break;
} }

View file

@ -14,7 +14,7 @@ int NSISCALL mystrlen(const char *in);
char * NSISCALL mystrstr(char *a, char *b); char * NSISCALL mystrstr(char *a, char *b);
WIN32_FIND_DATA * NSISCALL file_exists(char *buf); WIN32_FIND_DATA * NSISCALL file_exists(char *buf);
char * NSISCALL my_GetTempFileName(char *buf, const char *dir); char * NSISCALL my_GetTempFileName(char *buf, const char *dir);
int NSISCALL my_PIDL2Path(char *out, LPITEMIDLIST idl); void NSISCALL FreePIDL(LPITEMIDLIST idl);
//BOOL NSISCALL my_SetWindowText(HWND hWnd, const char *val); //BOOL NSISCALL my_SetWindowText(HWND hWnd, const char *val);
#define my_SetWindowText SetWindowText #define my_SetWindowText SetWindowText