port: advance MSVC600 CPython compatibility frontier
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
/* Focused compile smoke test for compat/msvc600/pathcch.h.
|
||||
*
|
||||
* The VC6 compatibility header intentionally implements only the single
|
||||
* PathCch API used by cpython/Modules/getpath.c: PathCchFindExtension().
|
||||
* This fixture keeps the representative path cases in one place for the
|
||||
* VC6 probe. The probe is compile-only, so the checks are ordinary C code
|
||||
* that can also be run later by a tiny Windows harness if needed.
|
||||
*/
|
||||
#include <windows.h>
|
||||
#include <pathcch.h>
|
||||
|
||||
#ifndef ARRAYSIZE
|
||||
#define ARRAYSIZE(a) (sizeof(a) / sizeof((a)[0]))
|
||||
#endif
|
||||
|
||||
static int
|
||||
pathcch_expect_ext(PCWSTR path, size_t cch, size_t offset)
|
||||
{
|
||||
PCWSTR ext;
|
||||
HRESULT hr;
|
||||
|
||||
ext = NULL;
|
||||
hr = PathCchFindExtension(path, cch, &ext);
|
||||
return SUCCEEDED(hr) && ext == path + offset;
|
||||
}
|
||||
|
||||
static int
|
||||
pathcch_expect_invalid(PCWSTR path, size_t cch)
|
||||
{
|
||||
PCWSTR ext;
|
||||
HRESULT hr;
|
||||
|
||||
ext = (PCWSTR)1;
|
||||
hr = PathCchFindExtension(path, cch, &ext);
|
||||
return FAILED(hr);
|
||||
}
|
||||
|
||||
int
|
||||
vc6_pathcch_find_extension_smoke(void)
|
||||
{
|
||||
static const WCHAR exe_path[] = L"C:\\Python311\\python.exe";
|
||||
static const WCHAR no_ext[] = L"C:\\Python311\\python";
|
||||
static const WCHAR dir_dot[] = L"C:\\tmp.dir\\python";
|
||||
static const WCHAR dotfile[] = L"C:\\Python311\\.pythonrc";
|
||||
static const WCHAR trailing_dir[] = L"C:\\bin\\python.exe\\";
|
||||
static const WCHAR multi_dot[] = L"C:\\tmp\\archive.tar.gz";
|
||||
int ok;
|
||||
|
||||
ok = 1;
|
||||
ok = ok && pathcch_expect_ext(exe_path, ARRAYSIZE(exe_path), 20); /* .exe */
|
||||
ok = ok && pathcch_expect_ext(no_ext, ARRAYSIZE(no_ext), 19); /* NUL */
|
||||
ok = ok && pathcch_expect_ext(dir_dot, ARRAYSIZE(dir_dot), 17); /* NUL, directory dot ignored */
|
||||
ok = ok && pathcch_expect_ext(dotfile, ARRAYSIZE(dotfile), 13); /* dotfile extension */
|
||||
ok = ok && pathcch_expect_ext(trailing_dir, ARRAYSIZE(trailing_dir), 18); /* NUL after separator */
|
||||
ok = ok && pathcch_expect_ext(multi_dot, ARRAYSIZE(multi_dot), 18); /* last suffix */
|
||||
ok = ok && pathcch_expect_invalid(exe_path, 4); /* too small: no NUL */
|
||||
ok = ok && pathcch_expect_invalid(NULL, ARRAYSIZE(exe_path));
|
||||
return ok ? 0 : 1;
|
||||
}
|
||||
Reference in New Issue
Block a user