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

mhammond@users.sourceforge.net mhammond@users.sourceforge.net
Wed, 02 Oct 2002 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 */