blob: 88908a96ae4a6fd9ade7926257ee8539c1f6e517 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001/***********************************************************
Guido van Rossum6d023c91995-01-04 19:12:13 +00002Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
3The Netherlands.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00004
5 All Rights Reserved
6
Guido van Rossumd266eb41996-10-25 14:44:06 +00007Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
Guido van Rossumf70e43a1991-02-19 12:39:46 +00009provided that the above copyright notice appear in all copies and that
Guido van Rossumd266eb41996-10-25 14:44:06 +000010both that copyright notice and this permission notice appear in
Guido van Rossumf70e43a1991-02-19 12:39:46 +000011supporting documentation, and that the names of Stichting Mathematisch
Guido van Rossumd266eb41996-10-25 14:44:06 +000012Centrum or CWI or Corporation for National Research Initiatives or
13CNRI not be used in advertising or publicity pertaining to
14distribution of the software without specific, written prior
15permission.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000016
Guido van Rossumd266eb41996-10-25 14:44:06 +000017While CWI is the initial source for this software, a modified version
18is made available by the Corporation for National Research Initiatives
19(CNRI) at the Internet address ftp://ftp.python.org.
20
21STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28PERFORMANCE OF THIS SOFTWARE.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000029
30******************************************************************/
31
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000032/* Module definition and import implementation */
33
Guido van Rossum79f25d91997-04-29 20:08:16 +000034#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000035
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000036#include "node.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000037#include "token.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000038#include "errcode.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000039#include "marshal.h"
40#include "compile.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000041#include "eval.h"
Guido van Rossumd8bac6d1992-02-26 15:19:13 +000042#include "osdefs.h"
Guido van Rossum1ae940a1995-01-02 19:04:15 +000043#include "importdl.h"
Jack Jansen9c96a921995-02-15 22:57:06 +000044#ifdef macintosh
45#include "macglue.h"
46#endif
Guido van Rossumc405b7b1991-06-04 19:39:42 +000047
Guido van Rossum80bb9651996-12-05 23:27:02 +000048#ifdef HAVE_UNISTD_H
49#include <unistd.h>
50#endif
51
Guido van Rossumaee0bad1997-09-05 07:33:22 +000052/* We expect that stat exists on most systems.
53 It's confirmed on Unix, Mac and Windows.
54 If you don't have it, add #define DONT_HAVE_STAT to your config.h. */
55#ifndef DONT_HAVE_STAT
56#define HAVE_STAT
57
Guido van Rossum2571cc81999-04-07 16:07:23 +000058#ifndef DONT_HAVE_SYS_TYPES_H
Guido van Rossumaee0bad1997-09-05 07:33:22 +000059#include <sys/types.h>
Guido van Rossum2571cc81999-04-07 16:07:23 +000060#endif
61#ifndef DONT_HAVE_SYS_STAT_H
Guido van Rossumaee0bad1997-09-05 07:33:22 +000062#include <sys/stat.h>
Guido van Rossum2571cc81999-04-07 16:07:23 +000063#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +000064
Guido van Rossum595d7ba1997-12-05 21:45:29 +000065#if defined(PYCC_VACPP)
66/* VisualAge C/C++ Failed to Define MountType Field in sys/stat.h */
67#define S_IFMT (S_IFDIR|S_IFCHR|S_IFREG)
68#endif
69
Guido van Rossumaee0bad1997-09-05 07:33:22 +000070#ifndef S_ISDIR
71#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
72#endif
73
74#endif
75
76
Guido van Rossum79f25d91997-04-29 20:08:16 +000077extern long PyOS_GetLastModificationTime(); /* In getmtime.c */
Guido van Rossum21d335e1993-10-15 13:01:11 +000078
Guido van Rossum6c849691994-09-26 15:47:17 +000079/* Magic word to reject .pyc files generated by other Python versions */
Guido van Rossum7faeab31995-07-07 22:50:36 +000080/* Change for each incompatible change */
81/* The value of CR and LF is incorporated so if you ever read or write
82 a .pyc file in text mode the magic number will be wrong; also, the
83 Apple MPW compiler swaps their values, botching string constants */
84/* XXX Perhaps the magic number should be frozen and a version field
85 added to the .pyc file header? */
Guido van Rossumdd5db431997-01-17 21:06:11 +000086/* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */
Guido van Rossum99d18251997-01-24 03:44:53 +000087#define MAGIC (20121 | ((long)'\r'<<16) | ((long)'\n'<<24))
Guido van Rossum3ddee711991-12-16 13:06:34 +000088
Guido van Rossum25ce5661997-08-02 03:10:38 +000089/* See _PyImport_FixupExtension() below */
90static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000091
Guido van Rossum771c6c81997-10-31 18:37:24 +000092/* This table is defined in config.c: */
93extern struct _inittab _PyImport_Inittab[];
94
95struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +000096
Guido van Rossumed1170e1999-12-20 21:23:41 +000097/* these tables define the module suffixes that Python recognizes */
98struct filedescr * _PyImport_Filetab = NULL;
99static const struct filedescr _PyImport_StandardFiletab[] = {
100 {".py", "r", PY_SOURCE},
101 {".pyc", "rb", PY_COMPILED},
102 {0, 0}
103};
104
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000105/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000106
107void
Guido van Rossum25ce5661997-08-02 03:10:38 +0000108_PyImport_Init()
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000109{
Guido van Rossumed1170e1999-12-20 21:23:41 +0000110 const struct filedescr *scan;
111 struct filedescr *filetab;
112 int countD = 0;
113 int countS = 0;
114
115 /* prepare _PyImport_Filetab: copy entries from
116 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
117 */
118 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
119 ++countD;
120 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
121 ++countS;
122 filetab = malloc((countD + countS + 1) * sizeof(struct filedescr));
123 memcpy(filetab, _PyImport_DynLoadFiletab,
124 countD * sizeof(struct filedescr));
125 memcpy(filetab + countD, _PyImport_StandardFiletab,
126 countS * sizeof(struct filedescr));
127 filetab[countD + countS].suffix = NULL;
128
129 _PyImport_Filetab = filetab;
130
Guido van Rossum0824f631997-03-11 18:37:35 +0000131 if (Py_OptimizeFlag) {
Guido van Rossumed1170e1999-12-20 21:23:41 +0000132 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
133 for (; filetab->suffix != NULL; filetab++) {
134 if (strcmp(filetab->suffix, ".pyc") == 0)
135 filetab->suffix = ".pyo";
Guido van Rossum0824f631997-03-11 18:37:35 +0000136 }
137 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000138}
139
Guido van Rossum25ce5661997-08-02 03:10:38 +0000140void
141_PyImport_Fini()
142{
143 Py_XDECREF(extensions);
144 extensions = NULL;
145}
146
147
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000148/* Locking primitives to prevent parallel imports of the same module
149 in different threads to return with a partially loaded module.
150 These calls are serialized by the global interpreter lock. */
151
152#ifdef WITH_THREAD
153
Guido van Rossum49b56061998-10-01 20:42:43 +0000154#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000155
Guido van Rossum65d5b571998-12-21 19:32:43 +0000156static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000157static long import_lock_thread = -1;
158static int import_lock_level = 0;
159
160static void
161lock_import()
162{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000163 long me = PyThread_get_thread_ident();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000164 if (me == -1)
165 return; /* Too bad */
166 if (import_lock == NULL)
Guido van Rossum65d5b571998-12-21 19:32:43 +0000167 import_lock = PyThread_allocate_lock();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000168 if (import_lock_thread == me) {
169 import_lock_level++;
170 return;
171 }
Guido van Rossum65d5b571998-12-21 19:32:43 +0000172 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0)) {
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000173 PyThreadState *tstate = PyEval_SaveThread();
Guido van Rossum65d5b571998-12-21 19:32:43 +0000174 PyThread_acquire_lock(import_lock, 1);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000175 PyEval_RestoreThread(tstate);
176 }
177 import_lock_thread = me;
178 import_lock_level = 1;
179}
180
181static void
182unlock_import()
183{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000184 long me = PyThread_get_thread_ident();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000185 if (me == -1)
186 return; /* Too bad */
187 if (import_lock_thread != me)
188 Py_FatalError("unlock_import: not holding the import lock");
189 import_lock_level--;
190 if (import_lock_level == 0) {
191 import_lock_thread = -1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000192 PyThread_release_lock(import_lock);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000193 }
194}
195
196#else
197
198#define lock_import()
199#define unlock_import()
200
201#endif
202
Guido van Rossum25ce5661997-08-02 03:10:38 +0000203/* Helper for sys */
204
205PyObject *
206PyImport_GetModuleDict()
207{
208 PyInterpreterState *interp = PyThreadState_Get()->interp;
209 if (interp->modules == NULL)
210 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
211 return interp->modules;
212}
213
Guido van Rossum3f5da241990-12-20 15:06:42 +0000214
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000215/* List of names to clear in sys */
216static char* sys_deletes[] = {
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000217 "path", "argv", "ps1", "ps2", "exitfunc",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000218 "exc_type", "exc_value", "exc_traceback",
219 "last_type", "last_value", "last_traceback",
220 NULL
221};
222
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000223static char* sys_files[] = {
224 "stdin", "__stdin__",
225 "stdout", "__stdout__",
226 "stderr", "__stderr__",
227 NULL
228};
229
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000230
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000231/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000232
Guido van Rossum3f5da241990-12-20 15:06:42 +0000233void
Guido van Rossum79f25d91997-04-29 20:08:16 +0000234PyImport_Cleanup()
Guido van Rossum3f5da241990-12-20 15:06:42 +0000235{
Guido van Rossum758eec01998-01-19 21:58:26 +0000236 int pos, ndone;
237 char *name;
238 PyObject *key, *value, *dict;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000239 PyInterpreterState *interp = PyThreadState_Get()->interp;
Guido van Rossum758eec01998-01-19 21:58:26 +0000240 PyObject *modules = interp->modules;
241
242 if (modules == NULL)
243 return; /* Already done */
244
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000245 /* Delete some special variables first. These are common
246 places where user values hide and people complain when their
247 destructors fail. Since the modules containing them are
248 deleted *last* of all, they would come too late in the normal
249 destruction order. Sigh. */
250
251 value = PyDict_GetItemString(modules, "__builtin__");
252 if (value != NULL && PyModule_Check(value)) {
253 dict = PyModule_GetDict(value);
254 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000255 PySys_WriteStderr("# clear __builtin__._\n");
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000256 PyDict_SetItemString(dict, "_", Py_None);
257 }
258 value = PyDict_GetItemString(modules, "sys");
259 if (value != NULL && PyModule_Check(value)) {
260 char **p;
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000261 PyObject *v;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000262 dict = PyModule_GetDict(value);
263 for (p = sys_deletes; *p != NULL; p++) {
264 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000265 PySys_WriteStderr("# clear sys.%s\n", *p);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000266 PyDict_SetItemString(dict, *p, Py_None);
267 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000268 for (p = sys_files; *p != NULL; p+=2) {
269 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000270 PySys_WriteStderr("# restore sys.%s\n", *p);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000271 v = PyDict_GetItemString(dict, *(p+1));
272 if (v == NULL)
273 v = Py_None;
274 PyDict_SetItemString(dict, *p, v);
275 }
276 }
277
278 /* First, delete __main__ */
279 value = PyDict_GetItemString(modules, "__main__");
280 if (value != NULL && PyModule_Check(value)) {
281 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000282 PySys_WriteStderr("# cleanup __main__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000283 _PyModule_Clear(value);
284 PyDict_SetItemString(modules, "__main__", Py_None);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000285 }
286
Guido van Rossum758eec01998-01-19 21:58:26 +0000287 /* The special treatment of __builtin__ here is because even
288 when it's not referenced as a module, its dictionary is
289 referenced by almost every module's __builtins__. Since
290 deleting a module clears its dictionary (even if there are
291 references left to it), we need to delete the __builtin__
292 module last. Likewise, we don't delete sys until the very
293 end because it is implicitly referenced (e.g. by print).
294
295 Also note that we 'delete' modules by replacing their entry
296 in the modules dict with None, rather than really deleting
297 them; this avoids a rehash of the modules dictionary and
298 also marks them as "non existent" so they won't be
299 re-imported. */
300
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000301 /* Next, repeatedly delete modules with a reference count of
Guido van Rossum758eec01998-01-19 21:58:26 +0000302 one (skipping __builtin__ and sys) and delete them */
303 do {
304 ndone = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000305 pos = 0;
Guido van Rossum758eec01998-01-19 21:58:26 +0000306 while (PyDict_Next(modules, &pos, &key, &value)) {
307 if (value->ob_refcnt != 1)
308 continue;
Guido van Rossum566373e1998-10-01 15:24:50 +0000309 if (PyString_Check(key) && PyModule_Check(value)) {
310 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000311 if (strcmp(name, "__builtin__") == 0)
312 continue;
313 if (strcmp(name, "sys") == 0)
314 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000315 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000316 PySys_WriteStderr(
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000317 "# cleanup[1] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000318 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000319 PyDict_SetItem(modules, key, Py_None);
320 ndone++;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000321 }
322 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000323 } while (ndone > 0);
324
Guido van Rossum758eec01998-01-19 21:58:26 +0000325 /* Next, delete all modules (still skipping __builtin__ and sys) */
326 pos = 0;
327 while (PyDict_Next(modules, &pos, &key, &value)) {
Guido van Rossum566373e1998-10-01 15:24:50 +0000328 if (PyString_Check(key) && PyModule_Check(value)) {
329 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000330 if (strcmp(name, "__builtin__") == 0)
331 continue;
332 if (strcmp(name, "sys") == 0)
333 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000334 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000335 PySys_WriteStderr("# cleanup[2] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000336 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000337 PyDict_SetItem(modules, key, Py_None);
338 }
339 }
340
341 /* Next, delete sys and __builtin__ (in that order) */
342 value = PyDict_GetItemString(modules, "sys");
343 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000344 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000345 PySys_WriteStderr("# cleanup sys\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000346 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000347 PyDict_SetItemString(modules, "sys", Py_None);
348 }
349 value = PyDict_GetItemString(modules, "__builtin__");
350 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000351 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000352 PySys_WriteStderr("# cleanup __builtin__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000353 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000354 PyDict_SetItemString(modules, "__builtin__", Py_None);
355 }
356
357 /* Finally, clear and delete the modules directory */
358 PyDict_Clear(modules);
359 interp->modules = NULL;
360 Py_DECREF(modules);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000361}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000362
363
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000364/* Helper for pythonrun.c -- return magic number */
365
366long
Guido van Rossum79f25d91997-04-29 20:08:16 +0000367PyImport_GetMagicNumber()
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000368{
369 return MAGIC;
370}
371
372
Guido van Rossum25ce5661997-08-02 03:10:38 +0000373/* Magic for extension modules (built-in as well as dynamically
374 loaded). To prevent initializing an extension module more than
375 once, we keep a static dictionary 'extensions' keyed by module name
376 (for built-in modules) or by filename (for dynamically loaded
377 modules), containing these modules. A copy od the module's
378 dictionary is stored by calling _PyImport_FixupExtension()
379 immediately after the module initialization function succeeds. A
380 copy can be retrieved from there by calling
381 _PyImport_FindExtension(). */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000382
Guido van Rossum79f25d91997-04-29 20:08:16 +0000383PyObject *
Guido van Rossum25ce5661997-08-02 03:10:38 +0000384_PyImport_FixupExtension(name, filename)
385 char *name;
386 char *filename;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000387{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000388 PyObject *modules, *mod, *dict, *copy;
389 if (extensions == NULL) {
390 extensions = PyDict_New();
391 if (extensions == NULL)
392 return NULL;
393 }
394 modules = PyImport_GetModuleDict();
395 mod = PyDict_GetItemString(modules, name);
396 if (mod == NULL || !PyModule_Check(mod)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000397 PyErr_Format(PyExc_SystemError,
398 "_PyImport_FixupExtension: module %.200s not loaded", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000399 return NULL;
400 }
401 dict = PyModule_GetDict(mod);
402 if (dict == NULL)
403 return NULL;
404 copy = PyObject_CallMethod(dict, "copy", "");
405 if (copy == NULL)
406 return NULL;
407 PyDict_SetItemString(extensions, filename, copy);
408 Py_DECREF(copy);
409 return copy;
410}
411
412PyObject *
413_PyImport_FindExtension(name, filename)
414 char *name;
415 char *filename;
416{
417 PyObject *dict, *mod, *mdict, *result;
418 if (extensions == NULL)
419 return NULL;
420 dict = PyDict_GetItemString(extensions, filename);
421 if (dict == NULL)
422 return NULL;
423 mod = PyImport_AddModule(name);
424 if (mod == NULL)
425 return NULL;
426 mdict = PyModule_GetDict(mod);
427 if (mdict == NULL)
428 return NULL;
429 result = PyObject_CallMethod(mdict, "update", "O", dict);
430 if (result == NULL)
431 return NULL;
432 Py_DECREF(result);
433 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000434 PySys_WriteStderr("import %s # previously loaded (%s)\n",
Guido van Rossum25ce5661997-08-02 03:10:38 +0000435 name, filename);
436 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000437}
438
439
440/* Get the module object corresponding to a module name.
441 First check the modules dictionary if there's one there,
442 if not, create a new one and insert in in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000443 Because the former action is most common, THIS DOES NOT RETURN A
444 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000445
Guido van Rossum79f25d91997-04-29 20:08:16 +0000446PyObject *
447PyImport_AddModule(name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000448 char *name;
449{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000450 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000451 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000452
Guido van Rossum25ce5661997-08-02 03:10:38 +0000453 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
Guido van Rossum79f25d91997-04-29 20:08:16 +0000454 PyModule_Check(m))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000455 return m;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000456 m = PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000457 if (m == NULL)
458 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000459 if (PyDict_SetItemString(modules, name, m) != 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000460 Py_DECREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000461 return NULL;
462 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000463 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000464
465 return m;
466}
467
468
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000469/* Execute a code object in a module and return the module object
470 WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000471
Guido van Rossum79f25d91997-04-29 20:08:16 +0000472PyObject *
473PyImport_ExecCodeModule(name, co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000474 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000475 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000476{
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000477 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
478}
479
480PyObject *
481PyImport_ExecCodeModuleEx(name, co, pathname)
482 char *name;
483 PyObject *co;
484 char *pathname;
485{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000486 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000487 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000488
Guido van Rossum79f25d91997-04-29 20:08:16 +0000489 m = PyImport_AddModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000490 if (m == NULL)
491 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000492 d = PyModule_GetDict(m);
493 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
494 if (PyDict_SetItemString(d, "__builtins__",
495 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000496 return NULL;
497 }
Guido van Rossum9c9a07c1996-05-16 20:43:40 +0000498 /* Remember the filename as the __file__ attribute */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000499 v = NULL;
500 if (pathname != NULL) {
501 v = PyString_FromString(pathname);
502 if (v == NULL)
503 PyErr_Clear();
504 }
505 if (v == NULL) {
506 v = ((PyCodeObject *)co)->co_filename;
507 Py_INCREF(v);
508 }
509 if (PyDict_SetItemString(d, "__file__", v) != 0)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000510 PyErr_Clear(); /* Not important enough to report */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000511 Py_DECREF(v);
512
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000513 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000514 if (v == NULL)
515 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000516 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000517
Guido van Rossum25ce5661997-08-02 03:10:38 +0000518 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000519 PyErr_Format(PyExc_ImportError,
520 "Loaded module %.200s not found in sys.modules",
521 name);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000522 return NULL;
523 }
524
Guido van Rossum79f25d91997-04-29 20:08:16 +0000525 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000526
527 return m;
528}
529
530
531/* Given a pathname for a Python source file, fill a buffer with the
532 pathname for the corresponding compiled file. Return the pathname
533 for the compiled file, or NULL if there's no space in the buffer.
534 Doesn't set an exception. */
535
536static char *
537make_compiled_pathname(pathname, buf, buflen)
538 char *pathname;
539 char *buf;
540 int buflen;
541{
542 int len;
543
544 len = strlen(pathname);
545 if (len+2 > buflen)
546 return NULL;
547 strcpy(buf, pathname);
Guido van Rossum0824f631997-03-11 18:37:35 +0000548 strcpy(buf+len, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000549
550 return buf;
551}
552
553
554/* Given a pathname for a Python source file, its time of last
555 modification, and a pathname for a compiled file, check whether the
556 compiled file represents the same version of the source. If so,
557 return a FILE pointer for the compiled file, positioned just after
558 the header; if not, return NULL.
559 Doesn't set an exception. */
560
561static FILE *
562check_compiled_module(pathname, mtime, cpathname)
563 char *pathname;
564 long mtime;
565 char *cpathname;
566{
567 FILE *fp;
568 long magic;
569 long pyc_mtime;
570
571 fp = fopen(cpathname, "rb");
572 if (fp == NULL)
573 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000574 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000575 if (magic != MAGIC) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000576 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000577 PySys_WriteStderr("# %s has bad magic\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000578 fclose(fp);
579 return NULL;
580 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000581 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000582 if (pyc_mtime != mtime) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000583 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000584 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000585 fclose(fp);
586 return NULL;
587 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000588 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000589 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000590 return fp;
591}
592
593
594/* Read a code object from a file and check it for validity */
595
Guido van Rossum79f25d91997-04-29 20:08:16 +0000596static PyCodeObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000597read_compiled_module(cpathname, fp)
598 char *cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000599 FILE *fp;
600{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000601 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000602
Guido van Rossum79f25d91997-04-29 20:08:16 +0000603 co = PyMarshal_ReadObjectFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000604 /* Ugly: rd_object() may return NULL with or without error */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000605 if (co == NULL || !PyCode_Check(co)) {
606 if (!PyErr_Occurred())
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000607 PyErr_Format(PyExc_ImportError,
608 "Non-code object in %.200s", cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000609 Py_XDECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000610 return NULL;
611 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000612 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000613}
614
615
616/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000617 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000618
Guido van Rossum79f25d91997-04-29 20:08:16 +0000619static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000620load_compiled_module(name, cpathname, fp)
621 char *name;
622 char *cpathname;
623 FILE *fp;
624{
625 long magic;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000626 PyCodeObject *co;
627 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000628
Guido van Rossum79f25d91997-04-29 20:08:16 +0000629 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000630 if (magic != MAGIC) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000631 PyErr_Format(PyExc_ImportError,
632 "Bad magic number in %.200s", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000633 return NULL;
634 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000635 (void) PyMarshal_ReadLongFromFile(fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000636 co = read_compiled_module(cpathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000637 if (co == NULL)
638 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000639 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000640 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000641 name, cpathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000642 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000643 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000644
645 return m;
646}
647
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000648/* Parse a source file and return the corresponding code object */
649
Guido van Rossum79f25d91997-04-29 20:08:16 +0000650static PyCodeObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000651parse_source_module(pathname, fp)
652 char *pathname;
653 FILE *fp;
654{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000655 PyCodeObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000656 node *n;
657
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000658 n = PyParser_SimpleParseFile(fp, pathname, Py_file_input);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000659 if (n == NULL)
660 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000661 co = PyNode_Compile(n, pathname);
662 PyNode_Free(n);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000663
664 return co;
665}
666
667
668/* Write a compiled module to a file, placing the time of last
669 modification of its source into the header.
670 Errors are ignored, if a write error occurs an attempt is made to
671 remove the file. */
672
673static void
674write_compiled_module(co, cpathname, mtime)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000675 PyCodeObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000676 char *cpathname;
677 long mtime;
678{
679 FILE *fp;
680
681 fp = fopen(cpathname, "wb");
682 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000683 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000684 PySys_WriteStderr(
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000685 "# can't create %s\n", cpathname);
686 return;
687 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000688 PyMarshal_WriteLongToFile(MAGIC, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000689 /* First write a 0 for mtime */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000690 PyMarshal_WriteLongToFile(0L, fp);
691 PyMarshal_WriteObjectToFile((PyObject *)co, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000692 if (ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000693 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000694 PySys_WriteStderr("# can't write %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000695 /* Don't keep partial file */
696 fclose(fp);
697 (void) unlink(cpathname);
698 return;
699 }
700 /* Now write the true mtime */
701 fseek(fp, 4L, 0);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000702 PyMarshal_WriteLongToFile(mtime, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000703 fflush(fp);
704 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000705 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000706 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000707#ifdef macintosh
Guido van Rossumbe1a6e21996-02-21 15:29:20 +0000708 setfiletype(cpathname, 'Pyth', 'PYC ');
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000709#endif
710}
711
712
713/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000714 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
715 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000716
Guido van Rossum79f25d91997-04-29 20:08:16 +0000717static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000718load_source_module(name, pathname, fp)
719 char *name;
720 char *pathname;
721 FILE *fp;
722{
723 long mtime;
724 FILE *fpc;
725 char buf[MAXPATHLEN+1];
726 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000727 PyCodeObject *co;
728 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000729
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000730 mtime = PyOS_GetLastModificationTime(pathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000731 cpathname = make_compiled_pathname(pathname, buf, MAXPATHLEN+1);
732 if (cpathname != NULL &&
733 (fpc = check_compiled_module(pathname, mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000734 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000735 fclose(fpc);
736 if (co == NULL)
737 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000738 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000739 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000740 name, cpathname);
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000741 pathname = cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000742 }
743 else {
744 co = parse_source_module(pathname, fp);
745 if (co == NULL)
746 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000747 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000748 PySys_WriteStderr("import %s # from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000749 name, pathname);
750 write_compiled_module(co, cpathname, mtime);
751 }
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000752 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000753 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000754
755 return m;
756}
757
758
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000759/* Forward */
760static PyObject *load_module Py_PROTO((char *, FILE *, char *, int));
761static struct filedescr *find_module Py_PROTO((char *, PyObject *,
762 char *, int, FILE **));
Guido van Rossuma86f77d1997-09-09 18:53:47 +0000763static struct _frozen *find_frozen Py_PROTO((char *name));
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000764
765/* Load a package and return its module object WITH INCREMENTED
766 REFERENCE COUNT */
767
768static PyObject *
769load_package(name, pathname)
770 char *name;
771 char *pathname;
772{
773 PyObject *m, *d, *file, *path;
774 int err;
775 char buf[MAXPATHLEN+1];
776 FILE *fp = NULL;
777 struct filedescr *fdp;
778
779 m = PyImport_AddModule(name);
780 if (m == NULL)
781 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000782 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000783 PySys_WriteStderr("import %s # directory %s\n",
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000784 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000785 d = PyModule_GetDict(m);
786 file = PyString_FromString(pathname);
787 if (file == NULL)
788 return NULL;
789 path = Py_BuildValue("[O]", file);
790 if (path == NULL) {
791 Py_DECREF(file);
792 return NULL;
793 }
794 err = PyDict_SetItemString(d, "__file__", file);
795 if (err == 0)
796 err = PyDict_SetItemString(d, "__path__", path);
797 if (err != 0) {
798 m = NULL;
799 goto cleanup;
800 }
801 buf[0] = '\0';
802 fdp = find_module("__init__", path, buf, sizeof(buf), &fp);
803 if (fdp == NULL) {
804 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
805 PyErr_Clear();
806 }
807 else
808 m = NULL;
809 goto cleanup;
810 }
811 m = load_module(name, fp, buf, fdp->type);
812 if (fp != NULL)
813 fclose(fp);
814 cleanup:
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000815 Py_XDECREF(path);
816 Py_XDECREF(file);
817 return m;
818}
819
820
821/* Helper to test for built-in module */
822
823static int
824is_builtin(name)
825 char *name;
826{
827 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +0000828 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
829 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
830 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000831 return -1;
832 else
833 return 1;
834 }
835 }
836 return 0;
837}
838
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000839
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000840/* Search the path (default sys.path) for a module. Return the
841 corresponding filedescr struct, and (via return arguments) the
842 pathname and an open file. Return NULL if the module is not found. */
843
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000844#ifdef MS_COREDLL
845extern FILE *PyWin_FindRegisteredModule();
846#endif
847
Guido van Rossum0980bd91998-02-13 17:18:36 +0000848#ifdef CHECK_IMPORT_CASE
849static int check_case(char *, int, int, char *);
850#endif
851
Guido van Rossum197346f1997-10-31 18:38:52 +0000852static int find_init_module Py_PROTO((char *)); /* Forward */
853
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000854static struct filedescr *
Guido van Rossum0506a431998-08-11 15:07:39 +0000855find_module(realname, path, buf, buflen, p_fp)
856 char *realname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000857 PyObject *path;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000858 /* Output parameters: */
859 char *buf;
860 int buflen;
861 FILE **p_fp;
862{
863 int i, npath, len, namelen;
Guido van Rossuma5568d31998-03-05 03:45:08 +0000864 struct _frozen *f;
Guido van Rossum80bb9651996-12-05 23:27:02 +0000865 struct filedescr *fdp = NULL;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +0000866 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000867 struct stat statbuf;
Guido van Rossuma5568d31998-03-05 03:45:08 +0000868 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
869 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
870 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Guido van Rossum0506a431998-08-11 15:07:39 +0000871 char name[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000872
Guido van Rossum0506a431998-08-11 15:07:39 +0000873 strcpy(name, realname);
874
875 if (path != NULL && PyString_Check(path)) {
876 /* Submodule of "frozen" package:
877 Set name to the fullname, path to NULL
878 and continue as "usual" */
879 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
880 PyErr_SetString(PyExc_ImportError,
881 "full frozen module name too long");
882 return NULL;
883 }
884 strcpy(buf, PyString_AsString(path));
885 strcat(buf, ".");
886 strcat(buf, name);
887 strcpy(name, buf);
888 path = NULL;
889 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000890 if (path == NULL) {
891 if (is_builtin(name)) {
Guido van Rossuma5568d31998-03-05 03:45:08 +0000892 strcpy(buf, name);
893 return &fd_builtin;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000894 }
Guido van Rossuma5568d31998-03-05 03:45:08 +0000895 if ((f = find_frozen(name)) != NULL) {
896 strcpy(buf, name);
897 return &fd_frozen;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000898 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000899
Guido van Rossumac279101996-08-22 23:10:58 +0000900#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000901 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
902 if (fp != NULL) {
903 *p_fp = fp;
904 return fdp;
905 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +0000906#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +0000907 path = PySys_GetObject("path");
908 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000909 if (path == NULL || !PyList_Check(path)) {
910 PyErr_SetString(PyExc_ImportError,
Guido van Rossuma5568d31998-03-05 03:45:08 +0000911 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000912 return NULL;
913 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000914 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000915 namelen = strlen(name);
916 for (i = 0; i < npath; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000917 PyObject *v = PyList_GetItem(path, i);
918 if (!PyString_Check(v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000919 continue;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000920 len = PyString_Size(v);
Guido van Rossumef3d02e1997-07-21 14:54:36 +0000921 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000922 continue; /* Too long */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000923 strcpy(buf, PyString_AsString(v));
Guido van Rossum6bf62da1997-04-11 20:37:35 +0000924 if ((int)strlen(buf) != len)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000925 continue; /* v contains '\0' */
Jack Jansen9c96a921995-02-15 22:57:06 +0000926#ifdef macintosh
Guido van Rossum741689d1997-08-12 14:53:39 +0000927#ifdef INTERN_STRINGS
928 /*
929 ** Speedup: each sys.path item is interned, and
930 ** FindResourceModule remembers which items refer to
931 ** folders (so we don't have to bother trying to look
932 ** into them for resources).
933 */
934 PyString_InternInPlace(&PyList_GET_ITEM(path, i));
935 v = PyList_GET_ITEM(path, i);
936#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000937 if (PyMac_FindResourceModule((PyStringObject *)v, name, buf)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000938 static struct filedescr resfiledescr =
939 {"", "", PY_RESOURCE};
Jack Jansen9c96a921995-02-15 22:57:06 +0000940
941 return &resfiledescr;
942 }
Guido van Rossum0f84a341998-08-06 13:36:01 +0000943 if (PyMac_FindCodeResourceModule((PyStringObject *)v, name, buf)) {
944 static struct filedescr resfiledescr =
945 {"", "", PY_CODERESOURCE};
946
947 return &resfiledescr;
948 }
Jack Jansen9c96a921995-02-15 22:57:06 +0000949#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000950 if (len > 0 && buf[len-1] != SEP
951#ifdef ALTSEP
952 && buf[len-1] != ALTSEP
953#endif
954 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000955 buf[len++] = SEP;
Guido van Rossum40f470f1996-05-23 22:51:04 +0000956#ifdef IMPORT_8x3_NAMES
Guido van Rossume8c27bb1997-12-17 18:57:16 +0000957 /* see if we are searching in directory dos-8x3 */
958 if (len > 7 && !strncmp(buf + len - 8, "dos-8x3", 7)){
Guido van Rossum40f470f1996-05-23 22:51:04 +0000959 int j;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000960 char ch; /* limit name to 8 lower-case characters */
Guido van Rossum40f470f1996-05-23 22:51:04 +0000961 for (j = 0; (ch = name[j]) && j < 8; j++)
962 if (isupper(ch))
963 buf[len++] = tolower(ch);
964 else
965 buf[len++] = ch;
966 }
Guido van Rossume8c27bb1997-12-17 18:57:16 +0000967 else /* Not in dos-8x3, use the full name */
Guido van Rossum6f489d91996-06-28 20:15:15 +0000968#endif
Guido van Rossum0e41c8c1996-06-20 14:18:34 +0000969 {
Guido van Rossum40f470f1996-05-23 22:51:04 +0000970 strcpy(buf+len, name);
971 len += namelen;
972 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000973#ifdef HAVE_STAT
974 if (stat(buf, &statbuf) == 0) {
Guido van Rossum197346f1997-10-31 18:38:52 +0000975 if (S_ISDIR(statbuf.st_mode)) {
Guido van Rossum0980bd91998-02-13 17:18:36 +0000976 if (find_init_module(buf)) {
977#ifdef CHECK_IMPORT_CASE
978 if (!check_case(buf, len, namelen,
979 name))
980 return NULL;
981#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +0000982 return &fd_package;
Guido van Rossum0980bd91998-02-13 17:18:36 +0000983 }
Guido van Rossum197346f1997-10-31 18:38:52 +0000984 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000985 }
986#else
987 /* XXX How are you going to test for directories? */
988#endif
Guido van Rossum9a61dc91997-10-08 15:25:08 +0000989#ifdef macintosh
990 fdp = PyMac_FindModuleExtension(buf, &len, name);
991 if (fdp)
992 fp = fopen(buf, fdp->mode);
993#else
Guido van Rossum79f25d91997-04-29 20:08:16 +0000994 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000995 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000996 if (Py_VerboseFlag > 1)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000997 PySys_WriteStderr("# trying %s\n", buf);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000998 fp = fopen(buf, fdp->mode);
999 if (fp != NULL)
1000 break;
1001 }
Guido van Rossum741689d1997-08-12 14:53:39 +00001002#endif /* !macintosh */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001003 if (fp != NULL)
1004 break;
1005 }
1006 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001007 PyErr_Format(PyExc_ImportError,
1008 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001009 return NULL;
1010 }
Guido van Rossum0980bd91998-02-13 17:18:36 +00001011#ifdef CHECK_IMPORT_CASE
1012 if (!check_case(buf, len, namelen, name)) {
1013 fclose(fp);
1014 return NULL;
1015 }
1016#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001017
1018 *p_fp = fp;
1019 return fdp;
1020}
1021
Guido van Rossum0980bd91998-02-13 17:18:36 +00001022#ifdef CHECK_IMPORT_CASE
1023
1024#ifdef MS_WIN32
1025#include <windows.h>
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001026#include <ctype.h>
1027
1028static int
1029allcaps8x3(s)
1030 char *s;
1031{
1032 /* Return 1 if s is an 8.3 filename in ALLCAPS */
1033 char c;
1034 char *dot = strchr(s, '.');
1035 char *end = strchr(s, '\0');
1036 if (dot != NULL) {
1037 if (dot-s > 8)
1038 return 1; /* More than 8 before '.' */
1039 if (end-dot > 4)
1040 return 1; /* More than 3 after '.' */
1041 end = strchr(dot+1, '.');
1042 if (end != NULL)
1043 return 1; /* More than one dot */
1044 }
1045 else if (end-s > 8)
1046 return 1; /* More than 8 and no dot */
1047 while ((c = *s++)) {
1048 if (islower(c))
1049 return 0;
1050 }
1051 return 1;
1052}
1053
Guido van Rossum0980bd91998-02-13 17:18:36 +00001054static int
1055check_case(char *buf, int len, int namelen, char *name)
1056{
1057 WIN32_FIND_DATA data;
1058 HANDLE h;
1059 if (getenv("PYTHONCASEOK") != NULL)
1060 return 1;
1061 h = FindFirstFile(buf, &data);
1062 if (h == INVALID_HANDLE_VALUE) {
1063 PyErr_Format(PyExc_NameError,
1064 "Can't find file for module %.100s\n(filename %.300s)",
1065 name, buf);
1066 return 0;
1067 }
1068 FindClose(h);
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001069 if (allcaps8x3(data.cFileName)) {
1070 /* Skip the test if the filename is ALL.CAPS. This can
1071 happen in certain circumstances beyond our control,
1072 e.g. when software is installed under NT on a FAT
1073 filesystem and then the same FAT filesystem is used
1074 under Windows 95. */
1075 return 1;
1076 }
Guido van Rossum0980bd91998-02-13 17:18:36 +00001077 if (strncmp(data.cFileName, name, namelen) != 0) {
1078 strcpy(buf+len-namelen, data.cFileName);
1079 PyErr_Format(PyExc_NameError,
1080 "Case mismatch for module name %.100s\n(filename %.300s)",
1081 name, buf);
1082 return 0;
1083 }
1084 return 1;
1085}
1086#endif /* MS_WIN32 */
1087
1088#ifdef macintosh
1089#include <TextUtils.h>
Guido van Rossuma0f0a331998-09-14 13:40:53 +00001090#ifdef USE_GUSI
1091#include "TFileSpec.h" /* for Path2FSSpec() */
1092#endif
Guido van Rossum0980bd91998-02-13 17:18:36 +00001093static int
1094check_case(char *buf, int len, int namelen, char *name)
1095{
1096 FSSpec fss;
1097 OSErr err;
Guido van Rossuma0f0a331998-09-14 13:40:53 +00001098#ifndef USE_GUSI
1099 err = FSMakeFSSpec(0, 0, Pstring(buf), &fss);
1100#else
1101 /* GUSI's Path2FSSpec() resolves all possible aliases nicely on
1102 the way, which is fine for all directories, but here we need
1103 the original name of the alias file (say, Dlg.ppc.slb, not
1104 toolboxmodules.ppc.slb). */
1105 char *colon;
1106 err = Path2FSSpec(buf, &fss);
1107 if (err == noErr) {
1108 colon = strrchr(buf, ':'); /* find filename */
1109 if (colon != NULL)
1110 err = FSMakeFSSpec(fss.vRefNum, fss.parID,
1111 Pstring(colon+1), &fss);
1112 else
1113 err = FSMakeFSSpec(fss.vRefNum, fss.parID,
1114 fss.name, &fss);
1115 }
1116#endif
Guido van Rossum0980bd91998-02-13 17:18:36 +00001117 if (err) {
1118 PyErr_Format(PyExc_NameError,
Guido van Rossuma0f0a331998-09-14 13:40:53 +00001119 "Can't find file for module %.100s\n(filename %.300s)",
1120 name, buf);
Guido van Rossum0980bd91998-02-13 17:18:36 +00001121 return 0;
1122 }
1123 p2cstr(fss.name);
1124 if ( strncmp(name, (char *)fss.name, namelen) != 0 ) {
1125 PyErr_Format(PyExc_NameError,
Guido van Rossuma0f0a331998-09-14 13:40:53 +00001126 "Case mismatch for module name %.100s\n(filename %.300s)",
1127 name, fss.name);
Guido van Rossum0980bd91998-02-13 17:18:36 +00001128 return 0;
1129 }
1130 return 1;
1131}
1132#endif /* macintosh */
1133
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001134#ifdef DJGPP
Guido van Rossumaeca79b1998-02-18 16:21:00 +00001135#include <dir.h>
1136
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001137static int
1138check_case(char *buf, int len, int namelen, char *name)
1139{
1140 struct ffblk ffblk;
1141 int done;
1142
1143 if (getenv("PYTHONCASEOK") != NULL)
1144 return 1;
Guido van Rossumaeca79b1998-02-18 16:21:00 +00001145 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001146 if (done) {
1147 PyErr_Format(PyExc_NameError,
1148 "Can't find file for module %.100s\n(filename %.300s)",
1149 name, buf);
1150 return 0;
1151 }
1152
1153 if (strncmp(ffblk.ff_name, name, namelen) != 0) {
1154 strcpy(buf+len-namelen, ffblk.ff_name);
1155 PyErr_Format(PyExc_NameError,
1156 "Case mismatch for module name %.100s\n(filename %.300s)",
1157 name, buf);
1158 return 0;
1159 }
1160 return 1;
1161}
1162#endif
1163
Guido van Rossum8766a771998-04-10 23:44:32 +00001164#endif /* CHECK_IMPORT_CASE */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001165
Guido van Rossum197346f1997-10-31 18:38:52 +00001166#ifdef HAVE_STAT
1167/* Helper to look for __init__.py or __init__.py[co] in potential package */
1168static int
1169find_init_module(buf)
1170 char *buf;
1171{
1172 int save_len = strlen(buf);
1173 int i = save_len;
1174 struct stat statbuf;
1175
1176 if (save_len + 13 >= MAXPATHLEN)
1177 return 0;
1178 buf[i++] = SEP;
1179 strcpy(buf+i, "__init__.py");
1180 if (stat(buf, &statbuf) == 0) {
1181 buf[save_len] = '\0';
1182 return 1;
1183 }
1184 i += strlen(buf+i);
1185 if (Py_OptimizeFlag)
1186 strcpy(buf+i, "o");
1187 else
1188 strcpy(buf+i, "c");
1189 if (stat(buf, &statbuf) == 0) {
1190 buf[save_len] = '\0';
1191 return 1;
1192 }
1193 buf[save_len] = '\0';
1194 return 0;
1195}
1196#endif /* HAVE_STAT */
1197
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001198
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001199static int init_builtin Py_PROTO((char *)); /* Forward */
1200
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001201/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001202 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001203
Guido van Rossum79f25d91997-04-29 20:08:16 +00001204static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001205load_module(name, fp, buf, type)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001206 char *name;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001207 FILE *fp;
1208 char *buf;
1209 int type;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001210{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001211 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001212 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001213 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001214
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001215 /* First check that there's an open file (if we need one) */
1216 switch (type) {
1217 case PY_SOURCE:
1218 case PY_COMPILED:
1219 if (fp == NULL) {
1220 PyErr_Format(PyExc_ValueError,
1221 "file object required for import (type code %d)",
1222 type);
1223 return NULL;
1224 }
1225 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001226
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001227 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001228
1229 case PY_SOURCE:
1230 m = load_source_module(name, buf, fp);
1231 break;
1232
1233 case PY_COMPILED:
1234 m = load_compiled_module(name, buf, fp);
1235 break;
1236
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001237#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001238 case C_EXTENSION:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001239 m = _PyImport_LoadDynamicModule(name, buf, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001240 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001241#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001242
Jack Jansen9c96a921995-02-15 22:57:06 +00001243#ifdef macintosh
1244 case PY_RESOURCE:
1245 m = PyMac_LoadResourceModule(name, buf);
1246 break;
Guido van Rossum0f84a341998-08-06 13:36:01 +00001247 case PY_CODERESOURCE:
1248 m = PyMac_LoadCodeResourceModule(name, buf);
1249 break;
Jack Jansen9c96a921995-02-15 22:57:06 +00001250#endif
1251
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001252 case PKG_DIRECTORY:
1253 m = load_package(name, buf);
1254 break;
1255
1256 case C_BUILTIN:
1257 case PY_FROZEN:
Guido van Rossuma5568d31998-03-05 03:45:08 +00001258 if (buf != NULL && buf[0] != '\0')
1259 name = buf;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001260 if (type == C_BUILTIN)
1261 err = init_builtin(name);
1262 else
1263 err = PyImport_ImportFrozenModule(name);
1264 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001265 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001266 if (err == 0) {
1267 PyErr_Format(PyExc_ImportError,
1268 "Purported %s module %.200s not found",
1269 type == C_BUILTIN ?
1270 "builtin" : "frozen",
1271 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001272 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001273 }
1274 modules = PyImport_GetModuleDict();
1275 m = PyDict_GetItemString(modules, name);
1276 if (m == NULL) {
1277 PyErr_Format(
1278 PyExc_ImportError,
1279 "%s module %.200s not properly initialized",
1280 type == C_BUILTIN ?
1281 "builtin" : "frozen",
1282 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001283 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001284 }
1285 Py_INCREF(m);
1286 break;
1287
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001288 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001289 PyErr_Format(PyExc_ImportError,
1290 "Don't know how to import %.200s (type code %d)",
1291 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001292 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001293
1294 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001295
1296 return m;
1297}
1298
1299
1300/* Initialize a built-in module.
1301 Return 1 for succes, 0 if the module is not found, and -1 with
1302 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001303
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001304static int
1305init_builtin(name)
1306 char *name;
1307{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001308 struct _inittab *p;
1309 PyObject *mod;
1310
1311 if ((mod = _PyImport_FindExtension(name, name)) != NULL)
1312 return 1;
1313
Guido van Rossum771c6c81997-10-31 18:37:24 +00001314 for (p = PyImport_Inittab; p->name != NULL; p++) {
Guido van Rossum25ce5661997-08-02 03:10:38 +00001315 if (strcmp(name, p->name) == 0) {
1316 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001317 PyErr_Format(PyExc_ImportError,
1318 "Cannot re-init internal module %.200s",
1319 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001320 return -1;
1321 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001322 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001323 PySys_WriteStderr("import %s # builtin\n", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001324 (*p->initfunc)();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001325 if (PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001326 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001327 if (_PyImport_FixupExtension(name, name) == NULL)
1328 return -1;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001329 return 1;
1330 }
1331 }
1332 return 0;
1333}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001334
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001335
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001336/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001337
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001338static struct _frozen *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001339find_frozen(name)
1340 char *name;
1341{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001342 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001343
Guido van Rossum79f25d91997-04-29 20:08:16 +00001344 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001345 if (p->name == NULL)
1346 return NULL;
1347 if (strcmp(p->name, name) == 0)
1348 break;
1349 }
1350 return p;
1351}
1352
Guido van Rossum79f25d91997-04-29 20:08:16 +00001353static PyObject *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001354get_frozen_object(name)
1355 char *name;
1356{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001357 struct _frozen *p = find_frozen(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001358 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001359
1360 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001361 PyErr_Format(PyExc_ImportError,
1362 "No such frozen object named %.200s",
1363 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001364 return NULL;
1365 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001366 size = p->size;
1367 if (size < 0)
1368 size = -size;
1369 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001370}
1371
1372/* Initialize a frozen module.
1373 Return 1 for succes, 0 if the module is not found, and -1 with
1374 an exception set if the initialization failed.
1375 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001376
1377int
Guido van Rossum79f25d91997-04-29 20:08:16 +00001378PyImport_ImportFrozenModule(name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001379 char *name;
1380{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001381 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001382 PyObject *co;
1383 PyObject *m;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001384 int ispackage;
1385 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001386
1387 if (p == NULL)
1388 return 0;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001389 size = p->size;
1390 ispackage = (size < 0);
1391 if (ispackage)
1392 size = -size;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001393 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001394 PySys_WriteStderr("import %s # frozen%s\n",
Guido van Rossuma5568d31998-03-05 03:45:08 +00001395 name, ispackage ? " package" : "");
1396 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001397 if (co == NULL)
1398 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001399 if (!PyCode_Check(co)) {
1400 Py_DECREF(co);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001401 PyErr_Format(PyExc_TypeError,
1402 "frozen object %.200s is not a code object",
1403 name);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001404 return -1;
1405 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001406 if (ispackage) {
1407 /* Set __path__ to the package name */
1408 PyObject *d, *s;
1409 int err;
1410 m = PyImport_AddModule(name);
1411 if (m == NULL)
1412 return -1;
1413 d = PyModule_GetDict(m);
1414 s = PyString_InternFromString(name);
1415 if (s == NULL)
1416 return -1;
1417 err = PyDict_SetItemString(d, "__path__", s);
1418 Py_DECREF(s);
1419 if (err != 0)
1420 return err;
1421 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00001422 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum79f25d91997-04-29 20:08:16 +00001423 Py_DECREF(co);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001424 if (m == NULL)
1425 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001426 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001427 return 1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001428}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001429
1430
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001431/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001432 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001433
Guido van Rossum79f25d91997-04-29 20:08:16 +00001434PyObject *
1435PyImport_ImportModule(name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001436 char *name;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001437{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001438 static PyObject *fromlist = NULL;
1439 if (fromlist == NULL && strchr(name, '.') != NULL) {
1440 fromlist = Py_BuildValue("[s]", "*");
1441 if (fromlist == NULL)
1442 return NULL;
1443 }
1444 return PyImport_ImportModuleEx(name, NULL, NULL, fromlist);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001445}
1446
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001447/* Forward declarations for helper routines */
1448static PyObject *get_parent Py_PROTO((PyObject *globals,
1449 char *buf, int *p_buflen));
1450static PyObject *load_next Py_PROTO((PyObject *mod, PyObject *altmod,
1451 char **p_name, char *buf, int *p_buflen));
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001452static int mark_miss Py_PROTO((char *name));
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001453static int ensure_fromlist Py_PROTO((PyObject *mod, PyObject *fromlist,
Guido van Rossum9905ef91997-09-08 16:07:11 +00001454 char *buf, int buflen, int recursive));
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001455static PyObject * import_submodule Py_PROTO((PyObject *mod,
1456 char *name, char *fullname));
1457
1458/* The Magnum Opus of dotted-name import :-) */
1459
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001460static PyObject *
1461import_module_ex(name, globals, locals, fromlist)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001462 char *name;
1463 PyObject *globals;
1464 PyObject *locals;
1465 PyObject *fromlist;
1466{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001467 char buf[MAXPATHLEN+1];
1468 int buflen = 0;
1469 PyObject *parent, *head, *next, *tail;
1470
1471 parent = get_parent(globals, buf, &buflen);
1472 if (parent == NULL)
1473 return NULL;
1474
1475 head = load_next(parent, Py_None, &name, buf, &buflen);
1476 if (head == NULL)
1477 return NULL;
1478
1479 tail = head;
1480 Py_INCREF(tail);
1481 while (name) {
1482 next = load_next(tail, tail, &name, buf, &buflen);
1483 Py_DECREF(tail);
1484 if (next == NULL) {
1485 Py_DECREF(head);
1486 return NULL;
1487 }
1488 tail = next;
1489 }
1490
1491 if (fromlist != NULL) {
1492 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
1493 fromlist = NULL;
1494 }
1495
1496 if (fromlist == NULL) {
1497 Py_DECREF(tail);
1498 return head;
1499 }
1500
1501 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00001502 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001503 Py_DECREF(tail);
1504 return NULL;
1505 }
1506
1507 return tail;
1508}
1509
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001510PyObject *
1511PyImport_ImportModuleEx(name, globals, locals, fromlist)
1512 char *name;
1513 PyObject *globals;
1514 PyObject *locals;
1515 PyObject *fromlist;
1516{
1517 PyObject *result;
1518 lock_import();
Guido van Rossumd65911b1998-03-03 22:33:27 +00001519 result = import_module_ex(name, globals, locals, fromlist);
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001520 unlock_import();
1521 return result;
1522}
1523
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001524static PyObject *
1525get_parent(globals, buf, p_buflen)
1526 PyObject *globals;
1527 char *buf;
1528 int *p_buflen;
1529{
1530 static PyObject *namestr = NULL;
1531 static PyObject *pathstr = NULL;
1532 PyObject *modname, *modpath, *modules, *parent;
1533
1534 if (globals == NULL || !PyDict_Check(globals))
1535 return Py_None;
1536
1537 if (namestr == NULL) {
1538 namestr = PyString_InternFromString("__name__");
1539 if (namestr == NULL)
1540 return NULL;
1541 }
1542 if (pathstr == NULL) {
1543 pathstr = PyString_InternFromString("__path__");
1544 if (pathstr == NULL)
1545 return NULL;
1546 }
1547
1548 *buf = '\0';
1549 *p_buflen = 0;
1550 modname = PyDict_GetItem(globals, namestr);
1551 if (modname == NULL || !PyString_Check(modname))
1552 return Py_None;
1553
1554 modpath = PyDict_GetItem(globals, pathstr);
1555 if (modpath != NULL) {
1556 int len = PyString_GET_SIZE(modname);
1557 if (len > MAXPATHLEN) {
1558 PyErr_SetString(PyExc_ValueError,
1559 "Module name too long");
1560 return NULL;
1561 }
1562 strcpy(buf, PyString_AS_STRING(modname));
1563 *p_buflen = len;
1564 }
1565 else {
1566 char *start = PyString_AS_STRING(modname);
1567 char *lastdot = strrchr(start, '.');
1568 int len;
1569 if (lastdot == NULL)
1570 return Py_None;
1571 len = lastdot - start;
1572 if (len >= MAXPATHLEN) {
1573 PyErr_SetString(PyExc_ValueError,
1574 "Module name too long");
1575 return NULL;
1576 }
1577 strncpy(buf, start, len);
1578 buf[len] = '\0';
1579 *p_buflen = len;
1580 }
1581
1582 modules = PyImport_GetModuleDict();
1583 parent = PyDict_GetItemString(modules, buf);
1584 if (parent == NULL)
1585 parent = Py_None;
1586 return parent;
1587 /* We expect, but can't guarantee, if parent != None, that:
1588 - parent.__name__ == buf
1589 - parent.__dict__ is globals
1590 If this is violated... Who cares? */
1591}
1592
1593static PyObject *
1594load_next(mod, altmod, p_name, buf, p_buflen)
1595 PyObject *mod;
1596 PyObject *altmod; /* Either None or same as mod */
1597 char **p_name;
1598 char *buf;
1599 int *p_buflen;
1600{
1601 char *name = *p_name;
1602 char *dot = strchr(name, '.');
1603 int len;
1604 char *p;
1605 PyObject *result;
1606
1607 if (dot == NULL) {
1608 *p_name = NULL;
1609 len = strlen(name);
1610 }
1611 else {
1612 *p_name = dot+1;
1613 len = dot-name;
1614 }
Guido van Rossum111c20b1998-04-11 17:38:22 +00001615 if (len == 0) {
1616 PyErr_SetString(PyExc_ValueError,
1617 "Empty module name");
1618 return NULL;
1619 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001620
1621 p = buf + *p_buflen;
1622 if (p != buf)
1623 *p++ = '.';
1624 if (p+len-buf >= MAXPATHLEN) {
1625 PyErr_SetString(PyExc_ValueError,
1626 "Module name too long");
1627 return NULL;
1628 }
1629 strncpy(p, name, len);
1630 p[len] = '\0';
1631 *p_buflen = p+len-buf;
1632
1633 result = import_submodule(mod, p, buf);
1634 if (result == Py_None && altmod != mod) {
1635 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001636 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00001637 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001638 if (result != NULL && result != Py_None) {
1639 if (mark_miss(buf) != 0) {
1640 Py_DECREF(result);
1641 return NULL;
1642 }
1643 strncpy(buf, name, len);
1644 buf[len] = '\0';
1645 *p_buflen = len;
1646 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001647 }
1648 if (result == NULL)
1649 return NULL;
1650
1651 if (result == Py_None) {
1652 Py_DECREF(result);
1653 PyErr_Format(PyExc_ImportError,
1654 "No module named %.200s", name);
1655 return NULL;
1656 }
1657
1658 return result;
1659}
1660
1661static int
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001662mark_miss(name)
1663 char *name;
1664{
1665 PyObject *modules = PyImport_GetModuleDict();
1666 return PyDict_SetItemString(modules, name, Py_None);
1667}
1668
1669static int
Guido van Rossum9905ef91997-09-08 16:07:11 +00001670ensure_fromlist(mod, fromlist, buf, buflen, recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001671 PyObject *mod;
1672 PyObject *fromlist;
1673 char *buf;
1674 int buflen;
Guido van Rossum9905ef91997-09-08 16:07:11 +00001675 int recursive;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001676{
1677 int i;
1678
1679 if (!PyObject_HasAttrString(mod, "__path__"))
1680 return 1;
1681
1682 for (i = 0; ; i++) {
1683 PyObject *item = PySequence_GetItem(fromlist, i);
1684 int hasit;
1685 if (item == NULL) {
1686 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
1687 PyErr_Clear();
1688 return 1;
1689 }
1690 return 0;
1691 }
1692 if (!PyString_Check(item)) {
1693 PyErr_SetString(PyExc_TypeError,
1694 "Item in ``from list'' not a string");
1695 Py_DECREF(item);
1696 return 0;
1697 }
1698 if (PyString_AS_STRING(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00001699 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001700 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00001701 /* See if the package defines __all__ */
1702 if (recursive)
1703 continue; /* Avoid endless recursion */
1704 all = PyObject_GetAttrString(mod, "__all__");
1705 if (all == NULL)
1706 PyErr_Clear();
1707 else {
1708 if (!ensure_fromlist(mod, all, buf, buflen, 1))
1709 return 0;
1710 Py_DECREF(all);
1711 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001712 continue;
1713 }
1714 hasit = PyObject_HasAttr(mod, item);
1715 if (!hasit) {
1716 char *subname = PyString_AS_STRING(item);
1717 PyObject *submod;
1718 char *p;
1719 if (buflen + strlen(subname) >= MAXPATHLEN) {
1720 PyErr_SetString(PyExc_ValueError,
1721 "Module name too long");
1722 Py_DECREF(item);
1723 return 0;
1724 }
1725 p = buf + buflen;
1726 *p++ = '.';
1727 strcpy(p, subname);
1728 submod = import_submodule(mod, subname, buf);
1729 Py_XDECREF(submod);
1730 if (submod == NULL) {
1731 Py_DECREF(item);
1732 return 0;
1733 }
1734 }
1735 Py_DECREF(item);
1736 }
1737
Guido van Rossuma7f2e811997-10-03 15:33:32 +00001738 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001739}
1740
1741static PyObject *
1742import_submodule(mod, subname, fullname)
1743 PyObject *mod; /* May be None */
1744 char *subname;
1745 char *fullname;
1746{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001747 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001748 PyObject *m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001749
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001750 /* Require:
1751 if mod == None: subname == fullname
1752 else: mod.__name__ + "." + subname == fullname
1753 */
1754
1755 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001756 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001757 }
1758 else {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001759 PyObject *path;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001760 char buf[MAXPATHLEN+1];
1761 struct filedescr *fdp;
1762 FILE *fp = NULL;
1763
Guido van Rossum9c0afe51998-05-19 15:09:05 +00001764 if (mod == Py_None)
1765 path = NULL;
1766 else {
1767 path = PyObject_GetAttrString(mod, "__path__");
1768 if (path == NULL) {
1769 PyErr_Clear();
1770 Py_INCREF(Py_None);
1771 return Py_None;
1772 }
1773 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001774
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001775 buf[0] = '\0';
Guido van Rossumb68cd421998-07-01 17:36:26 +00001776 fdp = find_module(subname, path, buf, MAXPATHLEN+1, &fp);
1777 Py_XDECREF(path);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001778 if (fdp == NULL) {
1779 if (!PyErr_ExceptionMatches(PyExc_ImportError))
1780 return NULL;
1781 PyErr_Clear();
1782 Py_INCREF(Py_None);
1783 return Py_None;
1784 }
1785 m = load_module(fullname, fp, buf, fdp->type);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001786 if (fp)
1787 fclose(fp);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001788 if (m != NULL && mod != Py_None) {
1789 if (PyObject_SetAttrString(mod, subname, m) < 0) {
1790 Py_DECREF(m);
1791 m = NULL;
1792 }
1793 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00001794 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001795
1796 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001797}
1798
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001799
1800/* Re-import a module of any kind and return its module object, WITH
1801 INCREMENTED REFERENCE COUNT */
1802
Guido van Rossum79f25d91997-04-29 20:08:16 +00001803PyObject *
1804PyImport_ReloadModule(m)
1805 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001806{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001807 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum222ef561997-09-06 19:41:09 +00001808 PyObject *path = NULL;
1809 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001810 char buf[MAXPATHLEN+1];
1811 struct filedescr *fdp;
1812 FILE *fp = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001813
Guido van Rossum79f25d91997-04-29 20:08:16 +00001814 if (m == NULL || !PyModule_Check(m)) {
1815 PyErr_SetString(PyExc_TypeError,
1816 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001817 return NULL;
1818 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001819 name = PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001820 if (name == NULL)
1821 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001822 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001823 PyErr_Format(PyExc_ImportError,
1824 "reload(): module %.200s not in sys.modules",
1825 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001826 return NULL;
1827 }
Guido van Rossum222ef561997-09-06 19:41:09 +00001828 subname = strrchr(name, '.');
1829 if (subname == NULL)
1830 subname = name;
1831 else {
1832 PyObject *parentname, *parent;
1833 parentname = PyString_FromStringAndSize(name, (subname-name));
1834 if (parentname == NULL)
1835 return NULL;
1836 parent = PyDict_GetItem(modules, parentname);
Barry Warsaw38793331999-01-27 17:54:20 +00001837 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00001838 if (parent == NULL) {
1839 PyErr_Format(PyExc_ImportError,
1840 "reload(): parent %.200s not in sys.modules",
1841 name);
1842 return NULL;
1843 }
1844 subname++;
1845 path = PyObject_GetAttrString(parent, "__path__");
1846 if (path == NULL)
1847 PyErr_Clear();
1848 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001849 buf[0] = '\0';
Guido van Rossum222ef561997-09-06 19:41:09 +00001850 fdp = find_module(subname, path, buf, MAXPATHLEN+1, &fp);
1851 Py_XDECREF(path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001852 if (fdp == NULL)
1853 return NULL;
1854 m = load_module(name, fp, buf, fdp->type);
1855 if (fp)
1856 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001857 return m;
1858}
1859
1860
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001861/* Higher-level import emulator which emulates the "import" statement
1862 more accurately -- it invokes the __import__() function from the
1863 builtins of the current globals. This means that the import is
1864 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00001865 environment, e.g. by "rexec".
1866 A dummy list ["__doc__"] is passed as the 4th argument so that
1867 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
1868 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001869
1870PyObject *
1871PyImport_Import(module_name)
1872 PyObject *module_name;
1873{
1874 static PyObject *silly_list = NULL;
1875 static PyObject *builtins_str = NULL;
1876 static PyObject *import_str = NULL;
1877 static PyObject *standard_builtins = NULL;
1878 PyObject *globals = NULL;
1879 PyObject *import = NULL;
1880 PyObject *builtins = NULL;
1881 PyObject *r = NULL;
1882
1883 /* Initialize constant string objects */
1884 if (silly_list == NULL) {
1885 import_str = PyString_InternFromString("__import__");
1886 if (import_str == NULL)
1887 return NULL;
1888 builtins_str = PyString_InternFromString("__builtins__");
1889 if (builtins_str == NULL)
1890 return NULL;
1891 silly_list = Py_BuildValue("[s]", "__doc__");
1892 if (silly_list == NULL)
1893 return NULL;
1894 }
1895
1896 /* Get the builtins from current globals */
1897 globals = PyEval_GetGlobals();
1898 if(globals != NULL) {
Guido van Rossum66468561998-10-22 15:46:50 +00001899 Py_INCREF(globals);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001900 builtins = PyObject_GetItem(globals, builtins_str);
1901 if (builtins == NULL)
1902 goto err;
1903 }
1904 else {
1905 /* No globals -- use standard builtins, and fake globals */
1906 PyErr_Clear();
1907
1908 if (standard_builtins == NULL) {
1909 standard_builtins =
1910 PyImport_ImportModule("__builtin__");
1911 if (standard_builtins == NULL)
1912 return NULL;
1913 }
1914
1915 builtins = standard_builtins;
1916 Py_INCREF(builtins);
1917 globals = Py_BuildValue("{OO}", builtins_str, builtins);
1918 if (globals == NULL)
1919 goto err;
1920 }
1921
1922 /* Get the __import__ function from the builtins */
1923 if (PyDict_Check(builtins))
1924 import=PyObject_GetItem(builtins, import_str);
1925 else
1926 import=PyObject_GetAttr(builtins, import_str);
1927 if (import == NULL)
1928 goto err;
1929
1930 /* Call the _import__ function with the proper argument list */
1931 r = PyObject_CallFunction(import, "OOOO",
1932 module_name, globals, globals, silly_list);
1933
1934 err:
1935 Py_XDECREF(globals);
1936 Py_XDECREF(builtins);
1937 Py_XDECREF(import);
1938
1939 return r;
1940}
1941
1942
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001943/* Module 'imp' provides Python access to the primitives used for
1944 importing modules.
1945*/
1946
Guido van Rossum79f25d91997-04-29 20:08:16 +00001947static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001948imp_get_magic(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001949 PyObject *self;
1950 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001951{
1952 char buf[4];
1953
Guido van Rossum43713e52000-02-29 13:59:29 +00001954 if (!PyArg_ParseTuple(args, ":get_magic"))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001955 return NULL;
Guido van Rossum6bf62da1997-04-11 20:37:35 +00001956 buf[0] = (char) ((MAGIC >> 0) & 0xff);
1957 buf[1] = (char) ((MAGIC >> 8) & 0xff);
1958 buf[2] = (char) ((MAGIC >> 16) & 0xff);
1959 buf[3] = (char) ((MAGIC >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001960
Guido van Rossum79f25d91997-04-29 20:08:16 +00001961 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001962}
1963
Guido van Rossum79f25d91997-04-29 20:08:16 +00001964static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001965imp_get_suffixes(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001966 PyObject *self;
1967 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001968{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001969 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001970 struct filedescr *fdp;
1971
Guido van Rossum43713e52000-02-29 13:59:29 +00001972 if (!PyArg_ParseTuple(args, ":get_suffixes"))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001973 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001974 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001975 if (list == NULL)
1976 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001977 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
1978 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001979 fdp->suffix, fdp->mode, fdp->type);
1980 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001981 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001982 return NULL;
1983 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001984 if (PyList_Append(list, item) < 0) {
1985 Py_DECREF(list);
1986 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001987 return NULL;
1988 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001989 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001990 }
1991 return list;
1992}
1993
Guido van Rossum79f25d91997-04-29 20:08:16 +00001994static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001995call_find_module(name, path)
1996 char *name;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001997 PyObject *path; /* list or None or NULL */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001998{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001999 extern int fclose Py_PROTO((FILE *));
Guido van Rossum79f25d91997-04-29 20:08:16 +00002000 PyObject *fob, *ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002001 struct filedescr *fdp;
2002 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002003 FILE *fp = NULL;
2004
2005 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002006 if (path == Py_None)
2007 path = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002008 fdp = find_module(name, path, pathname, MAXPATHLEN+1, &fp);
2009 if (fdp == NULL)
2010 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002011 if (fp != NULL) {
2012 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
2013 if (fob == NULL) {
2014 fclose(fp);
2015 return NULL;
2016 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002017 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002018 else {
2019 fob = Py_None;
2020 Py_INCREF(fob);
2021 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002022 ret = Py_BuildValue("Os(ssi)",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002023 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002024 Py_DECREF(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002025 return ret;
2026}
2027
Guido van Rossum79f25d91997-04-29 20:08:16 +00002028static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002029imp_find_module(self, args)
2030 PyObject *self;
2031 PyObject *args;
2032{
2033 char *name;
2034 PyObject *path = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002035 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002036 return NULL;
2037 return call_find_module(name, path);
2038}
2039
2040static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002041imp_init_builtin(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002042 PyObject *self;
2043 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002044{
2045 char *name;
2046 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002047 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002048 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002049 return NULL;
2050 ret = init_builtin(name);
2051 if (ret < 0)
2052 return NULL;
2053 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002054 Py_INCREF(Py_None);
2055 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002056 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002057 m = PyImport_AddModule(name);
2058 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002059 return m;
2060}
2061
Guido van Rossum79f25d91997-04-29 20:08:16 +00002062static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002063imp_init_frozen(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002064 PyObject *self;
2065 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002066{
2067 char *name;
2068 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002069 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002070 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002071 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002072 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002073 if (ret < 0)
2074 return NULL;
2075 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002076 Py_INCREF(Py_None);
2077 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002078 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002079 m = PyImport_AddModule(name);
2080 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002081 return m;
2082}
2083
Guido van Rossum79f25d91997-04-29 20:08:16 +00002084static PyObject *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002085imp_get_frozen_object(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002086 PyObject *self;
2087 PyObject *args;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002088{
2089 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002090
Guido van Rossum43713e52000-02-29 13:59:29 +00002091 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002092 return NULL;
2093 return get_frozen_object(name);
2094}
2095
Guido van Rossum79f25d91997-04-29 20:08:16 +00002096static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002097imp_is_builtin(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002098 PyObject *self;
2099 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002100{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002101 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002102 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002103 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002104 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002105}
2106
Guido van Rossum79f25d91997-04-29 20:08:16 +00002107static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002108imp_is_frozen(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002109 PyObject *self;
2110 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002111{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002112 char *name;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002113 struct _frozen *p;
Guido van Rossum43713e52000-02-29 13:59:29 +00002114 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002115 return NULL;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002116 p = find_frozen(name);
2117 return PyInt_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002118}
2119
2120static FILE *
2121get_file(pathname, fob, mode)
2122 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002123 PyObject *fob;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002124 char *mode;
2125{
2126 FILE *fp;
2127 if (fob == NULL) {
2128 fp = fopen(pathname, mode);
2129 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002130 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002131 }
2132 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002133 fp = PyFile_AsFile(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002134 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002135 PyErr_SetString(PyExc_ValueError,
2136 "bad/closed file object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002137 }
2138 return fp;
2139}
2140
Guido van Rossum79f25d91997-04-29 20:08:16 +00002141static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002142imp_load_compiled(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002143 PyObject *self;
2144 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002145{
2146 char *name;
2147 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002148 PyObject *fob = NULL;
2149 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002150 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002151 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002152 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002153 return NULL;
2154 fp = get_file(pathname, fob, "rb");
2155 if (fp == NULL)
2156 return NULL;
2157 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002158 if (fob == NULL)
2159 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002160 return m;
2161}
2162
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002163#ifdef HAVE_DYNAMIC_LOADING
2164
Guido van Rossum79f25d91997-04-29 20:08:16 +00002165static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002166imp_load_dynamic(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002167 PyObject *self;
2168 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002169{
2170 char *name;
2171 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002172 PyObject *fob = NULL;
2173 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00002174 FILE *fp = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002175 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002176 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002177 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002178 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00002179 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002180 if (fp == NULL)
2181 return NULL;
2182 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002183 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00002184 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002185}
2186
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002187#endif /* HAVE_DYNAMIC_LOADING */
2188
Guido van Rossum79f25d91997-04-29 20:08:16 +00002189static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002190imp_load_source(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002191 PyObject *self;
2192 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002193{
2194 char *name;
2195 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002196 PyObject *fob = NULL;
2197 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002198 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002199 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002200 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002201 return NULL;
2202 fp = get_file(pathname, fob, "r");
2203 if (fp == NULL)
2204 return NULL;
2205 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002206 if (fob == NULL)
2207 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002208 return m;
2209}
2210
Jack Jansen9c96a921995-02-15 22:57:06 +00002211#ifdef macintosh
Guido van Rossum79f25d91997-04-29 20:08:16 +00002212static PyObject *
Jack Jansen9c96a921995-02-15 22:57:06 +00002213imp_load_resource(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002214 PyObject *self;
2215 PyObject *args;
Jack Jansen9c96a921995-02-15 22:57:06 +00002216{
2217 char *name;
2218 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002219 PyObject *m;
Jack Jansen9c96a921995-02-15 22:57:06 +00002220
Guido van Rossum43713e52000-02-29 13:59:29 +00002221 if (!PyArg_ParseTuple(args, "ss:load_resource", &name, &pathname))
Jack Jansen9c96a921995-02-15 22:57:06 +00002222 return NULL;
2223 m = PyMac_LoadResourceModule(name, pathname);
2224 return m;
2225}
2226#endif /* macintosh */
2227
Guido van Rossum79f25d91997-04-29 20:08:16 +00002228static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002229imp_load_module(self, args)
2230 PyObject *self;
2231 PyObject *args;
2232{
2233 char *name;
2234 PyObject *fob;
2235 char *pathname;
2236 char *suffix; /* Unused */
2237 char *mode;
2238 int type;
2239 FILE *fp;
2240
Guido van Rossum43713e52000-02-29 13:59:29 +00002241 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002242 &name, &fob, &pathname,
2243 &suffix, &mode, &type))
2244 return NULL;
2245 if (*mode && (*mode != 'r' || strchr(mode, '+') != NULL)) {
2246 PyErr_Format(PyExc_ValueError,
2247 "invalid file open mode %.200s", mode);
2248 return NULL;
2249 }
2250 if (fob == Py_None)
2251 fp = NULL;
2252 else {
2253 if (!PyFile_Check(fob)) {
2254 PyErr_SetString(PyExc_ValueError,
2255 "load_module arg#2 should be a file or None");
2256 return NULL;
2257 }
2258 fp = get_file(pathname, fob, mode);
2259 if (fp == NULL)
2260 return NULL;
2261 }
2262 return load_module(name, fp, pathname, type);
2263}
2264
2265static PyObject *
2266imp_load_package(self, args)
2267 PyObject *self;
2268 PyObject *args;
2269{
2270 char *name;
2271 char *pathname;
Guido van Rossum43713e52000-02-29 13:59:29 +00002272 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002273 return NULL;
2274 return load_package(name, pathname);
2275}
2276
2277static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002278imp_new_module(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002279 PyObject *self;
2280 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002281{
2282 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002283 if (!PyArg_ParseTuple(args, "s:new_module", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002284 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002285 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002286}
2287
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002288/* Doc strings */
2289
2290static char doc_imp[] = "\
2291This module provides the components needed to build your own\n\
2292__import__ function. Undocumented functions are obsolete.\n\
2293";
2294
2295static char doc_find_module[] = "\
2296find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
2297Search for a module. If path is omitted or None, search for a\n\
2298built-in, frozen or special module and continue search in sys.path.\n\
2299The module name cannot contain '.'; to search for a submodule of a\n\
2300package, pass the submodule name and the package's __path__.\
2301";
2302
2303static char doc_load_module[] = "\
2304load_module(name, file, filename, (suffix, mode, type)) -> module\n\
2305Load a module, given information returned by find_module().\n\
2306The module name must include the full package name, if any.\
2307";
2308
2309static char doc_get_magic[] = "\
2310get_magic() -> string\n\
2311Return the magic number for .pyc or .pyo files.\
2312";
2313
2314static char doc_get_suffixes[] = "\
2315get_suffixes() -> [(suffix, mode, type), ...]\n\
2316Return a list of (suffix, mode, type) tuples describing the files\n\
2317that find_module() looks for.\
2318";
2319
2320static char doc_new_module[] = "\
2321new_module(name) -> module\n\
2322Create a new module. Do not enter it in sys.modules.\n\
2323The module name must include the full package name, if any.\
2324";
2325
Guido van Rossum79f25d91997-04-29 20:08:16 +00002326static PyMethodDef imp_methods[] = {
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002327 {"find_module", imp_find_module, 1, doc_find_module},
2328 {"get_magic", imp_get_magic, 1, doc_get_magic},
2329 {"get_suffixes", imp_get_suffixes, 1, doc_get_suffixes},
2330 {"load_module", imp_load_module, 1, doc_load_module},
2331 {"new_module", imp_new_module, 1, doc_new_module},
2332 /* The rest are obsolete */
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002333 {"get_frozen_object", imp_get_frozen_object, 1},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002334 {"init_builtin", imp_init_builtin, 1},
2335 {"init_frozen", imp_init_frozen, 1},
2336 {"is_builtin", imp_is_builtin, 1},
2337 {"is_frozen", imp_is_frozen, 1},
2338 {"load_compiled", imp_load_compiled, 1},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002339#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002340 {"load_dynamic", imp_load_dynamic, 1},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002341#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002342 {"load_package", imp_load_package, 1},
Jack Jansen9c96a921995-02-15 22:57:06 +00002343#ifdef macintosh
2344 {"load_resource", imp_load_resource, 1},
2345#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002346 {"load_source", imp_load_source, 1},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002347 {NULL, NULL} /* sentinel */
2348};
2349
Guido van Rossum1a8791e1998-08-04 22:46:29 +00002350static int
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002351setint(d, name, value)
2352 PyObject *d;
2353 char *name;
2354 int value;
2355{
2356 PyObject *v;
2357 int err;
2358
2359 v = PyInt_FromLong((long)value);
2360 err = PyDict_SetItemString(d, name, v);
2361 Py_XDECREF(v);
2362 return err;
2363}
2364
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002365void
2366initimp()
2367{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002368 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002369
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002370 m = Py_InitModule4("imp", imp_methods, doc_imp,
2371 NULL, PYTHON_API_VERSION);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002372 d = PyModule_GetDict(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002373
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002374 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
2375 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
2376 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
2377 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
2378 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
2379 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
2380 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
2381 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum0f84a341998-08-06 13:36:01 +00002382 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002383
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002384 failure:
2385 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002386}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002387
2388
2389/* API for embedding applications that want to add their own entries to the
2390 table of built-in modules. This should normally be called *before*
2391 Py_Initialize(). When the malloc() or realloc() call fails, -1 is returned
2392 and the existing table is unchanged.
2393
2394 After a similar function by Just van Rossum. */
2395
2396int
2397PyImport_ExtendInittab(newtab)
2398 struct _inittab *newtab;
2399{
2400 static struct _inittab *our_copy = NULL;
2401 struct _inittab *p;
2402 int i, n;
2403
2404 /* Count the number of entries in both tables */
2405 for (n = 0; newtab[n].name != NULL; n++)
2406 ;
2407 if (n == 0)
2408 return 0; /* Nothing to do */
2409 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
2410 ;
2411
2412 /* Allocate new memory for the combined table */
2413 if (our_copy == NULL)
2414 p = malloc((i+n+1) * sizeof(struct _inittab));
2415 else
2416 p = realloc(our_copy, (i+n+1) * sizeof(struct _inittab));
2417 if (p == NULL)
2418 return -1;
2419
2420 /* Copy the tables into the new memory */
2421 if (our_copy != PyImport_Inittab)
2422 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
2423 PyImport_Inittab = our_copy = p;
2424 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
2425
2426 return 0;
2427}
2428
2429/* Shorthand to add a single entry given a name and a function */
2430
2431int
2432PyImport_AppendInittab(name, initfunc)
2433 char *name;
2434 void (*initfunc)();
2435{
2436 struct _inittab newtab[2];
2437
2438 memset(newtab, '\0', sizeof newtab);
2439
2440 newtab[0].name = name;
2441 newtab[0].initfunc = initfunc;
2442
2443 return PyImport_ExtendInittab(newtab);
2444}