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

📄 conf_def.c

📁 开源的ssl算法openssl,版本0.9.8H
💻 C
📖 第 1 页 / 共 2 页
字号:
			p++;			*p='\0';			if (!(v=(CONF_VALUE *)OPENSSL_malloc(sizeof(CONF_VALUE))))				{				CONFerr(CONF_F_DEF_LOAD_BIO,							ERR_R_MALLOC_FAILURE);				goto err;				}			if (psection == NULL) psection=section;			v->name=(char *)OPENSSL_malloc(strlen(pname)+1);			v->value=NULL;			if (v->name == NULL)				{				CONFerr(CONF_F_DEF_LOAD_BIO,							ERR_R_MALLOC_FAILURE);				goto err;				}			BUF_strlcpy(v->name,pname,strlen(pname)+1);			if (!str_copy(conf,psection,&(v->value),start)) goto err;			if (strcmp(psection,section) != 0)				{				if ((tv=_CONF_get_section(conf,psection))					== NULL)					tv=_CONF_new_section(conf,psection);				if (tv == NULL)					{					CONFerr(CONF_F_DEF_LOAD_BIO,					   CONF_R_UNABLE_TO_CREATE_NEW_SECTION);					goto err;					}				ts=(STACK_OF(CONF_VALUE) *)tv->value;				}			else				{				tv=sv;				ts=section_sk;				}#if 1			if (_CONF_add_string(conf, tv, v) == 0)				{				CONFerr(CONF_F_DEF_LOAD_BIO,							ERR_R_MALLOC_FAILURE);				goto err;				}#else			v->section=tv->section;				if (!sk_CONF_VALUE_push(ts,v))				{				CONFerr(CONF_F_DEF_LOAD_BIO,							ERR_R_MALLOC_FAILURE);				goto err;				}			vv=(CONF_VALUE *)lh_insert(conf->data,v);			if (vv != NULL)				{				sk_CONF_VALUE_delete_ptr(ts,vv);				OPENSSL_free(vv->name);				OPENSSL_free(vv->value);				OPENSSL_free(vv);				}#endif			v=NULL;			}		}	if (buff != NULL) BUF_MEM_free(buff);	if (section != NULL) OPENSSL_free(section);	return(1);err:	if (buff != NULL) BUF_MEM_free(buff);	if (section != NULL) OPENSSL_free(section);	if (line != NULL) *line=eline;	BIO_snprintf(btmp,sizeof btmp,"%ld",eline);	ERR_add_error_data(2,"line ",btmp);	if ((h != conf->data) && (conf->data != NULL))		{		CONF_free(conf->data);		conf->data=NULL;		}	if (v != NULL)		{		if (v->name != NULL) OPENSSL_free(v->name);		if (v->value != NULL) OPENSSL_free(v->value);		if (v != NULL) OPENSSL_free(v);		}	return(0);	}static void clear_comments(CONF *conf, char *p)	{	char *to;	to=p;	for (;;)		{		if (IS_FCOMMENT(conf,*p))			{			*p='\0';			return;			}		if (!IS_WS(conf,*p))			{			break;			}		p++;		}	for (;;)		{		if (IS_COMMENT(conf,*p))			{			*p='\0';			return;			}		if (IS_DQUOTE(conf,*p))			{			p=scan_dquote(conf, p);			continue;			}		if (IS_QUOTE(conf,*p))			{			p=scan_quote(conf, p);			continue;			}		if (IS_ESC(conf,*p))			{			p=scan_esc(conf,p);			continue;			}		if (IS_EOF(conf,*p))			return;		else			p++;		}	}static int str_copy(CONF *conf, char *section, char **pto, char *from)	{	int q,r,rr=0,to=0,len=0;	char *s,*e,*rp,*p,*rrp,*np,*cp,v;	BUF_MEM *buf;	if ((buf=BUF_MEM_new()) == NULL) return(0);	len=strlen(from)+1;	if (!BUF_MEM_grow(buf,len)) goto err;	for (;;)		{		if (IS_QUOTE(conf,*from))			{			q= *from;			from++;			while (!IS_EOF(conf,*from) && (*from != q))				{				if (IS_ESC(conf,*from))					{					from++;					if (IS_EOF(conf,*from)) break;					}				buf->data[to++]= *(from++);				}			if (*from == q) from++;			}		else if (IS_DQUOTE(conf,*from))			{			q= *from;			from++;			while (!IS_EOF(conf,*from))				{				if (*from == q)					{					if (*(from+1) == q)						{						from++;						}					else						{						break;						}					}				buf->data[to++]= *(from++);				}			if (*from == q) from++;			}		else if (IS_ESC(conf,*from))			{			from++;			v= *(from++);			if (IS_EOF(conf,v)) break;			else if (v == 'r') v='\r';			else if (v == 'n') v='\n';			else if (v == 'b') v='\b';			else if (v == 't') v='\t';			buf->data[to++]= v;			}		else if (IS_EOF(conf,*from))			break;		else if (*from == '$')			{			/* try to expand it */			rrp=NULL;			s= &(from[1]);			if (*s == '{')				q='}';			else if (*s == '(')				q=')';			else q=0;			if (q) s++;			cp=section;			e=np=s;			while (IS_ALPHA_NUMERIC(conf,*e))				e++;			if ((e[0] == ':') && (e[1] == ':'))				{				cp=np;				rrp=e;				rr= *e;				*rrp='\0';				e+=2;				np=e;				while (IS_ALPHA_NUMERIC(conf,*e))					e++;				}			r= *e;			*e='\0';			rp=e;			if (q)				{				if (r != q)					{					CONFerr(CONF_F_STR_COPY,CONF_R_NO_CLOSE_BRACE);					goto err;					}				e++;				}			/* So at this point we have			 * np which is the start of the name string which is			 *   '\0' terminated. 			 * cp which is the start of the section string which is			 *   '\0' terminated.			 * e is the 'next point after'.			 * r and rr are the chars replaced by the '\0'			 * rp and rrp is where 'r' and 'rr' came from.			 */			p=_CONF_get_string(conf,cp,np);			if (rrp != NULL) *rrp=rr;			*rp=r;			if (p == NULL)				{				CONFerr(CONF_F_STR_COPY,CONF_R_VARIABLE_HAS_NO_VALUE);				goto err;				}			BUF_MEM_grow_clean(buf,(strlen(p)+buf->length-(e-from)));			while (*p)				buf->data[to++]= *(p++);			/* Since we change the pointer 'from', we also have			   to change the perceived length of the string it			   points at.  /RL */			len -= e-from;			from=e;			/* In case there were no braces or parenthesis around			   the variable reference, we have to put back the			   character that was replaced with a '\0'.  /RL */			*rp = r;			}		else			buf->data[to++]= *(from++);		}	buf->data[to]='\0';	if (*pto != NULL) OPENSSL_free(*pto);	*pto=buf->data;	OPENSSL_free(buf);	return(1);err:	if (buf != NULL) BUF_MEM_free(buf);	return(0);	}static char *eat_ws(CONF *conf, char *p)	{	while (IS_WS(conf,*p) && (!IS_EOF(conf,*p)))		p++;	return(p);	}static char *eat_alpha_numeric(CONF *conf, char *p)	{	for (;;)		{		if (IS_ESC(conf,*p))			{			p=scan_esc(conf,p);			continue;			}		if (!IS_ALPHA_NUMERIC_PUNCT(conf,*p))			return(p);		p++;		}	}static char *scan_quote(CONF *conf, char *p)	{	int q= *p;	p++;	while (!(IS_EOF(conf,*p)) && (*p != q))		{		if (IS_ESC(conf,*p))			{			p++;			if (IS_EOF(conf,*p)) return(p);			}		p++;		}	if (*p == q) p++;	return(p);	}static char *scan_dquote(CONF *conf, char *p)	{	int q= *p;	p++;	while (!(IS_EOF(conf,*p)))		{		if (*p == q)			{			if (*(p+1) == q)				{				p++;				}			else				{				break;				}			}		p++;		}	if (*p == q) p++;	return(p);	}static void dump_value(CONF_VALUE *a, BIO *out)	{	if (a->name)		BIO_printf(out, "[%s] %s=%s\n", a->section, a->name, a->value);	else		BIO_printf(out, "[[%s]]\n", a->section);	}static IMPLEMENT_LHASH_DOALL_ARG_FN(dump_value, CONF_VALUE *, BIO *)static int def_dump(const CONF *conf, BIO *out)	{	lh_doall_arg(conf->data, LHASH_DOALL_ARG_FN(dump_value), out);	return 1;	}static int def_is_number(const CONF *conf, char c)	{	return IS_NUMBER(conf,c);	}static int def_to_int(const CONF *conf, char c)	{	return c - '0';	}

⌨️ 快捷键说明

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