CAMLprim value caml_mdb_env_copy(value env,value path){ CAMLparam2(env,path); if(mdb_env_copy((MDB_env*)env,String_val(path))){ caml_failwith("error in mdb_env_copy"); } CAMLreturn0; }
/* * Class: jmdb_DatabaseWrapper * Method: envCopy * Signature: (JLjava/lang/String;)V */ JNIEXPORT void JNICALL Java_jmdb_DatabaseWrapper_envCopy(JNIEnv *vm, jclass clazz, jlong envL, jstring path) { MDB_env *envC = (MDB_env*) envL; const char *pathC = (*vm)->GetStringUTFChars(vm, path, NULL); int code = mdb_env_copy(envC, pathC); (*vm)->ReleaseStringUTFChars(vm, path, pathC); if (code != 0) { throwDatabaseException(vm, code); } }
int main(int argc,char * argv[]) { int rc; MDB_env *env; 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) { fprintf(stderr, "usage: %s [-n] srcpath [dstpath]\n", progname); exit(EXIT_FAILURE); } #ifdef SIGPIPE signal(SIGPIPE, sighandle); #endif #ifdef SIGHUP signal(SIGHUP, sighandle); #endif signal(SIGINT, sighandle); signal(SIGTERM, sighandle); act = "opening environment"; rc = mdb_env_create(&env); if (rc == MDB_SUCCESS) { rc = mdb_env_open(env, argv[1], flags, 0); } if (rc == MDB_SUCCESS) { act = "copying"; if (argc == 2) rc = mdb_env_copyfd(env, MDB_STDOUT); else rc = mdb_env_copy(env, argv[2]); } if (rc) fprintf(stderr, "%s: %s failed, error %d (%s)\n", progname, act, rc, mdb_strerror(rc)); mdb_env_close(env); return rc ? EXIT_FAILURE : EXIT_SUCCESS; }