Skip to content

Commit

Permalink
Add new plist_mem_free() function
Browse files Browse the repository at this point in the history
Thanks to @azerg for bringing this to my attention.

Instead of having multiple (internally identical) plist_*_free() functions,
this commit introduces a single plist_mem_free() that can be used to free
the memory allocated by plist_to_xml(), plist_to_bin(), plist_get_key_val(),
plist_get_string_val(), and plist_get_data_val().
Note: This commit REMOVES plist_to_bin_free() and plist_to_xml_free().
  • Loading branch information
nikias committed Dec 19, 2021
1 parent a9e34bd commit c31beaa
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 24 deletions.
34 changes: 20 additions & 14 deletions include/plist/plist.h
Original file line number Diff line number Diff line change
Expand Up @@ -449,6 +449,7 @@ extern "C"
* @param node the node
* @param val a pointer to a C-string. This function allocates the memory,
* caller is responsible for freeing it.
* @note Use plist_mem_free() to free the allocated memory.
*/
void plist_get_key_val(plist_t node, char **val);

Expand All @@ -459,6 +460,7 @@ extern "C"
* @param node the node
* @param val a pointer to a C-string. This function allocates the memory,
* caller is responsible for freeing it. Data is UTF-8 encoded.
* @note Use plist_mem_free() to free the allocated memory.
*/
void plist_get_string_val(plist_t node, char **val);

Expand Down Expand Up @@ -510,6 +512,7 @@ extern "C"
* @param val a pointer to an unallocated char buffer. This function allocates the memory,
* caller is responsible for freeing it.
* @param length the length of the buffer
* @note Use plist_mem_free() to free the allocated memory.
*/
void plist_get_data_val(plist_t node, char **val, uint64_t * length);

Expand Down Expand Up @@ -642,33 +645,21 @@ extern "C"
* @param plist_xml a pointer to a C-string. This function allocates the memory,
* caller is responsible for freeing it. Data is UTF-8 encoded.
* @param length a pointer to an uint32_t variable. Represents the length of the allocated buffer.
* @note Use plist_mem_free() to free the allocated memory.
*/
void plist_to_xml(plist_t plist, char **plist_xml, uint32_t * length);

/**
* Frees the memory allocated by plist_to_xml().
*
* @param plist_xml The buffer allocated by plist_to_xml().
*/
void plist_to_xml_free(char *plist_xml);

/**
* Export the #plist_t structure to binary format.
*
* @param plist the root node to export
* @param plist_bin a pointer to a char* buffer. This function allocates the memory,
* caller is responsible for freeing it.
* @param length a pointer to an uint32_t variable. Represents the length of the allocated buffer.
* @note Use plist_mem_free() to free the allocated memory.
*/
void plist_to_bin(plist_t plist, char **plist_bin, uint32_t * length);

/**
* Frees the memory allocated by plist_to_bin().
*
* @param plist_bin The buffer allocated by plist_to_bin().
*/
void plist_to_bin_free(char *plist_bin);

/**
* Import the #plist_t structure from XML format.
*
Expand Down Expand Up @@ -945,6 +936,21 @@ extern "C"
*/
int plist_data_val_contains(plist_t datanode, const uint8_t* cmpval, size_t n);

/**
* Free memory allocated by relevant libplist API calls:
* - plist_to_xml()
* - plist_to_bin()
* - plist_get_key_val()
* - plist_get_string_val()
* - plist_get_data_val()
*
* @param ptr pointer to the memory to free
*
* @note Do not use this function to free plist_t nodes, use plist_free()
* instead.
*/
void plist_mem_free(void* ptr);

/*@}*/

#ifdef __cplusplus
Expand Down
5 changes: 0 additions & 5 deletions src/bplist.c
Original file line number Diff line number Diff line change
Expand Up @@ -1374,8 +1374,3 @@ PLIST_API void plist_to_bin(plist_t plist, char **plist_bin, uint32_t * length)
bplist_buff->data = NULL; // make sure we don't free the output buffer
byte_array_free(bplist_buff);
}

PLIST_API void plist_to_bin_free(char *plist_bin)
{
free(plist_bin);
}
8 changes: 8 additions & 0 deletions src/plist.c
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,14 @@ PLIST_API void plist_free(plist_t plist)
}
}

PLIST_API void plist_mem_free(void* ptr)
{
if (ptr)
{
free(ptr);
}
}

static plist_t plist_copy_node(node_t *node)
{
plist_type node_type = PLIST_NONE;
Expand Down
5 changes: 0 additions & 5 deletions src/xplist.c
Original file line number Diff line number Diff line change
Expand Up @@ -530,11 +530,6 @@ PLIST_API void plist_to_xml(plist_t plist, char **plist_xml, uint32_t * length)
str_buf_free(outbuf);
}

PLIST_API void plist_to_xml_free(char *plist_xml)
{
free(plist_xml);
}

struct _parse_ctx {
const char *pos;
const char *end;
Expand Down

0 comments on commit c31beaa

Please sign in to comment.