From dd7af9c6d126df5d4bc96c26ff8a5584adc95c57 Mon Sep 17 00:00:00 2001 From: sletz Date: Fri, 7 Mar 2008 15:34:38 +0000 Subject: [PATCH] Improve wrapper code. git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1914 0c269be4-1314-0410-8aa9-9f06e86f4224 --- ChangeLog | 1 + common/JackAPIWrapper.cpp | 45 +++++++++++++++++++++++++++++---------- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index fa496293..e0a5b07c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -21,6 +21,7 @@ Marc-Olivier Barre 2008-03-07 Stephane Letz * Define an internal jack_client_open_aux needed for library wrapper feature. + * Improve wrapper code. 2008-03-06 Stephane Letz diff --git a/common/JackAPIWrapper.cpp b/common/JackAPIWrapper.cpp index 19605df0..9ff19c6c 100644 --- a/common/JackAPIWrapper.cpp +++ b/common/JackAPIWrapper.cpp @@ -210,6 +210,9 @@ extern "C" } #endif +#define JACK_LIB "libjack.so.0.0" +#define JACKMP_LIB "libjackmp.so" + // Function definition typedef void* (*jack_port_get_buffer_fun_def)(jack_port_t* port, jack_nframes_t frames); @@ -858,16 +861,19 @@ EXPORT int jack_client_close(jack_client_t *client) } // Library loader -static bool get_jack_library_in_directory(const char* dir_name, char* library_name) +static bool get_jack_library_in_directory(char* dir_name, const char* library_name, char* library_res_name) { + printf("get_jack_library_in_directory\n"); + struct dirent * dir_entry; DIR * dir_stream = opendir(dir_name); if (!dir_stream) return false; while ((dir_entry = readdir(dir_stream))) { - if (strncmp("libjack.so", dir_entry->d_name, 10) == 0) { - strcpy(library_name, dir_entry->d_name); + if (strncmp(library_name, dir_entry->d_name, strlen(library_name)) == 0) { + printf("found\n"); + sprintf(library_res_name, "%s/%s", dir_name, dir_entry->d_name); closedir(dir_stream); return true; } @@ -876,17 +882,18 @@ static bool get_jack_library_in_directory(const char* dir_name, char* library_na return false; } -static bool get_jack_library(char* library_name) +static bool get_jack_library(const char* library_name, char* library_res_name) { - if (get_jack_library_in_directory("/usr/lib", library_name)) + if (get_jack_library_in_directory("/usr/lib", library_name, library_res_name)) return true; - if (get_jack_library_in_directory("/usr/local/lib", library_name)) + if (get_jack_library_in_directory("/usr/local/lib", library_name, library_res_name)) return true; return false; } static bool open_library() { + printf("open_library %ld \n", gClientCount); if (gClientCount++ == 0) { return init_library(); } else { @@ -896,6 +903,7 @@ static bool open_library() static void close_library() { + printf("close_library\n"); if (--gClientCount == 0) { dlclose(gLibrary); } @@ -905,6 +913,8 @@ static bool check_client(void* library) { jack_client_t* client = 0; + printf("check_library\n"); + // Get "new", "open" and "close" entry points... jack_client_new_fun = (jack_client_new_fun_def)dlsym(library, "jack_client_new"); jack_client_close_fun = (jack_client_close_fun_def)dlsym(library, "jack_client_close"); @@ -912,33 +922,44 @@ static bool check_client(void* library) // Try opening a client... if ((client = (*jack_client_new_fun)("dummy"))) { // jackd server is running.... + printf("check_library 1 %x\n", jack_client_close_fun); (*jack_client_close_fun)(client); + printf("check_library 2\n"); return true; } else { + printf("check_library NO\n"); return false; } } static bool init_library() { - char library_name[64]; - void* jackLibrary = (get_jack_library(library_name)) ? dlopen(library_name, RTLD_LAZY) : 0; - void* jackmpLibrary = dlopen("libjackmp.so", RTLD_LAZY); + char library_res_name[256]; + void* jackLibrary = (get_jack_library(JACK_LIB, library_res_name)) ? dlopen(library_res_name, RTLD_LAZY) : 0; + void* jackmpLibrary = (get_jack_library(JACKMP_LIB, library_res_name)) ? dlopen(library_res_name, RTLD_LAZY) : 0; if (jackLibrary) { + printf("jackLibrary\n"); + if (check_client(jackLibrary)) { // jackd is running... + printf("jackd is running\n"); gLibrary = jackLibrary; - if (jackmpLibrary) dlclose(jackmpLibrary); + if (jackmpLibrary) + dlclose(jackmpLibrary); + printf("jackd is running OK\n"); } else if (check_client(jackmpLibrary)) { // jackdmp is running... gLibrary = jackmpLibrary; - if (jackLibrary) dlclose(jackLibrary); + if (jackLibrary) + dlclose(jackLibrary); } else { goto error; } } else if (jackmpLibrary) { + printf("jackmpLibrary\n"); + if (check_client(jackmpLibrary)) { // jackd is running... gLibrary = jackmpLibrary; } else { @@ -1037,6 +1058,8 @@ static bool init_library() jack_client_new_fun = (jack_client_new_fun_def)dlsym(gLibrary, "jack_client_new"); jack_client_close_fun = (jack_client_close_fun_def)dlsym(gLibrary, "jack_client_close"); +printf("init_library OK\n"); + return true; error: