continue;
}
else
- p = _asn1_find_up (p);
+ p = _asn1_get_up (p);
move = UP;
}
if (move == UP)
move = UP;
}
if (move == UP)
- p = _asn1_find_up (p);
+ p = _asn1_get_up (p);
}
*len = counter;
{
p2 = _asn1_find_left (p);
if (!p2)
- p2 = _asn1_find_up (p);
+ p2 = _asn1_get_up (p);
}
asn1_delete_structure (&p);
p = p2;
{
while (1)
{
- p = _asn1_find_up (p);
+ p = _asn1_get_up (p);
if (p == node)
{
p = NULL;
{
if (p->type & CONST_SET)
{
- p2 = _asn1_find_up (p);
+ p2 = _asn1_get_up (p);
len2 = p2->tmp_ival;
if (len2 == -1)
{
if ((p->type & CONST_OPTION) || (p->type & CONST_DEFAULT))
{
- p2 = _asn1_find_up (p);
+ p2 = _asn1_get_up (p);
len2 = p2->tmp_ival;
if (counter == len2)
{
if ((p->type & CONST_OPTION) || (p->type & CONST_DEFAULT))
{
- p2 = _asn1_find_up (p);
+ p2 = _asn1_get_up (p);
len2 = p2->tmp_ival;
if ((len2 != -1) && (counter > len2))
move = UP;
}
if (move == UP)
- p = _asn1_find_up (p);
+ p = _asn1_get_up (p);
}
_asn1_delete_not_used (*element);
break;
}
- p3 = _asn1_find_up (p);
+ p3 = _asn1_get_up (p);
if (!p3)
{
(p3->value == NULL))
{
- p3 = _asn1_find_up (p);
- p3 = _asn1_find_up (p3);
+ p3 = _asn1_get_up (p);
+ p3 = _asn1_get_up (p3);
if (!p3)
{
{
while (1)
{
- p = _asn1_find_up (p);
+ p = _asn1_get_up (p);
if (p == *element)
{
p = NULL;
_asn1_str_cat (name, name_size, ".");
_asn1_str_cat (name, name_size, tmp_name);
}
- p = _asn1_find_up (p);
+ p = _asn1_get_up (p);
}
if (name[0] == 0)
unsigned int type; /* Node type */
unsigned char *value; /* Node value */
int value_len;
+ asn1_node up; /* Pointer to the parent node */
asn1_node down; /* Pointer to the son node */
asn1_node right; /* Pointer to the brother node */
asn1_node left; /* Pointer to the next list element */
return node;
node->right = right;
if (right)
- right->left = node;
+ {
+ right->left = node;
+ if (right->up == NULL)
+ right->up = node->up;
+ }
return node;
}
{
while (1)
{
- p = _asn1_find_up (p);
+ p = _asn1_get_up (p);
if (p == node)
{
p = NULL;
move = UP;
}
if (move == UP)
- p = _asn1_find_up (p);
+ p = _asn1_get_up (p);
}
move = UP;
}
if (move == UP)
- p = _asn1_find_up (p);
+ p = _asn1_get_up (p);
}
return ASN1_SUCCESS;
move = UP;
}
if (move == UP)
- p = _asn1_find_up (p);
+ p = _asn1_get_up (p);
}
return ASN1_SUCCESS;
{
while (1)
{
- p = _asn1_find_up (p);
+ p = _asn1_get_up (p);
if (p == node)
{
p = NULL;
{
while (1)
{
- p = _asn1_find_up (p);
+ p = _asn1_get_up (p);
if (p == node)
{
p = NULL;
asn1_node _asn1_find_up (asn1_node node);
+inline static asn1_node _asn1_get_up(asn1_node node)
+{
+ if (node && node->up)
+ return node->up;
+ else
+ return _asn1_find_up(node);
+}
+
int _asn1_change_integer_value (asn1_node node);
int _asn1_expand_object_id (asn1_node node);
return node;
node->down = down;
if (down)
- down->left = node;
+ {
+ down->left = node;
+ down->up = node;
+ }
return node;
}
{
while (1)
{
- p = _asn1_find_up (p);
+ p = _asn1_get_up (p);
if (p == pointer)
{
p = NULL;
if (p_last == *definitions)
break;
- p_last = _asn1_find_up (p_last);
+ p_last = _asn1_get_up (p_last);
if (p_last == NULL)
break;
p2 = p->right;
if (p != *structure)
{
- p3 = _asn1_find_up (p);
+ p3 = _asn1_get_up (p);
_asn1_set_down (p3, p2);
_asn1_remove_node (p, flags);
p = p3;
p3 = _asn1_find_left (p);
if (!p3)
{
- p3 = _asn1_find_up (p);
+ p3 = _asn1_get_up (p);
if (p3)
_asn1_set_down (p3, p2);
else
p3 = _asn1_find_left (source_node);
if (!p3)
{
- p3 = _asn1_find_up (source_node);
+ p3 = _asn1_get_up (source_node);
if (p3)
_asn1_set_down (p3, p2);
else if (source_node->right)
else
{
move = UP;
- p_s = _asn1_find_up (p_s);
- p_d = _asn1_find_up (p_d);
+ p_s = _asn1_get_up (p_s);
+ p_d = _asn1_get_up (p_d);
}
}
while (p_s != source_node);
move = UP;
}
if (move == UP)
- p = _asn1_find_up (p);
+ p = _asn1_get_up (p);
}
return ASN1_SUCCESS;
_asn1_set_right (p3, p2);
else
{
- p3 = _asn1_find_up (p);
+ p3 = _asn1_get_up (p);
if (p3)
_asn1_set_down (p3, p2);
else
move = UP;
}
if (move == UP)
- p = _asn1_find_up (p);
+ p = _asn1_get_up (p);
}
return ASN1_SUCCESS;
{
while (1)
{
- p = _asn1_find_up (p);
+ p = _asn1_get_up (p);
if (p == root)
{
p = NULL;