Use signed types where necessary, and add missing functionality
to make SSL_nread0 work.
This commit is contained in:
parent
9e03333fd5
commit
4991d07cf3
@ -16,12 +16,17 @@
|
|||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#include <openssl/bio.h>
|
#include <openssl/bio.h>
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
|
#include <openssl/err.h>
|
||||||
#include <openssl/crypto.h>
|
#include <openssl/crypto.h>
|
||||||
|
|
||||||
|
#include "openssl/e_os.h"
|
||||||
|
#ifndef SSIZE_MAX
|
||||||
|
# define SSIZE_MAX INT_MAX
|
||||||
|
#endif
|
||||||
|
|
||||||
static int bio_new(BIO *bio);
|
static int bio_new(BIO *bio);
|
||||||
static int bio_free(BIO *bio);
|
static int bio_free(BIO *bio);
|
||||||
static int bio_read(BIO *bio, char *buf, int size);
|
static int bio_read(BIO *bio, char *buf, int size);
|
||||||
@ -209,7 +214,7 @@ static int bio_read(BIO *bio, char *buf, int size_)
|
|||||||
static ssize_t bio_nread0(BIO *bio, char **buf)
|
static ssize_t bio_nread0(BIO *bio, char **buf)
|
||||||
{
|
{
|
||||||
struct bio_bio_st *b, *peer_b;
|
struct bio_bio_st *b, *peer_b;
|
||||||
size_t num;
|
ssize_t num;
|
||||||
|
|
||||||
BIO_clear_retry_flags(bio);
|
BIO_clear_retry_flags(bio);
|
||||||
|
|
||||||
@ -244,15 +249,20 @@ static ssize_t bio_nread0(BIO *bio, char **buf)
|
|||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t bio_nread(BIO *bio, char **buf, size_t num)
|
static ssize_t bio_nread(BIO *bio, char **buf, size_t num_)
|
||||||
{
|
{
|
||||||
struct bio_bio_st *b, *peer_b;
|
struct bio_bio_st *b, *peer_b;
|
||||||
size_t available;
|
ssize_t num, available;
|
||||||
|
|
||||||
|
if (num_ > SSIZE_MAX)
|
||||||
|
num = SSIZE_MAX;
|
||||||
|
else
|
||||||
|
num = (ssize_t)num_;
|
||||||
|
|
||||||
available = bio_nread0(bio, buf);
|
available = bio_nread0(bio, buf);
|
||||||
if (num > available)
|
if (num > available)
|
||||||
num = available;
|
num = available;
|
||||||
if (num == 0)
|
if (num <= 0)
|
||||||
return num;
|
return num;
|
||||||
|
|
||||||
b = bio->ptr;
|
b = bio->ptr;
|
||||||
@ -352,7 +362,7 @@ static int bio_write(BIO *bio, char *buf, int num_)
|
|||||||
* (example usage: bio_nwrite0(), write to buffer, bio_nwrite()
|
* (example usage: bio_nwrite0(), write to buffer, bio_nwrite()
|
||||||
* or just bio_nwrite(), write to buffer)
|
* or just bio_nwrite(), write to buffer)
|
||||||
*/
|
*/
|
||||||
static size_t bio_nwrite0(BIO *bio, char **buf)
|
static ssize_t bio_nwrite0(BIO *bio, char **buf)
|
||||||
{
|
{
|
||||||
struct bio_bio_st *b;
|
struct bio_bio_st *b;
|
||||||
size_t num;
|
size_t num;
|
||||||
@ -400,15 +410,20 @@ static size_t bio_nwrite0(BIO *bio, char **buf)
|
|||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t bio_nwrite(BIO *bio, char **buf, size_t num)
|
static ssize_t bio_nwrite(BIO *bio, char **buf, size_t num_)
|
||||||
{
|
{
|
||||||
struct bio_bio_st *b;
|
struct bio_bio_st *b;
|
||||||
size_t space;
|
ssize_t num, space;
|
||||||
|
|
||||||
|
if (num_ > SSIZE_MAX)
|
||||||
|
num = SSIZE_MAX;
|
||||||
|
else
|
||||||
|
num = (ssize_t)num_;
|
||||||
|
|
||||||
space = bio_nwrite0(bio, buf);
|
space = bio_nwrite0(bio, buf);
|
||||||
if (num > space)
|
if (num > space)
|
||||||
num = space;
|
num = space;
|
||||||
if (num == 0)
|
if (num <= 0)
|
||||||
return num;
|
return num;
|
||||||
b = bio->ptr;
|
b = bio->ptr;
|
||||||
assert(b != NULL);
|
assert(b != NULL);
|
||||||
@ -510,6 +525,11 @@ static long bio_ctrl(BIO *bio, int cmd, long num, void *ptr)
|
|||||||
ret = 1;
|
ret = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case BIO_C_NREAD0:
|
||||||
|
/* prepare for non-copying read */
|
||||||
|
ret = (long) bio_nread0(bio, ptr);
|
||||||
|
break;
|
||||||
|
|
||||||
case BIO_C_NREAD:
|
case BIO_C_NREAD:
|
||||||
/* non-copying read */
|
/* non-copying read */
|
||||||
ret = (long) bio_nread(bio, ptr, (size_t) num);
|
ret = (long) bio_nread(bio, ptr, (size_t) num);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user