New error printing function that gives the possibility to print the
errors through an arbitrary function.
This commit is contained in:
parent
7f657f342a
commit
8ada6e7705
2 changed files with 33 additions and 27 deletions
|
@ -249,6 +249,8 @@ void ERR_error_string_n(unsigned long e, char *buf, size_t len);
|
|||
const char *ERR_lib_error_string(unsigned long e);
|
||||
const char *ERR_func_error_string(unsigned long e);
|
||||
const char *ERR_reason_error_string(unsigned long e);
|
||||
void ERR_print_errors_cb(int (*cb)(const char *str, size_t len, void *u),
|
||||
void *u);
|
||||
#ifndef OPENSSL_NO_FP_API
|
||||
void ERR_print_errors_fp(FILE *fp);
|
||||
#endif
|
||||
|
|
|
@ -64,30 +64,12 @@
|
|||
#include <openssl/err.h>
|
||||
#include <openssl/crypto.h>
|
||||
|
||||
#ifndef OPENSSL_NO_FP_API
|
||||
void ERR_print_errors_fp(FILE *fp)
|
||||
{
|
||||
unsigned long l;
|
||||
char buf[200];
|
||||
const char *file,*data;
|
||||
int line,flags;
|
||||
unsigned long es;
|
||||
|
||||
es=CRYPTO_thread_id();
|
||||
while ((l=ERR_get_error_line_data(&file,&line,&data,&flags)) != 0)
|
||||
{
|
||||
ERR_error_string_n(l, buf, sizeof buf);
|
||||
fprintf(fp,"%lu:%s:%s:%d:%s\n",es,buf,
|
||||
file,line,(flags&ERR_TXT_STRING)?data:"");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void ERR_print_errors(BIO *bp)
|
||||
void ERR_print_errors_cb(int (*cb)(const char *str, size_t len, void *u),
|
||||
void *u)
|
||||
{
|
||||
unsigned long l;
|
||||
char buf[256];
|
||||
char buf2[256];
|
||||
char buf2[4096];
|
||||
const char *file,*data;
|
||||
int line,flags;
|
||||
unsigned long es;
|
||||
|
@ -96,12 +78,34 @@ void ERR_print_errors(BIO *bp)
|
|||
while ((l=ERR_get_error_line_data(&file,&line,&data,&flags)) != 0)
|
||||
{
|
||||
ERR_error_string_n(l, buf, sizeof buf);
|
||||
sprintf(buf2,"%lu:%s:%s:%d:",es,buf,
|
||||
file,line);
|
||||
BIO_write(bp,buf2,strlen(buf2));
|
||||
if (flags & ERR_TXT_STRING)
|
||||
BIO_write(bp,data,strlen(data));
|
||||
BIO_write(bp,"\n",1);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef OPENSSL_NO_FP_API
|
||||
static int print_fp(const char *str, size_t len, FILE *fp)
|
||||
{
|
||||
return fprintf(fp, "%s", str);
|
||||
}
|
||||
void ERR_print_errors_fp(FILE *fp)
|
||||
{
|
||||
ERR_print_errors_cb(
|
||||
(int (*)(const char *, size_t, void *))print_fp,
|
||||
(void *)fp);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int print_bio(const char *str, size_t len, BIO *bp)
|
||||
{
|
||||
return BIO_write(bp, str, len);
|
||||
}
|
||||
void ERR_print_errors(BIO *bp)
|
||||
{
|
||||
ERR_print_errors_cb(
|
||||
(int (*)(const char *, size_t, void *))print_bio,
|
||||
(void *)bp);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue