static PyObject *load_module Py_PROTO((char *, FILE *, char *, int));
static struct filedescr *find_module Py_PROTO((char *, PyObject *,
char *, int, FILE **));
+static struct _frozen *find_frozen Py_PROTO((char *name));
/* Load a package and return its module object WITH INCREMENTED
REFERENCE COUNT */
return 0;
}
-/* Helper to test for frozen module */
-
-static int
-is_frozen(name)
- char *name;
-{
- struct _frozen *p;
- for (p = PyImport_FrozenModules; ; p++) {
- if (p->name == NULL)
- break;
- if (strcmp(p->name, name) == 0)
- return 1;
- }
- return 0;
-}
-
/* Search the path (default sys.path) for a module. Return the
corresponding filedescr struct, and (via return arguments) the
static struct filedescr fd = {"", "", C_BUILTIN};
return &fd;
}
- if (is_frozen(name)) {
+ if (find_frozen(name) != NULL) {
static struct filedescr fd = {"", "", PY_FROZEN};
return &fd;
}
else
err = PyImport_ImportFrozenModule(name);
if (err < 0)
- goto failure;
+ return NULL;
if (err == 0) {
PyErr_Format(PyExc_ImportError,
"Purported %s module %.200s not found",
type == C_BUILTIN ?
"builtin" : "frozen",
name);
- goto failure;
+ return NULL;
}
modules = PyImport_GetModuleDict();
m = PyDict_GetItemString(modules, name);
type == C_BUILTIN ?
"builtin" : "frozen",
name);
- goto failure;
+ return NULL;
}
Py_INCREF(m);
break;
default:
- failure:
PyErr_Format(PyExc_ImportError,
"Don't know how to import %.200s (type code %d)",
name, type);
char *name;
if (!PyArg_ParseTuple(args, "s", &name))
return NULL;
- return PyInt_FromLong(is_frozen(name));
+ return PyInt_FromLong(find_frozen(name) != NULL);
}
static FILE *