Files
sigmaker-ida/idasdk76/dbg/dbg_pe_hlp.cpp
2021-10-31 21:20:46 +02:00

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