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

📄 print.c

📁 DHCP服务器源码
💻 C
📖 第 1 页 / 共 2 页
字号:
		rv = strlen (s);		if (rv >= len)			rv = len - 1;		strncpy (buf, s, rv);		buf [rv] = 0;		return rv;	      case expr_encapsulate:		rv = 13;		strcpy (buf, "(encapsulate ");		rv += expr -> data.encapsulate.len;		if (rv + 2 > len)			rv = len - 2;		strncpy (buf,			 (const char *)expr -> data.encapsulate.data, rv - 13);		buf [rv++] = ')';		buf [rv++] = 0;		break;	      case expr_extract_int8:		if (len > 7) {			rv = 6;			strcpy (buf, "(int8 ");			rv += print_subexpression (expr -> data.extract_int,						   buf + rv, len - rv - 1);			buf [rv++] = ')';			buf [rv] = 0;			return rv;		}		break;	      case expr_extract_int16:		if (len > 8) {			rv = 7;			strcpy (buf, "(int16 ");			rv += print_subexpression (expr -> data.extract_int,						   buf + rv, len - rv - 1);			buf [rv++] = ')';			buf [rv] = 0;			return rv;		}		break;	      case expr_extract_int32:		if (len > 8) {			rv = 7;			strcpy (buf, "(int32 ");			rv += print_subexpression (expr -> data.extract_int,						   buf + rv, len - rv - 1);			buf [rv++] = ')';			buf [rv] = 0;			return rv;		}		break;	      case expr_encode_int8:		if (len > 7) {			rv = 6;			strcpy (buf, "(to-int8 ");			rv += print_subexpression (expr -> data.encode_int,						   buf + rv, len - rv - 1);			buf [rv++] = ')';			buf [rv] = 0;			return rv;		}		break;	      case expr_encode_int16:		if (len > 8) {			rv = 7;			strcpy (buf, "(to-int16 ");			rv += print_subexpression (expr -> data.encode_int,						   buf + rv, len - rv - 1);			buf [rv++] = ')';			buf [rv] = 0;			return rv;		}		break;	      case expr_encode_int32:		if (len > 8) {			rv = 7;			strcpy (buf, "(to-int32 ");			rv += print_subexpression (expr -> data.encode_int,						   buf + rv, len - rv - 1);			buf [rv++] = ')';			buf [rv] = 0;			return rv;		}		break;	      case expr_const_int:		s = print_dec_1 (expr -> data.const_int);		rv = strlen (s);		if (len > rv) {			strcpy (buf, s);			return rv;		}		break;	      case expr_exists:		rv = 10 + (strlen (expr -> data.option -> name) +			   strlen (expr -> data.option -> universe -> name));		if (len > rv) {			sprintf (buf, "(exists %s.%s)",				 expr -> data.option -> universe -> name,				 expr -> data.option -> name);			return rv;		}		break;	      case expr_variable_exists:		rv = 10 + strlen (expr -> data.variable);		if (len > rv) {			sprintf (buf, "(defined %s)", expr -> data.variable);			return rv;		}		break;	      case expr_variable_reference:		rv = strlen (expr -> data.variable);		if (len > rv) {			sprintf (buf, "%s", expr -> data.variable);			return rv;		}		break;	      case expr_known:		s = "known";	      astring:		rv = strlen (s);		if (len > rv) {			strcpy (buf, s);			return rv;		}		break;	      case expr_leased_address:		s = "leased-address";		goto astring;	      case expr_client_state:		s = "client-state";		goto astring;	      case expr_host_decl_name:		s = "host-decl-name";		goto astring;	      case expr_lease_time:		s = "lease-time";		goto astring;	      case expr_static:		s = "static";		goto astring;	      case expr_filename:		s = "filename";		goto astring;	      case expr_sname:		s = "server-name";		goto astring;	      case expr_reverse:		if (len > 11) {			rv = 13;			strcpy (buf, "(reverse ");			rv += print_subexpression (expr -> data.reverse.width,						   buf + rv, len - rv - 2);			buf [rv++] = ' ';			rv += print_subexpression (expr -> data.reverse.buffer,						   buf + rv, len - rv - 1);			buf [rv++] = ')';			buf [rv] = 0;			return rv;		}		break;	      case expr_binary_to_ascii:		if (len > 5) {			rv = 9;			strcpy (buf, "(b2a ");			rv += print_subexpression (expr -> data.b2a.base,						   buf + rv, len - rv - 4);			buf [rv++] = ' ';			rv += print_subexpression (expr -> data.b2a.width,						   buf + rv, len - rv - 3);			buf [rv++] = ' ';			rv += print_subexpression (expr -> data.b2a.seperator,						   buf + rv, len - rv - 2);			buf [rv++] = ' ';			rv += print_subexpression (expr -> data.b2a.buffer,						   buf + rv, len - rv - 1);			buf [rv++] = ')';			buf [rv] = 0;			return rv;		}		break;	      case expr_dns_transaction:		rv = 10;		if (len < rv + 2) {			buf [0] = '(';			strcpy (&buf [1], "ns-update ");			while (len < rv + 2) {				rv += print_subexpression					(expr -> data.dns_transaction.car,					 buf + rv, len - rv - 2);				buf [rv++] = ' ';				expr = expr -> data.dns_transaction.cdr;			}			buf [rv - 1] = ')';			buf [rv] = 0;			return rv;		}		return 0;	      case expr_ns_delete:		s = "delete";		left = 4;		goto dodnsupd;	      case expr_ns_exists:		s = "exists";		left = 4;		goto dodnsupd;	      case expr_ns_not_exists:		s = "not_exists";		left = 4;		goto dodnsupd;	      case expr_ns_add:		s = "update";		left = 5;	      dodnsupd:		rv = strlen (s);		if (len > strlen (s) + 1) {			buf [0] = '(';			strcpy (buf + 1, s);			rv++;			buf [rv++] = ' ';			s = print_dec_1 (expr -> data.ns_add.rrclass);			if (len > rv + strlen (s) + left) {				strcpy (&buf [rv], s);				rv += strlen (&buf [rv]);			}			buf [rv++] = ' ';			left--;			s = print_dec_1 (expr -> data.ns_add.rrtype);			if (len > rv + strlen (s) + left) {				strcpy (&buf [rv], s);				rv += strlen (&buf [rv]);			}			buf [rv++] = ' ';			left--;			rv += print_subexpression				(expr -> data.ns_add.rrname,				 buf + rv, len - rv - left);			buf [rv++] = ' ';			left--;			rv += print_subexpression				(expr -> data.ns_add.rrdata,				 buf + rv, len - rv - left);			buf [rv++] = ' ';			left--;			rv += print_subexpression				(expr -> data.ns_add.ttl,				 buf + rv, len - rv - left);			buf [rv++] = ')';			buf [rv] = 0;			return rv;		}		break;	      case expr_null:		if (len > 6) {			strcpy (buf, "(null)");			return 6;		}		break;	      case expr_funcall:		rv = 12 + strlen (expr -> data.funcall.name);		if (len > rv + 1) {			strcpy (buf, "(funcall  ");			strcpy (buf + 9, expr -> data.funcall.name);			buf [rv++] = ' ';			rv += print_subexpression				(expr -> data.funcall.arglist, buf + rv,				 len - rv - 1);			buf [rv++] = ')';			buf [rv] = 0;			return rv;		}		break;	      case expr_arg:		rv = print_subexpression (expr -> data.arg.val, buf, len);		if (expr -> data.arg.next && rv + 2 < len) {			buf [rv++] = ' ';			rv += print_subexpression (expr -> data.arg.next,						   buf, len);			if (rv + 1 < len)				buf [rv++] = 0;			return rv;		}		break;	      case expr_function:		rv = 9;		if (len > rv + 1) {			struct string_list *foo;			strcpy (buf, "(function");			for (foo = expr -> data.func -> args;			     foo; foo = foo -> next) {				if (len > rv + 2 + strlen (foo -> string)) {					buf [rv - 1] = ' ';					strcpy (&buf [rv], foo -> string);					rv += strlen (foo -> string);				}			}			buf [rv] = ')';			buf [rv++] = 0;			return rv;		}	}	return 0;}void print_expression (name, expr)	const char *name;	struct expression *expr;{	char buf [1024];	print_subexpression (expr, buf, sizeof buf);	log_info ("%s: %s", name, buf);}int token_print_indent_concat (FILE *file, int col,  int indent,			       const char *prefix, 			       const char *suffix, ...){	va_list list;	char *buf;	unsigned len;	char *s, *t, *u;	va_start (list, suffix);	s = va_arg (list, char *);	len = 0;	while (s) {		len += strlen (s);		s = va_arg (list, char *);	}	va_end (list);	t = dmalloc (len + 1, MDL);	if (!t)		log_fatal ("token_print_indent: no memory for copy buffer");	va_start (list, suffix);	s = va_arg (list, char *);	u = t;	while (s) {		len = strlen (s);		strcpy (u, s);		u += len;	}	va_end (list);		len = token_print_indent (file, col, indent,				  prefix, suffix, t);	dfree (t, MDL);	return col;}int token_indent_data_string (FILE *file, int col, int indent,			      const char *prefix, const char *suffix,			      struct data_string *data){	int i;	char *buf;	char obuf [3];	/* See if this is just ASCII. */	for (i = 0; i < data -> len; i++)		if (!isascii (data -> data [i]) ||		    !isprint (data -> data [i]))			break;	/* If we have a purely ASCII string, output it as text. */	if (i == data -> len) {		char *buf = dmalloc (data -> len + 3, MDL);		if (buf) {			buf [0] = '"';			memcpy (buf + 1, data -> data, data -> len);			buf [data -> len + 1] = '"';			buf [data -> len + 2] = 0;			i = token_print_indent (file, col, indent,						prefix, suffix, buf);			dfree (buf, MDL);			return i;		}	}	for (i = 0; i < data -> len; i++) {		sprintf (obuf, "%2.2x", data -> data [i]);		col = token_print_indent (file, col, indent,					  i == 0 ? prefix : "",					  (i + 1 == data -> len					   ? suffix					   : ""), obuf);		if (i + 1 != data -> len)			col = token_print_indent (file, col, indent,						  prefix, suffix, ":");	}	return col;}int token_print_indent (FILE *file, int col, int indent,			const char *prefix,			const char *suffix, const char *buf){	int len = strlen (buf) + strlen (prefix);	if (col + len > 79) {		if (indent + len < 79) {			indent_spaces (file, indent);			col = indent;		} else {			indent_spaces (file, col);			col = len > 79 ? 0 : 79 - len - 1;		}	} else if (prefix && *prefix) {		fputs (prefix, file);		col += strlen (prefix);	}	fputs (buf, file);	col += len;	if (suffix && *suffix) {		if (col + strlen (suffix) > 79) {			indent_spaces (file, indent);			col = indent;		} else {			fputs (suffix, file);			col += strlen (suffix);		}	}	return col;}void indent_spaces (FILE *file, int indent){	int i;	fputc ('\n', file);	for (i = 0; i < indent; i++)		fputc (' ', file);}#if defined (NSUPDATE)void print_dns_status (int status, ns_updque *uq){	char obuf [1024];	char *s = &obuf [0], *end = &obuf [1022];	ns_updrec *u;	int position;	int ttlp;	const char *predicate = "if", *en, *op;	int errorp;	for (u = ISC_LIST_HEAD (*uq); u; u = ISC_LIST_NEXT (u, r_link)) {		ttlp = 0;		switch (u -> r_opcode)		{		      case NXRRSET:			op = "rrset doesn't exist";			position = 1;			break;		      case YXRRSET:			op = "rrset exists";			position = 1;			break;		      case NXDOMAIN:			op = "domain doesn't exist";			position = 1;			break;		      case YXDOMAIN:			op = "domain exists";			position = 1;			break;		      case ADD:			op = "add";			position = 0;			ttlp = 1;			break;		      case DELETE:			op = "delete";			position = 0;			break;		      default:			op = "unknown";			position = 0;			break;		}		if (!position) {			if (s != &obuf [0] && s + 1 < end)				*s++ = ' ';			if (s + strlen (op) < end) {				strcpy (s, op);				s += strlen (s);			}		} else {			if (s != &obuf [0] && s + 1 < end)				*s++ = ' ';			if (s + strlen (predicate) < end) {				strcpy (s, predicate);				s += strlen (s);			}			predicate = "and";		}		if (u -> r_dname) {			if (s + 1 < end)				*s++ = ' ';			if (s + strlen (u -> r_dname) < end) {				strcpy (s, u -> r_dname);				s += strlen (s);			}		}		if (ttlp) {			if (s + 1 < end)				*s++ = ' ';			/* 27 is as big as a ttl can get. */			if (s + 27 < end) {				sprintf (s, "%lu",					 (unsigned long)(u -> r_ttl));				s += strlen (s);			}		}		switch (u -> r_class) {		      case C_IN:			en = "IN";			break;		      case C_CHAOS:			en = "CHAOS";			break;		      case C_HS:			en = "HS";			break;		      default:			en = "UNKNOWN";			break;		}		if (s + strlen (en) < end) {			if (s + 1 < end)				*s++ = ' ';			strcpy (s, en);			s += strlen (en);		}		switch (u -> r_type) {		      case T_A:			en = "A";			break;		      case T_PTR:			en = "PTR";			break;		      case T_MX:			en = "MX";			break;		      case T_TXT:			en = "TXT";			break;		      case T_KEY:			en = "KEY";			break;		      case T_CNAME:			en = "CNAME";			break;		      default:			en = "UNKNOWN";			break;		}		if (s + strlen (en) < end) {			if (s + 1 < end)				*s++ = ' ';			strcpy (s, en);			s += strlen (en);		}		if (u -> r_data) {			if (s + 1 < end)				*s++ = ' ';			if (u -> r_type == T_TXT) {				if (s + 1 < end)					*s++ = '"';			}			if(u->r_type == T_KEY) {			  strcat(s, "<keydata>");			  s+=strlen("<keydata>");			}			else {  			  if (s + u -> r_size < end) {			    memcpy (s, u -> r_data, u -> r_size);			    s += u -> r_size;			    if (u -> r_type == T_TXT) {			      if (s + 1 < end)				*s++ = '"';			    }			  }			}		}		if (position) {			if (s + 1 < end)				*s++ = ' ';			if (s + strlen (op) < end) {				strcpy (s, op);				s += strlen (s);			}		}		if (u == ISC_LIST_TAIL (*uq))			break;	}	if (s == &obuf [0]) {		strcpy (s, "empty update");		s += strlen (s);	}	if (status == NOERROR)		errorp = 0;	else		errorp = 1;	en = isc_result_totext (status);#if 0	switch (status) {	      case -1:		en = "resolver failed";		break;	      case FORMERR:		en = "format error";		break;	      case NOERROR:		en = "succeeded";		errorp = 0;		break;	      case NOTAUTH:		en = "not authorized";		break;	      case NOTIMP:		en = "not implemented";		break;	      case NOTZONE:		en = "not a single valid zone";		break;	      case NXDOMAIN:		en = "no such domain";		break;	      case NXRRSET:		en = "no such record";		break;	      case REFUSED:		en = "refused";		break;	      case SERVFAIL:		en = "server failed";		break;	      case YXDOMAIN:		en = "domain exists";		break;	      case YXRRSET:		en = "record exists";		break;	      default:		en = "unknown error";		break;	}#endif	if (s + 2 < end) {		*s++ = ':';		*s++ = ' ';	}	if (s + strlen (en) < end) {		strcpy (s, en);		s += strlen (en);	}	if (s + 1 < end)		*s++ = '.';	*s++ = 0;	if (errorp)		log_error ("%s", obuf);	else		log_info ("%s", obuf);}#endif /* NSUPDATE */

⌨️ 快捷键说明

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