From 046c9694e01a5b73886ba79f11d83f7c8169a653 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Czerpak?= Date: Thu, 20 Mar 2014 14:59:02 +0100 Subject: [PATCH] 2014-03-20 14:59 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * src/rtl/filesys.c ! added workaround for offset returned by FSeek( hDir, 0, FS_END ) for directories handles in some *nixes --- ChangeLog.txt | 13 +++++++++---- src/rtl/filesys.c | 20 ++++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index f0af5d7634..a58390ce51 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -10,15 +10,20 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2014-03-20 14:59 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) + * src/rtl/filesys.c + ! added workaround for offset returned by FSeek( hDir, 0, FS_END ) + for directories handles in some *nixes + 2014-03-19 21:27 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com) * contrib\gtwvg\hbgtwvg.ch + Added: #define GOBJ_OBJDATA_PICTUREEX 10 #define GOBJ_OBJTYPE_LABEL_EX2 21 - + * contrib\gtwvg\gtwgud.c * contrib\gtwvg\gtwvgd.c % Changed: WM_CLOSE firing K_ESC => HB_K_CLOSE in accordance rest of GTs. - + * contrib\gtwvg\wvgcuig.c % Changed: hb_wvg_RefreshRect() flag to erase background: FALSE => TRUE. % Changed: WVG_SETGOBJDATA() now returns lSUCCESS or lFAILURE. @@ -32,11 +37,11 @@ Wvg_Picture( nTop, nLeft, nBottom, nRight, aPxlOff, nSlot, lDoNotScale ) % Changed: hb_wvg_RenderPicture() code to honor scaled vs non-scaled rendering. - + * contrib\gtwvg\wvgutils.c ! Fixed: Wvt_ChooseFont() to return correctly array of 9 elements instead of 8. - + 2014-03-20 04:01 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * include/hbapifs.h * src/rtl/filebuf.c diff --git a/src/rtl/filesys.c b/src/rtl/filesys.c index af0284c783..183f29e0f7 100644 --- a/src/rtl/filesys.c +++ b/src/rtl/filesys.c @@ -2899,6 +2899,16 @@ HB_ULONG hb_fsSeek( HB_FHANDLE hFileHandle, HB_LONG lOffset, HB_USHORT uiFlags ) { ulPos = lseek( hFileHandle, lOffset, nFlags ); hb_fsSetIOError( ulPos != ( HB_ULONG ) -1, 0 ); +# if defined( HB_OS_UNIX ) + /* small trick to resolve problem with position reported for directories */ + if( ulPos == LONG_MAX && lOffset == 0 && nFlags == SEEK_END ) + { + struct stat st; + + if( fstat( hFileHandle, &st ) == 0 ) + ulPos = st.st_size; + } +# endif } if( ulPos == ( HB_ULONG ) -1 ) @@ -2966,6 +2976,16 @@ HB_FOFFSET hb_fsSeekLarge( HB_FHANDLE hFileHandle, HB_FOFFSET nOffset, HB_USHORT { nPos = lseek64( hFileHandle, nOffset, nFlags ); hb_fsSetIOError( nPos != ( HB_FOFFSET ) -1, 0 ); +# if defined( HB_OS_UNIX ) + /* small trick to resolve problem with position reported for directories */ + if( nPos == LONG_MAX && nOffset == 0 && nFlags == SEEK_END ) + { + struct stat64 st; + + if( fstat64( hFileHandle, &st ) == 0 ) + nPos = st.st_size; + } +# endif } if( nPos == ( HB_FOFFSET ) -1 )