You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/app-emulation/free42/files/free42-1.4.75-fix-alsa.patch

188 lines
13 KiB

diff -Nur a/gtk/audio_alsa.cc b/gtk/audio_alsa.cc
--- a/gtk/audio_alsa.cc 2012-10-27 21:14:48.000000000 +0200
+++ b/gtk/audio_alsa.cc 2012-11-13 22:11:41.489906248 +0100
@@ -23,39 +23,94 @@
#include <sys/time.h>
#include <pthread.h>
#include <dlfcn.h>
+#include <math.h>
// We want to be able to run even if libasound is not present, so we have to
// link it manually using dlopen() and dlsym(). These are the functions we are
// going to need; the pointer names are the same as the actual function names
// in libasound, with _dl_ prefixed.
static int libasound_state = 0; // 0=closed, 1=open, 2=missing
-static int (*_dl_snd_pcm_close)(snd_pcm_t *pcm);
-static int (*_dl_snd_pcm_format_big_endian)(snd_pcm_format_t format);
-static int (*_dl_snd_pcm_format_physical_width)(snd_pcm_format_t format);
-static int (*_dl_snd_pcm_format_unsigned)(snd_pcm_format_t format);
-static int (*_dl_snd_pcm_format_width)(snd_pcm_format_t format);
-static int (*_dl_snd_pcm_hw_params)(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
-static int (*_dl_snd_pcm_hw_params_malloc)(snd_pcm_hw_params_t **ptr);
-static void (*_dl_snd_pcm_hw_params_free)(snd_pcm_hw_params_t *obj);
-static int (*_dl_snd_pcm_hw_params_any)(snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
-static int (*_dl_snd_pcm_hw_params_get_buffer_size)(const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
-static int (*_dl_snd_pcm_hw_params_set_access)(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_access_t _access);
-static int (*_dl_snd_pcm_hw_params_set_buffer_size_near)(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
-static int (*_dl_snd_pcm_hw_params_set_channels)(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val);
-static int (*_dl_snd_pcm_hw_params_set_format)(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_format_t val);
-static int (*_dl_snd_pcm_hw_params_set_rate_near)(snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
-static int (*_dl_snd_pcm_open)(snd_pcm_t **pcm, const char *name, snd_pcm_stream_t stream, int mode);
-static int (*_dl_snd_pcm_prepare)(snd_pcm_t *pcm);
-static int (*_dl_snd_pcm_resume)(snd_pcm_t *pcm);
-static int (*_dl_snd_pcm_sw_params)(snd_pcm_t *pcm, snd_pcm_sw_params_t *params);
-static int (*_dl_snd_pcm_sw_params_malloc)(snd_pcm_sw_params_t **ptr);
-static void (*_dl_snd_pcm_sw_params_free)(snd_pcm_sw_params_t *obj);
-static int (*_dl_snd_pcm_sw_params_current)(snd_pcm_t *pcm, snd_pcm_sw_params_t *params);
-static int (*_dl_snd_pcm_sw_params_get_boundary)(const snd_pcm_sw_params_t *params, snd_pcm_uframes_t *val);
-static int (*_dl_snd_pcm_sw_params_set_silence_size)(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_uframes_t val);
-static int (*_dl_snd_pcm_sw_params_set_silence_threshold)(snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_uframes_t val);
-static snd_pcm_sframes_t (*_dl_snd_pcm_writei)(snd_pcm_t *pcm, const void *buffer, snd_pcm_uframes_t size);
-static const char *(*_dl_snd_strerror)(int errnum);
+
+typedef int (dyn_snd_pcm_close) (snd_pcm_t *pcm);
+dyn_snd_pcm_close * _dl_snd_pcm_close = NULL;
+
+typedef int (dyn_snd_pcm_format_big_endian) (snd_pcm_format_t format);
+dyn_snd_pcm_format_big_endian * _dl_snd_pcm_format_big_endian = NULL;
+
+typedef int (dyn_snd_pcm_format_physical_width) (snd_pcm_format_t format);
+dyn_snd_pcm_format_physical_width * _dl_snd_pcm_format_physical_width = NULL;
+
+typedef int (dyn_snd_pcm_format_unsigned) (snd_pcm_format_t format);
+dyn_snd_pcm_format_unsigned * _dl_snd_pcm_format_unsigned = NULL;
+
+typedef int (dyn_snd_pcm_format_width) (snd_pcm_format_t format);
+dyn_snd_pcm_format_width * _dl_snd_pcm_format_width = NULL;
+
+typedef int (dyn_snd_pcm_hw_params) (snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
+dyn_snd_pcm_hw_params * _dl_snd_pcm_hw_params = NULL;
+
+typedef int (dyn_snd_pcm_hw_params_malloc) (snd_pcm_hw_params_t **ptr);
+dyn_snd_pcm_hw_params_malloc * _dl_snd_pcm_hw_params_malloc = NULL;
+
+typedef void (dyn_snd_pcm_hw_params_free) (snd_pcm_hw_params_t *obj);
+dyn_snd_pcm_hw_params_free * _dl_snd_pcm_hw_params_free = NULL;
+
+typedef int (dyn_snd_pcm_hw_params_any) (snd_pcm_t *pcm, snd_pcm_hw_params_t *params);
+dyn_snd_pcm_hw_params_any * _dl_snd_pcm_hw_params_any = NULL;
+
+typedef int (dyn_snd_pcm_hw_params_get_buffer_size) (const snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
+dyn_snd_pcm_hw_params_get_buffer_size * _dl_snd_pcm_hw_params_get_buffer_size = NULL;
+
+typedef int (dyn_snd_pcm_hw_params_set_access) (snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_access_t _access);
+dyn_snd_pcm_hw_params_set_access * _dl_snd_pcm_hw_params_set_access = NULL;
+
+typedef int (dyn_snd_pcm_hw_params_set_buffer_size_near) (snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_uframes_t *val);
+dyn_snd_pcm_hw_params_set_buffer_size_near * _dl_snd_pcm_hw_params_set_buffer_size_near = NULL;
+
+typedef int (dyn_snd_pcm_hw_params_set_channels) (snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int val);
+dyn_snd_pcm_hw_params_set_channels * _dl_snd_pcm_hw_params_set_channels = NULL;
+
+typedef int (dyn_snd_pcm_hw_params_set_format) (snd_pcm_t *pcm, snd_pcm_hw_params_t *params, snd_pcm_format_t val);
+dyn_snd_pcm_hw_params_set_format * _dl_snd_pcm_hw_params_set_format = NULL;
+
+typedef int (dyn_snd_pcm_hw_params_set_rate_near) (snd_pcm_t *pcm, snd_pcm_hw_params_t *params, unsigned int *val, int *dir);
+dyn_snd_pcm_hw_params_set_rate_near * _dl_snd_pcm_hw_params_set_rate_near = NULL;
+
+typedef int (dyn_snd_pcm_open) (snd_pcm_t **pcm, const char *name, snd_pcm_stream_t stream, int mode);
+dyn_snd_pcm_open * _dl_snd_pcm_open = NULL;
+
+typedef int (dyn_snd_pcm_prepare) (snd_pcm_t *pcm);
+dyn_snd_pcm_prepare * _dl_snd_pcm_prepare = NULL;
+
+typedef int (dyn_snd_pcm_resume) (snd_pcm_t *pcm);
+dyn_snd_pcm_resume * _dl_snd_pcm_resume = NULL;
+
+typedef int (dyn_snd_pcm_sw_params) (snd_pcm_t *pcm, snd_pcm_sw_params_t *params);
+dyn_snd_pcm_sw_params * _dl_snd_pcm_sw_params = NULL;
+
+typedef int (dyn_snd_pcm_sw_params_malloc) (snd_pcm_sw_params_t **ptr);
+dyn_snd_pcm_sw_params_malloc * _dl_snd_pcm_sw_params_malloc = NULL;
+
+typedef void (dyn_snd_pcm_sw_params_free) (snd_pcm_sw_params_t *obj);
+dyn_snd_pcm_sw_params_free * _dl_snd_pcm_sw_params_free = NULL;
+
+typedef int (dyn_snd_pcm_sw_params_current) (snd_pcm_t *pcm, snd_pcm_sw_params_t *params);
+dyn_snd_pcm_sw_params_current * _dl_snd_pcm_sw_params_current = NULL;
+
+typedef int (dyn_snd_pcm_sw_params_get_boundary) (const snd_pcm_sw_params_t *params, snd_pcm_uframes_t *val);
+dyn_snd_pcm_sw_params_get_boundary * _dl_snd_pcm_sw_params_get_boundary = NULL;
+
+typedef int (dyn_snd_pcm_sw_params_set_silence_size) (snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_uframes_t val);
+dyn_snd_pcm_sw_params_set_silence_size * _dl_snd_pcm_sw_params_set_silence_size = NULL;
+
+typedef int (dyn_snd_pcm_sw_params_set_silence_threshold) (snd_pcm_t *pcm, snd_pcm_sw_params_t *params, snd_pcm_uframes_t val);
+dyn_snd_pcm_sw_params_set_silence_threshold * _dl_snd_pcm_sw_params_set_silence_threshold = NULL;
+
+typedef snd_pcm_sframes_t (dyn_snd_pcm_writei) (snd_pcm_t *pcm, const void *buffer, snd_pcm_uframes_t size);
+dyn_snd_pcm_writei * _dl_snd_pcm_writei = NULL;
+
+typedef const char * (dyn_snd_strerror) (int errnum);
+dyn_snd_strerror * _dl_snd_strerror = NULL;
#define TDIFF(begin,end) (((double)(end.tv_sec - begin.tv_sec)*1000.0) + ((end.tv_usec - begin.tv_usec)/1000.0))
@@ -169,33 +224,34 @@
fprintf(stderr, "Could not open " ALSALIB "\nusing gdk_beep() for BEEP and TONE.\n");
return false;
}
- *((void **) &_dl_snd_pcm_close) = dlsym(lib, "snd_pcm_close");
- *((void **) &_dl_snd_pcm_format_big_endian) = dlsym(lib, "snd_pcm_format_big_endian");
- *((void **) &_dl_snd_pcm_format_physical_width) = dlsym(lib, "snd_pcm_format_physical_width");
- *((void **) &_dl_snd_pcm_format_unsigned) = dlsym(lib, "snd_pcm_format_unsigned");
- *((void **) &_dl_snd_pcm_format_width) = dlsym(lib, "snd_pcm_format_width");
- *((void **) &_dl_snd_pcm_hw_params) = dlsym(lib, "snd_pcm_hw_params");
- *((void **) &_dl_snd_pcm_hw_params_malloc) = dlsym(lib, "snd_pcm_hw_params_malloc");
- *((void **) &_dl_snd_pcm_hw_params_free) = dlsym(lib, "snd_pcm_hw_params_free");
- *((void **) &_dl_snd_pcm_hw_params_any) = dlsym(lib, "snd_pcm_hw_params_any");
- *((void **) &_dl_snd_pcm_hw_params_get_buffer_size) = dlsym(lib, "snd_pcm_hw_params_get_buffer_size");
- *((void **) &_dl_snd_pcm_hw_params_set_access) = dlsym(lib, "snd_pcm_hw_params_set_access");
- *((void **) &_dl_snd_pcm_hw_params_set_buffer_size_near) = dlsym(lib, "snd_pcm_hw_params_set_buffer_size_near");
- *((void **) &_dl_snd_pcm_hw_params_set_channels) = dlsym(lib, "snd_pcm_hw_params_set_channels");
- *((void **) &_dl_snd_pcm_hw_params_set_format) = dlsym(lib, "snd_pcm_hw_params_set_format");
- *((void **) &_dl_snd_pcm_hw_params_set_rate_near) = dlsym(lib, "snd_pcm_hw_params_set_rate_near");
- *((void **) &_dl_snd_pcm_open) = dlsym(lib, "snd_pcm_open");
- *((void **) &_dl_snd_pcm_prepare) = dlsym(lib, "snd_pcm_prepare");
- *((void **) &_dl_snd_pcm_resume) = dlsym(lib, "snd_pcm_resume");
- *((void **) &_dl_snd_pcm_sw_params) = dlsym(lib, "snd_pcm_sw_params");
- *((void **) &_dl_snd_pcm_sw_params_malloc) = dlsym(lib, "snd_pcm_sw_params_malloc");
- *((void **) &_dl_snd_pcm_sw_params_free) = dlsym(lib, "snd_pcm_sw_params_free");
- *((void **) &_dl_snd_pcm_sw_params_current) = dlsym(lib, "snd_pcm_sw_params_current");
- *((void **) &_dl_snd_pcm_sw_params_get_boundary) = dlsym(lib, "snd_pcm_sw_params_get_boundary");
- *((void **) &_dl_snd_pcm_sw_params_set_silence_size) = dlsym(lib, "snd_pcm_sw_params_set_silence_size");
- *((void **) &_dl_snd_pcm_sw_params_set_silence_threshold) = dlsym(lib, "snd_pcm_sw_params_set_silence_threshold");
- *((void **) &_dl_snd_pcm_writei) = dlsym(lib, "snd_pcm_writei");
- *((void **) &_dl_snd_strerror) = dlsym(lib, "snd_strerror");
+ _dl_snd_pcm_close = (dyn_snd_pcm_close *) dlsym(lib, "snd_pcm_close");
+ _dl_snd_pcm_format_big_endian = (dyn_snd_pcm_format_big_endian *) dlsym(lib, "snd_pcm_format_big_endian");
+ _dl_snd_pcm_format_physical_width = (dyn_snd_pcm_format_physical_width *) dlsym(lib, "snd_pcm_format_physical_width");
+ _dl_snd_pcm_format_unsigned = (dyn_snd_pcm_format_unsigned *) dlsym(lib, "snd_pcm_format_unsigned");
+ _dl_snd_pcm_format_width = (dyn_snd_pcm_format_width *) dlsym(lib, "snd_pcm_format_width");
+ _dl_snd_pcm_hw_params = (dyn_snd_pcm_hw_params *) dlsym(lib, "snd_pcm_hw_params");
+ _dl_snd_pcm_hw_params_malloc = (dyn_snd_pcm_hw_params_malloc *) dlsym(lib, "snd_pcm_hw_params_malloc");
+ _dl_snd_pcm_hw_params_free = (dyn_snd_pcm_hw_params_free *) dlsym(lib, "snd_pcm_hw_params_free");
+ _dl_snd_pcm_hw_params_any = (dyn_snd_pcm_hw_params_any *) dlsym(lib, "snd_pcm_hw_params_any");
+ _dl_snd_pcm_hw_params_get_buffer_size = (dyn_snd_pcm_hw_params_get_buffer_size *) dlsym(lib, "snd_pcm_hw_params_get_buffer_size");
+ _dl_snd_pcm_hw_params_set_access = (dyn_snd_pcm_hw_params_set_access *) dlsym(lib, "snd_pcm_hw_params_set_access");
+ _dl_snd_pcm_hw_params_set_buffer_size_near = (dyn_snd_pcm_hw_params_set_buffer_size_near *) dlsym(lib, "snd_pcm_hw_params_set_buffer_size_near");
+ _dl_snd_pcm_hw_params_set_channels = (dyn_snd_pcm_hw_params_set_channels *) dlsym(lib, "snd_pcm_hw_params_set_channels");
+ _dl_snd_pcm_hw_params_set_format = (dyn_snd_pcm_hw_params_set_format *) dlsym(lib, "snd_pcm_hw_params_set_format");
+ _dl_snd_pcm_hw_params_set_rate_near = (dyn_snd_pcm_hw_params_set_rate_near *) dlsym(lib, "snd_pcm_hw_params_set_rate_near");
+ _dl_snd_pcm_open = (dyn_snd_pcm_open *) dlsym(lib, "snd_pcm_open");
+ _dl_snd_pcm_prepare = (dyn_snd_pcm_prepare *) dlsym(lib, "snd_pcm_prepare");
+ _dl_snd_pcm_resume = (dyn_snd_pcm_resume *) dlsym(lib, "snd_pcm_resume");
+ _dl_snd_pcm_sw_params = (dyn_snd_pcm_sw_params *) dlsym(lib, "snd_pcm_sw_params");
+ _dl_snd_pcm_sw_params_malloc = (dyn_snd_pcm_sw_params_malloc *) dlsym(lib, "snd_pcm_sw_params_malloc");
+ _dl_snd_pcm_sw_params_free = (dyn_snd_pcm_sw_params_free *) dlsym(lib, "snd_pcm_sw_params_free");
+ _dl_snd_pcm_sw_params_current = (dyn_snd_pcm_sw_params_current *) dlsym(lib, "snd_pcm_sw_params_current");
+ _dl_snd_pcm_sw_params_get_boundary = (dyn_snd_pcm_sw_params_get_boundary *) dlsym(lib, "snd_pcm_sw_params_get_boundary");
+ _dl_snd_pcm_sw_params_set_silence_size = (dyn_snd_pcm_sw_params_set_silence_size *) dlsym(lib, "snd_pcm_sw_params_set_silence_size");
+ _dl_snd_pcm_sw_params_set_silence_threshold = (dyn_snd_pcm_sw_params_set_silence_threshold *) dlsym(lib, "snd_pcm_sw_params_set_silence_threshold");
+ _dl_snd_pcm_writei = (dyn_snd_pcm_writei *) dlsym(lib, "snd_pcm_writei");
+ _dl_snd_strerror = (dyn_snd_strerror *) dlsym(lib, "snd_strerror");
+
if (dlerror() == NULL)
return true;
fprintf(stderr, "Could not load all required symbols from " ALSALIB "\nusing gdk_beep() for BEEP and TONE.\n");