diff options
author | Guido van Rossum <guido@python.org> | 1999-04-21 15:27:31 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1999-04-21 15:27:31 (GMT) |
commit | 743007d2fe6c7ceb5232c2b9e4dbaeb232635dce (patch) | |
tree | ce5176ad0c5dcb6b89904ba18b0460b8b3bbc46d /Python | |
parent | 085b8121eb04b6f563b23784f5761f579ed22b3d (diff) | |
download | cpython-743007d2fe6c7ceb5232c2b9e4dbaeb232635dce.zip cpython-743007d2fe6c7ceb5232c2b9e4dbaeb232635dce.tar.gz cpython-743007d2fe6c7ceb5232c2b9e4dbaeb232635dce.tar.bz2 |
Patch by Christian Tismer for Win32, to use FormatMessage() instead of
strerror(). This improves the quality of the error messages.
Diffstat (limited to 'Python')
-rw-r--r-- | Python/errors.c | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/Python/errors.c b/Python/errors.c index f2768ee..cb0503b 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -49,6 +49,11 @@ extern char *strerror Py_PROTO((int)); #endif #endif +#ifdef MS_WIN32 +#include "windows.h" +#include "winbase.h" +#endif + void PyErr_Restore(type, value, traceback) PyObject *type; @@ -142,7 +147,7 @@ PyErr_GivenExceptionMatches(err, exc) return err == exc; } - + int PyErr_ExceptionMatches(exc) @@ -291,7 +296,26 @@ PyErr_SetFromErrnoWithFilename(exc, filename) if (i == 0) s = "Error"; /* Sometimes errno didn't get set */ else +#ifndef MS_WIN32 s = strerror(i); +#else + { + int len = FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, /* no message source */ + i, + MAKELANGID(LANG_NEUTRAL, + SUBLANG_DEFAULT), /* Default language */ + (LPTSTR) &s, + 0, /* size not used */ + NULL); /* no args */ + /* remove trailing cr/lf and dots */ + while (len > 0 && s[len-1] <= '.') + s[--len] = '\0'; + } +#endif if (filename != NULL && Py_UseClassExceptionsFlag) v = Py_BuildValue("(iss)", i, s, filename); else @@ -300,9 +324,12 @@ PyErr_SetFromErrnoWithFilename(exc, filename) PyErr_SetObject(exc, v); Py_DECREF(v); } +#ifdef MS_WIN32 + LocalFree(s); +#endif return NULL; } - + PyObject * PyErr_SetFromErrno(exc) |