Add a BIO_ADDR_clear function
authorMatt Caswell <matt@openssl.org>
Fri, 5 Feb 2016 19:40:44 +0000 (19:40 +0000)
committerMatt Caswell <matt@openssl.org>
Fri, 5 Feb 2016 20:47:36 +0000 (20:47 +0000)
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>
crypto/bio/b_addr.c
doc/crypto/BIO_ADDR.pod
include/openssl/bio.h

index 20cb66d..f1ff5fe 100644 (file)
@@ -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 @@ void BIO_ADDR_free(BIO_ADDR *ap)
     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.
index cec7ddd..a3c9b5c 100644 (file)
@@ -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_path_string - BIO_ADDR routines
 
  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_accept_ex().
 
 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 @@ I<Read on about the addresses in L</RAW ADDRESSES> below>.
 
 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,
index 2989218..cfb7b0f 100644 (file)
@@ -713,6 +713,7 @@ BIO_ADDR *BIO_ADDR_new(void);
 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);