]> git.tdb.fi Git - libs/core.git/blobdiff - source/stringcodec/codec.cpp
Avoid using an exception in a non-error situation
[libs/core.git] / source / stringcodec / codec.cpp
index ed54ac938b33e6fbf12e763dccd615706696468a..3dc4f9a9d452efe7aef2478878d36ad3977af170 100644 (file)
@@ -16,17 +16,11 @@ namespace StringCodec {
 
 bool Codec::detect(const string &str) const
 {
-       Decoder *dec = create_decoder();
+       Decoder *dec = create_decoder(IGNORE_ERRORS);
+
        bool result = true;
-       try
-       {
-               for(string::const_iterator i=str.begin(); i!=str.end(); )
-                       dec->decode_char(str, i);
-       }
-       catch(const CodecError &)
-       {
-               result = false;
-       }
+       for(string::const_iterator i=str.begin(); (result && i!=str.end()); )
+               result = (dec->decode_char(str, i)!=-1);
 
        delete dec;
 
@@ -47,7 +41,7 @@ string Codec::Encoder::encode(const ustring &str)
        return buf;
 }
 
-void Codec::Encoder::error(UnicodeChar ch, string &buf, const string &msg)
+void Codec::Encoder::error(unichar ch, string &buf, const string &msg)
 {
        switch(err_mode)
        {
@@ -65,7 +59,7 @@ void Codec::Decoder::decode(const string &str, ustring &buf)
 {
        for(string::const_iterator i=str.begin(); i!=str.end();)
        {
-               UnicodeChar c = decode_char(str, i);
+               unichar c = decode_char(str, i);
                if(c!=-1)
                        buf += c;
        }
@@ -78,12 +72,12 @@ ustring Codec::Decoder::decode(const string &str)
        return buf;
 }
 
-UnicodeChar Codec::Decoder::error(const string &msg)
+unichar Codec::Decoder::error(const string &msg)
 {
        switch(err_mode)
        {
        case TRANSLITERATE:
-               return 0xFFFE;
+               return 0xFFFD;
        case IGNORE_ERRORS:
                return -1;
        default: