in lib/normalize.cxx [219:287]
BOOL IsUTF8URL(__in LPSTR pszPath)
{
CHAR ch;
if ( g_fFavorDBCS )
{
return ( MultiByteToWideChar( CP_ACP,
MB_ERR_INVALID_CHARS,
pszPath,
-1,
NULL,
0) == 0);
}
while (ch = *pszPath++) {
if (ch & 0x80) {
wchar_t wch;
int iLen;
BOOL bDefault = FALSE;
char chTrail1;
char chTrail2;
chTrail1 = *pszPath++;
if (chTrail1) {
chTrail2 = *pszPath;
} else {
chTrail2 = 0;
}
if ( ((ch & 0xF0) == 0xE0) &&
IS_UTF8_TRAILBYTE(chTrail1) &&
IS_UTF8_TRAILBYTE(chTrail2) ) {
// handle three byte case
// 1110xxxx 10xxxxxx 10xxxxxx
wch = (wchar_t) (((ch & 0x0f) << 12) |
((chTrail1 & 0x3f) << 6) |
(chTrail2 & 0x3f));
pszPath++;
} else
if ( ((ch & 0xE0) == 0xC0) &&
IS_UTF8_TRAILBYTE(chTrail1) ) {
// handle two byte case
// 110xxxxx 10xxxxxx
wch = (wchar_t) (((ch & 0x1f) << 6) | (chTrail1 & 0x3f));
} else
return FALSE;
iLen = WideCharToMultiByte( CP_ACP,
WC_NO_BEST_FIT_CHARS,
&wch,
1,
NULL,
0,
NULL,
&bDefault );
if (bDefault == TRUE || iLen == 0 || iLen > 2)
return FALSE;
}
}
return TRUE;
} // IsUTF8URL()