Clean up mdb_copy.

Support MDB_NOSUBDIR. Catch more errors.  Write messages
to stderr, not stdout which the data too may be piped to.
vmware
Hallvard Furuseth 11 years ago
parent 1ffb5e1cba
commit e1266bf331
  1. 10
      libraries/liblmdb/mdb_copy.1
  2. 28
      libraries/liblmdb/mdb_copy.c

@ -5,7 +5,11 @@
mdb_copy \- LMDB environment copy tool mdb_copy \- LMDB environment copy tool
.SH SYNOPSIS .SH SYNOPSIS
.B mdb_copy .B mdb_copy
.I srcpath\ [dstpath] [\c
.BR \-n ]
.B srcpath
[\c
.BR dstpath ]
.SH DESCRIPTION .SH DESCRIPTION
The The
.B mdb_copy .B mdb_copy
@ -19,6 +23,10 @@ is specified it must be the path of an empty directory
for storing the backup. Otherwise, the backup will be for storing the backup. Otherwise, the backup will be
written to stdout. written to stdout.
.SH OPTIONS
.BR \-n
Open LDMB environment(s) which do not use subdirectories.
.SH DIAGNOSTICS .SH DIAGNOSTICS
Exit status is zero if no errors occur. Exit status is zero if no errors occur.
Errors result in a non-zero exit status and Errors result in a non-zero exit status and

@ -31,10 +31,18 @@ int main(int argc,char * argv[])
{ {
int rc; int rc;
MDB_env *env; MDB_env *env;
char *envname = argv[1]; const char *progname = argv[0], *act;
unsigned flags = MDB_RDONLY;
for (; argc > 1 && argv[1][0] == '-'; argc--, argv++) {
if (argv[1][1] == 'n' && argv[1][2] == '\0')
flags |= MDB_NOSUBDIR;
else
argc = 0;
}
if (argc<2 || argc>3) { if (argc<2 || argc>3) {
fprintf(stderr, "usage: %s srcpath [dstpath]\n", argv[0]); fprintf(stderr, "usage: %s [-n] srcpath [dstpath]\n", progname);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
@ -47,19 +55,21 @@ int main(int argc,char * argv[])
signal(SIGINT, sighandle); signal(SIGINT, sighandle);
signal(SIGTERM, sighandle); signal(SIGTERM, sighandle);
act = "opening environment";
rc = mdb_env_create(&env); rc = mdb_env_create(&env);
if (rc == MDB_SUCCESS) {
rc = mdb_env_open(env, envname, MDB_RDONLY, 0); rc = mdb_env_open(env, argv[1], flags, 0);
if (rc) { }
printf("mdb_env_open failed, error %d %s\n", rc, mdb_strerror(rc)); if (rc == MDB_SUCCESS) {
} else { act = "copying";
if (argc == 2) if (argc == 2)
rc = mdb_env_copyfd(env, MDB_STDOUT); rc = mdb_env_copyfd(env, MDB_STDOUT);
else else
rc = mdb_env_copy(env, argv[2]); rc = mdb_env_copy(env, argv[2]);
if (rc)
printf("mdb_env_copy failed, error %d %s\n", rc, mdb_strerror(rc));
} }
if (rc)
fprintf(stderr, "%s: %s failed, error %d (%s)\n",
progname, act, rc, mdb_strerror(rc));
mdb_env_close(env); mdb_env_close(env);
return rc ? EXIT_FAILURE : EXIT_SUCCESS; return rc ? EXIT_FAILURE : EXIT_SUCCESS;

Loading…
Cancel
Save