comparison libtomcrypt/src/pk/asn1/der/sequence/der_sequence_free.c @ 382:0cbe8f6dbf9e

propagate from branch 'au.asn.ucc.matt.ltc.dropbear' (head 2af22fb4e878750b88f80f90d439b316d229796f) to branch 'au.asn.ucc.matt.dropbear' (head 02c413252c90e9de8e03d91e9939dde3029f5c0a)
author Matt Johnston <matt@ucc.asn.au>
date Thu, 11 Jan 2007 02:41:05 +0000
parents
children f849a5ca2efc
comparison
equal deleted inserted replaced
379:b66a00272a90 382:0cbe8f6dbf9e
1 /* LibTomCrypt, modular cryptographic library -- Tom St Denis
2 *
3 * LibTomCrypt is a library that provides various cryptographic
4 * algorithms in a highly modular and flexible manner.
5 *
6 * The library is free for all purposes without any express
7 * guarantee it works.
8 *
9 * Tom St Denis, [email protected], http://libtomcrypt.com
10 */
11 #include "tomcrypt.h"
12
13 /**
14 @file der_sequence_free.c
15 ASN.1 DER, free's a structure allocated by der_decode_sequence_flexi(), Tom St Denis
16 */
17
18 #ifdef LTC_DER
19
20 /**
21 Free memory allocated by der_decode_sequence_flexi()
22 @param in The list to free
23 */
24 void der_sequence_free(ltc_asn1_list *in)
25 {
26 ltc_asn1_list *l;
27
28 /* walk to the start of the chain */
29 while (in->prev != NULL || in->parent != NULL) {
30 if (in->parent != NULL) {
31 in = in->parent;
32 } else {
33 in = in->prev;
34 }
35 }
36
37 /* now walk the list and free stuff */
38 while (in != NULL) {
39 /* is there a child? */
40 if (in->child) {
41 /* disconnect */
42 in->child->parent = NULL;
43 der_sequence_free(in->child);
44 }
45
46 switch (in->type) {
47 case LTC_ASN1_SET:
48 case LTC_ASN1_SETOF:
49 case LTC_ASN1_SEQUENCE: break;
50 case LTC_ASN1_INTEGER : if (in->data != NULL) { mp_clear(in->data); } break;
51 default : if (in->data != NULL) { XFREE(in->data); }
52 }
53
54 /* move to next and free current */
55 l = in->next;
56 free(in);
57 in = l;
58 }
59 }
60
61 #endif
62
63 /* $Source: /cvs/libtom/libtomcrypt/src/pk/asn1/der/sequence/der_sequence_free.c,v $ */
64 /* $Revision: 1.3 $ */
65 /* $Date: 2006/03/31 14:15:35 $ */