projects
/
silc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added SILC Thread Queue API
[silc.git]
/
lib
/
silcasn1
/
silcasn1.c
diff --git
a/lib/silcasn1/silcasn1.c
b/lib/silcasn1/silcasn1.c
index 5965228be1990640b2e4adf16578f2502d362f77..ea1408e5508d1d01980229f13a129d3e7eb41e97 100644
(file)
--- a/
lib/silcasn1/silcasn1.c
+++ b/
lib/silcasn1/silcasn1.c
@@
-23,14
+23,31
@@
/* Allocate ASN.1 context. */
/* Allocate ASN.1 context. */
-SilcAsn1 silc_asn1_alloc(
void
)
+SilcAsn1 silc_asn1_alloc(
SilcStack stack
)
{
{
- SilcAsn1 asn1 = silc_calloc(1, sizeof(*asn1));
- if (!asn1)
+ SilcAsn1 asn1;
+ SilcStack stack1;
+
+ stack1 = silc_stack_alloc(0, stack);
+ if (!stack1)
+ return NULL;
+
+ /* Allocate itself from the stack */
+ asn1 = silc_scalloc(stack1, 1, sizeof(*asn1));
+ if (!asn1) {
+ silc_stack_free(stack1);
return NULL;
return NULL;
+ }
- if (!silc_asn1_init(asn1))
+ asn1->orig_stack = stack;
+ asn1->stack1 = stack1;
+ asn1->stack2 = silc_stack_alloc(0, stack);
+ if (!asn1->stack2) {
+ silc_stack_free(stack1);
return NULL;
return NULL;
+ }
+
+ asn1->accumul = 0;
return asn1;
}
return asn1;
}
@@
-40,20
+57,21
@@
SilcAsn1 silc_asn1_alloc(void)
void silc_asn1_free(SilcAsn1 asn1)
{
silc_asn1_uninit(asn1);
void silc_asn1_free(SilcAsn1 asn1)
{
silc_asn1_uninit(asn1);
- silc_free(asn1);
}
/* Init pre-allocated ASN.1 context */
}
/* Init pre-allocated ASN.1 context */
-SilcBool silc_asn1_init(SilcAsn1 asn1)
+SilcBool silc_asn1_init(SilcAsn1 asn1
, SilcStack stack
)
{
{
- asn1->stack1 = silc_stack_alloc(768);
+ asn1->orig_stack = stack;
+
+ asn1->stack1 = silc_stack_alloc(0, stack);
if (!asn1->stack1)
return FALSE;
if (!asn1->stack1)
return FALSE;
- asn1->stack2 = silc_stack_alloc(
768
);
+ asn1->stack2 = silc_stack_alloc(
0, stack
);
if (!asn1->stack2) {
if (!asn1->stack2) {
- silc_stack_free(asn1->stack
2
);
+ silc_stack_free(asn1->stack
1
);
return FALSE;
}
return FALSE;
}
@@
-66,8
+84,15
@@
SilcBool silc_asn1_init(SilcAsn1 asn1)
void silc_asn1_uninit(SilcAsn1 asn1)
{
void silc_asn1_uninit(SilcAsn1 asn1)
{
- silc_stack_free(asn1->stack1);
+ SilcStack stack1 = asn1->stack1;
+
+ if (asn1->switched) {
+ stack1 = asn1->stack2;
+ asn1->stack2 = asn1->stack1;
+ }
+
silc_stack_free(asn1->stack2);
silc_stack_free(asn1->stack2);
+ silc_stack_free(stack1);
}
#if defined(SILC_DEBUG)
}
#if defined(SILC_DEBUG)
@@
-178,7
+203,7
@@
SilcBool silc_asn1_dump(SilcAsn1 asn1, SilcBuffer src)
}
fprintf(stdout, "Type %s [%d]\n",
}
fprintf(stdout, "Type %s [%d]\n",
- silc_asn1_tag_name(rtag), rtag);
+ silc_asn1_tag_name(rtag),
(int)
rtag);
if (renc == SILC_BER_ENC_PRIMITIVE)
len = len + rdata_len;
if (renc == SILC_BER_ENC_PRIMITIVE)
len = len + rdata_len;