forked from Mirrors/wine-wine
Change SHCreateDirectory and Win32DeleteFile to be Unicode or ANSI depending
on OS version. Add ShCreateDirectoryEx API.oldstable
parent
c306f35197
commit
d11efe88b9
|
@ -151,8 +151,8 @@
|
||||||
161 stdcall SHRunControlPanel (long long) SHRunControlPanel
|
161 stdcall SHRunControlPanel (long long) SHRunControlPanel
|
||||||
162 stdcall SHSimpleIDListFromPath (ptr) SHSimpleIDListFromPathAW
|
162 stdcall SHSimpleIDListFromPath (ptr) SHSimpleIDListFromPathAW
|
||||||
163 stdcall StrToOleStr (wstr str) StrToOleStrAW
|
163 stdcall StrToOleStr (wstr str) StrToOleStrAW
|
||||||
164 stdcall Win32DeleteFile(str) Win32DeleteFile
|
164 stdcall Win32DeleteFile(str) Win32DeleteFileAW
|
||||||
165 stdcall SHCreateDirectory(long long) SHCreateDirectory
|
165 stdcall SHCreateDirectory(long ptr) SHCreateDirectory
|
||||||
166 stdcall CallCPLEntry16(long long long long long long) CallCPLEntry16
|
166 stdcall CallCPLEntry16(long long long long long long) CallCPLEntry16
|
||||||
167 stdcall SHAddFromPropSheetExtArray(long long long) SHAddFromPropSheetExtArray
|
167 stdcall SHAddFromPropSheetExtArray(long long long) SHAddFromPropSheetExtArray
|
||||||
168 stdcall SHCreatePropSheetExtArray(long str long) SHCreatePropSheetExtArray
|
168 stdcall SHCreatePropSheetExtArray(long str long) SHCreatePropSheetExtArray
|
||||||
|
@ -355,6 +355,8 @@
|
||||||
@ stdcall SHBrowseForFolderA(ptr) SHBrowseForFolderA
|
@ stdcall SHBrowseForFolderA(ptr) SHBrowseForFolderA
|
||||||
@ stdcall SHBrowseForFolderW(ptr) SHBrowseForFolderW
|
@ stdcall SHBrowseForFolderW(ptr) SHBrowseForFolderW
|
||||||
@ stdcall SHChangeNotify (long long ptr ptr) SHChangeNotify
|
@ stdcall SHChangeNotify (long long ptr ptr) SHChangeNotify
|
||||||
|
@ stdcall SHCreateDirectoryExA(long str ptr) SHCreateDirectoryExA
|
||||||
|
@ stdcall SHCreateDirectoryExW(long wstr ptr) SHCreateDirectoryExW
|
||||||
@ stub ShellHookProc
|
@ stub ShellHookProc
|
||||||
@ stub SHEmptyRecycleBinA@12
|
@ stub SHEmptyRecycleBinA@12
|
||||||
@ stub SHEmptyRecycleBinW@12
|
@ stub SHEmptyRecycleBinW@12
|
||||||
|
|
|
@ -129,33 +129,61 @@ BOOL SHELL_DeleteFileA(LPCSTR pszFile, BOOL bShowUI)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* SHCreateDirectory [SHELL32.165]
|
* SHCreateDirectory [SHELL32.165]
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
* exported by ordinal
|
* exported by ordinal
|
||||||
* not sure about LPSECURITY_ATTRIBUTES
|
* WinNT/2000 exports Unicode
|
||||||
*/
|
*/
|
||||||
DWORD WINAPI SHCreateDirectory(LPSECURITY_ATTRIBUTES sec,LPCSTR path)
|
DWORD WINAPI SHCreateDirectory(HWND hWnd, LPCVOID path)
|
||||||
|
{
|
||||||
|
if (SHELL_OsIsUnicode())
|
||||||
|
return SHCreateDirectoryExW(hWnd, path, NULL);
|
||||||
|
return SHCreateDirectoryExA(hWnd, path, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* SHCreateDirectoryExA [SHELL32.@]
|
||||||
|
*/
|
||||||
|
DWORD WINAPI SHCreateDirectoryExA(HWND hWnd, LPCSTR path, LPSECURITY_ATTRIBUTES sec)
|
||||||
{
|
{
|
||||||
DWORD ret;
|
DWORD ret;
|
||||||
TRACE("(%p,%s)\n",sec,path);
|
TRACE("(%p, %s, %p)\n",hWnd, path, sec);
|
||||||
if ((ret = CreateDirectoryA(path,sec)))
|
if ((ret = CreateDirectoryA(path, sec)))
|
||||||
{
|
{
|
||||||
SHChangeNotify(SHCNE_MKDIR, SHCNF_PATHA, path, NULL);
|
SHChangeNotify(SHCNE_MKDIR, SHCNF_PATHA, path, NULL);
|
||||||
}
|
}
|
||||||
|
else if (hWnd)
|
||||||
|
FIXME("Semi-stub, non zero hWnd should be used as parent for error dialog!");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* SHCreateDirectoryExW [SHELL32.@]
|
||||||
|
*/
|
||||||
|
DWORD WINAPI SHCreateDirectoryExW(HWND hWnd, LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
|
||||||
|
{
|
||||||
|
DWORD ret;
|
||||||
|
TRACE("(%p, %s, %p)\n",hWnd, debugstr_w(path), sec);
|
||||||
|
if ((ret = CreateDirectoryW(path, sec)))
|
||||||
|
{
|
||||||
|
SHChangeNotify(SHCNE_MKDIR, SHCNF_PATHW, path, NULL);
|
||||||
|
}
|
||||||
|
else if (hWnd)
|
||||||
|
FIXME("Semi-stub, non zero hWnd should be used as parent for error dialog!");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* Win32DeleteFile [SHELL32.164]
|
* Win32DeleteFile [SHELL32.164]
|
||||||
*
|
*
|
||||||
* Deletes a file. Also triggers a change notify if one exists.
|
* Deletes a file. Also triggers a change notify if one exists.
|
||||||
*
|
*
|
||||||
* FIXME:
|
* NOTES:
|
||||||
* Verified on Win98 / IE 5 (SHELL32 4.72, March 1999 build) to be ANSI.
|
* Verified on Win98 / IE 5 (SHELL32 4.72, March 1999 build) to be ANSI.
|
||||||
* This is Unicode on NT/2000
|
* This is Unicode on NT/2000
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI Win32DeleteFile(LPSTR fName)
|
static BOOL Win32DeleteFileA(LPCSTR fName)
|
||||||
{
|
{
|
||||||
TRACE("%p(%s)\n", fName, fName);
|
TRACE("%p(%s)\n", fName, fName);
|
||||||
|
|
||||||
|
@ -164,6 +192,22 @@ BOOL WINAPI Win32DeleteFile(LPSTR fName)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static BOOL Win32DeleteFileW(LPCWSTR fName)
|
||||||
|
{
|
||||||
|
TRACE("%p(%s)\n", fName, debugstr_w(fName));
|
||||||
|
|
||||||
|
DeleteFileW(fName);
|
||||||
|
SHChangeNotify(SHCNE_DELETE, SHCNF_PATHW, fName, NULL);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
DWORD WINAPI Win32DeleteFileAW(LPCVOID fName)
|
||||||
|
{
|
||||||
|
if (SHELL_OsIsUnicode())
|
||||||
|
return Win32DeleteFileW(fName);
|
||||||
|
return Win32DeleteFileA(fName);
|
||||||
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* SHELL_FileNamesMatch()
|
* SHELL_FileNamesMatch()
|
||||||
*
|
*
|
||||||
|
@ -269,8 +313,8 @@ DWORD WINAPI SHFileOperationA (LPSHFILEOPSTRUCTA lpFileOp)
|
||||||
char *fromfile;
|
char *fromfile;
|
||||||
int lenPTo;
|
int lenPTo;
|
||||||
if ( ! destisdir) {
|
if ( ! destisdir) {
|
||||||
TRACE(" creating directory %s\n",pTo);
|
TRACE(" creating directory %s\n",pTo);
|
||||||
SHCreateDirectory(NULL,pTo);
|
SHCreateDirectoryExA(NULL, pTo, NULL);
|
||||||
}
|
}
|
||||||
lenPTo = strlen(pTo);
|
lenPTo = strlen(pTo);
|
||||||
while(1) {
|
while(1) {
|
||||||
|
@ -308,7 +352,7 @@ DWORD WINAPI SHFileOperationA (LPSHFILEOPSTRUCTA lpFileOp)
|
||||||
{
|
{
|
||||||
SHFILEOPSTRUCTA shfo;
|
SHFILEOPSTRUCTA shfo;
|
||||||
|
|
||||||
SHCreateDirectory(NULL,pTempTo);
|
SHCreateDirectoryExA(NULL, pTempTo, NULL);
|
||||||
PathAddBackslashA(szTempFrom);
|
PathAddBackslashA(szTempFrom);
|
||||||
strcat(szTempFrom, "*.*");
|
strcat(szTempFrom, "*.*");
|
||||||
szTempFrom[strlen(szTempFrom) + 1] = '\0';
|
szTempFrom[strlen(szTempFrom) + 1] = '\0';
|
||||||
|
@ -343,7 +387,7 @@ DWORD WINAPI SHFileOperationA (LPSHFILEOPSTRUCTA lpFileOp)
|
||||||
pFrom += strlen(pFrom) + 1;
|
pFrom += strlen(pFrom) + 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
while(1) {
|
while (1) {
|
||||||
if(!pFrom[0]) break;
|
if(!pFrom[0]) break;
|
||||||
if(!pTo[0]) break;
|
if(!pTo[0]) break;
|
||||||
TRACE(" From='%s' To='%s'\n", pFrom, pTo);
|
TRACE(" From='%s' To='%s'\n", pFrom, pTo);
|
||||||
|
@ -354,7 +398,7 @@ DWORD WINAPI SHFileOperationA (LPSHFILEOPSTRUCTA lpFileOp)
|
||||||
strcpy( pTempTo, pTo );
|
strcpy( pTempTo, pTo );
|
||||||
PathRemoveFileSpecA(pTempTo);
|
PathRemoveFileSpecA(pTempTo);
|
||||||
TRACE(" Creating Directory '%s'\n", pTempTo);
|
TRACE(" Creating Directory '%s'\n", pTempTo);
|
||||||
SHCreateDirectory(NULL,pTempTo);
|
SHCreateDirectoryExA(NULL, pTempTo, NULL);
|
||||||
HeapFree(GetProcessHeap(), 0, pTempTo);
|
HeapFree(GetProcessHeap(), 0, pTempTo);
|
||||||
}
|
}
|
||||||
if (lpFileOp->wFunc == FO_COPY)
|
if (lpFileOp->wFunc == FO_COPY)
|
||||||
|
@ -480,6 +524,6 @@ BOOL WINAPI IsNetDrive(DWORD drive)
|
||||||
{
|
{
|
||||||
char root[4];
|
char root[4];
|
||||||
strcpy(root, "A:\\");
|
strcpy(root, "A:\\");
|
||||||
root[0] += drive;
|
root[0] += (char)drive;
|
||||||
return (GetDriveTypeA(root) == DRIVE_REMOTE);
|
return (GetDriveTypeA(root) == DRIVE_REMOTE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -497,6 +497,13 @@ VOID WINAPI SHGetSettings(LPSHELLFLAGSTATE lpsfs, DWORD dwMask);
|
||||||
|
|
||||||
void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2);
|
void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2);
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* SHCreateDirectory API
|
||||||
|
*/
|
||||||
|
DWORD WINAPI SHCreateDirectory(HWND, LPCVOID);
|
||||||
|
DWORD WINAPI SHCreateDirectoryExA(HWND, LPCSTR, LPSECURITY_ATTRIBUTES);
|
||||||
|
DWORD WINAPI SHCreateDirectoryExW(HWND, LPCWSTR, LPSECURITY_ATTRIBUTES);
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* SHGetSpecialFolderLocation API
|
* SHGetSpecialFolderLocation API
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue