summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPacho Ramos <pacho@gentoo.org>2012-02-14 08:43:43 +0000
committerPacho Ramos <pacho@gentoo.org>2012-02-14 08:43:43 +0000
commit10b47d8ff7790e0a8c9d5ca0206cda10af01b7e2 (patch)
tree8397ba7f4b4ef9935428b01d86647165af0e864c /net-wireless/bluez/files
parentversion bump (diff)
downloadhistorical-10b47d8ff7790e0a8c9d5ca0206cda10af01b7e2.tar.gz
historical-10b47d8ff7790e0a8c9d5ca0206cda10af01b7e2.tar.bz2
historical-10b47d8ff7790e0a8c9d5ca0206cda10af01b7e2.zip
Fix compilation problems against bluez, bug #403341 (by Steev Klimaszewski and Marcel Unbehaun); fix needing to enable socket, bug #401065 (by Andreas Eckstein and Ivan ivanov). Drop old.
Package-Manager: portage-2.1.10.46/cvs/Linux x86_64
Diffstat (limited to 'net-wireless/bluez/files')
-rw-r--r--net-wireless/bluez/files/bluez-4.98-fix-header.patch71
-rw-r--r--net-wireless/bluez/files/bluez-4.98-fix-socket.patch54
2 files changed, 125 insertions, 0 deletions
diff --git a/net-wireless/bluez/files/bluez-4.98-fix-header.patch b/net-wireless/bluez/files/bluez-4.98-fix-header.patch
new file mode 100644
index 000000000000..5ca087df9ae1
--- /dev/null
+++ b/net-wireless/bluez/files/bluez-4.98-fix-header.patch
@@ -0,0 +1,71 @@
+The compiler error is:
+ /usr/include/bluetooth/bluetooth.h::131:9: error: invalid conversion from 'void*' to 'bt_get_le64(void*)::<anonymous struct>*'
+ ...
+
+The reason is that C++, in contrast to C, does not allow conversion of
+void * to anything, and this code gets compiled as C++ when the app is
+written in C++. The macro with the assignment itself is older, but only
+recent Bluez starts to use it in inline functions, thus triggering the
+problem.
+
+This patch keeps the "struct __attribute__((packed))" magic and merely
+changes the typecast so that it works in C and C++. Like the existing
+macro this patch relies on support for typeof.
+
+The new variant of the code is in an ifdef and only used for C++
+to avoid unexpected regressions in C applications.
+
+Signed-off-by: Patrick Ohly <patrick.ohly@intel.com>
+---
+ lib/bluetooth.h | 30 ++++++++++++++++++++++++++++++
+ 1 files changed, 30 insertions(+), 0 deletions(-)
+
+Index: bluez-4.98/lib/bluetooth.h
+===================================================================
+--- bluez-4.98.orig/lib/bluetooth.h 2012-02-05 13:20:23.753659182 +0100
++++ bluez-4.98/lib/bluetooth.h 2012-02-05 13:26:33.905473976 +0100
+@@ -109,6 +109,12 @@
+ #endif
+
+ /* Bluetooth unaligned access */
++#ifndef __cplusplus
++/*
++ * traditional code, doesn't work in C++ because
++ * of the void * to struct pointer assignment
++ */
++
+ #define bt_get_unaligned(ptr) \
+ ({ \
+ struct __attribute__((packed)) { \
+@@ -125,6 +131,31 @@
+ __p->__v = (val); \
+ } while(0)
+
++#else /* __cplusplus */
++
++/*
++ * modified code with typeof typecast, for C++;
++ * the traditional code continues to be used for
++ * C to avoid unexpected regressions with this
++ * code here (it should work in C and C++, though)
++ */
++#define bt_get_unaligned(ptr) \
++({ \
++ struct __attribute__((packed)) { \
++ typeof(*(ptr)) __v; \
++ } *__p = (typeof(__p)) (ptr); \
++ __p->__v; \
++})
++
++#define bt_put_unaligned(val, ptr) \
++do { \
++ struct __attribute__((packed)) { \
++ typeof(*(ptr)) __v; \
++ } *__p = (typeof(__p)) (ptr); \
++ __p->__v = (val); \
++} while(0)
++#endif /* __cplusplus */
++
+ #if __BYTE_ORDER == __LITTLE_ENDIAN
+ static inline uint64_t bt_get_le64(void *ptr)
+ { \ No newline at end of file
diff --git a/net-wireless/bluez/files/bluez-4.98-fix-socket.patch b/net-wireless/bluez/files/bluez-4.98-fix-socket.patch
new file mode 100644
index 000000000000..6f16c5fdf96e
--- /dev/null
+++ b/net-wireless/bluez/files/bluez-4.98-fix-socket.patch
@@ -0,0 +1,54 @@
+diff --git a/audio/a2dp.c b/audio/a2dp.c
+index c4cdc62..2eebe6b 100644
+--- a/audio/a2dp.c
++++ b/audio/a2dp.c
+@@ -1441,9 +1441,9 @@ static struct a2dp_server *find_server(GSList *list, const bdaddr_t *src)
+
+ int a2dp_register(DBusConnection *conn, const bdaddr_t *src, GKeyFile *config)
+ {
+- int sbc_srcs = 1, sbc_sinks = 1;
++ int sbc_srcs = 0, sbc_sinks = 0;
+ int mpeg12_srcs = 0, mpeg12_sinks = 0;
+- gboolean source = TRUE, sink = FALSE, socket = TRUE;
++ gboolean source = TRUE, sink = FALSE, socket = FALSE;
+ gboolean delay_reporting = FALSE;
+ char *str;
+ GError *err = NULL;
+@@ -1463,6 +1463,8 @@ int a2dp_register(DBusConnection *conn, const bdaddr_t *src, GKeyFile *config)
+ source = TRUE;
+ if (strstr(str, "Source"))
+ sink = TRUE;
++ if (strstr(str, "Socket"))
++ socket = TRUE;
+ g_free(str);
+ }
+
+@@ -1482,18 +1484,14 @@ int a2dp_register(DBusConnection *conn, const bdaddr_t *src, GKeyFile *config)
+ }
+
+ /* Don't register any local sep if Socket is disabled */
+- if (socket == FALSE) {
+- sbc_srcs = 0;
+- sbc_sinks = 0;
+- mpeg12_srcs = 0;
+- mpeg12_sinks = 0;
++ if (socket == FALSE)
+ goto proceed;
+- }
+
+ str = g_key_file_get_string(config, "A2DP", "SBCSources", &err);
+ if (err) {
+ DBG("audio.conf: %s", err->message);
+ g_clear_error(&err);
++ sbc_srcs = 1;
+ } else {
+ sbc_srcs = atoi(str);
+ g_free(str);
+@@ -1512,6 +1510,7 @@ int a2dp_register(DBusConnection *conn, const bdaddr_t *src, GKeyFile *config)
+ if (err) {
+ DBG("audio.conf: %s", err->message);
+ g_clear_error(&err);
++ sbc_sinks = 1;
+ } else {
+ sbc_sinks = atoi(str);
+ g_free(str);