tweak mdb_copy, trap signals

vmware
Howard Chu 12 years ago
parent d29b9600e6
commit 65faa5ed7e
  1. 5
      libraries/liblmdb/mdb_copy.1
  2. 23
      libraries/liblmdb/mdb_copy.c

@ -18,11 +18,6 @@ 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.
Note: currently, if the copy is interrupted a stale lock
will be left in the LMDB environment. This may be fixed
in a future release, but until then you must not
interrupt the copy process.
.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

@ -11,10 +11,22 @@
* top-level directory of the distribution or, alternatively, at * top-level directory of the distribution or, alternatively, at
* <http://www.OpenLDAP.org/license.html>. * <http://www.OpenLDAP.org/license.html>.
*/ */
#ifdef _WIN32
#include <windows.h>
#define MDB_STDOUT GetStdHandle(STD_OUTPUT_HANDLE)
#else
#define MDB_STDOUT 1
#endif
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <signal.h>
#include "lmdb.h" #include "lmdb.h"
static void
sighandle(int sig)
{
}
int main(int argc,char * argv[]) int main(int argc,char * argv[])
{ {
int rc; int rc;
@ -26,6 +38,15 @@ int main(int argc,char * argv[])
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
#ifdef SIGPIPE
signal(SIGPIPE, sighandle);
#endif
#ifdef SIGHUP
signal(SIGHUP, sighandle);
#endif
signal(SIGINT, sighandle);
signal(SIGTERM, sighandle);
rc = mdb_env_create(&env); rc = mdb_env_create(&env);
rc = mdb_env_open(env, envname, MDB_RDONLY, 0); rc = mdb_env_open(env, envname, MDB_RDONLY, 0);
@ -33,7 +54,7 @@ int main(int argc,char * argv[])
printf("mdb_env_open failed, error %d %s\n", rc, mdb_strerror(rc)); printf("mdb_env_open failed, error %d %s\n", rc, mdb_strerror(rc));
} else { } else {
if (argc == 2) if (argc == 2)
rc = mdb_env_copyfd(env, 1); 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) if (rc)

Loading…
Cancel
Save