when converting from 8859-1, use unsigned chars

This commit is contained in:
jez_higgins 2003-08-28 20:51:56 +00:00
parent dcaecbfa6a
commit b09006de6b

View file

@ -28,7 +28,7 @@ iso8859_1utf8_codecvt::~iso8859_1utf8_codecvt()
{ {
} // ~iso8859_1utf8_codecvt } // ~iso8859_1utf8_codecvt
std::codecvt_base::result iso8859_1utf8_codecvt::do_out(std::mbstate_t& /* state */, std::codecvt_base::result iso8859_1utf8_codecvt::do_in(std::mbstate_t& /* state */,
const char* from, const char* from,
const char* from_end, const char* from_end,
const char*& from_next, const char*& from_next,
@ -43,7 +43,8 @@ std::codecvt_base::result iso8859_1utf8_codecvt::do_out(std::mbstate_t& /* state
{ {
for(const Tab *t = tab; t->char_mask; t++) for(const Tab *t = tab; t->char_mask; t++)
{ {
if(*from_next > t->wide_mask ) unsigned char fn = static_cast<unsigned char>(*from_next);
if(fn > t->wide_mask )
continue; continue;
// is there enough room in outbuffer? // is there enough room in outbuffer?
@ -51,11 +52,11 @@ std::codecvt_base::result iso8859_1utf8_codecvt::do_out(std::mbstate_t& /* state
return std::codecvt_base::partial; return std::codecvt_base::partial;
int c = t->shift; int c = t->shift;
*to_next++ = static_cast<char>(t->char_value | (*from_next >> c)); *to_next++ = static_cast<char>(t->char_value | (fn >> c));
while(c > 0) while(c > 0)
{ {
c -= 6; c -= 6;
*to_next++ = static_cast<char>(0x80 | ((*from_next >> c) & 0x3F)); *to_next++ = static_cast<char>(0x80 | ((fn >> c) & 0x3F));
} // while(c > 0) } // while(c > 0)
break; break;
} // for(Tab *t = tab; t->char_mask; t++) } // for(Tab *t = tab; t->char_mask; t++)
@ -65,7 +66,7 @@ std::codecvt_base::result iso8859_1utf8_codecvt::do_out(std::mbstate_t& /* state
return std::codecvt_base::ok; return std::codecvt_base::ok;
} // do_out } // do_out
std::codecvt_base::result iso8859_1utf8_codecvt::do_in(std::mbstate_t& /* state */, std::codecvt_base::result iso8859_1utf8_codecvt::do_out(std::mbstate_t& /* state */,
const char* from, const char* from,
const char* from_end, const char* from_end,
const char*& from_next, const char*& from_next,