Change API around #PLIST_DATA to use uint8_t instead of char arrays

This makes it more obvious that it is arbitrary data and not necessarily
a string value.
diff --git a/cython/plist.pyx b/cython/plist.pyx
index b5f4ef6..a16e7be 100644
--- a/cython/plist.pyx
+++ b/cython/plist.pyx
@@ -48,9 +48,9 @@
     void plist_get_string_val(plist_t node, char **val)
     void plist_set_string_val(plist_t node, char *val)
 
-    plist_t plist_new_data(char *val, uint64_t length)
-    void plist_get_data_val(plist_t node, char **val, uint64_t * length)
-    void plist_set_data_val(plist_t node, char *val, uint64_t length)
+    plist_t plist_new_data(uint8_t *val, uint64_t length)
+    void plist_get_data_val(plist_t node, uint8_t **val, uint64_t * length)
+    void plist_set_data_val(plist_t node, uint8_t *val, uint64_t length)
 
     plist_t plist_new_null();
 
@@ -579,7 +579,7 @@
 
     cpdef bytes get_value(self):
         cdef:
-            char* val = NULL
+            uint8_t* val = NULL
             uint64_t length = 0
         plist_get_data_val(self._c_node, &val, &length)
 
diff --git a/include/plist/Data.h b/include/plist/Data.h
index b566a6c..3f1c329 100644
--- a/include/plist/Data.h
+++ b/include/plist/Data.h
@@ -35,13 +35,13 @@
     Data(plist_t node, Node* parent = NULL);
     Data(const Data& d);
     Data& operator=(const Data& b);
-    Data(const std::vector<char>& buff);
+    Data(const std::vector<uint8_t>& buff);
     virtual ~Data();
 
     Node* Clone() const;
 
-    void SetValue(const std::vector<char>& buff);
-    std::vector<char> GetValue() const;
+    void SetValue(const std::vector<uint8_t>& buff);
+    std::vector<uint8_t> GetValue() const;
 };
 
 };
diff --git a/include/plist/plist.h b/include/plist/plist.h
index 46aca16..dcc4a04 100644
--- a/include/plist/plist.h
+++ b/include/plist/plist.h
@@ -258,7 +258,7 @@
      * @return the created item
      * @sa #plist_type
      */
-    PLIST_API plist_t plist_new_data(const char *val, uint64_t length);
+    PLIST_API plist_t plist_new_data(const uint8_t *val, uint64_t length);
 
     /**
      * Create a new plist_t type #PLIST_DATE
@@ -445,7 +445,7 @@
     PLIST_API void plist_dict_get_item_key(plist_t node, char **key);
 
     /**
-     * Get the nth item in a #PLIST_DICT node.
+     * Get the item for given key in a #PLIST_DICT node.
      *
      * @param node the node of type #PLIST_DICT
      * @param key the identifier of the item to get.
@@ -595,7 +595,7 @@
      * @param length the length of the buffer
      * @note Use plist_mem_free() to free the allocated memory.
      */
-    PLIST_API void plist_get_data_val(plist_t node, char **val, uint64_t * length);
+    PLIST_API void plist_get_data_val(plist_t node, uint8_t **val, uint64_t * length);
 
     /**
      * Get a pointer to the data buffer of a #PLIST_DATA node.
@@ -608,7 +608,7 @@
      *
      * @return Pointer to the buffer
      */
-    PLIST_API const char* plist_get_data_ptr(plist_t node, uint64_t* length);
+    PLIST_API const uint8_t* plist_get_data_ptr(plist_t node, uint64_t * length);
 
     /**
      * Get the value of a #PLIST_DATE node.
@@ -700,7 +700,7 @@
      *		be freed by the node.
      * @param length the length of the buffer
      */
-    PLIST_API void plist_set_data_val(plist_t node, const char *val, uint64_t length);
+    PLIST_API void plist_set_data_val(plist_t node, const uint8_t *val, uint64_t length);
 
     /**
      * Set the value of a node.
diff --git a/src/Data.cpp b/src/Data.cpp
index a96fc50..c4709f7 100644
--- a/src/Data.cpp
+++ b/src/Data.cpp
@@ -34,7 +34,7 @@
 
 Data::Data(const PList::Data& d) : Node(PLIST_DATA)
 {
-    std::vector<char> b = d.GetValue();
+    std::vector<uint8_t> b = d.GetValue();
     plist_set_data_val(_node, &b[0], b.size());
 }
 
@@ -45,7 +45,7 @@
     return *this;
 }
 
-Data::Data(const std::vector<char>& buff) : Node(PLIST_DATA)
+Data::Data(const std::vector<uint8_t>& buff) : Node(PLIST_DATA)
 {
     plist_set_data_val(_node, &buff[0], buff.size());
 }
@@ -59,17 +59,17 @@
     return new Data(*this);
 }
 
-void Data::SetValue(const std::vector<char>& buff)
+void Data::SetValue(const std::vector<uint8_t>& buff)
 {
     plist_set_data_val(_node, &buff[0], buff.size());
 }
 
-std::vector<char> Data::GetValue() const
+std::vector<uint8_t> Data::GetValue() const
 {
-    char* buff = NULL;
+    uint8_t* buff = NULL;
     uint64_t length = 0;
     plist_get_data_val(_node, &buff, &length);
-    std::vector<char> ret(buff, buff + length);
+    std::vector<uint8_t> ret(buff, buff + length);
     delete buff;
     return ret;
 }
diff --git a/src/plist.c b/src/plist.c
index 2078520..57f5ead 100644
--- a/src/plist.c
+++ b/src/plist.c
@@ -35,6 +35,7 @@
 #include <limits.h>
 #include <float.h>
 #include <ctype.h>
+#include <inttypes.h>
 
 #ifdef WIN32
 #include <windows.h>
@@ -490,7 +491,7 @@
     return plist_new_node(data);
 }
 
-plist_t plist_new_data(const char *val, uint64_t length)
+plist_t plist_new_data(const uint8_t *val, uint64_t length)
 {
     plist_data_t data = plist_new_plist_data();
     data->type = PLIST_DATA;
@@ -1142,7 +1143,7 @@
     assert(length == sizeof(double));
 }
 
-void plist_get_data_val(plist_t node, char **val, uint64_t * length)
+void plist_get_data_val(plist_t node, uint8_t **val, uint64_t * length)
 {
     if (!node || !val || !length)
         return;
@@ -1152,7 +1153,7 @@
     plist_get_type_and_value(node, &type, (void *) val, length);
 }
 
-const char* plist_get_data_ptr(plist_t node, uint64_t* length)
+const uint8_t* plist_get_data_ptr(plist_t node, uint64_t* length)
 {
     if (!node || !length)
         return NULL;
@@ -1161,7 +1162,7 @@
         return NULL;
     plist_data_t data = plist_get_data(node);
     *length = data->length;
-    return (const char*)data->buff;
+    return data->buff;
 }
 
 void plist_get_date_val(plist_t node, int32_t * sec, int32_t * usec)
@@ -1332,7 +1333,7 @@
     plist_set_element_val(node, PLIST_REAL, &val, sizeof(double));
 }
 
-void plist_set_data_val(plist_t node, const char *val, uint64_t length)
+void plist_set_data_val(plist_t node, const uint8_t *val, uint64_t length)
 {
     plist_set_element_val(node, PLIST_DATA, val, length);
 }