diff options
author | Pete Batard <pete@akeo.ie> | 2012-06-25 19:13:42 +0100 |
---|---|---|
committer | Pete Batard <pete@akeo.ie> | 2012-07-02 18:28:37 +0100 |
commit | 0e0cbb6c27efa5a2ae58c30267a4be9486c766cc (patch) | |
tree | bb5a0fef2387ff49547595c58d4a90439e1b9460 /libusb | |
parent | 89b43a6929305eab8aad297a0ecb58b478857a10 (diff) | |
download | android_external_libusbx-0e0cbb6c27efa5a2ae58c30267a4be9486c766cc.tar.gz android_external_libusbx-0e0cbb6c27efa5a2ae58c30267a4be9486c766cc.tar.bz2 android_external_libusbx-0e0cbb6c27efa5a2ae58c30267a4be9486c766cc.zip |
Windows: Address MSVC Level 4 & WDK's OACR/Prefast warnings
* The library is now compiled with warning level 4 for VS2010
* Move silencing of 4200, 28125 and 28719 to msvc/config.h
* Add fixes in core to silence unused variables warnings
* Ensure that spinlock is always set interlocked in poll_windows
* Add missing check for calloc return value
* Fix data assignation in conditionals warnings
* Fix an OACR/Prefast error related to the use of strncpy in xusb.c
* Also fixes whitespace inconsistencies in core
* Issues reported by Orin Eman and Xiaofan Chen. See:
https://sourceforge.net/mailarchive/message.php?msg_id=29412656
Diffstat (limited to 'libusb')
-rw-r--r-- | libusb/core.c | 33 | ||||
-rw-r--r-- | libusb/libusbi.h | 3 | ||||
-rw-r--r-- | libusb/os/poll_windows.c | 6 | ||||
-rw-r--r-- | libusb/os/threads_windows.c | 2 | ||||
-rw-r--r-- | libusb/os/windows_usb.c | 23 | ||||
-rw-r--r-- | libusb/version_nano.h | 2 |
6 files changed, 37 insertions, 32 deletions
diff --git a/libusb/core.c b/libusb/core.c index dd352f9..82cf782 100644 --- a/libusb/core.c +++ b/libusb/core.c @@ -1611,7 +1611,7 @@ void API_EXPORTED libusb_set_debug(libusb_context *ctx, int level) */ int API_EXPORTED libusb_init(libusb_context **context) { - char *dbg = getenv("LIBUSB_DEBUG"); + char *dbg; struct libusb_context *ctx; int r = 0; @@ -1639,6 +1639,7 @@ int API_EXPORTED libusb_init(libusb_context **context) ctx->debug = LOG_LEVEL_DEBUG; #endif + dbg = getenv("LIBUSB_DEBUG"); if (dbg) { ctx->debug = atoi(dbg); if (ctx->debug) @@ -1774,21 +1775,21 @@ int API_EXPORTED libusb_has_capability(uint32_t capability) #define _W32_FT_OFFSET (116444736000000000) int usbi_gettimeofday(struct timeval *tp, void *tzp) - { - union { - unsigned __int64 ns100; /*time since 1 Jan 1601 in 100ns units */ - FILETIME ft; - } _now; - - if(tp) - { - GetSystemTimeAsFileTime (&_now.ft); - tp->tv_usec=(long)((_now.ns100 / 10) % 1000000 ); - tp->tv_sec= (long)((_now.ns100 - _W32_FT_OFFSET) / 10000000); - } - /* Always return 0 as per Open Group Base Specifications Issue 6. - Do not set errno on error. */ - return 0; +{ + union { + unsigned __int64 ns100; /* Time since 1 Jan 1601, in 100ns units */ + FILETIME ft; + } _now; + UNUSED(tzp); + + if(tp) { + GetSystemTimeAsFileTime (&_now.ft); + tp->tv_usec=(long)((_now.ns100 / 10) % 1000000 ); + tp->tv_sec= (long)((_now.ns100 - _W32_FT_OFFSET) / 10000000); + } + /* Always return 0 as per Open Group Base Specifications Issue 6. + Do not set errno on error. */ + return 0; } #endif diff --git a/libusb/libusbi.h b/libusb/libusbi.h index 41a6bf0..27362f7 100644 --- a/libusb/libusbi.h +++ b/libusb/libusbi.h @@ -49,6 +49,9 @@ #define USB_MAXINTERFACES 32 #define USB_MAXCONFIG 8 +/* The following is used to silence warnings for unused variables */ +#define UNUSED(var) (void)sizeof(var) + struct list_head { struct list_head *prev, *next; }; diff --git a/libusb/os/poll_windows.c b/libusb/os/poll_windows.c index e7bd8c5..4601a79 100644 --- a/libusb/os/poll_windows.c +++ b/libusb/os/poll_windows.c @@ -139,7 +139,7 @@ void init_polling(void) } is_polling_set = TRUE; } - compat_spinlock = 0; + InterlockedExchange((LONG *)&compat_spinlock, 0); } // Internal function to retrieve the table index (and lock the fd mutex) @@ -237,7 +237,7 @@ void exit_polling(void) DeleteCriticalSection(&_poll_fd[i].mutex); } } - compat_spinlock = 0; + InterlockedExchange((LONG *)&compat_spinlock, 0); } /* @@ -672,6 +672,7 @@ int usbi_close(int fd) ssize_t usbi_write(int fd, const void *buf, size_t count) { int _index; + UNUSED(buf); CHECK_INIT_POLLING; @@ -708,6 +709,7 @@ ssize_t usbi_read(int fd, void *buf, size_t count) { int _index; ssize_t r = -1; + UNUSED(buf); CHECK_INIT_POLLING; diff --git a/libusb/os/threads_windows.c b/libusb/os/threads_windows.c index 4acfff6..aa05edc 100644 --- a/libusb/os/threads_windows.c +++ b/libusb/os/threads_windows.c @@ -28,6 +28,7 @@ int usbi_mutex_init(usbi_mutex_t *mutex, const usbi_mutexattr_t *attr) { + UNUSED(attr); if(! mutex) return ((errno=EINVAL)); *mutex = CreateMutex(NULL, FALSE, NULL); if(!*mutex) return ((errno=ENOMEM)); @@ -83,6 +84,7 @@ int usbi_mutex_static_unlock(usbi_mutex_static_t *mutex) { int usbi_cond_init(usbi_cond_t *cond, const usbi_condattr_t *attr) { + UNUSED(attr); if(!cond) return ((errno=EINVAL)); list_init(&cond->waiters ); list_init(&cond->not_waiting); diff --git a/libusb/os/windows_usb.c b/libusb/os/windows_usb.c index 9b30e2d..3b90d18 100644 --- a/libusb/os/windows_usb.c +++ b/libusb/os/windows_usb.c @@ -38,11 +38,6 @@ #include "poll_windows.h" #include "windows_usb.h" -// The following prevents "banned API" errors when using the MS's WDK OACR/Prefast -#if defined(_PREFAST_) -#pragma warning(disable:28719) -#endif - // The 2 macros below are used in conjunction with safe loops. #define LOOP_CHECK(fcall) { r=fcall; if (r != LIBUSB_SUCCESS) continue; } #define LOOP_BREAK(err) { r=err; continue; } @@ -455,7 +450,7 @@ static unsigned long htab_hash(char* str) char* sz = str; // Compute main hash value (algorithm suggested by Nokia) - while ((c = *sz++)) + while ((c = *sz++) != 0) r = ((r << 5) + r) + c; if (r == 0) ++r; @@ -1193,6 +1188,8 @@ static int set_composite_interface(struct libusb_context* ctx, struct libusb_dev priv->usb_interface[interface_number].apib = &usb_api_backend[api]; if ((api == USB_API_HID) && (priv->hid == NULL)) { priv->hid = calloc(1, sizeof(struct hid_device_priv)); + if (priv->hid == NULL) + return LIBUSB_ERROR_NO_MEM; } priv->composite_api_flags |= 1<<api; @@ -1223,7 +1220,7 @@ static int windows_get_device_list(struct libusb_context *ctx, struct discovered struct discovered_devs *discdevs; HDEVINFO dev_info = { 0 }; char* usb_class[2] = {"USB", "NUSB3"}; - SP_DEVINFO_DATA dev_info_data; + SP_DEVINFO_DATA dev_info_data = { 0 }; SP_DEVICE_INTERFACE_DETAIL_DATA_A *dev_interface_details = NULL; GUID hid_guid; #define MAX_ENUM_GUIDS 64 @@ -1244,7 +1241,6 @@ static int windows_get_device_list(struct libusb_context *ctx, struct discovered char* dev_id_path = NULL; unsigned long session_id; DWORD size, reg_type, port_nr, install_state; - BOOL b = FALSE; HKEY key; WCHAR guid_string_w[MAX_GUID_STRING_LENGTH]; GUID* if_guid; @@ -1333,12 +1329,13 @@ static int windows_get_device_list(struct libusb_context *ctx, struct discovered } else { // Workaround for a Nec/Renesas USB 3.0 driver bug where root hubs are // being listed under the "NUSB3" PnP Symbolic Name rather than "USB" - while ( (class_index < 2) && - (!(b = get_devinfo_data(ctx, &dev_info, &dev_info_data, usb_class[class_index], i))) ) { - class_index++; - i = 0; + for (; class_index < 2; class_index++) { + if (get_devinfo_data(ctx, &dev_info, &dev_info_data, usb_class[class_index], i)) + break; + i = 0; } - if (!b) break; + if (class_index >= 2) + break; } // Read the Device ID path. This is what we'll use as UID diff --git a/libusb/version_nano.h b/libusb/version_nano.h index 217b1bd..071c2ef 100644 --- a/libusb/version_nano.h +++ b/libusb/version_nano.h @@ -1 +1 @@ -#define LIBUSB_NANO 10534 +#define LIBUSB_NANO 10535 |