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

📄 berkeleydb.xs

📁 File system using stacked.
💻 XS
📖 第 1 页 / 共 5 页
字号:
	        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 ;    	    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) ;    	    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::Raw_db_appinit(self, ref)	char *		self	SV * 		ref	CODE:	{	    HV *	hash ;	    SV *	sv ;	    char *	home = NULL ;	    char *	errfile = NULL ;	    char * 	server = NULL ;	    char **	config = NULL ;	    int		flags = 0 ;	    int		setflags = 0 ;	    int		cachesize = 0 ;	    int		lk_detect = 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(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") ;#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 (server)	        softCrash("-Server needs Berkeley DB 3.1 or better") ;#endif /* ! AT_LEAST_DB_3_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) ;	    SetValue_pv(errfile,      "ErrFile", char *) ;	    if (errfile) {	    	RETVAL->ErrHandle = env->db_errfile = fopen(errfile, "w");	    	if (RETVAL->ErrHandle == NULL)		    croak("Cannot open file %s: %s\n", errfile,  Strerror(errno));	    }	    SetValue_iv(env->db_verbose, "Verbose") ;	    env->db_errcall = db_errcall_cb ;	    RETVAL->active = TRUE ;	    status = db_appinit(home, config, env, flags) ;	    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)                    fclose(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	  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	  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	  /* 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)) ;	    SetValue_pv(errfile,      "ErrFile", char *) ;	    if (errfile) {	    	RETVAL->ErrHandle = fopen(errfile, "w");	    	if (RETVAL->ErrHandle == NULL)		    croak("Cannot open file %s: %s\n", errfile,  Strerror(errno));	    	env->set_errfile(env, RETVAL->ErrHandle) ;	    }	    SetValue_iv(mode, "Mode") ;	    env->set_errcall(env, db_errcall_cb) ;	    RETVAL->active = TRUE ;#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 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)                  fclose(RETVAL->ErrHandle) ;              if (RETVAL->ErrPrefix)                  SvREFCNT_dec(RETVAL->ErrPrefix) ;              Safefree(RETVAL) ;	      RETVAL = NULL ;	  }#endif /* DB_VERSION_MAJOR > 2 */	}	OUTPUT:	    RETVALvoidlog_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	  if (env->Status == 0 && list != NULL)          {	      for (file = list; *file != NULL; ++file)	      {	        XPUSHs(sv_2mortal(newSVpv(*file, 0))) ;	      }	      safefree(list);	  }#endif	}BerkeleyDB::Txn::Raw_txn_begin(env, pid=NULL, flags=0)	u_int32_t		flags	BerkeleyDB::Env		env	BerkeleyDB::Txn		pid	CODE:	{	    DB_TXN *txn ;	    DB_TXN *p_id = NULL ;	    Trace(("txn_begin pid %d, flags %d\n", pid, flags)) ;#if DB_VERSION_MAJOR == 2	    if (env->Env->tx_info == NULL)		softCrash("Transaction Manager not enabled") ;#endif	    if (!env->txn_enabled)		softCrash("Transaction Manager not enabled") ;	    if (pid)		p_id = pid->txn ;	    env->TxnMgrStatus =#if DB_VERSION_MAJOR == 2	    	txn_begin(env->Env->tx_info, p_id, &txn) ;#else#  ifdef AT_LEAST_DB_4	    	env->Env->txn_begin(env->Env, p_id, &txn, flags) ;#  else	    	txn_begin(env->Env, p_id, &txn, flags) ;#  endif#endif	    if (env->TxnMgrStatus == 0) {	      ZMALLOC(RETVAL, BerkeleyDB_Txn_type) ;	      RETVAL->txn  = txn ;	      RETVAL->active = TRUE ;	      Trace(("_txn_begin created txn [%p] in [%p]\n", txn, RETVAL));	      hash_store_iv("BerkeleyDB::Term::Txn", (char *)RETVAL, 1) ;	    }	    else		RETVAL = NULL ;	}	OUTPUT:	    RETVAL#if DB_VERSION_MAJOR == 2#  define env_txn_checkpoint(e,k,m,f) txn_checkpoint(e->Env->tx_info, k, m)#else /* DB 3.0 or better */#  ifdef AT_LEAST_DB_4 #    define env_txn_checkpoint(e,k,m,f) e->Env->txn_checkpoint(e->Env, k, m, f)#  else#    ifdef AT_LEAST_DB_3_1#      define env_txn_checkpoint(e,k,m,f) txn_checkpoint(e->Env, k, m, 0)#    else#      define env_txn_checkpoint(e,k,m,f) txn_checkpoint(e->Env, k, m)#    endif#  endif#endifDualTypeenv_txn_checkpoint(env, kbyte, min, flags=0)	BerkeleyDB::Env		env	long			kbyte	long			min	u_int32_t		flagsHV *txn_stat(env)	BerkeleyDB::Env		env	HV *			RETVAL = NULL ;	CODE:	{	    DB_TXN_STAT *	stat ;#ifdef AT_LEAST_DB_4	    if(env->Env->txn_stat(env->Env, &stat, 0) == 0) {#else#  ifdef AT_LEAST_DB_3_3	    if(txn_stat(env->Env, &stat) == 0) {#  else#    if DB_VERSION_MAJOR == 2	    if(txn_stat(env->Env->tx_info, &stat, safemalloc) == 0) {#    else	    if(txn_stat(env->Env, &stat, safemalloc) == 0) {#    endif#  endif#endif	    	RETVAL = (HV*)sv_2mortal((SV*)newHV()) ;		hv_store_iv(RETVAL, "st_time_ckp", stat->st_time_ckp) ;		hv_store_iv(RETVAL, "st_last_txnid", stat->st_last_txnid) ;		hv_store_iv(RETVAL, "st_maxtxns", stat->st_maxtxns) ;		hv_store_iv(RETVAL, "st_naborts", stat->st_naborts) ;		hv_store_iv(RETVAL, "st_nbegins", stat->st_nbegins) ;		hv_store_iv(RETVAL, "st_ncommits", stat->st_ncommits) ;		hv_store_iv(RETVAL, "st_nactive", stat->st_nactive) ;#if DB_VERSION_MAJOR > 2		hv_store_iv(RETVAL, "st_maxnactive", stat->st_maxnactive) ;		hv_store_iv(RETVAL, "st_regsize", stat->st_regsize) ;		hv_store_iv(RETVAL, "st_region_wait", stat->st_region_wait) ;		hv_store_iv(RETVAL, "st_region_nowait", stat->st_region_nowait) ;#endif		safefree(stat) ;	    }	}	OUTPUT:	    RETVAL#define EnDis(x)	((x) ? "Enabled" : "Disabled")voidprintEnv(env)        BerkeleyDB::Env  env	INIT:	    ckActive_Environment(env->active) ;	CODE:#if 0	  printf("env             [0x%X]\n", env) ;	  printf("  ErrPrefix     [%s]\n", env->ErrPrefix				           ? SvPVX(env->ErrPrefix) : 0) ;	  printf("  DB_ENV\n") ;	  printf("    db_lorder   [%d]\n", env->Env.db_lorder) ;	  printf("    db_home     [%s]\n", env->Env.db_home) ;	  printf("    db_data_dir [%s]\n", env->Env.db_data_dir) ;	  printf("    db_log_dir  [%s]\n", env->Env.db_log_dir) ;	  printf("    db_tmp_dir  [%s]\n", env->Env.db_tmp_dir) ;	  printf("    lk_info     [%s]\n", EnDis(env->Env.lk_info)) ;	  printf("    lk_max      [%d]\n", env->Env.lk_max) ;	  printf("    lg_info     [%s]\n", EnDis(env->Env.lg_info)) ;	  printf("    lg_max      [%d]\n", env->Env.lg_max) ;	  printf("    mp_info     [%s]\n", EnDis(env->Env.mp_info)) ;	  printf("    mp_size     [%d]\n", env->Env.mp_size) ;	  printf("    tx_info     [%s]\n", EnDis(env->Env.tx_info)) ;	  printf("    tx_max      [%d]\n", env->Env.tx_max) ;	  printf("    flags       [%d]\n", env->Env.flags) ;	  printf("\n") ;#endifSV *errPrefix(env, prefix)        BerkeleyDB::Env  env	SV * 		 prefix	INIT:	    ckActive_Environment(env->active) ;	CODE:	  if (env->ErrPrefix) {	      RETVAL = newSVsv(env->ErrPrefix) ;              SvPOK_only(RETVAL) ;	      sv_setsv(env->ErrPrefix, prefix) ;	  }	  else {	      RETVAL = NULL ;	      env->ErrPrefix = newSVsv(prefix) ;	  }	  SvPOK_only(env->ErrPrefix) ;#if DB_VERSION_MAJOR == 2	  env->Env->db_errpfx = SvPVX(env->ErrPrefix) ;#else	  env->Env->set_errpfx(env->Env, SvPVX(env->ErrPrefix)) ;#endif	OUTPUT:	  RETVALDualTypestatus(env)        BerkeleyDB::Env 	env	CODE:	    RETVAL =  env->Status ;	OUTPUT:	    RETVALDualTypedb_appexit(env)        BerkeleyDB::Env 	env	ALIAS:	close =1	INIT:	    ckActive_Environment(env->active) ;	CODE:#ifdef STRICT_CLOSE	    if (env->open_dbs)		softCrash("attempted to close an environment with %d open database(s)",			env->open_dbs) ;#endif /* STRICT_CLOSE */#if DB_VERSION_MAJOR == 2	    RETVAL = db_appexit(env->Env) ;#else	    RETVAL = (env->Env->close)(env->Env, 0) ;#endif	    env->active = FALSE ;	    hash_delete("BerkeleyDB::Term::Env", (char *)env) ;	OUTPUT:	    RETVALvoid_DESTROY(env)        BerkeleyDB::Env  env	int RETVAL = 0 ;	CODE:	  Trace(("In BerkeleyDB::Env::DESTROY\n"));	  Trace(("    env %ld Env %ld dirty %d\n", env, &env->Env, PL_dirty)) ;	  if (env->active)#if DB_VERSION_MAJOR == 2              db_appexit(env->Env) ;#else	      (env->Env->close)(env->Env, 0) ;#endif          if (env->ErrHandle)              fclose(env->ErrHandle) ;          if (env->ErrPrefix)              SvREFCNT_dec(env->ErrPrefix) ;#if DB_VERSION_MAJOR == 2          Safefree(env->Env) ;#endif          Safefree(env) ;	  hash_delete("BerkeleyDB::Term::Env", (char *)env) ;	  Trace(("End of BerkeleyDB::Env::DESTROY %d\n", RETVAL)) ;BerkeleyDB::TxnMgr::Raw_TxnMgr(env)        BerkeleyDB::Env  env	INIT:	    ckActive_Environment(env->active) ;	    if (!env->txn_enabled)		softCrash("Transaction Manager not enabled") ;

⌨️ 快捷键说明

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