diff --git a/contrib/win32/nfc_win32.c b/contrib/win32/nfc_win32.c new file mode 100644 index 0000000..1ebb5b9 --- /dev/null +++ b/contrib/win32/nfc_win32.c @@ -0,0 +1,48 @@ +/*- + * Public platform independent Near Field Communication (NFC) library + * + * Copyright (C) 2013 Alex Lian + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see + * + */ + +/** + * @file nfc_win32.c + * @brief Windows System compatibility + */ + +// Handle platform specific includes +#include "contrib/windows.h" + +int setenv(const char *name, const char *value, int overwrite) +{ + int exists = GetEnvironmentVariableA(name, NULL, 0); + if ((exists && overwrite) || (!exists)) + { + if (!SetEnvironmentVariableA(name, value)) + { + // Set errno here correctly + return -1; + } + return 0; + } + // Exists and overwrite is 0. + return -1; +} + +void unsetenv(const char *name) +{ + SetEnvironmentVariableA(name, NULL); +} \ No newline at end of file diff --git a/contrib/windows.h b/contrib/windows.h index c0d213f..52d936b 100644 --- a/contrib/windows.h +++ b/contrib/windows.h @@ -45,4 +45,11 @@ # define strdup _strdup # endif +/* + * setenv and unsetenv are not Windows compliant nor implemented in MinGW. + * These declarations get rid of the "implicit declaration warning." + */ +int setenv(const char *name, const char *value, int overwrite); +void unsetenv(const char *name); + #endif diff --git a/libnfc/CMakeLists.txt b/libnfc/CMakeLists.txt index 9edac93..f26d8ba 100644 --- a/libnfc/CMakeLists.txt +++ b/libnfc/CMakeLists.txt @@ -1,3 +1,11 @@ +# Windows MinGW workarounds +IF(WIN32) + message("Adding in contrib win32 sources") + SET(WINDOWS_SOURCES ../contrib/win32/nfc_win32) + INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../contrib/win32) + message("Win32: " ${WINDOWS_SOURCES}) +ENDIF(WIN32) + # Library's chips SET(CHIPS_SOURCES chips/pn53x) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/chips) @@ -29,7 +37,7 @@ IF(LIBUSB_FOUND) ENDIF(LIBUSB_FOUND) # Library -SET(LIBRARY_SOURCES nfc nfc-device nfc-emulation nfc-internal conf iso14443-subr mirror-subr target-subr ${DRIVERS_SOURCES} ${BUSES_SOURCES} ${CHIPS_SOURCES}) +SET(LIBRARY_SOURCES nfc nfc-device nfc-emulation nfc-internal conf iso14443-subr mirror-subr target-subr log ${DRIVERS_SOURCES} ${BUSES_SOURCES} ${CHIPS_SOURCES} ${WINDOWS_SOURCES}) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) IF(LIBNFC_DEBUG_OUTPUT) LIST(APPEND LIBRARY_SOURCES log-printf)