shishi-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(shishi_asn1_read2): Support NULL data/datalen. [...]


From: shishi-commit
Subject: (shishi_asn1_read2): Support NULL data/datalen. [...]
Date: Wed, 10 Dec 2003 06:20:56 +0100

Commit from jas 2003-12-10 06:20 CET
(shishi_asn1_read2): Support NULL data/datalen.
(shishi_asn1_read2): Zero terminate data (but do not include it in datalen).
(shishi_asn1_read2_optional): New.
Module File name Revision
shishi lib/asn1.c 1.58 >>> 1.59

shishi/lib/asn1.c   1.58 >>> 1.59
Line 87
    return 0;
  }
 
- /* XXX obsolete */
+ /* XXX obsolete, see shishi_asn1_read2 */
  int
  shishi_asn1_read (Shishi * handle, Shishi_asn1 node,
    const char *field, char *data, size_t * datalen)
Line 116
     char **data, size_t * datalen)
  {
    int rc;
+   int len = 0;
 
-   *datalen = 0;
-   rc = asn1_read_value (node, field, NULL, (int *) datalen);
+   rc = asn1_read_value (node, field, NULL, &len);
    if (rc != ASN1_MEM_ERROR)
      {
        shishi_error_set (handle, libtasn1_strerror (rc));
Line 130
  return SHISHI_ASN1_ERROR;
      }
 
-   *data = xmalloc (*datalen);
+   if (data)
+     {
+       size_t datalen = (size_t) len;
 
-   rc = shishi_asn1_read (handle, node, field, *data, datalen);
-   if (rc != SHISHI_OK)
-     return rc;
+       *data = xmalloc (len + 1);
+
+       rc = shishi_asn1_read (handle, node, field, *data, &datalen);
+       if (rc != SHISHI_OK)
+ return rc;
+
+       (*data)[len] = '\0';
+     }
+
+   if (datalen)
+     *datalen = (size_t) len;
 
    return SHISHI_OK;
  }
Line 210
    return SHISHI_OK;
  }
 
+ /* XXX obsolete, see shishi_asn1_read2_optional */
  int
  shishi_asn1_read_optional (Shishi * handle,
     Shishi_asn1 node, const char *field,
Line 230
    return SHISHI_OK;
  }
 
+ /* XXX rename and document */
+ int
+ shishi_asn1_read2_optional (Shishi * handle,
+     Shishi_asn1 node, const char *field,
+     char **data, size_t * datalen)
+ {
+   int rc;
+
+   rc = shishi_asn1_read2 (handle, node, field, data, datalen);
+   if (rc != SHISHI_OK && rc != SHISHI_ASN1_NO_ELEMENT)
+     return rc;
+
+   if (rc == SHISHI_ASN1_NO_ELEMENT)
+     if (datalen)
+       *datalen = 0;
+
+   return SHISHI_OK;
+ }
+
  int
  shishi_asn1_write (Shishi * handle, Shishi_asn1 node,
     const char *field, const char *data, size_t datalen)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]