Have BIO_get_mem_data return a size_t and uint8_t*

Change-Id: I883f9c3527b572a2140ae4899cf4409cdc25c6dc
Reviewed-on: https://boringssl-review.googlesource.com/1261
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/crypto/bio/bio_mem.c b/crypto/bio/bio_mem.c
index 4d047cf..457c2e0 100644
--- a/crypto/bio/bio_mem.c
+++ b/crypto/bio/bio_mem.c
@@ -254,7 +254,7 @@
       ret = (long)b->length;
       if (ptr != NULL) {
         pptr = (char **)ptr;
-        *pptr = (char *)&(b->data[0]);
+        *pptr = (char *)&b->data[0];
       }
       break;
     case BIO_C_SET_BUF_MEM:
@@ -297,6 +297,19 @@
 
 const BIO_METHOD *BIO_s_mem(void) { return &mem_method; }
 
+int BIO_mem_contents(const BIO *bio, const uint8_t **out_contents,
+                     size_t *out_len) {
+  const BUF_MEM *b;
+  if (bio->method != &mem_method) {
+    return 0;
+  }
+
+  b = (BUF_MEM *)bio->ptr;
+  *out_contents = (uint8_t *)b->data;
+  *out_len = b->length;
+  return 1;
+}
+
 long BIO_get_mem_data(BIO *bio, char **contents) {
   return BIO_ctrl(bio, BIO_CTRL_INFO, 0, (char *) contents);
 }