some cleanings
This commit is contained in:
parent
e21fab3685
commit
7ad18a2120
16 changed files with 135 additions and 342 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -60,3 +60,7 @@ utils/nfc-mfultralight
|
||||||
utils/nfc-read-forum-tag3
|
utils/nfc-read-forum-tag3
|
||||||
utils/nfc-relay-picc
|
utils/nfc-relay-picc
|
||||||
utils/nfc-scan-device
|
utils/nfc-scan-device
|
||||||
|
|
||||||
|
.vs/
|
||||||
|
|
||||||
|
CMakeSettings.json
|
||||||
|
|
72
.travis.yml
72
.travis.yml
|
@ -1,20 +1,72 @@
|
||||||
language: c
|
language: c
|
||||||
|
|
||||||
compiler:
|
matrix:
|
||||||
|
include:
|
||||||
|
- os: windows
|
||||||
|
compiler:
|
||||||
- clang
|
- clang
|
||||||
- gcc
|
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:
|
- os: linux
|
||||||
- BLD=cmake
|
dist: bionic
|
||||||
- BLD=autoconf
|
compiler:
|
||||||
|
- clang
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- libusb-dev
|
- libusb-dev
|
||||||
- doxygen
|
- doxygen
|
||||||
- cmake
|
- cmake
|
||||||
|
script:
|
||||||
|
- autoreconf -vfi && mkdir build && cd build && ../configure --prefix=$HOME/.local/ && make -j2 && make install
|
||||||
|
|
||||||
script:
|
- os: linux
|
||||||
- if [ $BLD == autoconf ]; then autoreconf -vfi && mkdir build && cd build && ../configure --prefix=$HOME/.local/ && make -j2 && make install; fi
|
dist: bionic
|
||||||
- if [ $BLD == cmake ]; then mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=~/.local .. && make -j2 && make install; fi
|
compiler:
|
||||||
|
- gcc
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- libusb-dev
|
||||||
|
- doxygen
|
||||||
|
- cmake
|
||||||
|
script:
|
||||||
|
- mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=~/.local .. && make -j2 && make install
|
||||||
|
|
||||||
|
- 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
|
||||||
|
|
|
@ -18,9 +18,12 @@ SET(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
|
||||||
|
|
||||||
# config.h
|
# config.h
|
||||||
IF(WIN32)
|
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)
|
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)
|
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)
|
ELSE(WIN32)
|
||||||
SET(_XOPEN_SOURCE 600)
|
SET(_XOPEN_SOURCE 600)
|
||||||
SET(SYSCONFDIR "/etc" CACHE PATH "System configuration directory")
|
SET(SYSCONFDIR "/etc" CACHE PATH "System configuration directory")
|
||||||
|
@ -138,9 +141,12 @@ IF(NOT WIN32)
|
||||||
IF(LIBNFC_DRIVER_PN53X_USB)
|
IF(LIBNFC_DRIVER_PN53X_USB)
|
||||||
SET(PKG_REQ ${PKG_REQ} "libusb")
|
SET(PKG_REQ ${PKG_REQ} "libusb")
|
||||||
ENDIF(LIBNFC_DRIVER_PN53X_USB)
|
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)
|
IF(LIBNFC_DRIVER_PCSC)
|
||||||
SET(PKG_REQ ${PKG_REQ} "libpcsclite")
|
SET(PKG_REQ ${PKG_REQ} "libpcsclite")
|
||||||
ENDIF(LIBNFC_DRIVER_ACR122)
|
ENDIF(LIBNFC_DRIVER_PCSC)
|
||||||
IF(LIBNFC_DRIVER_ACR122_PCSC)
|
IF(LIBNFC_DRIVER_ACR122_PCSC)
|
||||||
SET(PKG_REQ ${PKG_REQ} "libpcsclite")
|
SET(PKG_REQ ${PKG_REQ} "libpcsclite")
|
||||||
ENDIF(LIBNFC_DRIVER_ACR122_PCSC)
|
ENDIF(LIBNFC_DRIVER_ACR122_PCSC)
|
||||||
|
@ -201,7 +207,7 @@ IF(WIN32)
|
||||||
SET(RC_COMMENT "${PACKAGE_NAME} library")
|
SET(RC_COMMENT "${PACKAGE_NAME} library")
|
||||||
SET(RC_INTERNAL_NAME "${PACKAGE_NAME} ${WIN32_MODE}")
|
SET(RC_INTERNAL_NAME "${PACKAGE_NAME} ${WIN32_MODE}")
|
||||||
SET(RC_ORIGINAL_NAME ${PACKAGE_NAME}.dll)
|
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)
|
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/contrib/win32/version.rc.in ${CMAKE_CURRENT_BINARY_DIR}/windows/libnfc.rc @ONLY)
|
||||||
ENDIF(WIN32)
|
ENDIF(WIN32)
|
||||||
|
|
||||||
|
|
|
@ -26,9 +26,15 @@ ENDIF(CMAKE_SYSTEM_NAME MATCHES FreeBSD)
|
||||||
|
|
||||||
IF(NOT LIBUSB_FOUND)
|
IF(NOT LIBUSB_FOUND)
|
||||||
IF(WIN32)
|
IF(WIN32)
|
||||||
FIND_PATH(LIBUSB_INCLUDE_DIRS lusb0_usb.h "$ENV{ProgramFiles}/LibUSB-Win32/include" NO_SYSTEM_ENVIRONMENT_PATH)
|
IF(MINGW)
|
||||||
FIND_LIBRARY(LIBUSB_LIBRARIES NAMES libusb PATHS "$ENV{ProgramFiles}/LibUSB-Win32/lib/gcc")
|
FIND_PATH(LIBUSB_INCLUDE_DIRS lusb0_usb.h "${CMAKE_CURRENT_BINARY_DIR}/LibUSB-Win32/include" NO_SYSTEM_ENVIRONMENT_PATH)
|
||||||
SET(LIBUSB_LIBRARY_DIR "$ENV{ProgramFiles}/LibUSB-Win32/bin/x86/")
|
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
|
# Must fix up variable to avoid backslashes during packaging
|
||||||
STRING(REGEX REPLACE "\\\\" "/" LIBUSB_LIBRARY_DIR ${LIBUSB_LIBRARY_DIR})
|
STRING(REGEX REPLACE "\\\\" "/" LIBUSB_LIBRARY_DIR ${LIBUSB_LIBRARY_DIR})
|
||||||
ELSE(WIN32)
|
ELSE(WIN32)
|
||||||
|
|
|
@ -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_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_ACR122S ON CACHE BOOL "Enable ACR122S support (Use serial port)")
|
||||||
SET(LIBNFC_DRIVER_ARYGON ON CACHE BOOL "Enable ARYGON 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_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)")
|
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_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)")
|
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_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)")
|
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)
|
SET(USB_REQUIRED TRUE)
|
||||||
ENDIF(LIBNFC_DRIVER_PN53X_USB)
|
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)
|
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/libnfc/drivers)
|
||||||
|
|
|
@ -283,28 +283,13 @@ static DIR *opendir (const char *dirname);
|
||||||
static _WDIR *_wopendir (const wchar_t *dirname);
|
static _WDIR *_wopendir (const wchar_t *dirname);
|
||||||
|
|
||||||
static struct dirent *readdir (DIR *dirp);
|
static struct dirent *readdir (DIR *dirp);
|
||||||
static struct _wdirent *_wreaddir (_WDIR *dirp);
|
|
||||||
|
|
||||||
static int readdir_r(
|
static int readdir_r(
|
||||||
DIR *dirp, struct dirent *entry, struct dirent **result);
|
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 closedir (DIR *dirp);
|
||||||
static int _wclosedir (_WDIR *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 */
|
/* For compatibility with Symbian */
|
||||||
#define wdirent _wdirent
|
#define wdirent _wdirent
|
||||||
#define WDIR _WDIR
|
#define WDIR _WDIR
|
||||||
|
@ -448,91 +433,6 @@ _wopendir(
|
||||||
return dirp;
|
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
|
* Close directory stream opened by opendir() function. This invalidates the
|
||||||
* DIR structure as well as any directory entry read previously by
|
* DIR structure as well as any directory entry read previously by
|
||||||
|
@ -571,25 +471,6 @@ _wclosedir(
|
||||||
return ok;
|
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) */
|
/* Get first directory entry (internal) */
|
||||||
static WIN32_FIND_DATAW*
|
static WIN32_FIND_DATAW*
|
||||||
dirent_first(
|
dirent_first(
|
||||||
|
@ -857,175 +738,6 @@ closedir(
|
||||||
return ok;
|
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 */
|
/* Convert multi-byte string to wide character string */
|
||||||
static int
|
static int
|
||||||
dirent_mbstowcs_s(
|
dirent_mbstowcs_s(
|
||||||
|
|
|
@ -1,15 +1,9 @@
|
||||||
#include "windows.h"
|
|
||||||
|
|
||||||
1 VERSIONINFO
|
1 VERSIONINFO
|
||||||
FILEVERSION @VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_PATCH@,0
|
FILEVERSION @VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_PATCH@,0
|
||||||
PRODUCTVERSION @VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_PATCH@,0
|
PRODUCTVERSION @VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_PATCH@,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
FILEFLAGS 0x0L
|
||||||
FILEFLAGS VS_FF_DEBUG|VS_FF_PRERELEASE
|
FILEOS 0x00040004L
|
||||||
#else
|
|
||||||
FILEFLAGS 0L
|
|
||||||
#endif
|
|
||||||
FILEOS VOS_NT_WINDOWS32
|
|
||||||
FILETYPE @RC_FILE_TYPE@
|
FILETYPE @RC_FILE_TYPE@
|
||||||
FILESUBTYPE 0x0L
|
FILESUBTYPE 0x0L
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
# define ENOTSUP WSAEOPNOTSUPP
|
# define ENOTSUP WSAEOPNOTSUPP
|
||||||
# define ECONNABORTED WSAECONNABORTED
|
# define ECONNABORTED WSAECONNABORTED
|
||||||
# else
|
# else
|
||||||
#if !defined(_MSC_VER) || (_MSC_VER < 1910) // VS2017 don't like snprintf macro
|
#ifndef _MSC_VER
|
||||||
# define snprintf sprintf_s
|
# define snprintf sprintf_s
|
||||||
#endif
|
#endif
|
||||||
# define strdup _strdup
|
# define strdup _strdup
|
||||||
|
|
|
@ -23,7 +23,7 @@ FOREACH(source ${EXAMPLES-SOURCES})
|
||||||
SET(RC_COMMENT "${PACKAGE_NAME} example")
|
SET(RC_COMMENT "${PACKAGE_NAME} example")
|
||||||
SET(RC_INTERNAL_NAME ${source})
|
SET(RC_INTERNAL_NAME ${source})
|
||||||
SET(RC_ORIGINAL_NAME ${source}.exe)
|
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)
|
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)
|
LIST(APPEND TARGETS ${CMAKE_CURRENT_BINARY_DIR}/../windows/${source}.rc)
|
||||||
ENDIF(WIN32)
|
ENDIF(WIN32)
|
||||||
|
|
|
@ -29,23 +29,23 @@ IF(UART_REQUIRED)
|
||||||
ENDIF(UART_REQUIRED)
|
ENDIF(UART_REQUIRED)
|
||||||
|
|
||||||
IF(I2C_REQUIRED)
|
IF(I2C_REQUIRED)
|
||||||
IF(WIN32)
|
IF(NOT UNIX OR APPLE)
|
||||||
# Windows is not supported at the moment
|
# Only Linux is supported at the moment
|
||||||
#LIST(APPEND BUSES_SOURCES ../contrib/win32/libnfc/buses/i2c)
|
#LIST(APPEND BUSES_SOURCES ../contrib/win32/libnfc/buses/i2c)
|
||||||
MESSAGE( FATAL_ERROR "I2C not (yet) supported under Windows!" )
|
MESSAGE( FATAL_ERROR "I2C is only (yet) supported in Linux!" )
|
||||||
ELSE(WIN32)
|
ELSE(NOT UNIX OR APPLE)
|
||||||
LIST(APPEND BUSES_SOURCES buses/i2c)
|
LIST(APPEND BUSES_SOURCES buses/i2c)
|
||||||
ENDIF(WIN32)
|
ENDIF(NOT UNIX OR APPLE)
|
||||||
ENDIF(I2C_REQUIRED)
|
ENDIF(I2C_REQUIRED)
|
||||||
|
|
||||||
IF(SPI_REQUIRED)
|
IF(SPI_REQUIRED)
|
||||||
IF(WIN32)
|
IF(NOT UNIX OR APPLE)
|
||||||
# Windows is not supported at the moment
|
# Only Linux is supported at the moment
|
||||||
#LIST(APPEND BUSES_SOURCES ../contrib/win32/libnfc/buses/spi)
|
#LIST(APPEND BUSES_SOURCES ../contrib/win32/libnfc/buses/spi)
|
||||||
MESSAGE( FATAL_ERROR "SPI not (yet) supported under Windows!" )
|
MESSAGE( FATAL_ERROR "SPI is only (yet) supported in Linux!" )
|
||||||
ELSE(WIN32)
|
ELSE(NOT UNIX OR APPLE)
|
||||||
LIST(APPEND BUSES_SOURCES buses/spi)
|
LIST(APPEND BUSES_SOURCES buses/spi)
|
||||||
ENDIF(WIN32)
|
ENDIF(NOT UNIX OR APPLE)
|
||||||
ENDIF(SPI_REQUIRED)
|
ENDIF(SPI_REQUIRED)
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/buses)
|
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/buses)
|
||||||
|
@ -66,7 +66,9 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
IF(LIBNFC_LOG)
|
IF(LIBNFC_LOG)
|
||||||
IF(WIN32)
|
IF(WIN32)
|
||||||
|
IF(MINGW)
|
||||||
SET(CMAKE_C_FLAGS "-fgnu89-inline ${CMAKE_C_FLAGS}")
|
SET(CMAKE_C_FLAGS "-fgnu89-inline ${CMAKE_C_FLAGS}")
|
||||||
|
ENDIF(MINGW)
|
||||||
LIST(APPEND LIBRARY_SOURCES log ../contrib/win32/libnfc/log-internal)
|
LIST(APPEND LIBRARY_SOURCES log ../contrib/win32/libnfc/log-internal)
|
||||||
ELSE(WIN32)
|
ELSE(WIN32)
|
||||||
LIST(APPEND LIBRARY_SOURCES log log-internal)
|
LIST(APPEND LIBRARY_SOURCES log log-internal)
|
||||||
|
|
|
@ -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
|
// send ICLASS_ACTIVATE_ALL command - will get timeout as we don't expect response
|
||||||
uint8_t abtReqt[] = { 0x0a }; // iClass ACTIVATE_ALL
|
uint8_t abtReqt[] = { 0x0a }; // iClass ACTIVATE_ALL
|
||||||
uint8_t abtAnticol[11];
|
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");
|
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
|
//if ((res == NFC_ERFTRANS) && (CHIP_DATA(pnd)->last_status_byte == 0x01)) { // Chip timeout
|
||||||
// continue;
|
// 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 abtRx[PN53x_EXTENDED_FRAME__DATA_MAX_LEN];
|
||||||
uint8_t abtRxPar[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++;
|
failures++;
|
||||||
} else {
|
} else {
|
||||||
nfc_device_set_property_bool(pnd, NP_HANDLE_CRC, true);
|
nfc_device_set_property_bool(pnd, NP_HANDLE_CRC, true);
|
||||||
|
|
|
@ -195,6 +195,8 @@ conf_parse_file(const char *filename,
|
||||||
free(key);
|
free(key);
|
||||||
free(value);
|
free(value);
|
||||||
} else {
|
} else {
|
||||||
|
free(key);
|
||||||
|
free(value);
|
||||||
log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_DEBUG, "Parse error on line #%d: %s", lineno, line);
|
log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_DEBUG, "Parse error on line #%d: %s", lineno, line);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,9 @@ Thanks to d18c7db and Okko for example code
|
||||||
#include <sys/select.h>
|
#include <sys/select.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
#include <nfc/nfc.h>
|
#include <nfc/nfc.h>
|
||||||
|
|
||||||
#include "nfc-internal.h"
|
#include "nfc-internal.h"
|
||||||
|
|
|
@ -43,7 +43,9 @@ Thanks to d18c7db and Okko for example code
|
||||||
#include <sys/select.h>
|
#include <sys/select.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
#include <nfc/nfc.h>
|
#include <nfc/nfc.h>
|
||||||
|
|
||||||
#include "nfc-internal.h"
|
#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) {
|
if (NP_ACTIVATE_FIELD == property) {
|
||||||
/* Switch on/off LED2 and Progressive Field GPIO according to ACTIVATE_FIELD option */
|
/* 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");
|
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;
|
return NFC_ECHIP;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
10
libnfc/nfc.c
10
libnfc/nfc.c
|
@ -565,23 +565,27 @@ nfc_initiator_select_passive_target(nfc_device *pnd,
|
||||||
nfc_target *pnt)
|
nfc_target *pnt)
|
||||||
{
|
{
|
||||||
uint8_t *abtInit = NULL;
|
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;
|
size_t szInit = 0;
|
||||||
int res;
|
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;
|
return res;
|
||||||
|
}
|
||||||
if (szInitData == 0) {
|
if (szInitData == 0) {
|
||||||
// Provide default values, if any
|
// Provide default values, if any
|
||||||
prepare_initiator_data(nm, &abtInit, &szInit);
|
prepare_initiator_data(nm, &abtInit, &szInit);
|
||||||
|
free(abtTmpInit);
|
||||||
} else if (nm.nmt == NMT_ISO14443A) {
|
} else if (nm.nmt == NMT_ISO14443A) {
|
||||||
abtInit = abtTmpInit;
|
abtInit = abtTmpInit;
|
||||||
iso14443_cascade_uid(pbtInitData, szInitData, abtInit, &szInit);
|
iso14443_cascade_uid(pbtInitData, szInitData, abtInit, &szInit);
|
||||||
} else {
|
} else {
|
||||||
abtInit = abtTmpInit;
|
abtInit = abtTmpInit;
|
||||||
memcpy(abtInit, pbtInitData, szInitData);
|
memcpy(abtInit, pbtInitData, szInitData);
|
||||||
|
free(abtTmpInit);
|
||||||
szInit = szInitData;
|
szInit = szInitData;
|
||||||
}
|
}
|
||||||
|
|
||||||
HAL(initiator_select_passive_target, pnd, nm, abtInit, szInit, pnt);
|
HAL(initiator_select_passive_target, pnd, nm, abtInit, szInit, pnt);
|
||||||
|
|
||||||
free(abtTmpInit);
|
free(abtTmpInit);
|
||||||
|
|
|
@ -23,7 +23,7 @@ FOREACH(source ${UTILS-SOURCES})
|
||||||
SET(RC_COMMENT "${PACKAGE_NAME} utility")
|
SET(RC_COMMENT "${PACKAGE_NAME} utility")
|
||||||
SET(RC_INTERNAL_NAME ${source})
|
SET(RC_INTERNAL_NAME ${source})
|
||||||
SET(RC_ORIGINAL_NAME ${source}.exe)
|
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)
|
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)
|
LIST(APPEND TARGETS ${CMAKE_CURRENT_BINARY_DIR}/../windows/${source}.rc)
|
||||||
ENDIF(WIN32)
|
ENDIF(WIN32)
|
||||||
|
|
Loading…
Reference in a new issue