mirror of
https://github.com/python/cpython.git
synced 2025-08-23 10:16:01 +00:00
gh-127604: Replace dprintf() with _Py_write_noraise() (#132854)
This commit is contained in:
parent
99b13775da
commit
402dba2928
1 changed files with 52 additions and 16 deletions
|
@ -842,11 +842,11 @@ _Py_DumpDecimal(int fd, size_t value)
|
|||
|
||||
/* Format an integer as hexadecimal with width digits into fd file descriptor.
|
||||
The function is signal safe. */
|
||||
void
|
||||
_Py_DumpHexadecimal(int fd, uintptr_t value, Py_ssize_t width)
|
||||
static void
|
||||
dump_hexadecimal(int fd, uintptr_t value, Py_ssize_t width, int strip_zeros)
|
||||
{
|
||||
char buffer[sizeof(uintptr_t) * 2 + 1], *ptr, *end;
|
||||
const Py_ssize_t size = Py_ARRAY_LENGTH(buffer) - 1;
|
||||
Py_ssize_t size = Py_ARRAY_LENGTH(buffer) - 1;
|
||||
|
||||
if (width > size)
|
||||
width = size;
|
||||
|
@ -862,7 +862,35 @@ _Py_DumpHexadecimal(int fd, uintptr_t value, Py_ssize_t width)
|
|||
value >>= 4;
|
||||
} while ((end - ptr) < width || value);
|
||||
|
||||
(void)_Py_write_noraise(fd, ptr, end - ptr);
|
||||
size = end - ptr;
|
||||
if (strip_zeros) {
|
||||
while (*ptr == '0' && size >= 2) {
|
||||
ptr++;
|
||||
size--;
|
||||
}
|
||||
}
|
||||
|
||||
(void)_Py_write_noraise(fd, ptr, size);
|
||||
}
|
||||
|
||||
void
|
||||
_Py_DumpHexadecimal(int fd, uintptr_t value, Py_ssize_t width)
|
||||
{
|
||||
dump_hexadecimal(fd, value, width, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
dump_pointer(int fd, void *ptr)
|
||||
{
|
||||
PUTS(fd, "0x");
|
||||
dump_hexadecimal(fd, (uintptr_t)ptr, sizeof(void*), 1);
|
||||
}
|
||||
|
||||
static void
|
||||
dump_char(int fd, char ch)
|
||||
{
|
||||
char buf[1] = {ch};
|
||||
(void)_Py_write_noraise(fd, buf, 1);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -924,8 +952,7 @@ _Py_DumpASCII(int fd, PyObject *text)
|
|||
ch = PyUnicode_READ(kind, data, i);
|
||||
if (' ' <= ch && ch <= 126) {
|
||||
/* printable ASCII character */
|
||||
char c = (char)ch;
|
||||
(void)_Py_write_noraise(fd, &c, 1);
|
||||
dump_char(fd, (char)ch);
|
||||
}
|
||||
else if (ch <= 0xff) {
|
||||
PUTS(fd, "\\x");
|
||||
|
@ -1227,7 +1254,9 @@ _Py_backtrace_symbols_fd(int fd, void *const *array, Py_ssize_t size)
|
|||
|| info[i].dli_fname == NULL
|
||||
|| info[i].dli_fname[0] == '\0'
|
||||
) {
|
||||
dprintf(fd, " Binary file '<unknown>' [%p]\n", array[i]);
|
||||
PUTS(fd, " Binary file '<unknown>' [");
|
||||
dump_pointer(fd, array[i]);
|
||||
PUTS(fd, "]\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -1237,11 +1266,12 @@ _Py_backtrace_symbols_fd(int fd, void *const *array, Py_ssize_t size)
|
|||
info[i].dli_saddr = info[i].dli_fbase;
|
||||
}
|
||||
|
||||
if (info[i].dli_sname == NULL
|
||||
&& info[i].dli_saddr == 0) {
|
||||
dprintf(fd, " Binary file \"%s\" [%p]\n",
|
||||
info[i].dli_fname,
|
||||
array[i]);
|
||||
if (info[i].dli_sname == NULL && info[i].dli_saddr == 0) {
|
||||
PUTS(fd, " Binary file \"");
|
||||
PUTS(fd, info[i].dli_fname);
|
||||
PUTS(fd, "\" [");
|
||||
dump_pointer(fd, array[i]);
|
||||
PUTS(fd, "]\n");
|
||||
}
|
||||
else {
|
||||
char sign;
|
||||
|
@ -1255,10 +1285,16 @@ _Py_backtrace_symbols_fd(int fd, void *const *array, Py_ssize_t size)
|
|||
offset = info[i].dli_saddr - array[i];
|
||||
}
|
||||
const char *symbol_name = info[i].dli_sname != NULL ? info[i].dli_sname : "";
|
||||
dprintf(fd, " Binary file \"%s\", at %s%c%#tx [%p]\n",
|
||||
info[i].dli_fname,
|
||||
symbol_name,
|
||||
sign, offset, array[i]);
|
||||
PUTS(fd, " Binary file \"");
|
||||
PUTS(fd, info[i].dli_fname);
|
||||
PUTS(fd, "\", at ");
|
||||
PUTS(fd, symbol_name);
|
||||
dump_char(fd, sign);
|
||||
PUTS(fd, "0x");
|
||||
dump_hexadecimal(fd, offset, sizeof(offset), 1);
|
||||
PUTS(fd, " [");
|
||||
dump_pointer(fd, array[i]);
|
||||
PUTS(fd, "]\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue