Add plist_get_data_ptr() and plist_get_string_ptr() to the interface
diff --git a/include/plist/plist.h b/include/plist/plist.h
index 824ba43..29b1fce 100644
--- a/include/plist/plist.h
+++ b/include/plist/plist.h
@@ -463,6 +463,19 @@
     void plist_get_string_val(plist_t node, char **val);
 
     /**
+     * Get a pointer to the buffer of a #PLIST_STRING node.
+     *
+     * @note DO NOT MODIFY the buffer. Mind that the buffer is only available
+     *   until the plist node gets freed. Make a copy if needed.
+     *
+     * @param node The node
+     * @param length If non-NULL, will be set to the length of the string
+     *
+     * @return Pointer to the NULL-terminated buffer.
+     */
+    const char* plist_get_string_ptr(plist_t node, uint64_t* length);
+
+    /**
      * Get the value of a #PLIST_BOOLEAN node.
      * This function does nothing if node is not of type #PLIST_BOOLEAN
      *
@@ -501,6 +514,19 @@
     void plist_get_data_val(plist_t node, char **val, uint64_t * length);
 
     /**
+     * Get a pointer to the data buffer of a #PLIST_DATA node.
+     *
+     * @note DO NOT MODIFY the buffer. Mind that the buffer is only available
+     *   until the plist node gets freed. Make a copy if needed.
+     *
+     * @param node The node
+     * @param length Pointer to a uint64_t that will be set to the length of the buffer
+     *
+     * @return Pointer to the buffer
+     */
+    const char* plist_get_data_ptr(plist_t node, uint64_t* length);
+
+    /**
      * Get the value of a #PLIST_DATE node.
      * This function does nothing if node is not of type #PLIST_DATE
      *
diff --git a/src/plist.c b/src/plist.c
index eb0160c..87be488 100644
--- a/src/plist.c
+++ b/src/plist.c
@@ -868,6 +868,19 @@
     assert(length == strlen(*val));
 }
 
+PLIST_API const char* plist_get_string_ptr(plist_t node, uint64_t* length)
+{
+    if (!node)
+        return NULL;
+    plist_type type = plist_get_node_type(node);
+    if (PLIST_STRING != type)
+        return NULL;
+    plist_data_t data = plist_get_data(node);
+    if (length)
+        *length = data->length;
+    return (const char*)data->strval;
+}
+
 PLIST_API void plist_get_bool_val(plist_t node, uint8_t * val)
 {
     if (!node || !val)
@@ -926,6 +939,18 @@
     plist_get_type_and_value(node, &type, (void *) val, length);
 }
 
+PLIST_API const char* plist_get_data_ptr(plist_t node, uint64_t* length)
+{
+    if (!node || !length)
+        return NULL;
+    plist_type type = plist_get_node_type(node);
+    if (PLIST_DATA != type)
+        return NULL;
+    plist_data_t data = plist_get_data(node);
+    *length = data->length;
+    return (const char*)data->buff;
+}
+
 PLIST_API void plist_get_date_val(plist_t node, int32_t * sec, int32_t * usec)
 {
     if (!node)