X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fhelperfuncs.cpp;h=354d0a112e9b2f4354430cbb78e6b87a881e1f68;hb=428e8f4f693192a527065e5488bbc7fceb938b6f;hp=f70e04d958f087ec57e853d6da322bb227ae9064;hpb=54d10d53c730ab81ca6464fe2f0e0ecbcd435672;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/helperfuncs.cpp b/src/helperfuncs.cpp index f70e04d95..354d0a112 100644 --- a/src/helperfuncs.cpp +++ b/src/helperfuncs.cpp @@ -36,7 +36,7 @@ std::string InspIRCd::GetServerDescription(const std::string& servername) { std::string description; - FOREACH_MOD(I_OnGetServerDescription,OnGetServerDescription(servername,description)); + FOREACH_MOD(OnGetServerDescription, (servername,description)); if (!description.empty()) { @@ -337,7 +337,7 @@ void InspIRCd::SendWhoisLine(User* user, User* dest, int numeric, const std::str FIRST_MOD_RESULT(OnWhoisLine, MOD_RESULT, (user, dest, numeric, copy_text)); if (MOD_RESULT != MOD_RES_DENY) - user->WriteServ("%d %s", numeric, copy_text.c_str()); + user->WriteNumeric(numeric, copy_text); } void InspIRCd::SendWhoisLine(User* user, User* dest, int numeric, const char* format, ...) @@ -400,15 +400,17 @@ const char* InspIRCd::Format(va_list &vaList, const char* formatString) va_copy(dst, vaList); int vsnret = vsnprintf(&formatBuffer[0], formatBuffer.size(), formatString, dst); + va_end(dst); + if (vsnret > 0 && static_cast(vsnret) < formatBuffer.size()) { - return &formatBuffer[0]; + break; } formatBuffer.resize(formatBuffer.size() * 2); } - throw CoreException(); + return &formatBuffer[0]; } const char* InspIRCd::Format(const char* formatString, ...) @@ -437,7 +439,26 @@ bool InspIRCd::SilentULine(const std::string& sserver) std::string InspIRCd::TimeString(time_t curtime) { - return std::string(ctime(&curtime),24); +#ifdef _WIN32 + if (curtime < 0) + curtime = 0; +#endif + + struct tm* timeinfo = localtime(&curtime); + if (!timeinfo) + { + curtime = 0; + timeinfo = localtime(&curtime); + } + + // If the calculated year exceeds four digits or is less than the year 1000, + // the behavior of asctime() is undefined + if (timeinfo->tm_year + 1900 > 9999) + timeinfo->tm_year = 9999 - 1900; + else if (timeinfo->tm_year + 1900 < 1000) + timeinfo->tm_year = 0; + + return std::string(asctime(timeinfo),24); } std::string InspIRCd::GenRandomStr(int length, bool printable) @@ -495,7 +516,7 @@ ModResult OnCheckExemptionHandler::Call(User* user, Channel* chan, const std::st minmode = current[pos+1]; } - ModeHandler* mh = ServerInstance->Modes->FindMode(minmode, MODETYPE_CHANNEL); + PrefixMode* mh = ServerInstance->Modes->FindPrefixMode(minmode); if (mh && mypfx >= mh->GetPrefixRank()) return MOD_RES_ALLOW; if (mh || minmode == '*')