2009-11-16 17:14 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/contrib/hbnetio/netio.h
  * harbour/contrib/hbnetio/netiocli.c
  * harbour/contrib/hbnetio/netiosrv.c
    * changed USHORT to HB_ERRCODE as error code holder
    * use 32bit integers to exchange error codes between server and
      client side
    * pacified warning
This commit is contained in:
Przemyslaw Czerpak
2009-11-16 16:14:58 +00:00
parent 375521715f
commit f8e7f7e02f
4 changed files with 74 additions and 62 deletions

View File

@@ -17,6 +17,15 @@
past entries belonging to author(s): Viktor Szakats.
*/
2009-11-16 17:14 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/contrib/hbnetio/netio.h
* harbour/contrib/hbnetio/netiocli.c
* harbour/contrib/hbnetio/netiosrv.c
* changed USHORT to HB_ERRCODE as error code holder
* use 32bit integers to exchange error codes between server and
client side
* pacified warning
2009-11-16 16:25 UTC+0200 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt)
* harbour/contrib/rddsql/sqlbase.c
* redirected DBINFO() method to SUPER, to make support for basic

View File

@@ -99,16 +99,16 @@
/* { NETIO_DELETE, len[ 2 ]... } + filename[ len ] -> { NETIO_DELETE, ... } */
/* { NETIO_RENAME, len[ 2 ], len2[ 2 ]... } + filename[ len ] + filename[ len2 ] -> { NETIO_RENAME, ... } */
/* { NETIO_OPEN, len[ 2 ], flags[ 2 ], def_ext[], 0, ... } + filename[ len ] -> { NETIO_OPEN, file_no[2], ... } */
/* { NETIO_READ, file_no[2], size[ 4 ], offset[ 8 ], ... } -> { NETIO_READ, read[ 4 ], err[ 2 ], ... } + data[ read ] */
/* { NETIO_WRITE, file_no[2], size[ 4 ], offset[ 8 ], ... } + data[ size ] -> { NETIO_WRITE, written[ 4 ], err[ 2 ], ... } */
/* { NETIO_READ, file_no[2], size[ 4 ], offset[ 8 ], ... } -> { NETIO_READ, read[ 4 ], err[ 4 ], ... } + data[ read ] */
/* { NETIO_WRITE, file_no[2], size[ 4 ], offset[ 8 ], ... } + data[ size ] -> { NETIO_WRITE, written[ 4 ], err[ 4 ], ... } */
/* { NETIO_LOCK, file_no[2], start[ 8 ], len[ 8 ], flags[ 2 ], ... } -> { NETIO_LOCK, ... } */
/* { NETIO_TRUNC, file_no[2], offset[ 8 ], ... } -> { NETIO_TRUNC, ... } */
/* { NETIO_SIZE, file_no[2], ... } -> { NETIO_SIZE, size[ 8 ], err[ 2 ], ... } */
/* { NETIO_SIZE, file_no[2], ... } -> { NETIO_SIZE, size[ 8 ], err[ 4 ], ... } */
/* { NETIO_COMMIT, file_no[2], ... } -> { NETIO_SYNC, ... } */
/* { NETIO_CLOSE, file_no[2], ... } -> { NETIO_CLOSE, ... } */
/* { NETIO_UNLOCK, file_no[2], start[ 8 ], len[ 8 ], flags[ 2 ], ... } -> { NETIO_SYNC, ... } */
/* { NETIO_SYNC, ... } -> NULL */
/* alternative answer for all messages: -> { NETIO_ERROR, err[ 2 ], ... } */
/* alternative answer for all messages: -> { NETIO_ERROR, err[ 4 ], ... } */
/* netio errors */
#define NETIO_ERR_UNKNOWN_COMMAND 0xff01

View File

@@ -186,7 +186,7 @@ static BOOL s_fileSendMsg( PHB_CONCLI conn, BYTE * msgbuf,
if( iResult != NETIO_SYNC )
{
if( iResult == NETIO_ERROR )
hb_fsSetError( HB_GET_LE_UINT16( &msgbuf[ 4 ] ) );
hb_fsSetError( ( HB_ERRCODE ) HB_GET_LE_UINT32( &msgbuf[ 4 ] ) );
else if( iResult == iMsg )
fResult = TRUE;
break;
@@ -635,7 +635,7 @@ static PHB_FILE s_fileOpen( const char * pFilename, const char * pDefExt,
if( pFile == NULL )
{
hb_errPutOsCode( pError, hb_fsError() );
hb_errPutGenCode( pError, ( USHORT ) ( ( uiExFlags & FXO_TRUNCATE ) ? EG_CREATE : EG_OPEN ) );
hb_errPutGenCode( pError, ( HB_ERRCODE ) ( ( uiExFlags & FXO_TRUNCATE ) ? EG_CREATE : EG_OPEN ) );
}
}
@@ -673,7 +673,9 @@ static BOOL s_fileLock( PHB_FILE pFile, HB_FOFFSET ulStart, HB_FOFFSET ulLen,
HB_PUT_LE_UINT64( &msgbuf[ 6 ], ulStart );
HB_PUT_LE_UINT64( &msgbuf[ 14 ], ulLen );
HB_PUT_LE_UINT16( &msgbuf[ 22 ], ( USHORT ) iType );
#if NETIO_MSGLEN > 24
memset( msgbuf + 24, '\0', sizeof( msgbuf ) - 24 );
#endif
fResult = s_fileSendMsg( pFile->conn, msgbuf, NULL, 0, !fUnLock );
s_fileConUnlock( pFile->conn );
@@ -706,7 +708,7 @@ static ULONG s_fileReadAt( PHB_FILE pFile, void * data, ULONG ulSize,
ulResult = ulSize;
ulResult = s_fileRecvAll( pFile->conn, data, ulResult );
}
hb_fsSetError( HB_GET_LE_UINT16( &msgbuf[ 8 ] ) );
hb_fsSetError( ( HB_ERRCODE ) HB_GET_LE_UINT32( &msgbuf[ 8 ] ) );
}
s_fileConUnlock( pFile->conn );
}
@@ -732,7 +734,7 @@ static ULONG s_fileWriteAt( PHB_FILE pFile, const void * data, ULONG ulSize,
if( s_fileSendMsg( pFile->conn, msgbuf, data, ulSize, TRUE ) )
{
ulResult = HB_GET_LE_UINT32( &msgbuf[ 4 ] );
hb_fsSetError( HB_GET_LE_UINT16( &msgbuf[ 8 ] ) );
hb_fsSetError( ( HB_ERRCODE ) HB_GET_LE_UINT32( &msgbuf[ 8 ] ) );
}
s_fileConUnlock( pFile->conn );
}
@@ -775,7 +777,7 @@ static HB_FOFFSET s_fileSize( PHB_FILE pFile )
if( s_fileSendMsg( pFile->conn, msgbuf, NULL, 0, TRUE ) )
{
llOffset = HB_GET_LE_UINT64( &msgbuf[ 4 ] );
hb_fsSetError( HB_GET_LE_UINT16( &msgbuf[ 12 ] ) );
hb_fsSetError( ( HB_ERRCODE ) HB_GET_LE_UINT32( &msgbuf[ 12 ] ) );
}
s_fileConUnlock( pFile->conn );
}

View File

@@ -145,12 +145,12 @@ static const char * s_consrvFilePath( char * pszFileName, PHB_CONSRV conn )
return pszFileName;
}
static int s_srvFsError( void )
static HB_ERRCODE s_srvFsError( void )
{
int iError = hb_fsError();
if( iError == 0 )
iError = NETIO_ERR_FILE_IO;
return iError;
HB_ERRCODE errCode = hb_fsError();
if( errCode == 0 )
errCode = NETIO_ERR_FILE_IO;
return errCode;
}
static int s_srvFileNew( PHB_CONSRV conn, PHB_FILE pFile )
@@ -504,9 +504,10 @@ HB_FUNC( NETIO_SERVER )
{
BYTE msgbuf[ NETIO_MSGLEN ], buffer[ 2048 ], * ptr = NULL, * msg;
BOOL fNoAnswer = FALSE;
HB_ERRCODE errCode = 0, errFsCode;
long len = 0, size, size2;
int iError = 0, iFileNo;
USHORT uiFalgs, uiFsError;
int iFileNo;
USHORT uiFalgs;
char * szExt;
PHB_FILE pFile;
HB_FOFFSET llOffset, llSize;
@@ -521,22 +522,22 @@ HB_FUNC( NETIO_SERVER )
case NETIO_EXISTS:
size = HB_GET_LE_UINT16( &msgbuf[ 4 ] );
if( size <= 0 )
iError = NETIO_ERR_WRONG_PARAM;
errCode = NETIO_ERR_WRONG_PARAM;
else
{
if( size + conn->rootPathLen >= ( long ) sizeof( buffer ) )
ptr = msg = ( BYTE * ) hb_xgrab( size + conn->rootPathLen + 1 );
msg[ size ] = '\0';
if( s_srvRecvAll( conn, msg, size ) != size )
iError = NETIO_ERR_READ;
errCode = NETIO_ERR_READ;
else
{
const char * szFile = s_consrvFilePath( ( char * ) msg, conn );
if( !szFile )
iError = NETIO_ERR_WRONG_FILE_PATH;
errCode = NETIO_ERR_WRONG_FILE_PATH;
else if( !hb_fileExists( szFile, NULL ) )
iError = s_srvFsError();
errCode = s_srvFsError();
else
{
HB_PUT_LE_UINT32( &msg[ 0 ], NETIO_EXISTS );
@@ -549,22 +550,22 @@ HB_FUNC( NETIO_SERVER )
case NETIO_DELETE:
size = HB_GET_LE_UINT16( &msgbuf[ 4 ] );
if( size <= 0 )
iError = NETIO_ERR_WRONG_PARAM;
errCode = NETIO_ERR_WRONG_PARAM;
else
{
if( size + conn->rootPathLen >= ( long ) sizeof( buffer ) )
ptr = msg = ( BYTE * ) hb_xgrab( size + conn->rootPathLen + 1 );
msg[ size ] = '\0';
if( s_srvRecvAll( conn, msg, size ) != size )
iError = NETIO_ERR_READ;
errCode = NETIO_ERR_READ;
else
{
const char * szFile = s_consrvFilePath( ( char * ) msg, conn );
if( !szFile )
iError = NETIO_ERR_WRONG_FILE_PATH;
errCode = NETIO_ERR_WRONG_FILE_PATH;
else if( !hb_fileDelete( szFile ) )
iError = s_srvFsError();
errCode = s_srvFsError();
else
{
HB_PUT_LE_UINT32( &msg[ 0 ], NETIO_DELETE );
@@ -578,14 +579,14 @@ HB_FUNC( NETIO_SERVER )
size = HB_GET_LE_UINT16( &msgbuf[ 4 ] );
size2 = HB_GET_LE_UINT16( &msgbuf[ 6 ] );
if( size <= 0 || size2 <= 0 )
iError = NETIO_ERR_WRONG_PARAM;
errCode = NETIO_ERR_WRONG_PARAM;
else
{
if( HB_MAX( size, size2 ) + conn->rootPathLen >= ( long ) sizeof( buffer ) )
ptr = msg = ( BYTE * ) hb_xgrab( HB_MAX( size, size2 ) + conn->rootPathLen + 1 );
msg[ size ] = '\0';
if( s_srvRecvAll( conn, msg, size ) != size )
iError = NETIO_ERR_READ;
errCode = NETIO_ERR_READ;
else
{
char * szOldName = NULL;
@@ -596,16 +597,16 @@ HB_FUNC( NETIO_SERVER )
msg[ size2 ] = '\0';
if( s_srvRecvAll( conn, msg, size2 ) != size2 )
iError = NETIO_ERR_READ;
errCode = NETIO_ERR_READ;
else if( !szOldName )
iError = NETIO_ERR_WRONG_FILE_PATH;
errCode = NETIO_ERR_WRONG_FILE_PATH;
else
{
szFile = s_consrvFilePath( ( char * ) msg, conn );
if( !szFile )
iError = NETIO_ERR_WRONG_FILE_PATH;
errCode = NETIO_ERR_WRONG_FILE_PATH;
else if( !hb_fileRename( szOldName, szFile ) )
iError = s_srvFsError();
errCode = s_srvFsError();
else
{
HB_PUT_LE_UINT32( &msg[ 0 ], NETIO_RENAME );
@@ -624,33 +625,33 @@ HB_FUNC( NETIO_SERVER )
NETIO_MSGLEN - 8 ) : NULL;
size = HB_GET_LE_UINT16( &msgbuf[ 4 ] );
if( size <= 0 )
iError = NETIO_ERR_WRONG_PARAM;
errCode = NETIO_ERR_WRONG_PARAM;
else
{
if( size + conn->rootPathLen >= ( long ) sizeof( buffer ) )
ptr = msg = ( BYTE * ) hb_xgrab( size + conn->rootPathLen + 1 );
msg[ size ] = '\0';
if( s_srvRecvAll( conn, msg, size ) != size )
iError = NETIO_ERR_READ;
errCode = NETIO_ERR_READ;
else if( conn->filesCount >= NETIO_FILES_MAX )
iError = NETIO_ERR_FILES_MAX;
errCode = NETIO_ERR_FILES_MAX;
else
{
const char * szFile = s_consrvFilePath( ( char * ) msg, conn );
if( !szFile )
iError = NETIO_ERR_WRONG_FILE_PATH;
errCode = NETIO_ERR_WRONG_FILE_PATH;
else
{
pFile = hb_fileExtOpen( szFile, szExt, uiFalgs, NULL, NULL );
if( !pFile )
iError = s_srvFsError();
errCode = s_srvFsError();
else
{
iFileNo = s_srvFileNew( conn, pFile );
if( iFileNo < 0 )
{
iError = NETIO_ERR_FILES_MAX;
errCode = NETIO_ERR_FILES_MAX;
hb_fileClose( pFile );
}
else
@@ -672,22 +673,22 @@ HB_FUNC( NETIO_SERVER )
size = HB_GET_LE_UINT32( &msgbuf[ 6 ] );
llOffset = HB_GET_LE_INT64( &msgbuf[ 10 ] );
if( size < 0 )
iError = NETIO_ERR_WRONG_PARAM;
errCode = NETIO_ERR_WRONG_PARAM;
else
{
if( size >= ( long ) ( sizeof( buffer ) - NETIO_MSGLEN ) )
ptr = msg = ( BYTE * ) hb_xgrab( size + NETIO_MSGLEN );
pFile = s_srvFileGet( conn, iFileNo );
if( pFile == NULL )
iError = NETIO_ERR_WRONG_FILE_HANDLE;
errCode = NETIO_ERR_WRONG_FILE_HANDLE;
else
{
len = hb_fileReadAt( pFile, msg + NETIO_MSGLEN, size, llOffset );
uiFsError = hb_fsError();
errFsCode = hb_fsError();
HB_PUT_LE_UINT32( &msg[ 0 ], NETIO_READ );
HB_PUT_LE_UINT32( &msg[ 4 ], len );
HB_PUT_LE_UINT32( &msg[ 8 ], uiFsError );
memset( msg + 10, '\0', NETIO_MSGLEN - 10 );
HB_PUT_LE_UINT32( &msg[ 8 ], errFsCode );
memset( msg + 12, '\0', NETIO_MSGLEN - 12 );
}
}
break;
@@ -697,26 +698,26 @@ HB_FUNC( NETIO_SERVER )
size = HB_GET_LE_UINT32( &msgbuf[ 6 ] );
llOffset = HB_GET_LE_INT64( &msgbuf[ 10 ] );
if( size < 0 )
iError = NETIO_ERR_WRONG_PARAM;
errCode = NETIO_ERR_WRONG_PARAM;
else
{
if( size >= ( long ) sizeof( buffer ) )
ptr = msg = ( BYTE * ) hb_xgrab( size );
if( s_srvRecvAll( conn, msg, size ) != size )
iError = NETIO_ERR_READ;
errCode = NETIO_ERR_READ;
else
{
pFile = s_srvFileGet( conn, iFileNo );
if( pFile == NULL )
iError = NETIO_ERR_WRONG_FILE_HANDLE;
errCode = NETIO_ERR_WRONG_FILE_HANDLE;
else
{
size = hb_fileWriteAt( pFile, msg, size, llOffset );
uiFsError = hb_fsError();
errFsCode = hb_fsError();
HB_PUT_LE_UINT32( &msg[ 0 ], NETIO_WRITE );
HB_PUT_LE_UINT32( &msg[ 4 ], size );
HB_PUT_LE_UINT32( &msg[ 8 ], uiFsError );
memset( msg + 10, '\0', NETIO_MSGLEN - 10 );
HB_PUT_LE_UINT32( &msg[ 8 ], errFsCode );
memset( msg + 12, '\0', NETIO_MSGLEN - 12 );
}
}
}
@@ -731,9 +732,9 @@ HB_FUNC( NETIO_SERVER )
uiFalgs = HB_GET_LE_UINT16( &msgbuf[ 22 ] );
pFile = s_srvFileGet( conn, iFileNo );
if( pFile == NULL )
iError = NETIO_ERR_WRONG_FILE_HANDLE;
errCode = NETIO_ERR_WRONG_FILE_HANDLE;
else if( !hb_fileLock( pFile, llOffset, llSize, uiFalgs ) )
iError = s_srvFsError();
errCode = s_srvFsError();
else if( !fNoAnswer )
{
UINT32 uiMsg = HB_GET_LE_UINT32( msgbuf );
@@ -747,9 +748,9 @@ HB_FUNC( NETIO_SERVER )
llOffset = HB_GET_LE_INT64( &msgbuf[ 6 ] );
pFile = s_srvFileGet( conn, iFileNo );
if( pFile == NULL )
iError = NETIO_ERR_WRONG_FILE_HANDLE;
errCode = NETIO_ERR_WRONG_FILE_HANDLE;
else if( !hb_fileTruncAt( pFile, llOffset ) )
iError = s_srvFsError();
errCode = s_srvFsError();
else
{
HB_PUT_LE_UINT32( &msg[ 0 ], NETIO_TRUNC );
@@ -761,15 +762,15 @@ HB_FUNC( NETIO_SERVER )
iFileNo = HB_GET_LE_UINT16( &msgbuf[ 4 ] );
pFile = s_srvFileGet( conn, iFileNo );
if( pFile == NULL )
iError = NETIO_ERR_WRONG_FILE_HANDLE;
errCode = NETIO_ERR_WRONG_FILE_HANDLE;
else
{
llOffset = hb_fileSize( pFile );
uiFsError = hb_fsError();
errFsCode = hb_fsError();
HB_PUT_LE_UINT32( &msg[ 0 ], NETIO_SIZE );
HB_PUT_LE_UINT64( &msg[ 4 ], llOffset );
HB_PUT_LE_UINT32( &msg[ 12 ], uiFsError );
memset( msg + 14, '\0', NETIO_MSGLEN - 14 );
HB_PUT_LE_UINT32( &msg[ 12 ], errFsCode );
memset( msg + 16, '\0', NETIO_MSGLEN - 16 );
}
break;
@@ -777,7 +778,7 @@ HB_FUNC( NETIO_SERVER )
iFileNo = HB_GET_LE_UINT16( &msgbuf[ 4 ] );
pFile = s_srvFileFree( conn, iFileNo );
if( pFile == NULL )
iError = NETIO_ERR_WRONG_FILE_HANDLE;
errCode = NETIO_ERR_WRONG_FILE_HANDLE;
else
{
hb_fileClose( pFile );
@@ -798,7 +799,7 @@ HB_FUNC( NETIO_SERVER )
continue;
default: /* unkown message */
iError = NETIO_ERR_UNKNOWN_COMMAND;
errCode = NETIO_ERR_UNKNOWN_COMMAND;
break;
}
@@ -808,22 +809,22 @@ HB_FUNC( NETIO_SERVER )
memset( msg + 4, '\0', NETIO_MSGLEN - 4 );
len = NETIO_MSGLEN;
}
else if( iError != 0 )
else if( errCode != 0 )
{
HB_PUT_LE_UINT32( &msg[ 0 ], NETIO_ERROR );
HB_PUT_LE_UINT16( &msg[ 4 ], iError );
memset( msg + 6, '\0', NETIO_MSGLEN - 6 );
HB_PUT_LE_UINT32( &msg[ 4 ], errCode );
memset( msg + 8, '\0', NETIO_MSGLEN - 8 );
len = NETIO_MSGLEN;
}
else
len += NETIO_MSGLEN;
iError = s_srvSendAll( conn, msg, len ) != len;
errCode = s_srvSendAll( conn, msg, len ) != len;
if( ptr )
hb_xfree( ptr );
if( iError )
if( errCode )
break;
}
}