|
Packit |
c32a2d |
/*
|
|
Packit |
c32a2d |
legacy_module.c: dummy interface to modular code loader for legacy build system
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
copyright 2008 by the mpg123 project - free software under the terms of the LGPL 2.1
|
|
Packit |
c32a2d |
see COPYING and AUTHORS files in distribution or http://mpg123.org
|
|
Packit |
c32a2d |
initially written by Nicholas J Humfrey
|
|
Packit |
c32a2d |
*/
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
#include "out123_int.h"
|
|
Packit |
c32a2d |
#include "debug.h"
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
/* A single module is staticly compiled in for each type */
|
|
Packit |
c32a2d |
extern mpg123_module_t mpg123_output_module_info;
|
|
Packit |
c32a2d |
/* extern mpg123_module_t mpg123_input_module_info; */
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
/* Open a module */
|
|
Packit |
c32a2d |
mpg123_module_t*
|
|
Packit |
c32a2d |
open_module(const char* type, const char* name, int verbose, const char *bindir)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
mpg123_module_t *mod = NULL;
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
/* Select the module info structure, based on the desired type */
|
|
Packit |
c32a2d |
if (strcmp(type, "output")==0) {
|
|
Packit |
c32a2d |
mod = &mpg123_output_module_info;
|
|
Packit |
c32a2d |
/*
|
|
Packit |
c32a2d |
} else if (strcmp(type, "input")==0) {
|
|
Packit |
c32a2d |
mod = &mpg123_input_module_info;
|
|
Packit |
c32a2d |
*/
|
|
Packit |
c32a2d |
} else {
|
|
Packit |
c32a2d |
if(verbose >= 0)
|
|
Packit |
c32a2d |
error1("Unable to open module type '%s'.", type);
|
|
Packit |
c32a2d |
return NULL;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
/* Check the module compiled in is the module requested */
|
|
Packit |
c32a2d |
if (strcmp(name, mod->name)!=0) {
|
|
Packit |
c32a2d |
if(verbose >= 0)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
error1("Unable to open requested module '%s'.", name);
|
|
Packit |
c32a2d |
error1("The only available statically compiled module is '%s'."
|
|
Packit |
c32a2d |
, mod->name);
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
return NULL;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
/* Debugging info */
|
|
Packit |
c32a2d |
debug1("Details of static module type '%s':", type);
|
|
Packit |
c32a2d |
debug1(" api_version=%d", mod->api_version);
|
|
Packit |
c32a2d |
debug1(" name=%s", mod->name);
|
|
Packit |
c32a2d |
debug1(" description=%s", mod->description);
|
|
Packit |
c32a2d |
debug1(" revision=%s", mod->revision);
|
|
Packit |
c32a2d |
debug1(" handle=%p", (void*)mod->handle);
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
return mod;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
void close_module(mpg123_module_t* module, int verbose)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
debug("close_module()");
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
/* Module was never really 'loaded', so nothing to do here. */
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
int list_modules(const char *type, char ***names, char ***descr, int verbose
|
|
Packit |
c32a2d |
, const char *bindir)
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
debug("list_modules()" );
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
*names = NULL;
|
|
Packit |
c32a2d |
*descr = NULL;
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
if(
|
|
Packit |
c32a2d |
(*names=malloc(sizeof(char*)))
|
|
Packit |
c32a2d |
&& !((*names)[0]=NULL) /* for safe cleanup */
|
|
Packit |
c32a2d |
&& ((*names)[0]=compat_strdup(mpg123_output_module_info.name))
|
|
Packit |
c32a2d |
&& (*descr=malloc(sizeof(char*)))
|
|
Packit |
c32a2d |
&& !((*descr)[0]=NULL) /* for safe cleanup */
|
|
Packit |
c32a2d |
&& ((*descr)[0]=compat_strdup(mpg123_output_module_info.description))
|
|
Packit |
c32a2d |
)
|
|
Packit |
c32a2d |
return 1;
|
|
Packit |
c32a2d |
else
|
|
Packit |
c32a2d |
{
|
|
Packit |
c32a2d |
if(*names)
|
|
Packit |
c32a2d |
free((*names)[0]);
|
|
Packit |
c32a2d |
free(*names);
|
|
Packit |
c32a2d |
if(*descr)
|
|
Packit |
c32a2d |
free((*descr)[0]);
|
|
Packit |
c32a2d |
free(*descr);
|
|
Packit |
c32a2d |
return -1;
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
}
|
|
Packit |
c32a2d |
|
|
Packit |
c32a2d |
|