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

📄 gen_rec.awk

📁 这是国外的resip协议栈
💻 AWK
📖 第 1 页 / 共 3 页
字号:
		}		# 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\n") >> CFILE		# Free and return		if (dbprivate) {			printf("#ifdef DIAGNOSTIC\n") >> CFILE			write_free("\t", "logrec.data", CFILE)			printf("#else\n") >> CFILE			printf("\tif (is_durable || txnid == NULL)\n") >> CFILE;			write_free("\t\t", "logrec.data", CFILE)			printf("#endif\n") >> CFILE		} else {			write_free("\t", "logrec.data", CFILE)		}	} else {		printf("\t*lenp = (u_int32_t)(bp - buf);\n\n") >> CFILE	}	printf("\treturn (ret);\n}\n\n") >> CFILE;}# If we're logging a DB handle, make sure we have a log# file ID for it.function db_handle_id_function(modes, n){	for (i = 0; i < n; i++)		if (modes[i] == "DB") {			# We actually log the DB handle's fileid; from			# that ID we're 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;			break;		}}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, PFILE);	# Function declaration	printf("int\n%s_print(dbenv, ", funcname) >> PFILE;	printf("dbtp, lsnp, notused2, notused3)\n") >> PFILE;	printf("\tDB_ENV *dbenv;\n") >> PFILE;	printf("\tDBT *dbtp;\n") >> PFILE;	printf("\tDB_LSN *lsnp;\n") >> PFILE;	printf("\tdb_recops notused2;\n\tvoid *notused3;\n{\n") >> PFILE;	# Locals	printf("\t%s_args *argp;\n", funcname) >> PFILE;	for (i = 0; i < nvars; i ++)		if (modes[i] == "TIME") {			printf("\tstruct tm *lt;\n") >> PFILE			printf("\ttime_t timeval;\n") >> PFILE			break;		}	for (i = 0; i < nvars; i ++)		if (modes[i] == "DBT" || modes[i] == "PGDBT") {			printf("\tu_int32_t i;\n") >> PFILE			printf("\tint ch;\n") >> PFILE			break;		}	printf("\tint ret;\n\n") >> PFILE;	# Get rid of complaints about unused parameters.	printf("\tnotused2 = DB_TXN_ABORT;\n\tnotused3 = NULL;\n\n") >> PFILE;	# Call read routine to initialize structure	printf("\tif ((ret = %s_read(dbenv, dbtp->data, &argp)) != 0)\n", \	    funcname) >> PFILE;	printf("\t\treturn (ret);\n") >> PFILE;	# Print values in every record	printf("\t(void)printf(\n\t    \"[%%lu][%%lu]%s%%s: ",\	     funcname) >> PFILE;	printf("rec: %%lu txnid %%lx ") >> PFILE;	printf("prevlsn [%%lu][%%lu]\\n\",\n") >> PFILE;	printf("\t    (u_long)lsnp->file,\n") >> PFILE;	printf("\t    (u_long)lsnp->offset,\n") >> PFILE;	printf("\t    (argp->type & DB_debug_FLAG) ? \"_debug\" : \"\",\n") \	     >> PFILE;	printf("\t    (u_long)argp->type,\n") >> PFILE;	printf("\t    (u_long)argp->txnid->txnid,\n") >> PFILE;	printf("\t    (u_long)argp->prev_lsn.file,\n") >> PFILE;	printf("\t    (u_long)argp->prev_lsn.offset);\n") >> PFILE;	# Now print fields of argp	for (i = 0; i < nvars; i ++) {		if (modes[i] == "TIME") {			printf("\ttimeval = (time_t)argp->%s;\n",			    vars[i]) >> PFILE;			printf("\tlt = localtime(&timeval);\n") >> PFILE;			printf("\t(void)printf(\n\t    \"\\t%s: ",			    vars[i]) >> PFILE;		} else			printf("\t(void)printf(\"\\t%s: ", vars[i]) >> PFILE;		if (modes[i] == "DBT" || modes[i] == "PGDBT") {			printf("\");\n") >> PFILE;			printf("\tfor (i = 0; i < ") >> PFILE;			printf("argp->%s.size; i++) {\n", vars[i]) >> PFILE;			printf("\t\tch = ((u_int8_t *)argp->%s.data)[i];\n", \			    vars[i]) >> PFILE;			printf("\t\tprintf(isprint(ch) || ch == 0x0a") >> PFILE;			printf(" ? \"%%c\" : \"%%#x \", ch);\n") >> PFILE;			printf("\t}\n\t(void)printf(\"\\n\");\n") >> PFILE;		} else if (types[i] == "DB_LSN *") {			printf("[%%%s][%%%s]\\n\",\n", \			    formats[i], formats[i]) >> PFILE;			printf("\t    (u_long)argp->%s.file,", \			    vars[i]) >> PFILE;			printf(" (u_long)argp->%s.offset);\n", \			    vars[i]) >> PFILE;		} else if (modes[i] == "TIME") {			# Time values are displayed in two ways: the standard			# string returned by ctime, and in the input format			# expected by db_recover -t.			printf(\	    "%%%s (%%.24s, 20%%02lu%%02lu%%02lu%%02lu%%02lu.%%02lu)\\n\",\n", \			    formats[i]) >> PFILE;			printf("\t    (long)argp->%s, ", vars[i]) >> PFILE;			printf("ctime(&timeval),", vars[i]) >> PFILE;			printf("\n\t    (u_long)lt->tm_year - 100, ") >> PFILE;			printf("(u_long)lt->tm_mon+1,") >> PFILE;			printf("\n\t    (u_long)lt->tm_mday, ") >> PFILE;			printf("(u_long)lt->tm_hour,") >> PFILE;			printf("\n\t    (u_long)lt->tm_min, ") >> PFILE;			printf("(u_long)lt->tm_sec);\n") >> PFILE;		} else if (modes[i] == "LOCKS") {			printf("\\n\");\n") >> PFILE;			printf("\t__lock_list_print(dbenv, &argp->locks);\n") \				>> PFILE;		} else {			if (formats[i] == "lx")				printf("0x") >> PFILE;			printf("%%%s\\n\", ", formats[i]) >> PFILE;			if (formats[i] == "lx" || formats[i] == "lu")				printf("(u_long)") >> PFILE;			if (formats[i] == "ld")				printf("(long)") >> PFILE;			printf("argp->%s);\n", vars[i]) >> PFILE;		}	}	printf("\t(void)printf(\"\\n\");\n") >> PFILE;	write_free("\t", "argp", PFILE);	printf("\treturn (0);\n") >> PFILE;	printf("}\n\n") >> PFILE;}function read_function(){	# Write the read function; function prototype	if (not_buf)		p[1] = sprintf("int %s_read __P((DB_ENV *, void *,", funcname);	else		p[1] = sprintf("int %s_read __P((DB_ENV *, void *, void **,", \		    funcname);	p[2] = " ";	p[3] = sprintf("%s_args **));", funcname);	p[4] = "";	proto_format(p, CFILE);	# Function declaration	if (not_buf)		printf("int\n%s_read(dbenv, recbuf, argpp)\n", funcname) \		    >> CFILE;	else		printf(\		    "int\n%s_read(dbenv, recbuf, nextp, argpp)\n", funcname) \		    >> CFILE;	# Now print the parameters	printf("\tDB_ENV *dbenv;\n") >> CFILE;	printf("\tvoid *recbuf;\n") >> CFILE;	if (!not_buf)		printf("\tvoid **nextp;\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;	}	if (not_buf) {		malloc_size = sprintf("sizeof(%s_args) + sizeof(DB_TXN)", \		    funcname)	} else {		malloc_size = sprintf("sizeof(%s_args)", funcname)	}	write_malloc("\t", "argp", malloc_size, CFILE)	# Set up the pointers to the txnid.	printf("\tbp = recbuf;\n") >> CFILE;	if (not_buf) {		printf("\targp->txnid = (DB_TXN *)&argp[1];\n\n") >> CFILE;		# First get the record type, prev_lsn, and txnid fields.		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] == "LOCKS" || 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] == "TIME" ||		    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	if (!not_buf)		printf("\t*nextp = bp;\n") >> CFILE;	printf("\t*argpp = argp;\n") >> CFILE;	printf("\treturn (0);\n}\n\n") >> CFILE;}# proto_format --#	Pretty-print a function prototype.function proto_format(p, fp){	printf("/*\n") >> fp;	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) >> fp;	else {		split(s, p, "__P");		len = length(t) + length(p[1]);		printf("%s%s", t, p[1]) >> fp		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:    ") >> fp;				len = 0;			}			printf("%s%s", comma[i], i == n ? "" : ",") >> fp;			len += length(comma[i]) + 2;		}	}	printf("\n */\n") >> fp;	delete p;}function write_malloc(tab, ptr, size, file){	if (dbprivate) {		print(tab "if ((ret = __os_malloc(dbenv,") >> file		print(tab "    " size ", &" ptr ")) != 0)") >> file		print(tab "\treturn (ret);") >> file;	} else {		print(tab "if ((" ptr " = malloc(" size ")) == NULL)") >> file		print(tab "\treturn (ENOMEM);") >> file	}}function write_free(tab, ptr, file){	if (dbprivate) {		print(tab "__os_free(dbenv, " ptr ");") >> file	} else {		print(tab "free(" ptr ");") >> file	}}

⌨️ 快捷键说明

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