]>
git.ipfire.org Git - thirdparty/openssl.git/blob - crypto/err/err_prn.c
2 * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved.
4 * Licensed under the OpenSSL license (the "License"). You may not use
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
11 #include "internal/cryptlib.h"
12 #include <openssl/crypto.h>
13 #include <openssl/buffer.h>
14 #include <openssl/err.h>
16 void ERR_print_errors_cb(int (*cb
) (const char *str
, size_t len
, void *u
),
22 const char *file
, *data
;
25 * We don't know what kind of thing CRYPTO_THREAD_ID is. Here is our best
26 * attempt to convert it into something we can print.
34 tid
.tid
= CRYPTO_THREAD_get_current_id();
36 while ((l
= ERR_get_error_line_data(&file
, &line
, &data
, &flags
)) != 0) {
37 ERR_error_string_n(l
, buf
, sizeof buf
);
38 BIO_snprintf(buf2
, sizeof(buf2
), "%lu:%s:%s:%d:%s\n", tid
.ltid
, buf
,
39 file
, line
, (flags
& ERR_TXT_STRING
) ? data
: "");
40 if (cb(buf2
, strlen(buf2
), u
) <= 0)
41 break; /* abort outputting the error report */
45 static int print_bio(const char *str
, size_t len
, void *bp
)
47 return BIO_write((BIO
*)bp
, str
, len
);
50 void ERR_print_errors(BIO
*bp
)
52 ERR_print_errors_cb(print_bio
, bp
);
55 #ifndef OPENSSL_NO_STDIO
56 void ERR_print_errors_fp(FILE *fp
)
58 BIO
*bio
= BIO_new_fp(fp
, BIO_NOCLOSE
);
62 ERR_print_errors_cb(print_bio
, bio
);