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

📄 constraints.c

📁 RSA加密/解密算法源码 asn1c-0.9.12
💻 C
字号:
#include <asn_internal.h>#include <constraints.h>intasn_generic_no_constraint(asn_TYPE_descriptor_t *type_descriptor,	const void *struct_ptr, asn_app_consume_bytes_f *cb, void *key) {	(void)type_descriptor;	/* Unused argument */	(void)struct_ptr;	/* Unused argument */	(void)cb;	/* Unused argument */	(void)key;	/* Unused argument */	/* Nothing to check */	return 0;}intasn_generic_unknown_constraint(asn_TYPE_descriptor_t *type_descriptor,	const void *struct_ptr, asn_app_consume_bytes_f *cb, void *key) {	(void)type_descriptor;	/* Unused argument */	(void)struct_ptr;	/* Unused argument */	(void)cb;	/* Unused argument */	(void)key;	/* Unused argument */	/* Unknown how to check */	return 0;}struct __fill_errbuf_arg {	char  *errbuf;	size_t errlen;	size_t erroff;};static int__fill_errbuf(const void *buffer, size_t size, void *app_key) {	struct __fill_errbuf_arg *arg = (struct __fill_errbuf_arg *)app_key;	size_t avail = arg->errlen - arg->erroff;	if(avail > size)		avail = size + 1;	switch(avail) {	default:		memcpy(arg->errbuf + arg->erroff, buffer, avail - 1);		arg->erroff += avail - 1;	case 1:		arg->errbuf[arg->erroff] = '\0';	case 0:		return 0;	}}intasn_check_constraints(asn_TYPE_descriptor_t *type_descriptor,	const void *struct_ptr, char *errbuf, size_t *errlen) {	if(errlen) {		struct __fill_errbuf_arg arg;		int ret;		arg.errbuf = errbuf;		arg.errlen = *errlen;		arg.erroff = 0;			ret = type_descriptor->check_constraints(type_descriptor,			struct_ptr, __fill_errbuf, &arg);			if(ret == -1)			*errlen = arg.erroff;		return ret;	} else {		return type_descriptor->check_constraints(type_descriptor,			struct_ptr, 0, 0);	}}void_asn_i_log_error(asn_app_consume_bytes_f *cb, void *key, const char *fmt, ...) {	char buf[64];	char *p;	va_list ap;	ssize_t ret;	size_t len;	va_start(ap, fmt);	ret = vsnprintf(buf, sizeof(buf), fmt, ap);	va_end(ap);	if(ret < 0) {		/*		 * The libc on this system is broken.		 */		ret = sizeof("<broken vsnprintf>") - 1;		memcpy(buf, "<broken vsnprintf>", ret + 1);		/* Fall through */	}	if(ret < (ssize_t)sizeof(buf)) {		(void)cb(buf, ret, key);		return;	}	/*	 * More space required to hold the message.	 */	len = ret + 1;	p = (char *)alloca(len);	if(!p) return;	/* Can fail on !x86. */		va_start(ap, fmt);	ret = vsnprintf(p, len, fmt, ap);	va_end(ap);	if(ret < 0 || ret >= (ssize_t)len) {		ret = sizeof("<broken vsnprintf>") - 1;		memcpy(buf, "<broken vsnprintf>", ret + 1);		p = buf;	}	(void)cb(p, ret, key);}

⌨️ 快捷键说明

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