Next step in tidying up the LHASH code.
[openssl.git] / apps / openssl.c
index a2a263062dfb5bfdb5224bec95e9630c043a7de9..14cb93ee26af5bfeba289ebc1f1928d3893b8a08 100644 (file)
 #include "s_apps.h"
 #include <openssl/err.h>
 
-static unsigned long MS_CALLBACK hash(FUNCTION *a);
-static int MS_CALLBACK cmp(FUNCTION *a,FUNCTION *b);
+/* The LHASH callbacks ("hash" & "cmp") have been replaced by functions with the
+ * base prototypes (we cast each variable inside the function to the required
+ * type of "FUNCTION*"). This removes the necessity for macro-generated wrapper
+ * functions. */
+
+/* static unsigned long MS_CALLBACK hash(FUNCTION *a); */
+static unsigned long MS_CALLBACK hash(void *a_void);
+/* static int MS_CALLBACK cmp(FUNCTION *a,FUNCTION *b); */
+static int MS_CALLBACK cmp(void *a_void,void *b_void);
 static LHASH *prog_init(void );
 static int do_cmd(LHASH *prog,int argc,char *argv[]);
 LHASH *config=NULL;
@@ -101,6 +108,8 @@ int main(int Argc, char *Argv[])
        arg.data=NULL;
        arg.count=0;
 
+       if (getenv("OPENSSL_DEBUG_MEMORY") != NULL)
+               CRYPTO_malloc_debug_init();
        CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
 
        apps_startup();
@@ -110,6 +119,7 @@ int main(int Argc, char *Argv[])
                        BIO_set_fp(bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT);
 
        ERR_load_crypto_strings();
+       ENGINE_load_builtin_engines();
 
        /* Lets load up our environment a little */
        p=getenv("OPENSSL_CONF");
@@ -201,7 +211,7 @@ end:
                config=NULL;
                }
        if (prog != NULL) lh_free(prog);
-       if (arg.data != NULL) Free(arg.data);
+       if (arg.data != NULL) OPENSSL_free(arg.data);
        ERR_remove_state(0);
 
        EVP_cleanup();
@@ -236,13 +246,19 @@ static int do_cmd(LHASH *prog, int argc, char *argv[])
        else if ((strncmp(argv[0],"no-",3)) == 0)
                {
                BIO *bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE);
+#ifdef VMS
+               {
+               BIO *tmpbio = BIO_new(BIO_f_linebuffer());
+               bio_stdout = BIO_push(tmpbio, bio_stdout);
+               }
+#endif
                f.name=argv[0]+3;
                ret = (lh_retrieve(prog,&f) != NULL);
                if (!ret)
                        BIO_printf(bio_stdout, "%s\n", argv[0]);
                else
                        BIO_printf(bio_stdout, "%s\n", argv[0]+3);
-               BIO_free(bio_stdout);
+               BIO_free_all(bio_stdout);
                goto end;
                }
        else if ((strcmp(argv[0],"quit") == 0) ||
@@ -267,11 +283,17 @@ static int do_cmd(LHASH *prog, int argc, char *argv[])
                else /* strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0 */
                        list_type = FUNC_TYPE_CIPHER;
                bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE);
+#ifdef VMS
+               {
+               BIO *tmpbio = BIO_new(BIO_f_linebuffer());
+               bio_stdout = BIO_push(tmpbio, bio_stdout);
+               }
+#endif
                
                for (fp=functions; fp->name != NULL; fp++)
                        if (fp->type == list_type)
                                BIO_printf(bio_stdout, "%s\n", fp->name);
-               BIO_free(bio_stdout);
+               BIO_free_all(bio_stdout);
                ret=0;
                goto end;
                }
@@ -336,19 +358,23 @@ static LHASH *prog_init(void)
            ;
        qsort(functions,i,sizeof *functions,SortFnByName);
 
-       if ((ret=lh_new(hash,cmp)) == NULL) return(NULL);
+       if ((ret=lh_new(hash, cmp)) == NULL)
+               return(NULL);
 
        for (f=functions; f->name != NULL; f++)
                lh_insert(ret,f);
        return(ret);
        }
 
-static int MS_CALLBACK cmp(FUNCTION *a, FUNCTION *b)
+/* static int MS_CALLBACK cmp(FUNCTION *a, FUNCTION *b) */
+static int MS_CALLBACK cmp(void *a_void, void *b_void)
        {
-       return(strncmp(a->name,b->name,8));
+       return(strncmp(((FUNCTION *)a_void)->name,
+                       ((FUNCTION *)b_void)->name,8));
        }
 
-static unsigned long MS_CALLBACK hash(FUNCTION *a)
+/* static unsigned long MS_CALLBACK hash(FUNCTION *a) */
+static unsigned long MS_CALLBACK hash(void *a_void)
        {
-       return(lh_strhash(a->name));
+       return(lh_strhash(((FUNCTION *)a_void)->name));
        }