⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 berkeleydb.xs

📁 linux 下的源代码分析阅读器 red hat公司新版
💻 XS
📖 第 1 页 / 共 5 页
字号:
            return RETVAL ;    }    if (info->bt_minkey) {        Status = dbp->set_bt_minkey(dbp, info->bt_minkey) ;	Trace(("set_bt_minkey [%d] returned %s\n",		info->bt_minkey, my_db_strerror(Status)));        if (Status)            return RETVAL ;    }    if (info->bt_compare) {        Status = dbp->set_bt_compare(dbp, info->bt_compare) ;	Trace(("set_bt_compare [%p] returned %s\n",		info->bt_compare, my_db_strerror(Status)));        if (Status)            return RETVAL ;    }    if (info->h_hash) {        Status = dbp->set_h_hash(dbp, info->h_hash) ;	Trace(("set_h_hash [%d] returned %s\n",		info->h_hash, my_db_strerror(Status)));        if (Status)            return RETVAL ;    }    if (info->dup_compare) {        Status = dbp->set_dup_compare(dbp, info->dup_compare) ;	Trace(("set_dup_compare [%d] returned %s\n",		info->dup_compare, my_db_strerror(Status)));        if (Status)            return RETVAL ;    }    if (info->bt_prefix) {        Status = dbp->set_bt_prefix(dbp, info->bt_prefix) ;	Trace(("set_bt_prefix [%d] returned %s\n",		info->bt_prefix, my_db_strerror(Status)));        if (Status)            return RETVAL ;    }    if (info->re_len) {        Status = dbp->set_re_len(dbp, info->re_len) ;	Trace(("set_re_len [%d] returned %s\n",		info->re_len, my_db_strerror(Status)));        if (Status)            return RETVAL ;    }    if (info->re_delim) {        Status = dbp->set_re_delim(dbp, info->re_delim) ;	Trace(("set_re_delim [%d] returned %s\n",		info->re_delim, my_db_strerror(Status)));        if (Status)            return RETVAL ;    }    if (info->re_pad) {        Status = dbp->set_re_pad(dbp, info->re_pad) ;	Trace(("set_re_pad [%d] returned %s\n",		info->re_pad, my_db_strerror(Status)));        if (Status)            return RETVAL ;    }    if (info->flags) {        Status = dbp->set_flags(dbp, info->flags) ;	Trace(("set_flags [%d] returned %s\n",		info->flags, my_db_strerror(Status)));        if (Status)            return RETVAL ;    }    if (info->q_extentsize) {#ifdef AT_LEAST_DB_3_2        Status = dbp->set_q_extentsize(dbp, info->q_extentsize) ;	Trace(("set_q_extentsize [%d] returned %s\n",		info->q_extentsize, my_db_strerror(Status)));        if (Status)            return RETVAL ;#else        softCrash("-ExtentSize needs at least Berkeley DB 3.2.x") ;#endif    }    /* In-memory database need DB_CREATE from 4.4 */    if (! file)        flags |= DB_CREATE;	Trace(("db_open'ing\n"));#ifdef AT_LEAST_DB_4_1    if ((Status = (dbp->open)(dbp, txnid, file, subname, type, flags, mode)) == 0) {#else    if ((Status = (dbp->open)(dbp, file, subname, type, flags, mode)) == 0) {#endif /* AT_LEAST_DB_4_1 */#else /* DB_VERSION_MAJOR == 2 */    if ((Status = db_open(file, type, flags, mode, env, info, &dbp)) == 0) {        CurrentDB = db ;#endif /* DB_VERSION_MAJOR == 2 */	Trace(("db_opened ok\n"));	RETVAL = db ;	RETVAL->dbp  = dbp ;	RETVAL->txn  = txnid ;#if DB_VERSION_MAJOR == 2    	RETVAL->type = dbp->type ;#else /* DB_VERSION_MAJOR > 2 */#ifdef AT_LEAST_DB_3_3    	dbp->get_type(dbp, &RETVAL->type) ;#else /* DB 3.0 -> 3.2 */    	RETVAL->type = dbp->get_type(dbp) ;#endif#endif /* DB_VERSION_MAJOR > 2 */    	RETVAL->primary_recno_or_queue = FALSE;    	RETVAL->recno_or_queue = (RETVAL->type == DB_RECNO ||	                          RETVAL->type == DB_QUEUE) ;	RETVAL->filename = my_strdup(file) ;	RETVAL->Status = Status ;	RETVAL->active = TRUE ;	hash_store_iv("BerkeleyDB::Term::Db", (char *)RETVAL, 1) ;	Trace(("  storing %p %p in BerkeleyDB::Term::Db\n", RETVAL, dbp)) ;	if (dbenv) {	    RETVAL->cds_enabled = dbenv->cds_enabled ;	    RETVAL->parent_env = dbenv ;	    dbenv->Status = Status ;	    ++ dbenv->open_dbs ;	}    }    else {#if DB_VERSION_MAJOR > 2	(dbp->close)(dbp, 0) ;#endif	destroyDB(db) ;        Trace(("db open returned %s\n", my_db_strerror(Status))) ;    }    Trace(("End of _db_open\n"));    return RETVAL ;}#include "constants.h"MODULE = BerkeleyDB		PACKAGE = BerkeleyDB	PREFIX = env_INCLUDE: constants.xs#define env_db_version(maj, min, patch) 	db_version(&maj, &min, &patch)char *env_db_version(maj, min, patch)	int  maj	int  min	int  patch	PREINIT:	  dMY_CXT;	OUTPUT:	  RETVAL	  maj	  min	  patchintdb_value_set(value, which)	int value	int which        NOT_IMPLEMENTED_YETDualType_db_remove(ref)	SV * 		ref	PREINIT:	  dMY_CXT;	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	PREINIT:	  dMY_CXT;	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	PREINIT:	  dMY_CXT;	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	PREINIT:	  dMY_CXT;	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	PREINIT:	  dMY_CXT;    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	PREINIT:	  dMY_CXT;	CODE:	    RETVAL = env->cds_enabled ;	OUTPUT:	    RETVALintset_encrypt(env, passwd, flags)	BerkeleyDB::Env env	const char * passwd	u_int32_t flags	PREINIT:	  dMY_CXT;    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 	PREINIT:	  dMY_CXT;	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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -