ReactOS  0.4.15-dev-5112-g22d8c0f
shlfileop.cpp File Reference
#include "precomp.h"
Include dependency graph for shlfileop.cpp:

Go to the source code of this file.

Classes

struct  FILE_OPERATION
 
struct  FILE_ENTRY
 
struct  FILE_LIST
 
struct  confirm_msg_info
 
struct  SHELL_ConfirmIDstruc
 

Macros

#define IsAttrib(x, y)   ((INVALID_FILE_ATTRIBUTES != (x)) && ((x) & (y)))
 
#define IsAttribFile(x)   (!((x) & FILE_ATTRIBUTE_DIRECTORY))
 
#define IsAttribDir(x)   IsAttrib(x, FILE_ATTRIBUTE_DIRECTORY)
 
#define IsDotDir(x)   ((x[0] == '.') && ((x[1] == 0) || ((x[1] == '.') && (x[2] == 0))))
 
#define FO_MASK   0xF
 
#define NEW_FILENAME_ON_COPY_TRIES   100
 
#define ERROR_SHELL_INTERNAL_FILE_NOT_FOUND   1026
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (shell)
 
static DWORD SHNotifyCreateDirectoryW (LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
 
static DWORD SHNotifyRemoveDirectoryW (LPCWSTR path)
 
static DWORD SHNotifyDeleteFileW (FILE_OPERATION *op, LPCWSTR path)
 
static DWORD SHNotifyMoveFileW (FILE_OPERATION *op, LPCWSTR src, LPCWSTR dest, BOOL isdir)
 
static DWORD SHNotifyCopyFileW (FILE_OPERATION *op, LPCWSTR src, LPCWSTR dest, BOOL bFailIfExists)
 
static DWORD SHFindAttrW (LPCWSTR pName, BOOL fileOnly)
 
static HRESULT copy_files (FILE_OPERATION *op, BOOL multiDest, const FILE_LIST *flFrom, FILE_LIST *flTo)
 
static DWORD move_files (FILE_OPERATION *op, BOOL multiDest, const FILE_LIST *flFrom, const FILE_LIST *flTo)
 
DWORD WINAPI _FileOpCountManager (FILE_OPERATION *op, const FILE_LIST *flFrom)
 
static BOOL _FileOpCount (FILE_OPERATION *op, LPWSTR pwszBuf, BOOL bFolder, DWORD *ticks)
 
static void confirm_msg_move_button (HWND hDlg, INT iId, INT *xPos, INT yOffset, BOOL bShow)
 
static INT_PTR ConfirmMsgBox_Paint (HWND hDlg)
 
static INT_PTR ConfirmMsgBox_Init (HWND hDlg, LPARAM lParam)
 
static INT_PTR CALLBACK ConfirmMsgBoxProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
int SHELL_ConfirmMsgBox (HWND hWnd, LPWSTR lpszText, LPWSTR lpszCaption, HICON hIcon, BOOL bYesToAll)
 
static BOOL SHELL_ConfirmIDs (int nKindOfDialog, SHELL_ConfirmIDstruc *ids)
 
static BOOL SHELL_ConfirmDialogW (HWND hWnd, int nKindOfDialog, LPCWSTR szDir, FILE_OPERATION *op)
 
BOOL SHELL_ConfirmYesNoW (HWND hWnd, int nKindOfDialog, LPCWSTR szDir)
 
static DWORD SHELL32_AnsiToUnicodeBuf (LPCSTR aPath, LPWSTR *wPath, DWORD minChars)
 
static void SHELL32_FreeUnicodeBuf (LPWSTR wPath)
 
EXTERN_C HRESULT WINAPI SHIsFileAvailableOffline (LPCWSTR path, LPDWORD status)
 
BOOL SHELL_DeleteDirectoryW (FILE_OPERATION *op, LPCWSTR pszDir, BOOL bShowUI)
 
EXTERN_C BOOL WINAPI Win32CreateDirectoryW (LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
 
EXTERN_C BOOL WINAPI Win32RemoveDirectoryW (LPCWSTR path)
 
static void _SetOperationTitle (FILE_OPERATION *op)
 
static void _SetOperationTexts (FILE_OPERATION *op, LPCWSTR src, LPCWSTR dest)
 
DWORD CALLBACK SHCopyProgressRoutine (LARGE_INTEGER TotalFileSize, LARGE_INTEGER TotalBytesTransferred, LARGE_INTEGER StreamSize, LARGE_INTEGER StreamBytesTransferred, DWORD dwStreamNumber, DWORD dwCallbackReason, HANDLE hSourceFile, HANDLE hDestinationFile, LPVOID lpData)
 
EXTERN_C DWORD WINAPI Win32DeleteFileW (LPCWSTR path)
 
static BOOL SHIsCdRom (LPCWSTR path)
 
int WINAPI SHCreateDirectory (HWND hWnd, LPCWSTR path)
 
int WINAPI SHCreateDirectoryExA (HWND hWnd, LPCSTR path, LPSECURITY_ATTRIBUTES sec)
 
int WINAPI SHCreateDirectoryExW (HWND hWnd, LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
 
static DWORD _ConvertAtoW (PCSTR strSrc, PCWSTR *pStrDest, BOOL isList)
 
int WINAPI SHFileOperationA (LPSHFILEOPSTRUCTA lpFileOp)
 
static void __inline grow_list (FILE_LIST *list)
 
static void add_file_to_entry (FILE_ENTRY *feFile, LPCWSTR szFile)
 
static LPWSTR wildcard_to_file (LPCWSTR szWildCard, LPCWSTR szFileName)
 
static void parse_wildcard_files (FILE_LIST *flList, LPCWSTR szFile, LPDWORD pdwListIndex)
 
static HRESULT parse_file_list (FILE_LIST *flList, LPCWSTR szFiles)
 
static void destroy_file_list (FILE_LIST *flList)
 
static CStringW try_find_new_name (LPCWSTR szDestPath)
 
static void copy_dir_to_dir (FILE_OPERATION *op, const FILE_ENTRY *feFrom, LPCWSTR szDestPath)
 
static BOOL copy_file_to_file (FILE_OPERATION *op, const WCHAR *szFrom, const WCHAR *szTo)
 
static void copy_to_dir (FILE_OPERATION *op, const FILE_ENTRY *feFrom, const FILE_ENTRY *feTo)
 
static void create_dest_dirs (LPCWSTR szDestDir)
 
static BOOL confirm_delete_list (HWND hWnd, DWORD fFlags, BOOL fTrash, const FILE_LIST *flFrom)
 
static HRESULT delete_files (FILE_OPERATION *op, const FILE_LIST *flFrom)
 
static void move_dir_to_dir (FILE_OPERATION *op, const FILE_ENTRY *feFrom, LPCWSTR szDestPath)
 
static void move_to_dir (FILE_OPERATION *op, const FILE_ENTRY *feFrom, const FILE_ENTRY *feTo)
 
static HRESULT rename_files (FILE_OPERATION *op, const FILE_LIST *flFrom, const FILE_LIST *flTo)
 
static void check_flags (FILEOP_FLAGS fFlags)
 
int WINAPI SHFileOperationW (LPSHFILEOPSTRUCTW lpFileOp)
 
static int CALLBACK _DestroyCallback (void *p, void *pData)
 
void WINAPI SHFreeNameMappings (HANDLE hNameMapping)
 
EXTERN_C DWORD WINAPI SheGetDirA (DWORD drive, LPSTR buffer)
 
EXTERN_C DWORD WINAPI SheGetDirW (DWORD drive, LPWSTR buffer)
 
EXTERN_C DWORD WINAPI SheChangeDirA (LPSTR path)
 
EXTERN_C DWORD WINAPI SheChangeDirW (LPWSTR path)
 
EXTERN_C int WINAPI IsNetDrive (int drive)
 
EXTERN_C INT WINAPI RealDriveType (INT drive, BOOL bQueryNet)
 
EXTERN_C HRESULT WINAPI SHPathPrepareForWriteW (HWND hwnd, IUnknown *modless, LPCWSTR path, DWORD flags)
 
EXTERN_C HRESULT WINAPI SHPathPrepareForWriteA (HWND hwnd, IUnknown *modless, LPCSTR path, DWORD flags)
 

Macro Definition Documentation

◆ ERROR_SHELL_INTERNAL_FILE_NOT_FOUND

#define ERROR_SHELL_INTERNAL_FILE_NOT_FOUND   1026

Definition at line 50 of file shlfileop.cpp.

◆ FO_MASK

#define FO_MASK   0xF

Definition at line 34 of file shlfileop.cpp.

◆ IsAttrib

#define IsAttrib (   x,
  y 
)    ((INVALID_FILE_ATTRIBUTES != (x)) && ((x) & (y)))

Definition at line 29 of file shlfileop.cpp.

◆ IsAttribDir

#define IsAttribDir (   x)    IsAttrib(x, FILE_ATTRIBUTE_DIRECTORY)

Definition at line 31 of file shlfileop.cpp.

◆ IsAttribFile

#define IsAttribFile (   x)    (!((x) & FILE_ATTRIBUTE_DIRECTORY))

Definition at line 30 of file shlfileop.cpp.

◆ IsDotDir

#define IsDotDir (   x)    ((x[0] == '.') && ((x[1] == 0) || ((x[1] == '.') && (x[2] == 0))))

Definition at line 32 of file shlfileop.cpp.

◆ NEW_FILENAME_ON_COPY_TRIES

#define NEW_FILENAME_ON_COPY_TRIES   100

Definition at line 36 of file shlfileop.cpp.

Function Documentation

◆ _ConvertAtoW()

static DWORD _ConvertAtoW ( PCSTR  strSrc,
PCWSTR pStrDest,
BOOL  isList 
)
static

Definition at line 1007 of file shlfileop.cpp.

1008 {
1009  *pStrDest = NULL;
1010 
1011  // If the input is null, nothing to convert.
1012  if (!strSrc)
1013  return 0;
1014 
1015  // Measure the total size, depending on if it's a zero-terminated list.
1016  int sizeA = 0;
1017  if (isList)
1018  {
1019  PCSTR tmpSrc = strSrc;
1020  int size;
1021  do
1022  {
1023  size = lstrlenA(tmpSrc) + 1;
1024  sizeA += size;
1025  tmpSrc += size;
1026  } while (size != 1);
1027  }
1028  else
1029  {
1030  sizeA = lstrlenA(strSrc) + 1;
1031  }
1032 
1033  // Measure the needed allocation size.
1034  int sizeW = MultiByteToWideChar(CP_ACP, 0, strSrc, sizeA, NULL, 0);
1035  if (!sizeW)
1036  return GetLastError();
1037 
1038  PWSTR strDest = (PWSTR) HeapAlloc(GetProcessHeap(), 0, sizeW * sizeof(WCHAR));
1039  if (!strDest)
1040  return ERROR_OUTOFMEMORY;
1041 
1042  int err = MultiByteToWideChar(CP_ACP, 0, strSrc, sizeA, strDest, sizeW);
1043  if (!err)
1044  {
1045  HeapFree(GetProcessHeap(), 0, strDest);
1046  return GetLastError();
1047  }
1048 
1049  *pStrDest = strDest;
1050  return 0;
1051 }
uint16_t * PWSTR
Definition: typedefs.h:56
#define CP_ACP
Definition: compat.h:109
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
static const WCHAR sizeW[]
Definition: editor.c:79
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define err(...)
int WINAPI lstrlenA(LPCSTR lpString)
Definition: lstring.c:145
#define NULL
Definition: types.h:112
#define MultiByteToWideChar
Definition: compat.h:110
const char * PCSTR
Definition: typedefs.h:52
#define HeapFree(x, y, z)
Definition: compat.h:594
#define ERROR_OUTOFMEMORY
Definition: deptool.c:13

Referenced by SHFileOperationA().

◆ _DestroyCallback()

static int CALLBACK _DestroyCallback ( void p,
void pData 
)
static

Definition at line 2070 of file shlfileop.cpp.

2071 {
2073 
2074  SHFree(lp->pszOldPath);
2075  SHFree(lp->pszNewPath);
2076 
2077  return TRUE;
2078 }
#define TRUE
Definition: types.h:120
LPWSTR pszNewPath
Definition: shellapi.h:389
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:326
LPWSTR pszOldPath
Definition: shellapi.h:388
GLfloat GLfloat p
Definition: glext.h:8902

Referenced by SHFreeNameMappings().

◆ _FileOpCount()

static BOOL _FileOpCount ( FILE_OPERATION op,
LPWSTR  pwszBuf,
BOOL  bFolder,
DWORD ticks 
)
static

Definition at line 2324 of file shlfileop.cpp.

2325 {
2326  /* Find filename position */
2327  UINT cchBuf = wcslen(pwszBuf);
2328  WCHAR *pwszFilename = pwszBuf + cchBuf;
2329  size_t cchFilenameMax = MAX_PATH - cchBuf;
2330  if (!cchFilenameMax)
2331  return FALSE;
2332 
2333  if (bFolder) {
2334  *(pwszFilename++) = '\\';
2335  --cchFilenameMax;
2336  /* Find all files, FIXME: shouldn't be "*"? */
2337  StringCchCopyW(pwszFilename, cchFilenameMax, L"*");
2338  }
2339 
2340  WIN32_FIND_DATAW wfd;
2341  HANDLE hFind = FindFirstFileW(pwszBuf, &wfd);
2342  if (hFind == INVALID_HANDLE_VALUE)
2343  {
2344  ERR("FindFirstFileW %ls failed\n", pwszBuf);
2345  return FALSE;
2346  }
2347 
2348  do
2349  {
2350  if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
2351  {
2352  /* Don't process "." and ".." items */
2353  if (!wcscmp(wfd.cFileName, L".") || !wcscmp(wfd.cFileName, L".."))
2354  continue;
2355 
2356  StringCchCopyW(pwszFilename, cchFilenameMax, wfd.cFileName);
2357  _FileOpCount(op, pwszBuf, TRUE, ticks);
2358  }
2359  else
2360  {
2362  FileSize.u.LowPart = wfd.nFileSizeLow;
2363  FileSize.u.HighPart = wfd.nFileSizeHigh;
2364  op->totalSize.QuadPart += FileSize.QuadPart;
2365  }
2366  if (GetTickCount() - *ticks > (DWORD) 500)
2367  {
2368  // Check if the dialog has ended. If it has, we'll spin down.
2369  if (op->progress != NULL)
2370  op->bCancelled = op->progress->HasUserCancelled();
2371 
2372  if (op->bCancelled)
2373  break;
2374  *ticks = GetTickCount();
2375  }
2376  } while(FindNextFileW(hFind, &wfd));
2377 
2378  FindClose(hFind);
2379  return TRUE;
2380 }
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:382
#define TRUE
Definition: types.h:120
DWORD WINAPI GetTickCount(VOID)
Definition: time.c:455
#define INVALID_HANDLE_VALUE
Definition: compat.h:590
static BOOL _FileOpCount(FILE_OPERATION *op, LPWSTR pwszBuf, BOOL bFolder, DWORD *ticks)
Definition: shlfileop.cpp:2324
#define L(x)
Definition: ntvdm.h:50
#define FALSE
Definition: types.h:117
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:34
unsigned long DWORD
Definition: ntddk_ex.h:95
UINT op
Definition: effect.c:236
struct _LARGE_INTEGER::@2249 u
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
Definition: fsrtlfuncs.h:108
#define ERR(fmt,...)
Definition: debug.h:110
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
LONGLONG QuadPart
Definition: typedefs.h:114
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502

Referenced by _FileOpCountManager().

◆ _FileOpCountManager()

DWORD WINAPI _FileOpCountManager ( FILE_OPERATION op,
const FILE_LIST flFrom 
)

Definition at line 2306 of file shlfileop.cpp.

2307 {
2308  DWORD ticks = GetTickCount();
2309  FILE_ENTRY *entryToCount;
2310 
2311  for (UINT i = 0; i < from->dwNumFiles; i++)
2312  {
2313  entryToCount = &from->feFiles[i];
2314 
2315  WCHAR theFileName[MAX_PATH];
2316  StringCchCopyW(theFileName, MAX_PATH, entryToCount->szFullPath);
2317  _FileOpCount(op, theFileName, IsAttribDir(entryToCount->attributes), &ticks);
2318  }
2319  return 0;
2320 }
LPWSTR szFullPath
Definition: shlfileop.cpp:57
DWORD WINAPI GetTickCount(VOID)
Definition: time.c:455
DWORD attributes
Definition: shlfileop.cpp:54
static BOOL _FileOpCount(FILE_OPERATION *op, LPWSTR pwszBuf, BOOL bFolder, DWORD *ticks)
Definition: shlfileop.cpp:2324
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:34
unsigned long DWORD
Definition: ntddk_ex.h:95
UINT op
Definition: effect.c:236
Definition: shlfileop.cpp:52
#define IsAttribDir(x)
Definition: shlfileop.cpp:31
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int UINT
Definition: ndis.h:50
CardRegion * from
Definition: spigame.cpp:19

Referenced by SHFileOperationW().

◆ _SetOperationTexts()

static void _SetOperationTexts ( FILE_OPERATION op,
LPCWSTR  src,
LPCWSTR  dest 
)
static

Definition at line 508 of file shlfileop.cpp.

508  {
509  if (op->progress == NULL || src == NULL)
510  return;
511  LPWSTR fileSpecS, pathSpecS, fileSpecD, pathSpecD;
512  WCHAR szFolderS[50], szFolderD[50], szFinalString[260];
513 
514  DWORD_PTR args[2];
515 
516  fileSpecS = (pathSpecS = (LPWSTR) src);
517  fileSpecD = (pathSpecD = (LPWSTR) dest);
518 
519  // March across the string to get the file path and it's parent dir.
520  for (LPWSTR ptr = (LPWSTR) src; *ptr; ptr++) {
521  if (*ptr == '\\') {
522  pathSpecS = fileSpecS;
523  fileSpecS = ptr+1;
524  }
525  }
526  lstrcpynW(szFolderS, pathSpecS, min(50, fileSpecS - pathSpecS));
527  args[0] = (DWORD_PTR) szFolderS;
528 
529  switch (op->req->wFunc)
530  {
531  case FO_COPY:
532  case FO_MOVE:
533  if (dest == NULL)
534  return;
535  for (LPWSTR ptr = (LPWSTR) dest; *ptr; ptr++) {
536  if (*ptr == '\\') {
537  pathSpecD = fileSpecD;
538  fileSpecD = ptr + 1;
539  }
540  }
541  lstrcpynW(szFolderD, pathSpecD, min(50, fileSpecD - pathSpecD));
542  args[1] = (DWORD_PTR) szFolderD;
543  break;
544  case FO_DELETE:
545  break;
546  default:
547  return;
548  }
549 
551  op->szBuilderString, 0, 0, szFinalString, sizeof(szFinalString), (va_list*)args);
552 
553  op->progress->SetLine(1, fileSpecS, false, NULL);
554  op->progress->SetLine(2, szFinalString, false, NULL);
555 }
#define DWORD_PTR
Definition: treelist.c:76
#define FO_COPY
Definition: shellapi.h:134
#define FORMAT_MESSAGE_ARGUMENT_ARRAY
Definition: winbase.h:421
#define FORMAT_MESSAGE_FROM_STRING
Definition: winbase.h:418
DWORD WINAPI FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:583
Definition: match.c:390
#define lstrcpynW
Definition: compat.h:597
#define FO_MOVE
Definition: shellapi.h:133
static PVOID ptr
Definition: dispmode.c:27
char * va_list
Definition: acmsvcex.h:78
__wchar_t WCHAR
Definition: xmlstorage.h:180
UINT op
Definition: effect.c:236
GLenum src
Definition: glext.h:6340
uint32_t DWORD_PTR
Definition: typedefs.h:65
#define min(a, b)
Definition: monoChain.cc:55
#define NULL
Definition: types.h:112
static char * dest
Definition: rtl.c:135
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define FO_DELETE
Definition: shellapi.h:135

Referenced by SHNotifyCopyFileW(), SHNotifyDeleteFileW(), and SHNotifyMoveFileW().

◆ _SetOperationTitle()

static void _SetOperationTitle ( FILE_OPERATION op)
static

Definition at line 475 of file shlfileop.cpp.

475  {
476  if (op->progress == NULL)
477  return;
478  WCHAR szTitle[50], szPreflight[50];
479  UINT animation_id = NULL;
480 
481  switch (op->req->wFunc)
482  {
483  case FO_COPY:
485  LoadStringW(shell32_hInstance, IDS_FILEOOP_FROM_TO, op->szBuilderString, sizeof( op->szBuilderString)/sizeof(WCHAR));
486  animation_id = IDA_SHELL_COPY;
487  break;
488  case FO_DELETE:
490  LoadStringW(shell32_hInstance, IDS_FILEOOP_FROM, op->szBuilderString, sizeof( op->szBuilderString)/sizeof(WCHAR));
491  animation_id = IDA_SHELL_DELETE;
492  break;
493  case FO_MOVE:
495  LoadStringW(shell32_hInstance, IDS_FILEOOP_FROM_TO, op->szBuilderString, sizeof( op->szBuilderString)/sizeof(WCHAR));
496  animation_id = IDA_SHELL_COPY;
497  break;
498  default:
499  return;
500  }
501  LoadStringW(shell32_hInstance, IDS_FILEOOP_PREFLIGHT, szPreflight, sizeof(szPreflight)/sizeof(WCHAR));
502 
503  op->progress->SetTitle(szTitle);
504  op->progress->SetLine(1, szPreflight, false, NULL);
505  op->progress->SetAnimation(shell32_hInstance, animation_id);
506 }
#define IDS_FILEOOP_MOVING
Definition: shresdef.h:234
#define IDS_FILEOOP_FROM
Definition: shresdef.h:237
#define FO_COPY
Definition: shellapi.h:134
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define FO_MOVE
Definition: shellapi.h:133
#define IDA_SHELL_DELETE
Definition: shresdef.h:778
#define IDS_FILEOOP_DELETING
Definition: shresdef.h:235
__wchar_t WCHAR
Definition: xmlstorage.h:180
UINT op
Definition: effect.c:236
TCHAR szTitle[MAX_LOADSTRING]
Definition: magnifier.c:35
#define IDS_FILEOOP_COPYING
Definition: shresdef.h:233
#define IDA_SHELL_COPY
Definition: shresdef.h:774
#define IDS_FILEOOP_PREFLIGHT
Definition: shresdef.h:238
#define shell32_hInstance
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112
#define FO_DELETE
Definition: shellapi.h:135
#define IDS_FILEOOP_FROM_TO
Definition: shresdef.h:236

Referenced by SHFileOperationW().

◆ add_file_to_entry()

static void add_file_to_entry ( FILE_ENTRY feFile,
LPCWSTR  szFile 
)
static

Definition at line 1137 of file shlfileop.cpp.

1138 {
1139  DWORD dwLen = lstrlenW(szFile) + 1;
1140  LPCWSTR ptr;
1141  LPCWSTR ptr2;
1142 
1143  feFile->szFullPath = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, dwLen * sizeof(WCHAR));
1144  lstrcpyW(feFile->szFullPath, szFile);
1145 
1146  ptr = StrRChrW(szFile, NULL, '\\');
1147  ptr2 = StrRChrW(szFile, NULL, '/');
1148  if (!ptr || ptr < ptr2)
1149  ptr = ptr2;
1150  if (ptr)
1151  {
1152  dwLen = ptr - szFile + 1;
1153  feFile->szDirectory = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, dwLen * sizeof(WCHAR));
1154  lstrcpynW(feFile->szDirectory, szFile, dwLen);
1155 
1156  dwLen = lstrlenW(feFile->szFullPath) - dwLen + 1;
1157  feFile->szFilename = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, dwLen * sizeof(WCHAR));
1158  lstrcpyW(feFile->szFilename, ptr + 1); /* skip over backslash */
1159  }
1160  feFile->bFromWildcard = FALSE;
1161 }
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
LPWSTR szFullPath
Definition: shlfileop.cpp:57
#define lstrlenW
Definition: compat.h:609
#define lstrcpynW
Definition: compat.h:597
#define FALSE
Definition: types.h:117
static PVOID ptr
Definition: dispmode.c:27
LPWSTR szFilename
Definition: shlfileop.cpp:56
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL bFromWildcard
Definition: shlfileop.cpp:58
LPWSTR szDirectory
Definition: shlfileop.cpp:55
#define lstrcpyW
Definition: compat.h:608
#define NULL
Definition: types.h:112
WCHAR * LPWSTR
Definition: xmlstorage.h:184
LPWSTR WINAPI StrRChrW(LPCWSTR str, LPCWSTR end, WORD ch)
Definition: string.c:556

Referenced by parse_file_list(), and parse_wildcard_files().

◆ check_flags()

static void check_flags ( FILEOP_FLAGS  fFlags)
static

Definition at line 1867 of file shlfileop.cpp.

1868 {
1869  WORD wUnsupportedFlags = FOF_NO_CONNECTED_ELEMENTS |
1871 #ifdef __REACTOS__
1873 #else
1875 #endif
1876 
1877  if (fFlags & wUnsupportedFlags)
1878  FIXME("Unsupported flags: %04x\n", fFlags);
1879 }
#define FOF_NOCOPYSECURITYATTRIBS
Definition: shellapi.h:149
#define FOF_NO_CONNECTED_ELEMENTS
Definition: shellapi.h:151
#define FIXME(fmt,...)
Definition: debug.h:111
#define FOF_WANTMAPPINGHANDLE
Definition: shellapi.h:143
unsigned short WORD
Definition: ntddk_ex.h:93
#define FOF_NORECURSEREPARSE
Definition: shellapi.h:154
#define FOF_RENAMEONCOLLISION
Definition: shellapi.h:141

Referenced by SHFileOperationW().

◆ confirm_delete_list()

static BOOL confirm_delete_list ( HWND  hWnd,
DWORD  fFlags,
BOOL  fTrash,
const FILE_LIST flFrom 
)
static

Definition at line 1596 of file shlfileop.cpp.

1597 {
1598  if (flFrom->dwNumFiles > 1)
1599  {
1600  WCHAR tmp[8];
1601 
1602  wnsprintfW(tmp, sizeof(tmp)/sizeof(tmp[0]), L"%d", flFrom->dwNumFiles);
1604  }
1605  else
1606  {
1607  const FILE_ENTRY *fileEntry = &flFrom->feFiles[0];
1608 
1609  if (IsAttribFile(fileEntry->attributes))
1610  return SHELL_ConfirmDialogW(hWnd, (fTrash?ASK_TRASH_FILE:ASK_DELETE_FILE), fileEntry->szFullPath, NULL);
1611  else if (!(fFlags & FOF_FILESONLY && fileEntry->bFromWildcard))
1613  }
1614  return TRUE;
1615 }
LPWSTR szFullPath
Definition: shlfileop.cpp:57
#define TRUE
Definition: types.h:120
#define ASK_DELETE_FILE
Definition: shell32_main.h:112
#define ASK_TRASH_FILE
Definition: shell32_main.h:118
HWND hWnd
Definition: settings.c:17
#define ASK_TRASH_FOLDER
Definition: shell32_main.h:119
DWORD attributes
Definition: shlfileop.cpp:54
#define ASK_TRASH_MULTIPLE_ITEM
Definition: shell32_main.h:120
#define L(x)
Definition: ntvdm.h:50
DWORD dwNumFiles
Definition: shlfileop.cpp:67
#define ASK_DELETE_FOLDER
Definition: shell32_main.h:113
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define ASK_DELETE_MULTIPLE_ITEM
Definition: shell32_main.h:114
#define FOF_FILESONLY
Definition: shellapi.h:145
static BOOL SHELL_ConfirmDialogW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir, FILE_OPERATION *op)
Definition: shlfileop.cpp:293
BOOL bFromWildcard
Definition: shlfileop.cpp:58
int WINAPIV wnsprintfW(LPWSTR lpOut, int cchLimitIn, LPCWSTR lpFmt,...)
Definition: wsprintf.c:564
Definition: shlfileop.cpp:52
#define NULL
Definition: types.h:112
#define IsAttribFile(x)
Definition: shlfileop.cpp:30
FILE_ENTRY * feFiles
Definition: shlfileop.cpp:65

Referenced by delete_files().

◆ confirm_msg_move_button()

static void confirm_msg_move_button ( HWND  hDlg,
INT  iId,
INT xPos,
INT  yOffset,
BOOL  bShow 
)
static

Definition at line 97 of file shlfileop.cpp.

98 {
99  HWND hButton = GetDlgItem(hDlg, iId);
100  RECT r;
101 
102  if (bShow)
103  {
104  POINT pt;
105  int width;
106 
107  GetWindowRect(hButton, &r);
108  width = r.right - r.left;
109  pt.x = r.left;
110  pt.y = r.top;
111  ScreenToClient(hDlg, &pt);
112  MoveWindow(hButton, *xPos - width, pt.y - yOffset, width, r.bottom - r.top, FALSE);
113  *xPos -= width + 5;
114  }
115  else
116  ShowWindow(hButton, SW_HIDE);
117 }
GLint GLint GLsizei width
Definition: gl.h:1546
#define pt(x, y)
Definition: drawing.c:79
#define SW_HIDE
Definition: winuser.h:762
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define FALSE
Definition: types.h:117
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
int yOffset
Definition: appswitch.c:59
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)

Referenced by ConfirmMsgBox_Init().

◆ ConfirmMsgBox_Init()

static INT_PTR ConfirmMsgBox_Init ( HWND  hDlg,
LPARAM  lParam 
)
static

Definition at line 144 of file shlfileop.cpp.

145 {
146  struct confirm_msg_info *info = (struct confirm_msg_info *)lParam;
147  INT xPos, yOffset;
148  int width, height;
149  HFONT hOldFont;
150  HDC hdc;
151  RECT r;
152 
153  SetWindowTextW(hDlg, info->lpszCaption);
155  SetPropW(hDlg, L"WINE_CONFIRM", info->lpszText);
157 
158  /* compute the text height and resize the dialog */
160  hdc = GetDC(hDlg);
161  yOffset = r.bottom;
164  SelectObject(hdc, hOldFont);
165  yOffset -= r.bottom;
166  yOffset = min(yOffset, 35); /* don't make the dialog too small */
167  ReleaseDC(hDlg, hdc);
168 
169  GetClientRect(hDlg, &r);
170  xPos = r.right - 7;
171  GetWindowRect(hDlg, &r);
172  width = r.right - r.left;
173  height = r.bottom - r.top - yOffset;
176 
177  confirm_msg_move_button(hDlg, IDCANCEL, &xPos, yOffset, info->bYesToAll);
178  confirm_msg_move_button(hDlg, IDNO, &xPos, yOffset, TRUE);
179  confirm_msg_move_button(hDlg, IDC_YESTOALL, &xPos, yOffset, info->bYesToAll);
180  confirm_msg_move_button(hDlg, IDYES, &xPos, yOffset, TRUE);
181 
182  return TRUE;
183 }
#define STM_SETICON
Definition: winuser.h:2082
GLint GLint GLsizei width
Definition: gl.h:1546
#define IDYES
Definition: winuser.h:829
HDC WINAPI GetDC(_In_opt_ HWND)
#define TRUE
Definition: types.h:120
#define SW_HIDE
Definition: winuser.h:762
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
#define DT_WORDBREAK
Definition: winuser.h:544
static void confirm_msg_move_button(HWND hDlg, INT iId, INT *xPos, INT yOffset, BOOL bShow)
Definition: shlfileop.cpp:97
static HDC
Definition: imagelist.c:92
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
UINT_PTR WPARAM
Definition: windef.h:207
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define DT_NOPREFIX
Definition: winuser.h:537
int32_t INT
Definition: typedefs.h:58
#define DT_PATH_ELLIPSIS
Definition: winuser.h:530
#define SM_CXSCREEN
Definition: winuser.h:953
#define L(x)
Definition: ntvdm.h:50
#define IDC_YESTOALL_MESSAGE
Definition: shresdef.h:401
#define FALSE
Definition: types.h:117
#define DT_CALCRECT
Definition: winuser.h:526
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define WM_GETFONT
Definition: winuser.h:1641
#define SM_CYSCREEN
Definition: winuser.h:954
BOOL WINAPI SetPropW(_In_ HWND, _In_ LPCWSTR, _In_opt_ HANDLE)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
int WINAPI GetSystemMetrics(_In_ int)
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HDC hdc
Definition: main.c:9
#define IDC_YESTOALL_ICON
Definition: shresdef.h:400
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define IDC_YESTOALL
Definition: shresdef.h:399
#define min(a, b)
Definition: monoChain.cc:55
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
int yOffset
Definition: appswitch.c:59
#define IDNO
Definition: winuser.h:830
#define IDCANCEL
Definition: winuser.h:825
LPARAM lParam
Definition: combotst.c:139
INT WINAPI DrawTextW(HDC hdc, LPCWSTR str, INT count, LPRECT rect, UINT flags)
Definition: defwnd.c:17

Referenced by ConfirmMsgBoxProc().

◆ ConfirmMsgBox_Paint()

static INT_PTR ConfirmMsgBox_Paint ( HWND  hDlg)
static

Definition at line 122 of file shlfileop.cpp.

123 {
124  PAINTSTRUCT ps;
125  HFONT hOldFont;
126  RECT r;
127  HDC hdc;
128 
129  BeginPaint(hDlg, &ps);
130  hdc = ps.hdc;
132 
134  /* this will remap the rect to dialog coords */
137  DrawTextW(hdc, (LPWSTR)GetPropW(hDlg, L"WINE_CONFIRM"), -1, &r, DT_NOPREFIX | DT_PATH_ELLIPSIS | DT_WORDBREAK);
138  SelectObject(hdc, hOldFont);
139  EndPaint(hDlg, &ps);
140 
141  return TRUE;
142 }
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
#define TRUE
Definition: types.h:120
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
#define DT_WORDBREAK
Definition: winuser.h:544
static HDC
Definition: imagelist.c:92
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1539
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
#define DT_NOPREFIX
Definition: winuser.h:537
#define DT_PATH_ELLIPSIS
Definition: winuser.h:530
int WINAPI SetBkMode(_In_ HDC, _In_ int)
Definition: dc.c:1056
#define L(x)
Definition: ntvdm.h:50
#define IDC_YESTOALL_MESSAGE
Definition: shresdef.h:401
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
#define TRANSPARENT
Definition: wingdi.h:950
#define WM_GETFONT
Definition: winuser.h:1641
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HDC hdc
Definition: main.c:9
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
HANDLE WINAPI GetPropW(_In_ HWND, _In_ LPCWSTR)
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
WCHAR * LPWSTR
Definition: xmlstorage.h:184
INT WINAPI DrawTextW(HDC hdc, LPCWSTR str, INT count, LPRECT rect, UINT flags)
Definition: defwnd.c:17

Referenced by ConfirmMsgBoxProc().

◆ ConfirmMsgBoxProc()

static INT_PTR CALLBACK ConfirmMsgBoxProc ( HWND  hDlg,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 185 of file shlfileop.cpp.

186 {
187  switch (uMsg)
188  {
189  case WM_INITDIALOG:
190  return ConfirmMsgBox_Init(hDlg, lParam);
191  case WM_PAINT:
192  return ConfirmMsgBox_Paint(hDlg);
193  case WM_COMMAND:
194  EndDialog(hDlg, wParam);
195  break;
196  case WM_CLOSE:
197  EndDialog(hDlg, IDCANCEL);
198  break;
199  }
200  return FALSE;
201 }
static INT_PTR ConfirmMsgBox_Paint(HWND hDlg)
Definition: shlfileop.cpp:122
static INT_PTR ConfirmMsgBox_Init(HWND hDlg, LPARAM lParam)
Definition: shlfileop.cpp:144
WPARAM wParam
Definition: combotst.c:138
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
#define FALSE
Definition: types.h:117
#define WM_CLOSE
Definition: winuser.h:1611
#define WM_PAINT
Definition: winuser.h:1610
#define WM_COMMAND
Definition: winuser.h:1730
#define IDCANCEL
Definition: winuser.h:825
#define WM_INITDIALOG
Definition: winuser.h:1729
LPARAM lParam
Definition: combotst.c:139

Referenced by SHELL_ConfirmMsgBox().

◆ copy_dir_to_dir()

static void copy_dir_to_dir ( FILE_OPERATION op,
const FILE_ENTRY feFrom,
LPCWSTR  szDestPath 
)
static

Definition at line 1334 of file shlfileop.cpp.

1335 {
1336  WCHAR szFrom[MAX_PATH], szTo[MAX_PATH];
1337  FILE_LIST flFromNew, flToNew;
1338 
1339  if (IsDotDir(feFrom->szFilename))
1340  return;
1341 
1342  if (PathFileExistsW(szDestPath))
1343  PathCombineW(szTo, szDestPath, feFrom->szFilename);
1344  else
1345  lstrcpyW(szTo, szDestPath);
1346 
1347 #ifdef __REACTOS__
1348  if (PathFileExistsW(szTo))
1349  {
1350  if (op->req->fFlags & FOF_RENAMEONCOLLISION)
1351  {
1352  CStringW newPath = try_find_new_name(szTo);
1353  if (!newPath.IsEmpty())
1354  {
1355  StringCchCopyW(szTo, _countof(szTo), newPath);
1356  }
1357  }
1358  else if (!(op->req->fFlags & FOF_NOCONFIRMATION))
1359 #else
1360  if (!(op->req->fFlags & FOF_NOCONFIRMATION) && PathFileExistsW(szTo))
1361  {
1362  CStringW newPath;
1363  if (lstrcmp(feFrom->szDirectory, szDestPath) == 0 && !(newPath = try_find_new_name(szTo)).IsEmpty())
1364  {
1365  StringCchCopyW(szTo, _countof(szTo), newPath);
1366  }
1367  else
1368 #endif
1369  {
1370  if (!SHELL_ConfirmDialogW(op->req->hwnd, ASK_OVERWRITE_FOLDER, feFrom->szFilename, op))
1371  {
1372  /* Vista returns an ERROR_CANCELLED even if user pressed "No" */
1373  if (!op->bManyItems)
1374  op->bCancelled = TRUE;
1375  return;
1376  }
1377  }
1378  }
1379 
1380  szTo[lstrlenW(szTo) + 1] = '\0';
1382 
1383  PathCombineW(szFrom, feFrom->szFullPath, L"*.*");
1384  szFrom[lstrlenW(szFrom) + 1] = '\0';
1385 
1386  ZeroMemory(&flFromNew, sizeof(FILE_LIST));
1387  ZeroMemory(&flToNew, sizeof(FILE_LIST));
1388  parse_file_list(&flFromNew, szFrom);
1389  parse_file_list(&flToNew, szTo);
1390 
1391  copy_files(op, FALSE, &flFromNew, &flToNew);
1392 
1393  destroy_file_list(&flFromNew);
1394  destroy_file_list(&flToNew);
1395 }
static HRESULT parse_file_list(FILE_LIST *flList, LPCWSTR szFiles)
Definition: shlfileop.cpp:1219
LPWSTR szFullPath
Definition: shlfileop.cpp:57
#define TRUE
Definition: types.h:120
static CStringW try_find_new_name(LPCWSTR szDestPath)
Definition: shlfileop.cpp:1306
#define ZeroMemory
Definition: winbase.h:1667
static HRESULT copy_files(FILE_OPERATION *op, BOOL multiDest, const FILE_LIST *flFrom, FILE_LIST *flTo)
Definition: shlfileop.cpp:1469
#define lstrlenW
Definition: compat.h:609
#define L(x)
Definition: ntvdm.h:50
static DWORD SHNotifyCreateDirectoryW(LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
Definition: shlfileop.cpp:416
#define FALSE
Definition: types.h:117
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
static void destroy_file_list(FILE_LIST *flList)
Definition: shlfileop.cpp:1289
#define FOF_NOCONFIRMATION
Definition: shellapi.h:142
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1776
LPWSTR szFilename
Definition: shlfileop.cpp:56
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: sndvol32.h:68
#define MAX_PATH
Definition: compat.h:34
UINT op
Definition: effect.c:236
static BOOL SHELL_ConfirmDialogW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir, FILE_OPERATION *op)
Definition: shlfileop.cpp:293
#define lstrcmp
Definition: winbase.h:3733
LPWSTR szDirectory
Definition: shlfileop.cpp:55
#define FOF_RENAMEONCOLLISION
Definition: shellapi.h:141
bool IsEmpty() const
Definition: atlsimpstr.h:379
#define lstrcpyW
Definition: compat.h:608
#define NULL
Definition: types.h:112
#define ASK_OVERWRITE_FOLDER
Definition: shell32_main.h:122
#define IsDotDir(x)
Definition: shlfileop.cpp:32
LPWSTR WINAPI PathCombineW(LPWSTR lpszDest, LPCWSTR lpszDir, LPCWSTR lpszFile)
Definition: path.c:194

Referenced by copy_files(), and copy_to_dir().

◆ copy_file_to_file()

static BOOL copy_file_to_file ( FILE_OPERATION op,
const WCHAR szFrom,
const WCHAR szTo 
)
static

Definition at line 1397 of file shlfileop.cpp.

1398 {
1399 #ifdef __REACTOS__
1400  if (PathFileExistsW(szTo))
1401  {
1402  if (op->req->fFlags & FOF_RENAMEONCOLLISION)
1403  {
1404  CStringW newPath = try_find_new_name(szTo);
1405  if (!newPath.IsEmpty())
1406  {
1407  return SHNotifyCopyFileW(op, szFrom, newPath, FALSE) == 0;
1408  }
1409  }
1410  else if (!(op->req->fFlags & FOF_NOCONFIRMATION))
1411  {
1413  return FALSE;
1414  }
1415 #else
1416  if (!(op->req->fFlags & FOF_NOCONFIRMATION) && PathFileExistsW(szTo))
1417  {
1418  CStringW newPath;
1419  if (lstrcmp(szFrom, szTo) == 0 && !(newPath = try_find_new_name(szTo)).IsEmpty())
1420  {
1421  return SHNotifyCopyFileW(op, szFrom, newPath, FALSE) == 0;
1422  }
1423 
1425  return FALSE;
1426 #endif
1427  }
1428 
1429  return SHNotifyCopyFileW(op, szFrom, szTo, FALSE) == 0;
1430 }
static CStringW try_find_new_name(LPCWSTR szDestPath)
Definition: shlfileop.cpp:1306
#define FALSE
Definition: types.h:117
#define FOF_NOCONFIRMATION
Definition: shellapi.h:142
LPWSTR WINAPI PathFindFileNameW(LPCWSTR lpszPath)
Definition: path.c:394
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1776
UINT op
Definition: effect.c:236
static BOOL SHELL_ConfirmDialogW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir, FILE_OPERATION *op)
Definition: shlfileop.cpp:293
static DWORD SHNotifyCopyFileW(FILE_OPERATION *op, LPCWSTR src, LPCWSTR dest, BOOL bFailIfExists)
Definition: shlfileop.cpp:787
#define ASK_OVERWRITE_FILE
Definition: shell32_main.h:116
#define lstrcmp
Definition: winbase.h:3733
#define FOF_RENAMEONCOLLISION
Definition: shellapi.h:141
bool IsEmpty() const
Definition: atlsimpstr.h:379

Referenced by copy_files(), and copy_to_dir().

◆ copy_files()

static HRESULT copy_files ( FILE_OPERATION op,
BOOL  multiDest,
const FILE_LIST flFrom,
FILE_LIST flTo 
)
static

Definition at line 1469 of file shlfileop.cpp.

1470 {
1471  DWORD i;
1472  const FILE_ENTRY *entryToCopy;
1473  const FILE_ENTRY *fileDest = &flTo->feFiles[0];
1474 
1475  if (flFrom->bAnyDontExist)
1477 
1478  if (flTo->dwNumFiles == 0)
1479  {
1480  /* If the destination is empty, SHFileOperation should use the current directory */
1481  WCHAR curdir[MAX_PATH+1];
1482 
1483  GetCurrentDirectoryW(MAX_PATH, curdir);
1484  curdir[lstrlenW(curdir)+1] = 0;
1485 
1486  destroy_file_list(flTo);
1487  ZeroMemory(flTo, sizeof(FILE_LIST));
1488  parse_file_list(flTo, curdir);
1489  fileDest = &flTo->feFiles[0];
1490  }
1491 
1492  if (multiDest)
1493  {
1494  if (flFrom->bAnyFromWildcard)
1495  return ERROR_CANCELLED;
1496 
1497  if (flFrom->dwNumFiles != flTo->dwNumFiles)
1498  {
1499  if (flFrom->dwNumFiles != 1 && !IsAttribDir(fileDest->attributes))
1500  return ERROR_CANCELLED;
1501 
1502  /* Free all but the first entry. */
1503  for (i = 1; i < flTo->dwNumFiles; i++)
1504  {
1506  HeapFree(GetProcessHeap(), 0, flTo->feFiles[i].szFilename);
1507  HeapFree(GetProcessHeap(), 0, flTo->feFiles[i].szFullPath);
1508  }
1509 
1510  flTo->dwNumFiles = 1;
1511  }
1512  else if (IsAttribDir(fileDest->attributes))
1513  {
1514  for (i = 1; i < flTo->dwNumFiles; i++)
1515  if (!IsAttribDir(flTo->feFiles[i].attributes) ||
1516  !IsAttribDir(flFrom->feFiles[i].attributes))
1517  {
1518  return ERROR_CANCELLED;
1519  }
1520  }
1521  }
1522  else if (flFrom->dwNumFiles != 1)
1523  {
1524  if (flTo->dwNumFiles != 1 && !IsAttribDir(fileDest->attributes))
1525  return ERROR_CANCELLED;
1526 
1527  if (PathFileExistsW(fileDest->szFullPath) &&
1528  IsAttribFile(fileDest->attributes))
1529  {
1530  return ERROR_CANCELLED;
1531  }
1532 
1533  if (flTo->dwNumFiles == 1 && fileDest->bFromRelative &&
1534  !PathFileExistsW(fileDest->szFullPath))
1535  {
1536  return ERROR_CANCELLED;
1537  }
1538  }
1539 
1540  for (i = 0; i < flFrom->dwNumFiles; i++)
1541  {
1542  entryToCopy = &flFrom->feFiles[i];
1543 
1544  if ((multiDest) &&
1545  flTo->dwNumFiles > 1)
1546  {
1547  fileDest = &flTo->feFiles[i];
1548  }
1549 
1550  if (IsAttribDir(entryToCopy->attributes) &&
1551  !lstrcmpiW(entryToCopy->szFullPath, fileDest->szDirectory))
1552  {
1553  return ERROR_SUCCESS;
1554  }
1555 
1556  create_dest_dirs(fileDest->szDirectory);
1557 
1558  if (!lstrcmpiW(entryToCopy->szFullPath, fileDest->szFullPath))
1559  {
1560  if (IsAttribFile(entryToCopy->attributes))
1562  else
1563  return ERROR_SUCCESS;
1564  }
1565 
1566  if ((flFrom->dwNumFiles > 1 && flTo->dwNumFiles == 1) ||
1567  IsAttribDir(fileDest->attributes))
1568  {
1569  copy_to_dir(op, entryToCopy, fileDest);
1570  }
1571  else if (IsAttribDir(entryToCopy->attributes))
1572  {
1573  copy_dir_to_dir(op, entryToCopy, fileDest->szFullPath);
1574  }
1575  else
1576  {
1577  if (!copy_file_to_file(op, entryToCopy->szFullPath, fileDest->szFullPath))
1578  {
1579  op->req->fAnyOperationsAborted = TRUE;
1580  return ERROR_CANCELLED;
1581  }
1582  }
1583 
1584  if (op->progress != NULL)
1585  op->bCancelled |= op->progress->HasUserCancelled();
1586  /* Vista return code. XP would return e.g. ERROR_FILE_NOT_FOUND, ERROR_ALREADY_EXISTS */
1587  if (op->bCancelled)
1588  return ERROR_CANCELLED;
1589  }
1590 
1591  /* Vista return code. On XP if the used pressed "No" for the last item,
1592  * ERROR_ARENA_TRASHED would be returned */
1593  return ERROR_SUCCESS;
1594 }
static HRESULT parse_file_list(FILE_LIST *flList, LPCWSTR szFiles)
Definition: shlfileop.cpp:1219
#define ERROR_SUCCESS
Definition: deptool.c:10
LPWSTR szFullPath
Definition: shlfileop.cpp:57
#define TRUE
Definition: types.h:120
#define GetCurrentDirectoryW(x, y)
Definition: compat.h:615
#define ERROR_NO_MORE_SEARCH_HANDLES
Definition: winerror.h:187
BOOL bAnyFromWildcard
Definition: shlfileop.cpp:68
#define ZeroMemory
Definition: winbase.h:1667
DWORD attributes
Definition: shlfileop.cpp:54
BOOL bFromRelative
Definition: shlfileop.cpp:59
#define lstrlenW
Definition: compat.h:609
int WINAPI lstrcmpiW(LPCWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:194
DWORD dwNumFiles
Definition: shlfileop.cpp:67
static void destroy_file_list(FILE_LIST *flList)
Definition: shlfileop.cpp:1289
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1776
static void copy_to_dir(FILE_OPERATION *op, const FILE_ENTRY *feFrom, const FILE_ENTRY *feTo)
Definition: shlfileop.cpp:1433
LPWSTR szFilename
Definition: shlfileop.cpp:56
#define GetProcessHeap()
Definition: compat.h:595
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:34
unsigned long DWORD
Definition: ntddk_ex.h:95
UINT op
Definition: effect.c:236
static BOOL copy_file_to_file(FILE_OPERATION *op, const WCHAR *szFrom, const WCHAR *szTo)
Definition: shlfileop.cpp:1397
static void create_dest_dirs(LPCWSTR szDestDir)
Definition: shlfileop.cpp:1449
Definition: shlfileop.cpp:52
LPWSTR szDirectory
Definition: shlfileop.cpp:55
#define IsAttribDir(x)
Definition: shlfileop.cpp:31
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define ERROR_CANCELLED
Definition: winerror.h:726
#define NULL
Definition: types.h:112
#define ERROR_SHELL_INTERNAL_FILE_NOT_FOUND
Definition: shlfileop.cpp:50
#define IsAttribFile(x)
Definition: shlfileop.cpp:30
static void copy_dir_to_dir(FILE_OPERATION *op, const FILE_ENTRY *feFrom, LPCWSTR szDestPath)
Definition: shlfileop.cpp:1334
#define HeapFree(x, y, z)
Definition: compat.h:594
BOOL bAnyDontExist
Definition: shlfileop.cpp:70
FILE_ENTRY * feFiles
Definition: shlfileop.cpp:65

Referenced by copy_dir_to_dir(), and SHFileOperationW().

◆ copy_to_dir()

static void copy_to_dir ( FILE_OPERATION op,
const FILE_ENTRY feFrom,
const FILE_ENTRY feTo 
)
static

Definition at line 1433 of file shlfileop.cpp.

1434 {
1435  if (!PathFileExistsW(feTo->szFullPath))
1437 
1438  if (IsAttribFile(feFrom->attributes))
1439  {
1440  WCHAR szDestPath[MAX_PATH];
1441 
1442  PathCombineW(szDestPath, feTo->szFullPath, feFrom->szFilename);
1443  copy_file_to_file(op, feFrom->szFullPath, szDestPath);
1444  }
1445  else if (!(op->req->fFlags & FOF_FILESONLY && feFrom->bFromWildcard))
1446  copy_dir_to_dir(op, feFrom, feTo->szFullPath);
1447 }
LPWSTR szFullPath
Definition: shlfileop.cpp:57
DWORD attributes
Definition: shlfileop.cpp:54
static DWORD SHNotifyCreateDirectoryW(LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
Definition: shlfileop.cpp:416
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1776
LPWSTR szFilename
Definition: shlfileop.cpp:56
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define FOF_FILESONLY
Definition: shellapi.h:145
#define MAX_PATH
Definition: compat.h:34
UINT op
Definition: effect.c:236
static BOOL copy_file_to_file(FILE_OPERATION *op, const WCHAR *szFrom, const WCHAR *szTo)
Definition: shlfileop.cpp:1397
BOOL bFromWildcard
Definition: shlfileop.cpp:58
#define NULL
Definition: types.h:112
#define IsAttribFile(x)
Definition: shlfileop.cpp:30
LPWSTR WINAPI PathCombineW(LPWSTR lpszDest, LPCWSTR lpszDir, LPCWSTR lpszFile)
Definition: path.c:194
static void copy_dir_to_dir(FILE_OPERATION *op, const FILE_ENTRY *feFrom, LPCWSTR szDestPath)
Definition: shlfileop.cpp:1334

Referenced by copy_files().

◆ create_dest_dirs()

static void create_dest_dirs ( LPCWSTR  szDestDir)
static

Definition at line 1449 of file shlfileop.cpp.

1450 {
1451  WCHAR dir[MAX_PATH];
1452  LPCWSTR ptr = StrChrW(szDestDir, '\\');
1453 
1454  /* make sure all directories up to last one are created */
1455  while (ptr && (ptr = StrChrW(ptr + 1, '\\')))
1456  {
1457  lstrcpynW(dir, szDestDir, ptr - szDestDir + 1);
1458 
1459  if (!PathFileExistsW(dir))
1461  }
1462 
1463  /* create last directory */
1464  if (!PathFileExistsW(szDestDir))
1465  SHNotifyCreateDirectoryW(szDestDir, NULL);
1466 }
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define lstrcpynW
Definition: compat.h:597
static DWORD SHNotifyCreateDirectoryW(LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
Definition: shlfileop.cpp:416
static PVOID ptr
Definition: dispmode.c:27
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1776
unsigned int dir
Definition: maze.c:112
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:34
LPWSTR WINAPI StrChrW(LPCWSTR lpszStr, WCHAR ch)
Definition: string.c:468
#define NULL
Definition: types.h:112

Referenced by copy_files(), and move_files().

◆ delete_files()

static HRESULT delete_files ( FILE_OPERATION op,
const FILE_LIST flFrom 
)
static

Definition at line 1618 of file shlfileop.cpp.

1619 {
1620  const FILE_ENTRY *fileEntry;
1621  DWORD i;
1622  BOOL bPathExists;
1623  BOOL bTrash;
1624 
1625  if (!flFrom->dwNumFiles)
1626  return ERROR_SUCCESS;
1627 
1628  /* Windows also checks only the first item */
1629  bTrash = (op->req->fFlags & FOF_ALLOWUNDO)
1630  && TRASH_CanTrashFile(flFrom->feFiles[0].szFullPath);
1631 
1632  if (!(op->req->fFlags & FOF_NOCONFIRMATION) || (!bTrash && op->req->fFlags & FOF_WANTNUKEWARNING))
1633  if (!confirm_delete_list(op->req->hwnd, op->req->fFlags, bTrash, flFrom))
1634  {
1635  op->req->fAnyOperationsAborted = TRUE;
1636  return 0;
1637  }
1638 
1639  /* Check files. Do not delete one if one file does not exists */
1640  for (i = 0; i < flFrom->dwNumFiles; i++)
1641  {
1642  fileEntry = &flFrom->feFiles[i];
1643 
1644  if (fileEntry->attributes == (ULONG)-1)
1645  {
1646  // This is a windows 2003 server specific value which has been removed.
1647  // Later versions of windows return ERROR_FILE_NOT_FOUND.
1649  }
1650  }
1651 
1652  for (i = 0; i < flFrom->dwNumFiles; i++)
1653  {
1654  bPathExists = TRUE;
1655  fileEntry = &flFrom->feFiles[i];
1656 
1657  if (!IsAttribFile(fileEntry->attributes) &&
1658  (op->req->fFlags & FOF_FILESONLY && fileEntry->bFromWildcard))
1659  continue;
1660 
1661  if (bTrash)
1662  {
1663  BOOL bDelete;
1664  if (TRASH_TrashFile(fileEntry->szFullPath))
1665  {
1667  continue;
1668  }
1669 
1670  /* Note: Windows silently deletes the file in such a situation, we show a dialog */
1671  if (!(op->req->fFlags & FOF_NOCONFIRMATION) || (op->req->fFlags & FOF_WANTNUKEWARNING))
1672  bDelete = SHELL_ConfirmDialogW(op->req->hwnd, ASK_CANT_TRASH_ITEM, fileEntry->szFullPath, NULL);
1673  else
1674  bDelete = TRUE;
1675 
1676  if (!bDelete)
1677  {
1678  op->req->fAnyOperationsAborted = TRUE;
1679  break;
1680  }
1681  }
1682 
1683  /* delete the file or directory */
1684  if (IsAttribFile(fileEntry->attributes))
1685  {
1686  bPathExists = (ERROR_SUCCESS == SHNotifyDeleteFileW(op, fileEntry->szFullPath));
1687  }
1688  else
1689  bPathExists = SHELL_DeleteDirectoryW(op, fileEntry->szFullPath, FALSE);
1690 
1691  if (!bPathExists)
1692  {
1693  DWORD err = GetLastError();
1694 
1695  if (ERROR_FILE_NOT_FOUND == err)
1696  {
1697  // This is a windows 2003 server specific value which ahs been removed.
1698  // Later versions of windows return ERROR_FILE_NOT_FOUND.
1700  }
1701  else
1702  {
1703  return err;
1704  }
1705  }
1706 
1707  if (op->progress != NULL)
1708  op->bCancelled |= op->progress->HasUserCancelled();
1709  /* Should fire on progress dialog only */
1710  if (op->bCancelled)
1711  return ERROR_CANCELLED;
1712  }
1713 
1714  return ERROR_SUCCESS;
1715 }
#define ASK_CANT_TRASH_ITEM
Definition: shell32_main.h:121
#define ERROR_SUCCESS
Definition: deptool.c:10
LPWSTR szFullPath
Definition: shlfileop.cpp:57
#define TRUE
Definition: types.h:120
#define FOF_ALLOWUNDO
Definition: shellapi.h:144
#define FOF_WANTNUKEWARNING
Definition: shellapi.h:152
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
DWORD attributes
Definition: shlfileop.cpp:54
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
DWORD dwNumFiles
Definition: shlfileop.cpp:67
#define FOF_NOCONFIRMATION
Definition: shellapi.h:142
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
#define FOF_FILESONLY
Definition: shellapi.h:145
unsigned long DWORD
Definition: ntddk_ex.h:95
UINT op
Definition: effect.c:236
static BOOL SHELL_ConfirmDialogW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir, FILE_OPERATION *op)
Definition: shlfileop.cpp:293
BOOL bFromWildcard
Definition: shlfileop.cpp:58
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
#define err(...)
static DWORD SHNotifyDeleteFileW(FILE_OPERATION *op, LPCWSTR path)
Definition: shlfileop.cpp:605
Definition: shlfileop.cpp:52
#define SHCNF_PATHW
Definition: shlobj.h:1764
static BOOL confirm_delete_list(HWND hWnd, DWORD fFlags, BOOL fTrash, const FILE_LIST *flFrom)
Definition: shlfileop.cpp:1596
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define ERROR_CANCELLED
Definition: winerror.h:726
#define SHCNE_DELETE
Definition: shlobj.h:1731
BOOL TRASH_TrashFile(LPCWSTR wszPath)
#define NULL
Definition: types.h:112
BOOL SHELL_DeleteDirectoryW(FILE_OPERATION *op, LPCWSTR pszDir, BOOL bShowUI)
Definition: shlfileop.cpp:369
#define ERROR_SHELL_INTERNAL_FILE_NOT_FOUND
Definition: shlfileop.cpp:50
unsigned int ULONG
Definition: retypes.h:1
BOOL TRASH_CanTrashFile(LPCWSTR wszPath)
#define IsAttribFile(x)
Definition: shlfileop.cpp:30
FILE_ENTRY * feFiles
Definition: shlfileop.cpp:65

Referenced by SHFileOperationW().

◆ destroy_file_list()

static void destroy_file_list ( FILE_LIST flList)
static

Definition at line 1289 of file shlfileop.cpp.

1290 {
1291  DWORD i;
1292 
1293  if (!flList || !flList->feFiles)
1294  return;
1295 
1296  for (i = 0; i < flList->dwNumFiles; i++)
1297  {
1298  HeapFree(GetProcessHeap(), 0, flList->feFiles[i].szDirectory);
1299  HeapFree(GetProcessHeap(), 0, flList->feFiles[i].szFilename);
1300  HeapFree(GetProcessHeap(), 0, flList->feFiles[i].szFullPath);
1301  }
1302 
1303  HeapFree(GetProcessHeap(), 0, flList->feFiles);
1304 }
LPWSTR szFullPath
Definition: shlfileop.cpp:57
DWORD dwNumFiles
Definition: shlfileop.cpp:67
LPWSTR szFilename
Definition: shlfileop.cpp:56
#define GetProcessHeap()
Definition: compat.h:595
unsigned long DWORD
Definition: ntddk_ex.h:95
LPWSTR szDirectory
Definition: shlfileop.cpp:55
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define HeapFree(x, y, z)
Definition: compat.h:594
FILE_ENTRY * feFiles
Definition: shlfileop.cpp:65

Referenced by copy_dir_to_dir(), copy_files(), move_dir_to_dir(), and SHFileOperationW().

◆ grow_list()

static void __inline grow_list ( FILE_LIST list)
static

Definition at line 1127 of file shlfileop.cpp.

1128 {
1130  list->num_alloc * 2 * sizeof(*newx) );
1131  list->feFiles = newx;
1132  list->num_alloc *= 2;
1133 }
#define GetProcessHeap()
Definition: compat.h:595
Definition: shlfileop.cpp:52
#define HeapReAlloc
Definition: compat.h:593
#define list
Definition: rosglue.h:35
#define HEAP_ZERO_MEMORY
Definition: compat.h:134

Referenced by parse_file_list(), and parse_wildcard_files().

◆ IsNetDrive()

EXTERN_C int WINAPI IsNetDrive ( int  drive)

Definition at line 2206 of file shlfileop.cpp.

2207 {
2208  char root[4];
2209  strcpy(root, "A:\\");
2210  root[0] += (char)drive;
2211  return (GetDriveTypeA(root) == DRIVE_REMOTE);
2212 }
UINT WINAPI GetDriveTypeA(IN LPCSTR lpRootPathName)
Definition: disk.c:468
#define DRIVE_REMOTE
Definition: winbase.h:250
unsigned char
Definition: typeof.h:29
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388

Referenced by PathIsNetworkPathA(), and PathIsNetworkPathW().

◆ move_dir_to_dir()

static void move_dir_to_dir ( FILE_OPERATION op,
const FILE_ENTRY feFrom,
LPCWSTR  szDestPath 
)
static

Definition at line 1717 of file shlfileop.cpp.

1718 {
1719  WCHAR szFrom[MAX_PATH], szTo[MAX_PATH];
1720  FILE_LIST flFromNew, flToNew;
1721 
1722  if (IsDotDir(feFrom->szFilename))
1723  return;
1724 
1725  SHNotifyCreateDirectoryW(szDestPath, NULL);
1726 
1727  PathCombineW(szFrom, feFrom->szFullPath, L"*.*");
1728  szFrom[lstrlenW(szFrom) + 1] = '\0';
1729 
1730  lstrcpyW(szTo, szDestPath);
1731  szTo[lstrlenW(szDestPath) + 1] = '\0';
1732 
1733  ZeroMemory(&flFromNew, sizeof(FILE_LIST));
1734  ZeroMemory(&flToNew, sizeof(FILE_LIST));
1735  parse_file_list(&flFromNew, szFrom);
1736  parse_file_list(&flToNew, szTo);
1737 
1738  move_files(op, FALSE, &flFromNew, &flToNew);
1739 
1740  destroy_file_list(&flFromNew);
1741  destroy_file_list(&flToNew);
1742 
1743  if (PathIsDirectoryEmptyW(feFrom->szFullPath))
1745 }
static HRESULT parse_file_list(FILE_LIST *flList, LPCWSTR szFiles)
Definition: shlfileop.cpp:1219
LPWSTR szFullPath
Definition: shlfileop.cpp:57
#define ZeroMemory
Definition: winbase.h:1667
#define lstrlenW
Definition: compat.h:609
#define L(x)
Definition: ntvdm.h:50
static DWORD SHNotifyCreateDirectoryW(LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
Definition: shlfileop.cpp:416
#define FALSE
Definition: types.h:117
EXTERN_C BOOL WINAPI Win32RemoveDirectoryW(LPCWSTR path)
Definition: shlfileop.cpp:470
static void destroy_file_list(FILE_LIST *flList)
Definition: shlfileop.cpp:1289
static DWORD move_files(FILE_OPERATION *op, BOOL multiDest, const FILE_LIST *flFrom, const FILE_LIST *flTo)
Definition: shlfileop.cpp:1761
LPWSTR szFilename
Definition: shlfileop.cpp:56
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:34
UINT op
Definition: effect.c:236
BOOL WINAPI PathIsDirectoryEmptyW(LPCWSTR lpszPath)
Definition: path.c:3930
#define lstrcpyW
Definition: compat.h:608
#define NULL
Definition: types.h:112
#define IsDotDir(x)
Definition: shlfileop.cpp:32
LPWSTR WINAPI PathCombineW(LPWSTR lpszDest, LPCWSTR lpszDir, LPCWSTR lpszFile)
Definition: path.c:194

Referenced by move_to_dir().

◆ move_files()

static DWORD move_files ( FILE_OPERATION op,
BOOL  multiDest,
const FILE_LIST flFrom,
const FILE_LIST flTo 
)
static

Definition at line 1761 of file shlfileop.cpp.

1762 {
1763  DWORD i;
1764  INT mismatched = 0;
1765 
1766  const FILE_ENTRY *entryToMove;
1767  const FILE_ENTRY *fileDest;
1768 
1769  if (!flFrom->dwNumFiles)
1770  return ERROR_SUCCESS;
1771 
1772  if (!flTo->dwNumFiles)
1773  return ERROR_FILE_NOT_FOUND;
1774 
1775  if (!(multiDest) &&
1776  flTo->dwNumFiles > 1 && flFrom->dwNumFiles > 1)
1777  {
1778  return ERROR_CANCELLED;
1779  }
1780 
1781  if (!(multiDest) &&
1782  !flFrom->bAnyDirectories &&
1783  flFrom->dwNumFiles > flTo->dwNumFiles &&
1784  !(flTo->bAnyDirectories && flTo->dwNumFiles == 1))
1785  {
1786  return ERROR_CANCELLED;
1787  }
1788 
1789  if (!PathFileExistsW(flTo->feFiles[0].szDirectory))
1790  return ERROR_CANCELLED;
1791 
1792  if (multiDest)
1793  mismatched = flFrom->dwNumFiles - flTo->dwNumFiles;
1794 
1795  fileDest = &flTo->feFiles[0];
1796  for (i = 0; i < flFrom->dwNumFiles; i++)
1797  {
1798  entryToMove = &flFrom->feFiles[i];
1799 
1800  if (!PathFileExistsW(fileDest->szDirectory))
1801  return ERROR_CANCELLED;
1802 
1803  if (multiDest)
1804  {
1805  if (i >= flTo->dwNumFiles)
1806  break;
1807  fileDest = &flTo->feFiles[i];
1808  if (mismatched && !fileDest->bExists)
1809  {
1811  flTo->feFiles[i].bExists = TRUE;
1813  }
1814  }
1815 
1816  if (fileDest->bExists && IsAttribDir(fileDest->attributes))
1817  move_to_dir(op, entryToMove, fileDest);
1818  else
1819  SHNotifyMoveFileW(op, entryToMove->szFullPath, fileDest->szFullPath, IsAttribDir(entryToMove->attributes));
1820 
1821  if (op->progress != NULL)
1822  op->bCancelled |= op->progress->HasUserCancelled();
1823  /* Should fire on progress dialog only */
1824  if (op->bCancelled)
1825  return ERROR_CANCELLED;
1826 
1827  }
1828 
1829  if (mismatched > 0)
1830  {
1831  if (flFrom->bAnyDirectories)
1832  return DE_DESTSAMETREE;
1833  else
1834  return DE_SAMEFILE;
1835  }
1836 
1837  return ERROR_SUCCESS;
1838 }
#define ERROR_SUCCESS
Definition: deptool.c:10
LPWSTR szFullPath
Definition: shlfileop.cpp:57
#define TRUE
Definition: types.h:120
DWORD attributes
Definition: shlfileop.cpp:54
static DWORD SHNotifyMoveFileW(FILE_OPERATION *op, LPCWSTR src, LPCWSTR dest, BOOL isdir)
Definition: shlfileop.cpp:716
int32_t INT
Definition: typedefs.h:58
BOOL bExists
Definition: shlfileop.cpp:60
BOOL bAnyDirectories
Definition: shlfileop.cpp:69
DWORD dwNumFiles
Definition: shlfileop.cpp:67
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1776
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
unsigned long DWORD
Definition: ntddk_ex.h:95
UINT op
Definition: effect.c:236
#define DE_DESTSAMETREE
Definition: shlfileop.c:48
static void create_dest_dirs(LPCWSTR szDestDir)
Definition: shlfileop.cpp:1449
Definition: shlfileop.cpp:52
LPWSTR szDirectory
Definition: shlfileop.cpp:55
#define IsAttribDir(x)
Definition: shlfileop.cpp:31
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define ERROR_CANCELLED
Definition: winerror.h:726
#define NULL
Definition: types.h:112
#define DE_SAMEFILE
Definition: shlfileop.c:42
static void move_to_dir(FILE_OPERATION *op, const FILE_ENTRY *feFrom, const FILE_ENTRY *feTo)
Definition: shlfileop.cpp:1748
FILE_ENTRY * feFiles
Definition: shlfileop.cpp:65

Referenced by move_dir_to_dir(), and SHFileOperationW().

◆ move_to_dir()

static void move_to_dir ( FILE_OPERATION op,
const FILE_ENTRY feFrom,
const FILE_ENTRY feTo 
)
static

Definition at line 1748 of file shlfileop.cpp.

1749 {
1750  WCHAR szDestPath[MAX_PATH];
1751 
1752  PathCombineW(szDestPath, feTo->szFullPath, feFrom->szFilename);
1753 
1754  if (IsAttribFile(feFrom->attributes))
1755  SHNotifyMoveFileW(op, feFrom->szFullPath, szDestPath, FALSE);
1756  else if (!(op->req->fFlags & FOF_FILESONLY && feFrom->bFromWildcard))
1757  move_dir_to_dir(op, feFrom, szDestPath);
1758 }
LPWSTR szFullPath
Definition: shlfileop.cpp:57
DWORD attributes
Definition: shlfileop.cpp:54
static DWORD SHNotifyMoveFileW(FILE_OPERATION *op, LPCWSTR src, LPCWSTR dest, BOOL isdir)
Definition: shlfileop.cpp:716
#define FALSE
Definition: types.h:117
LPWSTR szFilename
Definition: shlfileop.cpp:56
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define FOF_FILESONLY
Definition: shellapi.h:145
#define MAX_PATH
Definition: compat.h:34
UINT op
Definition: effect.c:236
BOOL bFromWildcard
Definition: shlfileop.cpp:58
static void move_dir_to_dir(FILE_OPERATION *op, const FILE_ENTRY *feFrom, LPCWSTR szDestPath)
Definition: shlfileop.cpp:1717
#define IsAttribFile(x)
Definition: shlfileop.cpp:30
LPWSTR WINAPI PathCombineW(LPWSTR lpszDest, LPCWSTR lpszDir, LPCWSTR lpszFile)
Definition: path.c:194

Referenced by move_files().

◆ parse_file_list()

static HRESULT parse_file_list ( FILE_LIST flList,
LPCWSTR  szFiles 
)
static

Definition at line 1219 of file shlfileop.cpp.

1220 {
1221  LPCWSTR ptr = szFiles;
1222  WCHAR szCurFile[MAX_PATH];
1223  DWORD i = 0;
1224 
1225  if (!szFiles)
1226  return ERROR_INVALID_PARAMETER;
1227 
1228  flList->bAnyFromWildcard = FALSE;
1229  flList->bAnyDirectories = FALSE;
1230  flList->bAnyDontExist = FALSE;
1231  flList->num_alloc = 32;
1232  flList->dwNumFiles = 0;
1233 
1234  /* empty list */
1235  if (!szFiles[0])
1236  return ERROR_ACCESS_DENIED;
1237 
1239  flList->num_alloc * sizeof(FILE_ENTRY));
1240 
1241  while (*ptr)
1242  {
1243  if (i >= flList->num_alloc) grow_list( flList );
1244 
1245  /* change relative to absolute path */
1246  if (PathIsRelativeW(ptr))
1247  {
1248  GetCurrentDirectoryW(MAX_PATH, szCurFile);
1249  PathCombineW(szCurFile, szCurFile, ptr);
1250  flList->feFiles[i].bFromRelative = TRUE;
1251  }
1252  else
1253  {
1254  lstrcpyW(szCurFile, ptr);
1255  flList->feFiles[i].bFromRelative = FALSE;
1256  }
1257 
1258  /* parse wildcard files if they are in the filename */
1259  if (StrPBrkW(szCurFile, L"*?"))
1260  {
1261  parse_wildcard_files(flList, szCurFile, &i);
1262  flList->bAnyFromWildcard = TRUE;
1263  i--;
1264  }
1265  else
1266  {
1267  FILE_ENTRY *file = &flList->feFiles[i];
1268  add_file_to_entry(file, szCurFile);
1269  file->attributes = GetFileAttributesW( file->szFullPath );
1270  file->bExists = (file->attributes != INVALID_FILE_ATTRIBUTES);
1271 
1272  if (!file->bExists)
1273  flList->bAnyDontExist = TRUE;
1274 
1275  if (IsAttribDir(file->attributes))
1276  flList->bAnyDirectories = TRUE;
1277  }
1278 
1279  /* advance to the next string */
1280  ptr += lstrlenW(ptr) + 1;
1281  i++;
1282  }
1283  flList->dwNumFiles = i;
1284 
1285  return S_OK;
1286 }
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
LPWSTR WINAPI StrPBrkW(LPCWSTR lpszStr, LPCWSTR lpszMatch)
Definition: string.c:1276
BOOL WINAPI PathIsRelativeW(LPCWSTR lpszPath)
Definition: path.c:1578
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define TRUE
Definition: types.h:120
#define GetCurrentDirectoryW(x, y)
Definition: compat.h:615
BOOL bAnyFromWildcard
Definition: shlfileop.cpp:68
const TCHAR * szFiles[]
Definition: CImage.cpp:17
BOOL bFromRelative
Definition: shlfileop.cpp:59
#define lstrlenW
Definition: compat.h:609
#define L(x)
Definition: ntvdm.h:50
#define FALSE
Definition: types.h:117
#define ERROR_ACCESS_DENIED
Definition: compat.h:97
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:652
DWORD num_alloc
Definition: shlfileop.cpp:66
BOOL bAnyDirectories
Definition: shlfileop.cpp:69
static PVOID ptr
Definition: dispmode.c:27
DWORD dwNumFiles
Definition: shlfileop.cpp:67
static void parse_wildcard_files(FILE_LIST *flList, LPCWSTR szFile, LPDWORD pdwListIndex)
Definition: shlfileop.cpp:1185
static void __inline grow_list(FILE_LIST *list)
Definition: shlfileop.cpp:1127
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
static void add_file_to_entry(FILE_ENTRY *feFile, LPCWSTR szFile)
Definition: shlfileop.cpp:1137
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:34
unsigned long DWORD
Definition: ntddk_ex.h:95
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
Definition: shlfileop.cpp:52
#define IsAttribDir(x)
Definition: shlfileop.cpp:31
#define S_OK
Definition: intsafe.h:52
#define lstrcpyW
Definition: compat.h:608
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
LPWSTR WINAPI PathCombineW(LPWSTR lpszDest, LPCWSTR lpszDir, LPCWSTR lpszFile)
Definition: path.c:194
BOOL bAnyDontExist
Definition: shlfileop.cpp:70
Definition: fci.c:126
struct _FILE_ENTRY FILE_ENTRY
FILE_ENTRY * feFiles
Definition: shlfileop.cpp:65

Referenced by copy_dir_to_dir(), copy_files(), move_dir_to_dir(), and SHFileOperationW().

◆ parse_wildcard_files()

static void parse_wildcard_files ( FILE_LIST flList,
LPCWSTR  szFile,
LPDWORD  pdwListIndex 
)
static

Definition at line 1185 of file shlfileop.cpp.

1186 {
1187  WIN32_FIND_DATAW wfd;
1188  HANDLE hFile = FindFirstFileW(szFile, &wfd);
1189  FILE_ENTRY *file;
1190  LPWSTR szFullPath;
1191  BOOL res;
1192 
1193  if (hFile == INVALID_HANDLE_VALUE) return;
1194 
1195  for (res = TRUE; res; res = FindNextFileW(hFile, &wfd))
1196  {
1197  if (IsDotDir(wfd.cFileName))
1198  continue;
1199 
1200  if (*pdwListIndex >= flList->num_alloc)
1201  grow_list( flList );
1202 
1203  szFullPath = wildcard_to_file(szFile, wfd.cFileName);
1204  file = &flList->feFiles[(*pdwListIndex)++];
1205  add_file_to_entry(file, szFullPath);
1206  file->bFromWildcard = TRUE;
1207  file->attributes = wfd.dwFileAttributes;
1208 
1209  if (IsAttribDir(file->attributes))
1210  flList->bAnyDirectories = TRUE;
1211 
1212  HeapFree(GetProcessHeap(), 0, szFullPath);
1213  }
1214 
1215  FindClose(hFile);
1216 }
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:382
#define TRUE
Definition: types.h:120
#define INVALID_HANDLE_VALUE
Definition: compat.h:590
unsigned int BOOL
Definition: ntddk_ex.h:94
DWORD num_alloc
Definition: shlfileop.cpp:66
BOOL bAnyDirectories
Definition: shlfileop.cpp:69
static void __inline grow_list(FILE_LIST *list)
Definition: shlfileop.cpp:1127
#define GetProcessHeap()
Definition: compat.h:595
static void add_file_to_entry(FILE_ENTRY *feFile, LPCWSTR szFile)
Definition: shlfileop.cpp:1137
const char file[]
Definition: icontest.c:11
_In_ HANDLE hFile
Definition: mswsock.h:90
Definition: shlfileop.cpp:52
#define IsAttribDir(x)
Definition: shlfileop.cpp:31
#define IsDotDir(x)
Definition: shlfileop.cpp:32
GLuint res
Definition: glext.h:9613
static LPWSTR wildcard_to_file(LPCWSTR szWildCard, LPCWSTR szFileName)
Definition: shlfileop.cpp:1163
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define HeapFree(x, y, z)
Definition: compat.h:594
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
Definition: fci.c:126
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502
FILE_ENTRY * feFiles
Definition: shlfileop.cpp:65

Referenced by parse_file_list().

◆ RealDriveType()

EXTERN_C INT WINAPI RealDriveType ( INT  drive,
BOOL  bQueryNet 
)

Definition at line 2218 of file shlfileop.cpp.

2219 {
2220  char root[] = "A:\\";
2221  root[0] += (char)drive;
2222  return GetDriveTypeA(root);
2223 }
UINT WINAPI GetDriveTypeA(IN LPCSTR lpRootPathName)
Definition: disk.c:468
unsigned char
Definition: typeof.h:29

◆ rename_files()

static HRESULT rename_files ( FILE_OPERATION op,
const FILE_LIST flFrom,
const FILE_LIST flTo 
)
static

Definition at line 1841 of file shlfileop.cpp.

1842 {
1843  const FILE_ENTRY *feFrom;
1844  const FILE_ENTRY *feTo;
1845 
1846  if (flFrom->dwNumFiles != 1)
1847  return ERROR_GEN_FAILURE;
1848 
1849  if (flTo->dwNumFiles != 1)
1850  return ERROR_CANCELLED;
1851 
1852  feFrom = &flFrom->feFiles[0];
1853  feTo= &flTo->feFiles[0];
1854 
1855  /* fail if destination doesn't exist */
1856  if (!feFrom->bExists)
1858 
1859  /* fail if destination already exists */
1860  if (feTo->bExists)
1861  return ERROR_ALREADY_EXISTS;
1862 
1863  return SHNotifyMoveFileW(op, feFrom->szFullPath, feTo->szFullPath, IsAttribDir(feFrom->attributes));
1864 }
LPWSTR szFullPath
Definition: shlfileop.cpp:57
DWORD attributes
Definition: shlfileop.cpp:54
static DWORD SHNotifyMoveFileW(FILE_OPERATION *op, LPCWSTR src, LPCWSTR dest, BOOL isdir)
Definition: shlfileop.cpp:716
BOOL bExists
Definition: shlfileop.cpp:60
DWORD dwNumFiles
Definition: shlfileop.cpp:67
UINT op
Definition: effect.c:236
Definition: shlfileop.cpp:52
#define IsAttribDir(x)
Definition: shlfileop.cpp:31
#define ERROR_CANCELLED
Definition: winerror.h:726
#define ERROR_SHELL_INTERNAL_FILE_NOT_FOUND
Definition: shlfileop.cpp:50
#define ERROR_ALREADY_EXISTS
Definition: disk.h:80
#define ERROR_GEN_FAILURE
Definition: winerror.h:134
FILE_ENTRY * feFiles
Definition: shlfileop.cpp:65

Referenced by SHFileOperationW().

◆ SHCopyProgressRoutine()

DWORD CALLBACK SHCopyProgressRoutine ( LARGE_INTEGER  TotalFileSize,
LARGE_INTEGER  TotalBytesTransferred,
LARGE_INTEGER  StreamSize,
LARGE_INTEGER  StreamBytesTransferred,
DWORD  dwStreamNumber,
DWORD  dwCallbackReason,
HANDLE  hSourceFile,
HANDLE  hDestinationFile,
LPVOID  lpData 
)

Definition at line 558 of file shlfileop.cpp.

568  {
569  FILE_OPERATION *op = (FILE_OPERATION *) lpData;
570 
571  if (op->progress) {
572  /*
573  * This is called at the start of each file. To keop less state,
574  * I'm adding the file to the completed size here, and the re-subtracting
575  * it when drawing the progress bar.
576  */
577  if (dwCallbackReason & CALLBACK_STREAM_SWITCH)
578  op->completedSize.QuadPart += TotalFileSize.QuadPart;
579 
580  op->progress->SetProgress64(op->completedSize.QuadPart -
581  TotalFileSize.QuadPart +
582  TotalBytesTransferred.QuadPart
583  , op->totalSize.QuadPart);
584 
585 
586  op->bCancelled = op->progress->HasUserCancelled();
587  }
588 
589  return 0;
590 }
#define CALLBACK_STREAM_SWITCH
Definition: winbase.h:151
UINT op
Definition: effect.c:236
LONGLONG QuadPart
Definition: typedefs.h:114

Referenced by SHNotifyCopyFileW(), SHNotifyDeleteFileW(), and SHNotifyMoveFileW().

◆ SHCreateDirectory()

int WINAPI SHCreateDirectory ( HWND  hWnd,
LPCWSTR  path 
)

Definition at line 857 of file shlfileop.cpp.

858 {
860 }
HWND hWnd
Definition: settings.c:17
int WINAPI SHCreateDirectoryExW(HWND hWnd, LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
Definition: shlfileop.cpp:915
#define NULL
Definition: types.h:112

Referenced by CNewMenu::CreateNewFolder(), and CDefaultContextMenu::DoCreateNewFolder().

◆ SHCreateDirectoryExA()

int WINAPI SHCreateDirectoryExA ( HWND  hWnd,
LPCSTR  path,
LPSECURITY_ATTRIBUTES  sec 
)

Definition at line 894 of file shlfileop.cpp.

895 {
896  LPWSTR wPath;
897  DWORD retCode;
898 
899  TRACE("(%s, %p)\n", debugstr_a(path), sec);
900 
901  retCode = SHELL32_AnsiToUnicodeBuf(path, &wPath, 0);
902  if (!retCode)
903  {
904  retCode = SHCreateDirectoryExW(hWnd, wPath, sec);
905  SHELL32_FreeUnicodeBuf(wPath);
906  }
907  return retCode;
908 }
static void SHELL32_FreeUnicodeBuf(LPWSTR wPath)
Definition: shlfileop.cpp:352
static DWORD SHELL32_AnsiToUnicodeBuf(LPCSTR aPath, LPWSTR *wPath, DWORD minChars)
Definition: shlfileop.cpp:336
HWND hWnd
Definition: settings.c:17
#define TRACE(s)
Definition: solgame.cpp:4
#define debugstr_a
Definition: kernel32.h:31
unsigned long DWORD
Definition: ntddk_ex.h:95
int WINAPI SHCreateDirectoryExW(HWND hWnd, LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
Definition: shlfileop.cpp:915
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by test_sh_create_dir().

◆ SHCreateDirectoryExW()

int WINAPI SHCreateDirectoryExW ( HWND  hWnd,
LPCWSTR  path,
LPSECURITY_ATTRIBUTES  sec 
)

Definition at line 915 of file shlfileop.cpp.

916 {
917  int ret = ERROR_BAD_PATHNAME;
918  TRACE("(%p, %s, %p)\n", hWnd, debugstr_w(path), sec);
919 
920  if (PathIsRelativeW(path))
921  {
922  SetLastError(ret);
923  }
924  else
925  {
927  /* Refuse to work on certain error codes before trying to create directories recursively */
928  if (ret != ERROR_SUCCESS &&
929  ret != ERROR_FILE_EXISTS &&
932  {
933  WCHAR *pEnd, *pSlash, szTemp[MAX_PATH + 1]; /* extra for PathAddBackslash() */
934 
935  lstrcpynW(szTemp, path, MAX_PATH);
936  pEnd = PathAddBackslashW(szTemp);
937  pSlash = szTemp + 3;
938 
939  while (*pSlash)
940  {
941  while (*pSlash && *pSlash != '\\') pSlash++;
942  if (*pSlash)
943  {
944  *pSlash = 0; /* terminate path at separator */
945 
946  ret = SHNotifyCreateDirectoryW(szTemp, pSlash + 1 == pEnd ? sec : NULL);
947  }
948  *pSlash++ = '\\'; /* put the separator back */
949  }
950  }
951 
952  if (ret && hWnd && (ERROR_CANCELLED != ret && ERROR_ALREADY_EXISTS != ret))
953  {
957  }
958  }
959 
960  return ret;
961 }
#define ERROR_FILE_EXISTS
Definition: winerror.h:165
BOOL WINAPI PathIsRelativeW(LPCWSTR lpszPath)
Definition: path.c:1578
#define ERROR_SUCCESS
Definition: deptool.c:10
HWND hWnd
Definition: settings.c:17
#define lstrcpynW
Definition: compat.h:597
#define MB_ICONEXCLAMATION
Definition: winuser.h:779
#define IDS_CREATEFOLDER_DENIED
Definition: shresdef.h:120
static DWORD SHNotifyCreateDirectoryW(LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
Definition: shlfileop.cpp:416
LPWSTR WINAPI PathAddBackslashW(LPWSTR lpszPath)
Definition: path.c:294
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:34
#define SetLastError(x)
Definition: compat.h:611
int ret
#define IDS_CREATEFOLDER_CAPTION
Definition: shresdef.h:121
#define shell32_hInstance
#define ERROR_CANCELLED
Definition: winerror.h:726
#define ShellMessageBoxW
Definition: precomp.h:59
#define NULL
Definition: types.h:112
#define MB_OK
Definition: winuser.h:784
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define ERROR_ALREADY_EXISTS
Definition: disk.h:80
#define ERROR_BAD_PATHNAME
Definition: winerror.h:233
#define ERROR_FILENAME_EXCED_RANGE
Definition: winerror.h:263

Referenced by create_target_directory(), SHCreateDirectory(), SHCreateDirectoryExA(), SHGetFolderPathAndSubDirW(), SHPathPrepareForWriteW(), test_unicode(), and wWinMain().

◆ SheChangeDirA()

EXTERN_C DWORD WINAPI SheChangeDirA ( LPSTR  path)

Definition at line 2181 of file shlfileop.cpp.

2182 {
2184  return 0;
2185  else
2186  return GetLastError();
2187 }
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
BOOL WINAPI SetCurrentDirectoryA(IN LPCSTR lpPathName)
Definition: path.c:2206

◆ SheChangeDirW()

EXTERN_C DWORD WINAPI SheChangeDirW ( LPWSTR  path)

Definition at line 2195 of file shlfileop.cpp.

2196 {
2198  return 0;
2199  else
2200  return GetLastError();
2201 }
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
BOOL WINAPI SetCurrentDirectoryW(IN LPCWSTR lpPathName)
Definition: path.c:2249

◆ SheGetDirA()

EXTERN_C DWORD WINAPI SheGetDirA ( DWORD  drive,
LPSTR  buffer 
)

Definition at line 2108 of file shlfileop.cpp.

2109 {
2110  WCHAR org_path[MAX_PATH];
2111  DWORD ret;
2112  char drv_path[3];
2113 
2114  /* change current directory to the specified drive */
2115  if (drive) {
2116  strcpy(drv_path, "A:");
2117  drv_path[0] += (char)drive-1;
2118 
2119  GetCurrentDirectoryW(MAX_PATH, org_path);
2120 
2121  SetCurrentDirectoryA(drv_path);
2122  }
2123 
2124  /* query current directory path of the specified drive */
2126 
2127  /* back to the original drive */
2128  if (drive)
2129  SetCurrentDirectoryW(org_path);
2130 
2131  if (!ret)
2132  return GetLastError();
2133 
2134  return 0;
2135 }
#define GetCurrentDirectoryW(x, y)
Definition: compat.h:615
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
GLuint buffer
Definition: glext.h:5915
unsigned char
Definition: typeof.h:29
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:34
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
BOOL WINAPI SetCurrentDirectoryA(IN LPCSTR lpPathName)
Definition: path.c:2206
BOOL WINAPI SetCurrentDirectoryW(IN LPCWSTR lpPathName)
Definition: path.c:2249
DWORD WINAPI GetCurrentDirectoryA(IN DWORD nBufferLength, OUT LPSTR lpBuffer)
Definition: path.c:2146
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388

◆ SheGetDirW()

EXTERN_C DWORD WINAPI SheGetDirW ( DWORD  drive,
LPWSTR  buffer 
)

Definition at line 2145 of file shlfileop.cpp.

2146 {
2147  WCHAR org_path[MAX_PATH];
2148  DWORD ret;
2149  char drv_path[3];
2150 
2151  /* change current directory to the specified drive */
2152  if (drive)
2153  {
2154  strcpy(drv_path, "A:");
2155  drv_path[0] += (char)drive-1;
2156 
2157  GetCurrentDirectoryW(MAX_PATH, org_path);
2158 
2159  SetCurrentDirectoryA(drv_path);
2160  }
2161 
2162  /* query current directory path of the specified drive */
2164 
2165  /* back to the original drive */
2166  if (drive)
2167  SetCurrentDirectoryW(org_path);
2168 
2169  if (!ret)
2170  return GetLastError();
2171 
2172  return 0;
2173 }
#define GetCurrentDirectoryW(x, y)
Definition: compat.h:615
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
GLuint buffer
Definition: glext.h:5915
unsigned char
Definition: typeof.h:29
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:34
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
BOOL WINAPI SetCurrentDirectoryA(IN LPCSTR lpPathName)
Definition: path.c:2206
BOOL WINAPI SetCurrentDirectoryW(IN LPCWSTR lpPathName)
Definition: path.c:2249
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388

◆ SHELL32_AnsiToUnicodeBuf()

static DWORD SHELL32_AnsiToUnicodeBuf ( LPCSTR  aPath,
LPWSTR wPath,
DWORD  minChars 
)
static

Definition at line 336 of file shlfileop.cpp.

337 {
338  DWORD len = MultiByteToWideChar(CP_ACP, 0, aPath, -1, NULL, 0);
339 
340  if (len < minChars)
341  len = minChars;
342 
343  *wPath = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
344  if (*wPath)
345  {
346  MultiByteToWideChar(CP_ACP, 0, aPath, -1, *wPath, len);
347  return NO_ERROR;
348  }
349  return E_OUTOFMEMORY;
350 }
#define CP_ACP
Definition: compat.h:109
#define NO_ERROR
Definition: dderror.h:5
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned long DWORD
Definition: ntddk_ex.h:95
GLenum GLsizei len
Definition: glext.h:6722
#define NULL
Definition: types.h:112
#define MultiByteToWideChar
Definition: compat.h:110
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by SHCreateDirectoryExA().

◆ SHELL32_FreeUnicodeBuf()

static void SHELL32_FreeUnicodeBuf ( LPWSTR  wPath)
static

Definition at line 352 of file shlfileop.cpp.

353 {
354  HeapFree(GetProcessHeap(), 0, wPath);
355 }
#define GetProcessHeap()
Definition: compat.h:595
#define HeapFree(x, y, z)
Definition: compat.h:594

Referenced by SHCreateDirectoryExA().

◆ SHELL_ConfirmDialogW()

static BOOL SHELL_ConfirmDialogW ( HWND  hWnd,
int  nKindOfDialog,
LPCWSTR  szDir,
FILE_OPERATION op 
)
static

Definition at line 293 of file shlfileop.cpp.

294 {
295  WCHAR szCaption[255], szText[255], szBuffer[MAX_PATH + 256];
297  DWORD_PTR args[1];
298  HICON hIcon;
299  int ret;
300 
301  assert(nKindOfDialog >= 0 && nKindOfDialog < 32);
302  if (op && (op->dwYesToAllMask & (1 << nKindOfDialog)))
303  return TRUE;
304 
305  if (!SHELL_ConfirmIDs(nKindOfDialog, &ids)) return FALSE;
306 
307  LoadStringW(shell32_hInstance, ids.caption_resource_id, szCaption, sizeof(szCaption)/sizeof(WCHAR));
308  LoadStringW(shell32_hInstance, ids.text_resource_id, szText, sizeof(szText)/sizeof(WCHAR));
309 
310  args[0] = (DWORD_PTR)szDir;
312  szText, 0, 0, szBuffer, sizeof(szBuffer), (va_list*)args);
313  hIcon = LoadIconW(ids.hIconInstance, (LPWSTR)MAKEINTRESOURCE(ids.icon_resource_id));
314 
315  ret = SHELL_ConfirmMsgBox(hWnd, szBuffer, szCaption, hIcon, op && op->bManyItems);
316  if (op)
317  {
318  if (ret == IDC_YESTOALL)
319  {
320  op->dwYesToAllMask |= (1 << nKindOfDialog);
321  ret = IDYES;
322  }
323  if (ret == IDCANCEL)
324  op->bCancelled = TRUE;
325  if (ret != IDYES)
326  op->req->fAnyOperationsAborted = TRUE;
327  }
328  return ret == IDYES;
329 }
#define MAKEINTRESOURCE
Definition: winuser.h:591
static HICON
Definition: imagelist.c:84
#define DWORD_PTR
Definition: treelist.c:76
#define IDYES
Definition: winuser.h:829
#define TRUE
Definition: types.h:120
#define FORMAT_MESSAGE_ARGUMENT_ARRAY
Definition: winbase.h:421
#define FORMAT_MESSAGE_FROM_STRING
Definition: winbase.h:418
HWND hWnd
Definition: settings.c:17
#define assert(x)
Definition: debug.h:53
DWORD WINAPI FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:583
Definition: match.c:390
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
GLuint * ids
Definition: glext.h:5907
#define FALSE
Definition: types.h:117
char * va_list
Definition: acmsvcex.h:78
static BOOL SHELL_ConfirmIDs(int nKindOfDialog, SHELL_ConfirmIDstruc *ids)
Definition: shlfileop.cpp:222
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:34
UINT op
Definition: effect.c:236
int ret
uint32_t DWORD_PTR
Definition: typedefs.h:65
#define shell32_hInstance
#define IDC_YESTOALL
Definition: shresdef.h:399
HICON hIcon
Definition: msconfig.c:44
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2044
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define IDCANCEL
Definition: winuser.h:825
int SHELL_ConfirmMsgBox(HWND hWnd, LPWSTR lpszText, LPWSTR lpszCaption, HICON hIcon, BOOL bYesToAll)
Definition: shlfileop.cpp:203

Referenced by confirm_delete_list(), copy_dir_to_dir(), copy_file_to_file(), delete_files(), SHELL_ConfirmYesNoW(), and SHELL_DeleteDirectoryW().

◆ SHELL_ConfirmIDs()

static BOOL SHELL_ConfirmIDs ( int  nKindOfDialog,
SHELL_ConfirmIDstruc ids 
)
static

Definition at line 222 of file shlfileop.cpp.

223 {
224  ids->hIconInstance = shell32_hInstance;
225  switch (nKindOfDialog)
226  {
227  case ASK_DELETE_FILE:
228  ids->icon_resource_id = IDI_SHELL_CONFIRM_DELETE;
229  ids->caption_resource_id = IDS_DELETEITEM_CAPTION;
230  ids->text_resource_id = IDS_DELETEITEM_TEXT;
231  return TRUE;
232 
233  case ASK_DELETE_FOLDER:
234  ids->icon_resource_id = IDI_SHELL_CONFIRM_DELETE;
235  ids->caption_resource_id = IDS_DELETEFOLDER_CAPTION;
236  ids->text_resource_id = IDS_DELETEITEM_TEXT;
237  return TRUE;
238 
240  ids->icon_resource_id = IDI_SHELL_CONFIRM_DELETE;
241  ids->caption_resource_id = IDS_DELETEITEM_CAPTION;
242  ids->text_resource_id = IDS_DELETEMULTIPLE_TEXT;
243  return TRUE;
244 
245  case ASK_TRASH_FILE:
246  ids->icon_resource_id = IDI_SHELL_TRASH_FILE;
247  ids->caption_resource_id = IDS_DELETEITEM_CAPTION;
248  ids->text_resource_id = IDS_TRASHITEM_TEXT;
249  return TRUE;
250 
251  case ASK_TRASH_FOLDER:
252  ids->icon_resource_id = IDI_SHELL_TRASH_FILE;
253  ids->caption_resource_id = IDS_DELETEFOLDER_CAPTION;
254  ids->text_resource_id = IDS_TRASHFOLDER_TEXT;
255  return TRUE;
256 
258  ids->icon_resource_id = IDI_SHELL_TRASH_FILE;
259  ids->caption_resource_id = IDS_DELETEITEM_CAPTION;
260  ids->text_resource_id = IDS_TRASHMULTIPLE_TEXT;
261  return TRUE;
262 
263  case ASK_CANT_TRASH_ITEM:
264  ids->icon_resource_id = IDI_SHELL_CONFIRM_DELETE;
265  ids->caption_resource_id = IDS_DELETEITEM_CAPTION;
266  ids->text_resource_id = IDS_CANTTRASH_TEXT;
267  return TRUE;
268 
269  case ASK_DELETE_SELECTED:
270  ids->icon_resource_id = IDI_SHELL_CONFIRM_DELETE;
271  ids->caption_resource_id = IDS_DELETEITEM_CAPTION;
272  ids->text_resource_id = IDS_DELETESELECTED_TEXT;
273  return TRUE;
274 
275  case ASK_OVERWRITE_FILE:
276  ids->icon_resource_id = IDI_SHELL_FOLDER_MOVE2;
277  ids->caption_resource_id = IDS_OVERWRITEFILE_CAPTION;
278  ids->text_resource_id = IDS_OVERWRITEFILE_TEXT;
279  return TRUE;
280 
282  ids->icon_resource_id = IDI_SHELL_FOLDER_MOVE2;
283  ids->caption_resource_id = IDS_OVERWRITEFILE_CAPTION;
284  ids->text_resource_id = IDS_OVERWRITEFOLDER_TEXT;
285  return TRUE;
286 
287  default:
288  FIXME(" Unhandled nKindOfDialog %d stub\n", nKindOfDialog);
289  }
290  return FALSE;
291 }
#define ASK_CANT_TRASH_ITEM
Definition: shell32_main.h:121
#define IDI_SHELL_CONFIRM_DELETE
Definition: shresdef.h:597
#define TRUE
Definition: types.h:120
#define ASK_DELETE_FILE
Definition: shell32_main.h:112
#define IDS_OVERWRITEFILE_CAPTION
Definition: shresdef.h:126
#define ASK_TRASH_FILE
Definition: shell32_main.h:118
#define IDS_DELETEITEM_CAPTION
Definition: shresdef.h:122
#define ASK_DELETE_SELECTED
Definition: shell32_main.h:117
#define IDS_OVERWRITEFOLDER_TEXT
Definition: shresdef.h:133
#define ASK_TRASH_FOLDER
Definition: shell32_main.h:119
#define ASK_TRASH_MULTIPLE_ITEM
Definition: shell32_main.h:120
#define IDI_SHELL_FOLDER_MOVE2
Definition: shresdef.h:670
#define IDS_DELETEFOLDER_CAPTION
Definition: shresdef.h:123
GLuint * ids
Definition: glext.h:5907
#define FALSE
Definition: types.h:117
#define FIXME(fmt,...)
Definition: debug.h:111
#define ASK_DELETE_FOLDER
Definition: shell32_main.h:113
#define IDS_DELETEITEM_TEXT
Definition: shresdef.h:124
#define ASK_DELETE_MULTIPLE_ITEM
Definition: shell32_main.h:114
#define IDI_SHELL_TRASH_FILE
Definition: shresdef.h:582
#define IDS_TRASHFOLDER_TEXT
Definition: shresdef.h:129
#define ASK_OVERWRITE_FILE
Definition: shell32_main.h:116
#define IDS_OVERWRITEFILE_TEXT
Definition: resource.h:67
#define IDS_DELETEMULTIPLE_TEXT
Definition: shresdef.h:125
#define shell32_hInstance
#define IDS_DELETESELECTED_TEXT
Definition: shresdef.h:128
#define ASK_OVERWRITE_FOLDER
Definition: shell32_main.h:122
#define IDS_TRASHMULTIPLE_TEXT
Definition: shresdef.h:131
#define IDS_TRASHITEM_TEXT
Definition: shresdef.h:130
#define IDS_CANTTRASH_TEXT
Definition: shresdef.h:132

Referenced by SHELL_ConfirmDialogW().

◆ SHELL_ConfirmMsgBox()

int SHELL_ConfirmMsgBox ( HWND  hWnd,
LPWSTR  lpszText,
LPWSTR  lpszCaption,
HICON  hIcon,
BOOL  bYesToAll 
)

Definition at line 203 of file shlfileop.cpp.

204 {
205  struct confirm_msg_info info;
206 
207  info.lpszText = lpszText;
208  info.lpszCaption = lpszCaption;
209  info.hIcon = hIcon;
210  info.bYesToAll = bYesToAll;
212 }
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
#define IDD_YESTOALL_MSGBOX
Definition: shresdef.h:398
HWND hWnd
Definition: settings.c:17
LONG_PTR LPARAM
Definition: windef.h:208
static INT_PTR CALLBACK ConfirmMsgBoxProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: shlfileop.cpp:185
#define shell32_hInstance
HICON hIcon
Definition: msconfig.c:44
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
LPWSTR lpszCaption
Definition: shlfileop.cpp:90

Referenced by SHELL_ConfirmDialogW().

◆ SHELL_ConfirmYesNoW()

BOOL SHELL_ConfirmYesNoW ( HWND  hWnd,
int  nKindOfDialog,
LPCWSTR  szDir 
)

Definition at line 331 of file shlfileop.cpp.

332 {
333  return SHELL_ConfirmDialogW(hWnd, nKindOfDialog, szDir, NULL);
334 }
HWND hWnd
Definition: settings.c:17
static BOOL SHELL_ConfirmDialogW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir, FILE_OPERATION *op)
Definition: shlfileop.cpp:293
#define NULL
Definition: types.h:112

◆ SHELL_DeleteDirectoryW()

BOOL SHELL_DeleteDirectoryW ( FILE_OPERATION op,
LPCWSTR  pszDir,
BOOL  bShowUI 
)

Definition at line 369 of file shlfileop.cpp.

370 {
371  BOOL ret = TRUE;
372  HANDLE hFind;
373  WIN32_FIND_DATAW wfd;
374  WCHAR szTemp[MAX_PATH];
375 
376  /* Make sure the directory exists before eventually prompting the user */
377  PathCombineW(szTemp, pszDir, L"*");
378  hFind = FindFirstFileW(szTemp, &wfd);
379  if (hFind == INVALID_HANDLE_VALUE)
380  return FALSE;
381 
382  if (!bShowUI || (ret = SHELL_ConfirmDialogW(op->req->hwnd, ASK_DELETE_FOLDER, pszDir, NULL)))
383  {
384  do
385  {
386  if (IsDotDir(wfd.cFileName))
387  continue;
388  PathCombineW(szTemp, pszDir, wfd.cFileName);
389  if (FILE_ATTRIBUTE_DIRECTORY & wfd.dwFileAttributes)
390  ret = SHELL_DeleteDirectoryW(op, szTemp, FALSE);
391  else
392  ret = (SHNotifyDeleteFileW(op, szTemp) == ERROR_SUCCESS);
393 
394  if (op->progress != NULL)
395  op->bCancelled |= op->progress->HasUserCancelled();
396  } while (ret && FindNextFileW(hFind, &wfd) && !op->bCancelled);
397  }
398  FindClose(hFind);
399  if (ret)
401  return ret;
402 }
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:382
#define ERROR_SUCCESS
Definition: deptool.c:10
#define TRUE
Definition: types.h:120
#define INVALID_HANDLE_VALUE
Definition: compat.h:590
#define L(x)
Definition: ntvdm.h:50
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
#define ASK_DELETE_FOLDER
Definition: shell32_main.h:113
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
__wchar_t WCHAR
Definition: xmlstorage.h:180
_In_ LPCSTR pszDir
Definition: shellapi.h:582
#define MAX_PATH
Definition: compat.h:34
UINT op
Definition: effect.c:236
static BOOL SHELL_ConfirmDialogW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir, FILE_OPERATION *op)
Definition: shlfileop.cpp:293
static DWORD SHNotifyRemoveDirectoryW(LPCWSTR path)
Definition: shlfileop.cpp:446
int ret
static DWORD SHNotifyDeleteFileW(FILE_OPERATION *op, LPCWSTR path)
Definition: shlfileop.cpp:605
#define NULL
Definition: types.h:112
#define IsDotDir(x)
Definition: shlfileop.cpp:32
BOOL SHELL_DeleteDirectoryW(FILE_OPERATION *op, LPCWSTR pszDir, BOOL bShowUI)
Definition: shlfileop.cpp:369
LPWSTR WINAPI PathCombineW(LPWSTR lpszDest, LPCWSTR lpszDir, LPCWSTR lpszFile)
Definition: path.c:194
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502

Referenced by delete_files().

◆ SHFileOperationA()

int WINAPI SHFileOperationA ( LPSHFILEOPSTRUCTA  lpFileOp)

Definition at line 1069 of file shlfileop.cpp.

1070 {
1071  int errCode, retCode;
1072  SHFILEOPSTRUCTW nFileOp = { 0 };
1073 
1074  // Convert A information to W
1075  nFileOp.hwnd = lpFileOp->hwnd;
1076  nFileOp.wFunc = lpFileOp->wFunc;
1077  nFileOp.fFlags = lpFileOp->fFlags;
1078 
1079  errCode = _ConvertAtoW(lpFileOp->pFrom, &nFileOp.pFrom, TRUE);
1080  if (errCode != 0)
1081  goto cleanup;
1082 
1083  if (FO_DELETE != (nFileOp.wFunc & FO_MASK))
1084  {
1085  errCode = _ConvertAtoW(lpFileOp->pTo, &nFileOp.pTo, TRUE);
1086  if (errCode != 0)
1087  goto cleanup;
1088  }
1089 
1090  if (nFileOp.fFlags & FOF_SIMPLEPROGRESS)
1091  {
1092  errCode = _ConvertAtoW(lpFileOp->lpszProgressTitle, &nFileOp.lpszProgressTitle, FALSE);
1093  if (errCode != 0)
1094  goto cleanup;
1095  }
1096 
1097  // Call the actual function
1098  retCode = SHFileOperationW(&nFileOp);
1099  if (retCode)
1100  {
1101  ERR("SHFileOperationW failed with 0x%x\n", retCode);
1102  }
1103 
1104  // Cleanup
1105 cleanup:
1106  if (nFileOp.pFrom)
1107  HeapFree(GetProcessHeap(), 0, (PVOID) nFileOp.pFrom);
1108  if (nFileOp.pTo)
1109  HeapFree(GetProcessHeap(), 0, (PVOID) nFileOp.pTo);
1110  if (nFileOp.lpszProgressTitle)
1112 
1113  if (errCode != 0)
1114  {
1115  lpFileOp->fAnyOperationsAborted = TRUE;
1116  SetLastError(errCode);
1117 
1118  return errCode;
1119  }
1120 
1121  // Thankfully, starting with NT4 the name mappings are always unicode, so no need to convert.
1122  lpFileOp->hNameMappings = nFileOp.hNameMappings;
1123  lpFileOp->fAnyOperationsAborted = nFileOp.fAnyOperationsAborted;
1124  return retCode;
1125 }
PVOID hNameMappings
Definition: shellapi.h:359
#define TRUE
Definition: types.h:120
FILEOP_FLAGS fFlags
Definition: shellapi.h:347
#define FO_MASK
Definition: shlfileop.cpp:34
FILEOP_FLAGS fFlags
Definition: shellapi.h:357
int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
Definition: shlfileop.cpp:1982
BOOL fAnyOperationsAborted
Definition: shellapi.h:358
#define FALSE
Definition: types.h:117
LPCSTR lpszProgressTitle
Definition: shellapi.h:350
LPCWSTR lpszProgressTitle
Definition: shellapi.h:360
#define GetProcessHeap()
Definition: compat.h:595
#define SetLastError(x)
Definition: compat.h:611
#define FOF_SIMPLEPROGRESS
Definition: shellapi.h:146
BOOL fAnyOperationsAborted
Definition: shellapi.h:348
PVOID hNameMappings
Definition: shellapi.h:349
LPCWSTR pFrom
Definition: shellapi.h:355
#define ERR(fmt,...)
Definition: debug.h:110
static DWORD _ConvertAtoW(PCSTR strSrc, PCWSTR *pStrDest, BOOL isList)
Definition: shlfileop.cpp:1007
char * cleanup(char *str)
Definition: wpickclick.c:99
#define FO_DELETE
Definition: shellapi.h:135
#define HeapFree(x, y, z)
Definition: compat.h:594

Referenced by delete_cab_files(), delete_pfmsitest_files(), is_old_shell32(), loadShell32(), test_click_make_new_folder_button(), test_copy(), test_delete(), test_move(), and test_rename().

◆ SHFileOperationW()

int WINAPI SHFileOperationW ( LPSHFILEOPSTRUCTW  lpFileOp)

Definition at line 1982 of file shlfileop.cpp.

1983 {
1985  FILE_LIST flFrom, flTo;
1986  int ret = 0;
1987 
1988  if (!lpFileOp)
1989  return ERROR_INVALID_PARAMETER;
1990 
1991  ret = CoInitialize(NULL);
1992  if (FAILED(ret))
1993  return ret;
1994 
1995  lpFileOp->fAnyOperationsAborted = FALSE;
1996  check_flags(lpFileOp->fFlags);
1997 
1998  ZeroMemory(&flFrom, sizeof(FILE_LIST));
1999  ZeroMemory(&flTo, sizeof(FILE_LIST));
2000 
2001  if ((ret = parse_file_list(&flFrom, lpFileOp->pFrom)))
2002  return ret;
2003 
2004  if (lpFileOp->wFunc != FO_DELETE)
2005  parse_file_list(&flTo, lpFileOp->pTo);
2006 
2007  ZeroMemory(&op, sizeof(op));
2008  op.req = lpFileOp;
2009  op.totalSize.QuadPart = 0ull;
2010  op.completedSize.QuadPart = 0ull;
2011  op.bManyItems = (flFrom.dwNumFiles > 1);
2012 
2013 #ifdef __REACTOS__
2014  ret = validate_operation(lpFileOp, &flFrom, &flTo);
2015  if (ret)
2016  goto cleanup;
2017 #endif
2018  if (lpFileOp->wFunc != FO_RENAME && !(lpFileOp->fFlags & FOF_SILENT)) {
2019  ret = CoCreateInstance(CLSID_ProgressDialog,
2020  NULL,
2021  CLSCTX_INPROC_SERVER,
2022  IID_PPV_ARG(IProgressDialog, &op.progress));
2023  if (FAILED(ret))
2024  goto cleanup;
2025 
2026  op.progress->StartProgressDialog(op.req->hwnd, NULL, PROGDLG_NORMAL & PROGDLG_AUTOTIME, NULL);
2028  _FileOpCountManager(&op, &flFrom);
2029  }
2030 
2031  switch (lpFileOp->wFunc)
2032  {
2033  case FO_COPY:
2034  ret = copy_files(&op, op.req->fFlags & FOF_MULTIDESTFILES, &flFrom, &flTo);
2035  break;
2036  case FO_DELETE:
2037  ret = delete_files(&op, &flFrom);
2038  break;
2039  case FO_MOVE:
2040  ret = move_files(&op, op.req->fFlags & FOF_MULTIDESTFILES, &flFrom, &flTo);
2041  break;
2042  case FO_RENAME:
2043  ret = rename_files(&op, &flFrom, &flTo);
2044  break;
2045  default:
2047  break;
2048  }
2049 
2050  if (op.progress) {
2051  op.progress->StopProgressDialog();
2052  op.progress->Release();
2053  }
2054 
2055 cleanup:
2056  destroy_file_list(&flFrom);
2057 
2058  if (lpFileOp->wFunc != FO_DELETE)
2059  destroy_file_list(&flTo);
2060 
2061  if (ret == ERROR_CANCELLED)
2062  lpFileOp->fAnyOperationsAborted = TRUE;
2063 
2064  CoUninitialize();
2065 
2066  return ret;
2067 }
static HRESULT parse_file_list(FILE_LIST *flList, LPCWSTR szFiles)
Definition: shlfileop.cpp:1219
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
static HRESULT rename_files(FILE_OPERATION *op, const FILE_LIST *flFrom, const FILE_LIST *flTo)
Definition: shlfileop.cpp:1841
DWORD WINAPI _FileOpCountManager(FILE_OPERATION *op, const FILE_LIST *flFrom)
Definition: shlfileop.cpp:2306
#define TRUE
Definition: types.h:120
#define FO_COPY
Definition: shellapi.h:134
#define FOF_SILENT
Definition: shellapi.h:140
static HRESULT delete_files(FILE_OPERATION *op, const FILE_LIST *flFrom)
Definition: shlfileop.cpp:1618
#define ZeroMemory
Definition: winbase.h:1667
static HRESULT copy_files(FILE_OPERATION *op, BOOL multiDest, const FILE_LIST *flFrom, FILE_LIST *flTo)
Definition: shlfileop.cpp:1469
FILEOP_FLAGS fFlags
Definition: shellapi.h:357
#define FO_RENAME
Definition: shellapi.h:136
#define IID_PPV_ARG(Itype, ppType)
static void _SetOperationTitle(FILE_OPERATION *op)
Definition: shlfileop.cpp:475
#define FO_MOVE
Definition: shellapi.h:133
BOOL fAnyOperationsAborted
Definition: shellapi.h:358
static void check_flags(FILEOP_FLAGS fFlags)
Definition: shlfileop.cpp:1867
#define FALSE
Definition: types.h:117
DWORD dwNumFiles
Definition: shlfileop.cpp:67
static void destroy_file_list(FILE_LIST *flList)
Definition: shlfileop.cpp:1289
static DWORD move_files(FILE_OPERATION *op, BOOL multiDest, const FILE_LIST *flFrom, const FILE_LIST *flTo)
Definition: shlfileop.cpp:1761
UINT op
Definition: effect.c:236
#define PROGDLG_AUTOTIME
Definition: shlobj.h:893
#define PROGDLG_NORMAL
Definition: shlobj.h:891
LPCWSTR pFrom
Definition: shellapi.h:355
int ret
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
#define ERROR_CANCELLED
Definition: winerror.h:726
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
#define NULL
Definition: types.h:112
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:1964
char * cleanup(char *str)
Definition: wpickclick.c:99
#define FOF_MULTIDESTFILES
Definition: shellapi.h:138
#define FO_DELETE
Definition: shellapi.h:135

Referenced by CFSDropTarget::_CopyItems(), CRecyclerDropTarget::_DoDeleteDataObject(), CFSDropTarget::_DoDrop(), cache_container_delete_dir(), ChildWndProc(), CCopyToMenu::DoRealCopy(), CMoveToMenu::DoRealMove(), CMyDocsDropHandler::Drop(), RecycleBin5_RecycleBin5_Restore(), SHFileOperationA(), SHFileOperationWrapW(), and test_unicode().

◆ SHFindAttrW()

static DWORD SHFindAttrW ( LPCWSTR  pName,
BOOL  fileOnly 
)
static

Definition at line 978 of file shlfileop.cpp.

979 {
980  WIN32_FIND_DATAW wfd;
981  BOOL b_FileMask = fileOnly && (NULL != StrPBrkW(pName, L"*?"));
983  HANDLE hFind = FindFirstFileW(pName, &wfd);
984 
985  TRACE("%s %d\n", debugstr_w(pName), fileOnly);
986  if (INVALID_HANDLE_VALUE != hFind)
987  {
988  do
989  {
990  if (b_FileMask && IsAttribDir(wfd.dwFileAttributes))
991  continue;
992  dwAttr = wfd.dwFileAttributes;
993  break;
994  } while (FindNextFileW(hFind, &wfd));
995 
996  FindClose(hFind);
997  }
998  return dwAttr;
999 }
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:382
LPWSTR WINAPI StrPBrkW(LPCWSTR lpszStr, LPCWSTR lpszMatch)
Definition: string.c:1276
#define INVALID_HANDLE_VALUE
Definition: compat.h:590
#define L(x)
Definition: ntvdm.h:50
unsigned int BOOL
Definition: ntddk_ex.h:94
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
static LPSTR pName
Definition: security.c:75
unsigned long DWORD
Definition: ntddk_ex.h:95
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
#define IsAttribDir(x)
Definition: shlfileop.cpp:31
#define NULL
Definition: types.h:112
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502

Referenced by SHNotifyMoveFileW().

◆ SHFreeNameMappings()

void WINAPI SHFreeNameMappings ( HANDLE  hNameMapping)

Definition at line 2092 of file shlfileop.cpp.

2093 {
2094  if (hNameMapping)
2095  {
2096  DSA_DestroyCallback((HDSA) hNameMapping, _DestroyCallback, NULL);
2097  }
2098 }
Definition: dsa.c:44
static int CALLBACK _DestroyCallback(void *p, void *pData)
Definition: shlfileop.cpp:2070
void WINAPI DSA_DestroyCallback(HDSA hdsa, PFNDSAENUMCALLBACK enumProc, LPVOID lParam)
Definition: dsa.c:432
#define NULL
Definition: types.h:112

◆ SHIsCdRom()

static BOOL SHIsCdRom ( LPCWSTR  path)
static

Definition at line 758 of file shlfileop.cpp.

759 {
760  WCHAR tmp[] = { L"A:\\" };
761 
762  if (!path || !path[0])
763  return FALSE;
764 
765  if (path[1] != UNICODE_NULL && path[1] != ':')
766  return FALSE;
767 
768  tmp[0] = path[0];
769 
770  return GetDriveTypeW(tmp) == DRIVE_CDROM;
771 }
#define L(x)
Definition: ntvdm.h:50
#define DRIVE_CDROM
Definition: machpc98.h:115
#define FALSE
Definition: types.h:117
#define UNICODE_NULL
__wchar_t WCHAR
Definition: xmlstorage.h:180
UINT WINAPI GetDriveTypeW(IN LPCWSTR lpRootPathName)
Definition: disk.c:497

Referenced by SHNotifyCopyFileW().

◆ SHIsFileAvailableOffline()

EXTERN_C HRESULT WINAPI SHIsFileAvailableOffline ( LPCWSTR  path,
LPDWORD  status 
)

Definition at line 357 of file shlfileop.cpp.

358 {
359  FIXME("(%s, %p) stub\n", debugstr_w(path), status);
360  return E_FAIL;
361 }
#define E_FAIL
Definition: ddrawi.h:102
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:111
Definition: ps.c:97

◆ SHNotifyCopyFileW()

static DWORD SHNotifyCopyFileW ( FILE_OPERATION op,
LPCWSTR  src,
LPCWSTR  dest,
BOOL  bFailIfExists 
)
static

Definition at line 787 of file shlfileop.cpp.

788 {
789  BOOL ret;
790  DWORD attribs;
791 
792  TRACE("(%s %s %s)\n", debugstr_w(src), debugstr_w(dest), bFailIfExists ? "failIfExists" : "");
793 
795 
796  /* Destination file may already exist with read only attribute */
800 
802  {
805  {
806  TRACE("[shell32, SHNotifyCopyFileW] STILL SHIT\n");
807  }
808  }
809 
810  ret = CopyFileExW(src, dest, SHCopyProgressRoutine, op, &op->bCancelled, bFailIfExists);
811  if (ret)
812  {
813  // We are copying from a CD-ROM volume, which is readonly
814  if (SHIsCdRom(src))
815  {
819  }
820 
822  return ERROR_SUCCESS;
823  }
824 
825 #ifdef __REACTOS__
826  return CheckForError(op, GetLastError(), src);
827 #else
828  return GetLastError();
829 #endif
830 }
BOOL WINAPI SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes)
Definition: fileinfo.c:794
#define ERROR_SUCCESS
Definition: deptool.c:10
const GLint * attribs
Definition: glext.h:10538
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
unsigned int BOOL
Definition: ntddk_ex.h:94
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:652
#define debugstr_w
Definition: kernel32.h:32
static BOOL SHIsCdRom(LPCWSTR path)
Definition: shlfileop.cpp:758
#define TRACE(s)
Definition: solgame.cpp:4
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
unsigned long DWORD
Definition: ntddk_ex.h:95
UINT op
Definition: effect.c:236
int ret
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
BOOL WINAPI CopyFileExW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName, IN LPPROGRESS_ROUTINE lpProgressRoutine OPTIONAL, IN LPVOID lpData OPTIONAL, IN LPBOOL pbCancel OPTIONAL, IN DWORD dwCopyFlags)
Definition: copy.c:318
GLenum src
Definition: glext.h:6340
DWORD CALLBACK SHCopyProgressRoutine(LARGE_INTEGER TotalFileSize, LARGE_INTEGER TotalBytesTransferred, LARGE_INTEGER StreamSize, LARGE_INTEGER StreamBytesTransferred, DWORD dwStreamNumber, DWORD dwCallbackReason, HANDLE hSourceFile, HANDLE hDestinationFile, LPVOID lpData)
Definition: shlfileop.cpp:558
#define SHCNF_PATHW
Definition: shlobj.h:1764
#define NULL
Definition: types.h:112
#define IsAttrib(x, y)
Definition: shlfileop.cpp:29
static char * dest
Definition: rtl.c:135
#define SHCNE_CREATE
Definition: shlobj.h:1730
static void _SetOperationTexts(FILE_OPERATION *op, LPCWSTR src, LPCWSTR dest)
Definition: shlfileop.cpp:508

Referenced by copy_file_to_file().

◆ SHNotifyCreateDirectoryW()

static DWORD SHNotifyCreateDirectoryW ( LPCWSTR  path,
LPSECURITY_ATTRIBUTES  sec 
)
static

Definition at line 416 of file shlfileop.cpp.

417 {
418  TRACE("(%s, %p)\n", debugstr_w(path), sec);
419 
420  if (CreateDirectoryW(path, sec))
421  {
423  return ERROR_SUCCESS;
424  }
425  return GetLastError();
426 }
#define SHCNE_MKDIR
Definition: shlobj.h:1732
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
Definition: dir.c:90
#define ERROR_SUCCESS
Definition: deptool.c:10
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
#define SHCNF_PATHW
Definition: shlobj.h:1764
#define NULL
Definition: types.h:112

Referenced by copy_dir_to_dir(), copy_to_dir(), create_dest_dirs(), move_dir_to_dir(), SHCreateDirectoryExW(), and Win32CreateDirectoryW().

◆ SHNotifyDeleteFileW()

static DWORD SHNotifyDeleteFileW ( FILE_OPERATION op,
LPCWSTR  path 
)
static

Definition at line 605 of file shlfileop.cpp.

606 {
607  BOOL ret;
608 
609  TRACE("(%s)\n", debugstr_w(path));
610 
612 
614  FileSize.QuadPart = 0;
615 
616  WIN32_FIND_DATAW wfd;
617  HANDLE hFile = FindFirstFileW(path, &wfd);
618  if (hFile != INVALID_HANDLE_VALUE && IsAttribFile(wfd.dwFileAttributes)) {
619  ULARGE_INTEGER tmp;
620  tmp.u.LowPart = wfd.nFileSizeLow;
621  tmp.u.HighPart = wfd.nFileSizeHigh;
622  FileSize.QuadPart = tmp.QuadPart;
623  }
624  FindClose(hFile);
625 
626  ret = DeleteFileW(path);
627  if (!ret)
628  {
629  /* File may be write protected or a system file */
630  DWORD dwAttr = GetFileAttributesW(path);
633  ret = DeleteFileW(path);
634  }
635  if (ret)
636  {
637  // Bit of a hack to make the progress bar move. We don't have progress inside the file, so inform when done.
640  return ERROR_SUCCESS;
641  }
642  return GetLastError();
643 }
BOOL WINAPI SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes)
Definition: fileinfo.c:794
#define ERROR_SUCCESS
Definition: deptool.c:10
#define FILE_ATTRIBUTE_SYSTEM
Definition: nt_native.h:704
#define INVALID_HANDLE_VALUE
Definition: compat.h:590
#define CALLBACK_STREAM_SWITCH
Definition: winbase.h:151
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
ULONGLONG QuadPart
Definition: ms-dtyp.idl:185
unsigned int BOOL
Definition: ntddk_ex.h:94
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:652
#define debugstr_w
Definition: kernel32.h:32
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
Definition: delete.c:39
#define TRACE(s)
Definition: solgame.cpp:4
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
unsigned long DWORD
Definition: ntddk_ex.h:95
UINT op
Definition: effect.c:236
int ret
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
Definition: fsrtlfuncs.h:108
_In_ HANDLE hFile
Definition: mswsock.h:90
DWORD CALLBACK SHCopyProgressRoutine(LARGE_INTEGER TotalFileSize, LARGE_INTEGER TotalBytesTransferred, LARGE_INTEGER StreamSize, LARGE_INTEGER StreamBytesTransferred, DWORD dwStreamNumber, DWORD dwCallbackReason, HANDLE hSourceFile, HANDLE hDestinationFile, LPVOID lpData)
Definition: shlfileop.cpp:558
#define SHCNF_PATHW
Definition: shlobj.h:1764
#define SHCNE_DELETE
Definition: shlobj.h:1731
#define NULL
Definition: types.h:112
#define IsAttrib(x, y)
Definition: shlfileop.cpp:29
struct _ULARGE_INTEGER::@3918 u
static void _SetOperationTexts(FILE_OPERATION *op, LPCWSTR src, LPCWSTR dest)
Definition: shlfileop.cpp:508
#define IsAttribFile(x)
Definition: shlfileop.cpp:30
LONGLONG QuadPart
Definition: typedefs.h:114
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502

Referenced by delete_files(), SHELL_DeleteDirectoryW(), and Win32DeleteFileW().

◆ SHNotifyMoveFileW()

static DWORD SHNotifyMoveFileW ( FILE_OPERATION op,
LPCWSTR  src,
LPCWSTR  dest,
BOOL  isdir 
)
static

Definition at line 716 of file shlfileop.cpp.

717 {
718  BOOL ret;
719 
720  TRACE("(%s %s)\n", debugstr_w(src), debugstr_w(dest));
721 
723 
725 
726  /* MOVEFILE_REPLACE_EXISTING fails with dirs, so try MoveFile */
727  if (!ret)
728  ret = MoveFileW(src, dest);
729 
730  if (!ret)
731  {
732  DWORD dwAttr;
733 
734  dwAttr = SHFindAttrW(dest, FALSE);
735  if (INVALID_FILE_ATTRIBUTES == dwAttr)
736  {
737  /* Source file may be write protected or a system file */
738  dwAttr = GetFileAttributesW(src);
741  ret = MoveFileW(src, dest);
742  }
743  }
744  if (ret)
745  {
748  return ERROR_SUCCESS;
749  }
750 
751 #ifdef __REACTOS__
752  return CheckForError(op, GetLastError(), src);
753 #else
754  return GetLastError();
755 #endif
756 }
#define SHCNE_MKDIR
Definition: shlobj.h:1732
BOOL WINAPI SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes)
Definition: fileinfo.c:794
#define SHCNE_RMDIR
Definition: shlobj.h:1733
#define ERROR_SUCCESS
Definition: deptool.c:10
#define MOVEFILE_REPLACE_EXISTING
Definition: filesup.h:28
#define FILE_ATTRIBUTE_SYSTEM
Definition: nt_native.h:704
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:652
#define debugstr_w
Definition: kernel32.h:32
BOOL WINAPI MoveFileW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName)
Definition: move.c:1044
#define TRACE(s)
Definition: solgame.cpp:4
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
unsigned long DWORD
Definition: ntddk_ex.h:95
UINT op
Definition: effect.c:236
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
int ret
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
GLenum src
Definition: glext.h:6340
DWORD CALLBACK SHCopyProgressRoutine(LARGE_INTEGER TotalFileSize, LARGE_INTEGER TotalBytesTransferred, LARGE_INTEGER StreamSize, LARGE_INTEGER StreamBytesTransferred, DWORD dwStreamNumber, DWORD dwCallbackReason, HANDLE hSourceFile, HANDLE hDestinationFile, LPVOID lpData)
Definition: shlfileop.cpp:558
#define SHCNF_PATHW
Definition: shlobj.h:1764
static DWORD SHFindAttrW(LPCWSTR pName, BOOL fileOnly)
Definition: shlfileop.cpp:978
#define SHCNE_DELETE
Definition: shlobj.h:1731
#define NULL
Definition: types.h:112
BOOL WINAPI MoveFileWithProgressW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName, IN LPPROGRESS_ROUTINE lpProgressRoutine, IN LPVOID lpData, IN DWORD dwFlags)
Definition: move.c:667
#define IsAttrib(x, y)
Definition: shlfileop.cpp:29
static char * dest
Definition: rtl.c:135
#define SHCNE_CREATE
Definition: shlobj.h:1730
static void _SetOperationTexts(FILE_OPERATION *op, LPCWSTR src, LPCWSTR dest)
Definition: shlfileop.cpp:508

Referenced by move_files(), move_to_dir(), and rename_files().

◆ SHNotifyRemoveDirectoryW()

static DWORD SHNotifyRemoveDirectoryW ( LPCWSTR  path)
static

Definition at line 446 of file shlfileop.cpp.

447 {
448  BOOL ret;
449  TRACE("(%s)\n", debugstr_w(path));
450 
452  if (!ret)
453  {
454  /* Directory may be write protected */
455  DWORD dwAttr = GetFileAttributesW(path);
456  if (IsAttrib(dwAttr, FILE_ATTRIBUTE_READONLY))
459  }
460  if (ret)
461  {
463  return ERROR_SUCCESS;
464  }
465  return GetLastError();
466 }
BOOL WINAPI SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes)
Definition: fileinfo.c:794
#define SHCNE_RMDIR
Definition: shlobj.h:1733
#define ERROR_SUCCESS
Definition: deptool.c:10
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
unsigned int BOOL
Definition: ntddk_ex.h:94
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:652
#define debugstr_w
Definition: kernel32.h:32
BOOL WINAPI RemoveDirectoryW(IN LPCWSTR lpPathName)
Definition: dir.c:732
#define TRACE(s)
Definition: solgame.cpp:4
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
#define SHCNF_PATHW
Definition: shlobj.h:1764
#define NULL
Definition: types.h:112
#define IsAttrib(x, y)
Definition: shlfileop.cpp:29

Referenced by SHELL_DeleteDirectoryW(), and Win32RemoveDirectoryW().

◆ SHPathPrepareForWriteA()

EXTERN_C HRESULT WINAPI SHPathPrepareForWriteA ( HWND  hwnd,
IUnknown modless,
LPCSTR  path,
DWORD  flags 
)

Definition at line 2291 of file shlfileop.cpp.

2292 {
2293  WCHAR wpath[MAX_PATH];
2294  MultiByteToWideChar( CP_ACP, 0, path, -1, wpath, MAX_PATH);
2295  return SHPathPrepareForWriteW(hwnd, modless, wpath, flags);
2296 }
#define CP_ACP
Definition: compat.h:109
EXTERN_C HRESULT WINAPI SHPathPrepareForWriteW(HWND hwnd, IUnknown *modless, LPCWSTR path, DWORD flags)
Definition: shlfileop.cpp:2228
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:34
GLbitfield flags
Definition: glext.h:7161
#define MultiByteToWideChar
Definition: compat.h:110
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4022

Referenced by CZipExtract::ExtractSingle(), and test_sh_path_prepare().

◆ SHPathPrepareForWriteW()

EXTERN_C HRESULT WINAPI SHPathPrepareForWriteW ( HWND  hwnd,
IUnknown modless,
LPCWSTR  path,
DWORD  flags 
)

Definition at line 2228 of file shlfileop.cpp.

2229 {
2230  DWORD res;
2231  DWORD err;
2232  LPCWSTR realpath;
2233  int len;
2234  WCHAR* last_slash;
2235  WCHAR* temppath=NULL;
2236 
2237  TRACE("%p %p %s 0x%08x\n", hwnd, modless, debugstr_w(path), flags);
2238 
2240  FIXME("unimplemented flags 0x%08x\n", flags);
2241 
2242  /* cut off filename if necessary */
2244  {
2245  last_slash = StrRChrW(path, NULL, '\\');
2246  if (last_slash == NULL)
2247  len = 1;
2248  else
2249  len = last_slash - path + 1;
2250  temppath = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
2251  if (!temppath)
2252  return E_OUTOFMEMORY;
2253  StrCpyNW(temppath, path, len);
2254  realpath = temppath;
2255  }
2256  else
2257  {
2258  realpath = path;
2259  }
2260 
2261  /* try to create the directory if asked to */
2263  {
2264  if (flags & SHPPFW_ASKDIRCREATE)
2265  FIXME("treating SHPPFW_ASKDIRCREATE as SHPPFW_DIRCREATE\n");
2266 
2267  SHCreateDirectoryExW(0, realpath, NULL);
2268  }
2269 
2270  /* check if we can access the directory */
2271  res = GetFileAttributesW(realpath);
2272 
2273  HeapFree(GetProcessHeap(), 0, temppath);
2274 
2276  {
2277  err = GetLastError();
2278  if (err == ERROR_FILE_NOT_FOUND)
2280  return HRESULT_FROM_WIN32(err);
2281  }
2282  else if (res & FILE_ATTRIBUTE_DIRECTORY)
2283  return S_OK;
2284  else
2286 }
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
GLsizei const GLchar ** path
Definition: glext.h:7234
LPWSTR WINAPI StrCpyNW(LPWSTR dst, LPCWSTR src, int count)
Definition: string.c:536
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
#define ERROR_DIRECTORY
Definition: winerror.h:295
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define SHPPFW_DIRCREATE
Definition: shlobj.h:303
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:652
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:111
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define SHPPFW_ASKDIRCREATE
Definition: shlobj.h:305
unsigned long DWORD
Definition: ntddk_ex.h:95
#define INVALID_FILE_ATTRIBUTES
Definition: vfdcmd.c:23
GLbitfield flags
Definition: glext.h:7161
GLenum GLsizei len
Definition: glext.h:6722
#define err(...)
#define S_OK
Definition: intsafe.h:52
int WINAPI SHCreateDirectoryExW(HWND hWnd, LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
Definition: shlfileop.cpp:915
#define NULL
Definition: types.h:112
GLuint res
Definition: glext.h:9613
#define SHPPFW_IGNOREFILENAME
Definition: shlobj.h:306
#define ERROR_PATH_NOT_FOUND
Definition: winerror.h:106
WCHAR * LPWSTR
Definition: xmlstorage.h:184
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4022
LPWSTR WINAPI StrRChrW(LPCWSTR str, LPCWSTR end, WORD ch)
Definition: string.c:556
#define HeapFree(x, y, z)
Definition: compat.h:594

Referenced by SHPathPrepareForWriteA(), and test_sh_path_prepare().

◆ try_find_new_name()

static CStringW try_find_new_name ( LPCWSTR  szDestPath)
static

Definition at line 1306 of file shlfileop.cpp.

1307 {
1308  CStringW mask(szDestPath);
1309  CStringW ext(PathFindExtensionW(szDestPath));
1310 
1311  // cut off extension before inserting a "new file" mask
1312  if (!ext.IsEmpty())
1313  {
1314  mask = mask.Left(mask.GetLength() - ext.GetLength());
1315  }
1316  mask += L" (%d)" + ext;
1317 
1318  CStringW newName;
1319 
1320  // trying to find new file name
1321  for (int i = 1; i < NEW_FILENAME_ON_COPY_TRIES; i++)
1322  {
1323  newName.Format(mask, i);
1324 
1325  if (!PathFileExistsW(newName))
1326  {
1327  return newName;
1328  }
1329  }
1330 
1331  return CStringW();
1332 }
void __cdecl Format(UINT nFormatID,...)
Definition: cstringt.h:753
#define L(x)
Definition: ntvdm.h:50
GLenum GLint GLuint mask
Definition: glext.h:6028
char ext[3]
Definition: mkdosfs.c:358
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1776
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
Definition: path.c:447
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define NEW_FILENAME_ON_COPY_TRIES
Definition: shlfileop.cpp:36
CAtlStringW CStringW
Definition: atlstr.h:130

Referenced by copy_dir_to_dir(), and copy_file_to_file().

◆ wildcard_to_file()

static LPWSTR wildcard_to_file ( LPCWSTR  szWildCard,
LPCWSTR  szFileName 
)
static

Definition at line 1163 of file shlfileop.cpp.

1164 {
1165  LPCWSTR ptr;
1166  LPCWSTR ptr2;
1167  LPWSTR szFullPath;
1168  DWORD dwDirLen, dwFullLen;
1169 
1170  ptr = StrRChrW(szWildCard, NULL, '\\');
1171  ptr2 = StrRChrW(szWildCard, NULL, '/');
1172  if (!ptr || ptr < ptr2)
1173  ptr = ptr2;
1174  dwDirLen = ptr - szWildCard + 1;
1175 
1176  dwFullLen = dwDirLen + lstrlenW(szFileName) + 1;
1177  szFullPath = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, dwFullLen * sizeof(WCHAR));
1178 
1179  lstrcpynW(szFullPath, szWildCard, dwDirLen + 1);
1180  lstrcatW(szFullPath, szFileName);
1181 
1182  return szFullPath;
1183 }
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define lstrlenW
Definition: compat.h:609
#define lstrcpynW
Definition: compat.h:597
static PVOID ptr
Definition: dispmode.c:27
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned long DWORD
Definition: ntddk_ex.h:95
#define NULL
Definition: types.h:112
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
WCHAR * LPWSTR
Definition: xmlstorage.h:184
LPWSTR WINAPI StrRChrW(LPCWSTR str, LPCWSTR end, WORD ch)
Definition: string.c:556

Referenced by parse_wildcard_files().

◆ Win32CreateDirectoryW()

EXTERN_C BOOL WINAPI Win32CreateDirectoryW ( LPCWSTR  path,
LPSECURITY_ATTRIBUTES  sec 
)

Definition at line 430 of file shlfileop.cpp.

431 {
432  return (SHNotifyCreateDirectoryW(path, sec) == ERROR_SUCCESS);
433 }
#define ERROR_SUCCESS
Definition: deptool.c:10
static DWORD SHNotifyCreateDirectoryW(LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
Definition: shlfileop.cpp:416

◆ Win32DeleteFileW()

EXTERN_C DWORD WINAPI Win32DeleteFileW ( LPCWSTR  path)

Definition at line 656 of file shlfileop.cpp.

657 {
659 }
#define ERROR_SUCCESS
Definition: deptool.c:10
static DWORD SHNotifyDeleteFileW(FILE_OPERATION *op, LPCWSTR path)
Definition: shlfileop.cpp:605
#define NULL
Definition: types.h:112

◆ Win32RemoveDirectoryW()

EXTERN_C BOOL WINAPI Win32RemoveDirectoryW ( LPCWSTR  path)

Definition at line 470 of file shlfileop.cpp.

471 {
473 }
#define ERROR_SUCCESS
Definition: deptool.c:10
static DWORD SHNotifyRemoveDirectoryW(LPCWSTR path)
Definition: shlfileop.cpp:446

Referenced by move_dir_to_dir().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( shell  )