From: Hendrik S. <po...@he...> - 2009-05-29 10:25:52
|
Zitat von Marcel Holtmann <ma...@ho...>: >> >> > I also started fixing out screwed up declarations overload. Hope that >> >> > works now as expected. >> >> >> >> Let me test those changes for the Win32 build before release, please! >> >> It might needs other changes. I will tell you when I'm done with this. >> > >> > Sure. Let me know when you have verified it. >> >> It is currently broken on Win32 (all compilers). >> I can fix it but I need a bit time to figure out the bits. The necessary changes are in my "updates" branch on gitorious. With that, I can build on Win32 using MSVC9. >> Regarding the BtOBEX_* functions: the main problem for testing for >> SOL_RFCOMM is that if bluetooth/bluetooth.h is not available (in >> Linux), then that define also isn't. This would leave bdaddr_t an >> undefined type. So if a user of OpenObex doesn't need bluetooth, that >> makes it work for him. >> Having bluez_compat.h includes should give you that define. >> The solution may be to define (or typedef) bdaddr_t as a basic type >> (or void*) if SOL_RFCOMM is not defined (thus adding an else case) and >> add the function prototype unconditionally. >> Using -Werror without this makes bluetooth a hard dependency (a no-go >> for many systems where there is no bluetooth stack). > > So my take is that these functions should always be present, but when > compiled without Bluetooth support, they return an error. > > The current state with having a different API depending on how it is > compiled is not a good thing anyway. The problem really is the definition of bdaddr_t. For openobex-internal usage, this needs to be the same as in bluez_compat.h and must not be defined twice. Thus, bluez_compat.h must always be included before openobex/obex.h. This can be ensured with a small header wrapper. For external usage, the definition depends on bluetooth being actually available. Even on Linux, this is not always the case, so either you hide the prototypes (doesn't really change the API) or you make bluetooth mandatory and include the bdaddr_t definitions from bluez_compat.h in there. The internal headers are also a bit messed up (quite a lot circular includes, e.g. between obex_main.h and obex_object.h). This needs cleanup, too, or you will always run into some kind of trouble easily. At some points, we only include openobex/obex.h because those damn typedefs are defined there. I propose for internal usage only the use of "struct xyz" instead of "xyz_t" and only include openobex/obex.h where absolutely necessary (mostly only lib/obex.c). This needs more work, though. Suggestion or counter arguments welcome :) HS |