diff options
author | Patrick Ohly <patrick.ohly@intel.com> | 2012-01-16 11:11:55 +0100 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2012-03-04 15:24:39 -0800 |
commit | 4002cf271e3939714296c535a1ed8d4f0d5ac005 (patch) | |
tree | 4dfb6a28e13a4007c93720b4ffeec1ab8ae30c24 /lib/bluetooth.h | |
parent | af39e81ae92ed117719a77017adf2bb6b2dc5046 (diff) | |
download | bluez-4002cf271e3939714296c535a1ed8d4f0d5ac005.tar.gz |
lib: Fix compile issue when using in C++
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.
Diffstat (limited to 'lib/bluetooth.h')
-rw-r--r-- | lib/bluetooth.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/bluetooth.h b/lib/bluetooth.h index ea7373daf..0541842ac 100644 --- a/lib/bluetooth.h +++ b/lib/bluetooth.h @@ -141,7 +141,7 @@ enum { ({ \ struct __attribute__((packed)) { \ typeof(*(ptr)) __v; \ - } *__p = (void *) (ptr); \ + } *__p = (typeof(__p)) (ptr); \ __p->__v; \ }) @@ -149,7 +149,7 @@ enum { do { \ struct __attribute__((packed)) { \ typeof(*(ptr)) __v; \ - } *__p = (void *) (ptr); \ + } *__p = (typeof(__p)) (ptr); \ __p->__v = (val); \ } while(0) |