1
0
mirror of https://github.com/gryf/wmaker.git synced 2026-01-09 07:14:18 +01:00

changes related to plugin system & drawstring

This commit is contained in:
id
2000-12-11 03:10:26 +00:00
parent 2d063d279e
commit 8ca4a67a24
11 changed files with 282 additions and 96 deletions

View File

@@ -45,30 +45,33 @@
#include <proplist.h>
void**
WPluginData*
wPluginPackData(int members, ...)
{
void **p;
va_list vp;
int i;
p = wmalloc(sizeof(void *) * (members + 1));
memset(p, 0, sizeof(void *) * (members + 1));
p[0] = (void *)members;
WPluginData *data;
data = wmalloc(sizeof(WPluginData));
data->size = members;
data->array = wmalloc(sizeof(void *) * (members));
memset(data->array, 0, sizeof(void *) * (members));
va_start(vp, members);
for(i=1;i<members+1;i++) {
p[i] = va_arg(vp, void *);
for(i=0;i<members;i++) {
data->array[i] = va_arg(vp, void *);
}
va_end(vp);
return p;
return data;
}
WFunction *
wPluginCreateFunction(int type, char *library_name,
char *init_proc_name, char *proc_name, char *free_data_proc_name,
proplist_t pl_arg, void *init_data)
char *init_proc_name, WPluginData *proc_name, char *free_data_proc_name,
proplist_t pl_arg, WPluginData *init_data)
{
WFunction *function;
_DL_InitDataProc *initProc;
int i;
function = wmalloc(sizeof(WFunction));
memset(function, 0, sizeof(WFunction));
@@ -80,12 +83,17 @@ wPluginCreateFunction(int type, char *library_name,
return NULL;
}
function->proc.any = dlsym(function->handle, proc_name);
if (!function->proc.any) {
wwarning(_("function \"%s\" not found in library \"%s\""), proc_name, library_name);
dlclose(function->handle);
wfree(function);
return NULL;
i = proc_name->size;
function->proc.any = wmalloc(sizeof(_DL_AnyProc) * i);
for (i = 0; i < proc_name->size; i++) {
function->proc.any[i] = dlsym(function->handle, (char *)proc_name->array[i]);
if (!function->proc.any[i]) {
wwarning(_("function \"%s\" not found in library \"%s\""), proc_name, library_name);
dlclose(function->handle);
wfree(function->proc.any);
wfree(function);
return NULL;
}
}
if (free_data_proc_name) {
@@ -129,6 +137,7 @@ wPluginDestroyFunction(WFunction *function)
wfree(function->data);
}
if (function->arg) PLRelease(function->arg);
if (function->proc.any) wfree(function->proc.any);
wfree(function);
return;
}