RFC 3161 compliant time stamp request creation, response generation
[openssl.git] / crypto / err / err_prn.c
index 16e313879d63aeef3f8da85c660e2fd6ab9ae788..2224a901e5ea30a30e4332f2290c980faf20cc1b 100644 (file)
@@ -1,5 +1,5 @@
 /* crypto/err/err_prn.c */
-/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
  * This package is an SSL implementation written
  */
 
 #include <stdio.h>
-#include "lhash.h"
-#include "crypto.h"
 #include "cryptlib.h"
-#include "buffer.h"
-#include "err.h"
-#include "crypto.h"
+#include <openssl/lhash.h>
+#include <openssl/crypto.h>
+#include <openssl/buffer.h>
+#include <openssl/err.h>
 
-#ifndef WIN16
-void ERR_print_errors_fp(fp)
-FILE *fp;
+void ERR_print_errors_cb(int (*cb)(const char *str, size_t len, void *u),
+                        void *u)
        {
        unsigned long l;
-       char buf[200];
-       char *file;
-       int line;
+       char buf[256];
+       char buf2[4096];
+       const char *file,*data;
+       int line,flags;
        unsigned long es;
 
        es=CRYPTO_thread_id();
-       while ((l=ERR_get_error_line(&file,&line)) != 0)
-               fprintf(fp,"%lu:%s:%s:%d\n",es,ERR_error_string(l,buf),
-                       file,line);
+       while ((l=ERR_get_error_line_data(&file,&line,&data,&flags)) != 0)
+               {
+               ERR_error_string_n(l, buf, sizeof buf);
+               BIO_snprintf(buf2, sizeof(buf2), "%lu:%s:%s:%d:%s\n", es, buf,
+                       file, line, (flags & ERR_TXT_STRING) ? data : "");
+               cb(buf2, strlen(buf2), u);
+               }
        }
-#endif
 
-void ERR_print_errors(bp)
-BIO *bp;
+#ifndef OPENSSL_NO_FP_API
+static int print_fp(const char *str, size_t len, void *fp)
        {
-       unsigned long l;
-       char buf[256];
-       char buf2[256];
-       char *file;
-       int line;
-       unsigned long es;
+       BIO bio;
 
-       es=CRYPTO_thread_id();
-       while ((l=ERR_get_error_line(&file,&line)) != 0)
-               {
-               sprintf(buf2,"%lu:%s:%s:%d\n",es,ERR_error_string(l,buf),
-                       file,line);
-               BIO_write(bp,buf2,strlen(buf2));
-               }
+       BIO_set(&bio,BIO_s_file());
+       BIO_set_fp(&bio,fp,BIO_NOCLOSE);
+
+       return BIO_printf(&bio, "%s", str);
+       }
+void ERR_print_errors_fp(FILE *fp)
+       {
+       ERR_print_errors_cb(print_fp, fp);
+       }
+#endif
+
+static int print_bio(const char *str, size_t len, void *bp)
+       {
+       return BIO_write((BIO *)bp, str, len);
+       }
+void ERR_print_errors(BIO *bp)
+       {
+       ERR_print_errors_cb(print_bio, bp);
        }
 
+