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

📄 gen_rec.awk

📁 这是linux下运行的mysql软件包,可用于linux 下安装 php + mysql + apach 的网络配置
💻 AWK
📖 第 1 页 / 共 2 页
字号:
	printf("\t\tmemset((u_int8_t *)logrec.data + logrec.size ") >> CFILE;	printf("- npad, 0, npad);\n\n") >> CFILE;	# Copy args into buffer	printf("\tbp = logrec.data;\n\n") >> CFILE;	printf("\tmemcpy(bp, &rectype, sizeof(rectype));\n") >> CFILE;	printf("\tbp += sizeof(rectype);\n\n") >> CFILE;	printf("\tmemcpy(bp, &txn_num, sizeof(txn_num));\n") >> CFILE;	printf("\tbp += sizeof(txn_num);\n\n") >> CFILE;	printf("\tmemcpy(bp, lsnp, sizeof(DB_LSN));\n") >> CFILE;	printf("\tbp += sizeof(DB_LSN);\n\n") >> CFILE;	for (i = 0; i < nvars; i ++) {		if (modes[i] == "ARG" || modes[i] == "WRLOCK" || \		    modes[i] == "WRLOCKNZ") {			printf("\tuinttmp = (u_int32_t)%s;\n", \			    vars[i]) >> CFILE;			printf("\tmemcpy(bp, &uinttmp, sizeof(uinttmp));\n") \			    >> CFILE;			printf("\tbp += sizeof(uinttmp);\n\n") >> CFILE;		} else if (modes[i] == "DBT" || modes[i] == "PGDBT") {			printf("\tif (%s == NULL) {\n", vars[i]) >> CFILE;			printf("\t\tzero = 0;\n") >> CFILE;			printf("\t\tmemcpy(bp, &zero, sizeof(u_int32_t));\n") \				>> CFILE;			printf("\t\tbp += sizeof(u_int32_t);\n") >> CFILE;			printf("\t} else {\n") >> CFILE;			printf("\t\tmemcpy(bp, &%s->size, ", vars[i]) >> CFILE;			printf("sizeof(%s->size));\n", vars[i]) >> CFILE;			printf("\t\tbp += sizeof(%s->size);\n", vars[i]) \			    >> CFILE;			printf("\t\tmemcpy(bp, %s->data, %s->size);\n", \			    vars[i], vars[i]) >> CFILE;			printf("\t\tbp += %s->size;\n\t}\n\n", \			    vars[i]) >> CFILE;		} else if (modes[i] == "DB") {			# We need to log a DB handle.  To do this, we			# actually just log its fileid;  from that, we'll			# be able to acquire an open handle at recovery time.			printf("\tDB_ASSERT(dbp->log_filename != NULL);\n") \			    >> CFILE;			printf("\tif (dbp->log_filename->id == ") >> CFILE;			printf("DB_LOGFILEID_INVALID &&\n\t    ") >> CFILE			printf("(ret = __dbreg_lazy_id(dbp)) != 0)\n") \			    >> CFILE;			printf("\t\treturn (ret);\n\n") >> CFILE;			printf("\tuinttmp = ") >> CFILE;			printf("(u_int32_t)dbp->log_filename->id;\n") >> CFILE;			printf("\tmemcpy(bp, &uinttmp, sizeof(uinttmp));\n") \			    >> CFILE;			printf("\tbp += sizeof(uinttmp);\n\n") >> CFILE;		} else { # POINTER			printf("\tif (%s != NULL)\n", vars[i]) >> CFILE;			printf("\t\tmemcpy(bp, %s, %s);\n", vars[i], \			    sizes[i]) >> CFILE;			printf("\telse\n") >> CFILE;			printf("\t\tmemset(bp, 0, %s);\n", sizes[i]) >> CFILE;			printf("\tbp += %s;\n\n", sizes[i]) >> CFILE;		}	}	# Error checking.  User code won't have DB_ASSERT available, but	# this is a pretty unlikely assertion anyway, so we just leave it out	# rather than requiring assert.h.	if (dbprivate) {		printf("\tDB_ASSERT((u_int32_t)") >> CFILE;		printf("(bp - (u_int8_t *)logrec.data) <= logrec.size);\n") \		    >> CFILE;	}	# Issue log call	# We didn't call the crypto alignment function when we created this	# log record (because we don't have the right header files to find	# the function), so we have to copy the log record to make sure the	# alignment is correct.	printf(\	    "\tret = dbenv->log_put(dbenv,\n\t   ret_lsnp, (DBT *)&logrec, ") \	    >> CFILE;	if (dbprivate) {		printf("flags | DB_NOCOPY);\n") >> CFILE;	} else {		printf("flags);\n") >> CFILE;	}	# Update the transactions last_lsn	printf("\tif (txnid != NULL && ret == 0)\n") >> CFILE;	printf("\t\ttxnid->last_lsn = *ret_lsnp;\n") >> CFILE;	# If out of disk space log writes may fail.  If we are debugging	# that print out which records did not make it to disk.	printf("#ifdef LOG_DIAGNOSTIC\n") >> CFILE	printf("\tif (ret != 0)\n") >> CFILE;	printf("\t\t(void)%s_print(dbenv,\n", funcname) >> CFILE;	printf("\t\t    (DBT *)&logrec, ret_lsnp, NULL, NULL);\n") >> CFILE	printf("#endif\n") >> CFILE	# Free and return	write_free("logrec.data", CFILE)	printf("\treturn (ret);\n}\n\n") >> CFILE;}function print_function() {	# Write the print function; function prototype	p[1] = sprintf("int %s_print", funcname);	p[2] = " ";	p[3] = "__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));";	p[4] = "";	proto_format(p);	# Function declaration	printf("int\n%s_print(dbenv, ", funcname) >> CFILE;	printf("dbtp, lsnp, notused2, notused3)\n") >> CFILE;	printf("\tDB_ENV *dbenv;\n") >> CFILE;	printf("\tDBT *dbtp;\n") >> CFILE;	printf("\tDB_LSN *lsnp;\n") >> CFILE;	printf("\tdb_recops notused2;\n\tvoid *notused3;\n{\n") >> CFILE;	# Locals	printf("\t%s_args *argp;\n", funcname) >> CFILE;	for (i = 0; i < nvars; i ++)		if (modes[i] == "DBT" || modes[i] == "PGDBT") {			printf("\tu_int32_t i;\n") >> CFILE			printf("\tint ch;\n") >> CFILE			break;		}	printf("\tint ret;\n\n") >> CFILE;	# Get rid of complaints about unused parameters.	printf("\tnotused2 = DB_TXN_ABORT;\n\tnotused3 = NULL;\n\n") >> CFILE;	# Call read routine to initialize structure	printf("\tif ((ret = %s_read(dbenv, dbtp->data, &argp)) != 0)\n", \	    funcname) >> CFILE;	printf("\t\treturn (ret);\n") >> CFILE;	# Print values in every record	printf("\t(void)printf(\n\t    \"[%%lu][%%lu]%s: ", funcname) >> CFILE;	printf("rec: %%lu txnid %%lx ") >> CFILE;	printf("prevlsn [%%lu][%%lu]\\n\",\n") >> CFILE;	printf("\t    (u_long)lsnp->file,\n") >> CFILE;	printf("\t    (u_long)lsnp->offset,\n") >> CFILE;	printf("\t    (u_long)argp->type,\n") >> CFILE;	printf("\t    (u_long)argp->txnid->txnid,\n") >> CFILE;	printf("\t    (u_long)argp->prev_lsn.file,\n") >> CFILE;	printf("\t    (u_long)argp->prev_lsn.offset);\n") >> CFILE;	# Now print fields of argp	for (i = 0; i < nvars; i ++) {		printf("\t(void)printf(\"\\t%s: ", vars[i]) >> CFILE;		if (modes[i] == "DBT" || modes[i] == "PGDBT") {			printf("\");\n") >> CFILE;			printf("\tfor (i = 0; i < ") >> CFILE;			printf("argp->%s.size; i++) {\n", vars[i]) >> CFILE;			printf("\t\tch = ((u_int8_t *)argp->%s.data)[i];\n", \			    vars[i]) >> CFILE;			printf("\t\tprintf(isprint(ch) || ch == 0x0a") >> CFILE;			printf(" ? \"%%c\" : \"%%#x \", ch);\n") >> CFILE;			printf("\t}\n\t(void)printf(\"\\n\");\n") >> CFILE;		} else if (types[i] == "DB_LSN *") {			printf("[%%%s][%%%s]\\n\",\n", \			    formats[i], formats[i]) >> CFILE;			printf("\t    (u_long)argp->%s.file,", \			    vars[i]) >> CFILE;			printf(" (u_long)argp->%s.offset);\n", \			    vars[i]) >> CFILE;		} else {			if (formats[i] == "lx")				printf("0x") >> CFILE;			printf("%%%s\\n\", ", formats[i]) >> CFILE;			if (formats[i] == "lx" || formats[i] == "lu")				printf("(u_long)") >> CFILE;			if (formats[i] == "ld")				printf("(long)") >> CFILE;			printf("argp->%s);\n", vars[i]) >> CFILE;		}	}	printf("\t(void)printf(\"\\n\");\n") >> CFILE;	write_free("argp", CFILE);	printf("\treturn (0);\n") >> CFILE;	printf("}\n\n") >> CFILE;}function read_function() {	# Write the read function; function prototype	p[1] = sprintf("int %s_read __P((DB_ENV *, void *,", funcname);	p[2] = " ";	p[3] = sprintf("%s_args **));", funcname);	p[4] = "";	proto_format(p);	# Function declaration	printf("int\n%s_read(dbenv, recbuf, argpp)\n", funcname) >> CFILE;	# Now print the parameters	printf("\tDB_ENV *dbenv;\n") >> CFILE;	printf("\tvoid *recbuf;\n") >> CFILE;	printf("\t%s_args **argpp;\n", funcname) >> CFILE;	# Function body and local decls	printf("{\n\t%s_args *argp;\n", funcname) >> CFILE;	if (is_uint == 1)		printf("\tu_int32_t uinttmp;\n") >> CFILE;	printf("\tu_int8_t *bp;\n") >> CFILE;	if (dbprivate) {		# We only use dbenv and ret in the private malloc case.		printf("\tint ret;\n\n") >> CFILE;	} else {		printf("\t/* Keep the compiler quiet. */\n") >> CFILE;		printf("\n\tdbenv = NULL;\n") >> CFILE;	}	malloc_size = sprintf("sizeof(%s_args) + sizeof(DB_TXN)", funcname)	write_malloc("argp", malloc_size, CFILE)	# Set up the pointers to the txnid.	printf("\targp->txnid = (DB_TXN *)&argp[1];\n\n") >> CFILE;	# First get the record type, prev_lsn, and txnid fields.	printf("\tbp = recbuf;\n") >> CFILE;	printf("\tmemcpy(&argp->type, bp, sizeof(argp->type));\n") >> CFILE;	printf("\tbp += sizeof(argp->type);\n\n") >> CFILE;	printf("\tmemcpy(&argp->txnid->txnid,  bp, ") >> CFILE;	printf("sizeof(argp->txnid->txnid));\n") >> CFILE;	printf("\tbp += sizeof(argp->txnid->txnid);\n\n") >> CFILE;	printf("\tmemcpy(&argp->prev_lsn, bp, sizeof(DB_LSN));\n") >> CFILE;	printf("\tbp += sizeof(DB_LSN);\n\n") >> CFILE;	# Now get rest of data.	for (i = 0; i < nvars; i ++) {		if (modes[i] == "DBT" || modes[i] == "PGDBT") {			printf("\tmemset(&argp->%s, 0, sizeof(argp->%s));\n", \			    vars[i], vars[i]) >> CFILE;			printf("\tmemcpy(&argp->%s.size, ", vars[i]) >> CFILE;			printf("bp, sizeof(u_int32_t));\n") >> CFILE;			printf("\tbp += sizeof(u_int32_t);\n") >> CFILE;			printf("\targp->%s.data = bp;\n", vars[i]) >> CFILE;			printf("\tbp += argp->%s.size;\n", vars[i]) >> CFILE;		} else if (modes[i] == "ARG" || modes[i] == "WRLOCK" || \		    modes[i] == "WRLOCKNZ" || modes[i] == "DB") {			printf("\tmemcpy(&uinttmp, bp, sizeof(uinttmp));\n") \			    >> CFILE;			printf("\targp->%s = (%s)uinttmp;\n", vars[i], \			    types[i]) >> CFILE;			printf("\tbp += sizeof(uinttmp);\n") >> CFILE;		} else { # POINTER			printf("\tmemcpy(&argp->%s, bp, ", vars[i]) >> CFILE;			printf(" sizeof(argp->%s));\n", vars[i]) >> CFILE;			printf("\tbp += sizeof(argp->%s);\n", vars[i]) >> CFILE;		}		printf("\n") >> CFILE;	}	# Free and return	printf("\t*argpp = argp;\n") >> CFILE;	printf("\treturn (0);\n}\n\n") >> CFILE;}function getpgnos_function() {	# Write the getpgnos function;  function prototype	p[1] = sprintf("int %s_getpgnos", funcname);	p[2] = " ";	p[3] = "__P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));";	p[4] = "";	proto_format(p);	# Function declaration	printf("int\n%s_getpgnos(dbenv, ", funcname) >> CFILE;	printf("rec, lsnp, notused1, summary)\n") >> CFILE;	printf("\tDB_ENV *dbenv;\n") >> CFILE;	printf("\tDBT *rec;\n") >> CFILE;	printf("\tDB_LSN *lsnp;\n") >> CFILE;	printf("\tdb_recops notused1;\n") >> CFILE;	printf("\tvoid *summary;\n{\n") >> CFILE;	# If there are no locks, return this fact.	if (nlocks == 0) {		printf("\tTXN_RECS *t;\n") >> CFILE;		printf("\tint ret;\n") >> CFILE;		printf("\tCOMPQUIET(rec, NULL);\n") >> CFILE;		printf("\tCOMPQUIET(notused1, DB_TXN_ABORT);\n") >> CFILE;		printf("\n\tt = (TXN_RECS *)summary;\n") >> CFILE;		printf("\n\tif ((ret = __rep_check_alloc(dbenv, ") >> CFILE;		printf("t, 1)) != 0)\n") >> CFILE;		printf("\t\treturn (ret);\n") >> CFILE;		printf("\n\tt->array[t->npages].flags = LSN_PAGE_NOLOCK;\n") \			>> CFILE;		printf("\tt->array[t->npages].lsn = *lsnp;\n") >> CFILE;		printf("\tt->array[t->npages].fid = DB_LOGFILEID_INVALID;\n") \			>> CFILE;		printf("\tmemset(&t->array[t->npages].pgdesc, 0,\n") >> CFILE;		printf("\t    sizeof(t->array[t->npages].pgdesc));\n") >> CFILE;		printf("\n\tt->npages++;\n") >> CFILE;		printf("\n") >> CFILE;		printf("\treturn (0);\n") >> CFILE;		printf("}\n\n") >> CFILE;		return;	}	# Locals	printf("\tDB *dbp;\n") >> CFILE;	printf("\tTXN_RECS *t;\n") >> CFILE;	printf("\t%s_args *argp;\n", funcname) >> CFILE;	printf("\tu_int32_t ret;\n\n") >> CFILE;	# Shut up compiler.	printf("\tCOMPQUIET(notused1, DB_TXN_ABORT);\n\n") >> CFILE;	printf("\targp = NULL;\n") >> CFILE;	printf("\tt = (TXN_RECS *)summary;\n\n") >> CFILE;	printf("\tif ((ret = %s_read(dbenv, rec->data, &argp)) != 0)\n", \		funcname) >> CFILE;	printf("\t\treturn (ret);\n") >> CFILE;	# Get file ID.	printf("\n\tif ((ret = __dbreg_id_to_db(dbenv,\n\t    ") >> CFILE;	printf("argp->txnid, &dbp, argp->fileid, 0)) != 0)\n") >> CFILE;	printf("\t\tgoto err;\n") >> CFILE;	printf("\n\tif ((ret = __rep_check_alloc(dbenv, t, %d)) != 0)\n", \		nlocks) >> CFILE;	printf("\t\tgoto err;\n\n") >> CFILE;	for (i = 1; i <= nlocks; i++) {		if (lock_if_zero[i]) {			indent = "\t";		} else {			indent = "\t\t";			printf("\tif (argp->%s != PGNO_INVALID) {\n", \				lock_pgnos[i]) >> CFILE;		}		printf("%st->array[t->npages].flags = 0;\n", indent) >> CFILE;		printf("%st->array[t->npages].fid = argp->fileid;\n", indent) \		    >> CFILE;		printf("%st->array[t->npages].lsn = *lsnp;\n", indent) >> CFILE;		printf("%st->array[t->npages].pgdesc.pgno = argp->%s;\n", \			indent, lock_pgnos[i]) >> CFILE;		printf("%st->array[t->npages].pgdesc.type = DB_PAGE_LOCK;\n", \			indent) >> CFILE;		printf("%smemcpy(t->array[t->npages].pgdesc.fileid, ", indent) \			>> CFILE;		printf("dbp->fileid,\n%s    DB_FILE_ID_LEN);\n", \			indent, indent) >> CFILE;		printf("%st->npages++;\n", indent) >> CFILE;		if (!lock_if_zero[i]) {			printf("\t}\n") >> CFILE;		}	}	printf("\nerr:\tif (argp != NULL)\n") >> CFILE;	write_free("argp", CFILE);	printf("\treturn (ret);\n") >> CFILE;	printf("}\n\n") >> CFILE;}# proto_format --#	Pretty-print a function prototype.function proto_format(p){	printf("/*\n") >> CFILE;	s = "";	for (i = 1; i in p; ++i)		s = s p[i];	t = " * PUBLIC: "	if (length(s) + length(t) < 80)		printf("%s%s", t, s) >> CFILE;	else {		split(s, p, "__P");		len = length(t) + length(p[1]);		printf("%s%s", t, p[1]) >> CFILE		n = split(p[2], comma, ",");		comma[1] = "__P" comma[1];		for (i = 1; i <= n; i++) {			if (len + length(comma[i]) > 70) {				printf("\n * PUBLIC:    ") >> CFILE;				len = 0;			}			printf("%s%s", comma[i], i == n ? "" : ",") >> CFILE;			len += length(comma[i]) + 2;		}	}	printf("\n */\n") >> CFILE;	delete p;}function write_malloc(ptr, size, file){	if (dbprivate) {		printf("\tif ((ret = ") >> file;		printf(\		    "__os_malloc(dbenv,\n\t    " size ", &" ptr ")) != 0)\n") \		    >> file		printf("\t\treturn (ret);\n\n") >> file;	} else {		printf("\tif ((" ptr " = malloc(" size ")) == NULL)\n") >> file		printf("\t\treturn (ENOMEM);\n\n") >> file	}}function write_free(ptr, file){	if (dbprivate) {		printf("\t__os_free(dbenv, " ptr ");\n") >> file	} else {		printf("\tfree(" ptr ");\n") >> file	}}

⌨️ 快捷键说明

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