summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/plist/plist.h13
-rw-r--r--src/plist.c9
2 files changed, 22 insertions, 0 deletions
diff --git a/include/plist/plist.h b/include/plist/plist.h
index acd1c4d..2b7e1a1 100644
--- a/include/plist/plist.h
+++ b/include/plist/plist.h
@@ -616,6 +616,19 @@ extern "C"
*/
void plist_from_bin(const char *plist_bin, uint32_t length, plist_t * plist);
+ /**
+ * Test if in-memory plist data is binary or XML
+ * This method will look at the first bytes of plist_data
+ * to determine if plist_data contains a binary or XML plist.
+ * This method is not validating the whole memory buffer to check if the
+ * content is truly a plist, it's only using some heuristic on the first few
+ * bytes of plist_data.
+ *
+ * @param plist_data a pointer to the memory buffer containing plist data.
+ * @param length length of the buffer to read.
+ * @return 1 if the buffer is a binary plist, 0 otherwise.
+ */
+ int plist_is_binary(const char *plist_data, uint32_t length);
/********************************************
* *
diff --git a/src/plist.c b/src/plist.c
index 569251b..3e69e2a 100644
--- a/src/plist.c
+++ b/src/plist.c
@@ -49,6 +49,15 @@ void plist_cleanup(void)
xmlCleanupMemory();
}
+PLIST_API int plist_is_binary(const char *plist_data, uint32_t length)
+{
+ if (length < 8) {
+ return 0;
+ }
+
+ return (memcmp(plist_data, "bplist00", 8) == 0);
+}
+
plist_t plist_new_node(plist_data_t data)
{
return (plist_t) node_create(NULL, data);