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