[packages/mpg123] - open_module rewritten because chdir to modules dir is forced by mpg123 authors
witekfl
witekfl at pld-linux.org
Tue Oct 15 16:48:58 CEST 2013
commit 4f61aa874bc6030ede6370f6f3975179bf620b87
Author: Witold Filipczyk <witekfl at poczta.onet.pl>
Date: Tue Oct 15 16:45:22 2013 +0200
- open_module rewritten because chdir to modules dir is forced by mpg123 authors
mpg123-no-la.patch | 124 +++++++++++++++++++++++++++++++++++++----------------
1 file changed, 87 insertions(+), 37 deletions(-)
---
diff --git a/mpg123-no-la.patch b/mpg123-no-la.patch
index 5760f5d..360f579 100644
--- a/mpg123-no-la.patch
+++ b/mpg123-no-la.patch
@@ -1,54 +1,104 @@
---- mpg123-1.14.4/src/module.c.orig 2012-07-26 15:36:44.000000000 +0200
-+++ mpg123-1.14.4/src/module.c 2012-10-28 12:11:45.381479443 +0100
-@@ -101,16 +101,12 @@
- size_t module_path_len = 0;
- char* module_symbol = NULL;
- size_t module_symbol_len = 0;
+--- mpg123-1.16.0/src/module.c.orig 2013-10-15 15:34:52.184320390 +0200
++++ mpg123-1.16.0/src/module.c 2013-10-15 16:38:49.842888001 +0200
+@@ -167,31 +167,85 @@ mpg123_module_t* open_module_here(const
+ }
+
+
+-/* Open a module, including directory search. */
++/* Open a module */
+ mpg123_module_t* open_module(const char* type, const char* name)
+ {
++ lt_dlhandle handle = NULL;
+ mpg123_module_t *module = NULL;
- char *workdir = NULL;
- char *moddir = NULL;
+- char *moddir = NULL;
++ char* module_path = NULL;
++ size_t module_path_len = 0;
++ char* module_symbol = NULL;
++ size_t module_symbol_len = 0;
++ char *moddir = get_module_dir();
+
- workdir = get_the_cwd();
- moddir = get_module_dir();
+- moddir = get_module_dir();
- if(workdir == NULL || moddir == NULL)
-+ if(moddir == NULL)
++ if (moddir == NULL)
{
-- error("Failure getting workdir or moddir!");
+- error("Failure getting workdir or moddir! (Perhaps set MPG123_MODDIR?)");
- if(workdir == NULL) fprintf(stderr, "Hint: I need to know the current working directory to be able to come back after hunting modules. I will not leave because I do not know where I am.\n");
-+ error("Failure getting moddir!");
++ goto ex;
++ }
- if(workdir != NULL) free(workdir);
- if(moddir != NULL) free(moddir);
- return NULL;
+- if(moddir != NULL) free(moddir);
+- return NULL;
++ /* Initialize libltdl */
++ if(lt_dlinit())
++ {
++ error("Failed to initialise libltdl");
++ goto ex;
}
-@@ -118,20 +114,15 @@
- /* Initialize libltdl */
- if (lt_dlinit()) error( "Failed to initialise libltdl" );
-- if(chdir(moddir) != 0)
-- {
-- error2("Failed to enter module directory %s: %s", moddir, strerror(errno));
-- goto om_bad;
-- }
- /* Work out the path of the module to open */
- /* Note that we need to open ./file, not just file! */
-- module_path_len = 2 + strlen(type) + 1 + strlen(name) + strlen(MODULE_FILE_SUFFIX) + 1;
+- if(chdir(moddir) == 0) module = open_module_here(type, name);
+- else error2("Failed to enter module directory %s: %s", moddir, strerror(errno));
++ /* Work out the path of the module to open */
++ /* Note that we need to open ./file, not just file! */
+ module_path_len = strlen(moddir) + 1 + strlen(type) + 1 + strlen(name) + strlen(MODULE_FILE_SUFFIX) + 1;
- module_path = malloc( module_path_len );
- if (module_path == NULL) {
- error1( "Failed to allocate memory for module name: %s", strerror(errno) );
- goto om_bad;
- }
-- snprintf( module_path, module_path_len, "./%s_%s%s", type, name, MODULE_FILE_SUFFIX );
++ module_path = malloc( module_path_len );
++ if (module_path == NULL) {
++ error1( "Failed to allocate memory for module name: %s", strerror(errno) );
++ goto ex;
++ }
+ snprintf( module_path, module_path_len, "%s/%s_%s%s", moddir, type, name, MODULE_FILE_SUFFIX );
- /* Display the path of the module created */
- if(param.verbose > 1) fprintf(stderr, "Module path: %s\n", module_path );
++ /* Display the path of the module created */
++ if(param.verbose > 1) fprintf(stderr, "Module path: %s\n", module_path );
++
++ /* Open the module */
++ handle = lt_dlopen( module_path );
++ free( module_path );
++ if (handle==NULL) {
++ error2( "Failed to open module %s: %s", name, lt_dlerror() );
++ if(param.verbose > 1)
++ fprintf(stderr, "Note: This could be because of braindead path in the .la file...\n");
++
++ goto ex;
++ }
++
++ /* Work out the symbol name */
++ module_symbol_len = strlen( MODULE_SYMBOL_PREFIX ) +
++ strlen( type ) +
++ strlen( MODULE_SYMBOL_SUFFIX ) + 1;
++ module_symbol = malloc(module_symbol_len);
++ if (module_symbol == NULL) {
++ error1( "Failed to allocate memory for module symbol: %s", strerror(errno) );
++ goto ex;
++ }
++ snprintf( module_symbol, module_symbol_len, "%s%s%s", MODULE_SYMBOL_PREFIX, type, MODULE_SYMBOL_SUFFIX );
++ debug1( "Module symbol: %s", module_symbol );
++
++ /* Get the information structure from the module */
++ module = (mpg123_module_t*)lt_dlsym(handle, module_symbol );
++ free( module_symbol );
++ if (module==NULL) {
++ error1( "Failed to get module symbol: %s", lt_dlerror() );
++ goto ex;
++ }
++
++ /* Check the API version */
++ if (MPG123_MODULE_API_VERSION != module->api_version)
++ {
++ error2( "API version of module does not match (got %i, expected %i).", module->api_version, MPG123_MODULE_API_VERSION);
++ lt_dlclose(handle);
++ module = NULL;
++ goto ex;
++ }
-@@ -180,9 +171,7 @@
- om_bad:
- module = NULL;
- om_end:
- chdir(workdir);
- free(moddir);
+- free(moddir);
- free(workdir);
++ /* Store handle in the data structure */
++ module->handle = handle;
++ex:
++ if (moddir != NULL) free(moddir);
return module;
}
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/mpg123.git/commitdiff/1e9dcb6b0294281dd432ad11308777e96fe07ba2
More information about the pld-cvs-commit
mailing list