Esempio n. 1
0
void
_asn1_remove_node (node_asn * node)
{
  if (node == NULL)
    return;

  if (node->name != NULL)
    _asn1_free (node->name);
  if (node->value != NULL)
    _asn1_free (node->value);
  _asn1_free (node);
}
void
_asn1_remove_node (ASN1_TYPE node)
{
  if (node == NULL)
    return;

  if (node->name != NULL)
    _asn1_free (node->name);
  if (node->value != NULL && node->value != node->small_value)
    _asn1_free (node->value);
  _asn1_free (node);
}
ASN1_TYPE
_asn1_add_node (unsigned int type)
{
  list_type *listElement;
  ASN1_TYPE punt;

  punt = (ASN1_TYPE) _asn1_calloc (1, sizeof (struct node_asn_struct));
  if (punt == NULL)
    return NULL;

  listElement = (list_type *) _asn1_malloc (sizeof (list_type));
  if (listElement == NULL)
    {
      _asn1_free (punt);
      return NULL;
    }

  listElement->node = punt;
  listElement->next = firstElement;
  firstElement = listElement;

  punt->type = type;

  return punt;
}
ASN1_TYPE
_asn1_set_name (ASN1_TYPE node, const char *name)
{
  if (node == NULL)
    return node;

  if (node->name)
    {
      _asn1_free (node->name);
      node->name = NULL;
    }

  if (name == NULL)
    return node;

  if (strlen (name))
    {
      node->name = (char *) _asn1_strdup (name);
      if (node->name == NULL)
	return NULL;
    }
  else
    node->name = NULL;
  return node;
}
ASN1_TYPE
_asn1_set_value (ASN1_TYPE node, const void *value, unsigned int len)
{
  if (node == NULL)
    return node;
  if (node->value)
    {
      if (node->value != node->small_value)
	_asn1_free (node->value);
      node->value = NULL;
      node->value_len = 0;
    }

  if (!len)
    return node;

  if (len < sizeof (node->small_value))
    {
      node->value = node->small_value;
    }
  else
    {
      node->value = _asn1_malloc (len);
      if (node->value == NULL)
	return NULL;
    }
  node->value_len = len;

  memcpy (node->value, value, len);
  return node;
}
Esempio n. 6
0
node_asn *
_asn1_add_node (unsigned int type)
{
  list_type *listElement;
  node_asn *punt;

  punt = (node_asn *) _asn1_calloc (1, sizeof (node_asn));
  if (punt == NULL)
    return NULL;

  listElement = (list_type *) _asn1_malloc (sizeof (list_type));
  if (listElement == NULL)
    {
      _asn1_free (punt);
      return NULL;
    }

  listElement->node = punt;
  listElement->next = firstElement;
  firstElement = listElement;

  punt->type = type;

  return punt;
}
void
_asn1_delete_list (void)
{
  list_type *listElement;

  while (firstElement)
    {
      listElement = firstElement;
      firstElement = firstElement->next;
      _asn1_free (listElement);
    }
}
Esempio n. 8
0
/**
 * asn1_copy_node:
 * @dst: Destination ASN1_TYPE node.
 * @dst_name: Field name in destination node.
 * @src: Source ASN1_TYPE node.
 * @src_name: Field name in source node.
 *
 * Create a deep copy of a ASN1_TYPE variable.
 *
 * Returns: Return %ASN1_SUCCESS on success.
 **/
asn1_retCode
asn1_copy_node (ASN1_TYPE dst, const char *dst_name,
		ASN1_TYPE src, const char *src_name)
{
/* FIXME: rewrite using copy_structure().
 * It seems quite hard to do.
 */
  int result;
  ASN1_TYPE dst_node;
  void *data = NULL;
  int size = 0;

  result = asn1_der_coding (src, src_name, NULL, &size, NULL);
  if (result != ASN1_MEM_ERROR)
    return result;

  data = _asn1_malloc (size);
  if (data == NULL)
    return ASN1_MEM_ERROR;

  result = asn1_der_coding (src, src_name, data, &size, NULL);
  if (result != ASN1_SUCCESS)
    {
      _asn1_free (data);
      return result;
    }

  dst_node = asn1_find_node (dst, dst_name);
  if (dst_node == NULL)
    {
      _asn1_free (data);
      return ASN1_ELEMENT_NOT_FOUND;
    }

  result = asn1_der_decoding (&dst_node, data, size, NULL);

  _asn1_free (data);

  return result;
}
void
_asn1_delete_list_and_nodes (void)
{
  list_type *listElement;

  while (firstElement)
    {
      listElement = firstElement;
      firstElement = firstElement->next;
      _asn1_remove_node (listElement->node);
      _asn1_free (listElement);
    }
}
/* the same as _asn1_set_value except that it sets an already malloc'ed
 * value.
 */
ASN1_TYPE
_asn1_set_value_m (ASN1_TYPE node, void *value, unsigned int len)
{
  if (node == NULL)
    return node;

  if (node->value)
    {
      if (node->value != node->small_value)
	_asn1_free (node->value);
      node->value = NULL;
      node->value_len = 0;
    }

  if (!len)
    return node;

  node->value = value;
  node->value_len = len;

  return node;
}
Esempio n. 11
0
node_asn *
_asn1_set_value (node_asn * node, const void *_value, unsigned int len)
{
  const unsigned char *value = _value;

  if (node == NULL)
    return node;
  if (node->value)
    {
      _asn1_free (node->value);
      node->value = NULL;
      node->value_len = 0;
    }
  if (!len)
    return node;
  node->value = (unsigned char *) _asn1_malloc (len);
  if (node->value == NULL)
    return NULL;
  node->value_len = len;

  memcpy (node->value, value, len);
  return node;
}