diff options
author | Simon Josefsson <simon@josefsson.org> | 2004-12-10 15:29:51 +0000 |
---|---|---|
committer | Simon Josefsson <simon@josefsson.org> | 2004-12-10 15:29:51 +0000 |
commit | 10692f22de4e742c20af6b7af6b2b2a850ac7c4b (patch) | |
tree | ccdf054e1d9a428b79556917942446e834a62eb0 /lib/structure.c | |
parent | eb9f923a6fbf757e90647f8cd09e43fecb68f2bf (diff) | |
download | libtasn1-10692f22de4e742c20af6b7af6b2b2a850ac7c4b.tar.gz libtasn1-10692f22de4e742c20af6b7af6b2b2a850ac7c4b.tar.bz2 libtasn1-10692f22de4e742c20af6b7af6b2b2a850ac7c4b.zip |
Doc fix.
Diffstat (limited to 'lib/structure.c')
-rw-r--r-- | lib/structure.c | 200 |
1 files changed, 97 insertions, 103 deletions
diff --git a/lib/structure.c b/lib/structure.c index 97f11d4..d437a8c 100644 --- a/lib/structure.c +++ b/lib/structure.c @@ -1,15 +1,16 @@ /* * Copyright (C) 2002 Fabio Fiorina + * Copyright (C) 2004 Simon Josefsson * * This file is part of LIBASN1. * * The LIBTASN1 library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of + * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * @@ -39,7 +40,7 @@ extern char _asn1_identifierMissing[]; /******************************************************/ /* Function : _asn1_add_node_only */ -/* Description: creates a new NODE_ASN element. */ +/* Description: creates a new NODE_ASN element. */ /* Parameters: */ /* type: type of the new element (see TYPE_ */ /* and CONST_ constants). */ @@ -55,10 +56,10 @@ _asn1_add_node_only(unsigned int type) punt->left=NULL; punt->name=NULL; - punt->type=type; + punt->type=type; punt->value=NULL; punt->down=NULL; - punt->right=NULL; + punt->right=NULL; return punt; } @@ -75,22 +76,22 @@ _asn1_add_node_only(unsigned int type) node_asn * _asn1_find_left(node_asn *node) { - if((node==NULL) || (node->left==NULL) || + if((node==NULL) || (node->left==NULL) || (node->left->down==node)) return NULL; - return node->left; + return node->left; } asn1_retCode _asn1_create_static_structure(ASN1_TYPE pointer,char* output_file_name,char *vector_name) { - FILE *file; + FILE *file; node_asn *p; unsigned long t; file=fopen( output_file_name,"w"); - + if(file==NULL) return ASN1_FILE_NOT_FOUND; fprintf(file,"\n#include \"libtasn1.h\"\n\n"); @@ -103,13 +104,13 @@ _asn1_create_static_structure(ASN1_TYPE pointer,char* output_file_name,char *vec if(p->name) fprintf(file,"\"%s\",",p->name); else fprintf(file,"0,"); - + t=p->type; if(p->down) t|=CONST_DOWN; if(p->right) t|=CONST_RIGHT; - + fprintf(file,"%lu,",t); - + if(p->value) fprintf(file,"\"%s\"},\n",p->value); else fprintf(file,"0},\n"); @@ -145,26 +146,27 @@ _asn1_create_static_structure(ASN1_TYPE pointer,char* output_file_name,char *vec /** * asn1_array2tree - Creates the structures needed to manage the ASN1 definitions. * @array: specify the array that contains ASN.1 declarations - * @definitions: return the pointer to the structure created by *ARRAY ASN.1 declarations - * @errorDescription : return the error description. - * Description: + * @definitions: return the pointer to the structure created by + * *ARRAY ASN.1 declarations + * @errorDescription: return the error description. * - * Creates the structures needed to manage the ASN1 definitions. ARRAY is a vector created by - * 'asn1_parser_asn1_file_c' function. + * Creates the structures needed to manage the ASN.1 definitions. + * @array is a vector created by asn1_parser2array(). * * Returns: * - * ASN1_SUCCESS\: structure created correctly. + * ASN1_SUCCESS: Structure created correctly. * - * ASN1_ELEMENT_NOT_EMPTY\: *DEFINITIONS not ASN1_TYPE_EMPTY + * ASN1_ELEMENT_NOT_EMPTY: *@definitions not ASN1_TYPE_EMPTY. * - * ASN1_IDENTIFIER_NOT_FOUND\: in the file there is an identifier that is not defined (see ERRORDESCRIPTION for more information). + * ASN1_IDENTIFIER_NOT_FOUND: In the file there is an identifier that + * is not defined (see @errorDescription for more information). * - * ASN1_ARRAY_ERROR\: the array pointed by ARRAY is wrong. + * ASN1_ARRAY_ERROR: The array pointed by @array is wrong. **/ asn1_retCode asn1_array2tree(const ASN1_ARRAY_TYPE *array,ASN1_TYPE *definitions, - char *errorDescription) + char *errorDescription) { node_asn *p,*p_last=NULL; unsigned long k; @@ -182,7 +184,7 @@ asn1_array2tree(const ASN1_ARRAY_TYPE *array,ASN1_TYPE *definitions, p=_asn1_add_node(array[k].type&(~CONST_DOWN)); if(array[k].name) _asn1_set_name(p,array[k].name); if(array[k].value) _asn1_set_value(p,array[k].value, - strlen(array[k].value)+1); + strlen(array[k].value)+1); if(*definitions==NULL) *definitions=p; @@ -196,7 +198,7 @@ asn1_array2tree(const ASN1_ARRAY_TYPE *array,ASN1_TYPE *definitions, else{ while(1){ if(p_last==*definitions) break; - + p_last= _asn1_find_up(p_last); if(p_last==NULL) break; @@ -231,7 +233,7 @@ asn1_array2tree(const ASN1_ARRAY_TYPE *array,ASN1_TYPE *definitions, else errorDescription[0]=0; } - + if(result != ASN1_SUCCESS){ _asn1_delete_list_and_nodes(); *definitions=ASN1_TYPE_EMPTY; @@ -244,18 +246,17 @@ asn1_array2tree(const ASN1_ARRAY_TYPE *array,ASN1_TYPE *definitions, /** - * asn1_delete_structure - Deletes the structure pointed by *ROOT. + * asn1_delete_structure - Deletes the structure pointed by *ROOT. * @structure: pointer to the structure that you want to delete. - * Description: - * - * Deletes the structure *ROOT. - * At the end *ROOT is setted to ASN1_TYPE_EMPTY. - * + * + * Deletes the structure *@structure. At the end, *@structure is set + * to ASN1_TYPE_EMPTY. + * * Returns: * - * ASN1_SUCCESS\: everything OK + * ASN1_SUCCESS: Everything OK. * - * ASN1_ELEMENT_NOT_FOUND\: *root==ASN1_TYPE_EMPTY. + * ASN1_ELEMENT_NOT_FOUND: *@structure was ASN1_TYPE_EMPTY. * **/ asn1_retCode @@ -300,18 +301,18 @@ asn1_delete_structure(ASN1_TYPE *structure) /** - * asn1_delete_element - Deletes the element of a structure. - * @structure: pointer to the structure that contains the element you want to delete. + * asn1_delete_element - Deletes the element of a structure. + * @structure: pointer to the structure that contains the element you + * want to delete. * @element_name: element's name you want to delete. - * Description: - * - * Deletes the element named *element_name inside *structure. + * + * Deletes the element named *@element_name inside *@structure. * * Returns: * - * ASN1_SUCCESS\: everything OK + * ASN1_SUCCESS: Everything OK. * - * ASN1_ELEMENT_NOT_FOUND + * ASN1_ELEMENT_NOT_FOUND: The name element was not found. * **/ asn1_retCode @@ -327,7 +328,7 @@ asn1_delete_element(ASN1_TYPE structure,const char *element_name) p3=_asn1_find_left(source_node); if(!p3){ p3=_asn1_find_up(source_node); - if(p3) + if(p3) _asn1_set_down(p3,p2); else if(source_node->right) source_node->right->left=NULL; @@ -358,15 +359,15 @@ _asn1_copy_structure3(node_asn *source_node) if(p_s->name) _asn1_set_name(p_d,p_s->name); if(p_s->value){ switch(type_field(p_s->type)){ - case TYPE_OCTET_STRING: case TYPE_BIT_STRING: case TYPE_GENERALSTRING: - case TYPE_INTEGER: + case TYPE_OCTET_STRING: case TYPE_BIT_STRING: case TYPE_GENERALSTRING: + case TYPE_INTEGER: len2=-1; len=_asn1_get_length_der(p_s->value,&len2); _asn1_set_value(p_d,p_s->value,len+len2); break; default: tlen = strlen(p_s->value); - + if (tlen > 0) _asn1_set_value(p_d,p_s->value,tlen+1); } @@ -378,13 +379,13 @@ _asn1_copy_structure3(node_asn *source_node) if(move==DOWN){ if(p_s->down){ p_s=p_s->down; - p_d_prev=p_d; + p_d_prev=p_d; p_d=_asn1_add_node_only(p_s->type); _asn1_set_down(p_d_prev,p_d); } else move=RIGHT; } - + if(p_s==source_node) break; if(move==RIGHT){ @@ -412,18 +413,18 @@ _asn1_copy_structure2(node_asn *root,const char *source_name) node_asn *source_node; source_node=_asn1_find_node(root,source_name); - + return _asn1_copy_structure3(source_node); } -asn1_retCode +asn1_retCode _asn1_type_choice_config(node_asn *node) { node_asn *p,*p2,*p3,*p4; int move,tlen; - + if(node==NULL) return ASN1_ELEMENT_NOT_FOUND; p=node; @@ -463,32 +464,32 @@ _asn1_type_choice_config(node_asn *node) move=DOWN; } else move=RIGHT; - + if(move==DOWN){ if(p->down) p=p->down; else move=RIGHT; } - + if(p==node) {move=UP; continue;} - + if(move==RIGHT){ if(p->right) p=p->right; else move=UP; } if(move==UP) p=_asn1_find_up(p); } - + return ASN1_SUCCESS; } -asn1_retCode +asn1_retCode _asn1_expand_identifier(node_asn **node,node_asn *root) { node_asn *p,*p2,*p3; char name2[MAX_NAME_SIZE+2]; int move; - + if(node==NULL) return ASN1_ELEMENT_NOT_FOUND; p=*node; @@ -514,7 +515,7 @@ _asn1_expand_identifier(node_asn **node,node_asn *root) _asn1_set_right(p3,p2->down); _asn1_set_down(p2,p->down); } - + p3=_asn1_find_left(p); if(p3) _asn1_set_right(p3,p2); else{ @@ -541,14 +542,14 @@ _asn1_expand_identifier(node_asn **node,node_asn *root) move=DOWN; } else move=RIGHT; - + if(move==DOWN){ if(p->down) p=p->down; else move=RIGHT; } - + if(p==*node) {move=UP; continue;} - + if(move==RIGHT){ if(p->right) p=p->right; else move=UP; @@ -562,21 +563,21 @@ _asn1_expand_identifier(node_asn **node,node_asn *root) /** * asn1_create_element - Creates a structure of type SOURCE_NAME. - * @definitions: pointer to the structure returned by "parser_asn1" function - * @source_name: the name of the type of the new structure (must be inside p_structure). - * @element: pointer to the structure created. - * Description: + * @definitions: pointer to the structure returned by "parser_asn1" function + * @source_name: the name of the type of the new structure (must be + * inside p_structure). + * @element: pointer to the structure created. * - * Creates a structure called DEST_NAME of type SOURCE_NAME. + * Creates a structure of type @source_name. + * + * Example: using "pkix.asn" + * result=asn1_create_structure(cert_def,"PKIX1.Certificate",certptr); * * Returns: * - * ASN1_SUCCESS\: creation OK + * ASN1_SUCCESS: Creation OK. * - * ASN1_ELEMENT_NOT_FOUND\: SOURCE_NAME isn't known - * - * Example: using "pkix.asn" - * result=asn1_create_structure(cert_def,"PKIX1.Certificate",certptr); + * ASN1_ELEMENT_NOT_FOUND: SOURCE_NAME isn't known **/ asn1_retCode asn1_create_element(ASN1_TYPE definitions,const char *source_name, @@ -586,7 +587,7 @@ asn1_create_element(ASN1_TYPE definitions,const char *source_name, int res; dest_node=_asn1_copy_structure2(definitions,source_name); - + if(dest_node==NULL) return ASN1_ELEMENT_NOT_FOUND; _asn1_set_name(dest_node,""); @@ -606,11 +607,11 @@ asn1_create_element(ASN1_TYPE definitions,const char *source_name, * @structure: pointer to the structure that you want to visit. * @name: an element of the structure * @mode: specify how much of the structure to print, can be - * ASN1_PRINT_NAME, ASN1_PRINT_NAME_TYPE, - * ASN1_PRINT_NAME_TYPE_VALUE, or ASN1_PRINT_ALL. - * - * Prints on the standard output the structure's tree starting from the NAME element inside - * the structure *POINTER. + * %ASN1_PRINT_NAME, %ASN1_PRINT_NAME_TYPE, + * %ASN1_PRINT_NAME_TYPE_VALUE, or %ASN1_PRINT_ALL. + * + * Prints on the @out file descriptor the structure's tree starting + * from the @name element inside the structure @structure. **/ void asn1_print_structure(FILE *out,ASN1_TYPE structure,const char *name,int mode) @@ -620,7 +621,7 @@ asn1_print_structure(FILE *out,ASN1_TYPE structure,const char *name,int mode) if(out==NULL) return; - root=_asn1_find_node(structure,name); + root=_asn1_find_node(structure,name); if(root==NULL) return; @@ -864,21 +865,23 @@ asn1_print_structure(FILE *out,ASN1_TYPE structure,const char *name,int mode) /** * asn1_number_of_elements - Counts the number of elements of a structure. - * @element: pointer to the root of an ASN1 structure. + * @element: pointer to the root of an ASN1 structure. * @name: the name of a sub-structure of ROOT. - * @num: pointer to an integer where the result will be stored - * Description: + * @num: pointer to an integer where the result will be stored * - * Counts the number of elements of a sub-structure called NAME with names equal to "?1","?2", ... + * Counts the number of elements of a sub-structure called NAME with + * names equal to "?1","?2", ... * * Returns: * - * ASN1_SUCCESS\: creation OK - * ASN1_ELEMENT_NOT_FOUND\: NAME isn't known - * ASN1_GENERIC_ERROR\: pointer num equal to NULL + * ASN1_SUCCESS: Creation OK. + * + * ASN1_ELEMENT_NOT_FOUND: NAME isn't known. + * + * ASN1_GENERIC_ERROR: Pointer num equal to NULL. * **/ -asn1_retCode +asn1_retCode asn1_number_of_elements(ASN1_TYPE element,const char *name,int *num) { node_asn *node,*p; @@ -893,7 +896,7 @@ asn1_number_of_elements(ASN1_TYPE element,const char *name,int *num) p=node->down; while(p){ - if((p->name) && (p->name[0]=='?')) (*num)++; + if((p->name) && (p->name[0]=='?')) (*num)++; p=p->right; } @@ -905,21 +908,17 @@ asn1_number_of_elements(ASN1_TYPE element,const char *name,int *num) * asn1_find_structure_from_oid - Locate structure defined by a specific OID. * @definitions: ASN1 definitions * @oidValue: value of the OID to search (e.g. "1.2.3.4"). - * Description: * * Search the structure that is defined just after an OID definition. * - * Returns: - * - * NULL when OIDVALUE not found, - * - * otherwise the pointer to a constant string that contains the element - * name defined just after the OID. + * Returns: NULL when OIDVALUE not found, otherwise the pointer to a + * constant string that contains the element name defined just + * after the OID. * **/ const char* -asn1_find_structure_from_oid(ASN1_TYPE definitions, - const char *oidValue) +asn1_find_structure_from_oid (ASN1_TYPE definitions, + const char *oidValue) { char definitionsName[MAX_NAME_SIZE],name[2*MAX_NAME_SIZE+1]; char value[MAX_NAME_SIZE]; @@ -938,10 +937,10 @@ asn1_find_structure_from_oid(ASN1_TYPE definitions, p=definitions->down; while(p){ if((type_field(p->type)==TYPE_OBJECT_ID) && - (p->type & CONST_ASSIGN)){ + (p->type & CONST_ASSIGN)){ strcpy(name,definitionsName); strcat(name,p->name); - + len=MAX_NAME_SIZE; result=asn1_read_value(definitions,name,value,&len); @@ -949,7 +948,7 @@ asn1_find_structure_from_oid(ASN1_TYPE definitions, p=p->right; if(p==NULL) /* reach the end of ASN1 definitions */ return NULL; /* ASN1_ELEMENT_NOT_FOUND; */ - + return p->name; } } @@ -958,8 +957,3 @@ asn1_find_structure_from_oid(ASN1_TYPE definitions, return NULL; /* ASN1_ELEMENT_NOT_FOUND; */ } - - - - - |