Commit c0997d17 authored by Ivan Donchevskiy's avatar Ivan Donchevskiy

fixed bug with fseek in TableBlockStorage and CycleStorage

parent 16eb3a8a
...@@ -74,13 +74,10 @@ bool CycleStorage::Open(const char* name, int inf_sz, int sz, int seek) ...@@ -74,13 +74,10 @@ bool CycleStorage::Open(const char* name, int inf_sz, int sz, int seek)
if(file==NULL) return false; if(file==NULL) return false;
seekpos=seek; seekpos=seek;
if(fseek(file,seekpos,0)==-1) return false;
CycleStorageAttr *csa = new CycleStorageAttr(); CycleStorageAttr *csa = new CycleStorageAttr();
if(fseek(file,seekpos,0)==0) fread(csa,sizeof(CycleStorageAttr),1,file); fread(csa,sizeof(CycleStorageAttr),1,file);
else
{
delete csa;
return false;
}
if((csa->size!=((sz-sizeof(CycleStorageAttr))/(sizeof(CycleStorageElem)+inf_sz)))||(csa->inf_size!=inf_sz)||(csa->seekpos!=seek)) if((csa->size!=((sz-sizeof(CycleStorageAttr))/(sizeof(CycleStorageElem)+inf_sz)))||(csa->inf_size!=inf_sz)||(csa->seekpos!=seek))
{ {
...@@ -173,19 +170,21 @@ bool CycleStorage::Create(const char* name, int inf_sz, int sz, int seek) ...@@ -173,19 +170,21 @@ bool CycleStorage::Create(const char* name, int inf_sz, int sz, int seek)
inf_size=inf_sz; inf_size=inf_sz;
full_size=sizeof(CycleStorageElem)+inf_size; full_size=sizeof(CycleStorageElem)+inf_size;
CycleStorageElem *jrn = (CycleStorageElem*)new char[full_size];
jrn->status=0;
size=(sz-sizeof(CycleStorageAttr))/full_size; size=(sz-sizeof(CycleStorageAttr))/full_size;
iter=0; iter=0;
seekpos=seek; seekpos=seek;
if(fseek(file,seekpos,0)==-1) return false;
CycleStorageElem *jrn = (CycleStorageElem*)new char[full_size];
jrn->status=0;
CycleStorageAttr *csa = new CycleStorageAttr(); CycleStorageAttr *csa = new CycleStorageAttr();
csa->inf_size=inf_size; csa->inf_size=inf_size;
csa->size=size; csa->size=size;
csa->seekpos=seekpos; csa->seekpos=seekpos;
fseek(file,seekpos,0);
fwrite(csa,sizeof(CycleStorageAttr),1,file); fwrite(csa,sizeof(CycleStorageAttr),1,file);
fflush(file); fflush(file);
seekpos+=sizeof(CycleStorageAttr); seekpos+=sizeof(CycleStorageAttr);
......
...@@ -122,14 +122,10 @@ bool TableBlockStorage::Open(const char* name, int key_sz, int inf_sz, int sz, i ...@@ -122,14 +122,10 @@ bool TableBlockStorage::Open(const char* name, int key_sz, int inf_sz, int sz, i
if(file==NULL) return false; if(file==NULL) return false;
seekpos=seek; seekpos=seek;
if(fseek(file,seekpos,0)==-1) return false;
StorageAttr *sa = new StorageAttr(); StorageAttr *sa = new StorageAttr();
if(fseek(file,seekpos,0)==0)
fread(sa,sizeof(StorageAttr),1,file); fread(sa,sizeof(StorageAttr),1,file);
else
{
delete sa;
return false;
}
full_size = sizeof(TableBlockStorageElem)+key_sz+inf_sz; full_size = sizeof(TableBlockStorageElem)+key_sz+inf_sz;
...@@ -208,6 +204,8 @@ bool TableBlockStorage::Create(const char* name, int key_sz, int inf_sz, int sz, ...@@ -208,6 +204,8 @@ bool TableBlockStorage::Create(const char* name, int key_sz, int inf_sz, int sz,
size=block_size*block_num; size=block_size*block_num;
max=-1; max=-1;
if(fseek(file,seekpos,0)==-1) return false;
mem = new TableBlockStorageElem*[block_size]; mem = new TableBlockStorageElem*[block_size];
for(i=0;i<block_size;i++) for(i=0;i<block_size;i++)
{ {
...@@ -223,7 +221,6 @@ bool TableBlockStorage::Create(const char* name, int key_sz, int inf_sz, int sz, ...@@ -223,7 +221,6 @@ bool TableBlockStorage::Create(const char* name, int key_sz, int inf_sz, int sz,
sa->seekpos=seekpos; sa->seekpos=seekpos;
cur_block=0; cur_block=0;
fseek(file,seekpos,0);
fwrite(sa,sizeof(StorageAttr),1,file); fwrite(sa,sizeof(StorageAttr),1,file);
fflush(file); fflush(file);
seekpos+=sizeof(StorageAttr); seekpos+=sizeof(StorageAttr);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment