bplist: Move realloc from parse_unicode_node() into plist_utf16be_to_utf8()

It is very confusing to handle the reallocation (buffer shrinking)
outside of the actual conversion function.
diff --git a/src/bplist.c b/src/bplist.c
index 840e40c..897b90f 100644
--- a/src/bplist.c
+++ b/src/bplist.c
@@ -324,7 +324,8 @@
 static char *plist_utf16be_to_utf8(uint16_t *unistr, long len, long *items_read, long *items_written)
 {
 	if (!unistr || (len <= 0)) return NULL;
-	char *outbuf;
+	char* outbuf;
+	char* outbuf_new;
 	int p = 0;
 	long i = 0;
 
@@ -332,6 +333,7 @@
 	uint32_t w;
 	int read_lead_surrogate = 0;
 
+	/* allocate with enough space */
 	outbuf = (char*)malloc(4*(len+1));
 	if (!outbuf) {
 		PLIST_BIN_ERR("%s: Could not allocate %" PRIu64 " bytes\n", __func__, (uint64_t)(4*(len+1)));
@@ -381,30 +383,29 @@
 	}
 	outbuf[p] = 0;
 
+	/* reduce the size to the actual size */
+	outbuf_new = realloc(outbuf, p+1);
+	if (outbuf_new) {
+		outbuf = outbuf_new;
+	}
+
 	return outbuf;
 }
 
 static plist_t parse_unicode_node(const char **bnode, uint64_t size)
 {
     plist_data_t data = plist_new_plist_data();
-    char *tmpstr = NULL;
     long items_read = 0;
     long items_written = 0;
 
     data->type = PLIST_STRING;
-
-    tmpstr = plist_utf16be_to_utf8((uint16_t*)(*bnode), size, &items_read, &items_written);
-    if (!tmpstr) {
+    data->strval = plist_utf16be_to_utf8((uint16_t*)(*bnode), size, &items_read, &items_written);
+    if (!data->strval) {
         plist_free_data(data);
         return NULL;
     }
-    tmpstr[items_written] = '\0';
-
-    data->type = PLIST_STRING;
-    data->strval = realloc(tmpstr, items_written+1);
-    if (!data->strval)
-        data->strval = tmpstr;
     data->length = items_written;
+
     return node_create(NULL, data);
 }