source: trunk/src/shell32/shlfileop.cpp@ 4032

Last change on this file since 4032 was 4032, checked in by phaller, 25 years ago

Synchronized shell32 with wine

File size: 4.5 KB
Line 
1/*
2 * SHFileOperation
3 */
4/*****************************************************************************
5 * Includes *
6 *****************************************************************************/
7
8#include <stdlib.h>
9#include <string.h>
10#include <odin.h>
11#include <odinwrap.h>
12#include <os2sel.h>
13
14#define ICOM_CINTERFACE 1
15
16#include <string.h>
17#include "debugtools.h"
18#include "shellapi.h"
19#include "shell32_main.h"
20
21#include "shlobj.h"
22#include "shresdef.h"
23#include "wine/undocshell.h"
24
25
26/*****************************************************************************
27 * Local Variables *
28 *****************************************************************************/
29
30ODINDEBUGCHANNEL(shell32-shlfileop)
31
32
33#define ASK_DELETE_FILE 1
34#define ASK_DELETE_FOLDER 2
35#define ASK_DELETE_MULTIPLE_FILE 3
36
37static BOOL SHELL_WarnFolderDelete (int nKindOfDialog, LPCSTR szDir)
38{
39 char szCaption[255], szText[255], szBuffer[MAX_PATH + 256];
40
41 LoadStringA(shell32_hInstance, IDS_DELETEFOLDER_TEXT, szText, sizeof(szText));
42 LoadStringA(shell32_hInstance, IDS_DELETEFOLDER_CAPTION, szCaption, sizeof(szCaption));
43 FormatMessageA(FORMAT_MESSAGE_FROM_STRING|FORMAT_MESSAGE_ARGUMENT_ARRAY,
44 szText, 0, 0, szBuffer, sizeof(szBuffer), (DWORD*)&szDir);
45
46 return (IDOK == MessageBoxA(GetActiveWindow(), szBuffer, szCaption, MB_OKCANCEL | MB_ICONEXCLAMATION));
47}
48
49/**************************************************************************
50 * SHELL_DeleteDirectoryA()
51 *
52 * like rm -r
53 */
54
55BOOL SHELL_DeleteDirectoryA(LPCSTR pszDir, BOOL bShowUI)
56{
57 BOOL ret = FALSE;
58 HANDLE hFind;
59 WIN32_FIND_DATAA wfd;
60 char szTemp[MAX_PATH];
61
62 strcpy(szTemp, pszDir);
63 PathAddBackslashA(szTemp);
64 strcat(szTemp, "*.*");
65
66 if (bShowUI && !SHELL_WarnFolderDelete(ASK_DELETE_FOLDER, pszDir)) return FALSE;
67
68 if(INVALID_HANDLE_VALUE != (hFind = FindFirstFileA(szTemp, &wfd)))
69 {
70 do
71 {
72 if(strcmp(wfd.cFileName, ".") && strcmp(wfd.cFileName, ".."))
73 {
74 strcpy(szTemp, pszDir);
75 PathAddBackslashA(szTemp);
76 strcat(szTemp, wfd.cFileName);
77
78 if(FILE_ATTRIBUTE_DIRECTORY & wfd.dwFileAttributes)
79 SHELL_DeleteDirectoryA(szTemp, FALSE);
80 else
81 DeleteFileA(szTemp);
82 }
83 } while(FindNextFileA(hFind, &wfd));
84
85 FindClose(hFind);
86 ret = RemoveDirectoryA(pszDir);
87 }
88
89 return ret;
90}
91
92/*************************************************************************
93 * SHCreateDirectory [SHELL32.165]
94 *
95 * NOTES
96 * exported by ordinal
97 * not sure about LPSECURITY_ATTRIBUTES
98 */
99DWORD WINAPI SHCreateDirectory(LPSECURITY_ATTRIBUTES sec,LPCSTR path)
100{
101 DWORD ret;
102 TRACE("(%p,%s)\n",sec,path);
103 if ((ret = CreateDirectoryA(path,sec)))
104 {
105 SHChangeNotifyA(SHCNE_MKDIR, SHCNF_PATHA, path, NULL);
106 }
107 return ret;
108}
109
110/************************************************************************
111 * Win32DeleteFile [SHELL32.164]
112 *
113 * Deletes a file. Also triggers a change notify if one exists.
114 *
115 * FIXME:
116 * Verified on Win98 / IE 5 (SHELL32 4.72, March 1999 build) to be
117 * ANSI. Is this Unicode on NT?
118 *
119 */
120
121BOOL WINAPI Win32DeleteFile(LPSTR fName)
122{
123 TRACE("%p(%s)\n", fName, fName);
124
125 DeleteFileA(fName);
126 SHChangeNotifyA(SHCNE_DELETE, SHCNF_PATHA, fName, NULL);
127 return TRUE;
128}
129
130/*************************************************************************
131 * SHFileOperationA [SHELL32.243]
132 *
133 * NOTES
134 * exported by name
135 */
136DWORD WINAPI SHFileOperationA (LPSHFILEOPSTRUCTA lpFileOp)
137{
138 FIXME("(%p):stub.\n", lpFileOp);
139 return 1;
140}
141
142/*************************************************************************
143 * SHFileOperationW [SHELL32.244]
144 *
145 * NOTES
146 * exported by name
147 */
148DWORD WINAPI SHFileOperationW (LPSHFILEOPSTRUCTW lpFileOp)
149{
150 FIXME("(%p):stub.\n", lpFileOp);
151 return 1;
152}
153
154/*************************************************************************
155 * SHFileOperation [SHELL32.242]
156 *
157 */
158DWORD WINAPI SHFileOperationAW(LPVOID lpFileOp)
159{
160 if (SHELL_OsIsUnicode())
161 return SHFileOperationW((LPSHFILEOPSTRUCTW)lpFileOp);
162 return SHFileOperationA((LPSHFILEOPSTRUCTA)lpFileOp);
163}
164
165/*************************************************************************
166 * SheGetDirW [SHELL32.281]
167 *
168 */
169HRESULT WINAPI SheGetDirW(LPWSTR u, LPWSTR v)
170{ FIXME("%p %p stub\n",u,v);
171 return 0;
172}
173
174/*************************************************************************
175 * SheChangeDirW [SHELL32.274]
176 *
177 */
178HRESULT WINAPI SheChangeDirW(LPWSTR u)
179{ FIXME("(%s),stub\n",debugstr_w(u));
180 return 0;
181}
182
Note: See TracBrowser for help on using the repository browser.