Add a BIO_ADDR_clear function Adds a new function BIO_ADDR_clear to reset a BIO_ADDR back to an unitialised state, and to set the family to AF_UNSPEC. Reviewed-by: Viktor Dukhovni <viktor@openssl.org>
diff --git a/crypto/bio/b_addr.c b/crypto/bio/b_addr.c index 20cb66d..f1ff5fe 100644 --- a/crypto/bio/b_addr.c +++ b/crypto/bio/b_addr.c
@@ -76,6 +76,7 @@ BIO_ADDR *BIO_ADDR_new(void) { BIO_ADDR *ret = (BIO_ADDR *)OPENSSL_zalloc(sizeof(BIO_ADDR)); + ret->sa.sa_family = AF_UNSPEC; return ret; } @@ -84,6 +85,12 @@ OPENSSL_free(ap); } +void BIO_ADDR_clear(BIO_ADDR *ap) +{ + memset(ap, 0, sizeof(*ap)); + ap->sa.sa_family = AF_UNSPEC; +} + /* * BIO_ADDR_make - non-public routine to fill a BIO_ADDR with the contents * of a struct sockaddr.
diff --git a/doc/crypto/BIO_ADDR.pod b/doc/crypto/BIO_ADDR.pod index cec7ddd..a3c9b5c 100644 --- a/doc/crypto/BIO_ADDR.pod +++ b/doc/crypto/BIO_ADDR.pod
@@ -2,7 +2,7 @@ =head1 NAME -BIO_ADDR, BIO_ADDR_new, BIO_ADDR_free, BIO_ADDR_rawmake, +BIO_ADDR, BIO_ADDR_new, BIO_ADDR_clear, BIO_ADDR_free, BIO_ADDR_rawmake, BIO_ADDR_family, BIO_ADDR_rawaddress, BIO_ADDR_rawport, BIO_ADDR_hostname_string, BIO_ADDR_service_string, BIO_ADDR_path_string - BIO_ADDR routines @@ -16,6 +16,7 @@ BIO_ADDR *BIO_ADDR_new(void); void BIO_ADDR_free(BIO_ADDR *); + void BIO_ADDR_clear(BIO_ADDR *ap); int BIO_ADDR_rawmake(BIO_ADDR *ap, int family, const void *where, size_t wherelen, unsigned short port); int BIO_ADDR_family(const BIO_ADDR *ap); @@ -38,6 +39,9 @@ BIO_ADDR_free() frees a B<BIO_ADDR> created with BIO_ADDR_new(). +BIO_ADDR_clear() clears any data held within the provided B<BIO_ADDR> and sets +it back to an uninitialised state. + BIO_ADDR_rawmake() takes a protocol B<family>, an byte array of size B<wherelen> with an address in network byte order pointed at by B<where> and a port number in network byte order in B<port> (except @@ -50,7 +54,8 @@ BIO_ADDR_family() returns the protocol family of the given B<BIO_ADDR>. The possible non-error results are one of the -constants AF_INET, AF_INET6 and AF_UNIX. +constants AF_INET, AF_INET6 and AF_UNIX. It will also return AF_UNSPEC if the +BIO_ADDR has not been initialised. BIO_ADDR_rawaddress() will write the raw address of the given B<BIO_ADDR> in the area pointed at by B<p> if B<p> is non-NULL,
diff --git a/include/openssl/bio.h b/include/openssl/bio.h index 2989218..cfb7b0f 100644 --- a/include/openssl/bio.h +++ b/include/openssl/bio.h
@@ -713,6 +713,7 @@ int BIO_ADDR_rawmake(BIO_ADDR *ap, int family, const void *where, size_t wherelen, unsigned short port); void BIO_ADDR_free(BIO_ADDR *); +void BIO_ADDR_clear(BIO_ADDR *ap); int BIO_ADDR_family(const BIO_ADDR *ap); int BIO_ADDR_rawaddress(const BIO_ADDR *ap, void *p, size_t *l); unsigned short BIO_ADDR_rawport(const BIO_ADDR *ap);