diff options
| author | Guido van Rossum <guido@python.org> | 1999-04-21 15:27:31 +0000 | 
|---|---|---|
| committer | Guido van Rossum <guido@python.org> | 1999-04-21 15:27:31 +0000 | 
| commit | 743007d2fe6c7ceb5232c2b9e4dbaeb232635dce (patch) | |
| tree | ce5176ad0c5dcb6b89904ba18b0460b8b3bbc46d /Python/errors.c | |
| parent | 085b8121eb04b6f563b23784f5761f579ed22b3d (diff) | |
| download | cpython-git-743007d2fe6c7ceb5232c2b9e4dbaeb232635dce.tar.gz | |
Patch by Christian Tismer for Win32, to use FormatMessage() instead of
strerror().  This improves the quality of the error messages.
Diffstat (limited to 'Python/errors.c')
| -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 f2768ee43d..cb0503b402 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)  | 
