diff options
author | Peter Powell <petpow@saberuk.com> | 2019-12-08 19:39:02 +0000 |
---|---|---|
committer | Peter Powell <petpow@saberuk.com> | 2019-12-08 19:59:34 +0000 |
commit | a47e2df0ce833e06fa3e4034e64ec084a2bbb2d3 (patch) | |
tree | 51b20e031c52f135d927bc23643cbd831a0fddd4 /win | |
parent | 914d8140d98dd0adc54f739dfe550765cc466bac (diff) |
Replace our Windows getopt_long wrapper with ya_getopt.
Closes #546.
Diffstat (limited to 'win')
-rw-r--r-- | win/CMakeLists.txt | 7 | ||||
-rw-r--r-- | win/inspircd_win32wrapper.cpp | 75 | ||||
-rw-r--r-- | win/inspircd_win32wrapper.h | 18 | ||||
-rw-r--r-- | win/modules/CMakeLists.txt | 8 |
4 files changed, 11 insertions, 97 deletions
diff --git a/win/CMakeLists.txt b/win/CMakeLists.txt index be6617b8b..2df48883f 100644 --- a/win/CMakeLists.txt +++ b/win/CMakeLists.txt @@ -48,6 +48,13 @@ file(GLOB INSPIRCD_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${INSPIRCD_BASE}/src/threadengines/threadengine_win32.cpp") list(SORT INSPIRCD_SOURCES) +file(GLOB INSPIRCD_VENDORS "${INSPIRCD_BASE}/vendor/**") +foreach(INSPIRCD_VENDOR ${INSPIRCD_VENDORS}) + if(IS_DIRECTORY ${INSPIRCD_VENDOR}) + include_directories(${INSPIRCD_VENDOR}) + endif() +endforeach() + include_directories("${INSPIRCD_BASE}/win" "${INSPIRCD_BASE}/include") include_directories(${EXTRA_INCLUDES}) diff --git a/win/inspircd_win32wrapper.cpp b/win/inspircd_win32wrapper.cpp index 8579103e9..1a7be09fe 100644 --- a/win/inspircd_win32wrapper.cpp +++ b/win/inspircd_win32wrapper.cpp @@ -27,80 +27,7 @@ #include "inspircd.h" #include "configreader.h" #include <string> -#include <errno.h> -#include <assert.h> - -int optind = 1; -char optarg[514]; -int getopt_long(int ___argc, char *const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind) -{ - // burlex todo: handle the shortops, at the moment it only works with longopts. - - if (___argc == 1 || optind == ___argc) // No arguments (apart from filename) - return -1; - - const char * opt = ___argv[optind]; - optind++; - - // if we're not an option, return an error. - if (strnicmp(opt, "--", 2) != 0) - return 1; - else - opt += 2; - - - // parse argument list - int i = 0; - for (; __longopts[i].name != 0; ++i) - { - if (!strnicmp(__longopts[i].name, opt, strlen(__longopts[i].name))) - { - // woot, found a valid argument =) - char * par = 0; - if ((optind) != ___argc) - { - // grab the parameter from the next argument (if its not another argument) - if (strnicmp(___argv[optind], "--", 2) != 0) - { -// optind++; // Trash this next argument, we won't be needing it. - par = ___argv[optind-1]; - } - } - - // increment the argument for next time -// optind++; - - // determine action based on type - if (__longopts[i].has_arg == required_argument && !par) - { - // parameter missing and its a required parameter option - return 1; - } - - // store argument in optarg - if (par) - strncpy(optarg, par, 514); - - if (__longopts[i].flag != 0) - { - // this is a variable, we have to set it if this argument is found. - *__longopts[i].flag = 1; - return 0; - } - else - { - if (__longopts[i].val == -1 || par == 0) - return 1; - - return __longopts[i].val; - } - break; - } - } - - // return 1 (invalid argument) - return 1; -} +#include "ya_getopt.c" CWin32Exception::CWin32Exception() : exception() { diff --git a/win/inspircd_win32wrapper.h b/win/inspircd_win32wrapper.h index 964d3925d..e92339abf 100644 --- a/win/inspircd_win32wrapper.h +++ b/win/inspircd_win32wrapper.h @@ -60,6 +60,9 @@ #define _CRT_SECURE_NO_DEPRECATE #define _WINSOCK_DEPRECATED_NO_WARNINGS +// Windows doesn't support getopt_long so we use ya_getopt instead. +#include "ya_getopt.h" + /* Normal windows (platform-specific) includes */ #include <winsock2.h> #pragma comment(lib, "Ws2_32.lib") @@ -91,21 +94,6 @@ typedef SSIZE_T ssize_t; #define popen _popen #define pclose _pclose -/* getopt() wrapper */ -#define no_argument 0 -#define required_argument 1 -#define optional_argument 2 -struct option -{ - char *name; - int has_arg; - int *flag; - int val; -}; -extern int optind; -extern char optarg[514]; -int getopt_long(int ___argc, char *const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind); - // warning: 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2' // Normally, this is a huge problem, but due to our new/delete remap, we can ignore it. #pragma warning(disable:4251) diff --git a/win/modules/CMakeLists.txt b/win/modules/CMakeLists.txt index 094078aab..2c2617e2b 100644 --- a/win/modules/CMakeLists.txt +++ b/win/modules/CMakeLists.txt @@ -7,13 +7,6 @@ list(SORT INSPIRCD_MODULES) add_definitions("-DDLL_BUILD")
-file(GLOB INSPIRCD_VENDORS "${INSPIRCD_BASE}/vendor/**")
-foreach(INSPIRCD_VENDOR ${INSPIRCD_VENDORS})
- if(NOT IS_DIRECTORY ${INSPIRCD_VENDOR})
- list(REMOVE_ITEM INSPIRCD_VENDORS ${INSPIRCD_VENDOR})
- endif()
-endforeach()
-
foreach(MODULE_NAME ${INSPIRCD_MODULES})
if(IS_DIRECTORY "${MODULE_NAME}")
string(REGEX REPLACE "^.*[/\\](.*)$" "\\1" BASE_NAME ${MODULE_NAME})
@@ -33,7 +26,6 @@ foreach(MODULE_NAME ${INSPIRCD_MODULES}) # Generate the module and set its linker flags, also set it to depend on the main executable to be built beforehand
target_link_libraries(${SO_NAME} inspircd)
add_dependencies(${SO_NAME} inspircd)
- target_include_directories(${SO_NAME} PRIVATE ${INSPIRCD_VENDORS})
if(MSVC)
target_link_libraries(${SO_NAME} win32_memory)
add_dependencies(${SO_NAME} win32_memory)
|