Deleted my str_dup() function from X509V3: the same functionality is provided
authorDr. Stephen Henson <steve@openssl.org>
Thu, 4 Mar 1999 23:29:51 +0000 (23:29 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Thu, 4 Mar 1999 23:29:51 +0000 (23:29 +0000)
by BUF_MEM_strdup(). Added text documentation to the BUF_MEM stuff.

CHANGES
crypto/x509v3/v3_enum.c
crypto/x509v3/v3_lib.c
crypto/x509v3/v3_utl.c
crypto/x509v3/x509v3.h
doc/buffer.txt [new file with mode: 0644]

diff --git a/CHANGES b/CHANGES
index 87069aa..f6800dc 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -5,6 +5,9 @@
 
  Changes between 0.9.1c and 0.9.2
 
+  *) Add text documentation for the BUFFER functions.
+     [Steve Henson]
+
   *) Added the new `Includes OpenSSL Cryptography Software' button as
      doc/openssl_button.{gif,html} which is similar in style to the old SSLeay
      button and can be used by applications based on OpenSSL to show the
index 3ce97cd..835bde9 100644 (file)
@@ -97,7 +97,7 @@ ASN1_ENUMERATED *e;
        long strval;
        strval = ASN1_ENUMERATED_get(e);
        for(enam =(ENUMERATED_NAMES *)method->usr_data; enam->lname; enam++) {
-               if(strval == enam->bitnum) return str_dup(enam->lname);
+               if(strval == enam->bitnum) return BUF_strdup(enam->lname);
        }
        return i2s_ASN1_ENUMERATED(method, e);
 }
index 0500ef5..2686173 100644 (file)
@@ -64,7 +64,7 @@
 
 static STACK *ext_list = NULL;
 
-static ext_cmp(X509V3_EXT_METHOD **a, X509V3_EXT_METHOD **b);
+static int ext_cmp(X509V3_EXT_METHOD **a, X509V3_EXT_METHOD **b);
 static void ext_list_free(X509V3_EXT_METHOD *ext);
 
 int X509V3_EXT_add(ext)
index 0d2ae9d..40b7810 100644 (file)
 
 static char *strip_spaces(char *name);
 
-char *str_dup(str)
-char *str;
-{
-       char *tmp;
-       if(!(tmp = Malloc(strlen(str) + 1))) return NULL;
-       strcpy(tmp, str);
-       return tmp;
-}
-
 /* Add a CONF_VALUE name value pair to stack */
 
 int X509V3_add_value(name, value, extlist)
@@ -84,8 +75,8 @@ STACK **extlist;
 {
        CONF_VALUE *vtmp = NULL;
        char *tname = NULL, *tvalue = NULL;
-       if(name && !(tname = str_dup(name))) goto err;
-       if(value && !(tvalue = str_dup(value))) goto err;;
+       if(name && !(tname = BUF_strdup(name))) goto err;
+       if(value && !(tvalue = BUF_strdup(value))) goto err;;
        if(!(vtmp = (CONF_VALUE *)Malloc(sizeof(CONF_VALUE)))) goto err;
        if(!*extlist && !(*extlist = sk_new(NULL))) goto err;
        vtmp->section = NULL;
@@ -237,7 +228,7 @@ char *line;
        char *linebuf;
        int state;
        /* We are going to modify the line so copy it first */
-       linebuf = str_dup(line);
+       linebuf = BUF_strdup(line);
        state = HDR_NAME;
        ntmp = NULL;
        /* Go through all characters */
index f40bb02..1f25fc8 100644 (file)
@@ -237,7 +237,6 @@ int i2d_ext_ku(STACK *a, unsigned char **pp);
 STACK *d2i_ext_ku(STACK **a, unsigned char **pp, long length);
 void ext_ku_free(STACK *a);
 STACK *ext_ku_new(void);
-char *str_dup(char *val);
 
 #ifdef HEADER_CONF_H
 GENERAL_NAME *v2i_GENERAL_NAME(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, CONF_VALUE *cnf);
@@ -308,8 +307,6 @@ STACK *d2i_ext_ku();
 void ext_ku_free();
 STACK *ext_ku_new();
 
-char *str_dup();
-
 #ifdef HEADER_CONF_H
 void X509V3_conf_free();
 X509_EXTENSION *X509V3_EXT_conf_nid();
diff --git a/doc/buffer.txt b/doc/buffer.txt
new file mode 100644 (file)
index 0000000..06d821c
--- /dev/null
@@ -0,0 +1,49 @@
+BUFFER Library.
+
+[Note: I wrote this when I saw a Malloc version of strdup() in there which
+ I'd written myself anyway. I was so annoyed at not noticing this I decided to
+ document it :-) Steve.]
+
+The buffer library handles simple character arrays. Buffers are used for various
+purposes in the library, most notably memory BIOs.
+
+The library uses the BUF_MEM structure defined in buffer.h:
+
+typedef struct buf_mem_st
+        {
+        int length;     /* current number of bytes */
+        char *data;
+        int max;        /* size of buffer */
+        } BUF_MEM;
+
+'length' is the current size of the buffer in bytes, 'max' is the amount of
+memory allocated to the buffer. There are three functions which handle these
+and one "miscelanous" function.
+
+BUF_MEM *BUF_MEM_new()
+
+This allocates a new buffer of zero size. Returns the buffer or NULL on error.
+
+void BUF_MEM_free(BUF_MEM *a)
+
+This frees up an already existing buffer. The data is zeroed before freeing
+up in case the buffer contains sensitive data.
+
+int BUF_MEM_grow(BUF_MEM *str, int len)
+
+This changes the size of an already existing buffer. It returns zero on error
+or the new size (i.e. 'len'). Any data already in the buffer is preserved if
+it increases in size.
+
+char * BUF_strdup(char *str)
+
+This is the previously mentioned strdup function: like the standard library
+strdup() it copies a null terminated string into a block of allocated memory
+and returns a pointer to the allocated block.
+
+Unlike the standard C library strdup() this function uses Malloc() and so
+should be used in preference to the standard library strdup() because it can
+be used for memory leak checking or replacing the malloc() function.
+
+The memory allocated from BUF_strdup() should be freed up using the Free()
+function.