1/* 2 * Copyright 2017, Data61 3 * Commonwealth Scientific and Industrial Research Organisation (CSIRO) 4 * ABN 41 687 119 230. 5 * 6 * This software may be distributed and modified according to the terms of 7 * the BSD 2-Clause license. Note that NO WARRANTY is provided. 8 * See "LICENSE_BSD2.txt" for details. 9 * 10 * @TAG(DATA61_BSD) 11 */ 12 13#pragma once 14 15/* Helpers for resource management. */ 16 17#include <stdlib.h> 18 19/* Support for automatically freed heap pointers. This function is never 20 * expected to be called directly; you are expected to access it through the 21 * adjacent macro. Sample usage: 22 * 23 * void foo(void) { 24 * autofree int *x = malloc(sizeof(int)); 25 * // no need to call free(x) 26 * } 27 */ 28static inline void autofree_(void *p) { 29 void **q = (void**)p; 30 free(*q); 31} 32#define AUTOFREE __attribute__((cleanup(autofree_))) 33