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

📄 tcl_db_pkg.c

📁 这是linux下运行的mysql软件包,可用于linux 下安装 php + mysql + apach 的网络配置
💻 C
📖 第 1 页 / 共 5 页
字号:
			if (txn == NULL) {				snprintf(msg, MSG_SIZE,				    "Put: Invalid txn: %s\n", arg);				Tcl_SetResult(interp, msg, TCL_VOLATILE);				result = TCL_ERROR;			}			break;		case TCL_DB_BTREE:			if (type != DB_UNKNOWN) {				Tcl_SetResult(interp,				    "Too many DB types specified", TCL_STATIC);				result = TCL_ERROR;				goto error;			}			type = DB_BTREE;			break;		case TCL_DB_HASH:			if (type != DB_UNKNOWN) {				Tcl_SetResult(interp,				    "Too many DB types specified", TCL_STATIC);				result = TCL_ERROR;				goto error;			}			type = DB_HASH;			break;		case TCL_DB_RECNO:			if (type != DB_UNKNOWN) {				Tcl_SetResult(interp,				    "Too many DB types specified", TCL_STATIC);				result = TCL_ERROR;				goto error;			}			type = DB_RECNO;			break;		case TCL_DB_QUEUE:			if (type != DB_UNKNOWN) {				Tcl_SetResult(interp,				    "Too many DB types specified", TCL_STATIC);				result = TCL_ERROR;				goto error;			}			type = DB_QUEUE;			break;		case TCL_DB_UNKNOWN:			if (type != DB_UNKNOWN) {				Tcl_SetResult(interp,				    "Too many DB types specified", TCL_STATIC);				result = TCL_ERROR;				goto error;			}			break;		case TCL_DB_CREATE:			open_flags |= DB_CREATE;			break;		case TCL_DB_EXCL:			open_flags |= DB_EXCL;			break;		case TCL_DB_RDONLY:			open_flags |= DB_RDONLY;			break;		case TCL_DB_TRUNCATE:			open_flags |= DB_TRUNCATE;			break;		case TCL_DB_MODE:			if (i >= objc) {				Tcl_WrongNumArgs(interp, 2, objv,				    "?-mode mode?");				result = TCL_ERROR;				break;			}			/*			 * Don't need to check result here because			 * if TCL_ERROR, the error message is already			 * set up, and we'll bail out below.  If ok,			 * the mode is set and we go on.			 */			result = Tcl_GetIntFromObj(interp, objv[i++], &mode);			break;		case TCL_DB_DUP:			set_flags |= DB_DUP;			break;		case TCL_DB_DUPSORT:			set_flags |= DB_DUPSORT;			break;		case TCL_DB_RECNUM:			set_flags |= DB_RECNUM;			break;		case TCL_DB_RENUMBER:			set_flags |= DB_RENUMBER;			break;		case TCL_DB_SNAPSHOT:			set_flags |= DB_SNAPSHOT;			break;		case TCL_DB_CHKSUM:			set_flags |= DB_CHKSUM_SHA1;			break;		case TCL_DB_ENCRYPT:			set_flags |= DB_ENCRYPT;			break;		case TCL_DB_ENCRYPT_AES:			/* Make sure we have an arg to check against! */			if (i >= objc) {				Tcl_WrongNumArgs(interp, 2, objv,				    "?-encryptaes passwd?");				result = TCL_ERROR;				break;			}			passwd = Tcl_GetStringFromObj(objv[i++], NULL);			_debug_check();			ret = (*dbp)->set_encrypt(*dbp, passwd, DB_ENCRYPT_AES);			result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),			    "set_encrypt");			break;		case TCL_DB_ENCRYPT_ANY:			/* Make sure we have an arg to check against! */			if (i >= objc) {				Tcl_WrongNumArgs(interp, 2, objv,				    "?-encryptany passwd?");				result = TCL_ERROR;				break;			}			passwd = Tcl_GetStringFromObj(objv[i++], NULL);			_debug_check();			ret = (*dbp)->set_encrypt(*dbp, passwd, 0);			result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),			    "set_encrypt");			break;		case TCL_DB_FFACTOR:			if (i >= objc) {				Tcl_WrongNumArgs(interp, 2, objv,				    "-ffactor density");				result = TCL_ERROR;				break;			}			result = _GetUInt32(interp, objv[i++], &uintarg);			if (result == TCL_OK) {				_debug_check();				ret = (*dbp)->set_h_ffactor(*dbp, uintarg);				result = _ReturnSetup(interp, ret,				    DB_RETOK_STD(ret), "set_h_ffactor");			}			break;		case TCL_DB_NELEM:			if (i >= objc) {				Tcl_WrongNumArgs(interp, 2, objv,				    "-nelem nelem");				result = TCL_ERROR;				break;			}			result = _GetUInt32(interp, objv[i++], &uintarg);			if (result == TCL_OK) {				_debug_check();				ret = (*dbp)->set_h_nelem(*dbp, uintarg);				result = _ReturnSetup(interp, ret,				    DB_RETOK_STD(ret), "set_h_nelem");			}			break;		case TCL_DB_DELIM:			if (i >= objc) {				Tcl_WrongNumArgs(interp, 2, objv,				    "-delim delim");				result = TCL_ERROR;				break;			}			result = Tcl_GetIntFromObj(interp, objv[i++], &intarg);			if (result == TCL_OK) {				_debug_check();				ret = (*dbp)->set_re_delim(*dbp, intarg);				result = _ReturnSetup(interp, ret,				    DB_RETOK_STD(ret), "set_re_delim");			}			break;		case TCL_DB_LEN:			if (i >= objc) {				Tcl_WrongNumArgs(interp, 2, objv,				    "-len length");				result = TCL_ERROR;				break;			}			result = _GetUInt32(interp, objv[i++], &uintarg);			if (result == TCL_OK) {				_debug_check();				ret = (*dbp)->set_re_len(*dbp, uintarg);				result = _ReturnSetup(interp, ret,				    DB_RETOK_STD(ret), "set_re_len");			}			break;		case TCL_DB_PAD:			if (i >= objc) {				Tcl_WrongNumArgs(interp, 2, objv,				    "-pad pad");				result = TCL_ERROR;				break;			}			result = Tcl_GetIntFromObj(interp, objv[i++], &intarg);			if (result == TCL_OK) {				_debug_check();				ret = (*dbp)->set_re_pad(*dbp, intarg);				result = _ReturnSetup(interp, ret,				    DB_RETOK_STD(ret), "set_re_pad");			}			break;		case TCL_DB_SOURCE:			if (i >= objc) {				Tcl_WrongNumArgs(interp, 2, objv,				    "-source file");				result = TCL_ERROR;				break;			}			arg = Tcl_GetStringFromObj(objv[i++], NULL);			_debug_check();			ret = (*dbp)->set_re_source(*dbp, arg);			result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),			    "set_re_source");			break;		case TCL_DB_EXTENT:			if (i >= objc) {				Tcl_WrongNumArgs(interp, 2, objv,				    "-extent size");				result = TCL_ERROR;				break;			}			result = _GetUInt32(interp, objv[i++], &uintarg);			if (result == TCL_OK) {				_debug_check();				ret = (*dbp)->set_q_extentsize(*dbp, uintarg);				result = _ReturnSetup(interp, ret,				    DB_RETOK_STD(ret), "set_q_extentsize");			}			break;		case TCL_DB_CACHESIZE:			result = Tcl_ListObjGetElements(interp, objv[i++],			    &myobjc, &myobjv);			if (result != TCL_OK)				break;			if (myobjc != 3) {				Tcl_WrongNumArgs(interp, 2, objv,				    "?-cachesize {gbytes bytes ncaches}?");				result = TCL_ERROR;				break;			}			result = _GetUInt32(interp, myobjv[0], &gbytes);			if (result != TCL_OK)				break;			result = _GetUInt32(interp, myobjv[1], &bytes);			if (result != TCL_OK)				break;			result = _GetUInt32(interp, myobjv[2], &ncaches);			if (result != TCL_OK)				break;			_debug_check();			ret = (*dbp)->set_cachesize(*dbp, gbytes, bytes,			    ncaches);			result = _ReturnSetup(interp, ret,			    DB_RETOK_STD(ret), "set_cachesize");			break;		case TCL_DB_PAGESIZE:			if (i >= objc) {				Tcl_WrongNumArgs(interp, 2, objv,				    "?-pagesize size?");				result = TCL_ERROR;				break;			}			result = Tcl_GetIntFromObj(interp, objv[i++], &intarg);			if (result == TCL_OK) {				_debug_check();				ret = (*dbp)->set_pagesize(*dbp,				    (size_t)intarg);				result = _ReturnSetup(interp, ret,				    DB_RETOK_STD(ret), "set pagesize");			}			break;		case TCL_DB_ERRFILE:			if (i >= objc) {				Tcl_WrongNumArgs(interp, 2, objv,				    "-errfile file");				result = TCL_ERROR;				break;			}			arg = Tcl_GetStringFromObj(objv[i++], NULL);			/*			 * If the user already set one, close it.			 */			if (errip->i_err != NULL)				fclose(errip->i_err);			errip->i_err = fopen(arg, "a");			if (errip->i_err != NULL) {				_debug_check();				(*dbp)->set_errfile(*dbp, errip->i_err);				set_err = 1;			}			break;		case TCL_DB_ERRPFX:			if (i >= objc) {				Tcl_WrongNumArgs(interp, 2, objv,				    "-errpfx prefix");				result = TCL_ERROR;				break;			}			arg = Tcl_GetStringFromObj(objv[i++], NULL);			/*			 * If the user already set one, free it.			 */			if (errip->i_errpfx != NULL)				__os_free(NULL, errip->i_errpfx);			if ((ret = __os_strdup((*dbp)->dbenv,			    arg, &errip->i_errpfx)) != 0) {				result = _ReturnSetup(interp, ret,				    DB_RETOK_STD(ret), "__os_strdup");				break;			}			if (errip->i_errpfx != NULL) {				_debug_check();				(*dbp)->set_errpfx(*dbp, errip->i_errpfx);				set_pfx = 1;			}			break;		case TCL_DB_ENDARG:			endarg = 1;			break;		} /* switch */		/*		 * If, at any time, parsing the args we get an error,		 * bail out and return.		 */		if (result != TCL_OK)			goto error;		if (endarg)			break;	}	if (result != TCL_OK)		goto error;	/*	 * Any args we have left, (better be 0, 1 or 2 left) are	 * file names.  If we have 0, then an in-memory db.  If	 * there is 1, a db name, if 2 a db and subdb name.	 */	if (i != objc) {		/*		 * Dbs must be NULL terminated file names, but subdbs can		 * be anything.  Use Strings for the db name and byte		 * arrays for the subdb.		 */		db = Tcl_GetStringFromObj(objv[i++], NULL);		if (i != objc) {			subdbtmp =			    Tcl_GetByteArrayFromObj(objv[i++], &subdblen);			if ((ret = __os_malloc(envp,			   subdblen + 1, &subdb)) != 0) {				Tcl_SetResult(interp, db_strerror(ret),				    TCL_STATIC);				return (0);			}			memcpy(subdb, subdbtmp, subdblen);			subdb[subdblen] = '\0';		}	}	if (set_flags) {		ret = (*dbp)->set_flags(*dbp, set_flags);		result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),		    "set_flags");		if (result == TCL_ERROR)			goto error;		/*		 * If we are successful, clear the result so that the		 * return from set_flags isn't part of the result.		 */		Tcl_ResetResult(interp);	}	/*	 * When we get here, we have already parsed all of our args and made	 * all our calls to set up the database.  Everything is okay so far,	 * no errors, if we get here.	 */	_debug_check();	/* Open the database. */	ret = (*dbp)->open(*dbp, txn, db, subdb, type, open_flags, mode);	result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "db open");error:	if (subdb)		__os_free(envp, subdb);	if (result == TCL_ERROR) {		(void)(*dbp)->close(*dbp, 0);		/*		 * If we opened and set up the error file in the environment		 * on this open, but we failed for some other reason, clean		 * up and close the file.		 *		 * XXX when err stuff isn't tied to env, change to use ip,		 * instead of envip.  Also, set_err is irrelevant when that		 * happens.  It will just read:		 * if (ip->i_err)		 *	fclose(ip->i_err);		 */		if (set_err && errip && errip->i_err != NULL) {			fclose(errip->i_err);			errip->i_err = NULL;		}		if (set_pfx && errip && errip->i_errpfx != NULL) {			__os_free(envp, errip->i_errpfx);			errip->i_errpfx = NULL;		}		*dbp = NULL;	}	return (result);}/* * bdb_DbRemove -- *	Implements the DB_ENV->remove and DB->remove command. */static intbdb_DbRemove(interp, objc, objv)	Tcl_Interp *interp;		/* Interpreter */	int objc;			/* How many arguments? */	Tcl_Obj *CONST objv[];		/* The argument objects */{	static char *bdbrem[] = {		"-auto_commit",		"-encrypt",		"-encryptaes",		"-encryptany",		"-env",		"-txn",		"--",		NULL	};	enum bdbrem {		TCL_DBREM_AUTOCOMMIT,		TCL_DBREM_ENCRYPT,		TCL_DBREM_ENCRYPT_AES,		TCL_DBREM_ENCRYPT_ANY,		TCL_DBREM_ENV,		TCL_DBREM_TXN,		TCL_DBREM_ENDARG	};	DB *dbp;	DB_ENV *envp;	DB_TXN *txn;	int endarg, i, optindex, result, ret, subdblen;	u_int32_t enc_flag, iflags, set_flags;	u_char *subdbtmp;	char *arg, *db, msg[MSG_SIZE], *passwd, *subdb;	db = subdb = NULL;	dbp = NULL;	endarg = 0;	envp = NULL;	iflags = enc_flag = set_flags = 0;	passwd = NULL;	result = TCL_OK;	subdbtmp = NULL;	txn = NULL;	if (objc < 2) {		Tcl_WrongNumArgs(interp, 2, objv, "?args? filename ?database?");		return (TCL_ERROR);	}	/*	 * We must first parse for the environment flag, since that	 * is needed for db_create.  Then create the db handle.	 */	i = 2;	while (i < objc) {		if (Tcl_GetIndexFromObj(interp, objv[i], bdbrem,		    "option", TCL_EXACT, &optindex) != TCL_OK) {			arg = Tcl_GetStringFromObj(objv[i], NULL);			if (arg[0] == '-') {				result = IS_HELP(objv[i]);				goto error;			} else				Tcl_ResetResult(interp);			break;		}		i++;		switch ((enum bdbrem)optindex) {		case TCL_DBREM_AUTOCOMMIT:			iflags |= DB_AUTO_COMMIT;			_debug_check();			break;		case TCL_DBREM_ENCRYPT:			set_flags |= DB_ENCRYPT;			_debug_check();			break;		case TCL_DBREM_ENCRYPT_AES:			/* Make sure we have an arg to check against! */			if (i >= objc) {				Tcl_WrongNumArgs(interp, 2, objv,				    "?-encryptaes passwd?");				result = TCL_ERROR;				break;			}			passwd = Tcl_GetStringFromObj(objv[i++], NULL);			enc_flag = DB_ENCRYPT_AES;			break;		case TCL_DBREM_ENCRYPT_ANY:			/* Make sure we have an arg to check against! */			if (i >= objc) {				Tcl_WrongNumArgs(interp, 2, objv,				    "?-encryptany passwd?");				result = TCL_ERROR;				break;			}			passwd = Tcl_GetStringFromObj(objv[i++], NULL);			enc_flag = 0;			break;		case TCL_DBREM_ENV:			arg = Tcl_GetStringFromObj(objv[i++], NULL);			envp = NAME_TO_ENV(arg);			if (envp == NULL) {				Tcl_SetResult(interp,				    "db remove: illegal environment",				    TCL_STATIC);				return (TCL_ERROR);			}			break;		case TCL_DBREM_ENDARG:			endarg = 1;			break;		case TCL_DBREM_TXN:			if (i >= objc) {				Tcl_WrongNumArgs(interp, 2, objv, "?-txn id?");				result = TCL_ERROR;				break;			}			arg = Tcl_GetStringFromObj(objv[i++], NULL);			txn = NAME_TO_TXN(arg);			if (txn == NULL) {

⌨️ 快捷键说明

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