#include <signal.h>
#include "lmdb.h"
+#ifdef _WIN32
+#define Z "I"
+#else
+#define Z "z"
+#endif
+
#define PRINT 1
static int mode;
MDB_cursor *mc;
MDB_stat ms;
MDB_val key, data;
+ MDB_envinfo info;
unsigned int flags;
int rc, i;
rc = mdb_stat(txn, dbi, &ms);
if (rc) return rc;
+ rc = mdb_env_info(mdb_txn_env(txn), &info);
+ if (rc) return rc;
+
printf("VERSION=3\n");
printf("format=%s\n", mode & PRINT ? "print" : "bytevalue");
if (name)
printf("database=%s\n", name);
printf("type=btree\n");
+ printf("mapsize=%" Z "u\n", info.me_mapsize);
+ if (info.me_mapaddr)
+ printf("mapaddr=%p\n", info.me_mapaddr);
+ printf("maxreaders=%u\n", info.me_maxreaders);
if (flags & MDB_DUPSORT)
printf("duplicates=1\n");
envname = argv[optind];
rc = mdb_env_create(&env);
+ if (rc) {
+ fprintf(stderr, "mdb_env_create failed, error %d %s\n", rc, mdb_strerror(rc));
+ return EXIT_FAILURE;
+ }
if (alldbs || subname) {
mdb_env_set_maxdbs(env, 2);
rc = mdb_env_open(env, envname, envflags | MDB_RDONLY, 0664);
if (rc) {
- printf("mdb_env_open failed, error %d %s\n", rc, mdb_strerror(rc));
+ fprintf(stderr, "mdb_env_open failed, error %d %s\n", rc, mdb_strerror(rc));
goto env_close;
}
rc = mdb_txn_begin(env, NULL, MDB_RDONLY, &txn);
if (rc) {
- printf("mdb_txn_begin failed, error %d %s\n", rc, mdb_strerror(rc));
+ fprintf(stderr, "mdb_txn_begin failed, error %d %s\n", rc, mdb_strerror(rc));
goto env_close;
}
rc = mdb_open(txn, subname, 0, &dbi);
if (rc) {
- printf("mdb_open failed, error %d %s\n", rc, mdb_strerror(rc));
+ fprintf(stderr, "mdb_open failed, error %d %s\n", rc, mdb_strerror(rc));
goto txn_abort;
}
rc = mdb_cursor_open(txn, dbi, &cursor);
if (rc) {
- printf("mdb_cursor_open failed, error %d %s\n", rc, mdb_strerror(rc));
+ fprintf(stderr, "mdb_cursor_open failed, error %d %s\n", rc, mdb_strerror(rc));
goto txn_abort;
}
while ((rc = mdb_cursor_get(cursor, &key, NULL, MDB_NEXT_NODUP)) == 0) {