diff --git a/.gitignore b/.gitignore index 3a49783..8a4eb9f 100644 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,7 @@ utils/nfc-mfultralight utils/nfc-read-forum-tag3 utils/nfc-relay-picc utils/nfc-scan-device + +.vs/ + +CMakeSettings.json diff --git a/.travis.yml b/.travis.yml index b331309..a65f5f1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,20 +1,72 @@ language: c -compiler: - - clang - - gcc +matrix: + include: + - os: windows + compiler: + - clang + before_install: + - mkdir build && cd build && wget "https://sourceforge.net/projects/libusb-win32/files/libusb-win32-releases/1.2.6.0/libusb-win32-bin-1.2.6.0.zip" && 7z x libusb-win32-bin-1.2.6.0.zip -o"$PROGRAMFILES" && mv "$PROGRAMFILES/libusb-win32-bin-1.2.6.0" "$PROGRAMFILES/libusb-win32" + install: + choco install doxygen.install ninja + script: + cmake -GNinja .. && cmake --build . -env: - - BLD=cmake - - BLD=autoconf + - os: linux + dist: bionic + compiler: + - clang + addons: + apt: + packages: + - libusb-dev + - doxygen + - cmake + script: + - autoreconf -vfi && mkdir build && cd build && ../configure --prefix=$HOME/.local/ && make -j2 && make install -addons: - apt: - packages: - - libusb-dev - - doxygen - - cmake + - os: linux + dist: bionic + compiler: + - gcc + addons: + apt: + packages: + - libusb-dev + - doxygen + - cmake + script: + - mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=~/.local .. && make -j2 && make install -script: - - if [ $BLD == autoconf ]; then autoreconf -vfi && mkdir build && cd build && ../configure --prefix=$HOME/.local/ && make -j2 && make install; fi - - if [ $BLD == cmake ]; then mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=~/.local .. && make -j2 && make install; fi + - os: linux + dist: bionic + compiler: + - gcc + addons: + apt: + packages: + - libusb-dev + - doxygen + - cmake + script: + - autoreconf -vfi && mkdir build && cd build && ../configure --prefix=$HOME/.local/ && make -j2 && make install + + - os: osx + osx_image: xcode12 + compiler: + - clang + before_install: + - brew update + - brew install autoconf automake cmake doxygen gettext libusb libusb-compat m4 pcre2 pkg-config + script: + - mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=~/.local .. && make -j2 && make install + + - os: osx + osx_image: xcode12 + compiler: + - clang + before_install: + - brew update + - brew install autoconf automake doxygen gettext libusb libusb-compat m4 pcre2 pkg-config + script: + - autoreconf -vfi && mkdir build && cd build && ../configure --prefix=$HOME/.local/ && make -j2 && make install diff --git a/CMakeLists.txt b/CMakeLists.txt index 48db870..908d649 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,9 +18,12 @@ SET(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") # config.h IF(WIN32) + SET(LIBNFC_SYSCONFDIR "./config" CACHE PATH "libnfc configuration directory") CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/config_windows.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) - SET(LIBNFC_SYSCONFDIR "${CMAKE_INSTALL_PREFIX}/config" CACHE PATH "libnfc configuration directory") INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/contrib/win32) + IF(NOT MINGW) + SET(CMAKE_C_FLAGS "-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE ${CMAKE_C_FLAGS}") + ENDIF(NOT MINGW) ELSE(WIN32) SET(_XOPEN_SOURCE 600) SET(SYSCONFDIR "/etc" CACHE PATH "System configuration directory") @@ -138,9 +141,12 @@ IF(NOT WIN32) IF(LIBNFC_DRIVER_PN53X_USB) SET(PKG_REQ ${PKG_REQ} "libusb") ENDIF(LIBNFC_DRIVER_PN53X_USB) + IF(LIBNFC_DRIVER_ACR122_USB) + SET(PKG_REQ ${PKG_REQ} "libusb") + ENDIF(LIBNFC_DRIVER_ACR122_USB) IF(LIBNFC_DRIVER_PCSC) SET(PKG_REQ ${PKG_REQ} "libpcsclite") - ENDIF(LIBNFC_DRIVER_ACR122) + ENDIF(LIBNFC_DRIVER_PCSC) IF(LIBNFC_DRIVER_ACR122_PCSC) SET(PKG_REQ ${PKG_REQ} "libpcsclite") ENDIF(LIBNFC_DRIVER_ACR122_PCSC) @@ -201,7 +207,7 @@ IF(WIN32) SET(RC_COMMENT "${PACKAGE_NAME} library") SET(RC_INTERNAL_NAME "${PACKAGE_NAME} ${WIN32_MODE}") SET(RC_ORIGINAL_NAME ${PACKAGE_NAME}.dll) - SET(RC_FILE_TYPE VFT_DLL) + SET(RC_FILE_TYPE 0x00000002L) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/contrib/win32/version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/windows/libnfc.rc @ONLY) ENDIF(WIN32) diff --git a/cmake/modules/FindLIBUSB.cmake b/cmake/modules/FindLIBUSB.cmake index 14b5f98..4afd8af 100644 --- a/cmake/modules/FindLIBUSB.cmake +++ b/cmake/modules/FindLIBUSB.cmake @@ -26,9 +26,15 @@ ENDIF(CMAKE_SYSTEM_NAME MATCHES FreeBSD) IF(NOT LIBUSB_FOUND) IF(WIN32) - FIND_PATH(LIBUSB_INCLUDE_DIRS lusb0_usb.h "$ENV{ProgramFiles}/LibUSB-Win32/include" NO_SYSTEM_ENVIRONMENT_PATH) - FIND_LIBRARY(LIBUSB_LIBRARIES NAMES libusb PATHS "$ENV{ProgramFiles}/LibUSB-Win32/lib/gcc") - SET(LIBUSB_LIBRARY_DIR "$ENV{ProgramFiles}/LibUSB-Win32/bin/x86/") + IF(MINGW) + FIND_PATH(LIBUSB_INCLUDE_DIRS lusb0_usb.h "${CMAKE_CURRENT_BINARY_DIR}/LibUSB-Win32/include" NO_SYSTEM_ENVIRONMENT_PATH) + FIND_LIBRARY(LIBUSB_LIBRARIES NAMES libusb PATHS "${CMAKE_CURRENT_BINARY_DIR}/LibUSB-Win32/lib/gcc") + SET(LIBUSB_LIBRARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/LibUSB-Win32/bin/x86/") + ELSE(MINGW) + FIND_PATH(LIBUSB_INCLUDE_DIRS lusb0_usb.h "$ENV{ProgramW6432}/libusb-win32/include" NO_SYSTEM_ENVIRONMENT_PATH) + FIND_LIBRARY(LIBUSB_LIBRARIES NAMES libusb PATHS "$ENV{ProgramW6432}/libusb-win32/lib/msvc_x64") + SET(LIBUSB_LIBRARY_DIR "$ENV{ProgramW6432}/libusb-win32/bin/amd64/") + ENDIF(MINGW) # Must fix up variable to avoid backslashes during packaging STRING(REGEX REPLACE "\\\\" "/" LIBUSB_LIBRARY_DIR ${LIBUSB_LIBRARY_DIR}) ELSE(WIN32) diff --git a/cmake/modules/LibnfcDrivers.cmake b/cmake/modules/LibnfcDrivers.cmake index e3806d4..23c322a 100644 --- a/cmake/modules/LibnfcDrivers.cmake +++ b/cmake/modules/LibnfcDrivers.cmake @@ -3,13 +3,13 @@ SET(LIBNFC_DRIVER_ACR122_PCSC OFF CACHE BOOL "Enable ACR122 support (Depends on SET(LIBNFC_DRIVER_ACR122_USB ON CACHE BOOL "Enable ACR122 support (Direct USB connection)") SET(LIBNFC_DRIVER_ACR122S ON CACHE BOOL "Enable ACR122S support (Use serial port)") SET(LIBNFC_DRIVER_ARYGON ON CACHE BOOL "Enable ARYGON support (Use serial port)") -IF(WIN32) +IF(NOT UNIX OR APPLE) SET(LIBNFC_DRIVER_PN532_I2C OFF CACHE BOOL "Enable PN532 I2C support (Use I2C bus)") SET(LIBNFC_DRIVER_PN532_SPI OFF CACHE BOOL "Enable PN532 SPI support (Use SPI bus)") -ELSE(WIN32) +ELSE(NOT UNIX OR APPLE) SET(LIBNFC_DRIVER_PN532_I2C ON CACHE BOOL "Enable PN532 I2C support (Use I2C bus)") SET(LIBNFC_DRIVER_PN532_SPI ON CACHE BOOL "Enable PN532 SPI support (Use SPI bus)") -ENDIF(WIN32) +ENDIF(NOT UNIX OR APPLE) SET(LIBNFC_DRIVER_PN532_UART ON CACHE BOOL "Enable PN532 UART support (Use serial port)") SET(LIBNFC_DRIVER_PN53X_USB ON CACHE BOOL "Enable PN531 and PN531 USB support (Depends on libusb)") @@ -68,4 +68,11 @@ IF(LIBNFC_DRIVER_PN53X_USB) SET(USB_REQUIRED TRUE) ENDIF(LIBNFC_DRIVER_PN53X_USB) +IF(LIBNFC_DRIVER_ACR122_USB) + FIND_PACKAGE(LIBUSB REQUIRED) + ADD_DEFINITIONS("-DDRIVER_ACR122_USB_ENABLED") + SET(DRIVERS_SOURCES ${DRIVERS_SOURCES} "drivers/acr122_usb") + SET(USB_REQUIRED TRUE) +ENDIF(LIBNFC_DRIVER_ACR122_USB) + INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/libnfc/drivers) diff --git a/contrib/win32/dirent.h b/contrib/win32/dirent.h index 13aac95..9cd7556 100644 --- a/contrib/win32/dirent.h +++ b/contrib/win32/dirent.h @@ -283,28 +283,13 @@ static DIR *opendir (const char *dirname); static _WDIR *_wopendir (const wchar_t *dirname); static struct dirent *readdir (DIR *dirp); -static struct _wdirent *_wreaddir (_WDIR *dirp); static int readdir_r( DIR *dirp, struct dirent *entry, struct dirent **result); -static int _wreaddir_r( - _WDIR *dirp, struct _wdirent *entry, struct _wdirent **result); static int closedir (DIR *dirp); static int _wclosedir (_WDIR *dirp); -static void rewinddir (DIR* dirp); -static void _wrewinddir (_WDIR* dirp); - -static int scandir (const char *dirname, struct dirent ***namelist, - int (*filter)(const struct dirent*), - int (*compare)(const void *, const void *)); - -static int alphasort (const struct dirent **a, const struct dirent **b); - -static int versionsort (const struct dirent **a, const struct dirent **b); - - /* For compatibility with Symbian */ #define wdirent _wdirent #define WDIR _WDIR @@ -448,91 +433,6 @@ _wopendir( return dirp; } -/* - * Read next directory entry. - * - * Returns pointer to static directory entry which may be overwritten by - * subsequent calls to _wreaddir(). - */ -static struct _wdirent* -_wreaddir( - _WDIR *dirp) -{ - struct _wdirent *entry; - - /* - * Read directory entry to buffer. We can safely ignore the return value - * as entry will be set to NULL in case of error. - */ - (void) _wreaddir_r (dirp, &dirp->ent, &entry); - - /* Return pointer to statically allocated directory entry */ - return entry; -} - -/* - * Read next directory entry. - * - * Returns zero on success. If end of directory stream is reached, then sets - * result to NULL and returns zero. - */ -static int -_wreaddir_r( - _WDIR *dirp, - struct _wdirent *entry, - struct _wdirent **result) -{ - WIN32_FIND_DATAW *datap; - - /* Read next directory entry */ - datap = dirent_next (dirp); - if (datap) { - size_t n; - DWORD attr; - - /* - * Copy file name as wide-character string. If the file name is too - * long to fit in to the destination buffer, then truncate file name - * to PATH_MAX characters and zero-terminate the buffer. - */ - n = 0; - while (n < PATH_MAX && datap->cFileName[n] != 0) { - entry->d_name[n] = datap->cFileName[n]; - n++; - } - entry->d_name[n] = 0; - - /* Length of file name excluding zero terminator */ - entry->d_namlen = n; - - /* File type */ - attr = datap->dwFileAttributes; - if ((attr & FILE_ATTRIBUTE_DEVICE) != 0) { - entry->d_type = DT_CHR; - } else if ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) { - entry->d_type = DT_DIR; - } else { - entry->d_type = DT_REG; - } - - /* Reset dummy fields */ - entry->d_ino = 0; - entry->d_off = 0; - entry->d_reclen = sizeof (struct _wdirent); - - /* Set result address */ - *result = entry; - - } else { - - /* Return NULL to indicate end of directory */ - *result = NULL; - - } - - return /*OK*/0; -} - /* * Close directory stream opened by opendir() function. This invalidates the * DIR structure as well as any directory entry read previously by @@ -571,25 +471,6 @@ _wclosedir( return ok; } -/* - * Rewind directory stream such that _wreaddir() returns the very first - * file name again. - */ -static void -_wrewinddir( - _WDIR* dirp) -{ - if (dirp) { - /* Release existing search handle */ - if (dirp->handle != INVALID_HANDLE_VALUE) { - FindClose (dirp->handle); - } - - /* Open new search handle */ - dirent_first (dirp); - } -} - /* Get first directory entry (internal) */ static WIN32_FIND_DATAW* dirent_first( @@ -857,175 +738,6 @@ closedir( return ok; } -/* - * Rewind directory stream to beginning. - */ -static void -rewinddir( - DIR* dirp) -{ - /* Rewind wide-character string directory stream */ - _wrewinddir (dirp->wdirp); -} - -/* - * Scan directory for entries. - */ -static int -scandir( - const char *dirname, - struct dirent ***namelist, - int (*filter)(const struct dirent*), - int (*compare)(const void*, const void*)) -{ - struct dirent **files = NULL; - size_t size = 0; - size_t allocated = 0; - const size_t init_size = 1; - DIR *dir = NULL; - struct dirent *entry; - struct dirent *tmp = NULL; - size_t i; - int result = 0; - - /* Open directory stream */ - dir = opendir (dirname); - if (dir) { - - /* Read directory entries to memory */ - while (1) { - - /* Enlarge pointer table to make room for another pointer */ - if (size >= allocated) { - void *p; - size_t num_entries; - - /* Compute number of entries in the enlarged pointer table */ - if (size < init_size) { - /* Allocate initial pointer table */ - num_entries = init_size; - } else { - /* Double the size */ - num_entries = size * 2; - } - - /* Allocate first pointer table or enlarge existing table */ - p = realloc (files, sizeof (void*) * num_entries); - if (p != NULL) { - /* Got the memory */ - files = (dirent**) p; - allocated = num_entries; - } else { - /* Out of memory */ - result = -1; - break; - } - - } - - /* Allocate room for temporary directory entry */ - if (tmp == NULL) { - tmp = (struct dirent*) malloc (sizeof (struct dirent)); - if (tmp == NULL) { - /* Cannot allocate temporary directory entry */ - result = -1; - break; - } - } - - /* Read directory entry to temporary area */ - if (readdir_r (dir, tmp, &entry) == /*OK*/0) { - - /* Did we get an entry? */ - if (entry != NULL) { - int pass; - - /* Determine whether to include the entry in result */ - if (filter) { - /* Let the filter function decide */ - pass = filter (tmp); - } else { - /* No filter function, include everything */ - pass = 1; - } - - if (pass) { - /* Store the temporary entry to pointer table */ - files[size++] = tmp; - tmp = NULL; - - /* Keep up with the number of files */ - result++; - } - - } else { - - /* - * End of directory stream reached => sort entries and - * exit. - */ - qsort (files, size, sizeof (void*), compare); - break; - - } - - } else { - /* Error reading directory entry */ - result = /*Error*/ -1; - break; - } - - } - - } else { - /* Cannot open directory */ - result = /*Error*/ -1; - } - - /* Release temporary directory entry */ - if (tmp) { - free (tmp); - } - - /* Release allocated memory on error */ - if (result < 0) { - for (i = 0; i < size; i++) { - free (files[i]); - } - free (files); - files = NULL; - } - - /* Close directory stream */ - if (dir) { - closedir (dir); - } - - /* Pass pointer table to caller */ - if (namelist) { - *namelist = files; - } - return result; -} - -/* Alphabetical sorting */ -static int -alphasort( - const struct dirent **a, const struct dirent **b) -{ - return strcoll ((*a)->d_name, (*b)->d_name); -} - -/* Sort versions */ -static int -versionsort( - const struct dirent **a, const struct dirent **b) -{ - /* FIXME: implement strverscmp and use that */ - return alphasort (a, b); -} - - /* Convert multi-byte string to wide character string */ static int dirent_mbstowcs_s( diff --git a/contrib/win32/version.rc.in b/contrib/win32/version.rc.in index 473d579..30f7b83 100644 --- a/contrib/win32/version.rc.in +++ b/contrib/win32/version.rc.in @@ -1,15 +1,9 @@ -#include "windows.h" - 1 VERSIONINFO FILEVERSION @VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_PATCH@,0 PRODUCTVERSION @VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_PATCH@,0 FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG|VS_FF_PRERELEASE -#else - FILEFLAGS 0L -#endif - FILEOS VOS_NT_WINDOWS32 + FILEFLAGS 0x0L + FILEOS 0x00040004L FILETYPE @RC_FILE_TYPE@ FILESUBTYPE 0x0L BEGIN diff --git a/contrib/windows.h b/contrib/windows.h index e443d09..3928d6e 100644 --- a/contrib/windows.h +++ b/contrib/windows.h @@ -48,7 +48,7 @@ # define ENOTSUP WSAEOPNOTSUPP # define ECONNABORTED WSAECONNABORTED # else -#if !defined(_MSC_VER) || (_MSC_VER < 1910) // VS2017 don't like snprintf macro +#ifndef _MSC_VER # define snprintf sprintf_s #endif # define strdup _strdup diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 35a852b..1713a0c 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -23,7 +23,7 @@ FOREACH(source ${EXAMPLES-SOURCES}) SET(RC_COMMENT "${PACKAGE_NAME} example") SET(RC_INTERNAL_NAME ${source}) SET(RC_ORIGINAL_NAME ${source}.exe) - SET(RC_FILE_TYPE VFT_APP) + SET(RC_FILE_TYPE 0x00000001L) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/../contrib/win32/version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/../windows/${source}.rc @ONLY) LIST(APPEND TARGETS ${CMAKE_CURRENT_BINARY_DIR}/../windows/${source}.rc) ENDIF(WIN32) diff --git a/libnfc/CMakeLists.txt b/libnfc/CMakeLists.txt index 856c46e..3a58a05 100644 --- a/libnfc/CMakeLists.txt +++ b/libnfc/CMakeLists.txt @@ -29,23 +29,23 @@ IF(UART_REQUIRED) ENDIF(UART_REQUIRED) IF(I2C_REQUIRED) - IF(WIN32) - # Windows is not supported at the moment + IF(NOT UNIX OR APPLE) + # Only Linux is supported at the moment #LIST(APPEND BUSES_SOURCES ../contrib/win32/libnfc/buses/i2c) - MESSAGE( FATAL_ERROR "I2C not (yet) supported under Windows!" ) - ELSE(WIN32) + MESSAGE( FATAL_ERROR "I2C is only (yet) supported in Linux!" ) + ELSE(NOT UNIX OR APPLE) LIST(APPEND BUSES_SOURCES buses/i2c) - ENDIF(WIN32) + ENDIF(NOT UNIX OR APPLE) ENDIF(I2C_REQUIRED) IF(SPI_REQUIRED) - IF(WIN32) - # Windows is not supported at the moment + IF(NOT UNIX OR APPLE) + # Only Linux is supported at the moment #LIST(APPEND BUSES_SOURCES ../contrib/win32/libnfc/buses/spi) - MESSAGE( FATAL_ERROR "SPI not (yet) supported under Windows!" ) - ELSE(WIN32) + MESSAGE( FATAL_ERROR "SPI is only (yet) supported in Linux!" ) + ELSE(NOT UNIX OR APPLE) LIST(APPEND BUSES_SOURCES buses/spi) - ENDIF(WIN32) + ENDIF(NOT UNIX OR APPLE) ENDIF(SPI_REQUIRED) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/buses) @@ -66,7 +66,9 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) IF(LIBNFC_LOG) IF(WIN32) - SET(CMAKE_C_FLAGS "-fgnu89-inline ${CMAKE_C_FLAGS}") + IF(MINGW) + SET(CMAKE_C_FLAGS "-fgnu89-inline ${CMAKE_C_FLAGS}") + ENDIF(MINGW) LIST(APPEND LIBRARY_SOURCES log ../contrib/win32/libnfc/log-internal) ELSE(WIN32) LIST(APPEND LIBRARY_SOURCES log log-internal) diff --git a/libnfc/chips/pn53x.c b/libnfc/chips/pn53x.c index abf6682..d2b9396 100644 --- a/libnfc/chips/pn53x.c +++ b/libnfc/chips/pn53x.c @@ -1208,7 +1208,7 @@ pn53x_initiator_select_passive_target_ext(struct nfc_device *pnd, // send ICLASS_ACTIVATE_ALL command - will get timeout as we don't expect response uint8_t abtReqt[] = { 0x0a }; // iClass ACTIVATE_ALL uint8_t abtAnticol[11]; - if ((res = pn53x_initiator_transceive_bytes(pnd, abtReqt, sizeof(abtReqt), NULL, 0, timeout)) < 0) { + if (pn53x_initiator_transceive_bytes(pnd, abtReqt, sizeof(abtReqt), NULL, 0, timeout) < 0) { log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_DEBUG, "got expected timeout on iClass activate all"); //if ((res == NFC_ERFTRANS) && (CHIP_DATA(pnd)->last_status_byte == 0x01)) { // Chip timeout // continue; @@ -2064,7 +2064,7 @@ static int pn53x_ISO14443A_Barcode_is_present(struct nfc_device *pnd) } uint8_t abtRx[PN53x_EXTENDED_FRAME__DATA_MAX_LEN]; uint8_t abtRxPar[PN53x_EXTENDED_FRAME__DATA_MAX_LEN]; - if ((ret = nfc_initiator_transceive_bits(pnd, NULL, 0, NULL, abtRx, sizeof(abtRx), abtRxPar)) < 1) { + if (nfc_initiator_transceive_bits(pnd, NULL, 0, NULL, abtRx, sizeof(abtRx), abtRxPar) < 1) { failures++; } else { nfc_device_set_property_bool(pnd, NP_HANDLE_CRC, true); diff --git a/libnfc/conf.c b/libnfc/conf.c index 85a49cf..785c310 100644 --- a/libnfc/conf.c +++ b/libnfc/conf.c @@ -195,6 +195,8 @@ conf_parse_file(const char *filename, free(key); free(value); } else { + free(key); + free(value); log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_DEBUG, "Parse error on line #%d: %s", lineno, line); } } diff --git a/libnfc/drivers/acr122_usb.c b/libnfc/drivers/acr122_usb.c index b42af0e..17ae5fb 100644 --- a/libnfc/drivers/acr122_usb.c +++ b/libnfc/drivers/acr122_usb.c @@ -60,7 +60,9 @@ Thanks to d18c7db and Okko for example code #include #include #include - +#ifdef _MSC_VER +#include +#endif #include #include "nfc-internal.h" diff --git a/libnfc/drivers/pn53x_usb.c b/libnfc/drivers/pn53x_usb.c index d179666..5277878 100644 --- a/libnfc/drivers/pn53x_usb.c +++ b/libnfc/drivers/pn53x_usb.c @@ -43,7 +43,9 @@ Thanks to d18c7db and Okko for example code #include #include #include - +#ifdef _MSC_VER +#include +#endif #include #include "nfc-internal.h" @@ -817,7 +819,7 @@ pn53x_usb_set_property_bool(nfc_device *pnd, const nfc_property property, const if (NP_ACTIVATE_FIELD == property) { /* Switch on/off LED2 and Progressive Field GPIO according to ACTIVATE_FIELD option */ log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_DEBUG, "Switch progressive field %s", bEnable ? "On" : "Off"); - if ((res = pn53x_write_register(pnd, PN53X_SFR_P3, _BV(P31) | _BV(P34), bEnable ? _BV(P34) : _BV(P31))) < 0) + if (pn53x_write_register(pnd, PN53X_SFR_P3, _BV(P31) | _BV(P34), bEnable ? _BV(P34) : _BV(P31)) < 0) return NFC_ECHIP; } break; diff --git a/libnfc/nfc.c b/libnfc/nfc.c index 0f9e287..6f58a71 100644 --- a/libnfc/nfc.c +++ b/libnfc/nfc.c @@ -565,23 +565,27 @@ nfc_initiator_select_passive_target(nfc_device *pnd, nfc_target *pnt) { uint8_t *abtInit = NULL; - uint8_t *abtTmpInit = malloc(MAX(12, szInitData)); + uint8_t maxAbt = MAX(12, szInitData); + uint8_t *abtTmpInit = malloc(sizeof(uint8_t) * maxAbt); size_t szInit = 0; int res; - if ((res = nfc_device_validate_modulation(pnd, N_INITIATOR, &nm)) != NFC_SUCCESS) + if ((res = nfc_device_validate_modulation(pnd, N_INITIATOR, &nm)) != NFC_SUCCESS) { + free(abtTmpInit); return res; + } if (szInitData == 0) { // Provide default values, if any prepare_initiator_data(nm, &abtInit, &szInit); + free(abtTmpInit); } else if (nm.nmt == NMT_ISO14443A) { abtInit = abtTmpInit; iso14443_cascade_uid(pbtInitData, szInitData, abtInit, &szInit); } else { abtInit = abtTmpInit; memcpy(abtInit, pbtInitData, szInitData); + free(abtTmpInit); szInit = szInitData; } - HAL(initiator_select_passive_target, pnd, nm, abtInit, szInit, pnt); free(abtTmpInit); diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt index fbb1720..c385552 100644 --- a/utils/CMakeLists.txt +++ b/utils/CMakeLists.txt @@ -23,7 +23,7 @@ FOREACH(source ${UTILS-SOURCES}) SET(RC_COMMENT "${PACKAGE_NAME} utility") SET(RC_INTERNAL_NAME ${source}) SET(RC_ORIGINAL_NAME ${source}.exe) - SET(RC_FILE_TYPE VFT_APP) + SET(RC_FILE_TYPE 0x00000001L) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/../contrib/win32/version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/../windows/${source}.rc @ONLY) LIST(APPEND TARGETS ${CMAKE_CURRENT_BINARY_DIR}/../windows/${source}.rc) ENDIF(WIN32)