[Python-checkins] r82668 - python/branches/import_unicode/Python/import.c
victor.stinner
python-checkins at python.org
Fri Jul 9 01:32:17 CEST 2010
Author: victor.stinner
Date: Fri Jul 9 01:32:16 2010
New Revision: 82668
Log:
load_source_module(): path is now an object
instead of a char*
Modified:
python/branches/import_unicode/Python/import.c
Modified: python/branches/import_unicode/Python/import.c
==============================================================================
--- python/branches/import_unicode/Python/import.c (original)
+++ python/branches/import_unicode/Python/import.c Fri Jul 9 01:32:16 2010
@@ -1237,15 +1237,18 @@
byte-compiled file, use that instead. */
static PyObject *
-load_source_module(char *name, char *pathname, FILE *fp)
+load_source_module(char *name, PyObject *pathobj, FILE *fp)
{
struct stat st;
FILE *fpc;
char buf[MAXPATHLEN+1];
+ char *pathname;
char *cpathname;
PyCodeObject *co;
PyObject *m;
- PyObject *pathobj;
+
+ /* FIXME: don't use _PyUnicode_AsString */
+ pathname = _PyUnicode_AsString(pathobj);
if (fstat(fileno(fp), &st) != 0) {
PyErr_Format(PyExc_RuntimeError,
@@ -1266,21 +1269,21 @@
#endif
cpathname = make_compiled_pathname(
pathname, buf, (size_t)MAXPATHLEN + 1, !Py_OptimizeFlag);
- if (cpathname != NULL &&
- (fpc = check_compiled_module(pathname, st.st_mtime, cpathname))) {
+ if (cpathname != NULL)
+ fpc = check_compiled_module(pathname, st.st_mtime, cpathname);
+ else
+ fpc = NULL;
+ if (fpc) {
co = read_compiled_module(cpathname, fpc);
fclose(fpc);
if (co == NULL)
return NULL;
- pathobj = PyUnicode_DecodeFSDefault(pathname);
- if (pathobj == NULL)
- return NULL;
if (update_compiled_module(co, pathobj) < 0)
return NULL;
- Py_DECREF(pathobj);
if (Py_VerboseFlag)
PySys_WriteStderr("import %s # precompiled from %s\n",
name, cpathname);
+ pathobj = NULL;
pathname = cpathname;
}
else {
@@ -2035,9 +2038,14 @@
switch (type) {
- case PY_SOURCE:
- m = load_source_module(name, pathname, fp);
+ case PY_SOURCE: {
+ PyObject *pathobj = PyUnicode_DecodeFSDefault(pathname);
+ if (pathobj == NULL)
+ return NULL;
+ m = load_source_module(name, pathobj, fp);
+ Py_DECREF(pathobj);
break;
+ }
case PY_COMPILED:
m = load_compiled_module(name, pathname, fp);
@@ -3343,22 +3351,18 @@
imp_load_source(PyObject *self, PyObject *args)
{
char *name;
- char *pathname;
+ PyObject *pathname;
PyObject *fob = NULL;
PyObject *m;
FILE *fp;
- if (!PyArg_ParseTuple(args, "ses|O:load_source",
- &name,
- Py_FileSystemDefaultEncoding, &pathname,
- &fob))
+ if (!PyArg_ParseTuple(args, "sU|O:load_source",
+ &name, &pathname, &fob))
return NULL;
- fp = get_file(pathname, fob, "r");
- if (fp == NULL) {
- PyMem_Free(pathname);
+ /* FIXME: don't use _PyUnicode_AsString */
+ fp = get_file(_PyUnicode_AsString(pathname), fob, "r");
+ if (fp == NULL)
return NULL;
- }
m = load_source_module(name, pathname, fp);
- PyMem_Free(pathname);
fclose(fp);
return m;
}
More information about the Python-checkins
mailing list