Basically, I wanted to be able to make a dump to a FILE*, and not have
to bother creating a BIO around it. So here's a few more functions to make it possible to make the dump using a printing callback, and to print to a FILE* (based on the callback variant), done in the same style as the functions in crypto/err/err_prn.c.
This commit is contained in:
parent
b94f886b22
commit
bb1a915c24
@ -68,12 +68,14 @@
|
|||||||
#define DUMP_WIDTH 16
|
#define DUMP_WIDTH 16
|
||||||
#define DUMP_WIDTH_LESS_INDENT(i) (DUMP_WIDTH-((i-(i>6?6:i)+3)/4))
|
#define DUMP_WIDTH_LESS_INDENT(i) (DUMP_WIDTH-((i-(i>6?6:i)+3)/4))
|
||||||
|
|
||||||
int BIO_dump(BIO *bio, const char *s, int len)
|
int BIO_dump_cb(int (*cb)(const void *data, size_t len, void *u),
|
||||||
|
void *u, const char *s, int len)
|
||||||
{
|
{
|
||||||
return BIO_dump_indent(bio, s, len, 0);
|
return BIO_dump_indent_cb(cb, u, s, len, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int BIO_dump_indent(BIO *bio, const char *s, int len, int indent)
|
int BIO_dump_indent_cb(int (*cb)(const void *data, size_t len, void *u),
|
||||||
|
void *u, const char *s, int len, int indent)
|
||||||
{
|
{
|
||||||
int ret=0;
|
int ret=0;
|
||||||
char buf[288+1],tmp[20],str[128+1];
|
char buf[288+1],tmp[20],str[128+1];
|
||||||
@ -139,18 +141,47 @@ int BIO_dump_indent(BIO *bio, const char *s, int len, int indent)
|
|||||||
BUF_strlcat(buf,tmp,sizeof buf);
|
BUF_strlcat(buf,tmp,sizeof buf);
|
||||||
}
|
}
|
||||||
BUF_strlcat(buf,"\n",sizeof buf);
|
BUF_strlcat(buf,"\n",sizeof buf);
|
||||||
/* if this is the last call then update the ddt_dump thing so that
|
/* if this is the last call then update the ddt_dump thing so
|
||||||
* we will move the selection point in the debug window
|
* that we will move the selection point in the debug window
|
||||||
*/
|
*/
|
||||||
ret+=BIO_write(bio,(char *)buf,strlen(buf));
|
ret+=cb((void *)buf,strlen(buf),u);
|
||||||
}
|
}
|
||||||
#ifdef TRUNCATE
|
#ifdef TRUNCATE
|
||||||
if (trc > 0)
|
if (trc > 0)
|
||||||
{
|
{
|
||||||
BIO_snprintf(buf,sizeof buf,"%s%04x - <SPACES/NULS>\n",str,
|
BIO_snprintf(buf,sizeof buf,"%s%04x - <SPACES/NULS>\n",str,
|
||||||
len+trc);
|
len+trc);
|
||||||
ret+=BIO_write(bio,(char *)buf,strlen(buf));
|
ret+=cb((void *)buf,strlen(buf),u);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef OPENSSL_NO_FP_API
|
||||||
|
static int write_fp(const void *data, size_t len, void *fp)
|
||||||
|
{
|
||||||
|
return fwrite(data, len, 1, (FILE *)fp);
|
||||||
|
}
|
||||||
|
int BIO_dump_fp(FILE *fp, const char *s, int len)
|
||||||
|
{
|
||||||
|
return BIO_dump_cb(write_fp, fp, s, len);
|
||||||
|
}
|
||||||
|
int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent)
|
||||||
|
{
|
||||||
|
return BIO_dump_indent_cb(write_fp, fp, s, len, indent);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static int write_bio(const void *data, size_t len, void *bp)
|
||||||
|
{
|
||||||
|
return BIO_write((BIO *)bp, (const char *)data, len);
|
||||||
|
}
|
||||||
|
int BIO_dump(BIO *bp, const char *s, int len)
|
||||||
|
{
|
||||||
|
return BIO_dump_cb(write_bio, bp, s, len);
|
||||||
|
}
|
||||||
|
int BIO_dump_indent(BIO *bp, const char *s, int len, int indent)
|
||||||
|
{
|
||||||
|
return BIO_dump_indent_cb(write_bio, bp, s, len, indent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -573,9 +573,16 @@ int BIO_sock_should_retry(int i);
|
|||||||
int BIO_sock_non_fatal_error(int error);
|
int BIO_sock_non_fatal_error(int error);
|
||||||
int BIO_fd_should_retry(int i);
|
int BIO_fd_should_retry(int i);
|
||||||
int BIO_fd_non_fatal_error(int error);
|
int BIO_fd_non_fatal_error(int error);
|
||||||
|
int BIO_dump_cb(int (*cb)(const void *data, size_t len, void *u),
|
||||||
|
void *u, const char *s, int len);
|
||||||
|
int BIO_dump_indent_cb(int (*cb)(const void *data, size_t len, void *u),
|
||||||
|
void *u, const char *s, int len, int indent);
|
||||||
int BIO_dump(BIO *b,const char *bytes,int len);
|
int BIO_dump(BIO *b,const char *bytes,int len);
|
||||||
int BIO_dump_indent(BIO *b,const char *bytes,int len,int indent);
|
int BIO_dump_indent(BIO *b,const char *bytes,int len,int indent);
|
||||||
|
#ifndef OPENSSL_NO_FP_API
|
||||||
|
int BIO_dump_fp(FILE *fp, const char *s, int len);
|
||||||
|
int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent);
|
||||||
|
#endif
|
||||||
struct hostent *BIO_gethostbyname(const char *name);
|
struct hostent *BIO_gethostbyname(const char *name);
|
||||||
/* We might want a thread-safe interface too:
|
/* We might want a thread-safe interface too:
|
||||||
* struct hostent *BIO_gethostbyname_r(const char *name,
|
* struct hostent *BIO_gethostbyname_r(const char *name,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user