int ldbm_store( LDBM ldbm, Datum key, Datum data, int flags ) { int rc; Datum int_key; /* Internal key */ #ifdef MDBM_DEBUG fprintf( stdout, "==>(mdbm)ldbm_store(db=%p, key(dptr=%p,sz=%d), data(dptr=%p,sz=%d), flags=%x)\n", ldbm, key.dptr, key.dsize, data.dptr, data.dsize, flags ); fflush( stdout ); #endif /* LDBM_WLOCK; */ #ifdef NO_NULL_KEY int_key.dsize = key.dsize + 1; int_key.dptr = malloc( int_key.dsize ); *(int_key.dptr) = 'l'; /* Must not be NULL !*/ AC_MEMCPY( (void *)(int_key.dptr + 1), key.dptr, key.dsize ); #else int_key = key; #endif rc = mdbm_store( ldbm, int_key, data, flags ); if ( flags & LDBM_SYNC ) { mdbm_sync( ldbm ); } /* LDBM_WUNLOCK; */ #ifdef MDBM_DEBUG fprintf( stdout, "<==(mdbm)ldbm_store(rc=%d)\n", rc ); fflush( stdout ); #endif #ifdef NO_NULL_KEY free(int_key.dptr); #endif return( rc ); }
int main(int argc, char **argv) { char buf[2048]; MDBM* db; char fn[MAXPATHLEN]; int notfound; snprintf(fn,sizeof(fn),"%s%s",yax_getroot(),"/tmp/example.mdbm"); db = mdbm_open(fn,MDBM_O_RDWR,0666,0,0); if (!db) { perror("Unable to open database"); exit(2); } notfound = 0; while (fgets(buf,sizeof(buf),stdin)) { datum key, val; static char DELETED[] = "deleted"; int len = strlen(buf); int ret; if (buf[len-1] == '\n') { buf[--len] = 0; } key.dptr = buf; key.dsize = len; val.dptr = DELETED; val.dsize = sizeof(DELETED)-1; mdbm_lock(db); ret = mdbm_store(db,key,val,MDBM_REPLACE); mdbm_unlock(db); if (ret) { perror("Database store failed"); } } mdbm_close(db); return 0; }