[Python-checkins] cpython: Issue #23848: Expose _Py_DumpHexadecimal()
victor.stinner
python-checkins at python.org
Wed Mar 23 06:23:55 EDT 2016
https://hg.python.org/cpython/rev/b2f7bb63377b
changeset: 100678:b2f7bb63377b
user: Victor Stinner <victor.stinner at gmail.com>
date: Wed Mar 23 10:32:26 2016 +0100
summary:
Issue #23848: Expose _Py_DumpHexadecimal()
This function will be reused by faulthandler.
files:
Include/traceback.h | 15 ++++++++++++++-
Python/traceback.c | 17 +++++++++--------
2 files changed, 23 insertions(+), 9 deletions(-)
diff --git a/Include/traceback.h b/Include/traceback.h
--- a/Include/traceback.h
+++ b/Include/traceback.h
@@ -94,7 +94,20 @@
/* 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 */
diff --git a/Python/traceback.c b/Python/traceback.c
--- a/Python/traceback.c
+++ b/Python/traceback.c
@@ -506,14 +506,15 @@
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 @@
}
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,9 +694,9 @@
PUTS(fd, "Current thread 0x");
else
PUTS(fd, "Thread 0x");
- dump_hexadecimal(fd,
- (unsigned long)tstate->thread_id,
- sizeof(unsigned long) * 2);
+ _Py_DumpHexadecimal(fd,
+ (unsigned long)tstate->thread_id,
+ sizeof(unsigned long) * 2);
PUTS(fd, " (most recent call first):\n");
}
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list