58 lines
1.4 KiB
C++
58 lines
1.4 KiB
C++
#if defined(__NT__) && !defined(__X86__)
|
|
//--------------------------------------------------------------------------
|
|
static bool path_start_match(const char *s, const char *f)
|
|
{
|
|
if ( f == NULL || s == NULL || *f == 0 || *s == 0 )
|
|
return false;
|
|
if ( s == f )
|
|
return true;
|
|
qstring t1(s);
|
|
qstring t2(f);
|
|
size_t l1 = t1.length();
|
|
size_t l2 = t2.length();
|
|
t1.replace("\\", "/");
|
|
t2.replace("\\", "/");
|
|
if ( t1[l1-1] == '/' )
|
|
--l1;
|
|
if ( t2[l2-1] == '/' )
|
|
--l2;
|
|
if ( l1 > l2
|
|
|| l1 < l2 && t2[l1] != '/' )
|
|
{
|
|
return false;
|
|
}
|
|
return memicmp(t1.c_str(), t2.c_str(), l1) == 0;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------
|
|
static void replace_system32(char *path, size_t sz)
|
|
{
|
|
char spath[MAXSTR];
|
|
spath[0] = 0;
|
|
GetSystemDirectoryA(spath, sizeof(spath));
|
|
if ( spath[0] == 0 || !path_start_match(spath, path) )
|
|
return;
|
|
char wpath[MAXSTR];
|
|
wpath[0] = 0;
|
|
GetSystemWow64Directory(wpath, sizeof(wpath));
|
|
if ( wpath[0] == 0 || path_start_match(wpath, spath) )
|
|
return;
|
|
size_t len = strlen(wpath);
|
|
if ( wpath[len-1] == '/' || wpath[len-1] == '\\' )
|
|
wpath[len-1] = 0;
|
|
len = strlen(spath);
|
|
if ( spath[len-1] == '/' || spath[len-1] == '\\' )
|
|
{
|
|
--len;
|
|
path[len] = 0;
|
|
}
|
|
qstring n;
|
|
n.sprnt("%s%s", wpath, &path[len]);
|
|
qstrncpy(path, n.c_str(), sz);
|
|
}
|
|
#else
|
|
#define replace_system32(PATH, SZ) do {} while ( false )
|
|
#endif
|
|
|
|
|