NA01
08-07-2005, 10:50
vi posto il codice di esempio che ho montato.
l'originale aveva due funzioni per l'inserimento e la ricerca.
il codice funziona perfettamente. però alla fine salta la return 0, fa due passi (in cui non so che esegue, giustamente il gdb vede che li fa, ma non sa dove andarseli a prendere) e genera un segfault.
con una abort invece va tutto bene....
il database dopo la close non viene passato a NULL, forse è quello, ma non so che farci :(
ciao!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <db.h>
typedef struct{
char exePath[100];
int auth;
}ProgData;
int main(){
DB *dbp;
DBT key,data;
u_int32_t flags;
int ret;
ProgData prog;
char path[200] = "uuuu";
strncpy(prog.exePath, "ciaobla",200);
ret = db_create(&dbp,NULL,0);
if(ret != 0){
//errore
}
flags = DB_CREATE;
ret = dbp->open(dbp,NULL,"auth.db",NULL,DB_BTREE,flags,0);
if(ret != 0){
//errore
}
memset(&key,0,sizeof(DBT));
memset(&data,0,sizeof(DBT));
key.data = path;
key.size = 200;
data.data = &prog;
data.size = sizeof(ProgData);
ret = dbp->put(dbp,NULL,&key,&data,0);
path[2] = 'k';
prog.exePath[3] = 'N';
key.data = path;
key.size = 200 ;
data.data = &prog;
data.size = sizeof(ProgData);
ret = dbp->put(dbp,NULL,&key,&data,0);
path[2] = 'u';
key.data = path;
dbp->get(dbp,NULL,&key,&data,0);
fprintf(stderr,"%s",data.data);
path[2] = 'k';
key.data = path;
dbp->get(dbp,NULL,&key,&data,0);
fprintf(stderr,"%s",data.data);
if(dbp != NULL){
dbp->close(dbp,0);
}
return 0;
}
l'originale aveva due funzioni per l'inserimento e la ricerca.
il codice funziona perfettamente. però alla fine salta la return 0, fa due passi (in cui non so che esegue, giustamente il gdb vede che li fa, ma non sa dove andarseli a prendere) e genera un segfault.
con una abort invece va tutto bene....
il database dopo la close non viene passato a NULL, forse è quello, ma non so che farci :(
ciao!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <db.h>
typedef struct{
char exePath[100];
int auth;
}ProgData;
int main(){
DB *dbp;
DBT key,data;
u_int32_t flags;
int ret;
ProgData prog;
char path[200] = "uuuu";
strncpy(prog.exePath, "ciaobla",200);
ret = db_create(&dbp,NULL,0);
if(ret != 0){
//errore
}
flags = DB_CREATE;
ret = dbp->open(dbp,NULL,"auth.db",NULL,DB_BTREE,flags,0);
if(ret != 0){
//errore
}
memset(&key,0,sizeof(DBT));
memset(&data,0,sizeof(DBT));
key.data = path;
key.size = 200;
data.data = &prog;
data.size = sizeof(ProgData);
ret = dbp->put(dbp,NULL,&key,&data,0);
path[2] = 'k';
prog.exePath[3] = 'N';
key.data = path;
key.size = 200 ;
data.data = &prog;
data.size = sizeof(ProgData);
ret = dbp->put(dbp,NULL,&key,&data,0);
path[2] = 'u';
key.data = path;
dbp->get(dbp,NULL,&key,&data,0);
fprintf(stderr,"%s",data.data);
path[2] = 'k';
key.data = path;
dbp->get(dbp,NULL,&key,&data,0);
fprintf(stderr,"%s",data.data);
if(dbp != NULL){
dbp->close(dbp,0);
}
return 0;
}