diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 2abd915d5d..cbe8227df2 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -7,6 +7,13 @@ For example: 2002-12-01 23:12 UTC+0100 Foo Bar */ + * source/rtl/filesys.c + ! Re-disabled native Win32 file handling system. + ! hb_fsCommit() fixed Win32 branch, and put it + in the right place multiplatform #define-wise. + + * source/rtl/profiler.prg + * No more file limit on Win32 * source/vm/memvars.c ! Fixed warnings in __MVEXIST() diff --git a/harbour/include/hbapifs.h b/harbour/include/hbapifs.h index 3562fc19e0..cc94498689 100644 --- a/harbour/include/hbapifs.h +++ b/harbour/include/hbapifs.h @@ -61,9 +61,11 @@ extern "C" { #endif #define FS_ERROR F_ERROR - +#ifdef __WIN32__ +typedef long FHANDLE; +#else typedef int FHANDLE; - +#endif /* File locking flags */ #define FL_LOCK 0x0000 /* Lock a region */ #define FL_UNLOCK 0x0001 /* Unlock a region */ diff --git a/harbour/source/rtl/filesys.c b/harbour/source/rtl/filesys.c index eb0a357b22..4d1dc2c3b2 100644 --- a/harbour/source/rtl/filesys.c +++ b/harbour/source/rtl/filesys.c @@ -367,7 +367,7 @@ FHANDLE hb_fsOpen( BYTE * pFilename, USHORT uiFlags ) HB_TRACE(HB_TR_DEBUG, ("hb_fsOpen(%p, %hu)", pFilename, uiFlags)); -#if defined(X__WIN32__) +#if defined(__WIN32__) { DWORD dwFlags = 0; @@ -398,7 +398,7 @@ FHANDLE hb_fsOpen( BYTE * pFilename, USHORT uiFlags ) if( hFile == ( HANDLE ) INVALID_HANDLE_VALUE ) errno = GetLastError(); - hFileHandle=(int)hFile; + hFileHandle=(long)hFile; s_uiErrorLast = errno; } @@ -472,7 +472,7 @@ FHANDLE hb_fsCreate( BYTE * pFilename, USHORT uiAttr ) s_uiErrorLast = 0; -#if defined(X__WIN32__) +#if defined(__WIN32__) { DWORD dwFlags = FILE_ATTRIBUTE_ARCHIVE; @@ -492,9 +492,9 @@ FHANDLE hb_fsCreate( BYTE * pFilename, USHORT uiAttr ) GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, dwFlags, NULL ); - if( hFile == ( FHANDLE ) INVALID_HANDLE_VALUE ) + if( hFile == ( HANDLE ) INVALID_HANDLE_VALUE ) errno = GetLastError(); - hFileHandle=(int)hFile; + hFileHandle=(long)hFile; s_uiErrorLast = errno; } @@ -568,7 +568,7 @@ void hb_fsClose( FHANDLE hFileHandle ) errno = 0; - #if defined(X__WIN32__) + #if defined(__WIN32__) CloseHandle( ( HANDLE ) hFileHandle ); #else close( hFileHandle ); @@ -649,7 +649,7 @@ USHORT hb_fsRead( FHANDLE hFileHandle, BYTE * pBuff, USHORT uiCount ) errno = 0; - #if defined(X__WIN32__) + #if defined(__WIN32__) { DWORD dwRead = 0; BOOL bError; @@ -687,7 +687,7 @@ USHORT hb_fsWrite( FHANDLE hFileHandle, BYTE * pBuff, USHORT uiCount ) errno = 0; - #if defined(X__WIN32__) + #if defined(__WIN32__) { DWORD dwWritten = 0; BOOL bError; @@ -734,7 +734,7 @@ ULONG hb_fsReadLarge( FHANDLE hFileHandle, BYTE * pBuff, ULONG ulCount ) errno = 0; - #if defined(X__WIN32__) + #if defined(__WIN32__) { BOOL bError; bError=ReadFile( ( HANDLE ) hFileHandle, pBuff, ulCount, &ulRead, NULL ); @@ -807,7 +807,7 @@ ULONG hb_fsWriteLarge( FHANDLE hFileHandle, BYTE * pBuff, ULONG ulCount ) errno = 0; - #if defined(X__WIN32__) + #if defined(__WIN32__) { BOOL bError; bError=WriteFile( ( HANDLE ) hFileHandle, pBuff, ulCount, &ulWritten, NULL ); @@ -910,10 +910,10 @@ ULONG hb_fsSeek( FHANDLE hFileHandle, LONG lOffset, USHORT uiFlags ) /* get current offset */ errno = 0; - #if defined(X__WIN32__) + #if defined(__WIN32__) ulPos = SetFilePointer( ( HANDLE ) hFileHandle, 0, NULL, FILE_CURRENT ); - if ((DWORD)ulPos = (DWORD)-1) + if ((DWORD)ulPos ==0xFFFFFFFF) errno=GetLastError(); #else ulPos = lseek( hFileHandle, 0, SEEK_CUR ); @@ -952,9 +952,9 @@ ULONG hb_fsSeek( FHANDLE hFileHandle, LONG lOffset, USHORT uiFlags ) #elif defined(HB_FS_FILE_IO) errno = 0; - #if defined(X__WIN32__) + #if defined(__WIN32__) ulPos = SetFilePointer( ( HANDLE ) hFileHandle, lOffset, NULL, (DWORD)Flags ); - if ((DWORD)ulPos = (DWORD)-1) + if ((DWORD)ulPos ==0xFFFFFFFF) errno=GetLastError(); #else @@ -988,9 +988,9 @@ ULONG hb_fsTell( FHANDLE hFileHandle ) #if defined(HB_FS_FILE_IO) errno = 0; - #if defined(X__WIN32__) + #if defined(__WIN32__) ulPos = SetFilePointer( ( HANDLE ) hFileHandle, 0, NULL, FILE_CURRENT ); - if ((DWORD)ulPos = (DWORD)-1) + if ((DWORD)ulPos ==0xFFFFFFFF) errno=GetLastError(); #else @@ -1257,11 +1257,18 @@ void hb_fsCommit( FHANDLE hFileHandle ) int dup_handle; errno = 0; - + #if defined(__WIN32__) + { + BOOL bSuccess; + bSuccess=FlushFileBuffers( (HANDLE) hFileHandle ); + if (!bSuccess) + errno=((int)GetLastError()); + } + #else dup_handle = dup( hFileHandle ); if( dup_handle != -1 ) close( dup_handle ); - + #endif s_uiErrorLast = errno; }