Author: tkreuzer Date: Sun May 11 22:25:46 2014 New Revision: 63245
URL: http://svn.reactos.org/svn/reactos?rev=63245&view=rev Log: [CRT] Fix handling of multibyte strings in _splitpath. Fixes 2 winetests.
Modified: trunk/reactos/lib/sdk/crt/string/_tsplitpath_x.h
Modified: trunk/reactos/lib/sdk/crt/string/_tsplitpath_x.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/string/_tsplitp... ============================================================================== --- trunk/reactos/lib/sdk/crt/string/_tsplitpath_x.h [iso-8859-1] (original) +++ trunk/reactos/lib/sdk/crt/string/_tsplitpath_x.h [iso-8859-1] Sun May 11 22:25:46 2014 @@ -7,6 +7,7 @@
#include <precomp.h> #include <tchar.h> +#include <mbctype.h>
#if IS_SECAPI #define _FAILURE -1 @@ -99,12 +100,24 @@ drive[2] = '\0'; } path += 2; - } + }
/* Scan the rest of the string */ dir_start = path; while (*path != '\0') { +#ifndef _UNICODE + /* Check for multibyte lead bytes */ + if (_ismbblead((unsigned char)*path)) + { + /* Check for unexpected end of string */ + if (path[1] == 0) break; + + /* Skip the lead byte and the following byte */ + path += 2; + continue; + } +#endif /* Remember last path separator and last dot */ if ((*path == '\') || (*path == '/')) file_start = path + 1; if (*path == '.') ext_start = path; @@ -114,14 +127,14 @@ /* Check if we got a file name / extension */ if (!file_start) file_start = dir_start; - if (!ext_start || ext_start < file_start) + if (!ext_start || (ext_start < file_start)) ext_start = path;
if (dir) { src = dir_start; count = dir_size - 1; - while (src < file_start && count--) *dir++ = *src++; + while ((src < file_start) && count--) *dir++ = *src++; *dir = '\0'; }