3 * Window Maker window manager
5 * Copyright (c) hmmm... Should I put everybody's name here?
6 * Where's my lawyer?? -- ]d :D
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
24 * Do you think I should move this code into another file? -- ]d
38 wPluginCreateFunction(int type
, char *library_name
,
39 char *init_proc_name
, char *proc_name
, char *free_data_proc_name
,
40 proplist_t pl_arg
, void *init_data
) {
42 _DL_InitDataProc
*initProc
;
44 function
= wmalloc(sizeof(WFunction
));
45 bzero(function
, sizeof(WFunction
));
47 function
->handle
= dlopen(library_name
, RTLD_LAZY
);
48 if (!function
->handle
) {
49 wwarning(_("library \"%s\" cound not be opened."), library_name
);
54 function
->proc
.any
= dlsym(function
->handle
, proc_name
);
55 if (!function
->proc
.any
) {
56 wwarning(_("function \"%s\" not found in library \"%s\""), proc_name
, library_name
);
57 dlclose(function
->handle
);
62 if (free_data_proc_name
) {
63 function
->freeData
= dlsym(function
->handle
, free_data_proc_name
);
64 if (!function
->freeData
) {
65 wwarning(_("function \"%s\" not found in library \"%s\""), free_data_proc_name
, library_name
);
66 dlclose(function
->handle
);
72 if (pl_arg
) function
->arg
= PLDeepCopy(pl_arg
);
73 function
->data
= init_data
;
75 initProc
= dlsym(function
->handle
, init_proc_name
);
77 initProc(function
->arg
, &function
->data
);
79 /* Where's my english teacher? -- ]d
82 dlclose(function
->handle
);
87 function
->type
= type
;
92 wPluginDestroyFunction(WFunction
*function
) {
93 if (!function
) return;
95 if (function
->freeData
) {
96 function
->freeData(&function
->data
);
101 if (function
->arg
) PLRelease(function
->arg
);
106 /* hmmmm, need another function to pack a va_list
107 * but better move on something else for now :D */