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

📄 tcl_db_pkg.c

📁 这是linux下运行的mysql软件包,可用于linux 下安装 php + mysql + apach 的网络配置
💻 C
📖 第 1 页 / 共 5 页
字号:
				snprintf(msg, MSG_SIZE,				    "Put: Invalid txn: %s\n", arg);				Tcl_SetResult(interp, msg, TCL_VOLATILE);				result = TCL_ERROR;			}			break;		}		/*		 * 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 1 or 2 left) are	 * file names. If there is 1, a db name, if 2 a db and subdb name.	 */	if ((i != (objc - 1)) || (i != (objc - 2))) {		/*		 * 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';		}	} else {		Tcl_WrongNumArgs(interp, 2, objv, "?args? filename ?database?");		result = TCL_ERROR;		goto error;	}	if (envp == NULL) {		ret = db_create(&dbp, envp, 0);		if (ret) {			result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),			    "db_create");			goto error;		}		if (passwd != NULL) {			ret = dbp->set_encrypt(dbp, passwd, enc_flag);			result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),			    "set_encrypt");		}		if (set_flags != 0) {			ret = dbp->set_flags(dbp, set_flags);			result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),			    "set_flags");		}	}	/*	 * No matter what, we NULL out dbp after this call.	 */	_debug_check();	if (dbp == NULL)		ret = envp->dbremove(envp, txn, db, subdb, iflags);	else		ret = dbp->remove(dbp, db, subdb, 0);	result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "db remove");	dbp = NULL;error:	if (subdb)		__os_free(envp, subdb);	if (result == TCL_ERROR && dbp != NULL)		(void)dbp->close(dbp, 0);	return (result);}/* * bdb_DbRename -- *	Implements the DBENV->dbrename and DB->rename commands. */static intbdb_DbRename(interp, objc, objv)	Tcl_Interp *interp;		/* Interpreter */	int objc;			/* How many arguments? */	Tcl_Obj *CONST objv[];		/* The argument objects */{	static char *bdbmv[] = {		"-auto_commit",		"-encrypt",		"-encryptaes",		"-encryptany",		"-env",		"-txn",		"--",		NULL	};	enum bdbmv {		TCL_DBMV_AUTOCOMMIT,		TCL_DBMV_ENCRYPT,		TCL_DBMV_ENCRYPT_AES,		TCL_DBMV_ENCRYPT_ANY,		TCL_DBMV_ENV,		TCL_DBMV_TXN,		TCL_DBMV_ENDARG	};	DB *dbp;	DB_ENV *envp;	DB_TXN *txn;	u_int32_t enc_flag, iflags, set_flags;	int endarg, i, newlen, optindex, result, ret, subdblen;	u_char *subdbtmp;	char *arg, *db, msg[MSG_SIZE], *newname, *passwd, *subdb;	db = newname = 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,			3, objv, "?args? filename ?database? ?newname?");		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], bdbmv,		    "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 bdbmv)optindex) {		case TCL_DBMV_AUTOCOMMIT:			iflags |= DB_AUTO_COMMIT;			_debug_check();			break;		case TCL_DBMV_ENCRYPT:			set_flags |= DB_ENCRYPT;			_debug_check();			break;		case TCL_DBMV_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_DBMV_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_DBMV_ENV:			arg = Tcl_GetStringFromObj(objv[i++], NULL);			envp = NAME_TO_ENV(arg);			if (envp == NULL) {				Tcl_SetResult(interp,				    "db rename: illegal environment",				    TCL_STATIC);				return (TCL_ERROR);			}			break;		case TCL_DBMV_ENDARG:			endarg = 1;			break;		case TCL_DBMV_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) {				snprintf(msg, MSG_SIZE,				    "Put: Invalid txn: %s\n", arg);				Tcl_SetResult(interp, msg, TCL_VOLATILE);				result = TCL_ERROR;			}			break;		}		/*		 * 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 2 or 3 left) are	 * file names. If there is 2, a file name, if 3 a file and db name.	 */	if ((i != (objc - 2)) || (i != (objc - 3))) {		/*		 * 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 - 2) {			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';		}		subdbtmp =		    Tcl_GetByteArrayFromObj(objv[i++], &newlen);		if ((ret = __os_malloc(envp, newlen + 1,		    &newname)) != 0) {			Tcl_SetResult(interp,			    db_strerror(ret), TCL_STATIC);			return (0);		}		memcpy(newname, subdbtmp, newlen);		newname[newlen] = '\0';	} else {		Tcl_WrongNumArgs(		    interp, 3, objv, "?args? filename ?database? ?newname?");		result = TCL_ERROR;		goto error;	}	if (envp == NULL) {		ret = db_create(&dbp, envp, 0);		if (ret) {			result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),			    "db_create");			goto error;		}		if (passwd != NULL) {			ret = dbp->set_encrypt(dbp, passwd, enc_flag);			result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),			    "set_encrypt");		}		if (set_flags != 0) {			ret = dbp->set_flags(dbp, set_flags);			result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),			    "set_flags");		}	}	/*	 * No matter what, we NULL out dbp after this call.	 */	if (dbp == NULL)		ret = envp->dbrename(envp, txn, db, subdb, newname, iflags);	else		ret = dbp->rename(dbp, db, subdb, newname, 0);	result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "db rename");	dbp = NULL;error:	if (subdb)		__os_free(envp, subdb);	if (newname)		__os_free(envp, newname);	if (result == TCL_ERROR && dbp != NULL)		(void)dbp->close(dbp, 0);	return (result);}#if CONFIG_TEST/* * bdb_DbVerify -- *	Implements the DB->verify command. */static intbdb_DbVerify(interp, objc, objv)	Tcl_Interp *interp;		/* Interpreter */	int objc;			/* How many arguments? */	Tcl_Obj *CONST objv[];		/* The argument objects */{	static char *bdbverify[] = {		"-encrypt",		"-encryptaes",		"-encryptany",		"-env",		"-errfile",		"-errpfx",		"--",		NULL	};	enum bdbvrfy {		TCL_DBVRFY_ENCRYPT,		TCL_DBVRFY_ENCRYPT_AES,		TCL_DBVRFY_ENCRYPT_ANY,		TCL_DBVRFY_ENV,		TCL_DBVRFY_ERRFILE,		TCL_DBVRFY_ERRPFX,		TCL_DBVRFY_ENDARG	};	DB_ENV *envp;	DB *dbp;	FILE *errf;	u_int32_t enc_flag, flags, set_flags;	int endarg, i, optindex, result, ret;	char *arg, *db, *errpfx, *passwd;	envp = NULL;	dbp = NULL;	passwd = NULL;	result = TCL_OK;	db = errpfx = NULL;	errf = NULL;	flags = endarg = 0;	enc_flag = set_flags = 0;	if (objc < 2) {		Tcl_WrongNumArgs(interp, 2, objv, "?args? filename");		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], bdbverify,		    "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 bdbvrfy)optindex) {		case TCL_DBVRFY_ENCRYPT:			set_flags |= DB_ENCRYPT;			_debug_check();			break;		case TCL_DBVRFY_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_DBVRFY_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_DBVRFY_ENV:			arg = Tcl_GetStringFromObj(objv[i++], NULL);			envp = NAME_TO_ENV(arg);			if (envp == NULL) {				Tcl_SetResult(interp,				    "db verify: illegal environment",				    TCL_STATIC);				result = TCL_ERROR;				break;			}			break;		case TCL_DBVRFY_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 (errf != NULL)				fclose(errf);			errf = fopen(arg, "a");			break;		case TCL_DBVRFY_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 (errpfx != NULL)				__os_free(envp, errpfx);			if ((ret = __os_strdup(NULL, arg, &errpfx)) != 0) {				result = _ReturnSetup(interp, ret,				    DB_RETOK_STD(ret), "__os_strdup");				break;			}			break;		case TCL_DBVRFY_ENDARG:			endarg = 1;			break;		}		/*		 * 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;	/*	 * The remaining arg is the db filename.	 */	if (i == (objc - 1))		db = Tcl_GetStringFromObj(objv[i++], NULL);	else {		Tcl_WrongNumArgs(interp, 2, objv, "?args? filename");		result = TCL_ERROR;		goto error;	}	ret = db_create(&dbp, envp, 0);	if (ret) {		result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),		    "db_create");		goto error;	}	if (passwd != NULL) {		ret = dbp->set_encrypt(dbp, passwd, enc_flag);		result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),		    "set_encrypt");	}	if (set_flags != 0) {		ret = dbp->set_flags(dbp, set_flags);		result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret),		    "set_flags");	}	if (errf != NULL)		dbp->set_errfile(dbp, errf);	if (errpfx != NULL)		dbp->set_errpfx(dbp, errpfx);	ret = dbp->verify(dbp, db, NULL, NULL, flags);	result = _ReturnSetup(interp, ret, DB_RETOK_STD(ret), "db verify");error:	if (errf != NULL)		fclose(errf);	if (errpfx != NULL)		__os_free(envp, errpfx);	if (dbp)		(void)dbp->close(dbp, 0);	return (result);}#endif/* * bdb_Version -- *	Implements the version command. */static intbdb_Version(interp, objc, objv)	Tcl_Interp *interp;		/* Interpreter */	int objc;			/* How many arguments? */	Tcl_Obj *CONST objv[];		/* The argument objects */{	static char *bdbver[] = {		"-string", NULL	};	enum bdbver {		TCL_VERSTRING	};	int i, optindex, maj, min, patch, result, string, verobjc;	char *arg, *v;	Tcl_Obj *res, *verobjv[3];	result = TCL_OK;	string = 0;	if (objc < 2) {		Tcl_WrongNumArgs(interp, 2, objv, "?args?");		return (TCL_ERROR);	}	/*	 * We must first parse for the environment flag, since t

⌨️ 快捷键说明

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