diff options
author | Pacho Ramos <pacho@gentoo.org> | 2012-02-14 08:43:43 +0000 |
---|---|---|
committer | Pacho Ramos <pacho@gentoo.org> | 2012-02-14 08:43:43 +0000 |
commit | 10b47d8ff7790e0a8c9d5ca0206cda10af01b7e2 (patch) | |
tree | 8397ba7f4b4ef9935428b01d86647165af0e864c /net-wireless/bluez/files | |
parent | version bump (diff) | |
download | historical-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.patch | 71 | ||||
-rw-r--r-- | net-wireless/bluez/files/bluez-4.98-fix-socket.patch | 54 |
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); |