@@ -39,6 +39,7 @@ typedef int (*sblib_exec_fn)(int, int, slib_par_t *, var_t *);
3939typedef int (* sblib_getname_fn ) (int , char * );
4040typedef int (* sblib_count_fn ) (void );
4141typedef int (* sblib_init_fn ) (const char * );
42+ typedef int (* sblib_free_fn )(int , int );
4243typedef void (* sblib_close_fn ) (void );
4344
4445typedef struct {
@@ -47,6 +48,7 @@ typedef struct {
4748 void * _handle ;
4849 sblib_exec_fn _sblib_proc_exec ;
4950 sblib_exec_fn _sblib_func_exec ;
51+ sblib_free_fn _sblib_free ;
5052 ext_func_node_t * _func_list ;
5153 ext_proc_node_t * _proc_list ;
5254 uint32_t _id ;
@@ -304,6 +306,7 @@ static void slib_import_routines(slib_t *lib, int comp) {
304306
305307 lib -> _sblib_func_exec = slib_getoptptr (lib , "sblib_func_exec" );
306308 lib -> _sblib_proc_exec = slib_getoptptr (lib , "sblib_proc_exec" );
309+ lib -> _sblib_free = slib_getoptptr (lib , "sblib_free" );
307310 sblib_count_fn fcount = slib_getoptptr (lib , "sblib_proc_count" );
308311 sblib_getname_fn fgetname = slib_getoptptr (lib , "sblib_proc_getname" );
309312
@@ -471,6 +474,10 @@ static int slib_exec(slib_t *lib, var_t *ret, int index, int proc) {
471474 free (ptable );
472475 }
473476
477+ if (success && v_is_type (ret , V_MAP )) {
478+ ret -> v .m .lib_id = lib -> _id ;
479+ }
480+
474481 return success ;
475482}
476483
@@ -598,6 +605,13 @@ int plugin_funcexec(int lib_id, int index, var_t *ret) {
598605 return result ;
599606}
600607
608+ void plugin_free (int lib_id , int cls_id , int id ) {
609+ slib_t * lib = get_lib (lib_id );
610+ if (lib && lib -> _sblib_free ) {
611+ lib -> _sblib_free (cls_id , id );
612+ }
613+ }
614+
601615void plugin_close () {
602616 for (int i = 0 ; i < MAX_SLIBS ; i ++ ) {
603617 if (plugins [i ]) {
@@ -626,5 +640,6 @@ int plugin_get_kid(int lib_id, const char *keyword) { return -1; }
626640void * plugin_get_func (const char * name ) { return 0 ; }
627641int plugin_procexec (int lib_id , int index ) { return -1 ; }
628642int plugin_funcexec (int lib_id , int index , var_t * ret ) { return -1 ; }
643+ void plugin_free (int lib_id , int cls_id , int id ) {}
629644void plugin_close () {}
630645#endif
0 commit comments