diff options
author | Pete Batard <pete@akeo.ie> | 2011-11-13 23:10:15 +0000 |
---|---|---|
committer | Pete Batard <pete@akeo.ie> | 2011-11-13 23:10:15 +0000 |
commit | 075916a350ea7e52afe031a6e212e0fa24a217b9 (patch) | |
tree | c9732cffd87460bf02a6b417b6c8a02ddf0c330f | |
parent | b19b25514bae568886f53ec0f0366bebc238893c (diff) | |
download | libusb-075916a350ea7e52afe031a6e212e0fa24a217b9.tar.gz |
[msvc] fix for MSVC6 preprocessor not accepting blank parameters
* unlike later iterations of Visual Studio, MSVC6 does not accept
blank parameters on macro calls [eg. CALL(a, ,b)]
* blank params were used with the DLL_DECLARE and DLL_LOAD macros
* issue reported by Satz Klauer
-rw-r--r-- | libusb/os/windows_usb.h | 48 |
1 files changed, 25 insertions, 23 deletions
diff --git a/libusb/os/windows_usb.h b/libusb/os/windows_usb.h index 608f369..118e088 100644 --- a/libusb/os/windows_usb.h +++ b/libusb/os/windows_usb.h @@ -244,31 +244,33 @@ struct driver_lookup { /* * API macros - from libusb-win32 1.x */ -#define DLL_DECLARE_PREFIXED(api, ret, prefix, name, args) \ - typedef ret (api * __dll_##name##_t)args; \ - static __dll_##name##_t prefix##name = NULL - -#define DLL_LOAD_PREFIXED(dll, prefix, name, ret_on_failure) \ - do { \ - HMODULE h = GetModuleHandleA(#dll); \ - if (!h) \ - h = LoadLibraryA(#dll); \ - if (!h) { \ - if (ret_on_failure) { return LIBUSB_ERROR_NOT_FOUND; }\ - else { break; } \ - } \ - prefix##name = (__dll_##name##_t)GetProcAddress(h, #name);\ - if (prefix##name) break; \ - prefix##name = (__dll_##name##_t)GetProcAddress(h, #name "A");\ - if (prefix##name) break; \ - prefix##name = (__dll_##name##_t)GetProcAddress(h, #name "W");\ - if (prefix##name) break; \ - if(ret_on_failure) \ - return LIBUSB_ERROR_NOT_FOUND; \ +#define DLL_DECLARE_PREFIXNAME(api, ret, prefixname, name, args) \ + typedef ret (api * __dll_##name##_t)args; \ + static __dll_##name##_t prefixname = NULL + +#define DLL_LOAD_PREFIXNAME(dll, prefixname, name, ret_on_failure) \ + do { \ + HMODULE h = GetModuleHandleA(#dll); \ + if (!h) \ + h = LoadLibraryA(#dll); \ + if (!h) { \ + if (ret_on_failure) { return LIBUSB_ERROR_NOT_FOUND; } \ + else { break; } \ + } \ + prefixname = (__dll_##name##_t)GetProcAddress(h, #name); \ + if (prefixname) break; \ + prefixname = (__dll_##name##_t)GetProcAddress(h, #name "A"); \ + if (prefixname) break; \ + prefixname = (__dll_##name##_t)GetProcAddress(h, #name "W"); \ + if (prefixname) break; \ + if(ret_on_failure) \ + return LIBUSB_ERROR_NOT_FOUND; \ } while(0) -#define DLL_DECLARE(api, ret, name, args) DLL_DECLARE_PREFIXED(api, ret, , name, args) -#define DLL_LOAD(dll, name, ret_on_failure) DLL_LOAD_PREFIXED(dll, , name, ret_on_failure) +#define DLL_DECLARE(api, ret, name, args) DLL_DECLARE_PREFIXNAME(api, ret, name, name, args) +#define DLL_LOAD(dll, name, ret_on_failure) DLL_LOAD_PREFIXNAME(dll, name, name, ret_on_failure) +#define DLL_DECLARE_PREFIXED(api, ret, prefix, name, args) DLL_DECLARE_PREFIXNAME(api, ret, prefix##name, name, args) +#define DLL_LOAD_PREFIXED(dll, prefix, name, ret_on_failure) DLL_LOAD_PREFIXNAME(dll, prefix##name, name, ret_on_failure) /* OLE32 dependency */ DLL_DECLARE_PREFIXED(WINAPI, HRESULT, p, CLSIDFromString, (LPCOLESTR, LPCLSID)); |