From db3fe4b8d4d003e1e4b7eb5aa845705405cc000f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Czerpak?= Date: Mon, 31 Aug 2015 23:43:30 +0200 Subject: [PATCH] 2015-08-31 23:43 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * contrib/hbmzip/mzip.c * contrib/hbnetio/netiocli.c * contrib/hbnetio/netiosrv.c * contrib/hbwin/win_prn2.c * contrib/xhb/xhbcopyf.c * src/rdd/dbffpt/dbffpt1.c * src/rdd/dbfnsx/dbfnsx1.c * src/rdd/delim1.c * src/rdd/hbsix/sxcompr.c * src/rdd/sdf1.c * src/rtl/copyfile.c * src/rtl/filesys.c * src/rtl/fscopy.c * src/rtl/hbmd5.c * src/rtl/memofile.c * src/rtl/philes.c * src/rtl/vfile.c * updated for possible -1 result returned by hb_fileRead()/hb_fileWrite() --- ChangeLog.txt | 20 +++++++++ contrib/hbmzip/mzip.c | 14 ++++--- contrib/hbnetio/netiocli.c | 4 +- contrib/hbnetio/netiosrv.c | 2 + contrib/hbwin/win_prn2.c | 3 +- contrib/xhb/xhbcopyf.c | 7 +++- src/rdd/dbffpt/dbffpt1.c | 85 ++++++++++++++++++++------------------ src/rdd/dbfnsx/dbfnsx1.c | 8 ++-- src/rdd/delim1.c | 2 + src/rdd/hbsix/sxcompr.c | 2 + src/rdd/sdf1.c | 11 +++-- src/rtl/copyfile.c | 7 +++- src/rtl/filesys.c | 18 ++++---- src/rtl/fscopy.c | 5 ++- src/rtl/hbmd5.c | 4 ++ src/rtl/memofile.c | 2 + src/rtl/philes.c | 10 +++-- src/rtl/vfile.c | 18 ++++---- 18 files changed, 137 insertions(+), 85 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 35f164566c..1a6cfc5387 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -10,6 +10,26 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2015-08-31 23:43 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) + * contrib/hbmzip/mzip.c + * contrib/hbnetio/netiocli.c + * contrib/hbnetio/netiosrv.c + * contrib/hbwin/win_prn2.c + * contrib/xhb/xhbcopyf.c + * src/rdd/dbffpt/dbffpt1.c + * src/rdd/dbfnsx/dbfnsx1.c + * src/rdd/delim1.c + * src/rdd/hbsix/sxcompr.c + * src/rdd/sdf1.c + * src/rtl/copyfile.c + * src/rtl/filesys.c + * src/rtl/fscopy.c + * src/rtl/hbmd5.c + * src/rtl/memofile.c + * src/rtl/philes.c + * src/rtl/vfile.c + * updated for possible -1 result returned by hb_fileRead()/hb_fileWrite() + 2015-08-31 16:49 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * include/harbour.hbx + added hb_socketAutoShutdown() diff --git a/contrib/hbmzip/mzip.c b/contrib/hbmzip/mzip.c index d25bd74906..1bfd93305c 100644 --- a/contrib/hbmzip/mzip.c +++ b/contrib/hbmzip/mzip.c @@ -689,7 +689,7 @@ static HB_BOOL hb_zipGetFileInfoFromHandle( PHB_FILE pFile, HB_U32 * pulCRC, HB_ do { nRead = hb_fileRead( pFile, pString, HB_Z_IOBUF_SIZE, -1 ); - if( nRead > 0 ) + if( nRead > 0 && nRead != ( HB_SIZE ) FS_ERROR ) { ulCRC = crc32( ulCRC, pString, ( uInt ) nRead ); if( fText ) @@ -1043,7 +1043,8 @@ static int hb_zipStoreFile( zipFile hZip, int iParamFileName, int iParamZipName, if( iResult == 0 ) { pString = ( char * ) hb_xgrab( HB_Z_IOBUF_SIZE ); - while( ( nLen = hb_fileRead( pFile, pString, HB_Z_IOBUF_SIZE, -1 ) ) > 0 ) + while( ( nLen = hb_fileRead( pFile, pString, HB_Z_IOBUF_SIZE, -1 ) ) > 0 && + nLen != ( HB_SIZE ) FS_ERROR ) zipWriteInFileInZip( hZip, pString, ( unsigned ) nLen ); hb_xfree( pString ); @@ -1149,7 +1150,8 @@ static int hb_zipStoreFileHandle( zipFile hZip, PHB_FILE pFile, int iParamZipNam { char * pString = ( char * ) hb_xgrab( HB_Z_IOBUF_SIZE ); hb_fileSeek( pFile, 0, FS_SET ); - while( ( nLen = hb_fileRead( pFile, pString, HB_Z_IOBUF_SIZE, -1 ) ) > 0 ) + while( ( nLen = hb_fileRead( pFile, pString, HB_Z_IOBUF_SIZE, -1 ) ) > 0 && + nLen != ( HB_SIZE ) FS_ERROR ) zipWriteInFileInZip( hZip, pString, ( unsigned ) nLen ); hb_xfree( pString ); @@ -1266,7 +1268,8 @@ static int hb_unzipExtractCurrentFile( unzFile hUnzip, const char * szFileName, pString = ( char * ) hb_xgrab( HB_Z_IOBUF_SIZE ); while( ( iResult = unzReadCurrentFile( hUnzip, pString, HB_Z_IOBUF_SIZE ) ) > 0 ) - hb_fileWrite( pFile, pString, ( HB_SIZE ) iResult, -1 ); + if( hb_fileWrite( pFile, pString, ( HB_SIZE ) iResult, -1 ) != ( HB_SIZE ) iResult ) + break; hb_xfree( pString ); @@ -1458,7 +1461,8 @@ static int hb_unzipExtractCurrentFileToHandle( unzFile hUnzip, PHB_FILE pFile, c char * pString = ( char * ) hb_xgrab( HB_Z_IOBUF_SIZE ); while( ( iResult = unzReadCurrentFile( hUnzip, pString, HB_Z_IOBUF_SIZE ) ) > 0 ) - hb_fileWrite( pFile, pString, ( HB_SIZE ) iResult, -1 ); + if( hb_fileWrite( pFile, pString, ( HB_SIZE ) iResult, -1 ) != ( HB_SIZE ) iResult ) + break; hb_xfree( pString ); diff --git a/contrib/hbnetio/netiocli.c b/contrib/hbnetio/netiocli.c index 441952b5c8..77d6fdc2ae 100644 --- a/contrib/hbnetio/netiocli.c +++ b/contrib/hbnetio/netiocli.c @@ -2206,7 +2206,7 @@ static HB_SIZE s_fileRead( PHB_FILE pFile, void * data, HB_SIZE ulSize, { HB_ERRCODE errCode = ( HB_ERRCODE ) HB_GET_LE_UINT32( &msgbuf[ 8 ] ); ulResult = HB_GET_LE_UINT32( &msgbuf[ 4 ] ); - if( ulResult > 0 ) + if( ulResult > 0 && ulResult != ( HB_SIZE ) FS_ERROR ) { if( ulResult > ulSize ) /* error, it should not happen, enemy attack? */ { @@ -2274,7 +2274,7 @@ static HB_SIZE s_fileReadAt( PHB_FILE pFile, void * data, HB_SIZE ulSize, { HB_ERRCODE errCode = ( HB_ERRCODE ) HB_GET_LE_UINT32( &msgbuf[ 8 ] ); ulResult = HB_GET_LE_UINT32( &msgbuf[ 4 ] ); - if( ulResult > 0 ) + if( ulResult > 0 && ulResult != ( HB_SIZE ) FS_ERROR ) { if( ulResult > ulSize ) /* error, it should not happen, enemy attack? */ { diff --git a/contrib/hbnetio/netiosrv.c b/contrib/hbnetio/netiosrv.c index 0106abbe96..93492d5c4f 100644 --- a/contrib/hbnetio/netiosrv.c +++ b/contrib/hbnetio/netiosrv.c @@ -1230,6 +1230,8 @@ HB_FUNC( NETIO_SERVER ) HB_PUT_LE_UINT32( &msg[ 4 ], len ); HB_PUT_LE_UINT32( &msg[ 8 ], errFsCode ); memset( msg + 12, '\0', NETIO_MSGLEN - 12 ); + if( len == ( HB_SIZE ) FS_ERROR ) + len = 0; } } break; diff --git a/contrib/hbwin/win_prn2.c b/contrib/hbwin/win_prn2.c index f207d94354..1e1ecd672d 100644 --- a/contrib/hbwin/win_prn2.c +++ b/contrib/hbwin/win_prn2.c @@ -394,7 +394,8 @@ HB_FUNC( WIN_PRINTFILERAW ) HB_SIZE nRead; nResult = 1; - while( ( nRead = hb_fileRead( pFile, pbyBuffer, HB_PRINT_BUFFER_SIZE, -1 ) ) > 0 ) + while( ( nRead = hb_fileRead( pFile, pbyBuffer, HB_PRINT_BUFFER_SIZE, -1 ) ) > 0 && + nRead != ( HB_SIZE ) FS_ERROR ) { HB_SIZE nWritten = 0; diff --git a/contrib/xhb/xhbcopyf.c b/contrib/xhb/xhbcopyf.c index 0553aada0f..b8302561c5 100644 --- a/contrib/xhb/xhbcopyf.c +++ b/contrib/xhb/xhbcopyf.c @@ -124,13 +124,16 @@ static HB_BOOL hb_copyfile( const char * pszSource, const char * pszDest, PHB_IT if( pBlock && HB_IS_EVALITEM( pBlock ) ) pCount = hb_itemNew( NULL ); - while( ( nRead = hb_fileRead( pSource, buffer, BUFFER_SIZE, -1 ) ) != 0 ) + while( ( nRead = hb_fileRead( pSource, buffer, BUFFER_SIZE, -1 ) ) != 0 && + nRead != ( HB_SIZE ) FS_ERROR ) { HB_SIZE nWritten = 0; while( nWritten < nRead ) { - nWritten += hb_fileWrite( pDest, buffer + nWritten, nRead - nWritten, -1 ); + HB_SIZE nDone = hb_fileWrite( pDest, buffer + nWritten, nRead - nWritten, -1 ); + if( nDone != ( HB_SIZE ) FS_ERROR ) + nWritten += nDone; if( nWritten < nRead ) { pError = hb_errRT_FileError( pError, NULL, EG_WRITE, 2016, pszDest ); diff --git a/src/rdd/dbffpt/dbffpt1.c b/src/rdd/dbffpt/dbffpt1.c index adba0efdea..628e7ee46d 100644 --- a/src/rdd/dbffpt/dbffpt1.c +++ b/src/rdd/dbffpt/dbffpt1.c @@ -739,13 +739,15 @@ static void hb_fptDestroyGCdata( LPMEMOGCTABLE pGCtable ) */ static HB_ERRCODE hb_fptReadGCdata( FPTAREAP pArea, LPMEMOGCTABLE pGCtable ) { + HB_SIZE nRead; int i; hb_fptDestroyGCdata( pGCtable ); memset( &pGCtable->fptHeader, 0, sizeof( FPTHEADER ) ); - if( hb_fileReadAt( pArea->pMemoFile, &pGCtable->fptHeader, - sizeof( FPTHEADER ), 0 ) >= 512 ) + nRead = hb_fileReadAt( pArea->pMemoFile, &pGCtable->fptHeader, + sizeof( FPTHEADER ), 0 ); + if( nRead >= 512 && nRead != ( HB_SIZE ) FS_ERROR ) { if( pArea->bMemoType == DB_MEMO_SMT || pArea->bMemoType == DB_MEMO_DBT ) pGCtable->ulNextBlock = HB_GET_LE_UINT32( pGCtable->fptHeader.nextBlock ); @@ -999,20 +1001,20 @@ static HB_ULONG hb_fptGetMemoLen( FPTAREAP pArea, HB_USHORT uiIndex ) if( pArea->bMemoType == DB_MEMO_DBT ) { HB_BYTE pBlock[ DBT_DEFBLOCKSIZE ]; - HB_SIZE ulLen, u; + HB_SIZE nLen, n; do { - ulLen = hb_fileReadAt( pArea->pMemoFile, pBlock, DBT_DEFBLOCKSIZE, fOffset ); - fOffset += ulLen; - if( ulLen == 0 ) + nLen = hb_fileReadAt( pArea->pMemoFile, pBlock, DBT_DEFBLOCKSIZE, fOffset ); + if( nLen == 0 || nLen == ( HB_SIZE ) FS_ERROR ) break; - u = 0; - while( u < ulLen && pBlock[ u ] != 0x1A ) - u++; - ulSize += ( HB_ULONGCAST ) u; + fOffset += nLen; + n = 0; + while( n < nLen && pBlock[ n ] != 0x1A ) + n++; + ulSize += ( HB_ULONGCAST ) n; } - while( u == DBT_DEFBLOCKSIZE ); + while( n == DBT_DEFBLOCKSIZE ); } else if( hb_fileReadAt( pArea->pMemoFile, &fptBlock, sizeof( FPTBLOCK ), fOffset ) == @@ -2482,23 +2484,23 @@ static HB_ERRCODE hb_fptCopyToRawFile( PHB_FILE pSrc, HB_FOFFSET from, if( size ) { HB_FOFFSET written = 0; - HB_ULONG ulBufSize, ulRead; + HB_SIZE nBufSize; HB_BYTE * pBuffer; - ulBufSize = ( HB_ULONG ) HB_MIN( 0x10000, size ); - pBuffer = ( HB_BYTE * ) hb_xgrab( ulBufSize ); + nBufSize = ( HB_SIZE ) HB_MIN( 0x10000, size ); + pBuffer = ( HB_BYTE * ) hb_xgrab( nBufSize ); do { - ulRead = ( HB_ULONGCAST ) hb_fileReadAt( pSrc, pBuffer, ( HB_ULONG ) - HB_MIN( ( HB_FOFFSET ) ulBufSize, size - written ), - from + written ); - if( ulRead == 0 ) + HB_SIZE nRead = hb_fileReadAt( pSrc, pBuffer, ( HB_SIZE ) + HB_MIN( ( HB_FOFFSET ) nBufSize, size - written ), + from + written ); + if( nRead == 0 || nRead == ( HB_SIZE ) FS_ERROR ) errCode = EDBF_READ; - else if( hb_fileWrite( pDst, pBuffer, ulRead, -1 ) != ulRead ) + else if( hb_fileWrite( pDst, pBuffer, nRead, -1 ) != nRead ) errCode = EDBF_WRITE; else - written += ulRead; + written += nRead; } while( errCode == HB_SUCCESS && written < size ); @@ -2517,24 +2519,24 @@ static HB_ERRCODE hb_fptCopyToFile( PHB_FILE pSrc, HB_FOFFSET from, if( size ) { HB_FOFFSET written = 0; - HB_ULONG ulBufSize, ulRead; + HB_SIZE nBufSize; HB_BYTE * pBuffer; - ulBufSize = ( HB_ULONG ) HB_MIN( 0x10000, size ); - pBuffer = ( HB_BYTE * ) hb_xgrab( ulBufSize ); + nBufSize = ( HB_SIZE ) HB_MIN( 0x10000, size ); + pBuffer = ( HB_BYTE * ) hb_xgrab( nBufSize ); do { - ulRead = ( HB_ULONGCAST ) hb_fileReadAt( pSrc, pBuffer, ( HB_ULONG ) - HB_MIN( ( HB_FOFFSET ) ulBufSize, size - written ), - from + written ); - if( ulRead == 0 ) + HB_SIZE nRead = hb_fileReadAt( pSrc, pBuffer, ( HB_SIZE ) + HB_MIN( ( HB_FOFFSET ) nBufSize, size - written ), + from + written ); + if( nRead == 0 || nRead == ( HB_SIZE ) FS_ERROR ) errCode = EDBF_READ; - else if( hb_fileWriteAt( pDst, pBuffer, ulRead, - to + written ) != ulRead ) + else if( hb_fileWriteAt( pDst, pBuffer, nRead, + to + written ) != nRead ) errCode = EDBF_WRITE; else - written += ulRead; + written += nRead; } while( errCode == HB_SUCCESS && written < size ); @@ -2989,25 +2991,25 @@ static HB_ERRCODE hb_fptWriteMemo( FPTAREAP pArea, HB_ULONG ulBlock, HB_ULONG ul /* TODO: uiMode => BLOB_IMPORT_COMPRESS, BLOB_IMPORT_ENCRYPT */ if( pFile != NULL ) { - HB_ULONG ulWritten = 0, ulRead, ulBufSize = HB_MIN( ( 1 << 16 ), ulLen ); - HB_BYTE * bBuffer = ( HB_BYTE * ) hb_xgrab( ulBufSize ); + HB_SIZE nWritten = 0, nBufSize = HB_MIN( ( 1 << 16 ), ulLen ); + HB_BYTE * bBuffer = ( HB_BYTE * ) hb_xgrab( nBufSize ); do { - ulRead = ( HB_ULONGCAST ) hb_fileRead( pFile, bBuffer, - HB_MIN( ulBufSize, ulLen - ulWritten ), -1 ); - if( ulRead == 0 ) + HB_SIZE nRead = hb_fileRead( pFile, bBuffer, + HB_MIN( nBufSize, ulLen - nWritten ), -1 ); + if( nRead == 0 || nRead == ( HB_SIZE ) FS_ERROR ) errCode = EDBF_READ; else if( hb_fileWriteAt( pArea->pMemoFile, bBuffer, - ulRead, fOffset ) != ulRead ) + nRead, fOffset ) != nRead ) errCode = EDBF_WRITE; else { - ulWritten += ulRead; - fOffset += ulRead; + nWritten += nRead; + fOffset += nRead; } } - while( errCode == HB_SUCCESS && ulWritten < ulLen ); + while( errCode == HB_SUCCESS && nWritten < ulLen ); hb_xfree( bBuffer ); } @@ -4329,8 +4331,9 @@ static HB_ERRCODE hb_fptOpenMemFile( FPTAREAP pArea, LPDBOPENINFO pOpenInfo ) memset( &fptHeader, 0, sizeof( fptHeader ) ); if( hb_fptFileLockSh( pArea, HB_TRUE ) ) { - if( hb_fileReadAt( pArea->pMemoFile, &fptHeader, - sizeof( FPTHEADER ), 0 ) >= 512 ) + HB_SIZE nRead = hb_fileReadAt( pArea->pMemoFile, &fptHeader, + sizeof( FPTHEADER ), 0 ); + if( nRead >= 512 && nRead != ( HB_SIZE ) FS_ERROR ) { pArea->uiMemoVersion = DB_MEMOVER_STD; if( pArea->bMemoType == DB_MEMO_SMT ) diff --git a/src/rdd/dbfnsx/dbfnsx1.c b/src/rdd/dbfnsx/dbfnsx1.c index bbdea3961c..b1f2141898 100644 --- a/src/rdd/dbfnsx/dbfnsx1.c +++ b/src/rdd/dbfnsx/dbfnsx1.c @@ -1196,7 +1196,7 @@ static HB_BOOL hb_nsxBlockRead( LPNSXINDEX pIndex, HB_ULONG ulBlock, void * buff hb_errInternal( 9103, "hb_nsxBlockRead on not locked index file.", NULL, NULL ); if( hb_fileReadAt( pIndex->pFile, buffer, iSize, - hb_nsxFileOffset( pIndex, ulBlock ) ) != ( HB_ULONG ) iSize ) + hb_nsxFileOffset( pIndex, ulBlock ) ) != ( HB_SIZE ) iSize ) { hb_nsxErrorRT( pIndex->pArea, EG_READ, EDBF_READ, pIndex->IndexName, hb_fsError(), 0, NULL ); @@ -1214,7 +1214,7 @@ static HB_BOOL hb_nsxBlockWrite( LPNSXINDEX pIndex, HB_ULONG ulBlock, const void hb_errInternal( 9102, "hb_nsxBlockWrite on not locked index file.", NULL, NULL ); if( hb_fileWriteAt( pIndex->pFile, buffer, iSize, - hb_nsxFileOffset( pIndex, ulBlock ) ) != ( HB_ULONG ) iSize ) + hb_nsxFileOffset( pIndex, ulBlock ) ) != ( HB_SIZE ) iSize ) { hb_nsxErrorRT( pIndex->pArea, EG_WRITE, EDBF_WRITE, pIndex->IndexName, hb_fsError(), 0, NULL ); @@ -5097,12 +5097,10 @@ static void hb_nsxSortSortPage( LPNSXSORTINFO pSort ) static void hb_nsxSortBufferFlush( LPNSXSORTINFO pSort ) { - HB_SIZE nSize; - if( pSort->ulPagesIO ) { LPNSXINDEX pIndex = pSort->pTag->pIndex; - nSize = ( HB_SIZE ) pSort->ulPagesIO * NSX_PAGELEN; + HB_SIZE nSize = ( HB_SIZE ) pSort->ulPagesIO * NSX_PAGELEN; if( hb_fileWriteAt( pIndex->pFile, pSort->pBuffIO, nSize, hb_nsxFileOffset( pIndex, pSort->ulFirstIO ) ) != nSize ) { diff --git a/src/rdd/delim1.c b/src/rdd/delim1.c index 320bb62a0b..30eaa0c774 100644 --- a/src/rdd/delim1.c +++ b/src/rdd/delim1.c @@ -207,6 +207,8 @@ static int hb_delimNextChar( DELIMAREAP pArea ) pArea->pBuffer + nLeft, pArea->nBufferSize - nLeft, pArea->nBufferStart + nLeft ); + if( pArea->nBufferRead == ( HB_SIZE ) FS_ERROR ) + pArea->nBufferRead = 0; if( pArea->nBufferRead > 0 && pArea->pBuffer[ pArea->nBufferRead + nLeft - 1 ] == '\032' ) pArea->nBufferRead--; diff --git a/src/rdd/hbsix/sxcompr.c b/src/rdd/hbsix/sxcompr.c index 39ae699ef0..b9c2714131 100644 --- a/src/rdd/hbsix/sxcompr.c +++ b/src/rdd/hbsix/sxcompr.c @@ -289,6 +289,8 @@ static int hb_LZSSxRead( PHB_LZSSX_COMPR pCompr ) { pCompr->inBuffRead = hb_fileRead( pCompr->pInput, pCompr->inBuffer, pCompr->inBuffSize, -1 ); + if( pCompr->inBuffRead == ( HB_SIZE ) FS_ERROR ) + pCompr->inBuffRead = 0; pCompr->inBuffPos = 0; if( pCompr->inBuffPos < pCompr->inBuffRead ) return ( HB_UCHAR ) pCompr->inBuffer[ pCompr->inBuffPos++ ]; diff --git a/src/rdd/sdf1.c b/src/rdd/sdf1.c index 152eebee29..a656faf740 100644 --- a/src/rdd/sdf1.c +++ b/src/rdd/sdf1.c @@ -97,12 +97,14 @@ static void hb_sdfClearRecordBuffer( SDFAREAP pArea ) static HB_ERRCODE hb_sdfReadRecord( SDFAREAP pArea ) { HB_USHORT uiRead, uiToRead, uiEolPos; + HB_SIZE nRead; HB_TRACE( HB_TR_DEBUG, ( "hb_sdfReadRecord(%p)", pArea ) ); uiToRead = pArea->uiRecordLen + pArea->uiEolLen + 2; - uiRead = ( HB_USHORT ) hb_fileReadAt( pArea->pFile, pArea->pRecord, uiToRead, - pArea->nRecordOffset ); + nRead = hb_fileReadAt( pArea->pFile, pArea->pRecord, uiToRead, + pArea->nRecordOffset ); + uiRead = ( HB_USHORT ) ( nRead == ( HB_SIZE ) FS_ERROR ? 0 : nRead ); if( uiRead > 0 && uiRead < uiToRead && pArea->pRecord[ uiRead - 1 ] == '\032' ) --uiRead; @@ -166,8 +168,9 @@ static HB_ERRCODE hb_sdfNextRecord( SDFAREAP pArea ) do { - uiRead = ( HB_USHORT ) hb_fileReadAt( pArea->pFile, pArea->pRecord + uiRest, - uiToRead - uiRest, ulOffset + uiRest ) + uiRest; + HB_SIZE nRead = hb_fileReadAt( pArea->pFile, pArea->pRecord + uiRest, + uiToRead - uiRest, ulOffset + uiRest ) + uiRest; + uiRead = ( HB_USHORT ) ( nRead == ( HB_SIZE ) FS_ERROR ? 0 : nRead ); if( uiRead > 0 && uiRead < uiToRead && pArea->pRecord[ uiRead - 1 ] == '\032' ) --uiRead; diff --git a/src/rtl/copyfile.c b/src/rtl/copyfile.c index 305b296dbb..3124458c3c 100644 --- a/src/rtl/copyfile.c +++ b/src/rtl/copyfile.c @@ -124,13 +124,16 @@ static HB_BOOL hb_copyfile( const char * pszSource, const char * pszDest ) buffer = ( HB_UCHAR * ) hb_xgrab( BUFFER_SIZE ); bRetVal = HB_TRUE; - while( ( nRead = hb_fileRead( pSource, buffer, BUFFER_SIZE, -1 ) ) != 0 ) + while( ( nRead = hb_fileRead( pSource, buffer, BUFFER_SIZE, -1 ) ) != 0 && + nRead != ( HB_SIZE ) FS_ERROR ) { HB_SIZE nWritten = 0; while( nWritten < nRead ) { - nWritten += hb_fileWrite( pDest, buffer + nWritten, nRead - nWritten, -1 ); + HB_SIZE nDone = hb_fileWrite( pDest, buffer + nWritten, nRead - nWritten, -1 ); + if( nDone > 0 ) + nWritten += nDone; if( nWritten < nRead ) { pError = hb_errRT_FileError( pError, NULL, EG_WRITE, 2016, pszDest ); diff --git a/src/rtl/filesys.c b/src/rtl/filesys.c index 2d14eb42c4..384e1895fe 100644 --- a/src/rtl/filesys.c +++ b/src/rtl/filesys.c @@ -942,7 +942,7 @@ HB_SIZE hb_fsPipeIsData( HB_FHANDLE hPipeHandle, HB_SIZE nBufferSize, hb_vmRequestQuery() == 0 ); if( ! fResult ) - nToRead = ( HB_SIZE ) -1; + nToRead = ( HB_SIZE ) FS_ERROR; else if( dwAvail > 0 ) nToRead = ( ( HB_SIZE ) dwAvail < nBufferSize ) ? dwAvail : nBufferSize; } @@ -972,7 +972,7 @@ HB_SIZE hb_fsPipeIsData( HB_FHANDLE hPipeHandle, HB_SIZE nBufferSize, hb_vmRequestQuery() == 0 ); if( ! fResult ) - nToRead = ( HB_SIZE ) -1; + nToRead = ( HB_SIZE ) FS_ERROR; else if( avail.cbpipe > 0 ) nToRead = ( ( HB_SIZE ) avail.cbpipe < nBufferSize ) ? avail.cbpipe : nBufferSize; @@ -1055,11 +1055,11 @@ HB_SIZE hb_fsPipeRead( HB_FHANDLE hPipeHandle, void * buffer, HB_SIZE nSize, HB_TRACE( HB_TR_DEBUG, ( "hb_fsPipeRead(%p,%p,%" HB_PFS "u,%" PFHL "d)", ( void * ) ( HB_PTRDIFF ) hPipeHandle, buffer, nSize, nTimeOut ) ); nRead = hb_fsPipeIsData( hPipeHandle, nSize, nTimeOut ); - if( nRead != ( HB_SIZE ) -1 && nRead > 0 ) + if( nRead != ( HB_SIZE ) FS_ERROR && nRead > 0 ) { nRead = hb_fsReadLarge( hPipeHandle, buffer, nRead ); if( nRead == 0 ) - nRead = ( HB_SIZE ) -1; + nRead = ( HB_SIZE ) FS_ERROR; } return nRead; @@ -1098,7 +1098,7 @@ HB_SIZE hb_fsPipeWrite( HB_FHANDLE hPipeHandle, const void * buffer, HB_SIZE nSi hb_releaseCPU(); fResult = WriteFile( hPipe, buffer, ( DWORD ) nSize, &dwWritten, NULL ) != 0; - nWritten = fResult ? ( HB_SIZE ) dwWritten : ( HB_SIZE ) -1; + nWritten = fResult ? ( HB_SIZE ) dwWritten : ( HB_SIZE ) FS_ERROR; hb_fsSetIOError( fResult, 0 ); } while( fResult && nWritten == 0 && @@ -1112,7 +1112,7 @@ HB_SIZE hb_fsPipeWrite( HB_FHANDLE hPipeHandle, const void * buffer, HB_SIZE nSi else { hb_fsSetIOError( HB_FALSE, 0 ); - nWritten = ( HB_SIZE ) -1; + nWritten = ( HB_SIZE ) FS_ERROR; } } #elif defined( HB_OS_OS2 ) @@ -1136,7 +1136,7 @@ HB_SIZE hb_fsPipeWrite( HB_FHANDLE hPipeHandle, const void * buffer, HB_SIZE nSi fResult = DosWrite( ( HPIPE ) hPipeHandle, ( PVOID ) buffer, ( ULONG ) nSize, &cbActual ) == NO_ERROR; - nWritten = fResult ? ( HB_SIZE ) cbActual : ( HB_SIZE ) -1; + nWritten = fResult ? ( HB_SIZE ) cbActual : ( HB_SIZE ) FS_ERROR; hb_fsSetIOError( fResult, 0 ); } while( fResult && nWritten == 0 && @@ -1150,7 +1150,7 @@ HB_SIZE hb_fsPipeWrite( HB_FHANDLE hPipeHandle, const void * buffer, HB_SIZE nSi else { hb_fsSetIOError( HB_FALSE, 0 ); - nWritten = ( HB_SIZE ) -1; + nWritten = ( HB_SIZE ) FS_ERROR; } } #elif defined( HB_OS_UNIX ) && ! defined( HB_OS_SYMBIAN ) @@ -1216,7 +1216,7 @@ HB_SIZE hb_fsPipeWrite( HB_FHANDLE hPipeHandle, const void * buffer, HB_SIZE nSi if( iResult == -1 ) { hb_fsSetIOError( HB_FALSE, 0 ); - nWritten = ( HB_SIZE ) -1; + nWritten = ( HB_SIZE ) FS_ERROR; } else nWritten = hb_fsWriteLarge( hPipeHandle, buffer, nSize ); diff --git a/src/rtl/fscopy.c b/src/rtl/fscopy.c index 94bceb642d..5190b8c300 100644 --- a/src/rtl/fscopy.c +++ b/src/rtl/fscopy.c @@ -72,7 +72,8 @@ HB_BOOL hb_fsCopy( const char * pszSource, const char * pszDest ) for( ;; ) { - if( ( nBytesRead = hb_fileRead( pSrcFile, pbyBuffer, HB_FSCOPY_BUFFERSIZE, -1 ) ) > 0 ) + if( ( nBytesRead = hb_fileRead( pSrcFile, pbyBuffer, HB_FSCOPY_BUFFERSIZE, -1 ) ) > 0 && + nBytesRead != ( HB_SIZE ) FS_ERROR ) { if( nBytesRead != hb_fileWrite( pDstFile, pbyBuffer, nBytesRead, -1 ) ) { @@ -84,7 +85,7 @@ HB_BOOL hb_fsCopy( const char * pszSource, const char * pszDest ) else { errCode = hb_fsError(); - bRetVal = ( errCode == 0 ); + bRetVal = ( errCode == 0 && nBytesRead != ( HB_SIZE ) FS_ERROR ); break; } } diff --git a/src/rtl/hbmd5.c b/src/rtl/hbmd5.c index 7d5fd5370a..2c5184883d 100644 --- a/src/rtl/hbmd5.c +++ b/src/rtl/hbmd5.c @@ -309,6 +309,8 @@ HB_BOOL hb_md5file( const char * pszFileName, char * digest ) hb_md5accinit( md5.accum ); n = hb_fileRead( pFile, readbuf, MAX_FBUF, -1 ); + if( n == ( HB_SIZE ) FS_ERROR ) + n = 0; flen += n; while( n == MAX_FBUF ) { @@ -318,6 +320,8 @@ HB_BOOL hb_md5file( const char * pszFileName, char * digest ) hb_md5go( &md5 ); } n = hb_fileRead( pFile, readbuf, MAX_FBUF, -1 ); + if( n == ( HB_SIZE ) FS_ERROR ) + n = 0; flen += n; } hb_fileClose( pFile ); diff --git a/src/rtl/memofile.c b/src/rtl/memofile.c index 1c22895820..468a3a6fa2 100644 --- a/src/rtl/memofile.c +++ b/src/rtl/memofile.c @@ -74,6 +74,8 @@ static void hb_memoread( HB_BOOL bHandleEOF ) char * pbyBuffer = ( char * ) hb_xgrab( nSize + 1 ); nSize = hb_fileReadAt( pFile, pbyBuffer, nSize, 0 ); + if( nSize == ( HB_SIZE ) FS_ERROR ) + nSize = 0; /* Don't read the file terminating EOF character */ if( bHandleEOF && nSize > 0 ) diff --git a/src/rtl/philes.c b/src/rtl/philes.c index 3b18cf25d5..bff5ebe273 100644 --- a/src/rtl/philes.c +++ b/src/rtl/philes.c @@ -549,8 +549,8 @@ HB_FUNC( HB_PREAD ) uiError = hb_fsError(); } - if( nSize == ( HB_SIZE ) -1 ) - hb_retni( -1 ); + if( nSize == ( HB_SIZE ) FS_ERROR ) + hb_retni( FS_ERROR ); else hb_retns( nSize ); hb_fsSetFError( uiError ); @@ -576,8 +576,12 @@ HB_FUNC( HB_PWRITE ) if( nWrite < nLen ) nLen = nWrite; } - hb_retns( hb_fsPipeWrite( hPipe, data, nLen, hb_parnint( 4 ) ) ); + nLen = hb_fsPipeWrite( hPipe, data, nLen, hb_parnint( 4 ) ); hb_fsSetFError( hb_fsError() ); + if( nLen == ( HB_SIZE ) FS_ERROR ) + hb_retni( FS_ERROR ); + else + hb_retns( nLen ); } else hb_errRT_BASE_SubstR( EG_ARG, 4001, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS ); diff --git a/src/rtl/vfile.c b/src/rtl/vfile.c index 1f2686591c..b3eadfa985 100644 --- a/src/rtl/vfile.c +++ b/src/rtl/vfile.c @@ -584,8 +584,8 @@ HB_FUNC( HB_VFREAD ) uiError = hb_fsError(); } - if( nRead == ( HB_SIZE ) -1 ) - hb_retni( -1 ); + if( nRead == ( HB_SIZE ) FS_ERROR ) + hb_retni( FS_ERROR ); else hb_retns( nRead ); hb_fsSetFError( uiError ); @@ -610,7 +610,7 @@ HB_FUNC( HB_VFREADLEN ) nRead = hb_fileRead( pFile, buffer, nToRead, hb_parnintdef( 3, -1 ) ); uiError = hb_fsError(); - if( nRead == ( HB_SIZE ) -1 ) + if( nRead == ( HB_SIZE ) FS_ERROR ) nRead = 0; hb_retclen_buffer( buffer, nRead ); } @@ -643,8 +643,8 @@ HB_FUNC( HB_VFWRITE ) nLen = hb_fileWrite( pFile, hb_parc( 2 ), nLen, hb_parnintdef( 4, -1 ) ); - if( nLen == ( HB_SIZE ) -1 ) - hb_retni( -1 ); + if( nLen == ( HB_SIZE ) FS_ERROR ) + hb_retni( FS_ERROR ); else hb_retns( nLen ); uiError = hb_fsError(); @@ -683,8 +683,8 @@ HB_FUNC( HB_VFREADAT ) uiError = hb_fsError(); } - if( nRead == ( HB_SIZE ) -1 ) - hb_retni( -1 ); + if( nRead == ( HB_SIZE ) FS_ERROR ) + hb_retni( FS_ERROR ); else hb_retns( nRead ); hb_fsSetFError( uiError ); @@ -714,8 +714,8 @@ HB_FUNC( HB_VFWRITEAT ) nLen = hb_fileWriteAt( pFile, pszData, nLen, ( HB_FOFFSET ) hb_parnintdef( 4, -1 ) ); - if( nLen == ( HB_SIZE ) -1 ) - hb_retni( -1 ); + if( nLen == ( HB_SIZE ) FS_ERROR ) + hb_retni( FS_ERROR ); else hb_retns( nLen ); uiError = hb_fsError();