mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-22 12:35:17 +00:00
util: alloc: Add automatic cleanup/disposal of strings
VIR_AUTODISPOSE_STR is similar to VIR_AUTOFREE(char *) but uses virDispose for clearing of the stored string. This patch also refactors VIR_DISPOSE to use the new helper which is used for the new macro. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
c358adc571
commit
a9b3afabcd
@ -1428,6 +1428,7 @@ virAllocTestOOM;
|
||||
virAllocVar;
|
||||
virDeleteElementsN;
|
||||
virDispose;
|
||||
virDisposeString;
|
||||
virExpandN;
|
||||
virFree;
|
||||
virInsertElementsN;
|
||||
|
@ -618,3 +618,19 @@ void virDispose(void *ptrptr,
|
||||
*countptr = 0;
|
||||
errno = save_errno;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* virDisposeString:
|
||||
* @ptrptr: pointer to pointer for a string which should be sanitized and cleared
|
||||
*
|
||||
* See virDispose.
|
||||
*/
|
||||
void
|
||||
virDisposeString(char **strptr)
|
||||
{
|
||||
if (!*strptr)
|
||||
return;
|
||||
|
||||
virDispose(strptr, strlen(*strptr), sizeof(char), NULL);
|
||||
}
|
||||
|
@ -79,6 +79,8 @@ void virFree(void *ptrptr) ATTRIBUTE_NONNULL(1);
|
||||
|
||||
void virDispose(void *ptrptr, size_t count, size_t element_size, size_t *countptr)
|
||||
ATTRIBUTE_NONNULL(1);
|
||||
void virDisposeString(char **strptr)
|
||||
ATTRIBUTE_NONNULL(1);
|
||||
|
||||
/**
|
||||
* VIR_ALLOC:
|
||||
@ -575,9 +577,17 @@ void virDispose(void *ptrptr, size_t count, size_t element_size, size_t *countpt
|
||||
*
|
||||
* This macro is not safe to be used on arguments with side effects.
|
||||
*/
|
||||
# define VIR_DISPOSE_STRING(ptr) virDispose(1 ? (void *) &(ptr) : (ptr), \
|
||||
(ptr) ? strlen((ptr)) : 0, 1, NULL)
|
||||
# define VIR_DISPOSE_STRING(ptr) virDisposeString(&(ptr))
|
||||
|
||||
/**
|
||||
* VIR_AUTODISPOSE_STR:
|
||||
*
|
||||
* Macro to automatically free and clear the memory allocated to
|
||||
* the string variable declared with it by calling virDisposeString
|
||||
* when the variable goes out of scope.
|
||||
*/
|
||||
# define VIR_AUTODISPOSE_STR \
|
||||
__attribute__((cleanup(virDisposeString))) char *
|
||||
|
||||
/**
|
||||
* VIR_DISPOSE:
|
||||
|
Loading…
x
Reference in New Issue
Block a user