Issue #23848: Expose _Py_DumpHexadecimal()
This function will be reused by faulthandler.
This commit is contained in:
parent
5dacbd4c42
commit
bd31b7c483
|
@ -94,7 +94,20 @@ PyAPI_FUNC(void) _Py_DumpASCII(int fd, PyObject *text);
|
|||
/* Format an integer as decimal into the file descriptor fd.
|
||||
|
||||
This function is signal safe. */
|
||||
PyAPI_FUNC(void) _Py_DumpDecimal(int fd, unsigned long value);
|
||||
PyAPI_FUNC(void) _Py_DumpDecimal(
|
||||
int fd,
|
||||
unsigned long value);
|
||||
|
||||
/* Format an integer as hexadecimal into the file descriptor fd with at least
|
||||
width digits.
|
||||
|
||||
The maximum width is sizeof(unsigned long)*2 digits.
|
||||
|
||||
This function is signal safe. */
|
||||
PyAPI_FUNC(void) _Py_DumpHexadecimal(
|
||||
int fd,
|
||||
unsigned long value,
|
||||
Py_ssize_t width);
|
||||
|
||||
#endif /* !Py_LIMITED_API */
|
||||
|
||||
|
|
|
@ -506,14 +506,15 @@ _Py_DumpDecimal(int fd, unsigned long value)
|
|||
|
||||
This function is signal safe. */
|
||||
|
||||
static void
|
||||
dump_hexadecimal(int fd, unsigned long value, Py_ssize_t width)
|
||||
void
|
||||
_Py_DumpHexadecimal(int fd, unsigned long value, Py_ssize_t width)
|
||||
{
|
||||
char buffer[sizeof(unsigned long) * 2 + 1], *ptr, *end;
|
||||
const Py_ssize_t size = Py_ARRAY_LENGTH(buffer) - 1;
|
||||
|
||||
if (width > size)
|
||||
width = size;
|
||||
/* it's ok if width is negative */
|
||||
|
||||
end = &buffer[size];
|
||||
ptr = end;
|
||||
|
@ -582,15 +583,15 @@ _Py_DumpASCII(int fd, PyObject *text)
|
|||
}
|
||||
else if (ch <= 0xff) {
|
||||
PUTS(fd, "\\x");
|
||||
dump_hexadecimal(fd, ch, 2);
|
||||
_Py_DumpHexadecimal(fd, ch, 2);
|
||||
}
|
||||
else if (ch <= 0xffff) {
|
||||
PUTS(fd, "\\u");
|
||||
dump_hexadecimal(fd, ch, 4);
|
||||
_Py_DumpHexadecimal(fd, ch, 4);
|
||||
}
|
||||
else {
|
||||
PUTS(fd, "\\U");
|
||||
dump_hexadecimal(fd, ch, 8);
|
||||
_Py_DumpHexadecimal(fd, ch, 8);
|
||||
}
|
||||
}
|
||||
if (truncated) {
|
||||
|
@ -693,7 +694,7 @@ write_thread_id(int fd, PyThreadState *tstate, int is_current)
|
|||
PUTS(fd, "Current thread 0x");
|
||||
else
|
||||
PUTS(fd, "Thread 0x");
|
||||
dump_hexadecimal(fd,
|
||||
_Py_DumpHexadecimal(fd,
|
||||
(unsigned long)tstate->thread_id,
|
||||
sizeof(unsigned long) * 2);
|
||||
PUTS(fd, " (most recent call first):\n");
|
||||
|
|
Loading…
Reference in New Issue