[Python-checkins] python/dist/src/Python errors.c,2.71,2.72

mhammond@users.sourceforge.net mhammond@users.sourceforge.net
2002年10月02日 22:10:41 -0700


Update of /cvsroot/python/python/dist/src/Python
In directory usw-pr-cvs1:/tmp/cvs-serv29768/Python
Modified Files:
	errors.c 
Log Message:
Patch 594001: PEP 277 - Unicode file name support for Windows NT.
Index: errors.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/errors.c,v
retrieving revision 2.71
retrieving revision 2.72
diff -C2 -d -r2.71 -r2.72
*** errors.c	29 Jul 2002 14:27:41 -0000	2.71
--- errors.c	3 Oct 2002 05:10:39 -0000	2.72
***************
*** 260,264 ****
 
 PyObject *
! PyErr_SetFromErrnoWithFilename(PyObject *exc, char *filename)
 {
 	PyObject *v;
--- 260,264 ----
 
 PyObject *
! PyErr_SetFromErrnoWithFilenameObject(PyObject *exc, PyObject *filenameObject)
 {
 	PyObject *v;
***************
*** 315,320 ****
 #endif /* Unix/Windows */
 #endif /* PLAN 9*/
! 	if (filename != NULL)
! 		v = Py_BuildValue("(iss)", i, s, filename);
 	else
 		v = Py_BuildValue("(is)", i, s);
--- 315,320 ----
 #endif /* Unix/Windows */
 #endif /* PLAN 9*/
! 	if (filenameObject != NULL)
! 		v = Py_BuildValue("(isO)", i, s, filenameObject);
 	else
 		v = Py_BuildValue("(is)", i, s);
***************
*** 331,345 ****
 
 PyObject *
 PyErr_SetFromErrno(PyObject *exc)
 {
! 	return PyErr_SetFromErrnoWithFilename(exc, NULL);
 }
 
 #ifdef MS_WINDOWS 
 /* Windows specific error code handling */
! PyObject *PyErr_SetExcFromWindowsErrWithFilename(
 	PyObject *exc,
 	int ierr,
! 	const char *filename)
 {
 	int len;
--- 331,367 ----
 
 PyObject *
+ PyErr_SetFromErrnoWithFilename(PyObject *exc, char *filename)
+ {
+ 	PyObject *name = filename ? PyString_FromString(filename) : NULL;
+ 	PyObject *result = PyErr_SetFromErrnoWithFilenameObject(exc, name);
+ 	Py_DECREF(name);
+ 	return result;
+ }
+ 
+ #ifdef Py_WIN_WIDE_FILENAMES
+ PyObject *
+ PyErr_SetFromErrnoWithUnicodeFilename(PyObject *exc, Py_UNICODE *filename)
+ {
+ 	PyObject *name = filename ? 
+ 	 PyUnicode_FromUnicode(filename, wcslen(filename)) : 
+ 	 NULL;
+ 	PyObject *result = PyErr_SetFromErrnoWithFilenameObject(exc, name);
+ 	Py_XDECREF(name);
+ 	return result;
+ }
+ #endif /* Py_WIN_WIDE_FILENAMES */
+ 
+ PyObject *
 PyErr_SetFromErrno(PyObject *exc)
 {
! 	return PyErr_SetFromErrnoWithFilenameObject(exc, NULL);
 }
 
 #ifdef MS_WINDOWS 
 /* Windows specific error code handling */
! PyObject *PyErr_SetExcFromWindowsErrWithFilenameObject(
 	PyObject *exc,
 	int ierr,
! 	PyObject *filenameObject)
 {
 	int len;
***************
*** 363,368 ****
 	while (len > 0 && (s[len-1] <= ' ' || s[len-1] == '.'))
 		s[--len] = '0円';
! 	if (filename != NULL)
! 		v = Py_BuildValue("(iss)", err, s, filename);
 	else
 		v = Py_BuildValue("(is)", err, s);
--- 385,390 ----
 	while (len > 0 && (s[len-1] <= ' ' || s[len-1] == '.'))
 		s[--len] = '0円';
! 	if (filenameObject != NULL)
! 		v = Py_BuildValue("(isO)", err, s, filenameObject);
 	else
 		v = Py_BuildValue("(is)", err, s);
***************
*** 375,378 ****
--- 397,430 ----
 }
 
+ PyObject *PyErr_SetExcFromWindowsErrWithFilename(
+ 	PyObject *exc,
+ 	int ierr,
+ 	const char *filename)
+ {
+ 	PyObject *name = filename ? PyString_FromString(filename) : NULL;
+ 	PyObject *ret = PyErr_SetExcFromWindowsErrWithFilenameObject(exc, 
+ 	 ierr, 
+ 	 name);
+ 	Py_XDECREF(name);
+ 	return ret;
+ }
+ 
+ #ifdef Py_WIN_WIDE_FILENAMES
+ PyObject *PyErr_SetExcFromWindowsErrWithUnicodeFilename(
+ 	PyObject *exc,
+ 	int ierr,
+ 	const Py_UNICODE *filename)
+ {
+ 	PyObject *name = filename ? 
+ 	 PyUnicode_FromUnicode(filename, wcslen(filename)) : 
+ 	 NULL;
+ 	PyObject *ret = PyErr_SetExcFromWindowsErrWithFilenameObject(exc, 
+ 	 ierr, 
+ 	 name);
+ 	Py_XDECREF(name);
+ 	return ret;
+ }
+ #endif /* Py_WIN_WIDE_FILENAMES */
+ 
 PyObject *PyErr_SetExcFromWindowsErr(PyObject *exc, int ierr)
 {
***************
*** 389,395 ****
 	const char *filename)
 {
! 	return PyErr_SetExcFromWindowsErrWithFilename(PyExc_WindowsError,
! 						 ierr, filename);
 }
 #endif /* MS_WINDOWS */
 
--- 441,467 ----
 	const char *filename)
 {
! 	PyObject *name = filename ? PyString_FromString(filename) : NULL;
! 	PyObject *result = PyErr_SetExcFromWindowsErrWithFilenameObject(
! 						 PyExc_WindowsError,
! 						 ierr, name);
! 	Py_XDECREF(result);
! 	return result;
 }
+ 
+ #ifdef Py_WIN_WIDE_FILENAMES
+ PyObject *PyErr_SetFromWindowsErrWithUnicodeFilename(
+ 	int ierr,
+ 	const Py_UNICODE *filename)
+ {
+ 	PyObject *name = filename ? 
+ 	 PyUnicode_FromUnicode(filename, wcslen(filename)) : 
+ 	 NULL;
+ 	PyObject *result = PyErr_SetExcFromWindowsErrWithFilenameObject(
+ 						 PyExc_WindowsError,
+ 						 ierr, name);
+ 	Py_XDECREF(result);
+ 	return result;
+ }
+ #endif /* Py_WIN_WIDE_FILENAMES */
 #endif /* MS_WINDOWS */
 

AltStyle によって変換されたページ (->オリジナル) /