예제 #1
0
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 );
}
예제 #2
0
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;
}