X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=win%2Finspircd_win32wrapper.cpp;h=f2562020dc7469f69819f4e32aeb8e7e4439c532;hb=b0f16081ccaef527ed4b5434a7264508cf455f39;hp=26d1548986b7745399c607f24fe8fb92ec7e0d61;hpb=5b9682275e384635a1fd9f7320cf4d9a604a43b4;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/win/inspircd_win32wrapper.cpp b/win/inspircd_win32wrapper.cpp index 26d154898..f2562020d 100644 --- a/win/inspircd_win32wrapper.cpp +++ b/win/inspircd_win32wrapper.cpp @@ -1,13 +1,14 @@ /* * InspIRCd -- Internet Relay Chat Daemon * + * Copyright (C) 2014 Attila Molnar + * Copyright (C) 2013, 2019, 2021 Sadie Powell + * Copyright (C) 2013 ChrisTX + * Copyright (C) 2012 Robby * Copyright (C) 2011 Adam - * Copyright (C) 2007, 2009 Dennis Friis - * Copyright (C) 2009 Daniel De Graaf - * Copyright (C) 2007-2009 Craig Edwards - * Copyright (C) 2008 John Brooks - * Copyright (C) 2007 Burlex + * Copyright (C) 2007-2008 Craig Edwards * Copyright (C) 2007 Robin Burchell + * Copyright (C) 2007 Dennis Friis * * This file is part of InspIRCd. InspIRCd is free software: you can * redistribute it and/or modify it under the terms of the GNU General Public @@ -22,170 +23,49 @@ * along with this program. If not, see . */ + #include "inspircd_win32wrapper.h" #include "inspircd.h" #include "configreader.h" -#include "colors.h" #include -#include -#include -#include -#pragma comment(lib, "Winmm.lib") +#include "ya_getopt.c" -CoreExport const char *insp_inet_ntop(int af, const void *src, char *dst, socklen_t cnt) +CWin32Exception::CWin32Exception() : exception() { - - if (af == AF_INET) - { - struct sockaddr_in in; - memset(&in, 0, sizeof(in)); - in.sin_family = AF_INET; - memcpy(&in.sin_addr, src, sizeof(struct in_addr)); - getnameinfo((struct sockaddr *)&in, sizeof(struct sockaddr_in), dst, cnt, NULL, 0, NI_NUMERICHOST); - return dst; - } - else if (af == AF_INET6) + dwErrorCode = GetLastError(); + if( FormatMessageA( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)szErrorString, _countof(szErrorString), NULL) == 0 ) + sprintf_s(szErrorString, _countof(szErrorString), "Error code: %u", dwErrorCode); + for (size_t i = 0; i < _countof(szErrorString); i++) { - struct sockaddr_in6 in; - memset(&in, 0, sizeof(in)); - in.sin6_family = AF_INET6; - memcpy(&in.sin6_addr, src, sizeof(struct in_addr6)); - getnameinfo((struct sockaddr *)&in, sizeof(struct sockaddr_in6), dst, cnt, NULL, 0, NI_NUMERICHOST); - return dst; + if ((szErrorString[i] == '\r') || (szErrorString[i] == '\n')) + szErrorString[i] = 0; } - return NULL; } -CoreExport int insp_inet_pton(int af, const char *src, void *dst) +CWin32Exception::CWin32Exception(const CWin32Exception& other) { - sockaddr_in sa; - int len = sizeof(SOCKADDR); - int rv = WSAStringToAddressA((LPSTR)src, af, NULL, (LPSOCKADDR)&sa, &len); - if(rv >= 0) - { - if(WSAGetLastError() == WSAEINVAL) - rv = 0; - else - rv = 1; - } - memcpy(dst, &sa.sin_addr, sizeof(struct in_addr)); - return rv; + strcpy_s(szErrorString, _countof(szErrorString), other.szErrorString); } -CoreExport DIR * opendir(const char * path) +const char* CWin32Exception::what() const throw() { - std::string search_path = std::string(path) + "\\*.*"; - WIN32_FIND_DATAA fd; - HANDLE f = FindFirstFileA(search_path.c_str(), &fd); - if (f != INVALID_HANDLE_VALUE) - { - DIR * d = new DIR; - memcpy(&d->find_data, &fd, sizeof(WIN32_FIND_DATA)); - d->find_handle = f; - d->first = true; - return d; - } - else - { - return 0; - } + return szErrorString; } -CoreExport dirent * readdir(DIR * handle) +DWORD CWin32Exception::GetErrorCode() { - if (handle->first) - handle->first = false; - else - { - if (!FindNextFileA(handle->find_handle, &handle->find_data)) - return 0; - } - - strncpy(handle->dirent_pointer.d_name, handle->find_data.cFileName, MAX_PATH); - return &handle->dirent_pointer; + return dwErrorCode; } -CoreExport void closedir(DIR * handle) +WindowsStream::WindowsStream(DWORD handle) + : BackgroundColor(0) + , ForegroundColor(FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN) { - FindClose(handle->find_handle); - delete handle; -} - -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) + this->Handle = GetStdHandle(handle); + CONSOLE_SCREEN_BUFFER_INFO bufinf; + if (GetConsoleScreenBufferInfo(this->Handle, &bufinf)) { - 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; - } + this->BackgroundColor = bufinf.wAttributes & 0x00F0; + this->ForegroundColor = bufinf.wAttributes & 0x00FF; } - - // return 1 (invalid argument) - return 1; } - -#include "../src/modules/m_spanningtree/link.h" -#include "../src/modules/ssl.h" -template class reference; -template class reference; -template class reference; -template class reference;