Commit 13d74c5f authored by Juergen Schmied's avatar Juergen Schmied Committed by Alexandre Julliard

- new dll shfolder.dll

- small fixes
parent 661a9403
......@@ -97,6 +97,7 @@ EXTRADLLNAMES = \
olesvr \
rasapi16 \
shell \
shfolder \
shlwapi \
storage \
system \
......@@ -286,7 +287,7 @@ libriched32.@LIBEXT@: richedit/libriched32.@LIBEXT@
libsetupx.@LIBEXT@: setupx/libsetupx.@LIBEXT@
$(RM) $@ && $(LN_S) setupx/libsetupx.@LIBEXT@ $@
libshell32.@LIBEXT@ libshell.@LIBEXT@ libshlwapi.@LIBEXT@: shell32/libshell32.@LIBEXT@
libshell32.@LIBEXT@ libshell.@LIBEXT@ libshlwapi.@LIBEXT@ libshfolder.@LIBEXT@: shell32/libshell32.@LIBEXT@
$(RM) $@ && $(LN_S) shell32/libshell32.@LIBEXT@ $@
libsound.@LIBEXT@: sound/libsound.@LIBEXT@
......
......@@ -4,13 +4,14 @@ SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = shell32
SOVERSION = 1.0
ALTNAMES = shell shlwapi
ALTNAMES = shell shlwapi shfolder
IMPORTS = ole32
SPEC_SRCS = \
shell.spec \
shell32.spec \
shlwapi.spec
shlwapi.spec \
shfolder.spec
C_SRCS = \
brsfolder.c \
......
......@@ -20,13 +20,10 @@ import ole32.dll
5 stub SHChangeNotifyUpdateEntryList@16
6 stub CheckEscapesW@8
7 stdcall CommandLineToArgvW(wstr ptr) CommandLineToArgvW
8 stdcall Control_FillCache_RunDLL (long long long long) Control_FillCache_RunDLL
9 stub PifMgr_OpenProperties@16
10 stub PifMgr_GetProperties@20
11 stub PifMgr_SetProperties@20
12 stub Control_FillCache_RunDLLA@16
13 stub PifMgr_CloseProperties@8
14 stub Control_FillCache_RunDLLW@16
15 stdcall ILGetDisplayName(ptr ptr) ILGetDisplayName
16 stdcall ILFindLastID(ptr) ILFindLastID
17 stdcall ILRemoveLastID(ptr) ILRemoveLastID
......@@ -34,7 +31,6 @@ import ole32.dll
19 stdcall ILCloneFirst (ptr) ILCloneFirst
20 stdcall ILGlobalClone (ptr) ILGlobalClone
21 stdcall ILIsEqual (ptr ptr) ILIsEqual
22 stdcall Control_RunDLL(long long long long) Control_RunDLL # exported by name
23 stdcall ILIsParent (long long long) ILIsParent
24 stdcall ILFindChild (long long) ILFindChild
25 stdcall ILCombine(ptr ptr) ILCombine
......@@ -53,8 +49,6 @@ import ole32.dll
38 stdcall PathStripPath(ptr)PathStripPathAW
39 stdcall PathIsUNC (ptr) PathIsUNCAW
40 stdcall PathIsRelative (ptr) PathIsRelativeAW
41 stub Control_RunDLLA@16
42 stub Control_RunDLLW@16
43 stdcall PathIsExe (ptr) PathIsExeAW
44 stub DoEnvironmentSubstA@8
45 stdcall PathFileExists(ptr) PathFileExistsAW
......@@ -113,7 +107,6 @@ import ole32.dll
98 stdcall SHGetRealIDL (long long long) SHGetRealIDL
99 stdcall SetAppStartingCursor (long long) SetAppStartingCursor
100 stdcall SHRestricted(long) SHRestricted
101 stub DragQueryFileAorW # exported by name
102 stdcall SHCoCreateInstance(ptr ptr long ptr ptr) SHCoCreateInstance
103 stdcall SignalFileOpen(long) SignalFileOpen
104 stdcall FileMenu_DeleteAllItems(long)FileMenu_DeleteAllItems
......@@ -150,7 +143,6 @@ import ole32.dll
135 stdcall DragQueryPoint(long ptr) DragQueryPoint
136 stdcall DAD_SetDragImage(long long) DAD_SetDragImage
137 stdcall DAD_ShowDragImage (long) DAD_ShowDragImage
138 stub DuplicateIcon # exported by name
139 stub Desktop_UpdateBriefcaseOnEvent
140 stdcall FileMenu_DeleteItemByIndex(long long) FileMenu_DeleteItemByIndex
141 stdcall FileMenu_DeleteItemByFirstID(long long)FileMenu_DeleteItemByFirstID
......@@ -217,48 +209,13 @@ import ole32.dll
213 stub Printers_RegisterWindowW
214 stub Printers_UnregisterWindow
215 stub SHStartNetConnectionDialog@12
216 stub ExtractVersionResource16W # exported by name
217 stub FindExeDlgProc # exported by name
218 stdcall FindExecutableA(ptr ptr ptr) FindExecutableA # exported by name
219 stdcall FindExecutableW(wstr wstr wstr) FindExecutableW # exported by name
220 stdcall FreeIconList(long) FreeIconList # exported by name
221 stub InternalExtractIconListA # exported by name
222 stub InternalExtractIconListW # exported by name
223 stub OpenAs_RunDLL # exported by name
224 stub OpenAs_RunDLLA # exported by name
225 stub OpenAs_RunDLLW # exported by name
226 stub PrintersGetCommand_RunDLL # exported by name
227 stub PrintersGetCommand_RunDLLA # exported by name
228 stub PrintersGetCommand_RunDLLW # exported by name
229 stub RealShellExecuteA # exported by name
230 stub RealShellExecuteExA # exported by name
231 stub RealShellExecuteExW # exported by name
232 stub RealShellExecuteW # exported by name
233 stub RegenerateUserEnvironment # exported by name
234 stdcall SHAddToRecentDocs (long ptr) SHAddToRecentDocs # exported by name
235 stdcall SHAppBarMessage(long ptr) SHAppBarMessage # exported by name
236 stdcall SHBrowseForFolder(ptr) SHBrowseForFolderA # exported by name
237 stdcall SHBrowseForFolderA(ptr) SHBrowseForFolderA # exported by name
238 stub SHBrowseForFolderW@4 # exported by name
239 stdcall SHChangeNotify (long long ptr ptr) SHChangeNotifyAW # exported by name
240 stub SHEmptyRecycleBinA@12 # exported by name
241 stub SHEmptyRecycleBinW@12 # exported by name
243 stdcall shell32_243(long long) shell32_243
244 stdcall SHInitRestricted(ptr ptr) SHInitRestricted # win98+ only, by ordinal
245 stub SHFormatDrive@16 # exported by name
246 stub SHFreeNameMappings@4 # exported by name
244 stdcall SHInitRestricted(ptr ptr) SHInitRestricted
247 stdcall SHGetDataFromIDListA (ptr ptr long ptr long) SHGetDataFromIDListA
248 stdcall SHGetDataFromIDListW (ptr ptr long ptr long) SHGetDataFromIDListW
249 stdcall PathParseIconLocation (ptr) PathParseIconLocationAW
250 stdcall PathRemoveExtension (ptr) PathRemoveExtensionAW
251 stdcall PathRemoveArgs (ptr) PathRemoveArgsAW
264 stdcall SHHelpShortcuts_RunDLL(long long long long) SHHelpShortcuts_RunDLL # exported by name
265 stub SHHelpShortcuts_RunDLLA@16 # exported by name
266 stub SHHelpShortcuts_RunDLLW@16 # exported by name
267 stdcall SHLoadInProc(long) SHLoadInProc # exported by name
268 stub SHQueryRecycleBinA@8 # exported by name
269 stub SHQueryRecycleBinW@8 # exported by name
270 stub SHUpdateRecycleBinIcon@0 # exported by name
271 stub SheChangeDirA
272 stub SheChangeDirExA
273 stub SheChangeDirExW
......@@ -283,7 +240,6 @@ import ole32.dll
292 stdcall ShellExecuteExA (long) ShellExecuteExA
293 stdcall ShellExecuteExW (long) ShellExecuteExW
294 stdcall ShellExecuteW (long wstr wstr wstr wstr long) ShellExecuteW
295 stub ShellHookProc # exported by name
296 stdcall Shell_NotifyIcon(long ptr) Shell_NotifyIcon
297 stdcall Shell_NotifyIconA(long ptr) Shell_NotifyIconA
298 stdcall Shell_NotifyIconW(long ptr) Shell_NotifyIconW
......@@ -317,7 +273,6 @@ import ole32.dll
326 stdcall StrStrIA(str str)StrStrIA
327 stdcall StrStrIW(wstr wstr)StrStrIW
328 stdcall StrStrW(wstr wstr)StrStrW
329 stub WOWShellExecute # proper ordinal unknown
505 stdcall SHRegCloseKey (long) SHRegCloseKey
506 stdcall SHRegOpenKeyA (long str long) SHRegOpenKeyA
......@@ -348,58 +303,122 @@ import ole32.dll
650 stdcall PathIsSameRoot(ptr ptr)PathIsSameRootAW
# nt40/win98
651 stdcall ReadCabinetState (long long) ReadCabinetState
651 stdcall ReadCabinetState (long long) ReadCabinetState # OldReadCabinetState
652 stdcall WriteCabinetState (long) WriteCabinetState
653 stdcall PathProcessCommand (long long long long) PathProcessCommandAW
# win98
654 stdcall shell32_654 (long long) shell32_654
660 stdcall FileIconInit (long) FileIconInit
680 stdcall IsUserAdmin () IsUserAdmin
654 stdcall shell32_654(long long)shell32_654 # ReadCabinetState@8
660 stdcall FileIconInit(long)FileIconInit
680 stdcall IsUserAdmin()IsUserAdmin
# >= NT5
714 stdcall SHELL32_714(ptr)SHELL32_714
@ stdcall SHGetFolderLocation(long long long long ptr)SHGetFolderLocation
714 stdcall SHELL32_714(ptr)SHELL32_714 # PathIsTemporaryW
1217 stub FOOBAR1217 # no joke! This is the real name!!
# later additions ... FIXME: incorrect ordinals
# win 98 uses 2...330, 505..511, 520..526, 640..654, 660, 680, 700..707, 711
#
# version 4.0 (win95)
# _WIN32_IE >= 0x0200
#
@ stdcall Control_FillCache_RunDLL(long long long long)Control_FillCache_RunDLL
@ stub Control_FillCache_RunDLLA@16
@ stub Control_FillCache_RunDLLW@16
@ stdcall Control_RunDLL(long long long long)Control_RunDLL
@ stub Control_RunDLLA@16
@ stub Control_RunDLLW@16
@ stdcall DllInstall(long wstr)SHELL32_DllInstall
@ stdcall DoEnvironmentSubstA(str str)DoEnvironmentSubstA
@ stdcall DoEnvironmentSubstW(wstr wstr)DoEnvironmentSubstW
@ stub DragQueryFileAorW
@ stub DuplicateIcon
@ stdcall ExtractAssociatedIconA(long ptr long)ExtractAssociatedIconA
@ stub ExtractAssociatedIconExA
@ stub ExtractAssociatedIconExW
@ stub ExtractAssociatedIconW
@ stdcall ExtractIconA(long str long)ExtractIconA
@ stdcall ExtractIconEx(ptr long ptr ptr long)ExtractIconExAW
@ stdcall ExtractIconExA(str long ptr ptr long)ExtractIconExA
@ stdcall ExtractIconExW(wstr long ptr ptr long)ExtractIconExW
@ stdcall ExtractIconW(long wstr long)ExtractIconW
@ stub ExtractIconResInfoA
@ stub ExtractIconResInfoW
@ stub ExtractVersionResource16W
@ stub FindExeDlgProc
@ stdcall FindExecutableA(ptr ptr ptr) FindExecutableA
@ stdcall FindExecutableW(wstr wstr wstr) FindExecutableW
@ stdcall FreeIconList(long) FreeIconList
@ stub InternalExtractIconListA
@ stub InternalExtractIconListW
@ stub OpenAs_RunDLL
@ stub OpenAs_RunDLLA
@ stub OpenAs_RunDLLW
@ stub PrintersGetCommand_RunDLL
@ stub PrintersGetCommand_RunDLLA
@ stub PrintersGetCommand_RunDLLW
@ stub RealShellExecuteA
@ stub RealShellExecuteExA
@ stub RealShellExecuteExW
@ stub RealShellExecuteW
@ stub RegenerateUserEnvironment
@ stdcall SHAddToRecentDocs (long ptr) SHAddToRecentDocs
@ stdcall SHAppBarMessage(long ptr) SHAppBarMessage
@ stdcall SHBrowseForFolder(ptr) SHBrowseForFolderA
@ stdcall SHBrowseForFolderA(ptr) SHBrowseForFolderA
@ stub SHBrowseForFolderW@4
@ stdcall SHChangeNotify (long long ptr ptr) SHChangeNotifyAW
@ stub ShellHookProc
@ stub SHEmptyRecycleBinA@12
@ stub SHEmptyRecycleBinW@12
@ stdcall SHFileOperation(ptr)SHFileOperationAW
@ stdcall SHFileOperationA(ptr)SHFileOperationA
@ stdcall SHFileOperationW(ptr)SHFileOperationW
@ stub SHFormatDrive@16
@ stub SHFreeNameMappings@4
@ stdcall SHGetDesktopFolder(ptr)SHGetDesktopFolder
@ stdcall SHGetFileInfo(ptr long ptr long long)SHGetFileInfoAW
@ stdcall SHGetFileInfoA(ptr long ptr long long)SHGetFileInfoA
@ stdcall SHGetFileInfoW(ptr long ptr long long)SHGetFileInfoW
@ stdcall SHGetInstanceExplorer(long)SHGetInstanceExplorer
@ stdcall SHGetMalloc(ptr)SHGetMalloc
@ stub SHGetNewLinkInfo@20
@ stdcall SHGetPathFromIDList(ptr ptr)SHGetPathFromIDListAW
@ stdcall SHGetPathFromIDListA(long long)SHGetPathFromIDListA
@ stdcall SHGetPathFromIDListW(long long)SHGetPathFromIDListW
@ stdcall SHGetSpecialFolderLocation(long long ptr)SHGetSpecialFolderLocation
@ stdcall SHHelpShortcuts_RunDLL(long long long long) SHHelpShortcuts_RunDLL
@ stub SHHelpShortcuts_RunDLLA@16
@ stub SHHelpShortcuts_RunDLLW@16
@ stdcall SHLoadInProc(long) SHLoadInProc
@ stub SHQueryRecycleBinA@8
@ stub SHQueryRecycleBinW@8
@ stub SHUpdateRecycleBinIcon@0
@ stub WOWShellExecute@28
1220 stdcall DllGetVersion (ptr) SHELL32_DllGetVersion # win98:201
1221 stdcall SHGetSpecialFolderPathA(long ptr long long) SHGetSpecialFolderPathA # win98:292
1222 stdcall DoEnvironmentSubstA (str str) DoEnvironmentSubstA # win98:293
1223 stdcall DoEnvironmentSubstW (wstr wstr) DoEnvironmentSubstW # win98:204
#
# version 4.70 (IE3.0)
# _WIN32_IE >= 0x0300
#
# by-name routines
#
# version 4.71 (IE4.0)
# _WIN32_IE >= 0x0400
#
@ stub DllCanUnloadNow
@ stdcall DllGetVersion(ptr)SHELL32_DllGetVersion
@ stub SHGetFreeDiskSpace
@ stdcall SHGetSpecialFolderPathA(long ptr long long) SHGetSpecialFolderPathA
@ stdcall DllInstall (long wstr) SHELL32_DllInstall
#
# version 4.72 (IE4.01)
# _WIN32_IE >= 0x0401
# no new exports
#
@ stdcall ExtractAssociatedIconA(long ptr long) ExtractAssociatedIconA # exported by name
@ stub ExtractAssociatedIconExA # exported by name
@ stub ExtractAssociatedIconExW # exported by name
@ stub ExtractAssociatedIconW # exported by name
@ stdcall ExtractIconA(long str long) ExtractIconA # exported by name
@ stdcall ExtractIconEx(ptr long ptr ptr long) ExtractIconExAW
@ stdcall ExtractIconExA(str long ptr ptr long) ExtractIconExA
@ stdcall ExtractIconExW(wstr long ptr ptr long) ExtractIconExW
@ stdcall ExtractIconW(long wstr long) ExtractIconW # exported by name
@ stub ExtractIconResInfoA # exported by name
@ stub ExtractIconResInfoW # exported by name
@ stdcall SHFileOperation (ptr) SHFileOperationAW
@ stdcall SHFileOperationA (ptr) SHFileOperationA
@ stdcall SHFileOperationW (ptr) SHFileOperationW
@ stdcall SHGetDesktopFolder(ptr) SHGetDesktopFolder
@ stdcall SHGetFileInfo(ptr long ptr long long) SHGetFileInfoAW
@ stdcall SHGetFileInfoA(ptr long ptr long long) SHGetFileInfoA
@ stdcall SHGetFileInfoW(ptr long ptr long long) SHGetFileInfoW
@ stdcall SHGetInstanceExplorer (long) SHGetInstanceExplorer
@ stdcall SHGetMalloc(ptr) SHGetMalloc
@ stub SHGetNewLinkInfo@20
@ stdcall SHGetPathFromIDList(ptr ptr) SHGetPathFromIDListAW
@ stdcall SHGetPathFromIDListA (long long) SHGetPathFromIDListA
@ stdcall SHGetPathFromIDListW (long long) SHGetPathFromIDListW
@ stdcall SHGetSpecialFolderLocation(long long ptr) SHGetSpecialFolderLocation # exported by name
#
# version 5.00 (Win2K)
# _WIN32_IE >= 0x0500
#
@ stdcall SHGetFolderPathA(long long long long ptr)SHGetFolderPathA
@ stdcall SHGetFolderPathW(long long long long ptr)SHGetFolderPathW
@ stdcall SHGetFolderLocation(long long long long ptr)SHGetFolderLocation
......@@ -1069,9 +1069,12 @@ DWORD WINAPI SHLWAPI_193 ()
/*************************************************************************
* SHLWAPI_219 [SHLWAPI]
*
* NOTES
* error codes: E_POINTER, E_NOINTERFACE
*/
HRESULT WINAPI SHLWAPI_219 (
LPVOID w, /* returned by LocalAlloc */
LPVOID w, /* returned by LocalAlloc, 0x450 bytes, iface */
LPVOID x,
LPVOID y,
LPWSTR z) /* OUT: path */
......@@ -1100,26 +1103,36 @@ HANDLE WINAPI SHLWAPI_222 (LPCLSID guid)
* SHLWAPI_223 [SHLWAPI]
*
* NOTES
* function guessed
*/
* get the count of the semaphore
*/
DWORD WINAPI SHLWAPI_223 (HANDLE handle)
{
DWORD oldCount;
FIXME("(0x%08x) stub\n",handle);
ReleaseSemaphore( handle, 1, &oldCount);
WaitForSingleObject( handle, 0 );
return 0;
ReleaseSemaphore( handle, 1, &oldCount); /* +1 */
WaitForSingleObject( handle, 0 ); /* -1 */
return oldCount;
}
/*************************************************************************
* SHLWAPI_237 [SHLWAPI]
*
* NOTES
* checks if a class is registered, if not it registers it
*/
DWORD WINAPI SHLWAPI_237 (LPVOID x)
DWORD WINAPI SHLWAPI_237 (WNDCLASSW * lpWndClass)
{
FIXME("(ptr=%p str=%s wstr=%s)\n",x,debugstr_a(x),debugstr_w(x));
return 0xabba1234;
WNDCLASSW WndClass;
TRACE("(0x%08x %s)\n",lpWndClass->hInstance, debugstr_w(lpWndClass->lpszClassName));
if (!GetClassInfoW(lpWndClass->hInstance, lpWndClass->lpszClassName, &WndClass))
{
return RegisterClassW(lpWndClass);
}
return TRUE;
}
/*************************************************************************
......
......@@ -417,7 +417,6 @@ LPSTR WINAPI PathGetArgsA(LPCSTR lpszPath)
lpszPath++;
}
return (LPSTR)lpszPath;
}
/*************************************************************************
......@@ -571,7 +570,7 @@ void WINAPI PathStripPathA(LPSTR lpszPath)
TRACE("%s\n", lpszPath);
if(lpszFileName)
RtlMoveMemory(lpszPath, lpszFileName, strlen(lpszFileName));
RtlMoveMemory(lpszPath, lpszFileName, strlen(lpszFileName)+1);
}
/*************************************************************************
......@@ -583,7 +582,7 @@ void WINAPI PathStripPathW(LPWSTR lpszPath)
TRACE("%s\n", debugstr_w(lpszPath));
if(lpszFileName)
RtlMoveMemory(lpszPath, lpszFileName, lstrlenW(lpszFileName)*sizeof(WCHAR));
RtlMoveMemory(lpszPath, lpszFileName, (lstrlenW(lpszFileName)+1)*sizeof(WCHAR));
}
/*************************************************************************
......@@ -604,20 +603,18 @@ BOOL WINAPI PathStripToRootA(LPSTR lpszPath)
TRACE("%s\n", lpszPath);
/* X:\ */
if (lpszPath[1]==':' && lpszPath[2]=='\\')
{
lpszPath[3]='\0';
return TRUE;
}
/* "\" */
if (lpszPath[0]=='\\')
if (lpszPath[1]==':' )
{
lpszPath[1]='\0';
return TRUE;
if(lpszPath[2]=='\\')
{
lpszPath[3]='\0';
return TRUE;
}
lpszPath[2]='\0';
return FALSE;
}
/* UNC "\\<computer>\<share>" */
/* UNC "\\<computer>\<share>" FIXME: not complete*/
if (lpszPath[0]=='\\' && lpszPath[1]=='\\')
{
int foundbackslash = 0;
......@@ -634,6 +631,14 @@ BOOL WINAPI PathStripToRootA(LPSTR lpszPath)
}
}
/* "\" */
if (lpszPath[0]=='\\')
{
lpszPath[1]='\0';
return TRUE;
}
lpszPath[0]='\0';
return FALSE;
}
......@@ -645,18 +650,17 @@ BOOL WINAPI PathStripToRootW(LPWSTR lpszPath)
TRACE("%s\n", debugstr_w(lpszPath));
/* X:\ */
if (lpszPath[1]==':' && lpszPath[2]=='\\')
if (lpszPath[1]==':' )
{
lpszPath[3]='\0';
return TRUE;
if(lpszPath[2]=='\\')
{
lpszPath[3]='\0';
return TRUE;
}
lpszPath[2]='\0';
return FALSE;
}
/* "\" */
if (lpszPath[0]=='\\')
{
lpszPath[1]='\0';
return TRUE;
}
/* UNC "\\<computer>\<share>" */
if (lpszPath[0]=='\\' && lpszPath[1]=='\\')
......@@ -675,6 +679,14 @@ BOOL WINAPI PathStripToRootW(LPWSTR lpszPath)
}
}
/* "\" */
if (lpszPath[0]=='\\')
{
lpszPath[1]='\0';
return TRUE;
}
lpszPath[0]=(WCHAR)'\0';
return FALSE;
}
......@@ -690,32 +702,54 @@ BOOL WINAPI PathStripToRootAW(LPVOID lpszPath)
/*************************************************************************
* PathRemoveArgsA [SHLWAPI.@]
*
* NOTES
* returns pointer to last character, not void
*/
void WINAPI PathRemoveArgsA(LPSTR lpszPath)
LPSTR WINAPI PathRemoveArgsA(LPSTR lpszPath)
{
LPSTR lpszArgs = PathGetArgsA(lpszPath);
TRACE("%s\n", lpszPath);
BOOL qflag = FALSE;
LPSTR pPos = lpszPath;
TRACE("%s\n",lpszPath);
if (lpszArgs) *(--lpszArgs)='\0';
while (*lpszPath)
{
if (!qflag && *lpszPath==' ') break;
if (*lpszPath=='"') qflag=!qflag;
lpszPath++;
if (*lpszPath) pPos++;
};
*lpszPath = '\0';
return pPos;
}
/*************************************************************************
* PathRemoveArgsW [SHLWAPI.@]
*/
void WINAPI PathRemoveArgsW(LPWSTR lpszPath)
LPWSTR WINAPI PathRemoveArgsW(LPWSTR lpszPath)
{
LPWSTR lpszArgs = PathGetArgsW(lpszPath);
BOOL qflag = FALSE;
LPWSTR pPos = lpszPath;
TRACE("%s\n", debugstr_w(lpszPath));
if (lpszArgs) *(--lpszArgs)='\0';
while (*lpszPath)
{
if (!qflag && *lpszPath==(WCHAR)' ') break;
if (*lpszPath==(WCHAR)'"') qflag=!qflag;
lpszPath++;
if (*lpszPath) pPos++;
};
*lpszPath = (WCHAR)'\0';
return pPos;
}
/*************************************************************************
* PathRemoveArgsAW [SHELL32.251]
*/
void WINAPI PathRemoveArgsAW(LPVOID lpszPath)
LPVOID WINAPI PathRemoveArgsAW(LPVOID lpszPath)
{
if (VERSION_OsIsUnicode())
return PathRemoveArgsW(lpszPath);
......@@ -764,6 +798,8 @@ void WINAPI PathRemoveExtensionAW(LPVOID lpszPath)
* Otherwise
* the address of the last character is returned.
*
* FIXME
* "c:\": keep backslash
*/
LPSTR WINAPI PathRemoveBackslashA( LPSTR lpszPath )
{
......@@ -878,27 +914,48 @@ LPVOID WINAPI PathRemoveBlanksAW(LPVOID str)
/*************************************************************************
* PathQuoteSpacesA [SHLWAPI.@]
*
* NOTES
*/
LPSTR WINAPI PathQuoteSpacesA(LPCSTR lpszPath)
LPSTR WINAPI PathQuoteSpacesA(LPSTR lpszPath)
{
FIXME("%s\n",lpszPath);
TRACE("%s\n",lpszPath);
if(StrChrA(lpszPath,' '))
{
int len = strlen(lpszPath);
RtlMoveMemory(lpszPath+1, lpszPath, len);
*(lpszPath++) = '"';
lpszPath += len;
*(lpszPath++) = '"';
*(lpszPath) = '\0';
return --lpszPath;
}
return 0;
}
/*************************************************************************
* PathQuoteSpacesW [SHLWAPI.@]
*/
LPWSTR WINAPI PathQuoteSpacesW(LPCWSTR lpszPath)
LPWSTR WINAPI PathQuoteSpacesW(LPWSTR lpszPath)
{
FIXME("%s\n",debugstr_w(lpszPath));
return 0;
TRACE("%s\n",debugstr_w(lpszPath));
if(StrChrW(lpszPath,' '))
{
int len = lstrlenW(lpszPath);
RtlMoveMemory(lpszPath+1, lpszPath, len*sizeof(WCHAR));
*(lpszPath++) = '"';
lpszPath += len;
*(lpszPath++) = '"';
*(lpszPath) = '\0';
return --lpszPath;
}
return 0;
}
/*************************************************************************
* PathQuoteSpacesAW [SHELL32.55]
*/
LPVOID WINAPI PathQuoteSpacesAW (LPCVOID lpszPath)
LPVOID WINAPI PathQuoteSpacesAW (LPVOID lpszPath)
{
if(VERSION_OsIsUnicode())
return PathQuoteSpacesW(lpszPath);
......@@ -969,6 +1026,8 @@ int WINAPI PathParseIconLocationA(LPSTR lpszPath)
lpstrComma[0]='\0';
/* return atoi(&lpstrComma[1]); FIXME */
}
PathUnquoteSpacesA(lpszPath);
return 0;
}
......@@ -986,6 +1045,7 @@ int WINAPI PathParseIconLocationW(LPWSTR lpszPath)
lpstrComma[0]='\0';
/* return _wtoi(&lpstrComma[1]); FIXME */
}
PathUnquoteSpacesW(lpszPath);
return 0;
}
......@@ -1092,7 +1152,7 @@ BOOL WINAPI PathIsRootA(LPCSTR lpszPath)
{
if (*(lpszPath++)=='\\') foundbackslash++;
}
if (foundbackslash==1)
if (foundbackslash <= 1)
return TRUE;
}
return FALSE;
......@@ -1122,7 +1182,7 @@ BOOL WINAPI PathIsRootW(LPCWSTR lpszPath)
{
if (*(lpszPath++)=='\\') foundbackslash++;
}
if (foundbackslash==1)
if (foundbackslash <= 1)
return TRUE;
}
return FALSE;
......@@ -1480,7 +1540,7 @@ BOOL WINAPI PathIsURLA(LPCSTR lpstrPath)
while(SupportedProtocol[i])
{
if (iSize == strlen(SupportedProtocol[i]))
if(!strncasecmp(lpstrPath, SupportedProtocol[i], iSize));
if(!strncasecmp(lpstrPath, SupportedProtocol[i], iSize))
return TRUE;
i++;
}
......@@ -1510,7 +1570,7 @@ BOOL WINAPI PathIsURLW(LPCWSTR lpstrPath)
while(SupportedProtocol[i])
{
if (iSize == strlenW(SupportedProtocol[i]))
if(!strncmpiW(lpstrPath, SupportedProtocol[i], iSize));
if(!strncmpiW(lpstrPath, SupportedProtocol[i], iSize))
return TRUE;
i++;
}
......@@ -1987,11 +2047,21 @@ BOOL WINAPI SHGetSpecialFolderPathA (
}
RegCloseKey(hKey);
if (bCreate && CreateDirectoryA(szPath,NULL))
/* if we don't care about existing directorys we are ready */
if(csidl & CSIDL_FLAG_DONT_VERIFY) return TRUE;
if (PathFileExistsA(szPath)) return TRUE;
/* not existing but we not allowed to create it */
if (!bCreate) return FALSE;
if (!CreateDirectoryA(szPath,NULL))
{
MESSAGE("Created not existing system directory '%s'\n", szPath);
ERR("Failed to create directory '%s'.\n", szPath);
return FALSE;
}
MESSAGE("Created not existing system directory '%s'\n", szPath);
return TRUE;
}
......@@ -2032,6 +2102,40 @@ BOOL WINAPI SHGetSpecialFolderPathAW (
}
/*************************************************************************
* SHGetFolderPathA [SHFOLDER.@]
*/
HRESULT SHGetFolderPathA(
HWND hwndOwner,
int nFolder,
HANDLE hToken, /* FIXME: get paths for specific user */
DWORD dwFlags, /* FIXME: SHGFP_TYPE_CURRENT|SHGFP_TYPE_DEFAULT */
LPSTR pszPath)
{
return (SHGetSpecialFolderPathA(
hwndOwner,
pszPath,
CSIDL_FOLDER_MASK & nFolder,
CSIDL_FLAG_CREATE & nFolder )) ? S_OK : E_FAIL;
}
/*************************************************************************
* SHGetFolderPathW [SHFOLDER.@]
*/
HRESULT SHGetFolderPathW(
HWND hwndOwner,
int nFolder,
HANDLE hToken,
DWORD dwFlags,
LPWSTR pszPath)
{
return (SHGetSpecialFolderPathW(
hwndOwner,
pszPath,
CSIDL_FOLDER_MASK & nFolder,
CSIDL_FLAG_CREATE & nFolder )) ? S_OK : E_FAIL;
}
/*************************************************************************
* PathCanonicalizeA
*
* FIXME
......@@ -2178,16 +2282,30 @@ BOOL WINAPI PathCanonicalizeW(LPWSTR pszBuf, LPCWSTR pszPath)
/*************************************************************************
* PathFindNextComponentA
*
* Windows returns a pointer NULL (BO 000605)
*/
* NOTES
* special cases:
* "" null
* aa "" (pointer to traling NULL)
* aa\ "" (pointer to traling NULL)
* aa\\ "" (pointer to traling NULL)
* aa\\bb bb
* aa\\\bb \bb
* c:\aa\ "aa\"
* \\aa aa
* \\aa\b aa\b
*/
LPSTR WINAPI PathFindNextComponentA(LPCSTR pszPath)
{
while( *pszPath )
{
if(*pszPath++=='\\')
return (LPSTR) pszPath;
}
return (LPSTR) pszPath;
LPSTR pos;
TRACE("%s\n", pszPath);
if(!pszPath || !*pszPath) return NULL;
if(!(pos = StrChrA(pszPath, '\\')))
return (LPSTR) pszPath + strlen(pszPath);
pos++;
if(pos[0] == '\\') pos++;
return pos;
}
/*************************************************************************
......@@ -2195,12 +2313,16 @@ LPSTR WINAPI PathFindNextComponentA(LPCSTR pszPath)
*/
LPWSTR WINAPI PathFindNextComponentW(LPCWSTR pszPath)
{
while( *pszPath )
{
if(*pszPath++=='\\')
return (LPWSTR) pszPath;
}
return (LPWSTR) pszPath;
LPWSTR pos;
TRACE("%s\n", debugstr_w(pszPath));
if(!pszPath || !*pszPath) return NULL;
if (!(pos = StrChrW(pszPath, '\\')))
return (LPWSTR) pszPath + lstrlenW(pszPath);
pos++;
if(pos[0] == '\\') pos++;
return pos;
}
/*************************************************************************
......@@ -2332,4 +2454,29 @@ BOOL WINAPI PathMakePrettyW(
{
FIXME("%s\n", debugstr_w(lpPath));
return TRUE;
}
/*************************************************************************
* PathCommonPrefixA
*/
int WINAPI PathCommonPrefixA(
LPCSTR pszFile1,
LPCSTR pszFile2,
LPSTR achPath)
{
FIXME("%s %s %p\n", pszFile1, pszFile2, achPath);
return 0;
}
/*************************************************************************
* PathCommonPrefixW
*/
int WINAPI PathCommonPrefixW(
LPCWSTR pszFile1,
LPCWSTR pszFile2,
LPWSTR achPath)
{
FIXME("%s %s %p\n", debugstr_w(pszFile1), debugstr_w(pszFile2),achPath );
return 0;
}
......@@ -126,7 +126,7 @@ HRESULT WINAPI StrRetToBufW (LPSTRRET src, LPITEMIDLIST pidl, LPWSTR dest, DWORD
*/
LPSTR WINAPI StrChrA (LPCSTR str, INT c)
{
TRACE("%s %i stub\n", str,c);
TRACE("%s %i\n", str,c);
return strchr(str, c);
}
......
name shfolder
type win32
import advapi32
@ stdcall SHGetFolderPathA(long long long long ptr)SHGetFolderPathA
@ stdcall SHGetFolderPathW(long long long long ptr)SHGetFolderPathW
......@@ -465,8 +465,8 @@ type win32
@ stdcall PathCanonicalizeW (ptr wstr) PathCanonicalizeW
@ stdcall PathCombineA (ptr ptr ptr) PathCombineA
@ stdcall PathCombineW (ptr ptr ptr) PathCombineW
@ stub PathCommonPrefixA
@ stub PathCommonPrefixW
@ stdcall PathCommonPrefixA(str str ptr)PathCommonPrefixA
@ stdcall PathCommonPrefixW(wstr wstr ptr)PathCommonPrefixW
@ stub PathCompactPathA
@ stub PathCompactPathExA
@ stub PathCompactPathExW
......
......@@ -85,44 +85,9 @@ BOOL WINAPI SHGetPathFromIDListW (LPCITEMIDLIST pidl,LPWSTR pszPath);
DWORD WINAPI SHAddToRecentDocs(UINT uFlags, LPCVOID pv);
/****************************************************************************
* SHGetSpecialFolderLocation API
*/
HRESULT WINAPI SHGetSpecialFolderLocation(HWND, INT, LPITEMIDLIST *);
/****************************************************************************
* other functions
*/
#define CSIDL_DESKTOP 0x0000
#define CSIDL_PROGRAMS 0x0002
#define CSIDL_CONTROLS 0x0003
#define CSIDL_PRINTERS 0x0004
#define CSIDL_PERSONAL 0x0005
#define CSIDL_FAVORITES 0x0006
#define CSIDL_STARTUP 0x0007
#define CSIDL_RECENT 0x0008
#define CSIDL_SENDTO 0x0009
#define CSIDL_BITBUCKET 0x000a
#define CSIDL_STARTMENU 0x000b
#define CSIDL_DESKTOPDIRECTORY 0x0010
#define CSIDL_DRIVES 0x0011
#define CSIDL_NETWORK 0x0012
#define CSIDL_NETHOOD 0x0013
#define CSIDL_FONTS 0x0014
#define CSIDL_TEMPLATES 0x0015
#define CSIDL_COMMON_STARTMENU 0x0016
#define CSIDL_COMMON_PROGRAMS 0X0017
#define CSIDL_COMMON_STARTUP 0x0018
#define CSIDL_COMMON_DESKTOPDIRECTORY 0x0019
#define CSIDL_APPDATA 0x001a
#define CSIDL_PRINTHOOD 0x001b
#define CSIDL_ALTSTARTUP 0x001d
#define CSIDL_COMMON_ALTSTARTUP 0x001e
#define CSIDL_COMMON_FAVORITES 0x001f
#define CSIDL_INTERNET_CACHE 0x0020
#define CSIDL_COOKIES 0x0021
#define CSIDL_HISTORY 0x0022
#ifdef __cplusplus
} /* extern "C" */
#endif /* defined(__cplusplus) */
......
......@@ -422,7 +422,64 @@ void WINAPI SHChangeNotifyA(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID
void WINAPI SHChangeNotifyW(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2);
#define SHChangeNotify WINELIB_NAME_AW(SHChangeNotify)
/**********************************************************************/
/****************************************************************************
* SHGetSpecialFolderLocation API
*/
HRESULT WINAPI SHGetSpecialFolderLocation(HWND, INT, LPITEMIDLIST *);
#define CSIDL_DESKTOP 0x0000
#define CSIDL_INTERNET 0x0001
#define CSIDL_PROGRAMS 0x0002
#define CSIDL_CONTROLS 0x0003
#define CSIDL_PRINTERS 0x0004
#define CSIDL_PERSONAL 0x0005
#define CSIDL_FAVORITES 0x0006
#define CSIDL_STARTUP 0x0007
#define CSIDL_RECENT 0x0008
#define CSIDL_SENDTO 0x0009
#define CSIDL_BITBUCKET 0x000a
#define CSIDL_STARTMENU 0x000b
#define CSIDL_DESKTOPDIRECTORY 0x0010
#define CSIDL_DRIVES 0x0011
#define CSIDL_NETWORK 0x0012
#define CSIDL_NETHOOD 0x0013
#define CSIDL_FONTS 0x0014
#define CSIDL_TEMPLATES 0x0015
#define CSIDL_COMMON_STARTMENU 0x0016
#define CSIDL_COMMON_PROGRAMS 0X0017
#define CSIDL_COMMON_STARTUP 0x0018
#define CSIDL_COMMON_DESKTOPDIRECTORY 0x0019
#define CSIDL_APPDATA 0x001a
#define CSIDL_PRINTHOOD 0x001b
#define CSIDL_ALTSTARTUP 0x001d
#define CSIDL_COMMON_ALTSTARTUP 0x001e
#define CSIDL_COMMON_FAVORITES 0x001f
#define CSIDL_INTERNET_CACHE 0x0020
#define CSIDL_COOKIES 0x0021
#define CSIDL_HISTORY 0x0022
#define CSIDL_COMMON_APPDATA 0x0023
#define CSIDL_WINDOWS 0x0024
#define CSIDL_SYSTEM 0x0025
#define CSIDL_PROGRAM_FILES 0x0026
#define CSIDL_MYPICTURES 0x0027
#define CSIDL_PROFILE 0x0028
#define CSIDL_SYSTEMX86 0x0029
#define CSIDL_PROGRAM_FILESX86 0x002a
#define CSIDL_PROGRAM_FILES_COMMON 0x002b
#define CSIDL_PROGRAM_FILES_COMMONX86 0x002c
#define CSIDL_COMMON_TEMPLATES 0x002d
#define CSIDL_COMMON_DOCUMENTS 0x002e
#define CSIDL_COMMON_ADMINTOOLS 0x002f
#define CSIDL_ADMINTOOLS 0x0030
#define CSIDL_CONNECTIONS 0x0031
#define CSIDL_FOLDER_MASK 0x00ff
#define CSIDL_FLAG_DONT_VERIFY 0x4000
#define CSIDL_FLAG_CREATE 0x8000
#define CSIDL_FLAG_MASK 0xff00
#ifdef __cplusplus
} /* extern "C" */
......
......@@ -37,6 +37,10 @@ BOOL WINAPI PathStripToRootA(LPSTR pszPath);
BOOL WINAPI PathStripToRootW(LPWSTR pszPath);
#define PathStripToRoot WINELIB_NAME_AW(PathStripToRoot)
LPSTR WINAPI StrChrA(LPCSTR lpStart, WORD wMatch);
LPWSTR WINAPI StrChrW(LPCWSTR lpStart, WCHAR wMatch);
#define StrChr WINELIB_NAME_AW(StrChr)
#ifdef __cplusplus
} /* extern "C" */
#endif /* defined(__cplusplus) */
......
......@@ -588,10 +588,10 @@ LPWSTR WINAPI PathRemoveBlanksW(LPWSTR lpszPath);
#define PathRemoveBlanks WINELIB_NAME_AW(PathRemoveBlanks)
LPVOID WINAPI PathRemoveBlanksAW(LPVOID lpszPath);
LPSTR WINAPI PathQuoteSpacesA(LPCSTR path);
LPWSTR WINAPI PathQuoteSpacesW(LPCWSTR path);
LPSTR WINAPI PathQuoteSpacesA(LPSTR path);
LPWSTR WINAPI PathQuoteSpacesW(LPWSTR path);
#define PathQuoteSpaces WINELIB_NAME_AW(PathQuoteSpaces)
LPVOID WINAPI PathQuoteSpacesAW(LPCVOID path);
LPVOID WINAPI PathQuoteSpacesAW(LPVOID path);
void WINAPI PathUnquoteSpaces(LPSTR lpszPath);
......
......@@ -60,6 +60,7 @@ static struct tagDllOverride {
{"glide2x", "so,native"},
{"odbc32", "builtin"},
{"opengl32", "builtin,native"},
{"shfolder", "builtin,native"},
{NULL,NULL},
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment