msvcrt: Add MBCS handling for _splitpath.
This commit is contained in:
parent
e67f84122d
commit
ab5db46477
@ -1059,7 +1059,15 @@ int CDECL _splitpath_s(const char* inpath,
|
|||||||
|
|
||||||
/* look for end of directory part */
|
/* look for end of directory part */
|
||||||
end = NULL;
|
end = NULL;
|
||||||
for (p = inpath; *p; p++) if (*p == '/' || *p == '\\') end = p + 1;
|
for (p = inpath; *p; p++)
|
||||||
|
{
|
||||||
|
if (_ismbblead((unsigned char)*p))
|
||||||
|
{
|
||||||
|
p++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (*p == '/' || *p == '\\') end = p + 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (end) /* got a directory */
|
if (end) /* got a directory */
|
||||||
{
|
{
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <io.h>
|
#include <io.h>
|
||||||
|
#include <mbctype.h>
|
||||||
#include <windef.h>
|
#include <windef.h>
|
||||||
#include <winbase.h>
|
#include <winbase.h>
|
||||||
#include <winnls.h>
|
#include <winnls.h>
|
||||||
@ -390,6 +391,31 @@ static void test_fullpath(void)
|
|||||||
RemoveDirectoryA(level1);
|
RemoveDirectoryA(level1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_splitpath(void)
|
||||||
|
{
|
||||||
|
const char* path = "c:\\\x83\x5c\x83\x74\x83\x67.bin";
|
||||||
|
char drive[3], dir[MAX_PATH], fname[MAX_PATH], ext[MAX_PATH];
|
||||||
|
int prev_cp = _getmbcp();
|
||||||
|
|
||||||
|
/* SBCS codepage */
|
||||||
|
_setmbcp(1252);
|
||||||
|
_splitpath(path, drive, dir, fname, ext);
|
||||||
|
ok(!strcmp(drive, "c:"), "got %s\n", drive);
|
||||||
|
ok(!strcmp(dir, "\\\x83\x5c"), "got %s\n", dir);
|
||||||
|
ok(!strcmp(fname, "\x83\x74\x83\x67"), "got %s\n", fname);
|
||||||
|
ok(!strcmp(ext, ".bin"), "got %s\n", ext);
|
||||||
|
|
||||||
|
/* MBCS (Japanese) codepage */
|
||||||
|
_setmbcp(932);
|
||||||
|
_splitpath(path, drive, dir, fname, ext);
|
||||||
|
ok(!strcmp(drive, "c:"), "got %s\n", drive);
|
||||||
|
ok(!strcmp(dir, "\\"), "got %s\n", dir);
|
||||||
|
ok(!strcmp(fname, "\x83\x5c\x83\x74\x83\x67"), "got %s\n", fname);
|
||||||
|
ok(!strcmp(ext, ".bin"), "got %s\n", ext);
|
||||||
|
|
||||||
|
_setmbcp(prev_cp);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(dir)
|
START_TEST(dir)
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
@ -397,4 +423,5 @@ START_TEST(dir)
|
|||||||
test_fullpath();
|
test_fullpath();
|
||||||
test_makepath();
|
test_makepath();
|
||||||
test_makepath_s();
|
test_makepath_s();
|
||||||
|
test_splitpath();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user