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
This commit is contained in:
parent
89b43a6929
commit
0e0cbb6c27
10 changed files with 57 additions and 40 deletions
|
@ -935,7 +935,10 @@ int main(int argc, char** argv)
|
||||||
break;
|
break;
|
||||||
case 'b':
|
case 'b':
|
||||||
if (j+1 < argc) {
|
if (j+1 < argc) {
|
||||||
strncpy(binary_name, argv[j+1], 64);
|
// WDK's OACR doesn't like strncpy...
|
||||||
|
for (i=0; (i<(sizeof(binary_name)-1)) && (argv[j+1][i] != 0); i++)
|
||||||
|
binary_name[i] = argv[j+1][i];
|
||||||
|
binary_name[i] = 0;
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
binary_dump = true;
|
binary_dump = true;
|
||||||
|
|
|
@ -1611,7 +1611,7 @@ void API_EXPORTED libusb_set_debug(libusb_context *ctx, int level)
|
||||||
*/
|
*/
|
||||||
int API_EXPORTED libusb_init(libusb_context **context)
|
int API_EXPORTED libusb_init(libusb_context **context)
|
||||||
{
|
{
|
||||||
char *dbg = getenv("LIBUSB_DEBUG");
|
char *dbg;
|
||||||
struct libusb_context *ctx;
|
struct libusb_context *ctx;
|
||||||
int r = 0;
|
int r = 0;
|
||||||
|
|
||||||
|
@ -1639,6 +1639,7 @@ int API_EXPORTED libusb_init(libusb_context **context)
|
||||||
ctx->debug = LOG_LEVEL_DEBUG;
|
ctx->debug = LOG_LEVEL_DEBUG;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
dbg = getenv("LIBUSB_DEBUG");
|
||||||
if (dbg) {
|
if (dbg) {
|
||||||
ctx->debug = atoi(dbg);
|
ctx->debug = atoi(dbg);
|
||||||
if (ctx->debug)
|
if (ctx->debug)
|
||||||
|
@ -1774,14 +1775,14 @@ int API_EXPORTED libusb_has_capability(uint32_t capability)
|
||||||
#define _W32_FT_OFFSET (116444736000000000)
|
#define _W32_FT_OFFSET (116444736000000000)
|
||||||
|
|
||||||
int usbi_gettimeofday(struct timeval *tp, void *tzp)
|
int usbi_gettimeofday(struct timeval *tp, void *tzp)
|
||||||
{
|
{
|
||||||
union {
|
union {
|
||||||
unsigned __int64 ns100; /*time since 1 Jan 1601 in 100ns units */
|
unsigned __int64 ns100; /* Time since 1 Jan 1601, in 100ns units */
|
||||||
FILETIME ft;
|
FILETIME ft;
|
||||||
} _now;
|
} _now;
|
||||||
|
UNUSED(tzp);
|
||||||
|
|
||||||
if(tp)
|
if(tp) {
|
||||||
{
|
|
||||||
GetSystemTimeAsFileTime (&_now.ft);
|
GetSystemTimeAsFileTime (&_now.ft);
|
||||||
tp->tv_usec=(long)((_now.ns100 / 10) % 1000000 );
|
tp->tv_usec=(long)((_now.ns100 / 10) % 1000000 );
|
||||||
tp->tv_sec= (long)((_now.ns100 - _W32_FT_OFFSET) / 10000000);
|
tp->tv_sec= (long)((_now.ns100 - _W32_FT_OFFSET) / 10000000);
|
||||||
|
|
|
@ -49,6 +49,9 @@
|
||||||
#define USB_MAXINTERFACES 32
|
#define USB_MAXINTERFACES 32
|
||||||
#define USB_MAXCONFIG 8
|
#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 {
|
||||||
struct list_head *prev, *next;
|
struct list_head *prev, *next;
|
||||||
};
|
};
|
||||||
|
|
|
@ -139,7 +139,7 @@ void init_polling(void)
|
||||||
}
|
}
|
||||||
is_polling_set = TRUE;
|
is_polling_set = TRUE;
|
||||||
}
|
}
|
||||||
compat_spinlock = 0;
|
InterlockedExchange((LONG *)&compat_spinlock, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Internal function to retrieve the table index (and lock the fd mutex)
|
// 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);
|
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)
|
ssize_t usbi_write(int fd, const void *buf, size_t count)
|
||||||
{
|
{
|
||||||
int _index;
|
int _index;
|
||||||
|
UNUSED(buf);
|
||||||
|
|
||||||
CHECK_INIT_POLLING;
|
CHECK_INIT_POLLING;
|
||||||
|
|
||||||
|
@ -708,6 +709,7 @@ ssize_t usbi_read(int fd, void *buf, size_t count)
|
||||||
{
|
{
|
||||||
int _index;
|
int _index;
|
||||||
ssize_t r = -1;
|
ssize_t r = -1;
|
||||||
|
UNUSED(buf);
|
||||||
|
|
||||||
CHECK_INIT_POLLING;
|
CHECK_INIT_POLLING;
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
|
|
||||||
int usbi_mutex_init(usbi_mutex_t *mutex,
|
int usbi_mutex_init(usbi_mutex_t *mutex,
|
||||||
const usbi_mutexattr_t *attr) {
|
const usbi_mutexattr_t *attr) {
|
||||||
|
UNUSED(attr);
|
||||||
if(! mutex) return ((errno=EINVAL));
|
if(! mutex) return ((errno=EINVAL));
|
||||||
*mutex = CreateMutex(NULL, FALSE, NULL);
|
*mutex = CreateMutex(NULL, FALSE, NULL);
|
||||||
if(!*mutex) return ((errno=ENOMEM));
|
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,
|
int usbi_cond_init(usbi_cond_t *cond,
|
||||||
const usbi_condattr_t *attr) {
|
const usbi_condattr_t *attr) {
|
||||||
|
UNUSED(attr);
|
||||||
if(!cond) return ((errno=EINVAL));
|
if(!cond) return ((errno=EINVAL));
|
||||||
list_init(&cond->waiters );
|
list_init(&cond->waiters );
|
||||||
list_init(&cond->not_waiting);
|
list_init(&cond->not_waiting);
|
||||||
|
|
|
@ -38,11 +38,6 @@
|
||||||
#include "poll_windows.h"
|
#include "poll_windows.h"
|
||||||
#include "windows_usb.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.
|
// The 2 macros below are used in conjunction with safe loops.
|
||||||
#define LOOP_CHECK(fcall) { r=fcall; if (r != LIBUSB_SUCCESS) continue; }
|
#define LOOP_CHECK(fcall) { r=fcall; if (r != LIBUSB_SUCCESS) continue; }
|
||||||
#define LOOP_BREAK(err) { r=err; continue; }
|
#define LOOP_BREAK(err) { r=err; continue; }
|
||||||
|
@ -455,7 +450,7 @@ static unsigned long htab_hash(char* str)
|
||||||
char* sz = str;
|
char* sz = str;
|
||||||
|
|
||||||
// Compute main hash value (algorithm suggested by Nokia)
|
// Compute main hash value (algorithm suggested by Nokia)
|
||||||
while ((c = *sz++))
|
while ((c = *sz++) != 0)
|
||||||
r = ((r << 5) + r) + c;
|
r = ((r << 5) + r) + c;
|
||||||
if (r == 0)
|
if (r == 0)
|
||||||
++r;
|
++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];
|
priv->usb_interface[interface_number].apib = &usb_api_backend[api];
|
||||||
if ((api == USB_API_HID) && (priv->hid == NULL)) {
|
if ((api == USB_API_HID) && (priv->hid == NULL)) {
|
||||||
priv->hid = calloc(1, sizeof(struct hid_device_priv));
|
priv->hid = calloc(1, sizeof(struct hid_device_priv));
|
||||||
|
if (priv->hid == NULL)
|
||||||
|
return LIBUSB_ERROR_NO_MEM;
|
||||||
}
|
}
|
||||||
priv->composite_api_flags |= 1<<api;
|
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;
|
struct discovered_devs *discdevs;
|
||||||
HDEVINFO dev_info = { 0 };
|
HDEVINFO dev_info = { 0 };
|
||||||
char* usb_class[2] = {"USB", "NUSB3"};
|
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;
|
SP_DEVICE_INTERFACE_DETAIL_DATA_A *dev_interface_details = NULL;
|
||||||
GUID hid_guid;
|
GUID hid_guid;
|
||||||
#define MAX_ENUM_GUIDS 64
|
#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;
|
char* dev_id_path = NULL;
|
||||||
unsigned long session_id;
|
unsigned long session_id;
|
||||||
DWORD size, reg_type, port_nr, install_state;
|
DWORD size, reg_type, port_nr, install_state;
|
||||||
BOOL b = FALSE;
|
|
||||||
HKEY key;
|
HKEY key;
|
||||||
WCHAR guid_string_w[MAX_GUID_STRING_LENGTH];
|
WCHAR guid_string_w[MAX_GUID_STRING_LENGTH];
|
||||||
GUID* if_guid;
|
GUID* if_guid;
|
||||||
|
@ -1333,12 +1329,13 @@ static int windows_get_device_list(struct libusb_context *ctx, struct discovered
|
||||||
} else {
|
} else {
|
||||||
// Workaround for a Nec/Renesas USB 3.0 driver bug where root hubs are
|
// 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"
|
// being listed under the "NUSB3" PnP Symbolic Name rather than "USB"
|
||||||
while ( (class_index < 2) &&
|
for (; class_index < 2; class_index++) {
|
||||||
(!(b = get_devinfo_data(ctx, &dev_info, &dev_info_data, usb_class[class_index], i))) ) {
|
if (get_devinfo_data(ctx, &dev_info, &dev_info_data, usb_class[class_index], i))
|
||||||
class_index++;
|
break;
|
||||||
i = 0;
|
i = 0;
|
||||||
}
|
}
|
||||||
if (!b) break;
|
if (class_index >= 2)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read the Device ID path. This is what we'll use as UID
|
// Read the Device ID path. This is what we'll use as UID
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
#define LIBUSB_NANO 10534
|
#define LIBUSB_NANO 10535
|
||||||
|
|
|
@ -5,6 +5,15 @@
|
||||||
#error "Please make sure the msvc/ directory is removed from your build path."
|
#error "Please make sure the msvc/ directory is removed from your build path."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Disable: warning C4200: nonstandard extension used : zero-sized array in struct/union */
|
||||||
|
#pragma warning(disable:4200)
|
||||||
|
#if defined(_PREFAST_)
|
||||||
|
/* Disable "Banned API" errors when using the MS's WDK OACR/Prefast */
|
||||||
|
#pragma warning(disable:28719)
|
||||||
|
/* Disable "The function 'InitializeCriticalSection' must be called from within a try/except block" */
|
||||||
|
#pragma warning(disable:28125)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Default visibility */
|
/* Default visibility */
|
||||||
#define DEFAULT_VISIBILITY /**/
|
#define DEFAULT_VISIBILITY /**/
|
||||||
|
|
||||||
|
|
|
@ -79,7 +79,7 @@
|
||||||
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>_WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
|
@ -98,7 +98,7 @@
|
||||||
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>_WIN32;_WIN64;_DEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_WIN32;_WIN64;_DEBUG;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
|
@ -113,7 +113,7 @@
|
||||||
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>_WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<OutputFile>$(OutDir)libusb-1.0.dll</OutputFile>
|
<OutputFile>$(OutDir)libusb-1.0.dll</OutputFile>
|
||||||
|
@ -129,7 +129,7 @@
|
||||||
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>_WIN32;_WIN64;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_WIN32;_WIN64;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<OutputFile>$(OutDir)libusb-1.0.dll</OutputFile>
|
<OutputFile>$(OutDir)libusb-1.0.dll</OutputFile>
|
||||||
|
|
|
@ -79,7 +79,7 @@
|
||||||
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>_WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Lib>
|
<Lib>
|
||||||
|
@ -95,7 +95,7 @@
|
||||||
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>_WIN32;_WIN64;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_WIN32;_WIN64;_DEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Lib>
|
<Lib>
|
||||||
|
@ -107,7 +107,7 @@
|
||||||
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>_WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Lib>
|
<Lib>
|
||||||
<OutputFile>$(OutDir)libusb-1.0.lib</OutputFile>
|
<OutputFile>$(OutDir)libusb-1.0.lib</OutputFile>
|
||||||
|
@ -121,7 +121,7 @@
|
||||||
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>.;..\libusb;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>_WIN32;_WIN64;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>_WIN32;_WIN64;_LIB;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level4</WarningLevel>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<Lib>
|
<Lib>
|
||||||
<OutputFile>$(OutDir)libusb-1.0.lib</OutputFile>
|
<OutputFile>$(OutDir)libusb-1.0.lib</OutputFile>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue