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

📄 asn1p_param.c

📁 RSA加密/解密算法源码 asn1c-0.9.12
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <assert.h>#include "asn1parser.h"/* * Construct a new empty parameters list. */asn1p_paramlist_t *asn1p_paramlist_new(int _lineno) {	asn1p_paramlist_t *pl;	pl = calloc(1, sizeof *pl);	if(pl) {		pl->_lineno = _lineno;	}	return pl;}voidasn1p_paramlist_free(asn1p_paramlist_t *pl) {	if(pl) {		if(pl->params) {			int i = pl->params_count;			while(i--) {				if(pl->params[i].governor)					asn1p_ref_free(pl->params[i].governor);				if(pl->params[i].argument)					free(pl->params[i].argument);				pl->params[i].governor = 0;				pl->params[i].argument = 0;			}			free(pl->params);			pl->params = 0;		}		free(pl);	}}intasn1p_paramlist_add_param(asn1p_paramlist_t *pl, asn1p_ref_t *gov, char *arg) {	if(!pl || !arg) {		errno = EINVAL;		return -1;	}	/*	 * Make sure there's enough space to insert a new element.	 */	if(pl->params_count == pl->params_size) {		int newsize = pl->params_size?pl->params_size<<2:4;		void *p;		p = realloc(pl->params,			newsize * sizeof(pl->params[0]));		if(p) {			pl->params = p;			pl->params_size = newsize;		} else {			return -1;		}	}	if(gov) {		pl->params[pl->params_count].governor = asn1p_ref_clone(gov);		if(pl->params[pl->params_count].governor == NULL) {			return -1;		}	} else {		pl->params[pl->params_count].governor = 0;	}	pl->params[pl->params_count].argument = strdup(arg);	if(pl->params[pl->params_count].argument) {		pl->params_count++;		return 0;	} else {		if(pl->params[pl->params_count].governor)			asn1p_ref_free(pl->params[pl->params_count].governor);		return -1;	}}asn1p_paramlist_t *asn1p_paramlist_clone(asn1p_paramlist_t *pl) {	asn1p_paramlist_t *newpl;	newpl = asn1p_paramlist_new(pl->_lineno);	if(newpl) {		int i;		for(i = 0; i < pl->params_count; i++) {			if(asn1p_paramlist_add_param(newpl,				pl->params[i].governor,				pl->params[i].argument			)) {				asn1p_paramlist_free(newpl);				newpl = NULL;				break;			}		}	}	return newpl;}

⌨️ 快捷键说明

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