diff options
| -rw-r--r-- | include/plist/plist.h | 13 | ||||
| -rw-r--r-- | src/plist.c | 9 | 
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);  | 
