]> granicus.if.org Git - python/commitdiff
Issue #23848: Expose _Py_DumpHexadecimal()
authorVictor Stinner <victor.stinner@gmail.com>
Wed, 23 Mar 2016 09:32:26 +0000 (10:32 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Wed, 23 Mar 2016 09:32:26 +0000 (10:32 +0100)
This function will be reused by faulthandler.

Include/traceback.h
Python/traceback.c

index 76e169a312b4e9a75a1ef8295b55a452a645db53..f767ea84cdd18a040a2a12ff256e5626c2634394 100644 (file)
@@ -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 */
 
index 403dba578622c7cfbd6f0fc867fee21af80daef0..32594823977c054ffe8cc264ee558818f8dd9cbe 100644 (file)
@@ -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,9 +694,9 @@ write_thread_id(int fd, PyThreadState *tstate, int is_current)
         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");
 }