Patch level : 4.0 622
Files correlati : Ricompilazione Demo : [ ] Commento : Prova ottimizzazioni di conversioni git-svn-id: svn://10.65.10.50/trunk@14907 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
62ccd80780
commit
221c0b2a65
@ -40,7 +40,8 @@ static DATA4 *dbdata[CB4FILES];
|
||||
|
||||
bool handle_ok(int handle)
|
||||
{
|
||||
return handle >= 0 && handle < CB4FILES && dbdata[handle] != NULL;
|
||||
return handle >= 0 && handle < CB4FILES &&
|
||||
dbdata[handle] != NULL && dbdata[handle]->clientId >= 0;
|
||||
}
|
||||
|
||||
static char* find_slash_backslash(const char* s)
|
||||
@ -62,17 +63,16 @@ static char* find_slash_backslash(const char* s)
|
||||
--------------------------------------------------------------------------*/
|
||||
void DB_init(void)
|
||||
{
|
||||
int i;
|
||||
for(i=0;i<CB4FILES;i++)
|
||||
dbdata[i]=(DATA4*)NULL;
|
||||
memset(dbdata, 0, sizeof(dbdata));
|
||||
|
||||
code4init(&code_base);
|
||||
code_base.readLock=0;
|
||||
code_base.errDefaultUnique=e4unique;
|
||||
code_base.safety=0;
|
||||
code_base.lockAttempts=1;
|
||||
// code_base.optimize_write = 0;
|
||||
code4dateFormatSet(&code_base, "CCYYMMDD");
|
||||
|
||||
code_base.optimizeWrite = OPT4EXCLUSIVE; // Is the default?
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
@ -84,13 +84,12 @@ void DB_init(void)
|
||||
void DB_exit(void)
|
||||
{
|
||||
int i;
|
||||
code4initUndo(&code_base);
|
||||
|
||||
for(i=0;i<CB4FILES;i++)
|
||||
for(i=0; i< CB4FILES; i++)
|
||||
{
|
||||
if (handle_ok(i))
|
||||
DB_close(i);
|
||||
}
|
||||
code4initUndo(&code_base);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
@ -100,8 +99,8 @@ void DB_exit(void)
|
||||
int DB_open(const char *filename,int mode,int index)
|
||||
{
|
||||
int i,found;
|
||||
|
||||
if (mode) code_base.accessMode=1;
|
||||
if (mode)
|
||||
code_base.accessMode=1; // Exclusive mode
|
||||
/* cerca il primo posto libero nel vettore dbdata */
|
||||
found=-1;
|
||||
for(i=0;i<CB4FILES;i++)
|
||||
@ -113,7 +112,9 @@ int DB_open(const char *filename,int mode,int index)
|
||||
}
|
||||
}
|
||||
/* se non ci sono posti liberi torna -1 */
|
||||
if(found==-1) return(found);
|
||||
if(found==-1)
|
||||
return(found);
|
||||
|
||||
code_base.errorCode=0;
|
||||
if (index == 0) /* Se e' stata richiesta l'apertura senza indici, setta il flag */
|
||||
code_base.autoOpen = 0;
|
||||
@ -399,8 +400,9 @@ int DB_rewrite(int handle)
|
||||
u4delaySec();
|
||||
if (rt == 0)
|
||||
{
|
||||
while ((rt = d4flush(dbdata[handle])) == r4locked)
|
||||
u4delaySec();
|
||||
/* while ((rt = d4flush(dbdata[handle])) == r4locked)
|
||||
u4delaySec(); */
|
||||
rt = DB_flush(handle);
|
||||
}
|
||||
if (rt == e4unique)
|
||||
{
|
||||
@ -454,7 +456,7 @@ int DB_add(int handle)
|
||||
rt = _isreinsert;
|
||||
}
|
||||
else
|
||||
if (rt == 0)
|
||||
if (rt == 0 && is_locked == 0)
|
||||
{
|
||||
while ((rt = d4flush(data)) == r4locked)
|
||||
u4delaySec();
|
||||
@ -1154,20 +1156,20 @@ long DB_changed(int handle)
|
||||
|
||||
char* DB_memoptr( const int handle, const char * fieldname )
|
||||
{
|
||||
FIELD4 * f;
|
||||
f = d4field( dbdata[ handle ], ( char *)fieldname );
|
||||
FIELD4* f = d4field( dbdata[ handle ], ( char *)fieldname );
|
||||
return f4memoPtr( f );
|
||||
}
|
||||
|
||||
int DB_memowrite( const int handle, const char * fieldname, const char * data )
|
||||
{
|
||||
int ret;
|
||||
FIELD4 * f;
|
||||
f = d4field(dbdata[handle], fieldname );
|
||||
ret = f4memoAssign( f, ( char * )data );
|
||||
d4flush(dbdata[handle]);
|
||||
FIELD4* f = d4field(dbdata[handle], fieldname );
|
||||
int ret = f4memoAssign( f, (char*)data );
|
||||
|
||||
if (ret == 0 && !DB_file_locked(handle))
|
||||
{
|
||||
d4flush(dbdata[handle]);
|
||||
d4unlock(dbdata[handle]);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user