2009-09-21 22:50 UTC+0300 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt)

+ harbour/contrib/Makefile
  + harbour/contrib/iodmem/Makefile
  + harbour/contrib/iodmem/iodmem.hbc
    + added make files
  * harbour/contrib/iodmem/iodmem.c
    ! updated to be compatible with the latest SVN (rename method implemented)
    * some warnings are fixed
This commit is contained in:
Mindaugas Kavaliauskas
2009-09-21 19:51:10 +00:00
parent ae870f642a
commit 0c8a24aae9
5 changed files with 78 additions and 15 deletions

View File

@@ -17,6 +17,15 @@
past entries belonging to author(s): Viktor Szakats.
*/
2009-09-21 22:50 UTC+0300 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt)
+ harbour/contrib/Makefile
+ harbour/contrib/iodmem/Makefile
+ harbour/contrib/iodmem/iodmem.hbc
+ added make files
* harbour/contrib/iodmem/iodmem.c
! updated to be compatible with the latest SVN (rename method implemented)
* some warnings are fixed
2009-09-21 17:20 UTC+0300 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt)
+ harbour/contrib/iodmem
+ harbour/contrib/iodmem/iodmem.c

View File

@@ -42,6 +42,7 @@ DIRS += \
hbpgsql \
hbqt \
hbssl \
iodmem \
rddads \
rddsql \

View File

@@ -0,0 +1,12 @@
#
# $Id$
#
ROOT := ../../
LIBNAME := iodmem
C_SOURCES := \
iodmem.c \
include $(TOP)$(ROOT)config/lib.mk

View File

@@ -260,6 +260,30 @@ HB_MEMFS_EXPORT BOOL hb_memfsDelete( const char * szName )
}
HB_MEMFS_EXPORT BOOL hb_memfsRename( const char * szName, const char * szNewName )
{
ULONG ulPos;
HB_MEMFSMT_LOCK
if( ( ulPos = memfsInodeFind( szName, NULL ) ) == 0 )
{
HB_MEMFSMT_UNLOCK
/* File not found */
return 0;
}
if( memfsInodeFind( szNewName, NULL ) )
{
HB_MEMFSMT_UNLOCK
/* File already exists */
return 0;
}
hb_xfree( s_fs.pInodes[ ulPos - 1 ]->szName );
s_fs.pInodes[ ulPos - 1 ]->szName = hb_strdup( szNewName );
HB_MEMFSMT_UNLOCK
return 1;
}
HB_MEMFS_EXPORT HB_FHANDLE hb_memfsOpen( const char * szName, USHORT uiFlags )
{
PHB_MEMFS_FILE pFile;
@@ -273,7 +297,7 @@ HB_MEMFS_EXPORT HB_FHANDLE hb_memfsOpen( const char * szName, USHORT uiFlags )
So, 3=readwrite, 48=exclusive.
Compatibility mode == DenyNone.
*/
uiFlags = uiFlags & ( FO_CREAT | FO_TRUNC | FO_EXCL ) |
uiFlags = ( uiFlags & ( FO_CREAT | FO_TRUNC | FO_EXCL ) ) |
( uiFlags & FO_READWRITE ? FOX_READWRITE : ( uiFlags & FO_WRITE ? FOX_WRITE : FOX_READ ) ) |
( ( uiFlags & 0xf0 ) == FO_EXCLUSIVE ? FOX_EXCLUSIVE :
( ( uiFlags & 0xf0 ) == FO_DENYWRITE ? FOX_DENYWRITE :
@@ -386,7 +410,7 @@ HB_MEMFS_EXPORT ULONG hb_memfsReadAt( HB_FHANDLE pFile, void * pBuff, ULONG ulCo
PHB_MEMFS_INODE pInode = ( ( PHB_MEMFS_FILE ) pFile )->pInode;
ULONG ulRead;
if( ( ( PHB_MEMFS_FILE ) pFile )->uiFlags & FOX_READ == 0 )
if( ( ( ( PHB_MEMFS_FILE ) pFile )->uiFlags & FOX_READ ) == 0 )
return 0; /* access denied */
if( llOffset < 0 || pInode->llSize <= llOffset )
@@ -409,7 +433,7 @@ HB_MEMFS_EXPORT ULONG hb_memfsWriteAt( HB_FHANDLE pFile, const void * pBuff, ULO
{
PHB_MEMFS_INODE pInode = ( ( PHB_MEMFS_FILE ) pFile )->pInode;
if( ( ( PHB_MEMFS_FILE ) pFile )->uiFlags & FOX_WRITE == 0 )
if( ( ( ( PHB_MEMFS_FILE ) pFile )->uiFlags & FOX_WRITE ) == 0 )
return 0; /* access denied */
if( llOffset < 0 )
@@ -439,7 +463,7 @@ HB_MEMFS_EXPORT ULONG hb_memfsWriteAt( HB_FHANDLE pFile, const void * pBuff, ULO
return ulCount;
}
#ifdef HB_MEMFS_PUBLIC_API
HB_MEMFS_EXPORT ULONG hb_memfsRead( HB_FHANDLE pFile, void * pBuff, ULONG ulCount )
{
return hb_memfsReadAt( pFile, pBuff, ulCount, ( ( PHB_MEMFS_FILE ) pFile )->llPos );
@@ -450,6 +474,7 @@ HB_MEMFS_EXPORT ULONG hb_memfsWrite( HB_FHANDLE pFile, const void * pBuff, ULONG
{
return hb_memfsWriteAt( pFile, pBuff, ulCount, ( ( PHB_MEMFS_FILE ) pFile )->llPos );
}
#endif
HB_MEMFS_EXPORT BOOL hb_memfsTruncAt( HB_FHANDLE pFile, HB_FOFFSET llOffset )
@@ -457,7 +482,7 @@ HB_MEMFS_EXPORT BOOL hb_memfsTruncAt( HB_FHANDLE pFile, HB_FOFFSET llOffset )
PHB_MEMFS_INODE pInode = ( ( PHB_MEMFS_FILE ) pFile )->pInode;
HB_FOFFSET llNewAlloc;
if( ( ( PHB_MEMFS_FILE ) pFile )->uiFlags & FOX_WRITE == 0 )
if( ( ( ( PHB_MEMFS_FILE ) pFile )->uiFlags & FOX_WRITE ) == 0 )
return 0; /* access denied */
if( llOffset < 0 )
@@ -468,7 +493,7 @@ HB_MEMFS_EXPORT BOOL hb_memfsTruncAt( HB_FHANDLE pFile, HB_FOFFSET llOffset )
/* Reallocate if neccesary */
if( pInode->llAlloc < llOffset )
{
llNewAlloc = pInode->llAlloc + pInode->llAlloc >> 1;
llNewAlloc = pInode->llAlloc + ( pInode->llAlloc >> 1 );
if( llNewAlloc < llOffset )
llNewAlloc = llOffset;
@@ -477,7 +502,7 @@ HB_MEMFS_EXPORT BOOL hb_memfsTruncAt( HB_FHANDLE pFile, HB_FOFFSET llOffset )
memset( pInode->pData + ( ULONG ) pInode->llAlloc, 0, llNewAlloc - pInode->llAlloc );
pInode->llAlloc = llNewAlloc;
}
else if( pInode->llAlloc >> 2 > ( llOffset > HB_MEMFS_INITSIZE ? llOffset : HB_MEMFS_INITSIZE ) )
else if( ( pInode->llAlloc >> 2 ) > ( llOffset > HB_MEMFS_INITSIZE ? llOffset : HB_MEMFS_INITSIZE ) )
{
llNewAlloc = ( llOffset > HB_MEMFS_INITSIZE ? llOffset : HB_MEMFS_INITSIZE );
pInode->pData = hb_xrealloc( pInode->pData, llNewAlloc );
@@ -535,8 +560,8 @@ HB_MEMFS_EXPORT BOOL hb_memfsLock( HB_FHANDLE pFile, HB_FOFFSET ulStart, HB_FOFF
*
*******************************************************/
#define FILE_PREXIF "mem:"
#define FILE_PREXIF_LEN strlen( FILE_PREXIF )
#define FILE_PREFIX "mem:"
#define FILE_PREFIX_LEN strlen( FILE_PREFIX )
typedef struct _HB_FILE
{
@@ -552,15 +577,13 @@ static PHB_FILE s_fileNew( HB_FHANDLE hFile );
static BOOL s_fileAccept( const char * pFilename )
{
/* printf("\ns_fileAccept %s\n", pFilename ); */
return hb_strnicmp( pFilename, FILE_PREXIF, FILE_PREXIF_LEN ) == 0;
return hb_strnicmp( pFilename, FILE_PREFIX, FILE_PREFIX_LEN ) == 0;
}
static BOOL s_fileExists( const char * pFilename, char * pRetPath )
{
BOOL bRet;
if( hb_memfsFileExists( pFilename + FILE_PREXIF_LEN ) )
if( hb_memfsFileExists( pFilename + FILE_PREFIX_LEN ) )
{
/* Warning: return buffer could be the same memory place as filename parameter! */
if( pRetPath && pRetPath != pFilename )
@@ -573,7 +596,19 @@ static BOOL s_fileExists( const char * pFilename, char * pRetPath )
static BOOL s_fileDelete( const char * pFilename )
{
return hb_memfsDelete( pFilename + FILE_PREXIF_LEN );
return hb_memfsDelete( pFilename + FILE_PREFIX_LEN );
}
static BOOL s_fileRename( const char * szName, const char * szNewName )
{
szName += FILE_PREFIX_LEN;
if( s_fileAccept( szNewName ) )
{
szNewName += FILE_PREFIX_LEN;
return hb_memfsRename( szName, szNewName );
}
return 0;
}
@@ -587,7 +622,7 @@ static PHB_FILE s_fileOpen( const char * szName, const char * szDefExt, USHORT u
HB_SYMBOL_UNUSED( pPaths );
HB_SYMBOL_UNUSED( pError );
hb_strncpy( szNameNew, szName + FILE_PREXIF_LEN, HB_PATH_MAX );
hb_strncpy( szNameNew, szName + FILE_PREFIX_LEN, HB_PATH_MAX );
ulLen = strlen( szNameNew );
do {
@@ -683,6 +718,7 @@ const HB_FILE_FUNCS s_fileFuncs =
s_fileAccept,
s_fileExists,
s_fileDelete,
s_fileRename,
s_fileOpen,
s_fileClose,
s_fileLock,

View File

@@ -0,0 +1,5 @@
#
# $Id$
#
libs=iodmem