Latest update.
This commit is contained in:
+17
-8
@@ -7,29 +7,38 @@
|
||||
* https://www.openssl.org/source/license.html
|
||||
*/
|
||||
|
||||
/* TODO: When ERR_STATE becomes opaque, this musts be removed */
|
||||
#define OSSL_FORCE_ERR_STATE
|
||||
|
||||
#include <stdio.h>
|
||||
#include "internal/cryptlib.h"
|
||||
#include <openssl/crypto.h>
|
||||
#include <openssl/buffer.h>
|
||||
#include <openssl/err.h>
|
||||
#include "err_locl.h"
|
||||
|
||||
void ERR_print_errors_cb(int (*cb) (const char *str, size_t len, void *u),
|
||||
void *u)
|
||||
{
|
||||
CRYPTO_THREAD_ID tid = CRYPTO_THREAD_get_current_id();
|
||||
unsigned long l;
|
||||
char buf[256];
|
||||
char buf2[4096], *hex;
|
||||
const char *file, *data;
|
||||
char buf[4096], *hex;
|
||||
const char *lib, *reason;
|
||||
const char *file, *data, *func;
|
||||
int line, flags;
|
||||
|
||||
while ((l = ERR_get_error_line_data(&file, &line, &data, &flags)) != 0) {
|
||||
ERR_error_string_n(l, buf, sizeof(buf));
|
||||
while ((l = ERR_get_error_all(&file, &line, &func, &data, &flags)) != 0) {
|
||||
lib = ERR_lib_error_string(l);
|
||||
reason = ERR_reason_error_string(l);
|
||||
if (func == NULL)
|
||||
func = "unknown function";
|
||||
if ((flags & ERR_TXT_STRING) == 0)
|
||||
data = "";
|
||||
hex = OPENSSL_buf2hexstr((const unsigned char *)&tid, sizeof(tid));
|
||||
BIO_snprintf(buf2, sizeof(buf2), "%s:%s:%s:%d:%s\n", hex, buf, file,
|
||||
line, (flags & ERR_TXT_STRING) ? data : "");
|
||||
BIO_snprintf(buf, sizeof(buf), "%s:error:%s:%s:%s:%s:%d:%s\n",
|
||||
hex, lib, func, reason, file, line, data);
|
||||
OPENSSL_free(hex);
|
||||
if (cb(buf2, strlen(buf2), u) <= 0)
|
||||
if (cb(buf, strlen(buf), u) <= 0)
|
||||
break; /* abort outputting the error report */
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user