From: Howard Chu Date: Wed, 28 Mar 2012 16:20:18 +0000 (-0700) Subject: Add mfree utility to show the freelist X-Git-Tag: OPENLDAP_REL_ENG_2_4_31~48 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=282ef3bac16a7252f0a04a02b7899ec9c025440d;p=openldap Add mfree utility to show the freelist --- diff --git a/libraries/libmdb/Makefile b/libraries/libmdb/Makefile index 88297078e1..1fde58889c 100644 --- a/libraries/libmdb/Makefile +++ b/libraries/libmdb/Makefile @@ -28,6 +28,7 @@ mtest3: mtest3.o libmdb.a mtest4: mtest4.o libmdb.a mtest5: mtest5.o libmdb.a mtest6: mtest6.o libmdb.a +mfree: mfree.o libmdb.a mdb.o: mdb.c mdb.h midl.h $(CC) $(CFLAGS) -fPIC $(CPPFLAGS) -c mdb.c diff --git a/libraries/libmdb/mfree.c b/libraries/libmdb/mfree.c new file mode 100644 index 0000000000..0833b22f47 --- /dev/null +++ b/libraries/libmdb/mfree.c @@ -0,0 +1,56 @@ +/* mfree.c - memory-mapped database freelist scanner */ +/* + * Copyright 2011 Howard Chu, Symas Corp. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. + * + * A copy of this license is available in the file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . + */ +#define _XOPEN_SOURCE 500 /* srandom(), random() */ +#include +#include +#include +#include "mdb.h" +#include "midl.h" + +int main(int argc,char * argv[]) +{ + int rc; + MDB_env *env; + MDB_dbi dbi; + MDB_val key, data; + MDB_txn *txn; + MDB_stat mst; + MDB_cursor *cursor; + ID i, j, *iptr; + + if (argc != 2) { + fprintf(stderr, "usage: %s \n", argv[0]); + exit(1); + } + + rc = mdb_env_create(&env); + rc = mdb_env_open(env, argv[1], MDB_RDONLY, 0664); + rc = mdb_txn_begin(env, NULL, MDB_RDONLY, &txn); + dbi = 0; + rc = mdb_cursor_open(txn, dbi, &cursor); + while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { + printf("key: %p %zu, data: %p\n", + key.mv_data, *(ID *) key.mv_data, + data.mv_data); + iptr = data.mv_data; + j = *iptr++; + for (i=0; i