Add support for the cleanup attribute in GCC/Clang

The new json_auto_t macro allows easy declaration of json_t types that
automatically decrement at the end of their scope.
This commit is contained in:
Nathaniel McCallum
2016-08-30 16:12:22 -04:00
parent ab1ba69027
commit 63b9fd0552
3 changed files with 44 additions and 0 deletions

View File

@@ -112,6 +112,19 @@ void json_decref(json_t *json)
json_delete(json);
}
#if defined(__GNUC__) || defined(__clang__)
static JSON_INLINE
void json_decrefp(json_t **json)
{
if(json) {
json_decref(*json);
*json = NULL;
}
}
#define json_auto_t json_t __attribute__((cleanup(json_decrefp)))
#endif
/* error reporting */