📄 berkeleydb.xs
字号:
int patch OUTPUT: RETVAL maj min patchintdb_value_set(value, which) int value int which NOT_IMPLEMENTED_YETDualType_db_remove(ref) SV * ref CODE: {#if DB_VERSION_MAJOR == 2 softCrash("BerkeleyDB::db_remove needs Berkeley DB 3.x or better") ;#else HV * hash ; DB * dbp ; SV * sv ; const char * db = NULL ; const char * subdb = NULL ; BerkeleyDB__Env env = NULL ; BerkeleyDB__Txn txn = NULL ; DB_ENV * dbenv = NULL ; u_int32_t flags = 0 ; hash = (HV*) SvRV(ref) ; SetValue_pv(db, "Filename", char *) ; SetValue_pv(subdb, "Subname", char *) ; SetValue_iv(flags, "Flags") ; SetValue_ov(env, "Env", BerkeleyDB__Env) ; if (txn) {#ifdef AT_LEAST_DB_4_1 if (!env) softCrash("transactional db_remove requires an environment"); RETVAL = env->Status = env->Env->dbremove(env->Env, txn->txn, db, subdb, flags);#else softCrash("transactional db_remove requires Berkeley DB 4.1 or better");#endif } else { if (env) dbenv = env->Env ; RETVAL = db_create(&dbp, dbenv, 0) ; if (RETVAL == 0) { RETVAL = dbp->remove(dbp, db, subdb, flags) ; } }#endif } OUTPUT: RETVALDualType_db_verify(ref) SV * ref CODE: {#ifndef AT_LEAST_DB_3_1 softCrash("BerkeleyDB::db_verify needs Berkeley DB 3.1.x or better") ;#else HV * hash ; DB * dbp ; SV * sv ; const char * db = NULL ; const char * subdb = NULL ; const char * outfile = NULL ; FILE * ofh = NULL; BerkeleyDB__Env env = NULL ; DB_ENV * dbenv = NULL ; u_int32_t flags = 0 ; hash = (HV*) SvRV(ref) ; SetValue_pv(db, "Filename", char *) ; SetValue_pv(subdb, "Subname", char *) ; SetValue_pv(outfile, "Outfile", char *) ; SetValue_iv(flags, "Flags") ; SetValue_ov(env, "Env", BerkeleyDB__Env) ; RETVAL = 0; if (outfile){ ofh = fopen(outfile, "w"); if (! ofh) RETVAL = errno; } if (! RETVAL) { if (env) dbenv = env->Env ; RETVAL = db_create(&dbp, dbenv, 0) ; if (RETVAL == 0) { RETVAL = dbp->verify(dbp, db, subdb, ofh, flags) ; } if (outfile) fclose(ofh); }#endif } OUTPUT: RETVALDualType_db_rename(ref) SV * ref CODE: {#ifndef AT_LEAST_DB_3_1 softCrash("BerkeleyDB::db_rename needs Berkeley DB 3.1.x or better") ;#else HV * hash ; DB * dbp ; SV * sv ; const char * db = NULL ; const char * subdb = NULL ; const char * newname = NULL ; BerkeleyDB__Env env = NULL ; BerkeleyDB__Txn txn = NULL ; DB_ENV * dbenv = NULL ; u_int32_t flags = 0 ; hash = (HV*) SvRV(ref) ; SetValue_pv(db, "Filename", char *) ; SetValue_pv(subdb, "Subname", char *) ; SetValue_pv(newname, "Newname", char *) ; SetValue_iv(flags, "Flags") ; SetValue_ov(env, "Env", BerkeleyDB__Env) ; SetValue_ov(txn, "Txn", BerkeleyDB__Txn) ; if (txn) {#ifdef AT_LEAST_DB_4_1 if (!env) softCrash("transactional db_rename requires an environment"); RETVAL = env->Status = env->Env->dbrename(env->Env, txn->txn, db, subdb, newname, flags);#else softCrash("transactional db_rename requires Berkeley DB 4.1 or better");#endif } else { if (env) dbenv = env->Env ; RETVAL = db_create(&dbp, dbenv, 0) ; if (RETVAL == 0) { RETVAL = (dbp->rename)(dbp, db, subdb, newname, flags) ; } }#endif } OUTPUT: RETVALMODULE = BerkeleyDB::Env PACKAGE = BerkeleyDB::Env PREFIX = env_BerkeleyDB::Env::Rawcreate(flags=0) u_int32_t flags CODE: {#ifndef AT_LEAST_DB_4_1 softCrash("$env->create needs Berkeley DB 4.1 or better") ;#else DB_ENV * env ; int status; RETVAL = NULL; Trace(("in BerkeleyDB::Env::create flags=%d\n", flags)) ; status = db_env_create(&env, flags) ; Trace(("db_env_create returned %s\n", my_db_strerror(status))) ; if (status == 0) { ZMALLOC(RETVAL, BerkeleyDB_ENV_type) ; RETVAL->Env = env ; RETVAL->active = TRUE ; RETVAL->opened = FALSE; env->set_alloc(env, safemalloc, MyRealloc, safefree) ; env->set_errcall(env, db_errcall_cb) ; }#endif } OUTPUT: RETVALintopen(env, db_home=NULL, flags=0, mode=0777) BerkeleyDB::Env env char * db_home u_int32_t flags int mode CODE:#ifndef AT_LEAST_DB_4_1 softCrash("$env->create needs Berkeley DB 4.1 or better") ;#else RETVAL = env->Env->open(env->Env, db_home, flags, mode); env->opened = TRUE;#endif OUTPUT: RETVALboolcds_enabled(env) BerkeleyDB::Env env CODE: RETVAL = env->cds_enabled ; OUTPUT: RETVALintset_encrypt(env, passwd, flags) BerkeleyDB::Env env const char * passwd u_int32_t flags CODE:#ifndef AT_LEAST_DB_4_1 softCrash("$env->set_encrypt needs Berkeley DB 4.1 or better") ;#else dieIfEnvOpened(env, "set_encrypt"); RETVAL = env->Env->set_encrypt(env->Env, passwd, flags); env->opened = TRUE;#endif OUTPUT: RETVALBerkeleyDB::Env::Raw_db_appinit(self, ref, errfile=NULL) char * self SV * ref SV * errfile CODE: { HV * hash ; SV * sv ; char * enc_passwd = NULL ; int enc_flags = 0 ; char * home = NULL ; char * server = NULL ; char ** config = NULL ; int flags = 0 ; int setflags = 0 ; int cachesize = 0 ; int lk_detect = 0 ; long shm_key = 0 ; SV * errprefix = NULL; DB_ENV * env ; int status ; Trace(("in _db_appinit [%s] %d\n", self, ref)) ; hash = (HV*) SvRV(ref) ; SetValue_pv(home, "Home", char *) ; SetValue_pv(enc_passwd,"Enc_Passwd", char *) ; SetValue_iv(enc_flags, "Enc_Flags") ; SetValue_pv(config, "Config", char **) ; SetValue_sv(errprefix, "ErrPrefix") ; SetValue_iv(flags, "Flags") ; SetValue_iv(setflags, "SetFlags") ; SetValue_pv(server, "Server", char *) ; SetValue_iv(cachesize, "Cachesize") ; SetValue_iv(lk_detect, "LockDetect") ; SetValue_iv(shm_key, "SharedMemKey") ;#ifndef AT_LEAST_DB_3_2 if (setflags) softCrash("-SetFlags needs Berkeley DB 3.x or better") ;#endif /* ! AT_LEAST_DB_3 */#ifndef AT_LEAST_DB_3_1 if (shm_key) softCrash("-SharedMemKey needs Berkeley DB 3.1 or better") ; if (server) softCrash("-Server needs Berkeley DB 3.1 or better") ;#endif /* ! AT_LEAST_DB_3_1 */#ifndef AT_LEAST_DB_4_1 if (enc_passwd) softCrash("-Encrypt needs Berkeley DB 4.x or better") ;#endif /* ! AT_LEAST_DB_4_1 */ Trace(("_db_appinit(config=[%d], home=[%s],errprefix=[%s],flags=[%d]\n", config, home, errprefix, flags)) ;#ifdef TRACE if (config) { int i ; for (i = 0 ; i < 10 ; ++ i) { if (config[i] == NULL) { printf(" End\n") ; break ; } printf(" config = [%s]\n", config[i]) ; } }#endif /* TRACE */ ZMALLOC(RETVAL, BerkeleyDB_ENV_type) ; if (flags & DB_INIT_TXN) RETVAL->txn_enabled = TRUE ;#if DB_VERSION_MAJOR == 2 ZMALLOC(RETVAL->Env, DB_ENV) ; env = RETVAL->Env ; { /* Take a copy of the error prefix */ if (errprefix) { Trace(("copying errprefix\n" )) ; RETVAL->ErrPrefix = newSVsv(errprefix) ; SvPOK_only(RETVAL->ErrPrefix) ; } if (RETVAL->ErrPrefix) RETVAL->Env->db_errpfx = SvPVX(RETVAL->ErrPrefix) ; if (SvGMAGICAL(errfile)) mg_get(errfile); if (SvOK(errfile)) { FILE * ef = GetFILEptr(errfile) ; if (! ef) croak("Cannot open file ErrFile", Strerror(errno)); RETVAL->ErrHandle = newSVsv(errfile) ; env->db_errfile = ef; } SetValue_iv(env->db_verbose, "Verbose") ; env->db_errcall = db_errcall_cb ; RETVAL->active = TRUE ; RETVAL->opened = TRUE; RETVAL->cds_enabled = ((flags & DB_INIT_CDB) != 0 ? TRUE : FALSE) ; status = db_appinit(home, config, env, flags) ; printf(" status = %d errno %d \n", status, errno) ; Trace((" status = %d env %d Env %d\n", status, RETVAL, env)) ; if (status == 0) hash_store_iv("BerkeleyDB::Term::Env", (char *)RETVAL, 1) ; else { if (RETVAL->ErrHandle) SvREFCNT_dec(RETVAL->ErrHandle) ; if (RETVAL->ErrPrefix) SvREFCNT_dec(RETVAL->ErrPrefix) ; Safefree(RETVAL->Env) ; Safefree(RETVAL) ; RETVAL = NULL ; } }#else /* DB_VERSION_MAJOR > 2 */#ifndef AT_LEAST_DB_3_1# define DB_CLIENT 0#endif#ifdef AT_LEAST_DB_4_2# define DB_CLIENT DB_RPCCLIENT#endif status = db_env_create(&RETVAL->Env, server ? DB_CLIENT : 0) ; Trace(("db_env_create flags = %d returned %s\n", flags, my_db_strerror(status))) ; env = RETVAL->Env ;#ifdef AT_LEAST_DB_3_3 env->set_alloc(env, safemalloc, MyRealloc, safefree) ;#endif#ifdef AT_LEAST_DB_3_1 if (status == 0 && shm_key) { status = env->set_shm_key(env, shm_key) ; Trace(("set_shm_key [%d] returned %s\n", shm_key, my_db_strerror(status))); }#endif if (status == 0 && cachesize) { status = env->set_cachesize(env, 0, cachesize, 0) ; Trace(("set_cachesize [%d] returned %s\n", cachesize, my_db_strerror(status))); } if (status == 0 && lk_detect) { status = env->set_lk_detect(env, lk_detect) ; Trace(("set_lk_detect [%d] returned %s\n", lk_detect, my_db_strerror(status))); }#ifdef AT_LEAST_DB_4_1 /* set encryption */ if (enc_passwd && status == 0) { status = env->set_encrypt(env, enc_passwd, enc_flags); Trace(("ENV->set_encrypt passwd = %s, flags %d returned %s\n", enc_passwd, enc_flags, my_db_strerror(status))) ; }#endif #ifdef AT_LEAST_DB_4 /* set the server */ if (server && status == 0) { status = env->set_rpc_server(env, NULL, server, 0, 0, 0); Trace(("ENV->set_rpc_server server = %s returned %s\n", server, my_db_strerror(status))) ; }#else# if defined(AT_LEAST_DB_3_1) && ! defined(AT_LEAST_DB_4) /* set the server */ if (server && status == 0) { status = env->set_server(env, server, 0, 0, 0); Trace(("ENV->set_server server = %s returned %s\n", server, my_db_strerror(status))) ; }# endif#endif#ifdef AT_LEAST_DB_3_2 if (setflags && status == 0) { status = env->set_flags(env, setflags, 1); Trace(("ENV->set_flags value = %d returned %s\n", setflags, my_db_strerror(status))) ; }#endif if (status == 0) { int mode = 0 ; /* Take a copy of the error prefix */ if (errprefix) { Trace(("copying errprefix\n" )) ; RETVAL->ErrPrefix = newSVsv(errprefix) ; SvPOK_only(RETVAL->ErrPrefix) ; } if (RETVAL->ErrPrefix) env->set_errpfx(env, SvPVX(RETVAL->ErrPrefix)) ; if (SvGMAGICAL(errfile)) mg_get(errfile); if (SvOK(errfile)) { FILE * ef = GetFILEptr(errfile); if (! ef) croak("Cannot open file ErrFile", Strerror(errno)); RETVAL->ErrHandle = newSVsv(errfile) ; env->set_errfile(env, ef) ; } SetValue_iv(mode, "Mode") ; env->set_errcall(env, db_errcall_cb) ; RETVAL->active = TRUE ; RETVAL->cds_enabled = ((flags & DB_INIT_CDB) != 0 ? TRUE : FALSE) ; #ifdef IS_DB_3_0_x status = (env->open)(env, home, config, flags, mode) ;#else /* > 3.0 */ status = (env->open)(env, home, flags, mode) ;#endif Trace(("ENV->open(env=%s,home=%s,flags=%d,mode=%d)\n",env,home,flags,mode)) ; Trace(("ENV->open returned %s\n", my_db_strerror(status))) ; } if (status == 0) hash_store_iv("BerkeleyDB::Term::Env", (char *)RETVAL, 1) ; else { (env->close)(env, 0) ; if (RETVAL->ErrHandle) SvREFCNT_dec(RETVAL->ErrHandle) ; if (RETVAL->ErrPrefix) SvREFCNT_dec(RETVAL->ErrPrefix) ; Safefree(RETVAL) ; RETVAL = NULL ; }#endif /* DB_VERSION_MAJOR > 2 */ { SV * sv_err = perl_get_sv(ERR_BUFF, FALSE); sv_setpv(sv_err, db_strerror(status)); } } OUTPUT: RETVALDB_ENV*DB_ENV(env) BerkeleyDB::Env env CODE: if (env->active) RETVAL = env->Env ; else RETVAL = NULL;voidlog_archive(env, flags=0) u_int32_t flags BerkeleyDB::Env env PPCODE: { char ** list; char ** file; AV * av;#ifndef AT_LEAST_DB_3 softCrash("log_archive needs at least Berkeley DB 3.x.x");#else# ifdef AT_LEAST_DB_4 env->Status = env->Env->log_archive(env->Env, &list, flags) ;# else# ifdef AT_LEAST_DB_3_3 env->Status = log_archive(env->Env, &list, flags) ;# else env->Status = log_archive(env->Env, &list, flags, safemalloc) ;# endif# endif#ifdef DB_ARCH_REMOVE if (env->Status == 0 && list != NULL && flags != DB_ARCH_REMOVE)#else if (env->Status == 0 && list != NULL )#endif { for (file = list; *file != NULL; ++file) { XPUSHs(sv_2mortal(newSVpv(*file, 0))) ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -