changeset 7059:6a76cf980999

Improve error handling in osutil.c 1) In posix part set error when path is too long so instead of SystemError: error returned without exception set it will raise ValueError: path too long 2) In Win32 part replace generic PyErr_SetExcFromWindowsErrWithFilename by PyErr_SetFromWindowsErrWithFilename The exception returned is WinError(based on OSError) and some rudimentary errno translation is performed from Windows error range to errno module friendly range so errors like ENOENT can be handled via symbolic constant and consistently between Win32 and Posix.
author Petr Kodl <petrkodl@gmail.com>
date Wed, 01 Oct 2008 08:41:18 -0400
parents 9e6d6568bf7a
children 972cce34f345
files mercurial/osutil.c
diffstat 1 files changed, 5 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/osutil.c	Mon Sep 29 12:12:53 2008 +0200
+++ b/mercurial/osutil.c	Wed Oct 01 08:41:18 2008 -0400
@@ -207,9 +207,7 @@
 
 	fh = FindFirstFileA(pattern, &fd);
 	if (fh == INVALID_HANDLE_VALUE) {
-		PyErr_SetExcFromWindowsErrWithFilename(PyExc_OSError,
-							GetLastError(),
-							path);
+		PyErr_SetFromWindowsErrWithFilename(GetLastError(), path);
 		goto error_file;
 	}
 
@@ -244,9 +242,7 @@
 	} while (FindNextFileA(fh, &fd));
 
 	if (GetLastError() != ERROR_NO_MORE_FILES) {
-		PyErr_SetExcFromWindowsErrWithFilename(PyExc_OSError,
-							GetLastError(),
-							path);
+		PyErr_SetFromWindowsErrWithFilename(GetLastError(), path);
 		goto error;
 	}
 
@@ -294,9 +290,10 @@
 					 &path, &pathlen, &statflag, &skip))
 		goto error_parse;
 
-	if (pathlen >= PATH_MAX)
+	if (pathlen >= PATH_MAX) {
+		PyErr_SetString(PyExc_ValueError, "path too long");
 		goto error_parse;
-
+	}
 	strncpy(fullpath, path, PATH_MAX);
 	fullpath[pathlen] = '/';
 	keepstat = statflag && PyObject_IsTrue(statflag);