X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Ftypes%2Ffree_calls.h;fp=src%2Ftypes%2Ffree_calls.h;h=7d4f575c5eb84b9b237671196cfe79510e7611c4;hb=5359ad5c181e5772f350fe1cba060cbed3a05b91;hp=0000000000000000000000000000000000000000;hpb=04a60b34fc18ea3a2638893eaf24514177692eeb;p=m6w6%2Fext-psi diff --git a/src/types/free_calls.h b/src/types/free_calls.h new file mode 100644 index 0000000..7d4f575 --- /dev/null +++ b/src/types/free_calls.h @@ -0,0 +1,35 @@ +#ifndef _PSI_TYPES_FREE_CALLS_H +#define _PSI_TYPES_FREE_CALLS_H + +typedef struct free_calls { + free_call **list; + size_t count; +} free_calls; + +static inline free_calls *init_free_calls(free_call *f) { + free_calls *fcs = calloc(1, sizeof(*fcs)); + if (f) { + fcs->count = 1; + fcs->list = calloc(1, sizeof(*fcs->list)); + fcs->list[0] = f; + } + return fcs; +} + +static inline void free_free_calls(free_calls *fcs) { + size_t i; + + for (i = 0; i < fcs->count; ++i) { + free_free_call(fcs->list[i]); + } + free(fcs->list); + free(fcs); +} + +static inline free_calls *add_free_call(free_calls *fcs, free_call *f) { + fcs->list = realloc(fcs->list, ++fcs->count * sizeof(*fcs->list)); + fcs->list[fcs->count-1] = f; + return fcs; +} + +#endif