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

📄 berkeleydb.xs

📁 BerkeleyDB源码
💻 XS
📖 第 1 页 / 共 5 页
字号:
	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 + -