-/*
+/* $Id: move.c,v 1.5 2002/04/27 19:15:43 hbirr Exp $
+ *
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
* FILE: lib/kernel32/file/file.c
* PURPOSE: Directory functions
* PROGRAMMER: Ariadne ( ariadne@xs4all.nl)
- * GetTempFileName is modified from WINE [ Alexandre Juiliard ]
* UPDATE HISTORY:
* Created 01/11/98
*/
-/* FIXME: the large integer manipulations in this file dont handle overflow */
-
-/* INCLUDES ****************************************************************/
+/* INCLUDES *****************************************************************/
#include <ddk/ntddk.h>
#include <windows.h>
-#include <wchar.h>
-#include <string.h>
+#include <ntos/minmax.h>
-//#define NDEBUG
+#define NDEBUG
#include <kernel32/kernel32.h>
+
+#define FILE_RENAME_SIZE MAX_PATH +sizeof(FILE_RENAME_INFORMATION)
+
+
/* FUNCTIONS ****************************************************************/
WINBOOL
STDCALL
-MoveFileA(
- LPCSTR lpExistingFileName,
- LPCSTR lpNewFileName
- )
+MoveFileA (
+ LPCSTR lpExistingFileName,
+ LPCSTR lpNewFileName
+ )
{
- return MoveFileExA(lpExistingFileName,lpNewFileName,MOVEFILE_COPY_ALLOWED);
+ return MoveFileExA (lpExistingFileName,
+ lpNewFileName,
+ MOVEFILE_COPY_ALLOWED);
}
+
WINBOOL
STDCALL
-MoveFileExA(
- LPCSTR lpExistingFileName,
- LPCSTR lpNewFileName,
- DWORD dwFlags
- )
+MoveFileExA (
+ LPCSTR lpExistingFileName,
+ LPCSTR lpNewFileName,
+ DWORD dwFlags
+ )
{
- ULONG i;
- WCHAR ExistingFileNameW[MAX_PATH];
- WCHAR NewFileNameW[MAX_PATH];
+ UNICODE_STRING ExistingFileNameU;
+ UNICODE_STRING NewFileNameU;
+ ANSI_STRING ExistingFileName;
+ ANSI_STRING NewFileName;
+ WINBOOL Result;
+
+ RtlInitAnsiString (&ExistingFileName,
+ (LPSTR)lpExistingFileName);
+
+ RtlInitAnsiString (&NewFileName,
+ (LPSTR)lpNewFileName);
+
+ /* convert ansi (or oem) string to unicode */
+ if (bIsFileApiAnsi)
+ {
+ RtlAnsiStringToUnicodeString (&ExistingFileNameU,
+ &ExistingFileName,
+ TRUE);
+ RtlAnsiStringToUnicodeString (&NewFileNameU,
+ &NewFileName,
+ TRUE);
+ }
+ else
+ {
+ RtlOemStringToUnicodeString (&ExistingFileNameU,
+ &ExistingFileName,
+ TRUE);
+ RtlOemStringToUnicodeString (&NewFileNameU,
+ &NewFileName,
+ TRUE);
+ }
-
+ Result = MoveFileExW (ExistingFileNameU.Buffer,
+ NewFileNameU.Buffer,
+ dwFlags);
- i = 0;
- while ((*lpExistingFileName)!=0 && i < MAX_PATH)
- {
- ExistingFileNameW[i] = *lpExistingFileName;
- lpExistingFileName++;
- i++;
- }
- ExistingFileNameW[i] = 0;
-
- i = 0;
- while ((*lpNewFileName)!=0 && i < MAX_PATH)
- {
- NewFileNameW[i] = *lpNewFileName;
- lpNewFileName++;
- i++;
- }
- NewFileNameW[i] = 0;
-
- return MoveFileExW(ExistingFileNameW,NewFileNameW,dwFlags);
-
-}
+ RtlFreeHeap (RtlGetProcessHeap (),
+ 0,
+ ExistingFileNameU.Buffer);
+ RtlFreeHeap (RtlGetProcessHeap (),
+ 0,
+ NewFileNameU.Buffer);
+ return Result;
+}
WINBOOL
STDCALL
-MoveFileW(
- LPCWSTR lpExistingFileName,
- LPCWSTR lpNewFileName
- )
+MoveFileW (
+ LPCWSTR lpExistingFileName,
+ LPCWSTR lpNewFileName
+ )
{
- return MoveFileExW(lpExistingFileName,lpNewFileName,MOVEFILE_COPY_ALLOWED);
+ return MoveFileExW (lpExistingFileName,
+ lpNewFileName,
+ MOVEFILE_COPY_ALLOWED);
}
-#define FILE_RENAME_SIZE MAX_PATH +sizeof(FILE_RENAME_INFORMATION)
WINBOOL
STDCALL
-MoveFileExW(
- LPCWSTR lpExistingFileName,
- LPCWSTR lpNewFileName,
- DWORD dwFlags
- )
+MoveFileExW (
+ LPCWSTR lpExistingFileName,
+ LPCWSTR lpNewFileName,
+ DWORD dwFlags
+ )
{
HANDLE hFile = NULL;
IO_STATUS_BLOCK IoStatusBlock;
USHORT Buffer[FILE_RENAME_SIZE];
NTSTATUS errCode;
- hFile = CreateFileW(
- lpExistingFileName,
- GENERIC_ALL,
- FILE_SHARE_WRITE|FILE_SHARE_READ,
- NULL,
- OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL,
- NULL
- );
-
-
+ hFile = CreateFileW (lpExistingFileName,
+ GENERIC_ALL,
+ FILE_SHARE_WRITE|FILE_SHARE_READ,
+ NULL,
+ OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL,
+ NULL);
FileRename = (FILE_RENAME_INFORMATION *)Buffer;
- if ( ( dwFlags & MOVEFILE_REPLACE_EXISTING ) == MOVEFILE_REPLACE_EXISTING )
+ if ((dwFlags & MOVEFILE_REPLACE_EXISTING) == MOVEFILE_REPLACE_EXISTING)
FileRename->Replace = TRUE;
else
FileRename->Replace = FALSE;
- FileRename->FileNameLength = lstrlenW(lpNewFileName);
- memcpy(FileRename->FileName,lpNewFileName,min(FileRename->FileNameLength,MAX_PATH));
+ FileRename->FileNameLength = wcslen (lpNewFileName);
+ memcpy (FileRename->FileName,
+ lpNewFileName,
+ min(FileRename->FileNameLength, MAX_PATH));
- errCode = NtSetInformationFile(hFile,&IoStatusBlock,FileRename, FILE_RENAME_SIZE, FileRenameInformation);
- if ( !NT_SUCCESS(errCode) ) {
- if ( CopyFileW(lpExistingFileName,lpNewFileName,FileRename->Replace) )
- DeleteFileW(lpExistingFileName);
- }
-
+ errCode = NtSetInformationFile (hFile,
+ &IoStatusBlock,
+ FileRename,
+ FILE_RENAME_SIZE,
+ FileRenameInformation);
CloseHandle(hFile);
+ if (!NT_SUCCESS(errCode))
+ {
+ if (CopyFileW (lpExistingFileName,
+ lpNewFileName,
+ FileRename->Replace))
+ DeleteFileW (lpExistingFileName);
+ }
return TRUE;
}
+
+/* EOF */