Protect use of dlopen() and dlsym() with HAVE_DLSYM and HAVE_DLFCN_H for compatibility with cases where these functions aren’t available.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@10349 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
fca603cc35
commit
ecbda61220
@ -16,6 +16,7 @@
|
|||||||
// http://www.fltk.org/str.php
|
// http://www.fltk.org/str.php
|
||||||
//
|
//
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
#include <FL/Fl_Native_File_Chooser.H>
|
#include <FL/Fl_Native_File_Chooser.H>
|
||||||
#include <FL/Fl_File_Icon.H>
|
#include <FL/Fl_File_Icon.H>
|
||||||
#define FLTK_CHOOSER_SINGLE Fl_File_Chooser::SINGLE
|
#define FLTK_CHOOSER_SINGLE Fl_File_Chooser::SINGLE
|
||||||
@ -50,9 +51,11 @@ Fl_Native_File_Chooser::Fl_Native_File_Chooser(int val) {
|
|||||||
#endif // FLTK_ABI_VERSION
|
#endif // FLTK_ABI_VERSION
|
||||||
if (have_looked_for_GTK_libs == 0) {
|
if (have_looked_for_GTK_libs == 0) {
|
||||||
// First Time here, try to find the GTK libs if they are installed
|
// First Time here, try to find the GTK libs if they are installed
|
||||||
|
#if HAVE_DLSYM && HAVE_DLFCN_H
|
||||||
if (Fl::option(Fl::OPTION_FNFC_USES_GTK)) {
|
if (Fl::option(Fl::OPTION_FNFC_USES_GTK)) {
|
||||||
Fl_GTK_File_Chooser::probe_for_GTK_libs();
|
Fl_GTK_File_Chooser::probe_for_GTK_libs();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
have_looked_for_GTK_libs = -1;
|
have_looked_for_GTK_libs = -1;
|
||||||
}
|
}
|
||||||
// if we found all the GTK functions we need, we will use the GtkFileChooserDialog
|
// if we found all the GTK functions we need, we will use the GtkFileChooserDialog
|
||||||
|
@ -17,7 +17,9 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#include <FL/x.H>
|
#include <FL/x.H>
|
||||||
|
#if HAVE_DLSYM && HAVE_DLFCN_H
|
||||||
#include <dlfcn.h> // for dlopen et al
|
#include <dlfcn.h> // for dlopen et al
|
||||||
|
#endif
|
||||||
#include <locale.h> // for setlocale
|
#include <locale.h> // for setlocale
|
||||||
|
|
||||||
/* --------------------- Type definitions from GLIB and GTK --------------------- */
|
/* --------------------- Type definitions from GLIB and GTK --------------------- */
|
||||||
@ -620,8 +622,9 @@ int Fl_GTK_File_Chooser::fl_gtk_chooser_wrapper()
|
|||||||
return result;
|
return result;
|
||||||
} // fl_gtk_chooser_wrapper
|
} // fl_gtk_chooser_wrapper
|
||||||
|
|
||||||
|
#if HAVE_DLSYM && HAVE_DLFCN_H
|
||||||
// macro to help with the symbol loading boilerplate...
|
// macro to help with the symbol loading boilerplate...
|
||||||
#define GET_SYM(SSS, LLL) \
|
# define GET_SYM(SSS, LLL) \
|
||||||
dlerror(); /* Clear any existing error */ \
|
dlerror(); /* Clear any existing error */ \
|
||||||
fl_##SSS = (XX_##SSS)dlsym(LLL, #SSS); \
|
fl_##SSS = (XX_##SSS)dlsym(LLL, #SSS); \
|
||||||
if ((pc_dl_error = dlerror()) != NULL) { \
|
if ((pc_dl_error = dlerror()) != NULL) { \
|
||||||
@ -635,6 +638,7 @@ static void* fl_dlopen(const char *filename1, const char *filename2)
|
|||||||
if (!ptr) ptr = dlopen(filename2, RTLD_LAZY | RTLD_GLOBAL);
|
if (!ptr) ptr = dlopen(filename2, RTLD_LAZY | RTLD_GLOBAL);
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Use dlopen to see if we can load the gtk dynamic libraries that
|
* Use dlopen to see if we can load the gtk dynamic libraries that
|
||||||
@ -642,6 +646,7 @@ static void* fl_dlopen(const char *filename1, const char *filename2)
|
|||||||
* without linking to the GTK libs at compile time.
|
* without linking to the GTK libs at compile time.
|
||||||
*/
|
*/
|
||||||
void Fl_GTK_File_Chooser::probe_for_GTK_libs(void) {
|
void Fl_GTK_File_Chooser::probe_for_GTK_libs(void) {
|
||||||
|
#if HAVE_DLSYM && HAVE_DLFCN_H
|
||||||
void *ptr_glib = NULL;
|
void *ptr_glib = NULL;
|
||||||
void *ptr_gtk = NULL;
|
void *ptr_gtk = NULL;
|
||||||
|
|
||||||
@ -719,6 +724,7 @@ void Fl_GTK_File_Chooser::probe_for_GTK_libs(void) {
|
|||||||
GET_SYM(gtk_toggle_button_set_active, ptr_gtk);
|
GET_SYM(gtk_toggle_button_set_active, ptr_gtk);
|
||||||
|
|
||||||
did_find_GTK_libs = 1;
|
did_find_GTK_libs = 1;
|
||||||
|
#endif
|
||||||
} // probe_for_GTK_libs
|
} // probe_for_GTK_libs
|
||||||
|
|
||||||
//
|
//
|
||||||
|
Loading…
Reference in New Issue
Block a user