From e2e5b1d44456d6e99fb3765f2370630a2059994b Mon Sep 17 00:00:00 2001 From: Nikos Mavrogiannopoulos Date: Fri, 30 May 2014 15:12:00 +0200 Subject: Added asn1_copy_node2() --- lib/libtasn1.h | 2 ++ lib/libtasn1.map | 1 + lib/structure.c | 26 ++++++++++++++++++++------ tests/copynode.c | 2 -- 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/lib/libtasn1.h b/lib/libtasn1.h index a457068..064c10f 100644 --- a/lib/libtasn1.h +++ b/lib/libtasn1.h @@ -329,6 +329,8 @@ extern "C" extern ASN1_API int asn1_copy_node (asn1_node dst, const char *dst_name, asn1_node src, const char *src_name); + extern ASN1_API asn1_node + asn1_copy_node2 (asn1_node src, const char *src_name); /* Internal and low-level DER utility functions. */ diff --git a/lib/libtasn1.map b/lib/libtasn1.map index fa91638..a2b535e 100644 --- a/lib/libtasn1.map +++ b/lib/libtasn1.map @@ -54,6 +54,7 @@ LIBTASN1_0_3 asn1_decode_simple_der; asn1_read_value_type; asn1_delete_structure2; + asn1_copy_node2; local: *; }; diff --git a/lib/structure.c b/lib/structure.c index 27fbfe3..2184aa8 100644 --- a/lib/structure.c +++ b/lib/structure.c @@ -1128,12 +1128,13 @@ asn1_find_structure_from_oid (asn1_node definitions, const char *oidValue) /** * asn1_copy_node: - * @dst: Destination asn1_node node. + * @dst: Destination asn1 node. * @dst_name: Field name in destination node. - * @src: Source asn1_node node. + * @src: Source asn1 node. * @src_name: Field name in source node. * - * Create a deep copy of a asn1_node variable. + * Create a deep copy of a asn1_node variable. That + * function requires @dst to be expanded using asn1_create_element(). * * Returns: Return %ASN1_SUCCESS on success. **/ @@ -1141,9 +1142,6 @@ int asn1_copy_node (asn1_node dst, const char *dst_name, asn1_node src, const char *src_name) { -/* FIXME: rewrite using copy_structure(). - * It seems quite hard to do. - */ int result; asn1_node dst_node; void *data = NULL; @@ -1177,3 +1175,19 @@ asn1_copy_node (asn1_node dst, const char *dst_name, return result; } + +/** + * asn1_copy_node2: + * @src: Source asn1 node. + * @src_name: Field name in source node. + * + * Create a deep copy of a asn1_node variable. This function + * will return an exact copy of the provided structure. + * + * Returns: Return %NULL on failure. + **/ +asn1_node +asn1_copy_node2 (asn1_node src, const char *src_name) +{ + return _asn1_copy_structure2(src, src_name); +} diff --git a/tests/copynode.c b/tests/copynode.c index 62e49ec..5e5821f 100644 --- a/tests/copynode.c +++ b/tests/copynode.c @@ -150,7 +150,6 @@ main (int argc, char *argv[]) exit(1); } -#if 0 asn1_delete_structure (&cpy_node); /* Test asn1_copy_node2 */ @@ -176,7 +175,6 @@ main (int argc, char *argv[]) printf("DER encoded data differ!\n"); exit(1); } -#endif /* Clear the definition structures */ asn1_delete_structure (&asn1_element); -- cgit v1.2.3