2015-09-17 12:23 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)

* include/hbapicls.h
  * src/vm/classes.c
    * minor modification in variable name

  * src/rtl/filebuf.c
  * src/rtl/fscopy.c
  * src/rtl/fslink.c
  * src/rtl/vfile.c
    * cleaned FError() setting. It should not be changed by C file IO
      functions because they can be activated from RDD code so accessing
      work area field could change the FError() result, i.e. this code
      does not work when FError() is changed by C level IO operations:
         AnyFunc( FSeek( hFile, 0, FS_END ), field->MEMOVAL, FError() )
      Even simple field access may cause file IO operations in RDD code
      when relations are set because records in child area are repositioned
      only when necessary (when user tries to make some operations on this
      area). In the past RDD code was full of constructions like:
         uiSaveError = hb_fsFError();
         // make some IO operations
         hb_fsSetFerror( uiSaveError );
      to eliminate such overhead I separated PRG level FError() from
      C level IOError(). Please keep it.

  * ChangeLog.txt
    ! few typos
This commit is contained in:
Przemysław Czerpak
2015-09-17 12:23:29 +02:00
parent 026408a2bb
commit ee07a735de
7 changed files with 84 additions and 62 deletions

View File

@@ -1209,14 +1209,12 @@ HB_EXPORT HB_FOFFSET hb_fileSizeGet( const char * pszFileName, HB_BOOL bUseDirEn
if( i >= 0 )
{
HB_ERRCODE uiError;
HB_FOFFSET nSize = 0;
if( bUseDirEntry )
{
PHB_ITEM pDir = hb_fileDirectory( pszFileName, "HS" );
uiError = hb_fsError();
if( pDir )
{
PHB_ITEM pEntry = hb_arrayGetItemPtr( pDir, 1 );
@@ -1231,14 +1229,13 @@ HB_EXPORT HB_FOFFSET hb_fileSizeGet( const char * pszFileName, HB_BOOL bUseDirEn
PHB_FILE pFile = hb_fileExtOpen( pszFileName, NULL, FO_READ | FO_COMPAT, NULL, NULL );
if( pFile )
{
HB_ERRCODE uiError;
nSize = hb_fileSize( pFile );
uiError = hb_fsError();
hb_fileClose( pFile );
hb_fsSetError( uiError );
}
else
uiError = hb_fsError();
}
hb_fsSetFError( uiError );
return nSize;
}

View File

@@ -53,13 +53,14 @@
HB_BOOL hb_fsCopy( const char * pszSource, const char * pszDest )
{
HB_ERRCODE errCode;
HB_BOOL bRetVal;
HB_BOOL fResult = HB_FALSE;
PHB_FILE pSrcFile;
PHB_FILE pDstFile;
if( ( pSrcFile = hb_fileExtOpen( pszSource, NULL, FO_READ | FO_SHARED | FXO_SHARELOCK, NULL, NULL ) ) != NULL )
{
HB_ERRCODE errCode = 0;
if( ( pDstFile = hb_fileExtOpen( pszDest, NULL, FXO_TRUNCATE | FO_READWRITE | FO_EXCLUSIVE | FXO_SHARELOCK, NULL, NULL ) ) != NULL )
{
HB_SIZE nBytesRead;
@@ -73,14 +74,13 @@ HB_BOOL hb_fsCopy( const char * pszSource, const char * pszDest )
if( nBytesRead != hb_fileWrite( pDstFile, pbyBuffer, nBytesRead, -1 ) )
{
errCode = hb_fsError();
bRetVal = HB_FALSE;
break;
}
}
else
{
errCode = hb_fsError();
bRetVal = ( errCode == 0 && nBytesRead != ( HB_SIZE ) FS_ERROR );
fResult = errCode == 0;
break;
}
}
@@ -90,41 +90,39 @@ HB_BOOL hb_fsCopy( const char * pszSource, const char * pszDest )
hb_fileClose( pDstFile );
}
else
{
errCode = hb_fsError();
bRetVal = HB_FALSE;
}
hb_fileClose( pSrcFile );
if( bRetVal )
if( fResult )
{
HB_FATTR ulAttr;
if( hb_fileAttrGet( pszSource, &ulAttr ) )
hb_fileAttrSet( pszDest, ulAttr );
}
}
else
{
errCode = hb_fsError();
bRetVal = HB_FALSE;
hb_fsSetError( errCode );
}
hb_fsSetFError( errCode );
return bRetVal;
return fResult;
}
HB_FUNC( HB_FCOPY )
{
HB_ERRCODE errCode = 2; /* file not found */
HB_BOOL fResult = HB_FALSE;
const char * pszSource = hb_parc( 1 ), * pszDest = hb_parc( 2 );
if( pszSource && pszDest )
hb_retni( hb_fsCopy( pszSource, pszDest ) ? 0 : F_ERROR );
{
fResult = hb_fsCopy( pszSource, pszDest );
errCode = hb_fsError();
}
else
{
hb_fsSetFError( 2 /* file not found */ );
hb_retni( F_ERROR );
}
hb_fsSetFError( errCode );
hb_retni( fResult ? 0 : F_ERROR );
}

View File

@@ -92,7 +92,6 @@ HB_BOOL hb_fsLink( const char * pszExisting, const char * pszNewFile )
fResult = s_pCreateHardLink( lpFileName, lpExistingFileName, NULL ) != 0;
hb_fsSetIOError( fResult, 0 );
hb_fsSetFError( hb_fsError() );
if( lpFileNameFree )
hb_xfree( lpFileNameFree );
@@ -101,7 +100,7 @@ HB_BOOL hb_fsLink( const char * pszExisting, const char * pszNewFile )
}
else
{
hb_fsSetFError( 1 );
hb_fsSetError( 1 );
fResult = HB_FALSE;
}
}
@@ -115,7 +114,6 @@ HB_BOOL hb_fsLink( const char * pszExisting, const char * pszNewFile )
fResult = ( link( pszExisting, pszNewFile ) == 0 );
hb_fsSetIOError( fResult, 0 );
hb_fsSetFError( hb_fsError() );
if( pszExistingFree )
hb_xfree( pszExistingFree );
@@ -124,7 +122,7 @@ HB_BOOL hb_fsLink( const char * pszExisting, const char * pszNewFile )
}
#else
{
hb_fsSetFError( 1 );
hb_fsSetError( 1 );
fResult = HB_FALSE;
}
#endif
@@ -133,7 +131,7 @@ HB_BOOL hb_fsLink( const char * pszExisting, const char * pszNewFile )
}
else
{
hb_fsSetFError( 2 );
hb_fsSetError( 2 );
fResult = HB_FALSE;
}
@@ -182,7 +180,6 @@ HB_BOOL hb_fsLinkSym( const char * pszTarget, const char * pszNewFile )
fResult = s_pCreateSymbolicLink( lpSymlinkFileName, lpTargetFileName, fDir ? SYMBOLIC_LINK_FLAG_DIRECTORY : 0 ) != 0;
hb_fsSetIOError( fResult, 0 );
hb_fsSetFError( hb_fsError() );
if( lpSymlinkFileNameFree )
hb_xfree( lpSymlinkFileNameFree );
@@ -191,7 +188,7 @@ HB_BOOL hb_fsLinkSym( const char * pszTarget, const char * pszNewFile )
}
else
{
hb_fsSetFError( 1 );
hb_fsSetError( 1 );
fResult = HB_FALSE;
}
}
@@ -205,7 +202,6 @@ HB_BOOL hb_fsLinkSym( const char * pszTarget, const char * pszNewFile )
fResult = ( symlink( pszTarget, pszNewFile ) == 0 );
hb_fsSetIOError( fResult, 0 );
hb_fsSetFError( hb_fsError() );
if( pszTargetFree )
hb_xfree( pszTargetFree );
@@ -214,7 +210,7 @@ HB_BOOL hb_fsLinkSym( const char * pszTarget, const char * pszNewFile )
}
#else
{
hb_fsSetFError( 1 );
hb_fsSetError( 1 );
fResult = HB_FALSE;
}
#endif
@@ -223,7 +219,7 @@ HB_BOOL hb_fsLinkSym( const char * pszTarget, const char * pszNewFile )
}
else
{
hb_fsSetFError( 2 );
hb_fsSetError( 2 );
fResult = HB_FALSE;
}
@@ -295,10 +291,7 @@ char * hb_fsLinkRead( const char * pszFile )
NULL );
if( hFile == INVALID_HANDLE_VALUE )
{
hb_fsSetIOError( HB_FALSE, 0 );
hb_fsSetFError( hb_fsError() );
}
else
{
DWORD size;
@@ -313,17 +306,16 @@ char * hb_fsLinkRead( const char * pszFile )
}
hb_fsSetIOError( HB_TRUE, 0 );
hb_fsSetFError( hb_fsError() );
}
else
hb_fsSetFError( 1 );
hb_fsSetError( 9 );
}
if( lpFileNameFree )
hb_xfree( lpFileNameFree );
}
else
hb_fsSetFError( 1 );
hb_fsSetError( 1 );
}
#elif defined( HB_OS_UNIX )
{
@@ -335,7 +327,6 @@ char * hb_fsLinkRead( const char * pszFile )
pszLink = ( char * ) hb_xgrab( HB_PATH_MAX + 1 );
size = readlink( pszFile, pszLink, HB_PATH_MAX );
hb_fsSetIOError( size != ( size_t ) -1, 0 );
hb_fsSetFError( hb_fsError() );
if( size == ( size_t ) -1 )
{
hb_xfree( pszLink );
@@ -353,53 +344,59 @@ char * hb_fsLinkRead( const char * pszFile )
}
#else
{
hb_fsSetFError( 1 );
hb_fsSetError( 1 );
}
#endif
hb_vmLock();
}
else
hb_fsSetFError( 2 );
hb_fsSetError( 2 );
return pszLink;
}
HB_FUNC( HB_FLINK )
{
HB_ERRCODE uiError = 2;
HB_BOOL fResult = HB_FALSE;
const char * pszExisting = hb_parc( 1 ), * pszNewFile = hb_parc( 2 );
if( pszExisting && pszNewFile )
hb_retni( hb_fsLink( pszExisting, pszNewFile ) ? 0 : F_ERROR );
else
{
hb_fsSetFError( 2 );
hb_retni( F_ERROR );
fResult = hb_fsLink( pszExisting, pszNewFile );
uiError = hb_fsError();
}
hb_retni( fResult ? 0 : F_ERROR );
hb_fsSetFError( uiError );
}
HB_FUNC( HB_FLINKSYM )
{
HB_ERRCODE uiError = 2;
HB_BOOL fResult = HB_FALSE;
const char * pszTarget = hb_parc( 1 ), * pszNewFile = hb_parc( 2 );
if( pszTarget && pszNewFile )
hb_retni( hb_fsLinkSym( pszTarget, pszNewFile ) ? 0 : F_ERROR );
else
{
hb_fsSetFError( 2 );
hb_retni( F_ERROR );
fResult = hb_fsLinkSym( pszTarget, pszNewFile );
uiError = hb_fsError();
}
hb_retni( fResult ? 0 : F_ERROR );
hb_fsSetFError( uiError );
}
HB_FUNC( HB_FLINKREAD )
{
HB_ERRCODE uiError = 2;
char * pszResult = NULL;
const char * pszFile = hb_parc( 1 );
if( pszFile )
hb_retc_buffer( hb_fsLinkRead( pszFile ) );
else
{
hb_fsSetFError( 2 );
hb_retc_null();
pszResult = hb_fsLinkRead( pszFile );
uiError = hb_fsError();
}
hb_retc_buffer( pszResult );
hb_fsSetFError( uiError );
}

View File

@@ -767,7 +767,10 @@ HB_FUNC( HB_VFSIZE )
const char * pszFile = hb_parc( 1 );
if( pszFile )
{
hb_retnint( hb_fileSizeGet( pszFile, hb_parldef( 2, 1 ) ) );
hb_fsSetFError( hb_fsError() );
}
else
{
PHB_FILE pFile = hb_fileParam( 1 );

View File

@@ -1572,15 +1572,15 @@ HB_SIZE hb_clsGetVarIndex( HB_USHORT uiClass, PHB_DYNS pVarSym )
return 0;
}
HB_USHORT hb_clsFindClass( const char * szClass, const char * szFunc )
HB_USHORT hb_clsFindClass( const char * szClass, const char * szClassFunc )
{
HB_USHORT uiClass;
for( uiClass = 1; uiClass <= s_uiClasses; uiClass++ )
{
if( strcmp( szClass, s_pClasses[ uiClass ]->szName ) == 0 &&
( ! szFunc || ( ! s_pClasses[ uiClass ]->pClassFuncSym ? ! *szFunc :
strcmp( szFunc, s_pClasses[ uiClass ]->pClassFuncSym->szName ) == 0 ) ) )
( ! szClassFunc || ( ! s_pClasses[ uiClass ]->pClassFuncSym ? ! *szClassFunc :
strcmp( szClassFunc, s_pClasses[ uiClass ]->pClassFuncSym->szName ) == 0 ) ) )
{
return uiClass;
}