From 5467096d41b424b0bea540d87e43b1e167762d03 Mon Sep 17 00:00:00 2001 From: Paul Tucker Date: Sun, 29 Aug 1999 20:12:50 +0000 Subject: [PATCH] *** empty log message *** --- harbour/ChangeLog | 9 ++ harbour/include/filesys.h | 4 +- harbour/source/rtl/filesys.c | 171 ++++++++++++++--------------------- 3 files changed, 79 insertions(+), 105 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index c983623e93..bb513ae96d 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,12 @@ +19990829-15:47 EDT Paul Tucker + * include/filesys.h + * hb_fsDelete and hb_fsRename now return int + * source/rtl/filesys.c + hb_fsDelete(), hb_fsRename + now Clipper compatible (so far, only tested with msvc) + combined _some_ #if posix and msc_ver statements since posix version + works with msvc + 19990829-13:30 EDT Paul Tucker * source/include/set.h rearrange set struct to be in correct order diff --git a/harbour/include/filesys.h b/harbour/include/filesys.h index b5325d91e9..de867c8d31 100644 --- a/harbour/include/filesys.h +++ b/harbour/include/filesys.h @@ -68,7 +68,7 @@ extern void hb_fsCommit ( FHANDLE hFileHandle ); extern FHANDLE hb_fsCreate ( BYTE * pFilename, USHORT uiAttribute ); extern BYTE * hb_fsCurDir ( USHORT uiDrive ); extern BYTE hb_fsCurDrv ( void ); -extern void hb_fsDelete ( BYTE * pFilename ); +extern int hb_fsDelete ( BYTE * pFilename ); extern USHORT hb_fsError ( void ); extern FHANDLE hb_fsExtOpen ( BYTE * pFilename, BYTE * pDefExt, USHORT uiFlags, BYTE * pPaths, PHB_ITEM pError ); @@ -79,7 +79,7 @@ extern BOOL hb_fsMkDir ( BYTE * pDirName ); extern FHANDLE hb_fsOpen ( BYTE * pFilename, USHORT uiFlags ); extern USHORT hb_fsRead ( FHANDLE hFileHandle, BYTE * pBuff, USHORT uiCount ); extern BOOL hb_fsRmDir ( BYTE * pDirName ); -extern void hb_fsRename ( BYTE * pOldName, BYTE * pNewName ); +extern int hb_fsRename ( BYTE * pOldName, BYTE * pNewName ); extern ULONG hb_fsSeek ( FHANDLE hFileHandle, LONG lOffset, USHORT uiMode ); extern USHORT hb_fsWrite ( FHANDLE hFileHandle, BYTE * pBuff, USHORT uiCount ); diff --git a/harbour/source/rtl/filesys.c b/harbour/source/rtl/filesys.c index a8d94406f5..9da710e94e 100644 --- a/harbour/source/rtl/filesys.c +++ b/harbour/source/rtl/filesys.c @@ -264,7 +264,7 @@ FHANDLE hb_fsCreate ( BYTE * pFilename, USHORT uiFlags ) s_uiErrorLast = 0; -#if defined(HAVE_POSIX_IO) +#if defined(HAVE_POSIX_IO) || defined(_MSC_VER) errno = 0; convert_create_flags( uiFlags, &oflag, &pmode ); @@ -279,25 +279,8 @@ FHANDLE hb_fsCreate ( BYTE * pFilename, USHORT uiFlags ) #else - #if defined(_MSC_VER) - - errno = 0; - convert_create_flags( uiFlags, &oflag, &pmode ); - hFileHandle = _open( ( char * ) pFilename, oflag, pmode ); - if( hFileHandle == -1 ) - { - /* This if block is required, because errno will be set - if the file did not exist and had to be created, even - when the create is successful! */ - s_uiErrorLast = errno; - } - - #else - - hFileHandle = FS_ERROR; - s_uiErrorLast = FS_ERROR; - - #endif + hFileHandle = FS_ERROR; + s_uiErrorLast = FS_ERROR; #endif @@ -306,7 +289,7 @@ FHANDLE hb_fsCreate ( BYTE * pFilename, USHORT uiFlags ) void hb_fsClose ( FHANDLE hFileHandle ) { -#if defined(HAVE_POSIX_IO) +#if defined(HAVE_POSIX_IO) || defined(_MSC_VER) errno = 0; close( hFileHandle ); @@ -314,27 +297,21 @@ void hb_fsClose ( FHANDLE hFileHandle ) #else - #if defined(_MSC_VER) - - errno = 0; - _close( hFileHandle ); - s_uiErrorLast = errno; - - #else - - s_uiErrorLast = FS_ERROR; - - #endif + s_uiErrorLast = FS_ERROR; #endif + /* Convert 'Invalid Memory Block' to 'Invalid Handle' */ + if( s_uiErrorLast == 9 ) + s_uiErrorLast = 6; + } USHORT hb_fsRead ( FHANDLE hFileHandle, BYTE * pBuff, USHORT uiCount ) { USHORT uiRead; -#if defined(HAVE_POSIX_IO) +#if defined(HAVE_POSIX_IO) || defined(_MSC_VER) errno = 0; uiRead = read( hFileHandle, pBuff, uiCount ); @@ -344,20 +321,8 @@ USHORT hb_fsRead ( FHANDLE hFileHandle, BYTE * pBuff, USHORT uiCount ) #else - #if defined(_MSC_VER) - - errno = 0; - uiRead = _read( hFileHandle, pBuff, uiCount ); - s_uiErrorLast = errno; - if( uiRead == ( USHORT )-1 ) - uiRead = 0; - - #else - - uiRead = 0; - s_uiErrorLast = FS_ERROR; - - #endif + uiRead = 0; + s_uiErrorLast = FS_ERROR; #endif @@ -368,7 +333,7 @@ USHORT hb_fsWrite ( FHANDLE hFileHandle, BYTE * pBuff, USHORT uiCount ) { USHORT uiWritten; -#if defined(HAVE_POSIX_IO) +#if defined(HAVE_POSIX_IO) || defined(_MSC_VER) errno = 0; uiWritten = write( hFileHandle, pBuff, uiCount ); @@ -378,20 +343,8 @@ USHORT hb_fsWrite ( FHANDLE hFileHandle, BYTE * pBuff, USHORT uiCount ) #else - #if defined(_MSC_VER) - - errno = 0; - uiWritten = _write( hFileHandle, pBuff, uiCount ); - s_uiErrorLast = errno; - if( uiWritten == ( USHORT )-1 ) - uiWritten = 0; - - #else - - uiWritten = 0; - s_uiErrorLast = FS_ERROR; - - #endif + uiWritten = 0; + s_uiErrorLast = FS_ERROR; #endif @@ -400,30 +353,45 @@ USHORT hb_fsWrite ( FHANDLE hFileHandle, BYTE * pBuff, USHORT uiCount ) ULONG hb_fsSeek ( FHANDLE hFileHandle, LONG lOffset, USHORT uiFlags ) { - ULONG ulPos; + ULONG ulPos = -1; + USHORT Flags = convert_seek_flags( uiFlags ); -#if defined(HAVE_POSIX_IO) + if( lOffset < 0 && Flags == SEEK_SET ) + { + /* 'Seek Error' */ + s_uiErrorLast = 25; - errno = 0; - ulPos = lseek( hFileHandle, lOffset, convert_seek_flags( uiFlags ) ); - s_uiErrorLast = errno; + #if defined(HAVE_POSIX_IO) || defined(_MSC_VER) + /* get current offset */ + errno = 0; + ulPos = lseek( hFileHandle, 0, SEEK_CUR ); + if( errno != 0 ) + s_uiErrorLast = errno; + + #endif -#else + } + else + { - #if defined(_MSC_VER) + #if defined(HAVE_POSIX_IO) || defined(_MSC_VER) errno = 0; - ulPos = _lseek( hFileHandle, lOffset, convert_seek_flags( uiFlags ) ); + ulPos = lseek( hFileHandle, lOffset, Flags ); s_uiErrorLast = errno; - #else + #else ulPos = 0; s_uiErrorLast = FS_ERROR; - #endif + #endif -#endif + /* Convert 'Unknown Command' to 'Seek Error' */ + if( s_uiErrorLast == 22 ) + s_uiErrorLast = 25; + + } return ulPos; } @@ -433,12 +401,14 @@ USHORT hb_fsError ( void ) return s_uiErrorLast; } -void hb_fsDelete ( BYTE * pFilename ) +int hb_fsDelete ( BYTE * pFilename ) { + int retval; + #if defined(HAVE_POSIX_IO) errno = 0; - unlink( ( char * ) pFilename ); + retval = unlink( ( char * ) pFilename ); s_uiErrorLast = errno; #else @@ -446,7 +416,7 @@ void hb_fsDelete ( BYTE * pFilename ) #if defined(_MSC_VER) errno = 0; - remove( ( char *) pFilename ); + retval = remove( ( char *) pFilename ); s_uiErrorLast = errno; #else @@ -456,14 +426,17 @@ void hb_fsDelete ( BYTE * pFilename ) #endif #endif + return retval; } -void hb_fsRename ( BYTE * pOldName, BYTE * pNewName ) +int hb_fsRename ( BYTE * pOldName, BYTE * pNewName ) { + int retval = -1; + #if defined(HAVE_POSIX_IO) || defined(_MSC_VER) errno = 0; - rename( ( char * ) pOldName, ( char * ) pNewName ); + retval = rename( ( char * ) pOldName, ( char * ) pNewName ); s_uiErrorLast = errno; #else @@ -471,6 +444,8 @@ void hb_fsRename ( BYTE * pOldName, BYTE * pNewName ) s_uiErrorLast = FS_ERROR; #endif + + return retval; } BOOL hb_fsLock ( FHANDLE hFileHandle, ULONG ulStart, @@ -528,7 +503,7 @@ BOOL hb_fsLock ( FHANDLE hFileHandle, ULONG ulStart, void hb_fsCommit ( FHANDLE hFileHandle ) { -#if defined(HAVE_POSIX_IO) +#if defined(HAVE_POSIX_IO) || defined(_MSC_VER) int dup_handle; @@ -543,25 +518,8 @@ void hb_fsCommit ( FHANDLE hFileHandle ) } #else - #if defined(_MSC_VER) - int dup_handle; - - errno = 0; - dup_handle = _dup( hFileHandle ); - s_uiErrorLast = errno; - - if( dup_handle != -1 ) - { - _close( dup_handle ); - s_uiErrorLast = errno; - } - - #else - - s_uiErrorLast = FS_ERROR; - - #endif + s_uiErrorLast = FS_ERROR; #endif } @@ -821,23 +779,30 @@ HARBOUR HB_FCLOSE( void ) HARBOUR HB_FERASE( void ) { + int retval = -1; + + s_uiErrorLast = 3; + if( ISCHAR( 1 ) ) { - hb_fsDelete( ( BYTE * ) hb_parc( 1 ) ); + retval = hb_fsDelete( ( BYTE * ) hb_parc( 1 ) ); } - hb_retni( s_uiErrorLast ); + hb_retni( retval ); } HARBOUR HB_FRENAME( void ) { + int retval = -1; + + s_uiErrorLast = 2; + if( ISCHAR( 1 ) && ISCHAR( 2 ) ) { - hb_fsRename( ( BYTE * ) hb_parc( 1 ), - ( BYTE * ) hb_parc( 2 ) ); + retval = hb_fsRename( ( BYTE * ) hb_parc( 1 ), + ( BYTE * ) hb_parc( 2 ) ); } - - hb_retni( s_uiErrorLast ); + hb_retni( retval ); } HARBOUR HB_FSEEK( void )