See changelog 2002-01-04 19:40 UTC-0300
This commit is contained in:
@@ -8,6 +8,18 @@
|
||||
2002-12-01 23:12 UTC+0100 Foo Bar <foo.bar@foobar.org>
|
||||
*/
|
||||
|
||||
2003-01-04 19:40 UTC-0300 Luiz Rafael Culik <culikr@uol.com.br>
|
||||
* include/filesys.c
|
||||
* When X__WIN32__ is defined FHANDLE is defined as Long
|
||||
* source/rtl/filesys.c
|
||||
% Properly Fix the usage os Native Windows File IO API. harbour apps with native WIN IO api has the same speed as Legacy api usage
|
||||
* source/rtl/console.c
|
||||
! Minor Changes required to proper work of Windows File IO Native API
|
||||
* source/common/hbffind.c
|
||||
! Corrected error return Values For DJGPP compiler for hb_fsFindNext() and hb_fsFindFirst() functions
|
||||
! Corrected error return Values For WIN32 for hb_fsFindNext() and hb_fsFindFirst() functions
|
||||
With This Changes to console.c and filesys.c build with X__WIN32__ defined works properly
|
||||
|
||||
2002-12-31 11:45 UTC-0500 David G. Holm <dholm@jsd-llc.com>
|
||||
* include/hbver.h
|
||||
* Updated the build number and the ChangeLog information.
|
||||
|
||||
@@ -61,9 +61,11 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
#define FS_ERROR F_ERROR
|
||||
|
||||
typedef int FHANDLE;
|
||||
|
||||
#if defined(X__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 */
|
||||
|
||||
@@ -131,6 +131,37 @@ HB_FILE_VER( "$Id$" )
|
||||
|
||||
#endif
|
||||
|
||||
/* Internal funtion , Convert Windows Error Values to Dos Error Values */
|
||||
#ifdef HB_OS_WIN_32
|
||||
int WintoDosError( unsigned long lError)
|
||||
{
|
||||
int iReturn;
|
||||
switch( lError ) {
|
||||
case ERROR_ALREADY_EXISTS:
|
||||
iReturn = 5;
|
||||
break;
|
||||
case ERROR_FILE_NOT_FOUND:
|
||||
iReturn = 2;
|
||||
break;
|
||||
case ERROR_PATH_NOT_FOUND:
|
||||
iReturn = 3;
|
||||
break;
|
||||
case ERROR_TOO_MANY_OPEN_FILES:
|
||||
iReturn = 4;
|
||||
break;
|
||||
case ERROR_INVALID_HANDLE:
|
||||
iReturn = 6;
|
||||
break;
|
||||
default:
|
||||
iReturn=0;
|
||||
break;
|
||||
}
|
||||
|
||||
return iReturn;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* ------------------------------------------------------------- */
|
||||
|
||||
USHORT hb_fsAttrFromRaw( ULONG raw_attr )
|
||||
@@ -564,6 +595,7 @@ PHB_FFIND hb_fsFindFirst( const char * pszFileName, USHORT uiAttr )
|
||||
|
||||
{
|
||||
PHB_FFIND_INFO info;
|
||||
errno = 0;
|
||||
|
||||
ffind->info = ( void * ) hb_xgrab( sizeof( HB_FFIND_INFO ) );
|
||||
info = ( PHB_FFIND_INFO ) ffind->info;
|
||||
@@ -571,6 +603,15 @@ PHB_FFIND hb_fsFindFirst( const char * pszFileName, USHORT uiAttr )
|
||||
tzset();
|
||||
|
||||
bFound = ( findfirst( pszFileName, &info->entry, ( USHORT ) hb_fsAttrToRaw( uiAttr ) ) == 0 );
|
||||
#if defined(__DJGPP__) || defined(__RSX32__)
|
||||
if (errno==22)
|
||||
errno=2;
|
||||
if (errno==4)
|
||||
errno=5;
|
||||
#endif
|
||||
|
||||
hb_fsSetError( errno );
|
||||
|
||||
}
|
||||
|
||||
#elif defined(HB_OS_OS2)
|
||||
@@ -599,12 +640,14 @@ PHB_FFIND hb_fsFindFirst( const char * pszFileName, USHORT uiAttr )
|
||||
|
||||
{
|
||||
PHB_FFIND_INFO info;
|
||||
errno = 0;
|
||||
|
||||
ffind->info = ( void * ) hb_xgrab( sizeof( HB_FFIND_INFO ) );
|
||||
info = ( PHB_FFIND_INFO ) ffind->info;
|
||||
|
||||
info->hFindFile = FindFirstFile( pszFileName, &info->pFindFileData );
|
||||
info->dwAttr = ( DWORD ) hb_fsAttrToRaw( uiAttr );
|
||||
errno = 0;
|
||||
|
||||
if( info->hFindFile != INVALID_HANDLE_VALUE )
|
||||
{
|
||||
@@ -634,8 +677,11 @@ PHB_FFIND hb_fsFindFirst( const char * pszFileName, USHORT uiAttr )
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
else {
|
||||
bFound = FALSE;
|
||||
errno = WintoDosError( GetLastError() );
|
||||
hb_fsSetError( errno );
|
||||
}
|
||||
}
|
||||
|
||||
#elif defined(HB_OS_UNIX)
|
||||
@@ -735,7 +781,16 @@ BOOL hb_fsFindNext( PHB_FFIND ffind )
|
||||
#if defined(HB_OS_DOS)
|
||||
|
||||
{
|
||||
errno = 0;
|
||||
bFound = ( findnext( &info->entry ) == 0 );
|
||||
#if defined(__DJGPP__) || defined(__RSX32__)
|
||||
if (errno==22)
|
||||
errno=2;
|
||||
if (errno==4)
|
||||
errno=5;
|
||||
#endif
|
||||
hb_fsSetError( errno );
|
||||
|
||||
}
|
||||
|
||||
#elif defined(HB_OS_OS2)
|
||||
@@ -749,7 +804,7 @@ BOOL hb_fsFindNext( PHB_FFIND ffind )
|
||||
|
||||
{
|
||||
bFound = FALSE;
|
||||
|
||||
errno = 0;
|
||||
while( FindNextFile( info->hFindFile, &info->pFindFileData ) )
|
||||
{
|
||||
if( info->dwAttr == 0 ||
|
||||
@@ -761,6 +816,12 @@ BOOL hb_fsFindNext( PHB_FFIND ffind )
|
||||
bFound = TRUE;
|
||||
break;
|
||||
}
|
||||
else {
|
||||
errno = WintoDosError(GetLastError()) ;
|
||||
hb_fsSetError( errno );
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -69,6 +69,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#define HB_OS_WIN_32_USED
|
||||
#include "hbapi.h"
|
||||
#include "hbapiitm.h"
|
||||
#include "hbapifs.h"
|
||||
@@ -85,9 +86,15 @@ static USHORT s_uiPCol;
|
||||
static SHORT s_originalMaxRow;
|
||||
static SHORT s_originalMaxCol;
|
||||
static char s_szCrLf[ CRLF_BUFFER_LEN ];
|
||||
#if defined(X__WIN32__)
|
||||
static int s_iFilenoStdin;
|
||||
static int s_iFilenoStdout;
|
||||
static int s_iFilenoStderr;
|
||||
#else
|
||||
static int s_iFilenoStdin;
|
||||
static int s_iFilenoStdout;
|
||||
static int s_iFilenoStderr;
|
||||
#endif
|
||||
|
||||
void hb_conInit( void )
|
||||
{
|
||||
@@ -104,29 +111,48 @@ void hb_conInit( void )
|
||||
|
||||
s_uiPRow = s_uiPCol = 0;
|
||||
|
||||
#if defined(X__WIN32__)
|
||||
|
||||
s_iFilenoStdin = GetStdHandle( STD_INPUT_HANDLE );
|
||||
s_iFilenoStdout = GetStdHandle( STD_OUTPUT_HANDLE );
|
||||
|
||||
#else
|
||||
|
||||
s_iFilenoStdin = fileno( stdin );
|
||||
s_iFilenoStdout = fileno( stdout );
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef HB_C52_UNDOC
|
||||
{
|
||||
int iStderr = hb_cmdargNum( "STDERR" ); /* Undocumented CA-Clipper switch //STDERR:x */
|
||||
|
||||
if( iStderr < 0 ) /* //STDERR not used or invalid */
|
||||
#if defined(X__WIN32__)
|
||||
s_iFilenoStderr = GetStdHandle( STD_ERROR_HANDLE );
|
||||
#else
|
||||
s_iFilenoStderr = fileno( stderr );
|
||||
#endif
|
||||
else if( iStderr == 0 ) /* //STDERR with no parameter or 0 */
|
||||
s_iFilenoStderr = s_iFilenoStdout;
|
||||
else /* //STDERR:x */
|
||||
s_iFilenoStderr = iStderr;
|
||||
}
|
||||
#else
|
||||
#if defined(X__WIN32__)
|
||||
s_iFilenoStderr = GetStdHandle( STD_ERROR_HANDLE );
|
||||
#else
|
||||
s_iFilenoStderr = fileno( stderr );
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Some compilers open stdout and stderr in text mode, but
|
||||
Harbour needs them to be open in binary mode. */
|
||||
|
||||
#if !defined(X__WIN32__)
|
||||
hb_fsSetDevMode( s_iFilenoStdout, FD_BINARY );
|
||||
hb_fsSetDevMode( s_iFilenoStderr, FD_BINARY );
|
||||
#endif
|
||||
|
||||
s_bInit = TRUE;
|
||||
|
||||
@@ -146,8 +172,10 @@ void hb_conRelease( void )
|
||||
hb_gtSetMode( s_originalMaxRow + 1, s_originalMaxCol + 1 );
|
||||
}
|
||||
|
||||
#if !defined(X__WIN32__)
|
||||
hb_fsSetDevMode( s_iFilenoStdout, FD_TEXT );
|
||||
hb_fsSetDevMode( s_iFilenoStderr, FD_TEXT );
|
||||
#endif
|
||||
|
||||
/* The is done by the OS from now on */
|
||||
s_szCrLf[ 0 ] = HB_CHAR_LF;
|
||||
@@ -207,12 +235,12 @@ void hb_conOutStd( char * pStr, ULONG ulLen )
|
||||
hb_gtPreExt();
|
||||
|
||||
uiErrorOld = hb_fsError(); /* Save current user file error code */
|
||||
hb_fsWriteLarge( s_iFilenoStdout, ( BYTE * ) pStr, ulLen );
|
||||
hb_fsWriteLarge( ( int ) s_iFilenoStdout, ( BYTE * ) pStr, ulLen );
|
||||
hb_fsSetError( uiErrorOld ); /* Restore last user file error code */
|
||||
|
||||
if( s_bInit )
|
||||
{
|
||||
hb_gtAdjustPos( s_iFilenoStdout, pStr, ulLen );
|
||||
hb_gtAdjustPos( ( int ) s_iFilenoStdout, pStr, ulLen );
|
||||
hb_gtPostExt();
|
||||
}
|
||||
}
|
||||
@@ -231,12 +259,12 @@ void hb_conOutErr( char * pStr, ULONG ulLen )
|
||||
hb_gtPreExt();
|
||||
|
||||
uiErrorOld = hb_fsError(); /* Save current user file error code */
|
||||
hb_fsWriteLarge( s_iFilenoStderr, ( BYTE * ) pStr, ulLen );
|
||||
hb_fsWriteLarge( ( int ) s_iFilenoStderr, ( BYTE * ) pStr, ulLen );
|
||||
hb_fsSetError( uiErrorOld ); /* Restore last user file error code */
|
||||
|
||||
if( s_bInit )
|
||||
{
|
||||
hb_gtAdjustPos( s_iFilenoStderr, pStr, ulLen );
|
||||
hb_gtAdjustPos( ( int ) s_iFilenoStderr, pStr, ulLen );
|
||||
hb_gtPostExt();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -243,6 +243,18 @@ static USHORT s_uiErrorLast = 0;
|
||||
#define LARGE_MAX ( UINT_MAX - 1L )
|
||||
#endif
|
||||
|
||||
#ifdef __WIN32__
|
||||
#if !defined(__BORLANDC__)
|
||||
extern int WintoDosError(DWORD dwError);
|
||||
#else
|
||||
extern int __IOerror(int dosErr);
|
||||
extern int __NTerror (void);
|
||||
#endif
|
||||
|
||||
HANDLE DostoWinHandle( FHANDLE fHandle);
|
||||
|
||||
#endif
|
||||
|
||||
/* Convert HARBOUR flags to IO subsystem flags */
|
||||
|
||||
#if defined(HB_FS_FILE_IO)
|
||||
@@ -518,30 +530,55 @@ FHANDLE hb_fsOpen( BYTE * pFilename, USHORT uiFlags )
|
||||
HANDLE hFile;
|
||||
|
||||
/* read & write flags */
|
||||
if( uiFlags & FO_WRITE )
|
||||
dwFlags |= GENERIC_WRITE;
|
||||
switch( uiFlags & 3)
|
||||
{
|
||||
case FO_READWRITE :
|
||||
dwFlags |= GENERIC_READ | GENERIC_WRITE;
|
||||
break;
|
||||
|
||||
if( uiFlags & FO_READWRITE )
|
||||
case FO_WRITE:
|
||||
dwFlags |= GENERIC_WRITE;
|
||||
break;
|
||||
|
||||
case FO_READ :
|
||||
dwFlags |= GENERIC_READ;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/* shared flags */
|
||||
if( ( uiFlags & FO_DENYREAD ) == FO_DENYREAD )
|
||||
dwShare = FILE_SHARE_WRITE;
|
||||
switch (uiFlags & ( FO_DENYREAD | FO_DENYWRITE | FO_EXCLUSIVE | FO_DENYNONE ) )
|
||||
{
|
||||
case FO_DENYREAD :
|
||||
|
||||
else if( uiFlags & FO_DENYWRITE )
|
||||
dwShare = FILE_SHARE_READ;
|
||||
dwShare = FILE_SHARE_WRITE;
|
||||
break;
|
||||
|
||||
else if( uiFlags & FO_EXCLUSIVE )
|
||||
dwShare = 0;
|
||||
case FO_DENYWRITE :
|
||||
|
||||
dwShare = FILE_SHARE_READ;
|
||||
break;
|
||||
|
||||
case FO_EXCLUSIVE:
|
||||
|
||||
dwShare = 0;
|
||||
break;
|
||||
|
||||
}
|
||||
errno = 0;
|
||||
|
||||
hFile = ( HANDLE ) CreateFile( ( char * ) pFilename, dwFlags,
|
||||
dwShare, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
|
||||
|
||||
if( hFile == ( HANDLE ) INVALID_HANDLE_VALUE )
|
||||
errno = GetLastError();
|
||||
hFileHandle=(int)hFile;
|
||||
#if !defined(__BORLANDC__)
|
||||
errno=WintoDosError(GetLastError());
|
||||
#else
|
||||
__NTerror();
|
||||
#endif
|
||||
|
||||
// errno = GetLastError();
|
||||
hFileHandle=HandleToLong(hFile);
|
||||
s_uiErrorLast = errno;
|
||||
}
|
||||
|
||||
@@ -637,9 +674,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=HandleToLong(hFile);
|
||||
s_uiErrorLast = errno;
|
||||
}
|
||||
|
||||
@@ -718,7 +755,14 @@ void hb_fsClose( FHANDLE hFileHandle )
|
||||
errno = 0;
|
||||
|
||||
#if defined(X__WIN32__)
|
||||
CloseHandle( ( HANDLE ) hFileHandle );
|
||||
|
||||
if (!CloseHandle( DostoWinHandle (hFileHandle )))
|
||||
#if !defined(__BORLANDC__)
|
||||
errno=WintoDosError(GetLastError());
|
||||
#else
|
||||
__NTerror();
|
||||
#endif
|
||||
|
||||
#else
|
||||
close( hFileHandle );
|
||||
#endif
|
||||
@@ -790,13 +834,14 @@ USHORT hb_fsRead( FHANDLE hFileHandle, BYTE * pBuff, USHORT uiCount )
|
||||
|
||||
#if defined(X__WIN32__)
|
||||
{
|
||||
DWORD dwRead = 0;
|
||||
BOOL bError;
|
||||
bError=ReadFile( ( HANDLE ) hFileHandle, pBuff, uiCount, &dwRead, NULL );
|
||||
|
||||
DWORD dwRead ;
|
||||
BOOL bError;
|
||||
bError=ReadFile( DostoWinHandle(hFileHandle), pBuff, (DWORD)uiCount, &dwRead, NULL );
|
||||
if (!bError)
|
||||
errno = GetLastError();
|
||||
uiRead = ( USHORT ) dwRead;
|
||||
|
||||
|
||||
}
|
||||
#else
|
||||
uiRead = read( hFileHandle, pBuff, uiCount );
|
||||
@@ -830,7 +875,7 @@ USHORT hb_fsWrite( FHANDLE hFileHandle, BYTE * pBuff, USHORT uiCount )
|
||||
{
|
||||
DWORD dwWritten = 0;
|
||||
BOOL bError;
|
||||
bError=WriteFile( ( HANDLE ) hFileHandle, pBuff, uiCount, &dwWritten, NULL );
|
||||
bError=WriteFile( DostoWinHandle(hFileHandle), pBuff, uiCount, &dwWritten, NULL );
|
||||
if (!bError)
|
||||
errno = GetLastError();
|
||||
uiWritten = ( USHORT ) dwWritten;
|
||||
@@ -876,7 +921,7 @@ ULONG hb_fsReadLarge( FHANDLE hFileHandle, BYTE * pBuff, ULONG ulCount )
|
||||
#if defined(X__WIN32__)
|
||||
{
|
||||
BOOL bError;
|
||||
bError=ReadFile( ( HANDLE ) hFileHandle, pBuff, ulCount, &ulRead, NULL );
|
||||
bError=ReadFile( DostoWinHandle(hFileHandle), pBuff, ulCount, &ulRead, NULL );
|
||||
if (!bError)
|
||||
errno = GetLastError();
|
||||
}
|
||||
@@ -949,9 +994,10 @@ ULONG hb_fsWriteLarge( FHANDLE hFileHandle, BYTE * pBuff, ULONG ulCount )
|
||||
#if defined(X__WIN32__)
|
||||
{
|
||||
BOOL bError;
|
||||
bError=WriteFile( ( HANDLE ) hFileHandle, pBuff, ulCount, &ulWritten, NULL );
|
||||
bError=WriteFile( DostoWinHandle( hFileHandle), pBuff, ulCount, &ulWritten, NULL );
|
||||
if (!bError)
|
||||
errno = GetLastError();
|
||||
|
||||
}
|
||||
#else
|
||||
if( ulCount )
|
||||
@@ -1051,8 +1097,8 @@ ULONG hb_fsSeek( FHANDLE hFileHandle, LONG lOffset, USHORT uiFlags )
|
||||
errno = 0;
|
||||
#if defined(X__WIN32__)
|
||||
|
||||
ulPos = SetFilePointer( ( HANDLE ) hFileHandle, 0, NULL, FILE_CURRENT );
|
||||
if ((DWORD)ulPos = (DWORD)-1)
|
||||
ulPos = SetFilePointer( DostoWinHandle(hFileHandle), 0, NULL, FILE_CURRENT );
|
||||
if ((DWORD)ulPos == 0xFFFFFFFF)
|
||||
errno=GetLastError();
|
||||
#else
|
||||
ulPos = lseek( hFileHandle, 0, SEEK_CUR );
|
||||
@@ -1092,8 +1138,8 @@ ULONG hb_fsSeek( FHANDLE hFileHandle, LONG lOffset, USHORT uiFlags )
|
||||
|
||||
errno = 0;
|
||||
#if defined(X__WIN32__)
|
||||
ulPos = SetFilePointer( ( HANDLE ) hFileHandle, lOffset, NULL, (DWORD)Flags );
|
||||
if ((DWORD)ulPos = (DWORD)-1)
|
||||
ulPos = SetFilePointer( DostoWinHandle(hFileHandle), lOffset, NULL, (DWORD)Flags );
|
||||
if ((DWORD)ulPos == 0xFFFFFFFF)
|
||||
errno=GetLastError();
|
||||
|
||||
#else
|
||||
@@ -1128,8 +1174,8 @@ ULONG hb_fsTell( FHANDLE hFileHandle )
|
||||
|
||||
errno = 0;
|
||||
#if defined(X__WIN32__)
|
||||
ulPos = SetFilePointer( ( HANDLE ) hFileHandle, 0, NULL, FILE_CURRENT );
|
||||
if ((DWORD)ulPos = (DWORD)-1)
|
||||
ulPos = SetFilePointer( DostoWinHandle(hFileHandle), 0, NULL, FILE_CURRENT );
|
||||
if ((DWORD)ulPos == 0xFFFFFFFF)
|
||||
errno=GetLastError();
|
||||
|
||||
#else
|
||||
@@ -1169,8 +1215,13 @@ BOOL hb_fsDelete( BYTE * pFilename )
|
||||
|
||||
#if defined(HB_OS_WIN_32)
|
||||
|
||||
bResult = DeleteFile( ( char * ) pFilename );
|
||||
s_uiErrorLast = ( USHORT ) GetLastError();
|
||||
if ((bResult = DeleteFile( ( char * ) pFilename ))==0)
|
||||
#if !defined(__BORLANDC__)
|
||||
errno=WintoDosError(GetLastError());
|
||||
#else
|
||||
__NTerror();
|
||||
#endif
|
||||
s_uiErrorLast = errno;
|
||||
|
||||
#elif defined(HAVE_POSIX_IO)
|
||||
|
||||
@@ -1202,8 +1253,14 @@ BOOL hb_fsRename( BYTE * pOldName, BYTE * pNewName )
|
||||
|
||||
#if defined(HB_OS_WIN_32)
|
||||
|
||||
bResult = MoveFile( ( char * ) pOldName, ( char * ) pNewName );
|
||||
s_uiErrorLast = ( USHORT ) GetLastError();
|
||||
errno=0;
|
||||
if ((bResult = MoveFile( ( char * ) pOldName, ( char * ) pNewName ))==0)
|
||||
#if !defined(__BORLANDC__)
|
||||
errno=WintoDosError(GetLastError());
|
||||
#else
|
||||
__NTerror();
|
||||
#endif
|
||||
s_uiErrorLast = errno;
|
||||
|
||||
#elif defined(HB_FS_FILE_IO)
|
||||
|
||||
@@ -1227,8 +1284,26 @@ BOOL hb_fsLock ( FHANDLE hFileHandle, ULONG ulStart,
|
||||
BOOL bResult;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_fsLock(%p, %lu, %lu, %hu)", hFileHandle, ulStart, ulLength, uiMode));
|
||||
#if defined(X__WIN32__)
|
||||
{
|
||||
errno = 0;
|
||||
switch( uiMode )
|
||||
{
|
||||
case FL_LOCK:
|
||||
bResult = ( LockFile( DostoWinHandle(hFileHandle), ulStart,0, ulLength,0 ) == 0 );
|
||||
break;
|
||||
|
||||
#if defined(HB_OS_OS2)
|
||||
case FL_UNLOCK:
|
||||
bResult = ( UnlockFile( DostoWinHandle(hFileHandle), ulStart,0, ulLength,0 ) == 0 );
|
||||
break;
|
||||
|
||||
default:
|
||||
bResult = FALSE;
|
||||
}
|
||||
s_uiErrorLast = errno;
|
||||
|
||||
}
|
||||
#elif defined(HB_OS_OS2)
|
||||
|
||||
{
|
||||
struct _FILELOCK fl, ful;
|
||||
@@ -1388,7 +1463,7 @@ void hb_fsCommit( FHANDLE hFileHandle )
|
||||
|
||||
#if defined(HB_OS_WIN_32)
|
||||
|
||||
FlushFileBuffers( ( HANDLE ) hFileHandle );
|
||||
FlushFileBuffers( ( HANDLE ) DostoWinHandle(hFileHandle) );
|
||||
s_uiErrorLast = ( USHORT ) GetLastError();
|
||||
|
||||
#elif defined(HB_OS_OS2)
|
||||
@@ -1882,4 +1957,21 @@ BOOL hb_fsEof( FHANDLE hFileHandle )
|
||||
#else
|
||||
return eof( hFileHandle ) != 0;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#ifdef __WIN32__
|
||||
HANDLE DostoWinHandle( FHANDLE fHandle)
|
||||
{
|
||||
HANDLE hHandle=LongToHandle(fHandle);
|
||||
switch (fHandle)
|
||||
{
|
||||
case 0:
|
||||
return GetStdHandle(STD_INPUT_HANDLE);
|
||||
case 1:
|
||||
return GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
case 2:
|
||||
return GetStdHandle(STD_ERROR_HANDLE);
|
||||
default :
|
||||
return hHandle;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user