X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Ftypes%2Fdecl_libs.h;fp=src%2Ftypes%2Fdecl_libs.h;h=0ac669e02a45903b41065ce6c44bdcac77656ecb;hb=5359ad5c181e5772f350fe1cba060cbed3a05b91;hp=0000000000000000000000000000000000000000;hpb=04a60b34fc18ea3a2638893eaf24514177692eeb;p=m6w6%2Fext-psi diff --git a/src/types/decl_libs.h b/src/types/decl_libs.h new file mode 100644 index 0000000..0ac669e --- /dev/null +++ b/src/types/decl_libs.h @@ -0,0 +1,27 @@ +#ifndef _PSI_TYPES_DECL_LIBS_H +#define _PSI_TYPES_DECL_LIBS_H + +typedef struct decl_libs { + void **dl; + size_t count; +} decl_libs; + +static inline void free_decl_libs(decl_libs *libs) { + if (libs->dl) { + size_t i; + for (i = 0; i < libs->count; ++i) { + if (libs->dl[i]) { + dlclose(libs->dl[i]); + } + } + free(libs->dl); + } + memset(libs, 0, sizeof(*libs)); +} + +static inline void add_decl_lib(decl_libs *libs, void *dlopened) { + libs->dl = realloc(libs->dl, ++libs->count * sizeof(*libs->dl)); + libs->dl[libs->count-1] = dlopened; +} + +#endif