blob: 768e77af2681519a316af7676a718e3bf5668885 [file] [log] [blame] [edit]
/*
* Copyright 2017, Data61, CSIRO (ABN 41 687 119 230)
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
/* Helpers for resource management. */
#include <stdlib.h>
/* Support for automatically freed heap pointers. This function is never
* expected to be called directly; you are expected to access it through the
* adjacent macro. Sample usage:
*
* void foo(void) {
* autofree int *x = malloc(sizeof(int));
* // no need to call free(x)
* }
*/
static inline void autofree_(void *p) {
void **q = (void**)p;
free(*q);
}
#define AUTOFREE __attribute__((cleanup(autofree_)))