[prev in list] [next in list] [prev in thread] [next in thread]
List: nsis-commits
Subject: [NSIS-commits] SF.net SVN: nsis:[7369] NSIS/trunk
From: anders_k--- via NSIS-commits <nsis-commits () lists ! sourceforge ! net>
Date: 2022-10-23 18:09:47
Message-ID: 1666548587.757509.15913 () sfp-scm-7 ! v30 ! lw ! sourceforge ! com
[Download RAW message or body]
Revision: 7369
http://sourceforge.net/p/nsis/code/7369
Author: anders_k
Date: 2022-10-23 18:09:46 +0000 (Sun, 23 Oct 2022)
Log Message:
-----------
Use SHCloneSpecialIDList instead of SHGetSpecialFolderLocation so missing folders can \
be created on Win4.x
Modified Paths:
--------------
NSIS/trunk/Docs/src/history.but
NSIS/trunk/Source/build.cpp
NSIS/trunk/Source/exehead/util.c
NSIS/trunk/Source/exehead/util.h
Modified: NSIS/trunk/Docs/src/history.but
===================================================================
--- NSIS/trunk/Docs/src/history.but 2022-09-20 21:38:03 UTC (rev 7368)
+++ NSIS/trunk/Docs/src/history.but 2022-10-23 18:09:46 UTC (rev 7369)
@@ -16,6 +16,8 @@
\b Fixed \cw{!uninstfinalize} bug on large uninstallers
+\b Fixed creation of missing special folders on old Windows versions where \
SHGetFolderPath is not available. +
\b Fixed plug-in call overwriting \cw{SetDetailsPrint lastused} \
(\W{http://sf.net/p/nsis/bugs/1271}{bug #1271})
\b Fixed \cw{!appendfile} not writing to non-empty files with a BOM
Modified: NSIS/trunk/Source/build.cpp
===================================================================
--- NSIS/trunk/Source/build.cpp 2022-09-20 21:38:03 UTC (rev 7368)
+++ NSIS/trunk/Source/build.cpp 2022-10-23 18:09:46 UTC (rev 7369)
@@ -379,7 +379,7 @@
m_ShellConstants.add(_T("CDBURN_AREA"), CSIDL_CDBURN_AREA, CSIDL_CDBURN_AREA);
// Constants that are not affected by SetShellVarContext
- m_ShellConstants.add(_T("USERAPPDATA"), CSIDL_APPDATA, CSIDL_APPDATA);
+ m_ShellConstants.add(_T("USERAPPDATA"), CSIDL_APPDATA, CSIDL_APPDATA|0x40); // \
0x40 to differentiate it from $QUICKLAUNCH \
m_ShellConstants.add(_T("USERLOCALAPPDATA"), CSIDL_LOCAL_APPDATA, \
CSIDL_LOCAL_APPDATA); m_ShellConstants.add(_T("USERTEMPLATES"), CSIDL_TEMPLATES, \
CSIDL_TEMPLATES); m_ShellConstants.add(_T("USERSTARTMENU"), CSIDL_STARTMENU, \
CSIDL_STARTMENU);
Modified: NSIS/trunk/Source/exehead/util.c
===================================================================
--- NSIS/trunk/Source/exehead/util.c 2022-09-20 21:38:03 UTC (rev 7368)
+++ NSIS/trunk/Source/exehead/util.c 2022-10-23 18:09:46 UTC (rev 7369)
@@ -800,8 +800,9 @@
const TCHAR SYSREGKEY[] = _T("Software\\Microsoft\\Windows\\CurrentVersion");
const TCHAR QUICKLAUNCH[] = _T("\\Microsoft\\Internet Explorer\\Quick Launch");
-typedef HRESULT (__stdcall * PFNSHGETFOLDERPATH)(HWND, int, HANDLE, DWORD, LPTSTR);
+typedef HRESULT (WINAPI* PFNSHGETFOLDERPATH)(HWND, int, HANDLE, DWORD, LPTSTR);
extern void *g_SHGetFolderPath;
+typedef LPITEMIDLIST (WINAPI* PFNSHCLONESPECIALIDLIST)(HWND, int, BOOL);
// Based on Dave Laundon's simplified process_string
// The string actually has a lot of different data encoded into it. This
@@ -903,16 +904,22 @@
while (x--)
{
+ PFNSHCLONESPECIALIDLIST SHCSILFunc;
+ int idandflags = fldrs[x] & ~0x40, create = idandflags & \
CSIDL_FLAG_CREATE; +
if (g_SHGetFolderPath && use_shfolder)
{
PFNSHGETFOLDERPATH SHGetFolderPathFunc = (PFNSHGETFOLDERPATH) \
g_SHGetFolderPath;
- if (!SHGetFolderPathFunc(g_hwnd, fldrs[x], NULL, SHGFP_TYPE_CURRENT, \
out)) + if (!SHGetFolderPathFunc(g_hwnd, idandflags, NULL, \
SHGFP_TYPE_CURRENT, out)) {
break;
}
}
-
- if (!SHGetSpecialFolderLocation(g_hwnd, fldrs[x], &idl))
+
+ // This function exists in 95 & NT4 but was undocumented back then so we \
have to import it by ordinal. + SHCSILFunc = (PFNSHCLONESPECIALIDLIST) \
myGetProcAddress(MGA_SHCloneSpecialIDList); + idl = SHCSILFunc(g_hwnd, \
LOBYTE(idandflags), create); + if (idl)
{
BOOL res = SHGetPathFromIDList(idl, out);
CoTaskMemFree(idl);
@@ -1172,6 +1179,7 @@
{"ADVAPI32", "InitiateShutdownW"},
{"SHELL32", "SHGetKnownFolderPath"},
{"SHELL32", (CHAR*) 680}, // IsUserAnAdmin
+ {"SHELL32", (CHAR*) 89}, // SHCloneSpecialIDList
#ifndef _WIN64
{"SHLWAPI", (CHAR*) 437}, // IsOS
#endif
@@ -1191,6 +1199,7 @@
{"ADVAPI32", "InitiateShutdownA"},
{"SHELL32", "SHGetKnownFolderPath"},
{"SHELL32", (CHAR*) 680}, // IsUserAnAdmin
+ {"SHELL32", (CHAR*) 89}, // SHCloneSpecialIDList
#ifndef _WIN64
{"SHLWAPI", (CHAR*) 437}, // IsOS
#endif
Modified: NSIS/trunk/Source/exehead/util.h
===================================================================
--- NSIS/trunk/Source/exehead/util.h 2022-09-20 21:38:03 UTC (rev 7368)
+++ NSIS/trunk/Source/exehead/util.h 2022-10-23 18:09:46 UTC (rev 7369)
@@ -175,6 +175,7 @@
MGA_InitiateShutdown,
MGA_SHGetKnownFolderPath,
MGA_IsUserAnAdmin,
+ MGA_SHCloneSpecialIDList,
#ifndef _WIN64
MGA_IsOS,
#endif
This was sent by the SourceForge.net collaborative development platform, the world's \
largest Open Source development site.
_______________________________________________
NSIS-commits mailing list
NSIS-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nsis-commits
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic