New function ERR_error_string_n.
This commit is contained in:
parent
d49f3797a5
commit
e5c84d5152
6
CHANGES
6
CHANGES
@ -4,6 +4,12 @@
|
|||||||
|
|
||||||
Changes between 0.9.5a and 0.9.6 [xx XXX 2000]
|
Changes between 0.9.5a and 0.9.6 [xx XXX 2000]
|
||||||
|
|
||||||
|
*) New function ERR_error_string_n(e, buf, len) which is like
|
||||||
|
ERR_error_string(e, buf), but writes at most 'len' bytes
|
||||||
|
including the 0 terminator. For ERR_error_string_n, 'buf'
|
||||||
|
may not be NULL.
|
||||||
|
[Damien Miller <djm@mindrot.org>, Bodo Moeller]
|
||||||
|
|
||||||
*) CONF library reworked to become more general. A new CONF
|
*) CONF library reworked to become more general. A new CONF
|
||||||
configuration file reader "class" is implemented as well as a
|
configuration file reader "class" is implemented as well as a
|
||||||
new functions (NCONF_*, for "New CONF") to handle it. The now
|
new functions (NCONF_*, for "New CONF") to handle it. The now
|
||||||
|
6
STATUS
6
STATUS
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
OpenSSL STATUS Last modified at
|
OpenSSL STATUS Last modified at
|
||||||
______________ $Date: 2000/04/01 12:32:10 $
|
______________ $Date: 2000/04/14 23:35:50 $
|
||||||
|
|
||||||
DEVELOPMENT STATE
|
DEVELOPMENT STATE
|
||||||
|
|
||||||
@ -89,10 +89,6 @@
|
|||||||
use a key length decided by the size of the RSA encrypted key and expect
|
use a key length decided by the size of the RSA encrypted key and expect
|
||||||
RC2 to adapt).
|
RC2 to adapt).
|
||||||
|
|
||||||
o ERR_error_string(..., buf) does not know how large buf is,
|
|
||||||
there should be ERR_error_string_n(..., buf, bufsize)
|
|
||||||
or similar.
|
|
||||||
|
|
||||||
WISHES
|
WISHES
|
||||||
|
|
||||||
o
|
o
|
||||||
|
@ -104,7 +104,10 @@ int MAIN(int argc, char **argv)
|
|||||||
for (i=1; i<argc; i++)
|
for (i=1; i<argc; i++)
|
||||||
{
|
{
|
||||||
if (sscanf(argv[i],"%lx",&l))
|
if (sscanf(argv[i],"%lx",&l))
|
||||||
printf("%s\n",ERR_error_string(l,buf));
|
{
|
||||||
|
ERR_error_string_n(l, buf, sizeof buf);
|
||||||
|
printf("%s\n",buf);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("%s: bad error code\n",argv[i]);
|
printf("%s: bad error code\n",argv[i]);
|
||||||
|
@ -78,48 +78,7 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void dopr (char *buffer, size_t maxlen, size_t *retlen,
|
/***************************************************************************/
|
||||||
const char *format, va_list args);
|
|
||||||
#ifdef USE_ALLOCATING_PRINT
|
|
||||||
static void doapr (char **buffer, size_t *retlen,
|
|
||||||
const char *format, va_list args);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int BIO_printf (BIO *bio, ...)
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
char *format;
|
|
||||||
int ret;
|
|
||||||
size_t retlen;
|
|
||||||
#ifdef USE_ALLOCATING_PRINT
|
|
||||||
char *hugebuf;
|
|
||||||
#else
|
|
||||||
MS_STATIC char hugebuf[1024*2]; /* 10k in one chunk is the limit */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
va_start(args, bio);
|
|
||||||
format=va_arg(args, char *);
|
|
||||||
|
|
||||||
#ifndef USE_ALLOCATING_PRINT
|
|
||||||
hugebuf[0]='\0';
|
|
||||||
dopr(hugebuf, sizeof(hugebuf), &retlen, format, args);
|
|
||||||
#else
|
|
||||||
hugebuf = NULL;
|
|
||||||
CRYPTO_push_info("doapr()");
|
|
||||||
doapr(&hugebuf, &retlen, format, args);
|
|
||||||
if (hugebuf)
|
|
||||||
{
|
|
||||||
#endif
|
|
||||||
ret=BIO_write(bio, hugebuf, (int)retlen);
|
|
||||||
|
|
||||||
#ifdef USE_ALLOCATING_PRINT
|
|
||||||
Free(hugebuf);
|
|
||||||
}
|
|
||||||
CRYPTO_pop_info();
|
|
||||||
#endif
|
|
||||||
va_end(args);
|
|
||||||
return(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright Patrick Powell 1995
|
* Copyright Patrick Powell 1995
|
||||||
@ -140,6 +99,7 @@ int BIO_printf (BIO *bio, ...)
|
|||||||
* o Andrew Tridgell <tridge@samba.org> (1998, for Samba)
|
* o Andrew Tridgell <tridge@samba.org> (1998, for Samba)
|
||||||
* o Luke Mewburn <lukem@netbsd.org> (1999, for LukemFTP)
|
* o Luke Mewburn <lukem@netbsd.org> (1999, for LukemFTP)
|
||||||
* o Ralf S. Engelschall <rse@engelschall.com> (1999, for Pth)
|
* o Ralf S. Engelschall <rse@engelschall.com> (1999, for Pth)
|
||||||
|
* o ... (for OpenSSL)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if HAVE_LONG_DOUBLE
|
#if HAVE_LONG_DOUBLE
|
||||||
@ -161,18 +121,17 @@ static void fmtint (void (*)(char **, size_t *, size_t *, int),
|
|||||||
char **, size_t *, size_t *, LLONG, int, int, int, int);
|
char **, size_t *, size_t *, LLONG, int, int, int, int);
|
||||||
static void fmtfp (void (*)(char **, size_t *, size_t *, int),
|
static void fmtfp (void (*)(char **, size_t *, size_t *, int),
|
||||||
char **, size_t *, size_t *, LDOUBLE, int, int, int);
|
char **, size_t *, size_t *, LDOUBLE, int, int, int);
|
||||||
#ifndef USE_ALLOCATING_PRINT
|
|
||||||
static int dopr_isbig (size_t, size_t);
|
static int dopr_isbig (size_t, size_t);
|
||||||
static int dopr_copy (size_t);
|
static int dopr_copy (size_t);
|
||||||
static void dopr_outch (char **, size_t *, size_t *, int);
|
static void dopr_outch (char **, size_t *, size_t *, int);
|
||||||
#else
|
#ifdef USE_ALLOCATING_PRINT
|
||||||
static int doapr_isbig (size_t, size_t);
|
static int doapr_isbig (size_t, size_t);
|
||||||
static int doapr_copy (size_t);
|
static int doapr_copy (size_t);
|
||||||
static void doapr_outch (char **, size_t *, size_t *, int);
|
static void doapr_outch (char **, size_t *, size_t *, int);
|
||||||
#endif
|
#endif
|
||||||
static void _dopr(void (*)(char **, size_t *, size_t *, int),
|
static void _dopr(void (*)(char **, size_t *, size_t *, int),
|
||||||
int (*)(size_t, size_t), int (*)(size_t),
|
int (*)(size_t, size_t), int (*)(size_t),
|
||||||
char **buffer, size_t *maxlen, size_t *retlen,
|
char **buffer, size_t *maxlen, size_t *retlen, int *truncated,
|
||||||
const char *format, va_list args);
|
const char *format, va_list args);
|
||||||
|
|
||||||
/* format read states */
|
/* format read states */
|
||||||
@ -213,8 +172,9 @@ dopr(
|
|||||||
const char *format,
|
const char *format,
|
||||||
va_list args)
|
va_list args)
|
||||||
{
|
{
|
||||||
|
int ignored;
|
||||||
_dopr(dopr_outch, dopr_isbig, dopr_copy,
|
_dopr(dopr_outch, dopr_isbig, dopr_copy,
|
||||||
&buffer, &maxlen, retlen, format, args);
|
&buffer, &maxlen, retlen, &ignored, format, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
@ -226,8 +186,9 @@ doapr(
|
|||||||
va_list args)
|
va_list args)
|
||||||
{
|
{
|
||||||
size_t dummy_maxlen = 0;
|
size_t dummy_maxlen = 0;
|
||||||
|
int ignored;
|
||||||
_dopr(doapr_outch, doapr_isbig, doapr_copy,
|
_dopr(doapr_outch, doapr_isbig, doapr_copy,
|
||||||
buffer, &dummy_maxlen, retlen, format, args);
|
buffer, &dummy_maxlen, retlen, &ignored, format, args);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -239,6 +200,7 @@ _dopr(
|
|||||||
char **buffer,
|
char **buffer,
|
||||||
size_t *maxlen,
|
size_t *maxlen,
|
||||||
size_t *retlen,
|
size_t *retlen,
|
||||||
|
int *truncated,
|
||||||
const char *format,
|
const char *format,
|
||||||
va_list args)
|
va_list args)
|
||||||
{
|
{
|
||||||
@ -484,7 +446,8 @@ _dopr(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (currlen >= *maxlen - 1)
|
*truncated = (currlen > *maxlen - 1);
|
||||||
|
if (*truncated)
|
||||||
currlen = *maxlen - 1;
|
currlen = *maxlen - 1;
|
||||||
(*buffer)[currlen] = '\0';
|
(*buffer)[currlen] = '\0';
|
||||||
*retlen = currlen;
|
*retlen = currlen;
|
||||||
@ -842,3 +805,62 @@ doapr_outch(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/***************************************************************************/
|
||||||
|
|
||||||
|
int BIO_printf (BIO *bio, const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
int ret;
|
||||||
|
size_t retlen;
|
||||||
|
#ifdef USE_ALLOCATING_PRINT
|
||||||
|
char *hugebuf;
|
||||||
|
#else
|
||||||
|
MS_STATIC char hugebuf[1024*2]; /* 10k in one chunk is the limit */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
va_start(args, format);
|
||||||
|
|
||||||
|
#ifndef USE_ALLOCATING_PRINT
|
||||||
|
hugebuf[0]='\0';
|
||||||
|
dopr(hugebuf, sizeof(hugebuf), &retlen, format, args);
|
||||||
|
#else
|
||||||
|
hugebuf = NULL;
|
||||||
|
CRYPTO_push_info("doapr()");
|
||||||
|
doapr(&hugebuf, &retlen, format, args);
|
||||||
|
if (hugebuf)
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
ret=BIO_write(bio, hugebuf, (int)retlen);
|
||||||
|
|
||||||
|
#ifdef USE_ALLOCATING_PRINT
|
||||||
|
Free(hugebuf);
|
||||||
|
}
|
||||||
|
CRYPTO_pop_info();
|
||||||
|
#endif
|
||||||
|
va_end(args);
|
||||||
|
return(ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* As snprintf is not available everywhere, we provide our own implementation.
|
||||||
|
* This function has nothing to do with BIOs, but it's closely related
|
||||||
|
* to BIO_printf, and we need *some* name prefix ...
|
||||||
|
* (XXX the function should be renamed, but to what?) */
|
||||||
|
int BIO_snprintf(char *buf, size_t n, const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
size_t retlen;
|
||||||
|
int truncated;
|
||||||
|
|
||||||
|
va_start(args, format);
|
||||||
|
_dopr(dopr_outch, dopr_isbig, dopr_copy,
|
||||||
|
&buf, &n, &retlen, &truncated, format, args);
|
||||||
|
if (truncated)
|
||||||
|
/* In case of truncation, return -1 like traditional snprintf.
|
||||||
|
* (Current drafts for ISO/IEC 9899 say snprintf should return
|
||||||
|
* the number of characters that would have been written,
|
||||||
|
* had the buffer been large enough.) */
|
||||||
|
return -1;
|
||||||
|
else
|
||||||
|
return (retlen <= INT_MAX) ? retlen : -1;
|
||||||
|
}
|
||||||
|
@ -592,7 +592,8 @@ void BIO_copy_next_retry(BIO *b);
|
|||||||
|
|
||||||
long BIO_ghbn_ctrl(int cmd,int iarg,char *parg);
|
long BIO_ghbn_ctrl(int cmd,int iarg,char *parg);
|
||||||
|
|
||||||
int BIO_printf(BIO *bio, ...);
|
int BIO_printf(BIO *bio, const char *format, ...);
|
||||||
|
int BIO_snprintf(char *buf, size_t n, const char *format, ...);
|
||||||
|
|
||||||
/* BEGIN ERROR CODES */
|
/* BEGIN ERROR CODES */
|
||||||
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
/* The following lines are auto generated by the script mkerr.pl. Any changes
|
||||||
|
@ -118,6 +118,7 @@
|
|||||||
#include <openssl/buffer.h>
|
#include <openssl/buffer.h>
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
#include <openssl/crypto.h>
|
#include <openssl/crypto.h>
|
||||||
|
#include <openssl/bio.h>
|
||||||
|
|
||||||
|
|
||||||
static LHASH *error_hash=NULL;
|
static LHASH *error_hash=NULL;
|
||||||
@ -477,13 +478,11 @@ static unsigned long get_error_values(int inc, const char **file, int *line,
|
|||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* BAD for multi-threaded, uses a local buffer if ret == NULL */
|
void ERR_error_string_n(unsigned long e, char *buf, size_t len)
|
||||||
char *ERR_error_string(unsigned long e, char *ret)
|
|
||||||
{
|
{
|
||||||
static char buf[256];
|
char lsbuf[64], fsbuf[64], rsbuf[64];
|
||||||
const char *ls,*fs,*rs;
|
const char *ls,*fs,*rs;
|
||||||
unsigned long l,f,r;
|
unsigned long l,f,r;
|
||||||
int i;
|
|
||||||
|
|
||||||
l=ERR_GET_LIB(e);
|
l=ERR_GET_LIB(e);
|
||||||
f=ERR_GET_FUNC(e);
|
f=ERR_GET_FUNC(e);
|
||||||
@ -493,21 +492,50 @@ char *ERR_error_string(unsigned long e, char *ret)
|
|||||||
fs=ERR_func_error_string(e);
|
fs=ERR_func_error_string(e);
|
||||||
rs=ERR_reason_error_string(e);
|
rs=ERR_reason_error_string(e);
|
||||||
|
|
||||||
if (ret == NULL) ret=buf;
|
|
||||||
|
|
||||||
sprintf(&(ret[0]),"error:%08lX:",e);
|
|
||||||
i=strlen(ret);
|
|
||||||
if (ls == NULL)
|
if (ls == NULL)
|
||||||
sprintf(&(ret[i]),":lib(%lu) ",l);
|
BIO_snprintf(lsbuf, sizeof(lsbuf), "lib(%lu)", l);
|
||||||
else sprintf(&(ret[i]),"%s",ls);
|
|
||||||
i=strlen(ret);
|
|
||||||
if (fs == NULL)
|
if (fs == NULL)
|
||||||
sprintf(&(ret[i]),":func(%lu) ",f);
|
BIO_snprintf(fsbuf, sizeof(fsbuf), "func(%lu)", f);
|
||||||
else sprintf(&(ret[i]),":%s",fs);
|
|
||||||
i=strlen(ret);
|
|
||||||
if (rs == NULL)
|
if (rs == NULL)
|
||||||
sprintf(&(ret[i]),":reason(%lu)",r);
|
BIO_snprintf(rsbuf, sizeof(rsbuf), "reason(%lu)", r);
|
||||||
else sprintf(&(ret[i]),":%s",rs);
|
|
||||||
|
BIO_snprintf(buf, len,"error:%08lX:%s:%s:%s", e, ls?ls:lsbuf,
|
||||||
|
fs?fs:fsbuf, rs?rs:rsbuf);
|
||||||
|
if (strlen(buf) == len-1)
|
||||||
|
{
|
||||||
|
/* output may be truncated; make sure we always have 5
|
||||||
|
* colon-separated fields, i.e. 4 colons ... */
|
||||||
|
#define NUM_COLONS 4
|
||||||
|
if (len > NUM_COLONS) /* ... if possible */
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
char *s = buf;
|
||||||
|
|
||||||
|
for (i = 0; i < NUM_COLONS; i++)
|
||||||
|
{
|
||||||
|
char *colon = strchr(s, ':');
|
||||||
|
if (colon == NULL || colon > &buf[len-1] - NUM_COLONS + i)
|
||||||
|
{
|
||||||
|
/* set colon no. i at last possible position
|
||||||
|
* (buf[len-1] is the terminating 0)*/
|
||||||
|
colon = &buf[len-1] - NUM_COLONS + i;
|
||||||
|
*colon = ':';
|
||||||
|
}
|
||||||
|
s = colon + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* BAD for multi-threading: uses a local buffer if ret == NULL */
|
||||||
|
/* ERR_error_string_n should be used instead for ret != NULL
|
||||||
|
* as ERR_error_string cannot know how large the buffer is */
|
||||||
|
char *ERR_error_string(unsigned long e, char *ret)
|
||||||
|
{
|
||||||
|
static char buf[256];
|
||||||
|
|
||||||
|
if (ret == NULL) ret=buf;
|
||||||
|
ERR_error_string_n(e, buf, 256);
|
||||||
|
|
||||||
return(ret);
|
return(ret);
|
||||||
}
|
}
|
||||||
|
@ -233,6 +233,7 @@ unsigned long ERR_peek_error_line_data(const char **file,int *line,
|
|||||||
const char **data,int *flags);
|
const char **data,int *flags);
|
||||||
void ERR_clear_error(void );
|
void ERR_clear_error(void );
|
||||||
char *ERR_error_string(unsigned long e,char *buf);
|
char *ERR_error_string(unsigned long e,char *buf);
|
||||||
|
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_lib_error_string(unsigned long e);
|
||||||
const char *ERR_func_error_string(unsigned long e);
|
const char *ERR_func_error_string(unsigned long e);
|
||||||
const char *ERR_reason_error_string(unsigned long e);
|
const char *ERR_reason_error_string(unsigned long e);
|
||||||
|
@ -76,7 +76,8 @@ void ERR_print_errors_fp(FILE *fp)
|
|||||||
es=CRYPTO_thread_id();
|
es=CRYPTO_thread_id();
|
||||||
while ((l=ERR_get_error_line_data(&file,&line,&data,&flags)) != 0)
|
while ((l=ERR_get_error_line_data(&file,&line,&data,&flags)) != 0)
|
||||||
{
|
{
|
||||||
fprintf(fp,"%lu:%s:%s:%d:%s\n",es,ERR_error_string(l,buf),
|
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:"");
|
file,line,(flags&ERR_TXT_STRING)?data:"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -94,7 +95,8 @@ void ERR_print_errors(BIO *bp)
|
|||||||
es=CRYPTO_thread_id();
|
es=CRYPTO_thread_id();
|
||||||
while ((l=ERR_get_error_line_data(&file,&line,&data,&flags)) != 0)
|
while ((l=ERR_get_error_line_data(&file,&line,&data,&flags)) != 0)
|
||||||
{
|
{
|
||||||
sprintf(buf2,"%lu:%s:%s:%d:",es,ERR_error_string(l,buf),
|
ERR_error_string_n(l, buf, sizeof buf);
|
||||||
|
sprintf(buf2,"%lu:%s:%s:%d:",es,buf,
|
||||||
file,line);
|
file,line);
|
||||||
BIO_write(bp,buf2,strlen(buf2));
|
BIO_write(bp,buf2,strlen(buf2));
|
||||||
if (flags & ERR_TXT_STRING)
|
if (flags & ERR_TXT_STRING)
|
||||||
|
@ -9,6 +9,7 @@ ERR_error_string - obtain human-readable error message
|
|||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
|
|
||||||
char *ERR_error_string(unsigned long e, char *buf);
|
char *ERR_error_string(unsigned long e, char *buf);
|
||||||
|
char *ERR_error_string_n(unsigned long e, char *buf, size_t len);
|
||||||
|
|
||||||
const char *ERR_lib_error_string(unsigned long e);
|
const char *ERR_lib_error_string(unsigned long e);
|
||||||
const char *ERR_func_error_string(unsigned long e);
|
const char *ERR_func_error_string(unsigned long e);
|
||||||
@ -17,9 +18,13 @@ ERR_error_string - obtain human-readable error message
|
|||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
ERR_error_string() generates a human-readable string representing the
|
ERR_error_string() generates a human-readable string representing the
|
||||||
error code B<e>, and places it at B<buf>. B<buf> must be at least 120
|
error code I<e>, and places it at I<buf>. I<buf> must be at least 120
|
||||||
bytes long. If B<buf> is B<NULL>, the error string is placed in a
|
bytes long. If I<buf> is B<NULL>, the error string is placed in a
|
||||||
static buffer.
|
static buffer.
|
||||||
|
ERR_error_string_n() is a variant of ERR_error_string() that writes
|
||||||
|
at most I<len> characters (including the terminating 0)
|
||||||
|
and truncates the resulting string if necessary.
|
||||||
|
For ERR_error_string_n(), I<buf> may not be B<NULL>.
|
||||||
|
|
||||||
The string will have the following format:
|
The string will have the following format:
|
||||||
|
|
||||||
@ -45,7 +50,7 @@ all error codes currently in the queue.
|
|||||||
=head1 RETURN VALUES
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
ERR_error_string() returns a pointer to a static buffer containing the
|
ERR_error_string() returns a pointer to a static buffer containing the
|
||||||
string if B<buf == NULL>, B<buf> otherwise.
|
string if I<buf> B<== NULL>, I<buf> otherwise.
|
||||||
|
|
||||||
ERR_lib_error_string(), ERR_func_error_string() and
|
ERR_lib_error_string(), ERR_func_error_string() and
|
||||||
ERR_reason_error_string() return the strings, and B<NULL> if
|
ERR_reason_error_string() return the strings, and B<NULL> if
|
||||||
@ -61,5 +66,6 @@ L<ERR_print_errors(3)|ERR_print_errors(3)>
|
|||||||
=head1 HISTORY
|
=head1 HISTORY
|
||||||
|
|
||||||
ERR_error_string() is available in all versions of SSLeay and OpenSSL.
|
ERR_error_string() is available in all versions of SSLeay and OpenSSL.
|
||||||
|
ERR_error_string_n() was added in OpenSSL 0.9.6.
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
@ -2262,3 +2262,5 @@ NCONF_dump_bio 2287
|
|||||||
CONF_dump_bio 2288
|
CONF_dump_bio 2288
|
||||||
NCONF_free_data 2289
|
NCONF_free_data 2289
|
||||||
CONF_set_default_method 2290
|
CONF_set_default_method 2290
|
||||||
|
ERR_error_string_n 2291
|
||||||
|
BIO_snprintf 2292
|
||||||
|
Loading…
x
Reference in New Issue
Block a user