Latest update
This commit is contained in:
@@ -696,6 +696,7 @@ int BIO_lookup_ex(const char *host, const char *service, int lookup_type,
|
||||
/* Note that |res| SHOULD be a 'struct addrinfo **' thanks to
|
||||
* macro magic in bio_lcl.h
|
||||
*/
|
||||
retry:
|
||||
switch ((gai_ret = getaddrinfo(host, service, &hints, res))) {
|
||||
# ifdef EAI_SYSTEM
|
||||
case EAI_SYSTEM:
|
||||
@@ -706,6 +707,19 @@ int BIO_lookup_ex(const char *host, const char *service, int lookup_type,
|
||||
case 0:
|
||||
ret = 1; /* Success */
|
||||
break;
|
||||
# if (defined(EAI_FAMILY) || defined(EAI_ADDRFAMILY)) && defined(AI_ADDRCONFIG)
|
||||
# ifdef EAI_FAMILY
|
||||
case EAI_FAMILY:
|
||||
# endif
|
||||
# ifdef EAI_ADDRFAMILY
|
||||
case EAI_ADDRFAMILY:
|
||||
# endif
|
||||
if (hints.ai_flags & AI_ADDRCONFIG) {
|
||||
hints.ai_flags &= ~AI_ADDRCONFIG;
|
||||
goto retry;
|
||||
}
|
||||
# endif
|
||||
/* fall through */
|
||||
default:
|
||||
BIOerr(BIO_F_BIO_LOOKUP_EX, ERR_R_SYS_LIB);
|
||||
ERR_add_error_data(1, gai_strerror(gai_ret));
|
||||
|
||||
@@ -152,7 +152,7 @@ extern CRYPTO_RWLOCK *bio_type_lock;
|
||||
|
||||
void bio_sock_cleanup_int(void);
|
||||
|
||||
#if BIO_FLAGS_UPLINK==0
|
||||
#if BIO_FLAGS_UPLINK_INTERNAL==0
|
||||
/* Shortcut UPLINK calls on most platforms... */
|
||||
# define UP_stdin stdin
|
||||
# define UP_stdout stdout
|
||||
|
||||
@@ -784,7 +784,7 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
|
||||
* reasons. When BIO_CTRL_DGRAM_SET_PEEK_MODE was first defined its value
|
||||
* was incorrectly clashing with BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE. The
|
||||
* value has been updated to a non-clashing value. However to preserve
|
||||
* binary compatiblity we now respond to both the old value and the new one
|
||||
* binary compatibility we now respond to both the old value and the new one
|
||||
*/
|
||||
case BIO_CTRL_DGRAM_SCTP_SET_IN_HANDSHAKE:
|
||||
case BIO_CTRL_DGRAM_SET_PEEK_MODE:
|
||||
|
||||
+2
-2
@@ -94,7 +94,7 @@ static int fd_new(BIO *bi)
|
||||
bi->init = 0;
|
||||
bi->num = -1;
|
||||
bi->ptr = NULL;
|
||||
bi->flags = BIO_FLAGS_UPLINK; /* essentially redundant */
|
||||
bi->flags = BIO_FLAGS_UPLINK_INTERNAL; /* essentially redundant */
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -107,7 +107,7 @@ static int fd_free(BIO *a)
|
||||
UP_close(a->num);
|
||||
}
|
||||
a->init = 0;
|
||||
a->flags = BIO_FLAGS_UPLINK;
|
||||
a->flags = BIO_FLAGS_UPLINK_INTERNAL;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
+21
-21
@@ -86,8 +86,8 @@ BIO *BIO_new_file(const char *filename, const char *mode)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
BIO_clear_flags(ret, BIO_FLAGS_UPLINK); /* we did fopen -> we disengage
|
||||
* UPLINK */
|
||||
/* we did fopen -> we disengage UPLINK */
|
||||
BIO_clear_flags(ret, BIO_FLAGS_UPLINK_INTERNAL);
|
||||
BIO_set_fp(ret, file, fp_flags);
|
||||
return ret;
|
||||
}
|
||||
@@ -100,7 +100,7 @@ BIO *BIO_new_fp(FILE *stream, int close_flag)
|
||||
return NULL;
|
||||
|
||||
/* redundant flag, left for documentation purposes */
|
||||
BIO_set_flags(ret, BIO_FLAGS_UPLINK);
|
||||
BIO_set_flags(ret, BIO_FLAGS_UPLINK_INTERNAL);
|
||||
BIO_set_fp(ret, stream, close_flag);
|
||||
return ret;
|
||||
}
|
||||
@@ -115,7 +115,7 @@ static int file_new(BIO *bi)
|
||||
bi->init = 0;
|
||||
bi->num = 0;
|
||||
bi->ptr = NULL;
|
||||
bi->flags = BIO_FLAGS_UPLINK; /* default to UPLINK */
|
||||
bi->flags = BIO_FLAGS_UPLINK_INTERNAL; /* default to UPLINK */
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -125,12 +125,12 @@ static int file_free(BIO *a)
|
||||
return 0;
|
||||
if (a->shutdown) {
|
||||
if ((a->init) && (a->ptr != NULL)) {
|
||||
if (a->flags & BIO_FLAGS_UPLINK)
|
||||
if (a->flags & BIO_FLAGS_UPLINK_INTERNAL)
|
||||
UP_fclose(a->ptr);
|
||||
else
|
||||
fclose(a->ptr);
|
||||
a->ptr = NULL;
|
||||
a->flags = BIO_FLAGS_UPLINK;
|
||||
a->flags = BIO_FLAGS_UPLINK_INTERNAL;
|
||||
}
|
||||
a->init = 0;
|
||||
}
|
||||
@@ -142,13 +142,13 @@ static int file_read(BIO *b, char *out, int outl)
|
||||
int ret = 0;
|
||||
|
||||
if (b->init && (out != NULL)) {
|
||||
if (b->flags & BIO_FLAGS_UPLINK)
|
||||
if (b->flags & BIO_FLAGS_UPLINK_INTERNAL)
|
||||
ret = UP_fread(out, 1, (int)outl, b->ptr);
|
||||
else
|
||||
ret = fread(out, 1, (int)outl, (FILE *)b->ptr);
|
||||
if (ret == 0
|
||||
&& (b->flags & BIO_FLAGS_UPLINK) ? UP_ferror((FILE *)b->ptr) :
|
||||
ferror((FILE *)b->ptr)) {
|
||||
&& (b->flags & BIO_FLAGS_UPLINK_INTERNAL
|
||||
? UP_ferror((FILE *)b->ptr) : ferror((FILE *)b->ptr))) {
|
||||
SYSerr(SYS_F_FREAD, get_last_sys_error());
|
||||
BIOerr(BIO_F_FILE_READ, ERR_R_SYS_LIB);
|
||||
ret = -1;
|
||||
@@ -162,7 +162,7 @@ static int file_write(BIO *b, const char *in, int inl)
|
||||
int ret = 0;
|
||||
|
||||
if (b->init && (in != NULL)) {
|
||||
if (b->flags & BIO_FLAGS_UPLINK)
|
||||
if (b->flags & BIO_FLAGS_UPLINK_INTERNAL)
|
||||
ret = UP_fwrite(in, (int)inl, 1, b->ptr);
|
||||
else
|
||||
ret = fwrite(in, (int)inl, 1, (FILE *)b->ptr);
|
||||
@@ -189,20 +189,20 @@ static long file_ctrl(BIO *b, int cmd, long num, void *ptr)
|
||||
switch (cmd) {
|
||||
case BIO_C_FILE_SEEK:
|
||||
case BIO_CTRL_RESET:
|
||||
if (b->flags & BIO_FLAGS_UPLINK)
|
||||
if (b->flags & BIO_FLAGS_UPLINK_INTERNAL)
|
||||
ret = (long)UP_fseek(b->ptr, num, 0);
|
||||
else
|
||||
ret = (long)fseek(fp, num, 0);
|
||||
break;
|
||||
case BIO_CTRL_EOF:
|
||||
if (b->flags & BIO_FLAGS_UPLINK)
|
||||
if (b->flags & BIO_FLAGS_UPLINK_INTERNAL)
|
||||
ret = (long)UP_feof(fp);
|
||||
else
|
||||
ret = (long)feof(fp);
|
||||
break;
|
||||
case BIO_C_FILE_TELL:
|
||||
case BIO_CTRL_INFO:
|
||||
if (b->flags & BIO_FLAGS_UPLINK)
|
||||
if (b->flags & BIO_FLAGS_UPLINK_INTERNAL)
|
||||
ret = UP_ftell(b->ptr);
|
||||
else
|
||||
ret = ftell(fp);
|
||||
@@ -212,22 +212,22 @@ static long file_ctrl(BIO *b, int cmd, long num, void *ptr)
|
||||
b->shutdown = (int)num & BIO_CLOSE;
|
||||
b->ptr = ptr;
|
||||
b->init = 1;
|
||||
# if BIO_FLAGS_UPLINK!=0
|
||||
# if BIO_FLAGS_UPLINK_INTERNAL!=0
|
||||
# if defined(__MINGW32__) && defined(__MSVCRT__) && !defined(_IOB_ENTRIES)
|
||||
# define _IOB_ENTRIES 20
|
||||
# endif
|
||||
/* Safety net to catch purely internal BIO_set_fp calls */
|
||||
# if defined(_MSC_VER) && _MSC_VER>=1900
|
||||
if (ptr == stdin || ptr == stdout || ptr == stderr)
|
||||
BIO_clear_flags(b, BIO_FLAGS_UPLINK);
|
||||
BIO_clear_flags(b, BIO_FLAGS_UPLINK_INTERNAL);
|
||||
# elif defined(_IOB_ENTRIES)
|
||||
if ((size_t)ptr >= (size_t)stdin &&
|
||||
(size_t)ptr < (size_t)(stdin + _IOB_ENTRIES))
|
||||
BIO_clear_flags(b, BIO_FLAGS_UPLINK);
|
||||
BIO_clear_flags(b, BIO_FLAGS_UPLINK_INTERNAL);
|
||||
# endif
|
||||
# endif
|
||||
# ifdef UP_fsetmod
|
||||
if (b->flags & BIO_FLAGS_UPLINK)
|
||||
if (b->flags & BIO_FLAGS_UPLINK_INTERNAL)
|
||||
UP_fsetmod(b->ptr, (char)((num & BIO_FP_TEXT) ? 't' : 'b'));
|
||||
else
|
||||
# endif
|
||||
@@ -296,8 +296,8 @@ static long file_ctrl(BIO *b, int cmd, long num, void *ptr)
|
||||
}
|
||||
b->ptr = fp;
|
||||
b->init = 1;
|
||||
BIO_clear_flags(b, BIO_FLAGS_UPLINK); /* we did fopen -> we disengage
|
||||
* UPLINK */
|
||||
/* we did fopen -> we disengage UPLINK */
|
||||
BIO_clear_flags(b, BIO_FLAGS_UPLINK_INTERNAL);
|
||||
break;
|
||||
case BIO_C_GET_FILE_PTR:
|
||||
/* the ptr parameter is actually a FILE ** in this case. */
|
||||
@@ -313,7 +313,7 @@ static long file_ctrl(BIO *b, int cmd, long num, void *ptr)
|
||||
b->shutdown = (int)num;
|
||||
break;
|
||||
case BIO_CTRL_FLUSH:
|
||||
st = b->flags & BIO_FLAGS_UPLINK
|
||||
st = b->flags & BIO_FLAGS_UPLINK_INTERNAL
|
||||
? UP_fflush(b->ptr) : fflush((FILE *)b->ptr);
|
||||
if (st == EOF) {
|
||||
SYSerr(SYS_F_FFLUSH, get_last_sys_error());
|
||||
@@ -342,7 +342,7 @@ static int file_gets(BIO *bp, char *buf, int size)
|
||||
int ret = 0;
|
||||
|
||||
buf[0] = '\0';
|
||||
if (bp->flags & BIO_FLAGS_UPLINK) {
|
||||
if (bp->flags & BIO_FLAGS_UPLINK_INTERNAL) {
|
||||
if (!UP_fgets(buf, size, bp->ptr))
|
||||
goto err;
|
||||
} else {
|
||||
|
||||
@@ -259,9 +259,7 @@ static long mem_ctrl(BIO *b, int cmd, long num, void *ptr)
|
||||
bm = bbm->buf;
|
||||
if (bm->data != NULL) {
|
||||
if (!(b->flags & BIO_FLAGS_MEM_RDONLY)) {
|
||||
if (b->flags & BIO_FLAGS_NONCLEAR_RST) {
|
||||
bm->length = bm->max;
|
||||
} else {
|
||||
if (!(b->flags & BIO_FLAGS_NONCLEAR_RST)) {
|
||||
memset(bm->data, 0, bm->max);
|
||||
bm->length = 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user