Since there is a way to create UI_METHODs, implement a destructor as
authorRichard Levitte <levitte@openssl.org>
Wed, 20 Jun 2001 15:00:08 +0000 (15:00 +0000)
committerRichard Levitte <levitte@openssl.org>
Wed, 20 Jun 2001 15:00:08 +0000 (15:00 +0000)
well.

This probably requires reference counters and locks as well.  To be
implemented later.

crypto/ui/ui.h
crypto/ui/ui_lib.c
crypto/ui/ui_locl.h

index 4d8eab8..580b7d7 100644 (file)
@@ -271,6 +271,7 @@ enum UI_string_types
 
 /* Create and manipulate methods */
 UI_METHOD *UI_create_method(char *name);
+void UI_destroy_method(UI_METHOD *ui_method);
 int UI_method_set_opener(UI_METHOD *method, int (*opener)(UI *ui));
 int UI_method_set_writer(UI_METHOD *method, int (*writer)(UI *ui, UI_STRING *uis));
 int UI_method_set_flusher(UI_METHOD *method, int (*flusher)(UI *ui));
index ffbcb75..bc9de97 100644 (file)
  *
  */
 
-#include <openssl/e_os2.h>
-/* The following defines enable the declaration of strdup(), which is an
-   extended function according to X/Open. */
-#ifdef OPENSSL_SYS_VMS_DECC
-# define _XOPEN_SOURCE_EXTENDED
-#endif
-#ifdef OPENSSL_SYS_UNIX
-# define _XOPEN_SOURCE
-# define _XOPEN_SOURCE_EXTENDED        /* For Linux and probably anything GNU */
-#endif
 #include <string.h>
-
+#include <openssl/e_os2.h>
+#include <openssl/buffer.h>
 #include <openssl/ui.h>
 #include <openssl/err.h>
 #include "ui_locl.h"
@@ -173,7 +164,7 @@ int UI_dup_input_string(UI *ui, const char *prompt, int flags,
 
        if (prompt)
                {
-               prompt_copy=strdup(prompt);
+               prompt_copy=BUF_strdup(prompt);
                if (prompt_copy == NULL)
                        {
                        UIerr(UI_F_UI_DUP_INPUT_STRING,ERR_R_MALLOC_FAILURE);
@@ -199,7 +190,7 @@ int UI_dup_verify_string(UI *ui, const char *prompt, int flags,
 
        if (prompt)
                {
-               prompt_copy=strdup(prompt);
+               prompt_copy=BUF_strdup(prompt);
                if (prompt_copy == NULL)
                        {
                        UIerr(UI_F_UI_DUP_VERIFY_STRING,ERR_R_MALLOC_FAILURE);
@@ -223,7 +214,7 @@ int UI_dup_info_string(UI *ui, const char *text)
 
        if (text)
                {
-               text_copy=strdup(text);
+               text_copy=BUF_strdup(text);
                if (text_copy == NULL)
                        {
                        UIerr(UI_F_UI_DUP_INFO_STRING,ERR_R_MALLOC_FAILURE);
@@ -247,7 +238,7 @@ int UI_dup_error_string(UI *ui, const char *text)
 
        if (text)
                {
-               text_copy=strdup(text);
+               text_copy=BUF_strdup(text);
                if (text_copy == NULL)
                        {
                        UIerr(UI_F_UI_DUP_ERROR_STRING,ERR_R_MALLOC_FAILURE);
@@ -427,10 +418,20 @@ UI_METHOD *UI_create_method(char *name)
 
        if (ui_method)
                memset(ui_method, 0, sizeof(*ui_method));
-       ui_method->name = strdup(name);
+       ui_method->name = BUF_strdup(name);
        return ui_method;
        }
 
+/* BIG FSCKING WARNING!!!!  If you use this on a statically allocated method
+   (that is, it hasn't been allocated using UI_create_method(), you deserve
+   anything Murphy can throw at you and more!  You have been warned. */
+void UI_destroy_method(UI_METHOD *ui_method)
+       {
+       OPENSSL_free(ui_method->name);
+       ui_method->name = NULL;
+       OPENSSL_free(ui_method);
+       }
+
 int UI_method_set_opener(UI_METHOD *method, int (*opener)(UI *ui))
        {
        if (method)
index 8f48f8e..89cdc2f 100644 (file)
@@ -63,7 +63,7 @@
 
 struct ui_method_st
        {
-       const char *name;
+       char *name;
 
        /* All the functions return 1 or non-NULL for success and 0 or NULL
           for failure */