diff options
Diffstat (limited to 'Python/traceback.c')
| -rw-r--r-- | Python/traceback.c | 22 | 
1 files changed, 12 insertions, 10 deletions
| diff --git a/Python/traceback.c b/Python/traceback.c index 74075c9..01e9473 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -13,7 +13,7 @@  #define OFF(x) offsetof(PyTracebackObject, x) -#define PUTS(fd, str) write(fd, str, strlen(str)) +#define PUTS(fd, str) write(fd, str, (int)strlen(str))  #define MAX_STRING_LENGTH 500  #define MAX_FRAME_DEPTH 100  #define MAX_NTHREADS 100 @@ -246,10 +246,12 @@ _Py_DisplaySourceLine(PyObject *f, PyObject *filename, int lineno, int indent)      binary = _PyObject_CallMethodId(io, &PyId_open, "Os", filename, "rb");      if (binary == NULL) { +        PyErr_Clear(); +          binary = _Py_FindSourceFile(filename, buf, sizeof(buf), io);          if (binary == NULL) {              Py_DECREF(io); -            return 0; +            return -1;          }      } @@ -469,13 +471,13 @@ dump_decimal(int fd, int value)      write(fd, buffer, len);  } -/* Format an integer in range [0; 0xffffffff] to hexdecimal of 'width' digits, +/* Format an integer in range [0; 0xffffffff] to hexadecimal of 'width' digits,     and write it into the file fd.     This function is signal safe. */  static void -dump_hexadecimal(int width, unsigned long value, int fd) +dump_hexadecimal(int fd, unsigned long value, int width)  {      int len;      char buffer[sizeof(unsigned long) * 2 + 1]; @@ -542,15 +544,15 @@ dump_ascii(int fd, PyObject *text)          }          else if (ch < 0xff) {              PUTS(fd, "\\x"); -            dump_hexadecimal(2, ch, fd); +            dump_hexadecimal(fd, ch, 2);          }          else if (ch < 0xffff) {              PUTS(fd, "\\u"); -            dump_hexadecimal(4, ch, fd); +            dump_hexadecimal(fd, ch, 4);          }          else {              PUTS(fd, "\\U"); -            dump_hexadecimal(8, ch, fd); +            dump_hexadecimal(fd, ch, 8);          }      }      if (truncated) @@ -601,7 +603,7 @@ dump_traceback(int fd, PyThreadState *tstate, int write_header)      unsigned int depth;      if (write_header) -        PUTS(fd, "Traceback (most recent call first):\n"); +        PUTS(fd, "Stack (most recent call first):\n");      frame = _PyThreadState_GetFrame(tstate);      if (frame == NULL) @@ -639,8 +641,8 @@ write_thread_id(int fd, PyThreadState *tstate, int is_current)          PUTS(fd, "Current thread 0x");      else          PUTS(fd, "Thread 0x"); -    dump_hexadecimal(sizeof(long)*2, (unsigned long)tstate->thread_id, fd); -    PUTS(fd, ":\n"); +    dump_hexadecimal(fd, (unsigned long)tstate->thread_id, sizeof(long)*2); +    PUTS(fd, " (most recent call first):\n");  }  const char* | 
