diff options
author | Steve Bennett <steveb@workware.net.au> | 2023-06-29 14:15:07 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2025-07-16 09:34:08 +1000 |
commit | 4cea1cdea06a9ff18f485a54c65c804903da63b9 (patch) | |
tree | 8c0aeb060228d5068d52fd9d8fee824f17805e05 /jim-load.c | |
parent | e5faa1eb5d11ca5c26ee3f28f5377a1dbdaad23e (diff) | |
download | jimtcl-4cea1cdea06a9ff18f485a54c65c804903da63b9.zip jimtcl-4cea1cdea06a9ff18f485a54c65c804903da63b9.tar.gz jimtcl-4cea1cdea06a9ff18f485a54c65c804903da63b9.tar.bz2 |
core: improve the Jim_Stack API
Now the optional free element function is passed on init
and is automatically used to free elements on free.
Naming is also now consistent as Jim_Stack*
Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim-load.c')
-rw-r--r-- | jim-load.c | 33 |
1 files changed, 15 insertions, 18 deletions
@@ -21,7 +21,20 @@ #define RTLD_LOCAL 0 #endif -static void JimFreeLoadHandles(Jim_Interp *interp, void *data); +static void JimFreeOneLoadHandle(void *handle) +{ + dlclose(handle); +} + +static void JimFreeLoadHandles(Jim_Interp *interp, void *data) +{ + Jim_Stack *handles = data; + + if (handles) { + Jim_StackFree(handles); + Jim_Free(handles); + } +} /** * Note that Jim_LoadLibrary() requires a path to an existing file. @@ -72,7 +85,7 @@ int Jim_LoadLibrary(Jim_Interp *interp, const char *pathName) Jim_Stack *loadHandles = Jim_GetAssocData(interp, "load::handles"); if (loadHandles == NULL) { loadHandles = Jim_Alloc(sizeof(*loadHandles)); - Jim_InitStack(loadHandles); + Jim_StackInit(loadHandles, JimFreeOneLoadHandle); Jim_SetAssocData(interp, "load::handles", JimFreeLoadHandles, loadHandles); } Jim_StackPush(loadHandles, handle); @@ -88,22 +101,6 @@ int Jim_LoadLibrary(Jim_Interp *interp, const char *pathName) return JIM_ERR; } -static void JimFreeOneLoadHandle(void *handle) -{ - dlclose(handle); -} - -static void JimFreeLoadHandles(Jim_Interp *interp, void *data) -{ - Jim_Stack *handles = data; - - if (handles) { - Jim_FreeStackElements(handles, JimFreeOneLoadHandle); - Jim_FreeStack(handles); - Jim_Free(handles); - } -} - #else /* JIM_DYNLIB */ int Jim_LoadLibrary(Jim_Interp *interp, const char *pathName) { |