const char *charset;
int bootstrap;
- if (PyUnicode_GET_SIZE(archive_obj) > MAXPATHLEN) {
- PyErr_SetString(PyExc_OverflowError,
- "Zip path name is too long");
- return NULL;
- }
- Py_UNICODE_strcpy(path, PyUnicode_AS_UNICODE(archive_obj));
-
- fp = _Py_fopen(archive_obj, "rb");
+ fp = _Py_fopen(archive, "rb");
if (fp == NULL) {
- PyErr_Format(ZipImportError, "can't open Zip file: %R", archive);
+ if (!PyErr_Occurred())
- PyErr_Format(ZipImportError, "can't open Zip file: '%U'", archive_obj);
++ PyErr_Format(ZipImportError, "can't open Zip file: %R", archive);
return NULL;
}
fseek(fp, -22, SEEK_END);
if (mode[0] == 'U')
mode = "r" PY_STDIOTEXTMODE;
if (fob == NULL) {
- fp = fopen(pathname, mode);
+ fp = _Py_fopen(pathname, mode);
++ if (!fp) {
++ if (!PyErr_Occurred())
++ PyErr_SetFromErrno(PyExc_IOError);
++ return NULL;
++ }
++ return fp;
}
else {
int fd = PyObject_AsFileDescriptor(fob);
if (fd == -1)
return NULL;
-- if (!_PyVerify_fd(fd))
-- goto error;
++ if (!_PyVerify_fd(fd)) {
++ PyErr_SetFromErrno(PyExc_IOError);
++ return NULL;
++ }
++
/* the FILE struct gets a new fd, so that it can be closed
* independently of the file descriptor given
*/
fd = dup(fd);
-- if (fd == -1)
-- goto error;
++ if (fd == -1) {
++ PyErr_SetFromErrno(PyExc_IOError);
++ return NULL;
++ }
++
fp = fdopen(fd, mode);
-- }
-- if (fp)
++ if (!fp) {
++ PyErr_SetFromErrno(PyExc_IOError);
++ return NULL;
++ }
return fp;
--error:
-- PyErr_SetFromErrno(PyExc_IOError);
-- return NULL;
++ }
}
static PyObject *