00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00023
00024 ACE_INLINE bool
00025 ACE_UTF16_Encoding_Converter::is_legal_utf8 (const ACE_Byte* source,
00026 size_t length) const
00027 {
00028 ACE_Byte a;
00029 const ACE_Byte* srcptr = source + length;
00030
00031 switch (length)
00032 {
00033 default:
00034 return false;
00035
00036
00037 case 4: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false;
00038 case 3: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false;
00039 case 2: if ((a = (*--srcptr)) > 0xBF) return false;
00040
00041 switch (*source)
00042 {
00043
00044 case 0xE0:
00045 if (a < 0xA0)
00046 return false;
00047 break;
00048 case 0xED:
00049 if (a > 0x9F)
00050 return false;
00051 break;
00052 case 0xF0:
00053 if (a < 0x90)
00054 return false;
00055 break;
00056 case 0xF4:
00057 if (a > 0x8F)
00058 return false;
00059 break;
00060 default:
00061 if (a < 0x80)
00062 return false;
00063 }
00064
00065 case 1:
00066 if (*source >= 0x80 && *source < 0xC2)
00067 return false;
00068 }
00069
00070 if (*source > 0xF4)
00071 return false;
00072
00073 return true;
00074 }
00075
00076 ACE_END_VERSIONED_NAMESPACE_DECL