X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=win%2Finspircd_win32wrapper.cpp;h=c32d31d5a2b81045387d0e8e6dbea6735bc976ca;hb=bae9f69eaff3143e1f886791fa706ad5baaf8f65;hp=a25544aab95f3ab891b8fe68090017652b3f99df;hpb=e51c8a5cf66d1d3eb475b967f99587b5a59ca442;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/win/inspircd_win32wrapper.cpp b/win/inspircd_win32wrapper.cpp index a25544aab..c32d31d5a 100644 --- a/win/inspircd_win32wrapper.cpp +++ b/win/inspircd_win32wrapper.cpp @@ -2,7 +2,7 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2007 InspIRCd Development Team + * InspIRCd: (C) 2002-2008 InspIRCd Development Team * See: http://www.inspircd.org/wiki/index.php/Credits * * This program is free but copyrighted software; see @@ -302,7 +302,6 @@ int getopt_long_only(int ___argc, char *const *___argv, const char *__shortopts, return -1; const char * opt = ___argv[arg_counter]; - int return_val = 0; // if we're not an option, return an error. if (strnicmp(opt, "--", 2) != 0) @@ -390,14 +389,14 @@ void IPC::Check() if (!res) { if (GetLastError() != ERROR_SEM_TIMEOUT) - Instance->Log(DEFAULT, "IPC Pipe Error %u: %s", GetLastError(), dlerror()); + Instance->Logs->Log("win32",DEFAULT, "IPC Pipe Error %u: %s", GetLastError(), dlerror()); return; } switch (action) { case IPC_MESSAGE_REHASH: - Instance->Rehash(); + Instance->Rehash("due to IPC message"); break; case IPC_MESSAGE_DIE: @@ -523,7 +522,7 @@ void ClearConsole() */ void ChangeWindowsSpecificPointers(InspIRCd* Instance) { - Instance->Log(DEBUG,"Changing to windows specific pointer and functor set"); + Instance->Logs->Log("win32",DEBUG,"Changing to windows specific pointer and functor set"); Instance->Config->DNSServerValidator = &ValidateWindowsDnsServer; } @@ -631,15 +630,20 @@ bool ValidateWindowsDnsServer(ServerConfig* conf, const char* tag, const char* v if (!*(data.GetString())) { std::string nameserver; - conf->GetInstance()->Log(DEFAULT,"WARNING: not defined, attempting to find working server in the registry..."); + conf->GetInstance()->Logs->Log("win32",DEFAULT,"WARNING: not defined, attempting to find working server in the registry..."); nameserver = FindNameServerWin(); /* Windows stacks multiple nameservers in one registry key, seperated by commas. * Spotted by Cataclysm. */ if (nameserver.find(',') != std::string::npos) nameserver = nameserver.substr(0, nameserver.find(',')); + /* Just to be FUCKING AKWARD, windows fister... err i mean vista... + * seperates the nameservers with spaces instead. + */ + if (nameserver.find(' ') != std::string::npos) + nameserver = nameserver.substr(0, nameserver.find(' ')); data.Set(nameserver.c_str()); - conf->GetInstance()->Log(DEFAULT," set to '%s' as first active resolver in registry.", nameserver.c_str()); + conf->GetInstance()->Logs->Log("win32",DEFAULT," set to '%s' as first active resolver in registry.", nameserver.c_str()); } return true; } @@ -654,67 +658,3 @@ int gettimeofday(struct timeval * tv, void * tz) tv->tv_usec = (mstime - (tv->tv_sec * 1000)) * 1000; return 0; } - -int __exceptionHandler(PEXCEPTION_POINTERS pExceptPtrs) -{ - SYSTEMTIME _time; - HANDLE hDump; - char mod[MAX_PATH*2]; - char * pMod = mod; - char dump_filename[MAX_PATH]; - MINIDUMP_EXCEPTION_INFORMATION dumpInfo; - DWORD code; - - if(pExceptPtrs == NULL) { - __try { - RaiseException(EXCEPTION_BREAKPOINT, 0, 0, NULL); - } __except(__exceptionHandler(GetExceptionInformation()), EXCEPTION_CONTINUE_EXECUTION) {} - } - - printf("Exception caught at 0x%.8X! Attempting to write crash dump file.\n", (unsigned long)pExceptPtrs->ExceptionRecord->ExceptionAddress); - - if(GetModuleFileName(0, mod, MAX_PATH*2) > 0) - { - if( (pMod = strrchr(mod, '\\')) != NULL ) - ++pMod; - else - strcpy(mod, "unk"); - } - else - strcpy(mod, "unk"); - - GetSystemTime(&_time); - snprintf(dump_filename, MAX_PATH, "dump-%s-%u-%u-%u-%u-%u-%u.dmp", - pMod, _time.wYear, _time.wMonth, _time.wDay, _time.wHour, _time.wMinute, _time.wSecond); - - hDump = CreateFile(dump_filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_WRITE_THROUGH, 0); - if(hDump != INVALID_HANDLE_VALUE) - { - dumpInfo.ClientPointers = FALSE; - dumpInfo.ExceptionPointers = pExceptPtrs; - dumpInfo.ThreadId = GetCurrentThreadId(); - - /* let's write a full memory dump. insp shouldn't be using much memory anyway, and it will help a lot with debugging. */ - MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDump, MiniDumpWithFullMemory, &dumpInfo, NULL, NULL); - FlushFileBuffers(hDump); - CloseHandle(hDump); - } - - /* check for a debugger */ - __asm { - pushad - pushfd - mov eax, fs:[18h] - mov eax, dword ptr [eax+30h] - mov ebx, dword ptr [eax] - mov code, ebx - popfd - popad - } - - /* break into debugger if we have one */ - if(code & 0x10000) - return EXCEPTION_CONTINUE_SEARCH; - else /* otherwise exit abnormally */ - return EXCEPTION_CONTINUE_EXECUTION; -}