2008-09-15 04:33 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/bin/pack_src.sh
    * added file list to archive so it's possible to recreate it later without SVN data

  * harbour/common.mak
  * harbour/make_b32.mak
  * harbour/make_gcc.mak
    + added HBVMMT library for default builds
      BCC version not tested - please test.

  * harbour/source/vm/hvm.c
    * moved language and code page setting before class and error initialization

  * harbour/source/rtl/fserror.c
  * harbour/source/rtl/fstemp.c
  * harbour/source/rtl/fssize.c
  * harbour/source/rtl/hbffind.c
  * harbour/source/rtl/filesys.c
    ! fixed overloading FS error codes by other operations, f.e. accessing
      TLS data by OS API function call
This commit is contained in:
Przemyslaw Czerpak
2008-09-15 02:34:44 +00:00
parent 82ac6e7cc6
commit 26623b9f34
11 changed files with 183 additions and 93 deletions

View File

@@ -8,6 +8,27 @@
2008-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org)
*/
2008-09-15 04:33 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/bin/pack_src.sh
* added file list to archive so it's possible to recreate it later without SVN data
* harbour/common.mak
* harbour/make_b32.mak
* harbour/make_gcc.mak
+ added HBVMMT library for default builds
BCC version not tested - please test.
* harbour/source/vm/hvm.c
* moved language and code page setting before class and error initialization
* harbour/source/rtl/fserror.c
* harbour/source/rtl/fstemp.c
* harbour/source/rtl/fssize.c
* harbour/source/rtl/hbffind.c
* harbour/source/rtl/filesys.c
! fixed overloading FS error codes by other operations, f.e. accessing
TLS data by OS API function call
2008-09-15 01:00 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* source/common/hbverdsp.c
* Undone prev change.

View File

@@ -67,16 +67,21 @@ hb_collect_all_svn()
done
}
hb_rmflst="no"
hb_flst="bin/hb_flst.tmp"
#format=`cat $hb_rootdir/.svn/format`
if [ "$format" = 4 ] || [ "$format" = 8 ]; then
(cd "$hb_rootdir";hb_collect_all) > "$hb_rootdir/$hb_flst"
else
(cd "$hb_rootdir";hb_collect_all_svn) > "$hb_rootdir/$hb_flst"
if [ -d "$hb_rootdir/.svn" ] || [ ! -r "$hb_rootdir/$hb_flst" ]; then
hb_rmflst="yes"
#format=`cat $hb_rootdir/.svn/format`
if [ "$format" = 4 ] || [ "$format" = 8 ]; then
(cd "$hb_rootdir";hb_collect_all) > "$hb_rootdir/$hb_flst"
else
(cd "$hb_rootdir";hb_collect_all_svn) > "$hb_rootdir/$hb_flst"
fi
echo "$hb_flst" >> "$hb_rootdir/$hb_flst"
fi
if [ "$hb_archbin" = "zip" ]; then
(cd "$hb_rootdir";$hb_archbin -r -q $hb_filename . "-i@$hb_flst")
else
(cd "$hb_rootdir";$hb_archbin $hb_archopt $hb_filename --files-from "$hb_flst")
fi
rm -fR "$hb_rootdir/$hb_flst"
[ "$hb_rmflst" != "yes" ] || rm -fR "$hb_rootdir/$hb_flst"

View File

@@ -94,6 +94,8 @@ BIN_DIR = bin\$(HB_CC_NAME)
OBJ_DIR = obj\$(HB_CC_NAME)
LIB_DIR = lib\$(HB_CC_NAME)
MT_OBJ_DIR = obj\$(HB_CC_NAME)_mt
DLL_ROOTDIR = obj\dll
DLL_OBJ_DIR = $(DLL_ROOTDIR)\$(HB_CC_NAME)
@@ -103,6 +105,8 @@ HB_DEST_DIRS = \
$(OBJ_DIR) \
$(LIB_DIR) \
\
$(MT_OBJ_DIR) \
\
$(DLL_ROOTDIR) \
$(DLL_OBJ_DIR)
@@ -211,6 +215,7 @@ COMMON_LIB = $(LIB_DIR)\$(LIBPREF)hbcommon$(LIBEXT)
COMPILER_LIB = $(LIB_DIR)\$(LIBPREF)hbcplr$(LIBEXT)
PP_LIB = $(LIB_DIR)\$(LIBPREF)hbpp$(LIBEXT)
VM_LIB = $(LIB_DIR)\$(LIBPREF)hbvm$(LIBEXT)
VMMT_LIB = $(LIB_DIR)\$(LIBPREF)hbvmmt$(LIBEXT)
RTL_LIB = $(LIB_DIR)\$(LIBPREF)hbrtl$(LIBEXT)
MACRO_LIB = $(LIB_DIR)\$(LIBPREF)hbmacro$(LIBEXT)
DEBUG_LIB = $(LIB_DIR)\$(LIBPREF)hbdebug$(LIBEXT)

View File

@@ -93,6 +93,8 @@ MKLIB = tlib.exe
DLL_OBJS = $(TMP_DLL_OBJS:$(OBJ_DIR)=$(DLL_OBJ_DIR))
VMMT_LIB_OBJS = $(VM_LIB_OBJS:$(OBJ_DIR)=$(MT_OBJ_DIR))
#**********************************************************
# C compiler, Harbour compiler and Linker flags.
#**********************************************************
@@ -104,6 +106,7 @@ INCLUDE_DIR = include
# C Compiler Flags
CFLAGS = -I$(INCLUDE_DIR) -I$(OBJ_DIR) $(C_USR)
CFLAGSMT = -tWM -DHB_MT_VM $(CFLAGSMT)
#-----------
!ifndef BCC_NOOPTIM
@@ -120,7 +123,9 @@ CFLAGS = -I$(INCLUDE_DIR) -I$(OBJ_DIR) $(C_USR)
!endif
#-----------
!if "$(HB_BUILD_ST)" != "yes"
CFLAGS = -tWM $(CFLAGS) -DHB_MT_VM
CFLAGS = $(CFLAGS) $(CFLAGSMT)
!else
HB_BUILD_TARGETS = $(HB_BUILD_TARGETS) $(VMMT_LIB)
!endif
#-----------
!if "$(HB_GT_DEFAULT)" != ""
@@ -185,6 +190,17 @@ ARFLAGS = /P32 $(A_USR)
$(CC) $(CLIBFLAGS) -o$@ $(OBJ_DIR)\$&.c
#**********************************************************
#**********************************************************
# General *.c --> *.obj COMPILE rule for STATIC MT Libraries
{$(ALL_SRC_DIRS)}.c{$(MT_OBJ_DIR)}$(OBJEXT):
$(CC) $(CLIBFLAGS) $(CFLAGSMT) -o$@ $<
#**********************************************************
# General *.prg --> *.obj COMPILE rule for STATIC MT Libraries
{$(ALL_SRC_DIRS)}.prg{$(MT_OBJ_DIR)}$(OBJEXT):
$(HB) $(HARBOURFLAGS) -o$(MT_OBJ_DIR)\ $**
$(CC) $(CLIBFLAGS) $(CFLAGSMT) -o$@ $(MT_OBJ_DIR)\$&.c
#**********************************************************
#**********************************************************
# General *.c --> *.obj COMPILE rule for SHARED Libraries
{$(ALL_LIB_SRC_DIRS)}.c{$(DLL_OBJ_DIR)}$(OBJEXT):
@@ -276,6 +292,14 @@ $(VM_LIB) :: $(VM_LIB_OBJS)
+)
!
#**********************************************************
$(VMMT_LIB) :: BasicExes
$(VMMT_LIB) :: $(VMMT_LIB_OBJS)
IF EXIST "$(VMMT_LIB)" $(DEL) "$(VMMT_LIB)" > NUL
$(MKLIB) "$(VMMT_LIB)" $(ARFLAGS) @&&!
+$(**: = &^
+)
!
#**********************************************************
$(RTL_LIB) :: BasicExes
$(RTL_LIB) :: $(RTL_LIB_OBJS)
IF EXIST "$(RTL_LIB)" $(DEL) "$(RTL_LIB)" > NUL
@@ -638,6 +662,9 @@ doClean:
-if exist $(OBJ_DIR)\*.obj $(DEL) $(OBJ_DIR)\*.obj > nul
-if exist $(OBJ_DIR)\*.c $(DEL) $(OBJ_DIR)\*.c > nul
-if exist $(OBJ_DIR)\*.h $(DEL) $(OBJ_DIR)\*.h > nul
-if exist $(MT_OBJ_DIR)\*.obj $(DEL) $(MT_OBJ_DIR)\*.obj > nul
-if exist $(MT_OBJ_DIR)\*.c $(DEL) $(MT_OBJ_DIR)\*.c > nul
-if exist $(MT_OBJ_DIR)\*.h $(DEL) $(MT_OBJ_DIR)\*.h > nul
-if exist $(INCLUDE_DIR)\hbverbld.h $(DEL) $(INCLUDE_DIR)\hbverbld.h > nul
-if exist $(DLL_OBJ_DIR)\*.obj $(DEL) $(DLL_OBJ_DIR)\*.obj > nul
-if exist $(DLL_OBJ_DIR)\*.c $(DEL) $(DLL_OBJ_DIR)\*.c > nul

View File

@@ -40,6 +40,7 @@
# (if you don't have slang installed)
#
# HB_COMMERCE - If set to yes disables pure GNU modules (slang,GPM,...)
# HB_BUILD_ST - If set to yes builds harbour in SingleThread mode
# HB_BUILD_DLL - If set to yes enables building harbour VM+RTL
# dll in addition to normal static build (currently not working)
# HB_BUILD_DEBUG - If set to yes causes to compile with debug info
@@ -56,6 +57,12 @@
.SUFFIXES:
# GCC has ST mode as default
ifeq ($(HB_BUILD_ST),)
HB_BUILD_ST=yes
endif
#**********************************************************
ifndef ECHO
@@ -130,13 +137,15 @@ endif
#**********************************************************
# Default sources directory search paths
VPATH := $(ALL_SRC_DIRS) $(LIB_DIR) $(BIN_DIR) $(OBJ_DIR) $(DLL_OBJ_DIR)
VPATH := $(ALL_SRC_DIRS) $(LIB_DIR) $(BIN_DIR) $(OBJ_DIR) $(MT_OBJ_DIR) $(DLL_OBJ_DIR)
#**********************************************************
# Some definitions cannot be kept in common.mak
# due to serious limitations of Microsoft Nmake
VMMT_LIB_OBJS = $(subst $(OBJ_DIR),$(MT_OBJ_DIR),$(VM_LIB_OBJS))
# Do not perform an extra compilation phase for shared libraries
# if gcc -fPIC compilation flag is already passed to a makefile
ifeq ($(findstring -fPIC,$(C_USR) $(CFLAGS)),-fPIC)
@@ -160,6 +169,7 @@ endif
INCLUDE_DIR := include
CFLAGS := -W -Wall -I$(INCLUDE_DIR) $(C_USR) $(CFLAGS) -I$(OBJ_DIR)
CFLAGSMT := -DHB_MT_VM $(CFLAGSMT)
#-----------
ifndef GCC_NOOPTIM
CFLAGS := -O3 $(CFLAGS)
@@ -181,6 +191,15 @@ CLIBFLAGS := -c $(CFLAGS)
CLIBFLAGSDLL := -DHB_DYNLIB $(CLIBFLAGS) $(CLIBFLAGSDLL)
CEXEFLAGSDLL := $(CFLAGS) $(CEXEFLAGSDLL)
ifeq ($(findstring $(HB_ARCHITECTURE),dos),)
ifneq ($(HB_BUILD_ST),yes)
CLIBFLAGS += $(CFLAGSMT)
CLIBFLAGSDLL += $(CFLAGSMT)
else
HB_BUILD_TARGETS += $(VMMT_LIB)
endif
endif
# Under architectures other than "DOS based" add -fPIC
# to gcc compiler flags for compiling shared libraries
ifeq ($(findstring $(HB_ARCHITECTURE),w32 os2),)
@@ -248,9 +267,18 @@ $(OBJ_DIR)/%$(OBJEXT) : %.prg
$(HB) $(HARBOURFLAGS) -o$(OBJ_DIR)/ $<
$(CC) $(CLIBFLAGS) -o$@ $(OBJ_DIR)/$(<F:.prg=.c)
#----------------------------------------------------------
# General *.prg --> *.o COMPILE rule for STATIC MT Libraries
$(MT_OBJ_DIR)/%$(OBJEXT) : %.prg
$(HB) $(HARBOURFLAGS) -o$(MT_OBJ_DIR)/ $<
$(CC) $(CLIBFLAGS) $(CFLAGSMT) -o$@ $(MT_OBJ_DIR)/$(<F:.prg=.c)
#----------------------------------------------------------
# General *.c --> *.o COMPILE rule for STATIC Libraries
$(OBJ_DIR)/%$(OBJEXT) : %.c
$(CC) $(CLIBFLAGS) -o$@ $<
#----------------------------------------------------------
# General *.c --> *.o COMPILE rule for STATIC MT Libraries
$(MT_OBJ_DIR)/%$(OBJEXT) : %.c
$(CC) $(CLIBFLAGS) $(CFLAGSMT) -o$@ $<
#*******************************************************
# General *.prg --> *.o COMPILE rule for SHARED Libraries
$(DLL_OBJ_DIR)/%$(OBJEXT) : %.prg
@@ -306,6 +334,9 @@ $(COMPILER_LIB) : $(COMPILER_LIB_OBJS)
$(VM_LIB) : $(VM_LIB_OBJS)
$(MKLIB) $(ARFLAGS) $@ $^
#**********************************************************
$(VMMT_LIB) : $(VMMT_LIB_OBJS)
$(MKLIB) $(ARFLAGS) $@ $^
#**********************************************************
ifneq ($(findstring $(HB_ARCHITECTURE),w32 os2),)
$(MAIN_LIB) : $(MAIN_LIB_OBJS)
$(MKLIB) $(ARFLAGS) $@ $^
@@ -546,6 +577,9 @@ doClean:
-$(DEL) $(OBJ_DIR)/*$(OBJEXT)
-$(DEL) $(OBJ_DIR)/*.c
-$(DEL) $(OBJ_DIR)/*.h
-$(DEL) $(MT_OBJ_DIR)/*$(OBJEXT)
-$(DEL) $(MT_OBJ_DIR)/*.c
-$(DEL) $(MT_OBJ_DIR)/*.h
-$(DEL) $(INCLUDE_DIR)/hbverbld.h
-$(DEL) $(DLL_OBJ_DIR)/*$(OBJEXT)
-$(DEL) $(DLL_OBJ_DIR)/*.c

View File

@@ -622,9 +622,8 @@ HB_EXPORT HB_FHANDLE hb_fsPOpen( BYTE * pFilename, BYTE * pMode )
close( hPipeHandle[1] );
}
}
hb_vmLock();
hb_fsSetIOError( hFileHandle != FS_ERROR, 0 );
hb_vmLock();
if( pbyTmp )
hb_xfree( pbyTmp );
@@ -660,8 +659,8 @@ HB_EXPORT HB_FHANDLE hb_fsOpen( BYTE * pFilename, USHORT uiFlags )
hb_vmUnlock();
hFile = ( HANDLE ) CreateFileA( ( char * ) pFilename, dwMode, dwShare,
NULL, dwCreat, dwAttr, NULL );
hb_vmLock();
hb_fsSetIOError( hFile != ( HANDLE ) INVALID_HANDLE_VALUE, 0 );
hb_vmLock();
hFileHandle = ( HB_FHANDLE ) hFile;
}
@@ -685,8 +684,8 @@ HB_EXPORT HB_FHANDLE hb_fsOpen( BYTE * pFilename, USHORT uiFlags )
#else
hFileHandle = open( ( char * ) pFilename, flags | share, mode );
#endif
hb_vmLock();
hb_fsSetIOError( hFileHandle != FS_ERROR, 0 );
hb_vmLock();
}
#else
@@ -720,9 +719,8 @@ HB_EXPORT HB_FHANDLE hb_fsCreate( BYTE * pFilename, ULONG ulAttr )
hb_vmUnlock();
hFile = ( HANDLE ) CreateFileA( ( char * ) pFilename, dwMode, dwShare,
NULL, dwCreat, dwAttr, NULL );
hb_vmLock();
hb_fsSetIOError( hFile != ( HANDLE ) INVALID_HANDLE_VALUE, 0 );
hb_vmLock();
hFileHandle = ( HB_FHANDLE ) hFile;
}
@@ -740,8 +738,8 @@ HB_EXPORT HB_FHANDLE hb_fsCreate( BYTE * pFilename, ULONG ulAttr )
#else
hFileHandle = open( ( char * ) pFilename, flags | share, mode );
#endif
hb_vmLock();
hb_fsSetIOError( hFileHandle != FS_ERROR, 0 );
hb_vmLock();
}
#else
@@ -781,9 +779,8 @@ HB_EXPORT HB_FHANDLE hb_fsCreateEx( BYTE * pFilename, ULONG ulAttr, USHORT uiFla
hb_vmUnlock();
hFile = ( HANDLE ) CreateFileA( ( char * ) pFilename, dwMode, dwShare,
NULL, dwCreat, dwAttr, NULL );
hb_vmLock();
hb_fsSetIOError( hFile != ( HANDLE ) INVALID_HANDLE_VALUE, 0 );
hb_vmLock();
hFileHandle = ( HB_FHANDLE ) hFile;
}
@@ -799,8 +796,8 @@ HB_EXPORT HB_FHANDLE hb_fsCreateEx( BYTE * pFilename, ULONG ulAttr, USHORT uiFla
#else
hFileHandle = open( ( char * ) pFilename, flags | share, mode );
#endif
hb_vmLock();
hb_fsSetIOError( hFileHandle != FS_ERROR, 0 );
hb_vmLock();
}
#else
@@ -940,8 +937,8 @@ HB_EXPORT BOOL hb_fsGetFileTime( BYTE * pszFileName, LONG * plJulian, LONG * plM
fResult = TRUE;
}
hb_vmLock();
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
hb_fsClose( hFile );
}
}
@@ -966,9 +963,8 @@ HB_EXPORT BOOL hb_fsGetFileTime( BYTE * pszFileName, LONG * plJulian, LONG * plM
fResult = TRUE;
}
hb_vmLock();
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
if( fFree )
hb_xfree( pszFileName );
@@ -1008,28 +1004,26 @@ HB_EXPORT BOOL hb_fsGetAttr( BYTE * pszFileName, ULONG * pulAttr )
*pulAttr = hb_fsAttrFromRaw( dwAttr );
fResult = TRUE;
}
hb_vmLock();
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
}
#elif defined( HB_OS_DOS )
hb_vmUnlock();
{
#if defined( __DJGPP__ ) || defined(__BORLANDC__)
int attr;
hb_vmUnlock();
attr = _chmod( ( char * ) pszFileName, 0, 0 );
hb_vmLock();
int attr = _chmod( ( char * ) pszFileName, 0, 0 );
if( attr != -1 )
#else
unsigned int attr = 0;
hb_vmUnlock();
if( _dos_getfileattr( ( char * ) pszFileName, &attr ) == 0 )
#endif
{
*pulAttr = hb_fsAttrFromRaw( attr );
fResult = TRUE;
}
hb_vmLock();
hb_fsSetIOError( fResult, 0 );
}
hb_vmLock();
#elif defined( HB_OS_OS2 )
{
FILESTATUS3 fs3;
@@ -1037,13 +1031,13 @@ HB_EXPORT BOOL hb_fsGetAttr( BYTE * pszFileName, ULONG * pulAttr )
hb_vmUnlock();
ulrc = DosQueryPathInfo( ( PSZ ) pszFileName, FIL_STANDARD, &fs3, sizeof( fs3 ) );
hb_vmLock();
if( ulrc == NO_ERROR )
{
*pulAttr = hb_fsAttrFromRaw( fs3.attrFile );
fResult = TRUE;
}
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
}
#elif defined( HB_OS_UNIX )
{
@@ -1055,8 +1049,8 @@ HB_EXPORT BOOL hb_fsGetAttr( BYTE * pszFileName, ULONG * pulAttr )
*pulAttr = hb_fsAttrFromRaw( sStat.st_mode );
fResult = TRUE;
}
hb_vmLock();
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
}
#else
{
@@ -1116,8 +1110,8 @@ HB_EXPORT BOOL hb_fsSetFileTime( BYTE * pszFileName, LONG lJulian, LONG lMillise
SystemTimeToFileTime( &st, &local_ft );
LocalFileTimeToFileTime( &local_ft, &ft );
fResult = SetFileTime( DosToWinHandle( hFile ), NULL, &ft, &ft ) != 0;
hb_vmLock();
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
hb_fsClose( hFile );
}
}
@@ -1167,9 +1161,9 @@ HB_EXPORT BOOL hb_fsSetFileTime( BYTE * pszFileName, LONG lJulian, LONG lMillise
ulrc = DosSetPathInfo( ( PSZ ) pszFileName, FIL_STANDARD,
&fs3, sizeof( fs3 ), DSPI_WRTTHRU );
}
hb_vmLock();
fResult = ulrc == NO_ERROR;
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
if( fFree )
hb_xfree( pszFileName );
}
@@ -1179,11 +1173,10 @@ HB_EXPORT BOOL hb_fsSetFileTime( BYTE * pszFileName, LONG lJulian, LONG lMillise
pszFileName = hb_fsNameConv( pszFileName, &fFree );
hb_vmUnlock();
if( lJulian <= 0 && lMillisec )
{
hb_vmUnlock();
fResult = utime( ( char * ) pszFileName, NULL ) == 0;
hb_vmLock();
}
else
{
@@ -1191,7 +1184,6 @@ HB_EXPORT BOOL hb_fsSetFileTime( BYTE * pszFileName, LONG lJulian, LONG lMillise
struct tm new_value;
time_t tim;
hb_vmUnlock();
if( lJulian <= 0 || lMillisec < 0 )
{
time_t current_time;
@@ -1226,9 +1218,9 @@ HB_EXPORT BOOL hb_fsSetFileTime( BYTE * pszFileName, LONG lJulian, LONG lMillise
# endif
buf.actime = buf.modtime = mktime( &new_value );
fResult = utime( ( char * ) pszFileName, &buf ) == 0;
hb_vmLock();
}
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
if( fFree )
hb_xfree( pszFileName );
}
@@ -1267,8 +1259,8 @@ HB_EXPORT BOOL hb_fsSetAttr( BYTE * pszFileName, ULONG ulAttr )
dwFlags |= FILE_ATTRIBUTE_NORMAL;
hb_vmUnlock();
fResult = SetFileAttributesA( ( char * ) pszFileName, dwFlags );
hb_vmLock();
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
}
#elif defined( HB_OS_OS2 )
{
@@ -1293,9 +1285,9 @@ HB_EXPORT BOOL hb_fsSetAttr( BYTE * pszFileName, ULONG ulAttr )
ulrc = DosSetPathInfo( ( PSZ ) pszFileName, FIL_STANDARD,
&fs3, sizeof( fs3 ), DSPI_WRTTHRU );
}
hb_vmLock();
fResult = ulrc == NO_ERROR;
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
}
#elif defined( HB_OS_DOS )
@@ -1306,8 +1298,8 @@ HB_EXPORT BOOL hb_fsSetAttr( BYTE * pszFileName, ULONG ulAttr )
# else
fResult = _dos_setfileattr( ( char * ) pszFileName, ulAttr ) != -1;
# endif
hb_vmLock();
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
#elif defined( HB_OS_UNIX_COMPATIBLE )
{
@@ -1330,8 +1322,8 @@ HB_EXPORT BOOL hb_fsSetAttr( BYTE * pszFileName, ULONG ulAttr )
}
hb_vmUnlock();
fResult = chmod( ( char * ) pszFileName, iAttr ) != -1;
hb_vmLock();
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
}
#else
{
@@ -1363,16 +1355,16 @@ HB_EXPORT USHORT hb_fsRead( HB_FHANDLE hFileHandle, BYTE * pBuff, USHORT uiCount
hb_vmUnlock();
fResult = ReadFile( DosToWinHandle( hFileHandle ), pBuff, ( DWORD ) uiCount, &dwRead, NULL );
hb_vmLock();
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
uiRead = fResult ? ( USHORT ) dwRead : 0;
}
#else
hb_vmUnlock();
uiRead = read( hFileHandle, pBuff, uiCount );
hb_vmLock();
hb_fsSetIOError( uiRead != ( USHORT ) -1, 0 );
hb_vmLock();
#endif
if( uiRead == ( USHORT ) -1 )
@@ -1411,8 +1403,8 @@ HB_EXPORT USHORT hb_fsWrite( HB_FHANDLE hFileHandle, const BYTE * pBuff, USHORT
dwWritten = 0;
fResult = SetEndOfFile( DosToWinHandle( hFileHandle ) );
}
hb_vmLock();
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
uiWritten = fResult ? ( USHORT ) dwWritten : 0;
}
@@ -1421,8 +1413,8 @@ HB_EXPORT USHORT hb_fsWrite( HB_FHANDLE hFileHandle, const BYTE * pBuff, USHORT
{
hb_vmUnlock();
uiWritten = write( hFileHandle, pBuff, uiCount );
hb_vmLock();
hb_fsSetIOError( uiWritten != ( USHORT ) -1, 0 );
hb_vmLock();
if( uiWritten == ( USHORT ) -1 )
uiWritten = 0;
}
@@ -1467,8 +1459,8 @@ HB_EXPORT ULONG hb_fsReadLarge( HB_FHANDLE hFileHandle, BYTE * pBuff, ULONG ulCo
{
hb_vmUnlock();
ulRead = read( hFileHandle, pBuff, ulCount );
hb_vmLock();
hb_fsSetIOError( ulRead != (ULONG) -1, 0 );
hb_vmLock();
}
#else
{
@@ -1511,8 +1503,8 @@ HB_EXPORT ULONG hb_fsReadLarge( HB_FHANDLE hFileHandle, BYTE * pBuff, ULONG ulCo
ulRead += ( ULONG ) uiRead;
pPtr += uiRead;
}
hb_vmLock();
hb_fsSetIOError( ulLeftToRead == 0, 0 );
hb_vmLock();
}
#endif
@@ -1554,8 +1546,8 @@ HB_EXPORT ULONG hb_fsWriteLarge( HB_FHANDLE hFileHandle, const BYTE * pBuff, ULO
{
hb_vmUnlock();
ulWritten = write( hFileHandle, pBuff, ulCount );
hb_vmLock();
hb_fsSetIOError( ulWritten != ( ULONG ) -1, 0 );
hb_vmLock();
if( ulWritten == ( ULONG ) -1 )
ulWritten = 0;
}
@@ -1601,8 +1593,8 @@ HB_EXPORT ULONG hb_fsWriteLarge( HB_FHANDLE hFileHandle, const BYTE * pBuff, ULO
ulWritten += ( ULONG ) uiWritten;
pPtr += uiWritten;
}
hb_vmLock();
hb_fsSetIOError( ulLeftToWrite == 0, 0 );
hb_vmLock();
}
#endif
else
@@ -1698,8 +1690,8 @@ HB_EXPORT void hb_fsCommit( HB_FHANDLE hFileHandle )
close( dup_handle );
fResult = TRUE;
}
hb_vmLock();
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
}
#else
@@ -1760,8 +1752,8 @@ HB_EXPORT BOOL hb_fsLock( HB_FHANDLE hFileHandle, ULONG ulStart,
default:
bResult = FALSE;
}
hb_vmLock();
hb_fsSetIOError( bResult, 0 );
hb_vmLock();
#elif defined(HB_OS_OS2)
{
struct _FILELOCK fl, ful;
@@ -1794,8 +1786,8 @@ HB_EXPORT BOOL hb_fsLock( HB_FHANDLE hFileHandle, ULONG ulStart,
default:
bResult = FALSE;
}
hb_vmLock();
hb_fsSetIOError( bResult, 0 );
hb_vmLock();
}
#elif defined(_MSC_VER) || defined(__DMC__)
{
@@ -1817,8 +1809,8 @@ HB_EXPORT BOOL hb_fsLock( HB_FHANDLE hFileHandle, ULONG ulStart,
default:
bResult = FALSE;
}
hb_vmLock();
hb_fsSetIOError( bResult, 0 );
hb_vmLock();
lseek( hFileHandle, ulOldPos, SEEK_SET );
}
#elif defined(__MINGW32__)
@@ -1841,8 +1833,8 @@ HB_EXPORT BOOL hb_fsLock( HB_FHANDLE hFileHandle, ULONG ulStart,
default:
bResult = FALSE;
}
hb_vmLock();
hb_fsSetIOError( bResult, 0 );
hb_vmLock();
lseek( hFileHandle, ulOldPos, SEEK_SET );
}
#elif defined(HB_OS_UNIX)
@@ -1881,8 +1873,8 @@ HB_EXPORT BOOL hb_fsLock( HB_FHANDLE hFileHandle, ULONG ulStart,
default:
bResult = FALSE;
}
hb_vmLock();
hb_fsSetIOError( bResult, 0 );
hb_vmLock();
}
#elif defined(HAVE_POSIX_IO) && !defined(__IBMCPP__) && ( !defined(__GNUC__) || defined(__DJGPP__) )
@@ -1900,8 +1892,8 @@ HB_EXPORT BOOL hb_fsLock( HB_FHANDLE hFileHandle, ULONG ulStart,
default:
bResult = FALSE;
}
hb_vmLock();
hb_fsSetIOError( bResult, 0 );
hb_vmLock();
#else
@@ -1980,8 +1972,8 @@ HB_EXPORT BOOL hb_fsLockLarge( HB_FHANDLE hFileHandle, HB_FOFFSET ulStart,
default:
bResult = FALSE;
}
hb_vmLock();
hb_fsSetIOError( bResult, 0 );
hb_vmLock();
}
#elif defined(HB_USE_LARGEFILE64)
{
@@ -2017,8 +2009,8 @@ HB_EXPORT BOOL hb_fsLockLarge( HB_FHANDLE hFileHandle, HB_FOFFSET ulStart,
default:
bResult = FALSE;
}
hb_vmLock();
hb_fsSetIOError( bResult, 0 );
hb_vmLock();
}
#else
bResult = hb_fsLock( hFileHandle, (ULONG) ulStart, (ULONG) ulLength, uiMode );
@@ -2199,15 +2191,15 @@ HB_EXPORT BOOL hb_fsDelete( BYTE * pFilename )
hb_vmUnlock();
bResult = DeleteFileA( ( char * ) pFilename );
hb_vmLock();
hb_fsSetIOError( bResult, 0 );
hb_vmLock();
#elif defined(HB_FS_FILE_IO)
hb_vmUnlock();
bResult = ( remove( ( char * ) pFilename ) == 0 );
hb_vmLock();
hb_fsSetIOError( bResult, 0 );
hb_vmLock();
#else
@@ -2276,8 +2268,8 @@ HB_EXPORT BOOL hb_fsMkDir( BYTE * pDirname )
hb_vmUnlock();
bResult = CreateDirectoryA( ( char * ) pDirname, NULL );
hb_vmLock();
hb_fsSetIOError( bResult, 0 );
hb_vmLock();
#elif defined(HAVE_POSIX_IO) || defined(__MINGW32__)
@@ -2289,8 +2281,8 @@ HB_EXPORT BOOL hb_fsMkDir( BYTE * pDirname )
# else
bResult = ( mkdir( ( char * ) pDirname, S_IRWXU | S_IRWXG | S_IRWXO ) == 0 );
# endif
hb_vmLock();
hb_fsSetIOError( bResult, 0 );
hb_vmLock();
#else
@@ -2318,15 +2310,15 @@ HB_EXPORT BOOL hb_fsChDir( BYTE * pDirname )
hb_vmUnlock();
bResult = SetCurrentDirectoryA( ( char * ) pDirname );
hb_vmLock();
hb_fsSetIOError( bResult, 0 );
hb_vmLock();
#elif defined(HAVE_POSIX_IO) || defined(__MINGW32__)
hb_vmUnlock();
bResult = ( chdir( ( char * ) pDirname ) == 0 );
hb_vmLock();
hb_fsSetIOError( bResult, 0 );
hb_vmLock();
#else
@@ -2354,15 +2346,15 @@ HB_EXPORT BOOL hb_fsRmDir( BYTE * pDirname )
hb_vmUnlock();
bResult = RemoveDirectoryA( ( char * ) pDirname );
hb_vmLock();
hb_fsSetIOError( bResult, 0 );
hb_vmLock();
#elif defined(HAVE_POSIX_IO) || defined(__MINGW32__)
hb_vmUnlock();
bResult = ( rmdir( ( char * ) pDirname ) == 0 );
hb_vmLock();
hb_fsSetIOError( bResult, 0 );
hb_vmLock();
#else
@@ -2422,29 +2414,29 @@ HB_EXPORT USHORT hb_fsCurDirBuff( USHORT uiDrive, BYTE * pbyBuffer, ULONG ulLen
hb_vmUnlock();
fResult = GetCurrentDirectoryA( ulLen, ( char * ) pbyBuffer );
hb_vmLock();
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
#elif defined(HB_OS_OS2)
hb_vmUnlock();
fResult = ( _getcwd1( (char *) pbyBuffer, uiDrive + 'A' - 1 ) == 0 );
hb_vmLock();
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
#elif defined(HAVE_POSIX_IO)
hb_vmUnlock();
fResult = ( getcwd( ( char * ) pbyBuffer, ulLen ) != NULL );
hb_vmLock();
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
#elif defined(__MINGW32__)
hb_vmUnlock();
fResult = ( _getdcwd( uiDrive, pbyBuffer, ulLen ) != NULL );
hb_vmLock();
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
#else
@@ -2617,8 +2609,8 @@ HB_EXPORT BOOL hb_fsIsDevice( HB_FHANDLE hFileHandle )
hb_vmUnlock();
bResult = GetFileType( DosToWinHandle( hFileHandle ) ) == FILE_TYPE_CHAR;
hb_vmLock();
hb_fsSetIOError( bResult, 0 );
hb_vmLock();
#elif defined(HB_FS_FILE_IO)
@@ -2628,8 +2620,8 @@ HB_EXPORT BOOL hb_fsIsDevice( HB_FHANDLE hFileHandle )
#else
bResult = isatty( hFileHandle ) != 0;
#endif
hb_vmLock();
hb_fsSetIOError( bResult, 0 );
hb_vmLock();
#else
@@ -2877,6 +2869,7 @@ HB_EXPORT BOOL hb_fsEof( HB_FHANDLE hFileHandle )
}
#else
fResult = eof( hFileHandle ) != 0;
hb_fsSetIOError( fResult, 0 );
#endif
hb_vmLock();

View File

@@ -223,20 +223,21 @@ HB_EXPORT void hb_fsSetError( USHORT uiError )
/* set error code for last operation */
HB_EXPORT void hb_fsSetIOError( BOOL fResult, USHORT uiOperation )
{
PHB_IOERRORS pIOErrors = hb_stackIOErrors();
USHORT uiOsErrorLast, uiErrorLast;
PHB_IOERRORS pIOErrors;
/* TODO: implement it */
HB_SYMBOL_UNUSED( uiOperation );
if( fResult )
{
pIOErrors->uiOsErrorLast = pIOErrors->uiErrorLast = 0;
uiOsErrorLast = uiErrorLast = 0;
}
else
{
#if defined(HB_WIN32_IO) || defined(HB_OS_WIN_32)
pIOErrors->uiOsErrorLast = ( USHORT ) GetLastError();
pIOErrors->uiErrorLast = ( USHORT ) hb_WinToDosError( pIOErrors->uiOsErrorLast );
uiOsErrorLast = ( USHORT ) GetLastError();
uiErrorLast = ( USHORT ) hb_WinToDosError( uiOsErrorLast );
#elif defined(_MSC_VER) || defined(__DMC__)
#ifdef __XCC__
extern unsigned long _doserrno;
@@ -245,16 +246,19 @@ HB_EXPORT void hb_fsSetIOError( BOOL fResult, USHORT uiOperation )
#endif
if( _doserrno != 0 )
{
pIOErrors->uiOsErrorLast = pIOErrors->uiErrorLast = _doserrno;
uiOsErrorLast = uiErrorLast = _doserrno;
}
else
{
pIOErrors->uiOsErrorLast = errno;
pIOErrors->uiErrorLast = hb_errnoToDosError( errno );
uiOsErrorLast = errno;
uiErrorLast = hb_errnoToDosError( errno );
}
#else
pIOErrors->uiOsErrorLast = errno;
pIOErrors->uiErrorLast = hb_errnoToDosError( pIOErrors->uiOsErrorLast );
uiOsErrorLast = errno;
uiErrorLast = hb_errnoToDosError( uiOsErrorLast );
#endif
}
pIOErrors = hb_stackIOErrors();
pIOErrors->uiOsErrorLast = uiOsErrorLast;
pIOErrors->uiErrorLast = uiErrorLast;
}

View File

@@ -102,10 +102,10 @@ HB_FOFFSET hb_fsFSize( BYTE * pszFileName, BOOL bUseDirEntry )
pszFileName = hb_fsNameConv( pszFileName, &fFree );
hb_vmUnlock();
fResult = stat64( ( char * ) pszFileName, &statbuf ) == 0;
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
if( fFree )
hb_xfree( pszFileName );
hb_fsSetIOError( fResult, 0 );
if( fResult )
return ( HB_FOFFSET ) statbuf.st_size;
#else
@@ -114,10 +114,10 @@ HB_FOFFSET hb_fsFSize( BYTE * pszFileName, BOOL bUseDirEntry )
pszFileName = hb_fsNameConv( pszFileName, &fFree );
hb_vmUnlock();
fResult = stat( ( char * ) pszFileName, &statbuf ) == 0;
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
if( fFree )
hb_xfree( pszFileName );
hb_fsSetIOError( fResult, 0 );
if( fResult )
return ( HB_FOFFSET ) statbuf.st_size;
#endif

View File

@@ -105,9 +105,9 @@ static BOOL hb_fsTempName( BYTE * pszBuffer, const BYTE * pszDir, const BYTE * p
#endif
hb_fsSetIOError( fResult, 0 );
hb_vmLock();
hb_fsSetIOError( fResult, 0 );
return fResult;
}
@@ -225,8 +225,8 @@ HB_EXPORT HB_FHANDLE hb_fsCreateTemp( const BYTE * pszDir, const BYTE * pszPrefi
hb_strncat( ( char * ) pszName, "XXXXXX", _POSIX_PATH_MAX );
hb_vmUnlock();
fd = ( HB_FHANDLE ) mkstemp( ( char * ) pszName );
hb_vmLock();
hb_fsSetIOError( fd != ( HB_FHANDLE ) -1, 0 );
hb_vmLock();
}
else
#endif

View File

@@ -838,14 +838,14 @@ HB_EXPORT void hb_fsFindClose( PHB_FFIND ffind )
{
if( ffind )
{
hb_vmUnlock();
/* Do platform dependant cleanup */
if( ffind->info )
{
PHB_FFIND_INFO info = ( PHB_FFIND_INFO ) ffind->info;
hb_vmUnlock();
#if defined(HB_OS_DOS)
#if defined(__DJGPP__) || defined(__BORLANDC__)
@@ -893,11 +893,11 @@ HB_EXPORT void hb_fsFindClose( PHB_FFIND ffind )
#endif
hb_vmLock();
hb_xfree( ( void * ) ffind->info );
}
hb_xfree( ( void * ) ffind );
hb_vmLock();
}
}

View File

@@ -758,17 +758,18 @@ HB_EXPORT void hb_vmInit( BOOL bStartMainProc )
#if defined( HB_MT_VM )
hb_vmStackAdd( NULL );
#endif
hb_clsInit(); /* initialize Classy/OO system */
hb_errInit();
/* initialize dynamic symbol for evaluating codeblocks */
hb_symEval.pDynSym = hb_dynsymGetCase( hb_symEval.szName );
/* Set the language and codepage to the default */
/* This trick is needed to stringify the macro value */
hb_langSelectID( HB_MACRO2STRING( HB_LANG_DEFAULT ) );
hb_cdpSelectID( HB_MACRO2STRING( HB_CODEPAGE_DEFAULT ) );
hb_clsInit(); /* initialize Classy/OO system */
hb_errInit();
/* initialize dynamic symbol for evaluating codeblocks */
hb_symEval.pDynSym = hb_dynsymGetCase( hb_symEval.szName );
hb_setInitialize( hb_stackSetStruct() );
hb_conInit();