1
/* $Id: modinfo.c 1272 2006-08-18 21:38:40Z lennart $ */
4
This file is part of PulseAudio.
6
PulseAudio is free software; you can redistribute it and/or modify
7
it under the terms of the GNU Lesser General Public License as
8
published by the Free Software Foundation; either version 2 of the
9
License, or (at your option) any later version.
11
PulseAudio is distributed in the hope that it will be useful, but
12
WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
General Public License for more details.
16
You should have received a copy of the GNU Lesser General Public
17
License along with PulseAudio; if not, write to the Free Software
18
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
29
#include <pulse/xmalloc.h>
31
#include <pulsecore/core-util.h>
32
#include <pulsecore/log.h>
36
#define PA_SYMBOL_AUTHOR "pa__get_author"
37
#define PA_SYMBOL_DESCRIPTION "pa__get_description"
38
#define PA_SYMBOL_USAGE "pa__get_usage"
39
#define PA_SYMBOL_VERSION "pa__get_version"
41
/* lt_dlsym() violates ISO C, so confide the breakage into this function to
43
typedef void (*fnptr)(void);
44
static inline fnptr lt_dlsym_fn(lt_dlhandle handle, const char *symbol) {
45
return (fnptr) (long) lt_dlsym(handle, symbol);
48
pa_modinfo *pa_modinfo_get_by_handle(lt_dlhandle dl) {
50
const char* (*func)(void);
53
i = pa_xnew0(pa_modinfo, 1);
55
if ((func = (const char* (*)(void)) lt_dlsym_fn(dl, PA_SYMBOL_AUTHOR)))
56
i->author = pa_xstrdup(func());
58
if ((func = (const char* (*)(void)) lt_dlsym_fn(dl, PA_SYMBOL_DESCRIPTION)))
59
i->description = pa_xstrdup(func());
61
if ((func = (const char* (*)(void)) lt_dlsym_fn(dl, PA_SYMBOL_USAGE)))
62
i->usage = pa_xstrdup(func());
64
if ((func = (const char* (*)(void)) lt_dlsym_fn(dl, PA_SYMBOL_VERSION)))
65
i->version = pa_xstrdup(func());
70
pa_modinfo *pa_modinfo_get_by_name(const char *name) {
75
if (!(dl = lt_dlopenext(name))) {
76
pa_log("Failed to open module \"%s\": %s", name, lt_dlerror());
80
i = pa_modinfo_get_by_handle(dl);
86
void pa_modinfo_free(pa_modinfo *i) {
89
pa_xfree(i->description);