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

📄 java_dbenv.c

📁 这是linux下运行的mysql软件包,可用于linux 下安装 php + mysql + apach 的网络配置
💻 C
📖 第 1 页 / 共 3 页
字号:
/*- * See the file LICENSE for redistribution information. * * Copyright (c) 1997-2002 *	Sleepycat Software.  All rights reserved. */#include "db_config.h"#ifndef lintstatic const char revid[] = "$Id: java_DbEnv.c,v 11.105 2002/08/29 14:22:23 margo Exp $";#endif /* not lint */#include <jni.h>#include <stdlib.h>#include <string.h>#include "db_int.h"#include "java_util.h"#include "java_stat_auto.h"#include "com_sleepycat_db_DbEnv.h"/* We keep these lined up, and alphabetical by field name, * for comparison with C++'s list. */JAVADB_SET_METH_STR(DbEnv,   data_1dir, DB_ENV, data_dir)JAVADB_SET_METH(DbEnv, jint, lg_1bsize, DB_ENV, lg_bsize)JAVADB_SET_METH_STR(DbEnv,   lg_1dir, DB_ENV, lg_dir)JAVADB_SET_METH(DbEnv, jint, lg_1max, DB_ENV, lg_max)JAVADB_SET_METH(DbEnv, jint, lg_1regionmax, DB_ENV, lg_regionmax)JAVADB_SET_METH(DbEnv, jint, lk_1detect, DB_ENV, lk_detect)JAVADB_SET_METH(DbEnv, jint, lk_1max, DB_ENV, lk_max)JAVADB_SET_METH(DbEnv, jint, lk_1max_1locks, DB_ENV, lk_max_locks)JAVADB_SET_METH(DbEnv, jint, lk_1max_1lockers, DB_ENV, lk_max_lockers)JAVADB_SET_METH(DbEnv, jint, lk_1max_1objects, DB_ENV, lk_max_objects)/* mp_mmapsize is declared below, it needs an extra cast */JAVADB_SET_METH_STR(DbEnv,   tmp_1dir, DB_ENV, tmp_dir)JAVADB_SET_METH(DbEnv, jint, tx_1max, DB_ENV, tx_max)static void DbEnv_errcall_callback(const char *prefix, char *message){	JNIEnv *jnienv;	DB_ENV_JAVAINFO *envinfo = (DB_ENV_JAVAINFO *)prefix;	jstring pre;	/*	 * Note: these error cases are "impossible", and would	 * normally warrant an exception.  However, without	 * a jnienv, we cannot throw an exception...	 * We don't want to trap or exit, since the point of	 * this facility is for the user to completely control	 * error situations.	 */	if (envinfo == NULL) {		/*		 * Something is *really* wrong here, the		 * prefix is set in every environment created.		 */		fprintf(stderr, "Error callback failed!\n");		fprintf(stderr, "error: %s\n", message);		return;	}	/* Should always succeed... */	jnienv = dbjie_get_jnienv(envinfo);	if (jnienv == NULL) {		/* But just in case... */		fprintf(stderr, "Cannot attach to current thread!\n");		fprintf(stderr, "error: %s\n", message);		return;	}	pre = dbjie_get_errpfx(envinfo, jnienv);	report_errcall(jnienv, dbjie_get_errcall(envinfo), pre, message);}static void DbEnv_initialize(JNIEnv *jnienv, DB_ENV *dbenv,			     /*DbEnv*/ jobject jenv,			     /*DbErrcall*/ jobject jerrcall,			     int is_dbopen){	DB_ENV_JAVAINFO *envinfo;	envinfo = get_DB_ENV_JAVAINFO(jnienv, jenv);	DB_ASSERT(envinfo == NULL);	envinfo = dbjie_construct(jnienv, jenv, jerrcall, is_dbopen);	set_private_info(jnienv, name_DB_ENV, jenv, envinfo);	dbenv->set_errpfx(dbenv, (const char*)envinfo);	dbenv->set_errcall(dbenv, DbEnv_errcall_callback);	dbenv->api2_internal = envinfo;	set_private_dbobj(jnienv, name_DB_ENV, jenv, dbenv);}/* * This is called when this DbEnv was made on behalf of a Db * created directly (without a parent DbEnv), and the Db is * being closed.  We'll zero out the pointer to the DB_ENV, * since it is no longer valid, to prevent mistakes. */JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1notify_1db_1close  (JNIEnv *jnienv, /*DbEnv*/ jobject jthis){	DB_ENV_JAVAINFO *dbenvinfo;	set_private_dbobj(jnienv, name_DB_ENV, jthis, 0);	dbenvinfo = get_DB_ENV_JAVAINFO(jnienv, jthis);	if (dbenvinfo != NULL)		dbjie_dealloc(dbenvinfo, jnienv);}JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_feedback_1changed  (JNIEnv *jnienv, /*DbEnv*/ jobject jthis,   /*DbEnvFeedback*/ jobject jfeedback){	DB_ENV *dbenv;	DB_ENV_JAVAINFO *dbenvinfo;	dbenv = get_DB_ENV(jnienv, jthis);	dbenvinfo = get_DB_ENV_JAVAINFO(jnienv, jthis);	if (!verify_non_null(jnienv, dbenv) ||	    !verify_non_null(jnienv, dbenvinfo))		return;	dbjie_set_feedback_object(dbenvinfo, jnienv, dbenv, jfeedback);}JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1init  (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jobject /*DbErrcall*/ jerrcall,   jint flags){	int err;	DB_ENV *dbenv;	err = db_env_create(&dbenv, flags);	if (verify_return(jnienv, err, 0))		DbEnv_initialize(jnienv, dbenv, jthis, jerrcall, 0);}JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1init_1using_1db  (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jobject /*DbErrcall*/ jerrcall,   /*Db*/ jobject jdb){	DB_ENV *dbenv;	DB *db;	db = get_DB(jnienv, jdb);	dbenv = db->dbenv;	DbEnv_initialize(jnienv, dbenv, jthis, jerrcall, 0);}JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_open  (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jstring db_home,   jint flags, jint mode){	int err;	DB_ENV *dbenv;	LOCKED_STRING ls_home;	DB_ENV_JAVAINFO *dbenvinfo;	dbenv = get_DB_ENV(jnienv, jthis);	dbenvinfo = get_DB_ENV_JAVAINFO(jnienv, jthis);	if (!verify_non_null(jnienv, dbenv) ||	    !verify_non_null(jnienv, dbenvinfo))		return;	if (locked_string_get(&ls_home, jnienv, db_home) != 0)		goto out;	/* Java is assumed to be threaded. */	flags |= DB_THREAD;	err = dbenv->open(dbenv, ls_home.string, flags, mode);	verify_return(jnienv, err, EXCEPTION_FILE_NOT_FOUND); out:	locked_string_put(&ls_home, jnienv);}JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_remove  (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jstring db_home, jint flags){	DB_ENV *dbenv;	DB_ENV_JAVAINFO *dbenvinfo;	LOCKED_STRING ls_home;	int err = 0;	dbenv = get_DB_ENV(jnienv, jthis);	dbenvinfo = get_DB_ENV_JAVAINFO(jnienv, jthis);	if (!verify_non_null(jnienv, dbenv))		return;	if (locked_string_get(&ls_home, jnienv, db_home) != 0)		goto out;	err = dbenv->remove(dbenv, ls_home.string, flags);	set_private_dbobj(jnienv, name_DB_ENV, jthis, 0);	verify_return(jnienv, err, 0); out:	locked_string_put(&ls_home, jnienv);	if (dbenvinfo != NULL)		dbjie_dealloc(dbenvinfo, jnienv);}JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv__1close  (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint flags){	int err;	DB_ENV *dbenv;	DB_ENV_JAVAINFO *dbenvinfo;	dbenv = get_DB_ENV(jnienv, jthis);	dbenvinfo = get_DB_ENV_JAVAINFO(jnienv, jthis);	if (!verify_non_null(jnienv, dbenv))		return;	err = dbenv->close(dbenv, flags);	set_private_dbobj(jnienv, name_DB_ENV, jthis, 0);	if (dbenvinfo != NULL)		dbjie_dealloc(dbenvinfo, jnienv);	/* Throw an exception if the close failed. */	verify_return(jnienv, err, 0);}JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_dbremove  (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, /*DbTxn*/ jobject jtxn,   jstring name, jstring subdb, jint flags){	LOCKED_STRING ls_name, ls_subdb;	DB_ENV *dbenv;	DB_TXN *txn;	int err;	dbenv = get_DB_ENV(jnienv, jthis);	if (!verify_non_null(jnienv, dbenv))		return;	txn = get_DB_TXN(jnienv, jtxn);	if (locked_string_get(&ls_name, jnienv, name) != 0)		return;	if (locked_string_get(&ls_subdb, jnienv, subdb) != 0)		goto err1;	err = dbenv->dbremove(dbenv, txn, ls_name.string, ls_subdb.string,	    flags);	/* Throw an exception if the dbremove failed. */	verify_return(jnienv, err, 0);	locked_string_put(&ls_subdb, jnienv);err1:	locked_string_put(&ls_name, jnienv);}JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_dbrename  (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, /*DbTxn*/ jobject jtxn,   jstring name, jstring subdb, jstring newname, jint flags){	LOCKED_STRING ls_name, ls_subdb, ls_newname;	DB_ENV *dbenv;	DB_TXN *txn;	int err;	dbenv = get_DB_ENV(jnienv, jthis);	if (!verify_non_null(jnienv, dbenv))		return;	txn = get_DB_TXN(jnienv, jtxn);	if (locked_string_get(&ls_name, jnienv, name) != 0)		return;	if (locked_string_get(&ls_subdb, jnienv, subdb) != 0)		goto err2;	if (locked_string_get(&ls_newname, jnienv, newname) != 0)		goto err1;	err = dbenv->dbrename(dbenv, txn, ls_name.string, ls_subdb.string,	    ls_newname.string, flags);	/* Throw an exception if the dbrename failed. */	verify_return(jnienv, err, 0);	locked_string_put(&ls_newname, jnienv);err1:	locked_string_put(&ls_subdb, jnienv);err2:	locked_string_put(&ls_name, jnienv);}JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_err  (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jint ecode, jstring msg){	LOCKED_STRING ls_msg;	DB_ENV *dbenv;	dbenv = get_DB_ENV(jnienv, jthis);	if (!verify_non_null(jnienv, dbenv))		return;	if (locked_string_get(&ls_msg, jnienv, msg) != 0)		goto out;	dbenv->err(dbenv, ecode, "%s", ls_msg.string); out:	locked_string_put(&ls_msg, jnienv);}JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_errx  (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jstring msg){	LOCKED_STRING ls_msg;	DB_ENV *dbenv;	dbenv = get_DB_ENV(jnienv, jthis);	if (!verify_non_null(jnienv, dbenv))		return;	if (locked_string_get(&ls_msg, jnienv, msg) != 0)		goto out;	dbenv->errx(dbenv, "%s", ls_msg.string); out:	locked_string_put(&ls_msg, jnienv);}/*static*/JNIEXPORT jstring JNICALL Java_com_sleepycat_db_DbEnv_strerror  (JNIEnv *jnienv, jclass jthis_class, jint ecode){	const char *message;	COMPQUIET(jthis_class, NULL);	message = db_strerror(ecode);	return (get_java_string(jnienv, message));}JAVADB_METHOD(DbEnv_set_1cachesize,    (JAVADB_ARGS, jint gbytes, jint bytes, jint ncaches), DB_ENV,    set_cachesize, (c_this, gbytes, bytes, ncaches))JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1encrypt  (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jstring jpasswd, jint flags){	int err;	DB_ENV *dbenv;	LOCKED_STRING ls_passwd;	dbenv = get_DB_ENV(jnienv, jthis);	if (!verify_non_null(jnienv, dbenv))		return;	if (locked_string_get(&ls_passwd, jnienv, jpasswd) != 0)		goto out;	err = dbenv->set_encrypt(dbenv, ls_passwd.string, flags);	verify_return(jnienv, err, 0);out:	locked_string_put(&ls_passwd, jnienv);}JAVADB_METHOD(DbEnv_set_1flags,    (JAVADB_ARGS, jint flags, jboolean onoff), DB_ENV,    set_flags, (c_this, flags, onoff ? 1 : 0))JAVADB_METHOD(DbEnv_set_1mp_1mmapsize, (JAVADB_ARGS, jlong value), DB_ENV,    set_mp_mmapsize, (c_this, (size_t)value))JAVADB_METHOD(DbEnv_set_1tas_1spins, (JAVADB_ARGS, jint spins), DB_ENV,    set_tas_spins, (c_this, (u_int32_t)spins))JAVADB_METHOD(DbEnv_set_1timeout,    (JAVADB_ARGS, jlong timeout, jint flags), DB_ENV,    set_timeout, (c_this, (u_int32_t)timeout, flags))JNIEXPORT void JNICALL Java_com_sleepycat_db_DbEnv_set_1lk_1conflicts  (JNIEnv *jnienv, /*DbEnv*/ jobject jthis, jobjectArray array){	DB_ENV *dbenv;	DB_ENV_JAVAINFO *dbenvinfo;	int err;	jsize i, len;	u_char *newarr;	int bytesize;	dbenv = get_DB_ENV(jnienv, jthis);	dbenvinfo = get_DB_ENV_JAVAINFO(jnienv, jthis);	if (!verify_non_null(jnienv, dbenv) ||	    !verify_non_null(jnienv, dbenvinfo))		return;	len = (*jnienv)->GetArrayLength(jnienv, array);	bytesize = sizeof(u_char) * len * len;	if ((err = __os_malloc(dbenv, bytesize, &newarr)) != 0) {		if (!verify_return(jnienv, err, 0))			return;	}	for (i=0; i<len; i++) {		jobject subArray =			(*jnienv)->GetObjectArrayElement(jnienv, array, i);		(*jnienv)->GetByteArrayRegion(jnienv, (jbyteArray)subArray,					      0, len,					      (jbyte *)&newarr[i*len]);	}	dbjie_set_conflict(dbenvinfo, newarr, bytesize);	err = dbenv->set_lk_conflicts(dbenv, newarr, len);	verify_return(jnienv, err, 0);}JNIEXPORT jint JNICALL  Java_com_sleepycat_db_DbEnv_rep_1elect  (JNIEnv *jnienv, /* DbEnv */ jobject jthis, jint nsites, jint pri,   jint timeout){	DB_ENV *dbenv;	int err, id;	if (!verify_non_null(jnienv, jthis))		return (DB_EID_INVALID);	dbenv = get_DB_ENV(jnienv, jthis);	err = dbenv->rep_elect(dbenv, (int)nsites,	    (int)pri, (u_int32_t)timeout, &id);	verify_return(jnienv, err, 0);	return ((jint)id);}JNIEXPORT jint JNICALL  Java_com_sleepycat_db_DbEnv_rep_1process_1message  (JNIEnv *jnienv, /* DbEnv */ jobject jthis, /* Dbt */ jobject control,  /* Dbt */ jobject rec, /* RepProcessMessage */ jobject result){	DB_ENV *dbenv;	LOCKED_DBT cdbt, rdbt;	int err, envid;	if (!verify_non_null(jnienv, jthis) || !verify_non_null(jnienv, result))		return (-1);	dbenv = get_DB_ENV(jnienv, jthis);	err = 0;	/* The DBTs are always inputs. */	if (locked_dbt_get(&cdbt, jnienv, dbenv, control, inOp) != 0)		goto out2;	if (locked_dbt_get(&rdbt, jnienv, dbenv, rec, inOp) != 0)		goto out1;	envid = (*jnienv)->GetIntField(jnienv,	    result, fid_RepProcessMessage_envid);	err = dbenv->rep_process_message(dbenv, &cdbt.javainfo->dbt,	    &rdbt.javainfo->dbt, &envid);	if (err == DB_REP_NEWMASTER)		(*jnienv)->SetIntField(jnienv,		    result, fid_RepProcessMessage_envid, envid);	else if (!DB_RETOK_REPPMSG(err))		verify_return(jnienv, err, 0);out1:	locked_dbt_put(&rdbt, jnienv, dbenv);out2:	locked_dbt_put(&cdbt, jnienv, dbenv);	return (err);}JNIEXPORT void JNICALL  Java_com_sleepycat_db_DbEnv_rep_1start  (JNIEnv *jnienv, /* DbEnv */ jobject jthis, /* Dbt */ jobject cookie,   jint flags){	DB_ENV *dbenv;	DBT *dbtp;	LOCKED_DBT ldbt;	int err;	if (!verify_non_null(jnienv, jthis))		return;	dbenv = get_DB_ENV(jnienv, jthis);	/* The Dbt cookie may be null;  if so, pass in a NULL DBT. */	if (cookie != NULL) {		if (locked_dbt_get(&ldbt, jnienv, dbenv, cookie, inOp) != 0)			goto out;		dbtp = &ldbt.javainfo->dbt;	} else

⌨️ 快捷键说明

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