diff -wruN -x '*~' -x '*.o' -x '*.a' -x '*.so' -x '*.so.[0-9]' -x autom4te.cache -x .deps -x .libs ../orig-liblmdb/lmdump.c ./lmdump.c --- ../orig-liblmdb/lmdump.c 1970-01-01 01:00:00.000000000 +0100 +++ ./lmdump.c 2014-07-28 17:50:23.263838569 +0200 @@ -0,0 +1,128 @@ +/* lmdump.c - Lmdb database dumper + Has three modes : + -a : print keys in ascii form + -A : print keys and values in ascii form + -x : print keys and values in hexadecimal form + -d : print only the size of keys and values + */ + +#define _XOPEN_SOURCE 500 /* srandom(), random() */ +#include +#include +#include +#include +#include "lmdb.h" + +static void print_hex(char *s, int len) +{ + int i = 0; + for (i=0; i +#include +#include "lmdb.h" + +static int report_error(int rc) +{ + printf("err(%d): %s\n", rc, mdb_strerror(rc)); + return rc; +} + +int openconn(const char *dbfile, MDB_env **env, long int maxreaders) +{ +/*init*/ + int rc; + rc = mdb_env_create(env); + if(rc) return report_error(rc); + + rc = mdb_env_open(*env, dbfile, MDB_NOSUBDIR, 0644); + if(rc) return report_error(rc); + return 0; +} + +int gettxn(MDB_env *env, MDB_txn **txn, MDB_dbi *dbi) +{ + int rc; +/*setup txn*/ + rc = mdb_txn_begin(env, NULL, 0, txn); + if(rc) return report_error(rc); + rc = mdb_open(*txn, NULL, 0, dbi); + if(rc) return report_error(rc); + return 0; +} + +int committxn(MDB_txn *txn) +{ +/*commit*/ + int rc; + rc = mdb_txn_commit(txn); + return 0; +} + +int aborttxn(MDB_txn *txn) +{ +/*abort*/ + int rc; + mdb_txn_abort(txn); + return 0; +} + +int closeall(MDB_env *env, MDB_txn *txn, MDB_dbi dbi) +{ +/*end*/ + mdb_close(env, dbi); + mdb_env_close(env); + return 0; +} + +int do_put(char *dbfile, char *mykey, char *myval) +{ + MDB_env *env; + openconn(dbfile, &env, 0); + + MDB_txn *txn; + MDB_dbi dbi; + gettxn(env, &txn, &dbi); + + int rc; + MDB_val key, data; + key.mv_data = mykey; + data.mv_data = myval; + key.mv_size = strlen(mykey) + 1; + data.mv_size = strlen(myval) + 1; + + rc = mdb_put(txn, dbi, &key, &data, MDB_NOOVERWRITE); + if (rc == MDB_SUCCESS) + { + rc = mdb_txn_commit(txn); + } + else + { + mdb_txn_abort(txn); + } + + mdb_env_close(env); + return rc; +} + +int do_del(char *dbfile, char *mykey) +{ + MDB_env *env; + openconn(dbfile, &env, 0); + + MDB_txn *txn; + MDB_dbi dbi; + gettxn(env, &txn, &dbi); + + int rc; + MDB_val key; + key.mv_data = mykey; + key.mv_size = strlen(mykey) + 1; + + rc = mdb_del(txn, dbi, &key, NULL); + if (rc == MDB_SUCCESS) + { + rc = mdb_txn_commit(txn); + } + else + { + mdb_txn_abort(txn); + } + + mdb_env_close(env); + return rc; +} + +int do_init(char *dbfile, unsigned long maxr) +{ + MDB_env *env; + openconn(dbfile, &env, maxr); + mdb_env_close(env); + return 0; +} + +int do_stat(char *dbfile) +{ + int rc; + MDB_env *env; + openconn(dbfile, &env, 0); + + MDB_stat stat; + MDB_envinfo info; + + rc = mdb_env_stat(env, &stat); + rc = mdb_env_info(env, &info); + printf("me_maxreaders=%ld\n", info.me_maxreaders); + mdb_env_close(env); + return 0; +} + +int main(int argc, char *argv[]) +{ + if (argc < 3) + { + goto fail; + } + + if (!strcmp(argv[1], "put")) + { + if (argc == 5) + { + int rc = do_put(argv[2], argv[3], argv[4]); + return rc; + } + } + else if (!strcmp(argv[1], "del")) + { + if (argc == 4) + { + int rc = do_del(argv[2], argv[3]); + return rc; + } + } + else if (!strcmp(argv[1], "init")) + { + if (argc == 3) + { + int rc = do_init(argv[2], 0L); + return rc; + } + else if (argc == 5 && !strcmp(argv[3], "-m")) + { + int rc = do_init(argv[2], atol(argv[4])); + do_stat(argv[2]); + return rc; + } + } + else if (!strcmp(argv[1], "maxr")) + { + if (argc == 3) + { + int rc = do_stat(argv[2]); + return rc; + } + } + +fail: + printf("Usage :\n"); + printf("Add a key and value to a DB file :\n"); + printf("\tlmmgr put dbfile key value\n"); + printf("Remove a key from a DB file :\n"); + printf("\tlmmgr del dbfile key\n"); + printf("Set a new maxreaders value of a DB file :\n"); + printf("\tlmmgr init dbfile [-m maxreaders]\n"); + printf("Give maxreaders value of a DB file :\n"); + printf("\tlmmgr maxr dbfile\n"); + + return 1; +} diff -wruN -x '*~' -x '*.o' -x '*.a' -x '*.so' -x '*.so.[0-9]' -x autom4te.cache -x .deps -x .libs ../orig-liblmdb/Makefile.am ./Makefile.am --- ../orig-liblmdb/Makefile.am 2014-07-28 17:44:34.137071474 +0200 +++ ./Makefile.am 2014-07-28 17:58:11.979702178 +0200 @@ -4,7 +4,7 @@ AM_CFLAGS = -W -Wall -Wno-unused-parameter -Wbad-function-cast -pthread LDADD = liblmdb.la -bin_PROGRAMS = mdb_copy mdb_stat +bin_PROGRAMS = mdb_copy mdb_stat lmdump lmmgr check_PROGRAMS = mtest mtest2 mtest3 mtest4 mtest5 man_MANS = mdb_copy.1 mdb_stat.1 include_HEADERS = lmdb.h