Hi,

a patch to simplify/cleanup _asn1_copy_structure3().

Tested with 'make check'.

Regards, Tim
From 48c6a131493f2c26aa5d1d2080090a5c4721152c Mon Sep 17 00:00:00 2001
From: Tim Ruehsen <[email protected]>
Date: Fri, 31 Aug 2012 15:27:59 +0200
Subject: [PATCH] cleanup _asn1_copy_structure3

---
 lib/structure.c |   44 ++++++++++++++++----------------------------
 1 file changed, 16 insertions(+), 28 deletions(-)

diff --git a/lib/structure.c b/lib/structure.c
index 41cebe4..b62d500 100644
--- a/lib/structure.c
+++ b/lib/structure.c
@@ -395,44 +395,32 @@ _asn1_copy_structure3 (ASN1_TYPE source_node)
 	    _asn1_set_name (p_d, p_s->name);
 	  if (p_s->value)
 	    _asn1_set_value (p_d, p_s->value, p_s->value_len);
-	  move = DOWN;
-	}
-      else
-	move = RIGHT;
-
-      if (move == DOWN)
-	{
 	  if (p_s->down)
 	    {
 	      p_s = p_s->down;
 	      p_d_prev = p_d;
 	      p_d = _asn1_add_node_only (p_s->type);
 	      _asn1_set_down (p_d_prev, p_d);
+	      continue;
 	    }
-	  else
-	    move = RIGHT;
+	  if (p_s == source_node)
+	    break;
 	}
 
-      if (p_s == source_node)
-	break;
-
-      if (move == RIGHT)
-	{
-	  if (p_s->right)
-	    {
-	      p_s = p_s->right;
-	      p_d_prev = p_d;
-	      p_d = _asn1_add_node_only (p_s->type);
-	      _asn1_set_right (p_d_prev, p_d);
-	    }
-	  else
+	if (p_s->right)
+	  {
+	    move = RIGHT;
+	    p_s = p_s->right;
+	    p_d_prev = p_d;
+	    p_d = _asn1_add_node_only (p_s->type);
+	    _asn1_set_right (p_d_prev, p_d);
+	  }
+	else
+	  {
 	    move = UP;
-	}
-      if (move == UP)
-	{
-	  p_s = _asn1_find_up (p_s);
-	  p_d = _asn1_find_up (p_d);
-	}
+	    p_s = _asn1_find_up (p_s);
+	    p_d = _asn1_find_up (p_d);
+	  }
     }
   while (p_s != source_node);
 
-- 
1.7.10.4

Reply via email to