api refactoring
[m6w6/ext-psi] / src / types / decl_libs.h
1 #ifndef _PSI_TYPES_DECL_LIBS_H
2 #define _PSI_TYPES_DECL_LIBS_H
3
4 typedef struct decl_libs {
5 void **dl;
6 size_t count;
7 } decl_libs;
8
9 static inline void free_decl_libs(decl_libs *libs) {
10 if (libs->dl) {
11 size_t i;
12 for (i = 0; i < libs->count; ++i) {
13 if (libs->dl[i]) {
14 dlclose(libs->dl[i]);
15 }
16 }
17 free(libs->dl);
18 }
19 memset(libs, 0, sizeof(*libs));
20 }
21
22 static inline void add_decl_lib(decl_libs *libs, void *dlopened) {
23 libs->dl = realloc(libs->dl, ++libs->count * sizeof(*libs->dl));
24 libs->dl[libs->count-1] = dlopened;
25 }
26
27 #endif