📄 env_method.c
字号:
LF_SET(env_flags[i]); } /* Some flags are persisted in the regions. */ if (dbenv->reginfo != NULL && ((REGENV *)((REGINFO *)dbenv->reginfo)->primary)->envpanic != 0) { LF_SET(DB_PANIC_ENVIRONMENT); } __log_get_flags(dbenv, &flags); *flagsp = flags; return (0);}/* * __dbenv_set_flags -- * DB_ENV->set_flags. * * PUBLIC: int __dbenv_set_flags __P((DB_ENV *, u_int32_t, int)); */int__dbenv_set_flags(dbenv, flags, on) DB_ENV *dbenv; u_int32_t flags; int on;{ u_int32_t mapped_flags; int ret;#define OK_FLAGS \ (DB_AUTO_COMMIT | DB_CDB_ALLDB | DB_DIRECT_DB | DB_DIRECT_LOG | \ DB_DSYNC_LOG | DB_LOG_AUTOREMOVE | DB_LOG_INMEMORY | \ DB_NOLOCKING | DB_NOMMAP | DB_NOPANIC | DB_OVERWRITE | \ DB_PANIC_ENVIRONMENT | DB_REGION_INIT | DB_TIME_NOTGRANTED | \ DB_TXN_NOSYNC | DB_TXN_WRITE_NOSYNC | DB_YIELDCPU) if (LF_ISSET(~OK_FLAGS)) return (__db_ferr(dbenv, "DB_ENV->set_flags", 0)); if (on) { if ((ret = __db_fcchk(dbenv, "DB_ENV->set_flags", flags, DB_LOG_INMEMORY, DB_TXN_NOSYNC)) != 0) return (ret); if ((ret = __db_fcchk(dbenv, "DB_ENV->set_flags", flags, DB_LOG_INMEMORY, DB_TXN_WRITE_NOSYNC)) != 0) return (ret); if ((ret = __db_fcchk(dbenv, "DB_ENV->set_flags", flags, DB_TXN_NOSYNC, DB_TXN_WRITE_NOSYNC)) != 0) return (ret); if (LF_ISSET(DB_DIRECT_DB | DB_DIRECT_LOG) && __os_have_direct() == 0) { __db_err(dbenv, "DB_ENV->set_flags: direct I/O either not configured or not supported"); return (EINVAL); } } if (LF_ISSET(DB_CDB_ALLDB)) ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_flags: DB_CDB_ALLDB"); if (LF_ISSET(DB_PANIC_ENVIRONMENT)) { ENV_ILLEGAL_BEFORE_OPEN(dbenv, "DB_ENV->set_flags: DB_PANIC_ENVIRONMENT"); PANIC_SET(dbenv, on); } if (LF_ISSET(DB_REGION_INIT)) ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_flags: DB_REGION_INIT"); /* * DB_LOG_INMEMORY, DB_TXN_NOSYNC and DB_TXN_WRITE_NOSYNC are * mutually incompatible. If we're setting one of them, clear all * current settings. */ if (LF_ISSET( DB_LOG_INMEMORY | DB_TXN_NOSYNC | DB_TXN_WRITE_NOSYNC)) F_CLR(dbenv, DB_ENV_LOG_INMEMORY | DB_ENV_TXN_NOSYNC | DB_ENV_TXN_WRITE_NOSYNC); /* Some flags are persisted in the regions. */ __log_set_flags(dbenv, flags, on); mapped_flags = 0; __dbenv_map_flags(dbenv, &flags, &mapped_flags); if (on) F_SET(dbenv, mapped_flags); else F_CLR(dbenv, mapped_flags); return (0);}static int__dbenv_get_data_dirs(dbenv, dirpp) DB_ENV *dbenv; const char ***dirpp;{ *dirpp = (const char **)dbenv->db_data_dir; return (0);}/* * __dbenv_set_data_dir -- * DB_ENV->set_data_dir. * * PUBLIC: int __dbenv_set_data_dir __P((DB_ENV *, const char *)); */int__dbenv_set_data_dir(dbenv, dir) DB_ENV *dbenv; const char *dir;{ int ret; /* * The array is NULL-terminated so it can be returned by get_data_dirs * without a length. */#define DATA_INIT_CNT 20 /* Start with 20 data slots. */ if (dbenv->db_data_dir == NULL) { if ((ret = __os_calloc(dbenv, DATA_INIT_CNT, sizeof(char **), &dbenv->db_data_dir)) != 0) return (ret); dbenv->data_cnt = DATA_INIT_CNT; } else if (dbenv->data_next == dbenv->data_cnt - 2) { dbenv->data_cnt *= 2; if ((ret = __os_realloc(dbenv, (u_int)dbenv->data_cnt * sizeof(char **), &dbenv->db_data_dir)) != 0) return (ret); } ret = __os_strdup(dbenv, dir, &dbenv->db_data_dir[dbenv->data_next++]); dbenv->db_data_dir[dbenv->data_next] = NULL; return (ret);}/* * __dbenv_set_intermediate_dir -- * DB_ENV->set_intermediate_dir. * * !!! * Undocumented routine allowing applications to configure Berkeley DB to * create intermediate directories. * * PUBLIC: int __dbenv_set_intermediate_dir __P((DB_ENV *, int, u_int32_t)); */int__dbenv_set_intermediate_dir(dbenv, mode, flags) DB_ENV *dbenv; int mode; u_int32_t flags;{ if (flags != 0) return (__db_ferr(dbenv, "DB_ENV->set_intermediate_dir", 0)); if (mode == 0) { __db_err(dbenv, "DB_ENV->set_intermediate_dir: mode may not be set to 0"); return (EINVAL); } dbenv->dir_mode = mode; return (0);}/* * __dbenv_set_errcall -- * {DB_ENV,DB}->set_errcall. * * PUBLIC: void __dbenv_set_errcall __P((DB_ENV *, * PUBLIC: void (*)(const DB_ENV *, const char *, const char *))); */void__dbenv_set_errcall(dbenv, errcall) DB_ENV *dbenv; void (*errcall) __P((const DB_ENV *, const char *, const char *));{ dbenv->db_errcall = errcall;}/* * __dbenv_get_errfile -- * {DB_ENV,DB}->get_errfile. * * PUBLIC: void __dbenv_get_errfile __P((DB_ENV *, FILE **)); */void__dbenv_get_errfile(dbenv, errfilep) DB_ENV *dbenv; FILE **errfilep;{ *errfilep = dbenv->db_errfile;}/* * __dbenv_set_errfile -- * {DB_ENV,DB}->set_errfile. * * PUBLIC: void __dbenv_set_errfile __P((DB_ENV *, FILE *)); */void__dbenv_set_errfile(dbenv, errfile) DB_ENV *dbenv; FILE *errfile;{ dbenv->db_errfile = errfile;}/* * __dbenv_get_errpfx -- * {DB_ENV,DB}->get_errpfx. * * PUBLIC: void __dbenv_get_errpfx __P((DB_ENV *, const char **)); */void__dbenv_get_errpfx(dbenv, errpfxp) DB_ENV *dbenv; const char **errpfxp;{ *errpfxp = dbenv->db_errpfx;}/* * __dbenv_set_errpfx -- * {DB_ENV,DB}->set_errpfx. * * PUBLIC: void __dbenv_set_errpfx __P((DB_ENV *, const char *)); */void__dbenv_set_errpfx(dbenv, errpfx) DB_ENV *dbenv; const char *errpfx;{ dbenv->db_errpfx = errpfx;}static int__dbenv_set_feedback(dbenv, feedback) DB_ENV *dbenv; void (*feedback) __P((DB_ENV *, int, int));{ dbenv->db_feedback = feedback; return (0);}/* * __dbenv_set_msgcall -- * {DB_ENV,DB}->set_msgcall. * * PUBLIC: void __dbenv_set_msgcall * PUBLIC: __P((DB_ENV *, void (*)(const DB_ENV *, const char *))); */void__dbenv_set_msgcall(dbenv, msgcall) DB_ENV *dbenv; void (*msgcall) __P((const DB_ENV *, const char *));{ dbenv->db_msgcall = msgcall;}/* * __dbenv_get_msgfile -- * {DB_ENV,DB}->get_msgfile. * * PUBLIC: void __dbenv_get_msgfile __P((DB_ENV *, FILE **)); */void__dbenv_get_msgfile(dbenv, msgfilep) DB_ENV *dbenv; FILE **msgfilep;{ *msgfilep = dbenv->db_msgfile;}/* * __dbenv_set_msgfile -- * {DB_ENV,DB}->set_msgfile. * * PUBLIC: void __dbenv_set_msgfile __P((DB_ENV *, FILE *)); */void__dbenv_set_msgfile(dbenv, msgfile) DB_ENV *dbenv; FILE *msgfile;{ dbenv->db_msgfile = msgfile;}/* * __dbenv_set_paniccall -- * {DB_ENV,DB}->set_paniccall. * * PUBLIC: int __dbenv_set_paniccall __P((DB_ENV *, void (*)(DB_ENV *, int))); */int__dbenv_set_paniccall(dbenv, paniccall) DB_ENV *dbenv; void (*paniccall) __P((DB_ENV *, int));{ dbenv->db_paniccall = paniccall; return (0);}static int__dbenv_get_shm_key(dbenv, shm_keyp) DB_ENV *dbenv; long *shm_keyp; /* !!!: really a key_t *. */{ *shm_keyp = dbenv->shm_key; return (0);}/* * __dbenv_set_shm_key -- * DB_ENV->set_shm_key. * * PUBLIC: int __dbenv_set_shm_key __P((DB_ENV *, long)); */int__dbenv_set_shm_key(dbenv, shm_key) DB_ENV *dbenv; long shm_key; /* !!!: really a key_t. */{ ENV_ILLEGAL_AFTER_OPEN(dbenv, "DB_ENV->set_shm_key"); dbenv->shm_key = shm_key; return (0);}static int__dbenv_get_tas_spins(dbenv, tas_spinsp) DB_ENV *dbenv; u_int32_t *tas_spinsp;{ *tas_spinsp = dbenv->tas_spins; return (0);}/* * __dbenv_set_tas_spins -- * DB_ENV->set_tas_spins. * * PUBLIC: int __dbenv_set_tas_spins __P((DB_ENV *, u_int32_t)); */int__dbenv_set_tas_spins(dbenv, tas_spins) DB_ENV *dbenv; u_int32_t tas_spins;{ dbenv->tas_spins = tas_spins; return (0);}static int__dbenv_get_tmp_dir(dbenv, dirp) DB_ENV *dbenv; const char **dirp;{ *dirp = dbenv->db_tmp_dir; return (0);}/* * __dbenv_set_tmp_dir -- * DB_ENV->set_tmp_dir. * * PUBLIC: int __dbenv_set_tmp_dir __P((DB_ENV *, const char *)); */int__dbenv_set_tmp_dir(dbenv, dir) DB_ENV *dbenv; const char *dir;{ if (dbenv->db_tmp_dir != NULL) __os_free(dbenv, dbenv->db_tmp_dir); return (__os_strdup(dbenv, dir, &dbenv->db_tmp_dir));}static int__dbenv_get_verbose(dbenv, which, onoffp) DB_ENV *dbenv; u_int32_t which; int *onoffp;{ switch (which) { case DB_VERB_DEADLOCK: case DB_VERB_RECOVERY: case DB_VERB_REPLICATION: case DB_VERB_WAITSFOR: *onoffp = FLD_ISSET(dbenv->verbose, which) ? 1 : 0; break; default: return (EINVAL); } return (0);}/* * __dbenv_set_verbose -- * DB_ENV->set_verbose. * * PUBLIC: int __dbenv_set_verbose __P((DB_ENV *, u_int32_t, int)); */int__dbenv_set_verbose(dbenv, which, on) DB_ENV *dbenv; u_int32_t which; int on;{ switch (which) { case DB_VERB_DEADLOCK: case DB_VERB_RECOVERY: case DB_VERB_REPLICATION: case DB_VERB_WAITSFOR: if (on) FLD_SET(dbenv->verbose, which); else FLD_CLR(dbenv->verbose, which); break; default: return (EINVAL); } return (0);}/* * __db_mi_env -- * Method illegally called with public environment. * * PUBLIC: int __db_mi_env __P((DB_ENV *, const char *)); */int__db_mi_env(dbenv, name) DB_ENV *dbenv; const char *name;{ __db_err(dbenv, "%s: method not permitted when environment specified", name); return (EINVAL);}/* * __db_mi_open -- * Method illegally called after open. * * PUBLIC: int __db_mi_open __P((DB_ENV *, const char *, int)); */int__db_mi_open(dbenv, name, after) DB_ENV *dbenv; const char *name; int after;{ __db_err(dbenv, "%s: method not permitted %s handle's open method", name, after ? "after" : "before"); return (EINVAL);}/* * __db_env_config -- * Method or function called without required configuration. * * PUBLIC: int __db_env_config __P((DB_ENV *, char *, u_int32_t)); */int__db_env_config(dbenv, i, flags) DB_ENV *dbenv; char *i; u_int32_t flags;{ char *sub; switch (flags) { case DB_INIT_LOCK: sub = "locking"; break; case DB_INIT_LOG: sub = "logging"; break; case DB_INIT_MPOOL: sub = "memory pool"; break; case DB_INIT_REP: sub = "replication"; break; case DB_INIT_TXN: sub = "transaction"; break; default: sub = "<unspecified>"; break; } __db_err(dbenv, "%s interface requires an environment configured for the %s subsystem", i, sub); return (EINVAL);}static int__dbenv_set_rpc_server_noclnt(dbenv, cl, host, tsec, ssec, flags) DB_ENV *dbenv; void *cl; const char *host; long tsec, ssec; u_int32_t flags;{ COMPQUIET(host, NULL); COMPQUIET(cl, NULL); COMPQUIET(tsec, 0); COMPQUIET(ssec, 0); COMPQUIET(flags, 0); __db_err(dbenv, "set_rpc_server method not permitted in non-RPC environment"); return (DB_OPNOTSUP);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -