mirror of
https://github.com/reactos/reactos.git
synced 2024-07-07 05:05:09 +00:00
Fixed bug in SetFileTime().
Patch by Hartmut Birr. svn path=/trunk/; revision=2074
This commit is contained in:
parent
20a0131534
commit
d24d5849fe
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: file.c,v 1.25 2001/03/02 15:45:31 cnettel Exp $
|
/* $Id: file.c,v 1.26 2001/07/19 18:42:02 ekohl Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS system libraries
|
* PROJECT: ReactOS system libraries
|
||||||
|
@ -31,43 +31,31 @@ WINBOOL bIsFileApiAnsi = TRUE; // set the file api to ansi or oem
|
||||||
|
|
||||||
/* FUNCTIONS ****************************************************************/
|
/* FUNCTIONS ****************************************************************/
|
||||||
|
|
||||||
VOID
|
VOID STDCALL
|
||||||
STDCALL
|
SetFileApisToOEM(VOID)
|
||||||
SetFileApisToOEM (
|
|
||||||
VOID
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
bIsFileApiAnsi = FALSE;
|
bIsFileApiAnsi = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VOID
|
VOID STDCALL
|
||||||
STDCALL
|
SetFileApisToANSI(VOID)
|
||||||
SetFileApisToANSI (
|
|
||||||
VOID
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
bIsFileApiAnsi = TRUE;
|
bIsFileApiAnsi = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WINBOOL
|
WINBOOL STDCALL
|
||||||
STDCALL
|
AreFileApisANSI(VOID)
|
||||||
AreFileApisANSI (
|
|
||||||
VOID
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
return bIsFileApiAnsi;
|
return bIsFileApiAnsi;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
HFILE
|
HFILE STDCALL
|
||||||
STDCALL
|
OpenFile(LPCSTR lpFileName,
|
||||||
OpenFile (
|
LPOFSTRUCT lpReOpenBuff,
|
||||||
LPCSTR lpFileName,
|
UINT uStyle)
|
||||||
LPOFSTRUCT lpReOpenBuff,
|
|
||||||
UINT uStyle
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||||
IO_STATUS_BLOCK IoStatusBlock;
|
IO_STATUS_BLOCK IoStatusBlock;
|
||||||
|
@ -151,7 +139,8 @@ OpenFile (
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WINBOOL STDCALL FlushFileBuffers(HANDLE hFile)
|
WINBOOL STDCALL
|
||||||
|
FlushFileBuffers(HANDLE hFile)
|
||||||
{
|
{
|
||||||
NTSTATUS errCode;
|
NTSTATUS errCode;
|
||||||
IO_STATUS_BLOCK IoStatusBlock;
|
IO_STATUS_BLOCK IoStatusBlock;
|
||||||
|
@ -167,10 +156,11 @@ WINBOOL STDCALL FlushFileBuffers(HANDLE hFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DWORD STDCALL SetFilePointer(HANDLE hFile,
|
DWORD STDCALL
|
||||||
LONG lDistanceToMove,
|
SetFilePointer(HANDLE hFile,
|
||||||
PLONG lpDistanceToMoveHigh,
|
LONG lDistanceToMove,
|
||||||
DWORD dwMoveMethod)
|
PLONG lpDistanceToMoveHigh,
|
||||||
|
DWORD dwMoveMethod)
|
||||||
{
|
{
|
||||||
FILE_POSITION_INFORMATION FilePosition;
|
FILE_POSITION_INFORMATION FilePosition;
|
||||||
FILE_END_OF_FILE_INFORMATION FileEndOfFile;
|
FILE_END_OF_FILE_INFORMATION FileEndOfFile;
|
||||||
|
@ -191,7 +181,7 @@ DWORD STDCALL SetFilePointer(HANDLE hFile,
|
||||||
&FilePosition,
|
&FilePosition,
|
||||||
sizeof(FILE_POSITION_INFORMATION),
|
sizeof(FILE_POSITION_INFORMATION),
|
||||||
FilePositionInformation);
|
FilePositionInformation);
|
||||||
FilePosition.CurrentByteOffset.QuadPart += Distance.QuadPart;
|
FilePosition.CurrentByteOffset.QuadPart += Distance.QuadPart;
|
||||||
}
|
}
|
||||||
else if (dwMoveMethod == FILE_END)
|
else if (dwMoveMethod == FILE_END)
|
||||||
{
|
{
|
||||||
|
@ -227,7 +217,8 @@ DWORD STDCALL SetFilePointer(HANDLE hFile,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DWORD STDCALL GetFileType(HANDLE hFile)
|
DWORD STDCALL
|
||||||
|
GetFileType(HANDLE hFile)
|
||||||
{
|
{
|
||||||
FILE_FS_DEVICE_INFORMATION DeviceInfo;
|
FILE_FS_DEVICE_INFORMATION DeviceInfo;
|
||||||
IO_STATUS_BLOCK StatusBlock;
|
IO_STATUS_BLOCK StatusBlock;
|
||||||
|
@ -298,8 +289,9 @@ DWORD STDCALL GetFileType(HANDLE hFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DWORD STDCALL GetFileSize(HANDLE hFile,
|
DWORD STDCALL
|
||||||
LPDWORD lpFileSizeHigh)
|
GetFileSize(HANDLE hFile,
|
||||||
|
LPDWORD lpFileSizeHigh)
|
||||||
{
|
{
|
||||||
NTSTATUS errCode;
|
NTSTATUS errCode;
|
||||||
FILE_STANDARD_INFORMATION FileStandard;
|
FILE_STANDARD_INFORMATION FileStandard;
|
||||||
|
@ -329,8 +321,9 @@ DWORD STDCALL GetFileSize(HANDLE hFile,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DWORD STDCALL GetCompressedFileSizeA(LPCSTR lpFileName,
|
DWORD STDCALL
|
||||||
LPDWORD lpFileSizeHigh)
|
GetCompressedFileSizeA(LPCSTR lpFileName,
|
||||||
|
LPDWORD lpFileSizeHigh)
|
||||||
{
|
{
|
||||||
UNICODE_STRING FileNameU;
|
UNICODE_STRING FileNameU;
|
||||||
ANSI_STRING FileName;
|
ANSI_STRING FileName;
|
||||||
|
@ -358,8 +351,9 @@ DWORD STDCALL GetCompressedFileSizeA(LPCSTR lpFileName,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DWORD STDCALL GetCompressedFileSizeW(LPCWSTR lpFileName,
|
DWORD STDCALL
|
||||||
LPDWORD lpFileSizeHigh)
|
GetCompressedFileSizeW(LPCWSTR lpFileName,
|
||||||
|
LPDWORD lpFileSizeHigh)
|
||||||
{
|
{
|
||||||
FILE_COMPRESSION_INFORMATION FileCompression;
|
FILE_COMPRESSION_INFORMATION FileCompression;
|
||||||
NTSTATUS errCode;
|
NTSTATUS errCode;
|
||||||
|
@ -390,8 +384,9 @@ DWORD STDCALL GetCompressedFileSizeW(LPCWSTR lpFileName,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WINBOOL STDCALL GetFileInformationByHandle(HANDLE hFile,
|
WINBOOL STDCALL
|
||||||
LPBY_HANDLE_FILE_INFORMATION lpFileInformation)
|
GetFileInformationByHandle(HANDLE hFile,
|
||||||
|
LPBY_HANDLE_FILE_INFORMATION lpFileInformation)
|
||||||
{
|
{
|
||||||
FILE_DIRECTORY_INFORMATION FileDirectory;
|
FILE_DIRECTORY_INFORMATION FileDirectory;
|
||||||
FILE_INTERNAL_INFORMATION FileInternal;
|
FILE_INTERNAL_INFORMATION FileInternal;
|
||||||
|
@ -462,11 +457,8 @@ WINBOOL STDCALL GetFileInformationByHandle(HANDLE hFile,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DWORD
|
DWORD STDCALL
|
||||||
STDCALL
|
GetFileAttributesA(LPCSTR lpFileName)
|
||||||
GetFileAttributesA (
|
|
||||||
LPCSTR lpFileName
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
UNICODE_STRING FileNameU;
|
UNICODE_STRING FileNameU;
|
||||||
ANSI_STRING FileName;
|
ANSI_STRING FileName;
|
||||||
|
@ -493,7 +485,8 @@ GetFileAttributesA (
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
DWORD STDCALL GetFileAttributesW(LPCWSTR lpFileName)
|
DWORD STDCALL
|
||||||
|
GetFileAttributesW(LPCWSTR lpFileName)
|
||||||
{
|
{
|
||||||
IO_STATUS_BLOCK IoStatusBlock;
|
IO_STATUS_BLOCK IoStatusBlock;
|
||||||
FILE_BASIC_INFORMATION FileBasic;
|
FILE_BASIC_INFORMATION FileBasic;
|
||||||
|
@ -528,41 +521,39 @@ DWORD STDCALL GetFileAttributesW(LPCWSTR lpFileName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WINBOOL
|
WINBOOL STDCALL
|
||||||
STDCALL
|
SetFileAttributesA(LPCSTR lpFileName,
|
||||||
SetFileAttributesA (
|
DWORD dwFileAttributes)
|
||||||
LPCSTR lpFileName,
|
|
||||||
DWORD dwFileAttributes
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
UNICODE_STRING FileNameU;
|
UNICODE_STRING FileNameU;
|
||||||
ANSI_STRING FileName;
|
ANSI_STRING FileName;
|
||||||
WINBOOL Result;
|
WINBOOL Result;
|
||||||
|
|
||||||
RtlInitAnsiString (&FileName,
|
RtlInitAnsiString(&FileName,
|
||||||
(LPSTR)lpFileName);
|
(LPSTR)lpFileName);
|
||||||
|
|
||||||
/* convert ansi (or oem) string to unicode */
|
/* convert ansi (or oem) string to unicode */
|
||||||
if (bIsFileApiAnsi)
|
if (bIsFileApiAnsi)
|
||||||
RtlAnsiStringToUnicodeString (&FileNameU,
|
RtlAnsiStringToUnicodeString(&FileNameU,
|
||||||
&FileName,
|
&FileName,
|
||||||
TRUE);
|
TRUE);
|
||||||
else
|
else
|
||||||
RtlOemStringToUnicodeString (&FileNameU,
|
RtlOemStringToUnicodeString(&FileNameU,
|
||||||
&FileName,
|
&FileName,
|
||||||
TRUE);
|
TRUE);
|
||||||
|
|
||||||
Result = SetFileAttributesW (FileNameU.Buffer,
|
Result = SetFileAttributesW(FileNameU.Buffer,
|
||||||
dwFileAttributes);
|
dwFileAttributes);
|
||||||
|
|
||||||
RtlFreeUnicodeString (&FileNameU);
|
RtlFreeUnicodeString(&FileNameU);
|
||||||
|
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WINBOOL STDCALL SetFileAttributesW(LPCWSTR lpFileName,
|
WINBOOL STDCALL
|
||||||
DWORD dwFileAttributes)
|
SetFileAttributesW(LPCWSTR lpFileName,
|
||||||
|
DWORD dwFileAttributes)
|
||||||
{
|
{
|
||||||
IO_STATUS_BLOCK IoStatusBlock;
|
IO_STATUS_BLOCK IoStatusBlock;
|
||||||
FILE_BASIC_INFORMATION FileBasic;
|
FILE_BASIC_INFORMATION FileBasic;
|
||||||
|
@ -605,10 +596,11 @@ WINBOOL STDCALL SetFileAttributesW(LPCWSTR lpFileName,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
UINT STDCALL GetTempFileNameA(LPCSTR lpPathName,
|
UINT STDCALL
|
||||||
LPCSTR lpPrefixString,
|
GetTempFileNameA(LPCSTR lpPathName,
|
||||||
UINT uUnique,
|
LPCSTR lpPrefixString,
|
||||||
LPSTR lpTempFileName)
|
UINT uUnique,
|
||||||
|
LPSTR lpTempFileName)
|
||||||
{
|
{
|
||||||
HANDLE hFile;
|
HANDLE hFile;
|
||||||
UINT unique = uUnique;
|
UINT unique = uUnique;
|
||||||
|
@ -638,10 +630,11 @@ UINT STDCALL GetTempFileNameA(LPCSTR lpPathName,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
UINT STDCALL GetTempFileNameW(LPCWSTR lpPathName,
|
UINT STDCALL
|
||||||
LPCWSTR lpPrefixString,
|
GetTempFileNameW(LPCWSTR lpPathName,
|
||||||
UINT uUnique,
|
LPCWSTR lpPrefixString,
|
||||||
LPWSTR lpTempFileName)
|
UINT uUnique,
|
||||||
|
LPWSTR lpTempFileName)
|
||||||
{
|
{
|
||||||
HANDLE hFile;
|
HANDLE hFile;
|
||||||
UINT unique = uUnique;
|
UINT unique = uUnique;
|
||||||
|
@ -671,57 +664,76 @@ UINT STDCALL GetTempFileNameW(LPCWSTR lpPathName,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WINBOOL STDCALL GetFileTime(HANDLE hFile,
|
WINBOOL STDCALL
|
||||||
LPFILETIME lpCreationTime,
|
GetFileTime(HANDLE hFile,
|
||||||
LPFILETIME lpLastAccessTime,
|
LPFILETIME lpCreationTime,
|
||||||
LPFILETIME lpLastWriteTime)
|
LPFILETIME lpLastAccessTime,
|
||||||
|
LPFILETIME lpLastWriteTime)
|
||||||
{
|
{
|
||||||
IO_STATUS_BLOCK IoStatusBlock;
|
IO_STATUS_BLOCK IoStatusBlock;
|
||||||
FILE_BASIC_INFORMATION FileBasic;
|
FILE_BASIC_INFORMATION FileBasic;
|
||||||
NTSTATUS errCode;
|
NTSTATUS Status;
|
||||||
|
|
||||||
errCode = NtQueryInformationFile(hFile,
|
Status = NtQueryInformationFile(hFile,
|
||||||
&IoStatusBlock,
|
&IoStatusBlock,
|
||||||
&FileBasic,
|
&FileBasic,
|
||||||
sizeof(FILE_BASIC_INFORMATION),
|
sizeof(FILE_BASIC_INFORMATION),
|
||||||
FileBasicInformation);
|
FileBasicInformation);
|
||||||
if (!NT_SUCCESS(errCode))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
SetLastErrorByStatus(errCode);
|
SetLastErrorByStatus(Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lpCreationTime) memcpy(lpCreationTime,&FileBasic.CreationTime,sizeof(FILETIME));
|
if (lpCreationTime)
|
||||||
if (lpLastAccessTime) memcpy(lpLastAccessTime,&FileBasic.LastAccessTime,sizeof(FILETIME));
|
memcpy(lpCreationTime, &FileBasic.CreationTime, sizeof(FILETIME));
|
||||||
if (lpLastWriteTime) memcpy(lpLastWriteTime,&FileBasic.LastWriteTime,sizeof(FILETIME));
|
if (lpLastAccessTime)
|
||||||
|
memcpy(lpLastAccessTime, &FileBasic.LastAccessTime, sizeof(FILETIME));
|
||||||
|
if (lpLastWriteTime)
|
||||||
|
memcpy(lpLastWriteTime, &FileBasic.LastWriteTime, sizeof(FILETIME));
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WINBOOL STDCALL SetFileTime(HANDLE hFile,
|
WINBOOL STDCALL
|
||||||
CONST FILETIME *lpCreationTime,
|
SetFileTime(HANDLE hFile,
|
||||||
CONST FILETIME *lpLastAccessTime,
|
CONST FILETIME *lpCreationTime,
|
||||||
CONST FILETIME *lpLastWriteTime)
|
CONST FILETIME *lpLastAccessTime,
|
||||||
|
CONST FILETIME *lpLastWriteTime)
|
||||||
{
|
{
|
||||||
FILE_BASIC_INFORMATION FileBasic;
|
FILE_BASIC_INFORMATION FileBasic;
|
||||||
IO_STATUS_BLOCK IoStatusBlock;
|
IO_STATUS_BLOCK IoStatusBlock;
|
||||||
NTSTATUS errCode;
|
NTSTATUS Status;
|
||||||
|
|
||||||
memcpy(&FileBasic.CreationTime,lpCreationTime,sizeof(FILETIME));
|
Status = NtQueryInformationFile(hFile,
|
||||||
memcpy(&FileBasic.LastAccessTime,lpLastAccessTime,sizeof(FILETIME));
|
&IoStatusBlock,
|
||||||
memcpy(&FileBasic.LastWriteTime,lpLastWriteTime,sizeof(FILETIME));
|
&FileBasic,
|
||||||
|
sizeof(FILE_BASIC_INFORMATION),
|
||||||
// shoud i initialize changetime ???
|
FileBasicInformation);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
errCode = NtSetInformationFile(hFile,
|
|
||||||
&IoStatusBlock,
|
|
||||||
&FileBasic,
|
|
||||||
sizeof(FILE_BASIC_INFORMATION),
|
|
||||||
FileBasicInformation);
|
|
||||||
if (!NT_SUCCESS(errCode))
|
|
||||||
{
|
{
|
||||||
SetLastErrorByStatus(errCode);
|
SetLastErrorByStatus(Status);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lpCreationTime)
|
||||||
|
memcpy(&FileBasic.CreationTime, lpCreationTime, sizeof(FILETIME));
|
||||||
|
if (lpLastAccessTime)
|
||||||
|
memcpy(&FileBasic.LastAccessTime, lpLastAccessTime, sizeof(FILETIME));
|
||||||
|
if (lpLastWriteTime)
|
||||||
|
memcpy(&FileBasic.LastWriteTime, lpLastWriteTime, sizeof(FILETIME));
|
||||||
|
|
||||||
|
// should i initialize changetime ???
|
||||||
|
|
||||||
|
Status = NtSetInformationFile(hFile,
|
||||||
|
&IoStatusBlock,
|
||||||
|
&FileBasic,
|
||||||
|
sizeof(FILE_BASIC_INFORMATION),
|
||||||
|
FileBasicInformation);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
SetLastErrorByStatus(Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -729,7 +741,8 @@ WINBOOL STDCALL SetFileTime(HANDLE hFile,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WINBOOL STDCALL SetEndOfFile(HANDLE hFile)
|
WINBOOL STDCALL
|
||||||
|
SetEndOfFile(HANDLE hFile)
|
||||||
{
|
{
|
||||||
int x = -1;
|
int x = -1;
|
||||||
DWORD Num;
|
DWORD Num;
|
||||||
|
|
Loading…
Reference in a new issue