2 This file is part of PulseAudio.
4 Copyright 2004-2006 Lennart Poettering
5 Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB
7 PulseAudio is free software; you can redistribute it and/or modify
8 it under the terms of the GNU Lesser General Public License as published
9 by the Free Software Foundation; either version 2 of the License,
10 or (at your option) any later version.
12 PulseAudio is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License for more details.
17 You should have received a copy of the GNU Lesser General Public License
18 along with PulseAudio; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
32 #include <pulse/util.h>
33 #include <pulse/i18n.h>
35 #include <pulsecore/modinfo.h>
36 #include <pulsecore/core-util.h>
37 #include <pulsecore/macro.h>
39 #include "dumpmodules.h"
41 #define PREFIX "module-"
43 static void short_info(const char *name
, PA_GCC_UNUSED
const char *path
, pa_modinfo
*i
) {
47 printf("%-40s%s\n", name
, i
->description
? i
->description
: "n/a");
50 static void long_info(const char *name
, const char *path
, pa_modinfo
*i
) {
60 printf(_("Name: %s\n"), name
);
62 if (!i
->description
&& !i
->version
&& !i
->author
&& !i
->usage
)
63 printf(_("No module information available\n"));
66 printf(_("Version: %s\n"), i
->version
);
68 printf(_("Description: %s\n"), i
->description
);
70 printf(_("Author: %s\n"), i
->author
);
72 printf(_("Usage: %s\n"), i
->usage
);
73 printf(_("Load Once: %s\n"), pa_yes_no(i
->load_once
));
77 printf(_("Path: %s\n"), path
);
80 static void show_info(const char *name
, const char *path
, void (*info
)(const char *name
, const char *path
, pa_modinfo
*i
)) {
85 if ((i
= pa_modinfo_get_by_name(path
? path
: name
))) {
91 extern const lt_dlsymlist lt_preloaded_symbols
[];
93 static int is_preloaded(const char *name
) {
94 const lt_dlsymlist
*l
;
96 for (l
= lt_preloaded_symbols
; l
->name
; l
++) {
102 pa_snprintf(buf
, sizeof(buf
), "%s", l
->name
);
103 if ((e
= strrchr(buf
, '.')))
106 if (!strcmp(name
, buf
))
113 static int callback(const char *path
, lt_ptr data
) {
115 pa_daemon_conf
*c
= (data
);
117 e
= pa_path_get_filename(path
);
119 if (strlen(e
) <= sizeof(PREFIX
)-1 || strncmp(e
, PREFIX
, sizeof(PREFIX
)-1))
125 show_info(e
, path
, c
->log_level
>= PA_LOG_INFO
? long_info
: short_info
);
129 void pa_dump_modules(pa_daemon_conf
*c
, int argc
, char * const argv
[]) {
134 for (i
= 0; i
< argc
; i
++)
135 show_info(argv
[i
], NULL
, long_info
);
137 const lt_dlsymlist
*l
;
139 for (l
= lt_preloaded_symbols
; l
->name
; l
++) {
145 if (strlen(l
->name
) <= sizeof(PREFIX
)-1 || strncmp(l
->name
, PREFIX
, sizeof(PREFIX
)-1))
148 pa_snprintf(buf
, sizeof(buf
), "%s", l
->name
);
149 if ((e
= strrchr(buf
, '.')))
152 show_info(buf
, NULL
, c
->log_level
>= PA_LOG_INFO
? long_info
: short_info
);
155 lt_dlforeachfile(NULL
, callback
, c
);