From: "Rémi Bernon" Subject: [PATCH 6/6] ntdll: Implement debugstr_guid/point/rect format extensions. Message-Id: <20201121201913.1177092-6-rbernon@codeweavers.com> Date: Sat, 21 Nov 2020 21:19:13 +0100 In-Reply-To: <20201121201913.1177092-1-rbernon@codeweavers.com> References: <20201121201913.1177092-1-rbernon@codeweavers.com> Respectively using %p(guid), %p(point), and %p(rect) format specifiers. Signed-off-by: Rémi Bernon --- dlls/ntdll/unix/debug.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/dlls/ntdll/unix/debug.c b/dlls/ntdll/unix/debug.c index 134ae619575..e82472bafa1 100644 --- a/dlls/ntdll/unix/debug.c +++ b/dlls/ntdll/unix/debug.c @@ -385,6 +385,29 @@ static size_t sprintf_dbgstr_as( char *buffer, size_t length, const ANSI_STRING return sprintf_dbgstr_an( buffer, length, as->Buffer, as->Length ); } +static size_t sprintf_dbgstr_guid( char *buffer, size_t length, const GUID *id ) +{ + if (!id) { if (length >= 7) strcpy(buffer, "(null)"); return 6; } + if (!((ULONG_PTR)id >> 16)) return snprintf( buffer, length, "", (WORD)(ULONG_PTR)id ); + return snprintf( buffer, length, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}", + id->Data1, id->Data2, id->Data3, + id->Data4[0], id->Data4[1], id->Data4[2], id->Data4[3], + id->Data4[4], id->Data4[5], id->Data4[6], id->Data4[7] ); +} + +static size_t sprintf_dbgstr_point( char *buffer, size_t length, const POINT *pt ) +{ + if (!pt) { if (length >= 7) strcpy(buffer, "(null)"); return 6; } + return snprintf( buffer, length, "(%d,%d)", pt->x, pt->y ); +} + +static size_t sprintf_dbgstr_rect( char *buffer, size_t length, const RECT *rect ) +{ + if (!rect) { if (length >= 7) strcpy(buffer, "(null)"); return 6; } + return snprintf( buffer, length, "(%d,%d)-(%d,%d)", rect->left, rect->top, + rect->right, rect->bottom ); +} + static int __cdecl wine_dbg_vsnprintf( char *buffer, size_t length, const char *format, __ms_va_list args ) { char fmtbuf[1024]; @@ -555,6 +578,21 @@ static int __cdecl wine_dbg_vsnprintf( char *buffer, size_t length, const char * append_checked( buf, end - buf, sprintf_dbgstr_as( buf, end - buf, va_arg( args, const ANSI_STRING * ) ) ); snprintf_checked( buf, end - buf, spec + 5 ); } + else if (!strncmp( spec, "p(guid)", 7 )) /* debugstr_guid */ + { + append_checked( buf, end - buf, sprintf_dbgstr_guid( buf, end - buf, va_arg( args, const GUID * ) ) ); + snprintf_checked( buf, end - buf, spec + 7 ); + } + else if (!strncmp( spec, "p(point)", 8 )) /* debugstr_point */ + { + append_checked( buf, end - buf, sprintf_dbgstr_point( buf, end - buf, va_arg( args, const POINT * ) ) ); + snprintf_checked( buf, end - buf, spec + 8 ); + } + else if (!strncmp( spec, "p(rect)", 7 )) /* debugstr_rect */ + { + append_checked( buf, end - buf, sprintf_dbgstr_rect( buf, end - buf, va_arg( args, const RECT * ) ) ); + snprintf_checked( buf, end - buf, spec + 7 ); + } else snprintf_dispatch( buf, end - buf, fmt, va_arg( args, void * ) ); break; case 'A': -- 2.29.2