Corrected implementation of %n.
This commit is contained in:
parent
a6e1095cbc
commit
373d8a3eb8
|
@ -196,9 +196,22 @@ SHIM_CALL DbgPrint_shim(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (*end == 'n')
|
||||||
|
{
|
||||||
|
XEASSERT(arg_size == 4);
|
||||||
|
if (arg_extras == 0) {
|
||||||
|
uint32_t value = arg_index < 7
|
||||||
|
? SHIM_GET_ARG_32(1 + arg_index)
|
||||||
|
: (uint32_t)SHIM_MEM_64(SHIM_GPR_32(1) + 16 + ((1 + arg_index) * 8));
|
||||||
|
SHIM_SET_MEM_32(value, (b - buffer) / sizeof(char));
|
||||||
|
arg_index++;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
XEASSERT(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (*end == 's' ||
|
else if (*end == 's' ||
|
||||||
*end == 'p' ||
|
*end == 'p') {
|
||||||
*end == 'n') {
|
|
||||||
char local[512];
|
char local[512];
|
||||||
local[0] = '\0';
|
local[0] = '\0';
|
||||||
strncat(local, start, end + 1 - start);
|
strncat(local, start, end + 1 - start);
|
||||||
|
|
|
@ -198,9 +198,20 @@ SHIM_CALL _vsnprintf_shim(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (*end == 'n')
|
||||||
|
{
|
||||||
|
XEASSERT(arg_size == 4);
|
||||||
|
if (arg_extras == 0) {
|
||||||
|
uint32_t value = (uint32_t)SHIM_MEM_64(arg_ptr + (arg_index * 8)); // TODO: check if this is correct...
|
||||||
|
SHIM_SET_MEM_32(value, (b - buffer) / sizeof(char));
|
||||||
|
arg_index++;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
XEASSERT(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (*end == 's' ||
|
else if (*end == 's' ||
|
||||||
*end == 'p' ||
|
*end == 'p') {
|
||||||
*end == 'n') {
|
|
||||||
char local[512];
|
char local[512];
|
||||||
local[0] = '\0';
|
local[0] = '\0';
|
||||||
strncat(local, start, end + 1 - start);
|
strncat(local, start, end + 1 - start);
|
||||||
|
@ -413,9 +424,20 @@ SHIM_CALL _vswprintf_shim(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (*end == 'n')
|
||||||
|
{
|
||||||
|
XEASSERT(arg_size == 4);
|
||||||
|
if (arg_extras == 0) {
|
||||||
|
uint32_t value = (uint32_t)SHIM_MEM_64(arg_ptr + (arg_index * 8)); // TODO: check if this is correct...
|
||||||
|
SHIM_SET_MEM_32(value, (b - buffer) / sizeof(wchar_t));
|
||||||
|
arg_index++;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
XEASSERT(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (*end == 's' ||
|
else if (*end == 's' ||
|
||||||
*end == 'p' ||
|
*end == 'p') {
|
||||||
*end == 'n') {
|
|
||||||
wchar_t local[512];
|
wchar_t local[512];
|
||||||
local[0] = '\0';
|
local[0] = '\0';
|
||||||
wcsncat(local, start, end + 1 - start);
|
wcsncat(local, start, end + 1 - start);
|
||||||
|
|
Loading…
Reference in New Issue