From 50c4acf86d4085c6e8354dee0bd60d5e71ce7e99 Mon Sep 17 00:00:00 2001 From: cflakes Date: Sun, 16 May 2010 20:28:34 +0000 Subject: [PATCH] Added a "-force" mode to the charset module, so it's useful for even more people. git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@1994 726aef4b-f618-498e-8847-2d620e286838 --- modules/extra/charset.cpp | 44 ++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/modules/extra/charset.cpp b/modules/extra/charset.cpp index 72170953..f0e0d71b 100644 --- a/modules/extra/charset.cpp +++ b/modules/extra/charset.cpp @@ -21,6 +21,8 @@ class CCharsetMod : public CModule private: VCString m_vsClientCharsets; VCString m_vsServerCharsets; + bool m_bForce; // don't check whether the input string is already a + // valid string in the target charset. Instead, always apply conversion. size_t GetConversionLength(iconv_t& ic, const CString& sData) { @@ -129,17 +131,20 @@ private: { CString sDataCopy(sData); - // check whether sData already is encoded with the right charset: - iconv_t icTest = iconv_open(sTo.c_str(), sTo.c_str()); - if(icTest != (iconv_t)-1) + if(!m_bForce) { - size_t uTest = GetConversionLength(icTest, sData); - iconv_close(icTest); - - if(uTest != (size_t)-1 && uTest != (size_t)-2) + // check whether sData already is encoded with the right charset: + iconv_t icTest = iconv_open(sTo.c_str(), sTo.c_str()); + if(icTest != (iconv_t)-1) { - DEBUG("charset: [" + sData.Escape_n(CString::EURL) + "] is valid [" + sTo + "] already."); - return true; + size_t uTest = GetConversionLength(icTest, sData); + iconv_close(icTest); + + if(uTest != (size_t)-1 && uTest != (size_t)-2) + { + DEBUG("charset: [" + sData.Escape_n(CString::EURL) + "] is valid [" + sTo + "] already."); + return true; + } } } @@ -166,13 +171,24 @@ private: } public: - MODCONSTRUCTOR(CCharsetMod) {} + MODCONSTRUCTOR(CCharsetMod) + { + m_bForce = false; + } bool OnLoad(const CString& sArgs, CString& sMessage) { - if(sArgs.Token(1).empty() || !sArgs.Token(2).empty()) + size_t uIndex = 0; + + if(sArgs.Token(0).Equals("-force")) { - sMessage = "This module needs two charset lists as arguments: " + m_bForce = true; + ++uIndex; + } + + if(sArgs.Token(uIndex + 1).empty() || !sArgs.Token(uIndex + 2).empty()) + { + sMessage = "This module needs two charset lists as arguments: [-force] " " " ""; return false; @@ -181,8 +197,8 @@ public: } VCString vsFrom, vsTo; - sArgs.Token(0).Split(",", vsFrom); - sArgs.Token(1).Split(",", vsTo); + sArgs.Token(uIndex).Split(",", vsFrom); + sArgs.Token(uIndex + 1).Split(",", vsTo); // probe conversions: for(VCString::const_iterator itf = vsFrom.begin(); itf != vsFrom.end(); itf++)