libidav/utils.c

changeset 39
3e55bed345f9
parent 33
0bbbb0341606
child 40
a95ee94b9204
--- a/libidav/utils.c	Tue Sep 03 12:08:35 2013 +0200
+++ b/libidav/utils.c	Sat Sep 07 14:08:43 2013 +0200
@@ -197,8 +197,12 @@
 }
 
 
+char* util_base64decode(char *in) {
+    int len = 0;
+    return util_base64decode_len(in, &len);
+}
 
-char* util_base64decode(char* in) {
+char* util_base64decode_len(char* in, int *outlen) {
     size_t len = strlen(in);
     char *out = calloc(1, len);
     
@@ -207,12 +211,34 @@
     BIO_set_flags(d, BIO_FLAGS_BASE64_NO_NL);
     b = BIO_push(d, b);
 
-    BIO_read(b, out, len);
+    *outlen = BIO_read(b, out, len);
     BIO_free_all(b);
     
     return out;
 }
 
+char* util_base64encode(char *in, size_t len) { 
+    BIO *b;
+    BIO *e;
+    BUF_MEM *mem;
+
+    e = BIO_new(BIO_f_base64());
+    b = BIO_new(BIO_s_mem());
+    
+    e = BIO_push(e, b);
+    BIO_write(e, in, len);
+    BIO_flush(e);
+    
+    BIO_get_mem_ptr(e, &mem);
+    char *out = malloc(mem->length);
+    memcpy(out, mem->data, mem->length -1);
+    out[mem->length - 1] = '\0';
+
+    BIO_free_all(e);
+
+    return out;
+}
+
 /*
  * gets a substring from 0 to the appearance of the token
  * tokens are separated by space

mercurial