Commit 49cbc8df authored by Nikias Bassen's avatar Nikias Bassen

Add plist_get_data_ptr() and plist_get_string_ptr() to the interface

parent 4d458690
...@@ -462,6 +462,19 @@ extern "C" ...@@ -462,6 +462,19 @@ extern "C"
*/ */
void plist_get_string_val(plist_t node, char **val); 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. * Get the value of a #PLIST_BOOLEAN node.
* This function does nothing if node is not of type #PLIST_BOOLEAN * This function does nothing if node is not of type #PLIST_BOOLEAN
...@@ -500,6 +513,19 @@ extern "C" ...@@ -500,6 +513,19 @@ extern "C"
*/ */
void plist_get_data_val(plist_t node, char **val, uint64_t * length); 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. * Get the value of a #PLIST_DATE node.
* This function does nothing if node is not of type #PLIST_DATE * This function does nothing if node is not of type #PLIST_DATE
......
...@@ -868,6 +868,19 @@ PLIST_API void plist_get_string_val(plist_t node, char **val) ...@@ -868,6 +868,19 @@ PLIST_API void plist_get_string_val(plist_t node, char **val)
assert(length == strlen(*val)); 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) PLIST_API void plist_get_bool_val(plist_t node, uint8_t * val)
{ {
if (!node || !val) if (!node || !val)
...@@ -926,6 +939,18 @@ PLIST_API void plist_get_data_val(plist_t node, char **val, uint64_t * length) ...@@ -926,6 +939,18 @@ PLIST_API void plist_get_data_val(plist_t node, char **val, uint64_t * length)
plist_get_type_and_value(node, &type, (void *) val, length); 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) PLIST_API void plist_get_date_val(plist_t node, int32_t * sec, int32_t * usec)
{ {
if (!node) if (!node)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment