blob: 7e74f2bb758adbbc471f37e4bb1231d62e8df27e [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001/***********************************************************
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00002Copyright (c) 2000, BeOpen.com.
3Copyright (c) 1995-2000, Corporation for National Research Initiatives.
4Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
5All rights reserved.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00006
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00007See the file "Misc/COPYRIGHT" for information on usage and
8redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00009******************************************************************/
10
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000011/* Module definition and import implementation */
12
Guido van Rossum79f25d91997-04-29 20:08:16 +000013#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000014
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000015#include "node.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000016#include "token.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000017#include "errcode.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000018#include "marshal.h"
19#include "compile.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000020#include "eval.h"
Guido van Rossumd8bac6d1992-02-26 15:19:13 +000021#include "osdefs.h"
Guido van Rossum1ae940a1995-01-02 19:04:15 +000022#include "importdl.h"
Jack Jansen9c96a921995-02-15 22:57:06 +000023#ifdef macintosh
24#include "macglue.h"
25#endif
Guido van Rossumc405b7b1991-06-04 19:39:42 +000026
Guido van Rossum80bb9651996-12-05 23:27:02 +000027#ifdef HAVE_UNISTD_H
28#include <unistd.h>
29#endif
30
Guido van Rossumaee0bad1997-09-05 07:33:22 +000031/* We expect that stat exists on most systems.
32 It's confirmed on Unix, Mac and Windows.
33 If you don't have it, add #define DONT_HAVE_STAT to your config.h. */
34#ifndef DONT_HAVE_STAT
35#define HAVE_STAT
36
Guido van Rossum2571cc81999-04-07 16:07:23 +000037#ifndef DONT_HAVE_SYS_TYPES_H
Guido van Rossumaee0bad1997-09-05 07:33:22 +000038#include <sys/types.h>
Guido van Rossum2571cc81999-04-07 16:07:23 +000039#endif
40#ifndef DONT_HAVE_SYS_STAT_H
Guido van Rossumaee0bad1997-09-05 07:33:22 +000041#include <sys/stat.h>
Guido van Rossum63e97ad2000-07-01 01:06:56 +000042#elif defined(HAVE_STAT_H)
43#include <stat.h>
Guido van Rossum2571cc81999-04-07 16:07:23 +000044#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +000045
Guido van Rossum595d7ba1997-12-05 21:45:29 +000046#if defined(PYCC_VACPP)
47/* VisualAge C/C++ Failed to Define MountType Field in sys/stat.h */
48#define S_IFMT (S_IFDIR|S_IFCHR|S_IFREG)
49#endif
50
Guido van Rossumaee0bad1997-09-05 07:33:22 +000051#ifndef S_ISDIR
52#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
53#endif
54
55#endif
56
57
Fred Drake4c82b232000-06-30 16:18:57 +000058extern time_t PyOS_GetLastModificationTime(); /* In getmtime.c */
Guido van Rossum21d335e1993-10-15 13:01:11 +000059
Guido van Rossum6c849691994-09-26 15:47:17 +000060/* Magic word to reject .pyc files generated by other Python versions */
Guido van Rossum7faeab31995-07-07 22:50:36 +000061/* Change for each incompatible change */
62/* The value of CR and LF is incorporated so if you ever read or write
63 a .pyc file in text mode the magic number will be wrong; also, the
64 Apple MPW compiler swaps their values, botching string constants */
65/* XXX Perhaps the magic number should be frozen and a version field
66 added to the .pyc file header? */
Guido van Rossumdd5db431997-01-17 21:06:11 +000067/* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */
Guido van Rossum1cb6cd02000-04-28 19:03:54 +000068#define MAGIC (50428 | ((long)'\r'<<16) | ((long)'\n'<<24))
Guido van Rossum3ddee711991-12-16 13:06:34 +000069
Guido van Rossum96774c12000-05-01 20:19:08 +000070/* Magic word as global; note that _PyImport_Init() can change the
Jeremy Hylton9262b8a2000-06-30 04:59:17 +000071 value of this global to accommodate for alterations of how the
Guido van Rossum96774c12000-05-01 20:19:08 +000072 compiler works which are enabled by command line switches. */
73static long pyc_magic = MAGIC;
74
Guido van Rossum25ce5661997-08-02 03:10:38 +000075/* See _PyImport_FixupExtension() below */
76static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000077
Guido van Rossum771c6c81997-10-31 18:37:24 +000078/* This table is defined in config.c: */
79extern struct _inittab _PyImport_Inittab[];
80
81struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +000082
Guido van Rossumed1170e1999-12-20 21:23:41 +000083/* these tables define the module suffixes that Python recognizes */
84struct filedescr * _PyImport_Filetab = NULL;
85static const struct filedescr _PyImport_StandardFiletab[] = {
86 {".py", "r", PY_SOURCE},
87 {".pyc", "rb", PY_COMPILED},
88 {0, 0}
89};
90
Guido van Rossum1ae940a1995-01-02 19:04:15 +000091/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000092
93void
Guido van Rossum25ce5661997-08-02 03:10:38 +000094_PyImport_Init()
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000095{
Guido van Rossumed1170e1999-12-20 21:23:41 +000096 const struct filedescr *scan;
97 struct filedescr *filetab;
98 int countD = 0;
99 int countS = 0;
100
101 /* prepare _PyImport_Filetab: copy entries from
102 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
103 */
104 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
105 ++countD;
106 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
107 ++countS;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000108 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
Guido van Rossumed1170e1999-12-20 21:23:41 +0000109 memcpy(filetab, _PyImport_DynLoadFiletab,
110 countD * sizeof(struct filedescr));
111 memcpy(filetab + countD, _PyImport_StandardFiletab,
112 countS * sizeof(struct filedescr));
113 filetab[countD + countS].suffix = NULL;
114
115 _PyImport_Filetab = filetab;
116
Guido van Rossum0824f631997-03-11 18:37:35 +0000117 if (Py_OptimizeFlag) {
Guido van Rossumed1170e1999-12-20 21:23:41 +0000118 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
119 for (; filetab->suffix != NULL; filetab++) {
120 if (strcmp(filetab->suffix, ".pyc") == 0)
121 filetab->suffix = ".pyo";
Guido van Rossum0824f631997-03-11 18:37:35 +0000122 }
123 }
Guido van Rossum96774c12000-05-01 20:19:08 +0000124
125 if (Py_UnicodeFlag) {
126 /* Fix the pyc_magic so that byte compiled code created
127 using the all-Unicode method doesn't interfere with
128 code created in normal operation mode. */
129 pyc_magic = MAGIC + 1;
130 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000131}
132
Guido van Rossum25ce5661997-08-02 03:10:38 +0000133void
134_PyImport_Fini()
135{
136 Py_XDECREF(extensions);
137 extensions = NULL;
138}
139
140
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000141/* Locking primitives to prevent parallel imports of the same module
142 in different threads to return with a partially loaded module.
143 These calls are serialized by the global interpreter lock. */
144
145#ifdef WITH_THREAD
146
Guido van Rossum49b56061998-10-01 20:42:43 +0000147#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000148
Guido van Rossum65d5b571998-12-21 19:32:43 +0000149static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000150static long import_lock_thread = -1;
151static int import_lock_level = 0;
152
153static void
154lock_import()
155{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000156 long me = PyThread_get_thread_ident();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000157 if (me == -1)
158 return; /* Too bad */
159 if (import_lock == NULL)
Guido van Rossum65d5b571998-12-21 19:32:43 +0000160 import_lock = PyThread_allocate_lock();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000161 if (import_lock_thread == me) {
162 import_lock_level++;
163 return;
164 }
Guido van Rossum65d5b571998-12-21 19:32:43 +0000165 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0)) {
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000166 PyThreadState *tstate = PyEval_SaveThread();
Guido van Rossum65d5b571998-12-21 19:32:43 +0000167 PyThread_acquire_lock(import_lock, 1);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000168 PyEval_RestoreThread(tstate);
169 }
170 import_lock_thread = me;
171 import_lock_level = 1;
172}
173
174static void
175unlock_import()
176{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000177 long me = PyThread_get_thread_ident();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000178 if (me == -1)
179 return; /* Too bad */
180 if (import_lock_thread != me)
181 Py_FatalError("unlock_import: not holding the import lock");
182 import_lock_level--;
183 if (import_lock_level == 0) {
184 import_lock_thread = -1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000185 PyThread_release_lock(import_lock);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000186 }
187}
188
189#else
190
191#define lock_import()
192#define unlock_import()
193
194#endif
195
Guido van Rossum25ce5661997-08-02 03:10:38 +0000196/* Helper for sys */
197
198PyObject *
199PyImport_GetModuleDict()
200{
201 PyInterpreterState *interp = PyThreadState_Get()->interp;
202 if (interp->modules == NULL)
203 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
204 return interp->modules;
205}
206
Guido van Rossum3f5da241990-12-20 15:06:42 +0000207
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000208/* List of names to clear in sys */
209static char* sys_deletes[] = {
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000210 "path", "argv", "ps1", "ps2", "exitfunc",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000211 "exc_type", "exc_value", "exc_traceback",
212 "last_type", "last_value", "last_traceback",
213 NULL
214};
215
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000216static char* sys_files[] = {
217 "stdin", "__stdin__",
218 "stdout", "__stdout__",
219 "stderr", "__stderr__",
220 NULL
221};
222
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000223
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000224/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000225
Guido van Rossum3f5da241990-12-20 15:06:42 +0000226void
Guido van Rossum79f25d91997-04-29 20:08:16 +0000227PyImport_Cleanup()
Guido van Rossum3f5da241990-12-20 15:06:42 +0000228{
Guido van Rossum758eec01998-01-19 21:58:26 +0000229 int pos, ndone;
230 char *name;
231 PyObject *key, *value, *dict;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000232 PyInterpreterState *interp = PyThreadState_Get()->interp;
Guido van Rossum758eec01998-01-19 21:58:26 +0000233 PyObject *modules = interp->modules;
234
235 if (modules == NULL)
236 return; /* Already done */
237
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000238 /* Delete some special variables first. These are common
239 places where user values hide and people complain when their
240 destructors fail. Since the modules containing them are
241 deleted *last* of all, they would come too late in the normal
242 destruction order. Sigh. */
243
244 value = PyDict_GetItemString(modules, "__builtin__");
245 if (value != NULL && PyModule_Check(value)) {
246 dict = PyModule_GetDict(value);
247 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000248 PySys_WriteStderr("# clear __builtin__._\n");
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000249 PyDict_SetItemString(dict, "_", Py_None);
250 }
251 value = PyDict_GetItemString(modules, "sys");
252 if (value != NULL && PyModule_Check(value)) {
253 char **p;
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000254 PyObject *v;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000255 dict = PyModule_GetDict(value);
256 for (p = sys_deletes; *p != NULL; p++) {
257 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000258 PySys_WriteStderr("# clear sys.%s\n", *p);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000259 PyDict_SetItemString(dict, *p, Py_None);
260 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000261 for (p = sys_files; *p != NULL; p+=2) {
262 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000263 PySys_WriteStderr("# restore sys.%s\n", *p);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000264 v = PyDict_GetItemString(dict, *(p+1));
265 if (v == NULL)
266 v = Py_None;
267 PyDict_SetItemString(dict, *p, v);
268 }
269 }
270
271 /* First, delete __main__ */
272 value = PyDict_GetItemString(modules, "__main__");
273 if (value != NULL && PyModule_Check(value)) {
274 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000275 PySys_WriteStderr("# cleanup __main__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000276 _PyModule_Clear(value);
277 PyDict_SetItemString(modules, "__main__", Py_None);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000278 }
279
Guido van Rossum758eec01998-01-19 21:58:26 +0000280 /* The special treatment of __builtin__ here is because even
281 when it's not referenced as a module, its dictionary is
282 referenced by almost every module's __builtins__. Since
283 deleting a module clears its dictionary (even if there are
284 references left to it), we need to delete the __builtin__
285 module last. Likewise, we don't delete sys until the very
286 end because it is implicitly referenced (e.g. by print).
287
288 Also note that we 'delete' modules by replacing their entry
289 in the modules dict with None, rather than really deleting
290 them; this avoids a rehash of the modules dictionary and
291 also marks them as "non existent" so they won't be
292 re-imported. */
293
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000294 /* Next, repeatedly delete modules with a reference count of
Guido van Rossum758eec01998-01-19 21:58:26 +0000295 one (skipping __builtin__ and sys) and delete them */
296 do {
297 ndone = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000298 pos = 0;
Guido van Rossum758eec01998-01-19 21:58:26 +0000299 while (PyDict_Next(modules, &pos, &key, &value)) {
300 if (value->ob_refcnt != 1)
301 continue;
Guido van Rossum566373e1998-10-01 15:24:50 +0000302 if (PyString_Check(key) && PyModule_Check(value)) {
303 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000304 if (strcmp(name, "__builtin__") == 0)
305 continue;
306 if (strcmp(name, "sys") == 0)
307 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000308 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000309 PySys_WriteStderr(
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000310 "# cleanup[1] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000311 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000312 PyDict_SetItem(modules, key, Py_None);
313 ndone++;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000314 }
315 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000316 } while (ndone > 0);
317
Guido van Rossum758eec01998-01-19 21:58:26 +0000318 /* Next, delete all modules (still skipping __builtin__ and sys) */
319 pos = 0;
320 while (PyDict_Next(modules, &pos, &key, &value)) {
Guido van Rossum566373e1998-10-01 15:24:50 +0000321 if (PyString_Check(key) && PyModule_Check(value)) {
322 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000323 if (strcmp(name, "__builtin__") == 0)
324 continue;
325 if (strcmp(name, "sys") == 0)
326 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000327 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000328 PySys_WriteStderr("# cleanup[2] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000329 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000330 PyDict_SetItem(modules, key, Py_None);
331 }
332 }
333
334 /* Next, delete sys and __builtin__ (in that order) */
335 value = PyDict_GetItemString(modules, "sys");
336 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000337 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000338 PySys_WriteStderr("# cleanup sys\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000339 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000340 PyDict_SetItemString(modules, "sys", Py_None);
341 }
342 value = PyDict_GetItemString(modules, "__builtin__");
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 __builtin__\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, "__builtin__", Py_None);
348 }
349
350 /* Finally, clear and delete the modules directory */
351 PyDict_Clear(modules);
352 interp->modules = NULL;
353 Py_DECREF(modules);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000354}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000355
356
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000357/* Helper for pythonrun.c -- return magic number */
358
359long
Guido van Rossum79f25d91997-04-29 20:08:16 +0000360PyImport_GetMagicNumber()
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000361{
Guido van Rossum96774c12000-05-01 20:19:08 +0000362 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000363}
364
365
Guido van Rossum25ce5661997-08-02 03:10:38 +0000366/* Magic for extension modules (built-in as well as dynamically
367 loaded). To prevent initializing an extension module more than
368 once, we keep a static dictionary 'extensions' keyed by module name
369 (for built-in modules) or by filename (for dynamically loaded
370 modules), containing these modules. A copy od the module's
371 dictionary is stored by calling _PyImport_FixupExtension()
372 immediately after the module initialization function succeeds. A
373 copy can be retrieved from there by calling
374 _PyImport_FindExtension(). */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000375
Guido van Rossum79f25d91997-04-29 20:08:16 +0000376PyObject *
Guido van Rossum25ce5661997-08-02 03:10:38 +0000377_PyImport_FixupExtension(name, filename)
378 char *name;
379 char *filename;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000380{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000381 PyObject *modules, *mod, *dict, *copy;
382 if (extensions == NULL) {
383 extensions = PyDict_New();
384 if (extensions == NULL)
385 return NULL;
386 }
387 modules = PyImport_GetModuleDict();
388 mod = PyDict_GetItemString(modules, name);
389 if (mod == NULL || !PyModule_Check(mod)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000390 PyErr_Format(PyExc_SystemError,
391 "_PyImport_FixupExtension: module %.200s not loaded", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000392 return NULL;
393 }
394 dict = PyModule_GetDict(mod);
395 if (dict == NULL)
396 return NULL;
397 copy = PyObject_CallMethod(dict, "copy", "");
398 if (copy == NULL)
399 return NULL;
400 PyDict_SetItemString(extensions, filename, copy);
401 Py_DECREF(copy);
402 return copy;
403}
404
405PyObject *
406_PyImport_FindExtension(name, filename)
407 char *name;
408 char *filename;
409{
410 PyObject *dict, *mod, *mdict, *result;
411 if (extensions == NULL)
412 return NULL;
413 dict = PyDict_GetItemString(extensions, filename);
414 if (dict == NULL)
415 return NULL;
416 mod = PyImport_AddModule(name);
417 if (mod == NULL)
418 return NULL;
419 mdict = PyModule_GetDict(mod);
420 if (mdict == NULL)
421 return NULL;
422 result = PyObject_CallMethod(mdict, "update", "O", dict);
423 if (result == NULL)
424 return NULL;
425 Py_DECREF(result);
426 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000427 PySys_WriteStderr("import %s # previously loaded (%s)\n",
Guido van Rossum25ce5661997-08-02 03:10:38 +0000428 name, filename);
429 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000430}
431
432
433/* Get the module object corresponding to a module name.
434 First check the modules dictionary if there's one there,
435 if not, create a new one and insert in in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000436 Because the former action is most common, THIS DOES NOT RETURN A
437 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000438
Guido van Rossum79f25d91997-04-29 20:08:16 +0000439PyObject *
440PyImport_AddModule(name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000441 char *name;
442{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000443 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000444 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000445
Guido van Rossum25ce5661997-08-02 03:10:38 +0000446 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
Guido van Rossum79f25d91997-04-29 20:08:16 +0000447 PyModule_Check(m))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000448 return m;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000449 m = PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000450 if (m == NULL)
451 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000452 if (PyDict_SetItemString(modules, name, m) != 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000453 Py_DECREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000454 return NULL;
455 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000456 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000457
458 return m;
459}
460
461
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000462/* Execute a code object in a module and return the module object
463 WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000464
Guido van Rossum79f25d91997-04-29 20:08:16 +0000465PyObject *
466PyImport_ExecCodeModule(name, co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000467 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000468 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000469{
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000470 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
471}
472
473PyObject *
474PyImport_ExecCodeModuleEx(name, co, pathname)
475 char *name;
476 PyObject *co;
477 char *pathname;
478{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000479 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000480 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000481
Guido van Rossum79f25d91997-04-29 20:08:16 +0000482 m = PyImport_AddModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000483 if (m == NULL)
484 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000485 d = PyModule_GetDict(m);
486 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
487 if (PyDict_SetItemString(d, "__builtins__",
488 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000489 return NULL;
490 }
Guido van Rossum9c9a07c1996-05-16 20:43:40 +0000491 /* Remember the filename as the __file__ attribute */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000492 v = NULL;
493 if (pathname != NULL) {
494 v = PyString_FromString(pathname);
495 if (v == NULL)
496 PyErr_Clear();
497 }
498 if (v == NULL) {
499 v = ((PyCodeObject *)co)->co_filename;
500 Py_INCREF(v);
501 }
502 if (PyDict_SetItemString(d, "__file__", v) != 0)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000503 PyErr_Clear(); /* Not important enough to report */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000504 Py_DECREF(v);
505
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000506 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000507 if (v == NULL)
508 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000509 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000510
Guido van Rossum25ce5661997-08-02 03:10:38 +0000511 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000512 PyErr_Format(PyExc_ImportError,
513 "Loaded module %.200s not found in sys.modules",
514 name);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000515 return NULL;
516 }
517
Guido van Rossum79f25d91997-04-29 20:08:16 +0000518 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000519
520 return m;
521}
522
523
524/* Given a pathname for a Python source file, fill a buffer with the
525 pathname for the corresponding compiled file. Return the pathname
526 for the compiled file, or NULL if there's no space in the buffer.
527 Doesn't set an exception. */
528
529static char *
530make_compiled_pathname(pathname, buf, buflen)
531 char *pathname;
532 char *buf;
Fred Drake4c82b232000-06-30 16:18:57 +0000533 size_t buflen;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000534{
Fred Drake4c82b232000-06-30 16:18:57 +0000535 size_t len;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000536
537 len = strlen(pathname);
538 if (len+2 > buflen)
539 return NULL;
540 strcpy(buf, pathname);
Guido van Rossum0824f631997-03-11 18:37:35 +0000541 strcpy(buf+len, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000542
543 return buf;
544}
545
546
547/* Given a pathname for a Python source file, its time of last
548 modification, and a pathname for a compiled file, check whether the
549 compiled file represents the same version of the source. If so,
550 return a FILE pointer for the compiled file, positioned just after
551 the header; if not, return NULL.
552 Doesn't set an exception. */
553
554static FILE *
555check_compiled_module(pathname, mtime, cpathname)
556 char *pathname;
557 long mtime;
558 char *cpathname;
559{
560 FILE *fp;
561 long magic;
562 long pyc_mtime;
563
564 fp = fopen(cpathname, "rb");
565 if (fp == NULL)
566 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000567 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000568 if (magic != pyc_magic) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000569 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000570 PySys_WriteStderr("# %s has bad magic\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000571 fclose(fp);
572 return NULL;
573 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000574 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000575 if (pyc_mtime != mtime) {
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 mtime\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 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000582 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000583 return fp;
584}
585
586
587/* Read a code object from a file and check it for validity */
588
Guido van Rossum79f25d91997-04-29 20:08:16 +0000589static PyCodeObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000590read_compiled_module(cpathname, fp)
591 char *cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000592 FILE *fp;
593{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000594 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000595
Guido van Rossum79f25d91997-04-29 20:08:16 +0000596 co = PyMarshal_ReadObjectFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000597 /* Ugly: rd_object() may return NULL with or without error */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000598 if (co == NULL || !PyCode_Check(co)) {
599 if (!PyErr_Occurred())
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000600 PyErr_Format(PyExc_ImportError,
601 "Non-code object in %.200s", cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000602 Py_XDECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000603 return NULL;
604 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000605 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000606}
607
608
609/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000610 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000611
Guido van Rossum79f25d91997-04-29 20:08:16 +0000612static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000613load_compiled_module(name, cpathname, fp)
614 char *name;
615 char *cpathname;
616 FILE *fp;
617{
618 long magic;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000619 PyCodeObject *co;
620 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000621
Guido van Rossum79f25d91997-04-29 20:08:16 +0000622 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000623 if (magic != pyc_magic) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000624 PyErr_Format(PyExc_ImportError,
625 "Bad magic number in %.200s", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000626 return NULL;
627 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000628 (void) PyMarshal_ReadLongFromFile(fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000629 co = read_compiled_module(cpathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000630 if (co == NULL)
631 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000632 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000633 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000634 name, cpathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000635 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000636 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000637
638 return m;
639}
640
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000641/* Parse a source file and return the corresponding code object */
642
Guido van Rossum79f25d91997-04-29 20:08:16 +0000643static PyCodeObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000644parse_source_module(pathname, fp)
645 char *pathname;
646 FILE *fp;
647{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000648 PyCodeObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000649 node *n;
650
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000651 n = PyParser_SimpleParseFile(fp, pathname, Py_file_input);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000652 if (n == NULL)
653 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000654 co = PyNode_Compile(n, pathname);
655 PyNode_Free(n);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000656
657 return co;
658}
659
660
661/* Write a compiled module to a file, placing the time of last
662 modification of its source into the header.
663 Errors are ignored, if a write error occurs an attempt is made to
664 remove the file. */
665
666static void
667write_compiled_module(co, cpathname, mtime)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000668 PyCodeObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000669 char *cpathname;
670 long mtime;
671{
672 FILE *fp;
673
674 fp = fopen(cpathname, "wb");
675 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000676 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000677 PySys_WriteStderr(
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000678 "# can't create %s\n", cpathname);
679 return;
680 }
Guido van Rossum96774c12000-05-01 20:19:08 +0000681 PyMarshal_WriteLongToFile(pyc_magic, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000682 /* First write a 0 for mtime */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000683 PyMarshal_WriteLongToFile(0L, fp);
684 PyMarshal_WriteObjectToFile((PyObject *)co, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000685 if (ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000686 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000687 PySys_WriteStderr("# can't write %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000688 /* Don't keep partial file */
689 fclose(fp);
690 (void) unlink(cpathname);
691 return;
692 }
693 /* Now write the true mtime */
694 fseek(fp, 4L, 0);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000695 PyMarshal_WriteLongToFile(mtime, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000696 fflush(fp);
697 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000698 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000699 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000700#ifdef macintosh
Guido van Rossumbe1a6e21996-02-21 15:29:20 +0000701 setfiletype(cpathname, 'Pyth', 'PYC ');
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000702#endif
703}
704
705
706/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000707 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
708 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000709
Guido van Rossum79f25d91997-04-29 20:08:16 +0000710static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000711load_source_module(name, pathname, fp)
712 char *name;
713 char *pathname;
714 FILE *fp;
715{
Fred Drake4c82b232000-06-30 16:18:57 +0000716 time_t mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000717 FILE *fpc;
718 char buf[MAXPATHLEN+1];
719 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000720 PyCodeObject *co;
721 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000722
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000723 mtime = PyOS_GetLastModificationTime(pathname, fp);
Fred Drake4c82b232000-06-30 16:18:57 +0000724 if (mtime == -1)
725 return NULL;
726#if SIZEOF_TIME_T > 4
727 /* Python's .pyc timestamp handling presumes that the timestamp fits
728 in 4 bytes. This will be fine until sometime in the year 2038,
729 when a 4-byte signed time_t will overflow.
730 */
731 if (mtime >> 32) {
732 PyErr_SetString(PyExc_OverflowError,
733 "modification time overflows a 4 bytes");
734 return NULL;
735 }
736#endif
737 cpathname = make_compiled_pathname(pathname, buf, (size_t)MAXPATHLEN+1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000738 if (cpathname != NULL &&
739 (fpc = check_compiled_module(pathname, mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000740 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000741 fclose(fpc);
742 if (co == NULL)
743 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000744 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000745 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000746 name, cpathname);
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000747 pathname = cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000748 }
749 else {
750 co = parse_source_module(pathname, fp);
751 if (co == NULL)
752 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000753 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000754 PySys_WriteStderr("import %s # from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000755 name, pathname);
756 write_compiled_module(co, cpathname, mtime);
757 }
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000758 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000759 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000760
761 return m;
762}
763
764
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000765/* Forward */
766static PyObject *load_module Py_PROTO((char *, FILE *, char *, int));
767static struct filedescr *find_module Py_PROTO((char *, PyObject *,
Fred Drake4c82b232000-06-30 16:18:57 +0000768 char *, size_t, FILE **));
Guido van Rossuma86f77d1997-09-09 18:53:47 +0000769static struct _frozen *find_frozen Py_PROTO((char *name));
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000770
771/* Load a package and return its module object WITH INCREMENTED
772 REFERENCE COUNT */
773
774static PyObject *
775load_package(name, pathname)
776 char *name;
777 char *pathname;
778{
779 PyObject *m, *d, *file, *path;
780 int err;
781 char buf[MAXPATHLEN+1];
782 FILE *fp = NULL;
783 struct filedescr *fdp;
784
785 m = PyImport_AddModule(name);
786 if (m == NULL)
787 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000788 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000789 PySys_WriteStderr("import %s # directory %s\n",
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000790 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000791 d = PyModule_GetDict(m);
792 file = PyString_FromString(pathname);
793 if (file == NULL)
794 return NULL;
795 path = Py_BuildValue("[O]", file);
796 if (path == NULL) {
797 Py_DECREF(file);
798 return NULL;
799 }
800 err = PyDict_SetItemString(d, "__file__", file);
801 if (err == 0)
802 err = PyDict_SetItemString(d, "__path__", path);
803 if (err != 0) {
804 m = NULL;
805 goto cleanup;
806 }
807 buf[0] = '\0';
808 fdp = find_module("__init__", path, buf, sizeof(buf), &fp);
809 if (fdp == NULL) {
810 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
811 PyErr_Clear();
812 }
813 else
814 m = NULL;
815 goto cleanup;
816 }
817 m = load_module(name, fp, buf, fdp->type);
818 if (fp != NULL)
819 fclose(fp);
820 cleanup:
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000821 Py_XDECREF(path);
822 Py_XDECREF(file);
823 return m;
824}
825
826
827/* Helper to test for built-in module */
828
829static int
830is_builtin(name)
831 char *name;
832{
833 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +0000834 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
835 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
836 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000837 return -1;
838 else
839 return 1;
840 }
841 }
842 return 0;
843}
844
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000845
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000846/* Search the path (default sys.path) for a module. Return the
847 corresponding filedescr struct, and (via return arguments) the
848 pathname and an open file. Return NULL if the module is not found. */
849
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000850#ifdef MS_COREDLL
851extern FILE *PyWin_FindRegisteredModule();
852#endif
853
Guido van Rossum0980bd91998-02-13 17:18:36 +0000854#ifdef CHECK_IMPORT_CASE
855static int check_case(char *, int, int, char *);
856#endif
857
Guido van Rossum197346f1997-10-31 18:38:52 +0000858static int find_init_module Py_PROTO((char *)); /* Forward */
859
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000860static struct filedescr *
Guido van Rossum0506a431998-08-11 15:07:39 +0000861find_module(realname, path, buf, buflen, p_fp)
862 char *realname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000863 PyObject *path;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000864 /* Output parameters: */
865 char *buf;
Fred Drake4c82b232000-06-30 16:18:57 +0000866 size_t buflen;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000867 FILE **p_fp;
868{
Fred Drake4c82b232000-06-30 16:18:57 +0000869 int i, npath;
870 size_t len, namelen;
Guido van Rossuma5568d31998-03-05 03:45:08 +0000871 struct _frozen *f;
Guido van Rossum80bb9651996-12-05 23:27:02 +0000872 struct filedescr *fdp = NULL;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +0000873 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000874 struct stat statbuf;
Guido van Rossuma5568d31998-03-05 03:45:08 +0000875 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
876 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
877 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Guido van Rossum0506a431998-08-11 15:07:39 +0000878 char name[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000879
Fred Drake4c82b232000-06-30 16:18:57 +0000880 if (strlen(realname) > MAXPATHLEN) {
881 PyErr_SetString(PyExc_OverflowError, "module name is too long");
882 return NULL;
883 }
Guido van Rossum0506a431998-08-11 15:07:39 +0000884 strcpy(name, realname);
885
886 if (path != NULL && PyString_Check(path)) {
887 /* Submodule of "frozen" package:
888 Set name to the fullname, path to NULL
889 and continue as "usual" */
890 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
891 PyErr_SetString(PyExc_ImportError,
892 "full frozen module name too long");
893 return NULL;
894 }
895 strcpy(buf, PyString_AsString(path));
896 strcat(buf, ".");
897 strcat(buf, name);
898 strcpy(name, buf);
899 path = NULL;
900 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000901 if (path == NULL) {
902 if (is_builtin(name)) {
Guido van Rossuma5568d31998-03-05 03:45:08 +0000903 strcpy(buf, name);
904 return &fd_builtin;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000905 }
Guido van Rossuma5568d31998-03-05 03:45:08 +0000906 if ((f = find_frozen(name)) != NULL) {
907 strcpy(buf, name);
908 return &fd_frozen;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000909 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000910
Guido van Rossumac279101996-08-22 23:10:58 +0000911#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000912 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
913 if (fp != NULL) {
914 *p_fp = fp;
915 return fdp;
916 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +0000917#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +0000918 path = PySys_GetObject("path");
919 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000920 if (path == NULL || !PyList_Check(path)) {
921 PyErr_SetString(PyExc_ImportError,
Guido van Rossuma5568d31998-03-05 03:45:08 +0000922 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000923 return NULL;
924 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000925 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000926 namelen = strlen(name);
927 for (i = 0; i < npath; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000928 PyObject *v = PyList_GetItem(path, i);
929 if (!PyString_Check(v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000930 continue;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000931 len = PyString_Size(v);
Guido van Rossumef3d02e1997-07-21 14:54:36 +0000932 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000933 continue; /* Too long */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000934 strcpy(buf, PyString_AsString(v));
Fred Drake4c82b232000-06-30 16:18:57 +0000935 if (strlen(buf) != len)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000936 continue; /* v contains '\0' */
Jack Jansen9c96a921995-02-15 22:57:06 +0000937#ifdef macintosh
Guido van Rossum741689d1997-08-12 14:53:39 +0000938#ifdef INTERN_STRINGS
939 /*
940 ** Speedup: each sys.path item is interned, and
941 ** FindResourceModule remembers which items refer to
942 ** folders (so we don't have to bother trying to look
943 ** into them for resources).
944 */
945 PyString_InternInPlace(&PyList_GET_ITEM(path, i));
946 v = PyList_GET_ITEM(path, i);
947#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000948 if (PyMac_FindResourceModule((PyStringObject *)v, name, buf)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000949 static struct filedescr resfiledescr =
950 {"", "", PY_RESOURCE};
Jack Jansen9c96a921995-02-15 22:57:06 +0000951
952 return &resfiledescr;
953 }
Guido van Rossum0f84a341998-08-06 13:36:01 +0000954 if (PyMac_FindCodeResourceModule((PyStringObject *)v, name, buf)) {
955 static struct filedescr resfiledescr =
956 {"", "", PY_CODERESOURCE};
957
958 return &resfiledescr;
959 }
Jack Jansen9c96a921995-02-15 22:57:06 +0000960#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000961 if (len > 0 && buf[len-1] != SEP
962#ifdef ALTSEP
963 && buf[len-1] != ALTSEP
964#endif
965 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000966 buf[len++] = SEP;
Guido van Rossum40f470f1996-05-23 22:51:04 +0000967#ifdef IMPORT_8x3_NAMES
Guido van Rossume8c27bb1997-12-17 18:57:16 +0000968 /* see if we are searching in directory dos-8x3 */
969 if (len > 7 && !strncmp(buf + len - 8, "dos-8x3", 7)){
Guido van Rossum40f470f1996-05-23 22:51:04 +0000970 int j;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000971 char ch; /* limit name to 8 lower-case characters */
Guido van Rossum40f470f1996-05-23 22:51:04 +0000972 for (j = 0; (ch = name[j]) && j < 8; j++)
973 if (isupper(ch))
974 buf[len++] = tolower(ch);
975 else
976 buf[len++] = ch;
977 }
Guido van Rossume8c27bb1997-12-17 18:57:16 +0000978 else /* Not in dos-8x3, use the full name */
Guido van Rossum6f489d91996-06-28 20:15:15 +0000979#endif
Guido van Rossum0e41c8c1996-06-20 14:18:34 +0000980 {
Guido van Rossum40f470f1996-05-23 22:51:04 +0000981 strcpy(buf+len, name);
982 len += namelen;
983 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000984#ifdef HAVE_STAT
985 if (stat(buf, &statbuf) == 0) {
Guido van Rossum197346f1997-10-31 18:38:52 +0000986 if (S_ISDIR(statbuf.st_mode)) {
Guido van Rossum0980bd91998-02-13 17:18:36 +0000987 if (find_init_module(buf)) {
988#ifdef CHECK_IMPORT_CASE
989 if (!check_case(buf, len, namelen,
990 name))
991 return NULL;
992#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +0000993 return &fd_package;
Guido van Rossum0980bd91998-02-13 17:18:36 +0000994 }
Guido van Rossum197346f1997-10-31 18:38:52 +0000995 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000996 }
997#else
998 /* XXX How are you going to test for directories? */
999#endif
Guido van Rossum9a61dc91997-10-08 15:25:08 +00001000#ifdef macintosh
1001 fdp = PyMac_FindModuleExtension(buf, &len, name);
1002 if (fdp)
1003 fp = fopen(buf, fdp->mode);
1004#else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001005 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001006 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001007 if (Py_VerboseFlag > 1)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001008 PySys_WriteStderr("# trying %s\n", buf);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001009 fp = fopen(buf, fdp->mode);
1010 if (fp != NULL)
1011 break;
1012 }
Guido van Rossum741689d1997-08-12 14:53:39 +00001013#endif /* !macintosh */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001014 if (fp != NULL)
1015 break;
1016 }
1017 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001018 PyErr_Format(PyExc_ImportError,
1019 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001020 return NULL;
1021 }
Guido van Rossum0980bd91998-02-13 17:18:36 +00001022#ifdef CHECK_IMPORT_CASE
1023 if (!check_case(buf, len, namelen, name)) {
1024 fclose(fp);
1025 return NULL;
1026 }
1027#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001028
1029 *p_fp = fp;
1030 return fdp;
1031}
1032
Guido van Rossum0980bd91998-02-13 17:18:36 +00001033#ifdef CHECK_IMPORT_CASE
1034
1035#ifdef MS_WIN32
1036#include <windows.h>
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001037#include <ctype.h>
1038
1039static int
1040allcaps8x3(s)
1041 char *s;
1042{
1043 /* Return 1 if s is an 8.3 filename in ALLCAPS */
1044 char c;
1045 char *dot = strchr(s, '.');
1046 char *end = strchr(s, '\0');
1047 if (dot != NULL) {
1048 if (dot-s > 8)
Guido van Rossum22b65a82000-05-01 17:36:58 +00001049 return 0; /* More than 8 before '.' */
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001050 if (end-dot > 4)
Guido van Rossum22b65a82000-05-01 17:36:58 +00001051 return 0; /* More than 3 after '.' */
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001052 end = strchr(dot+1, '.');
1053 if (end != NULL)
Guido van Rossum22b65a82000-05-01 17:36:58 +00001054 return 0; /* More than one dot */
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001055 }
1056 else if (end-s > 8)
Guido van Rossum22b65a82000-05-01 17:36:58 +00001057 return 0; /* More than 8 and no dot */
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001058 while ((c = *s++)) {
1059 if (islower(c))
1060 return 0;
1061 }
1062 return 1;
1063}
1064
Guido van Rossum0980bd91998-02-13 17:18:36 +00001065static int
1066check_case(char *buf, int len, int namelen, char *name)
1067{
1068 WIN32_FIND_DATA data;
1069 HANDLE h;
1070 if (getenv("PYTHONCASEOK") != NULL)
1071 return 1;
1072 h = FindFirstFile(buf, &data);
1073 if (h == INVALID_HANDLE_VALUE) {
1074 PyErr_Format(PyExc_NameError,
1075 "Can't find file for module %.100s\n(filename %.300s)",
1076 name, buf);
1077 return 0;
1078 }
1079 FindClose(h);
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001080 if (allcaps8x3(data.cFileName)) {
1081 /* Skip the test if the filename is ALL.CAPS. This can
1082 happen in certain circumstances beyond our control,
1083 e.g. when software is installed under NT on a FAT
1084 filesystem and then the same FAT filesystem is used
1085 under Windows 95. */
1086 return 1;
1087 }
Guido van Rossum0980bd91998-02-13 17:18:36 +00001088 if (strncmp(data.cFileName, name, namelen) != 0) {
1089 strcpy(buf+len-namelen, data.cFileName);
1090 PyErr_Format(PyExc_NameError,
1091 "Case mismatch for module name %.100s\n(filename %.300s)",
1092 name, buf);
1093 return 0;
1094 }
1095 return 1;
1096}
1097#endif /* MS_WIN32 */
1098
1099#ifdef macintosh
1100#include <TextUtils.h>
Guido van Rossumb33aa1a2000-04-24 15:08:18 +00001101#ifdef USE_GUSI1
Guido van Rossuma0f0a331998-09-14 13:40:53 +00001102#include "TFileSpec.h" /* for Path2FSSpec() */
1103#endif
Guido van Rossum0980bd91998-02-13 17:18:36 +00001104static int
1105check_case(char *buf, int len, int namelen, char *name)
1106{
1107 FSSpec fss;
1108 OSErr err;
Guido van Rossumb33aa1a2000-04-24 15:08:18 +00001109#ifndef USE_GUSI1
Guido van Rossuma0f0a331998-09-14 13:40:53 +00001110 err = FSMakeFSSpec(0, 0, Pstring(buf), &fss);
1111#else
1112 /* GUSI's Path2FSSpec() resolves all possible aliases nicely on
1113 the way, which is fine for all directories, but here we need
1114 the original name of the alias file (say, Dlg.ppc.slb, not
1115 toolboxmodules.ppc.slb). */
1116 char *colon;
1117 err = Path2FSSpec(buf, &fss);
1118 if (err == noErr) {
1119 colon = strrchr(buf, ':'); /* find filename */
1120 if (colon != NULL)
1121 err = FSMakeFSSpec(fss.vRefNum, fss.parID,
1122 Pstring(colon+1), &fss);
1123 else
1124 err = FSMakeFSSpec(fss.vRefNum, fss.parID,
1125 fss.name, &fss);
1126 }
1127#endif
Guido van Rossum0980bd91998-02-13 17:18:36 +00001128 if (err) {
1129 PyErr_Format(PyExc_NameError,
Guido van Rossuma0f0a331998-09-14 13:40:53 +00001130 "Can't find file for module %.100s\n(filename %.300s)",
1131 name, buf);
Guido van Rossum0980bd91998-02-13 17:18:36 +00001132 return 0;
1133 }
Guido van Rossum63e97ad2000-07-01 01:06:56 +00001134 if ( namelen > fss.name[0] || strncmp(name, (char *)fss.name+1, namelen) != 0 ) {
Guido van Rossum0980bd91998-02-13 17:18:36 +00001135 PyErr_Format(PyExc_NameError,
Guido van Rossuma0f0a331998-09-14 13:40:53 +00001136 "Case mismatch for module name %.100s\n(filename %.300s)",
1137 name, fss.name);
Guido van Rossum0980bd91998-02-13 17:18:36 +00001138 return 0;
1139 }
1140 return 1;
1141}
1142#endif /* macintosh */
1143
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001144#ifdef DJGPP
Guido van Rossumaeca79b1998-02-18 16:21:00 +00001145#include <dir.h>
1146
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001147static int
1148check_case(char *buf, int len, int namelen, char *name)
1149{
1150 struct ffblk ffblk;
1151 int done;
1152
1153 if (getenv("PYTHONCASEOK") != NULL)
1154 return 1;
Guido van Rossumaeca79b1998-02-18 16:21:00 +00001155 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001156 if (done) {
1157 PyErr_Format(PyExc_NameError,
1158 "Can't find file for module %.100s\n(filename %.300s)",
1159 name, buf);
1160 return 0;
1161 }
1162
1163 if (strncmp(ffblk.ff_name, name, namelen) != 0) {
1164 strcpy(buf+len-namelen, ffblk.ff_name);
1165 PyErr_Format(PyExc_NameError,
1166 "Case mismatch for module name %.100s\n(filename %.300s)",
1167 name, buf);
1168 return 0;
1169 }
1170 return 1;
1171}
1172#endif
1173
Guido van Rossum8766a771998-04-10 23:44:32 +00001174#endif /* CHECK_IMPORT_CASE */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001175
Guido van Rossum197346f1997-10-31 18:38:52 +00001176#ifdef HAVE_STAT
1177/* Helper to look for __init__.py or __init__.py[co] in potential package */
1178static int
1179find_init_module(buf)
1180 char *buf;
1181{
Fred Drake4c82b232000-06-30 16:18:57 +00001182 size_t save_len = strlen(buf);
1183 size_t i = save_len;
Guido van Rossum197346f1997-10-31 18:38:52 +00001184 struct stat statbuf;
1185
1186 if (save_len + 13 >= MAXPATHLEN)
1187 return 0;
1188 buf[i++] = SEP;
1189 strcpy(buf+i, "__init__.py");
1190 if (stat(buf, &statbuf) == 0) {
1191 buf[save_len] = '\0';
1192 return 1;
1193 }
1194 i += strlen(buf+i);
1195 if (Py_OptimizeFlag)
1196 strcpy(buf+i, "o");
1197 else
1198 strcpy(buf+i, "c");
1199 if (stat(buf, &statbuf) == 0) {
1200 buf[save_len] = '\0';
1201 return 1;
1202 }
1203 buf[save_len] = '\0';
1204 return 0;
1205}
1206#endif /* HAVE_STAT */
1207
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001208
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001209static int init_builtin Py_PROTO((char *)); /* Forward */
1210
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001211/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001212 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001213
Guido van Rossum79f25d91997-04-29 20:08:16 +00001214static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001215load_module(name, fp, buf, type)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001216 char *name;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001217 FILE *fp;
1218 char *buf;
1219 int type;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001220{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001221 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001222 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001223 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001224
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001225 /* First check that there's an open file (if we need one) */
1226 switch (type) {
1227 case PY_SOURCE:
1228 case PY_COMPILED:
1229 if (fp == NULL) {
1230 PyErr_Format(PyExc_ValueError,
1231 "file object required for import (type code %d)",
1232 type);
1233 return NULL;
1234 }
1235 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001236
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001237 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001238
1239 case PY_SOURCE:
1240 m = load_source_module(name, buf, fp);
1241 break;
1242
1243 case PY_COMPILED:
1244 m = load_compiled_module(name, buf, fp);
1245 break;
1246
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001247#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001248 case C_EXTENSION:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001249 m = _PyImport_LoadDynamicModule(name, buf, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001250 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001251#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001252
Jack Jansen9c96a921995-02-15 22:57:06 +00001253#ifdef macintosh
1254 case PY_RESOURCE:
1255 m = PyMac_LoadResourceModule(name, buf);
1256 break;
Guido van Rossum0f84a341998-08-06 13:36:01 +00001257 case PY_CODERESOURCE:
1258 m = PyMac_LoadCodeResourceModule(name, buf);
1259 break;
Jack Jansen9c96a921995-02-15 22:57:06 +00001260#endif
1261
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001262 case PKG_DIRECTORY:
1263 m = load_package(name, buf);
1264 break;
1265
1266 case C_BUILTIN:
1267 case PY_FROZEN:
Guido van Rossuma5568d31998-03-05 03:45:08 +00001268 if (buf != NULL && buf[0] != '\0')
1269 name = buf;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001270 if (type == C_BUILTIN)
1271 err = init_builtin(name);
1272 else
1273 err = PyImport_ImportFrozenModule(name);
1274 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001275 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001276 if (err == 0) {
1277 PyErr_Format(PyExc_ImportError,
1278 "Purported %s module %.200s not found",
1279 type == C_BUILTIN ?
1280 "builtin" : "frozen",
1281 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001282 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001283 }
1284 modules = PyImport_GetModuleDict();
1285 m = PyDict_GetItemString(modules, name);
1286 if (m == NULL) {
1287 PyErr_Format(
1288 PyExc_ImportError,
1289 "%s module %.200s not properly initialized",
1290 type == C_BUILTIN ?
1291 "builtin" : "frozen",
1292 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001293 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001294 }
1295 Py_INCREF(m);
1296 break;
1297
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001298 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001299 PyErr_Format(PyExc_ImportError,
1300 "Don't know how to import %.200s (type code %d)",
1301 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001302 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001303
1304 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001305
1306 return m;
1307}
1308
1309
1310/* Initialize a built-in module.
1311 Return 1 for succes, 0 if the module is not found, and -1 with
1312 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001313
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001314static int
1315init_builtin(name)
1316 char *name;
1317{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001318 struct _inittab *p;
1319 PyObject *mod;
1320
1321 if ((mod = _PyImport_FindExtension(name, name)) != NULL)
1322 return 1;
1323
Guido van Rossum771c6c81997-10-31 18:37:24 +00001324 for (p = PyImport_Inittab; p->name != NULL; p++) {
Guido van Rossum25ce5661997-08-02 03:10:38 +00001325 if (strcmp(name, p->name) == 0) {
1326 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001327 PyErr_Format(PyExc_ImportError,
1328 "Cannot re-init internal module %.200s",
1329 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001330 return -1;
1331 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001332 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001333 PySys_WriteStderr("import %s # builtin\n", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001334 (*p->initfunc)();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001335 if (PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001336 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001337 if (_PyImport_FixupExtension(name, name) == NULL)
1338 return -1;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001339 return 1;
1340 }
1341 }
1342 return 0;
1343}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001344
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001345
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001346/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001347
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001348static struct _frozen *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001349find_frozen(name)
1350 char *name;
1351{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001352 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001353
Guido van Rossum79f25d91997-04-29 20:08:16 +00001354 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001355 if (p->name == NULL)
1356 return NULL;
1357 if (strcmp(p->name, name) == 0)
1358 break;
1359 }
1360 return p;
1361}
1362
Guido van Rossum79f25d91997-04-29 20:08:16 +00001363static PyObject *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001364get_frozen_object(name)
1365 char *name;
1366{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001367 struct _frozen *p = find_frozen(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001368 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001369
1370 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001371 PyErr_Format(PyExc_ImportError,
1372 "No such frozen object named %.200s",
1373 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001374 return NULL;
1375 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001376 size = p->size;
1377 if (size < 0)
1378 size = -size;
1379 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001380}
1381
1382/* Initialize a frozen module.
1383 Return 1 for succes, 0 if the module is not found, and -1 with
1384 an exception set if the initialization failed.
1385 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001386
1387int
Guido van Rossum79f25d91997-04-29 20:08:16 +00001388PyImport_ImportFrozenModule(name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001389 char *name;
1390{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001391 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001392 PyObject *co;
1393 PyObject *m;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001394 int ispackage;
1395 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001396
1397 if (p == NULL)
1398 return 0;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001399 size = p->size;
1400 ispackage = (size < 0);
1401 if (ispackage)
1402 size = -size;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001403 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001404 PySys_WriteStderr("import %s # frozen%s\n",
Guido van Rossuma5568d31998-03-05 03:45:08 +00001405 name, ispackage ? " package" : "");
1406 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001407 if (co == NULL)
1408 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001409 if (!PyCode_Check(co)) {
1410 Py_DECREF(co);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001411 PyErr_Format(PyExc_TypeError,
1412 "frozen object %.200s is not a code object",
1413 name);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001414 return -1;
1415 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001416 if (ispackage) {
1417 /* Set __path__ to the package name */
1418 PyObject *d, *s;
1419 int err;
1420 m = PyImport_AddModule(name);
1421 if (m == NULL)
1422 return -1;
1423 d = PyModule_GetDict(m);
1424 s = PyString_InternFromString(name);
1425 if (s == NULL)
1426 return -1;
1427 err = PyDict_SetItemString(d, "__path__", s);
1428 Py_DECREF(s);
1429 if (err != 0)
1430 return err;
1431 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00001432 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum79f25d91997-04-29 20:08:16 +00001433 Py_DECREF(co);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001434 if (m == NULL)
1435 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001436 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001437 return 1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001438}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001439
1440
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001441/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001442 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001443
Guido van Rossum79f25d91997-04-29 20:08:16 +00001444PyObject *
1445PyImport_ImportModule(name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001446 char *name;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001447{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001448 static PyObject *fromlist = NULL;
1449 if (fromlist == NULL && strchr(name, '.') != NULL) {
1450 fromlist = Py_BuildValue("[s]", "*");
1451 if (fromlist == NULL)
1452 return NULL;
1453 }
1454 return PyImport_ImportModuleEx(name, NULL, NULL, fromlist);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001455}
1456
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001457/* Forward declarations for helper routines */
1458static PyObject *get_parent Py_PROTO((PyObject *globals,
1459 char *buf, int *p_buflen));
1460static PyObject *load_next Py_PROTO((PyObject *mod, PyObject *altmod,
1461 char **p_name, char *buf, int *p_buflen));
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001462static int mark_miss Py_PROTO((char *name));
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001463static int ensure_fromlist Py_PROTO((PyObject *mod, PyObject *fromlist,
Guido van Rossum9905ef91997-09-08 16:07:11 +00001464 char *buf, int buflen, int recursive));
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001465static PyObject * import_submodule Py_PROTO((PyObject *mod,
1466 char *name, char *fullname));
1467
1468/* The Magnum Opus of dotted-name import :-) */
1469
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001470static PyObject *
1471import_module_ex(name, globals, locals, fromlist)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001472 char *name;
1473 PyObject *globals;
1474 PyObject *locals;
1475 PyObject *fromlist;
1476{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001477 char buf[MAXPATHLEN+1];
1478 int buflen = 0;
1479 PyObject *parent, *head, *next, *tail;
1480
1481 parent = get_parent(globals, buf, &buflen);
1482 if (parent == NULL)
1483 return NULL;
1484
1485 head = load_next(parent, Py_None, &name, buf, &buflen);
1486 if (head == NULL)
1487 return NULL;
1488
1489 tail = head;
1490 Py_INCREF(tail);
1491 while (name) {
1492 next = load_next(tail, tail, &name, buf, &buflen);
1493 Py_DECREF(tail);
1494 if (next == NULL) {
1495 Py_DECREF(head);
1496 return NULL;
1497 }
1498 tail = next;
1499 }
1500
1501 if (fromlist != NULL) {
1502 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
1503 fromlist = NULL;
1504 }
1505
1506 if (fromlist == NULL) {
1507 Py_DECREF(tail);
1508 return head;
1509 }
1510
1511 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00001512 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001513 Py_DECREF(tail);
1514 return NULL;
1515 }
1516
1517 return tail;
1518}
1519
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001520PyObject *
1521PyImport_ImportModuleEx(name, globals, locals, fromlist)
1522 char *name;
1523 PyObject *globals;
1524 PyObject *locals;
1525 PyObject *fromlist;
1526{
1527 PyObject *result;
1528 lock_import();
Guido van Rossumd65911b1998-03-03 22:33:27 +00001529 result = import_module_ex(name, globals, locals, fromlist);
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001530 unlock_import();
1531 return result;
1532}
1533
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001534static PyObject *
1535get_parent(globals, buf, p_buflen)
1536 PyObject *globals;
1537 char *buf;
1538 int *p_buflen;
1539{
1540 static PyObject *namestr = NULL;
1541 static PyObject *pathstr = NULL;
1542 PyObject *modname, *modpath, *modules, *parent;
1543
1544 if (globals == NULL || !PyDict_Check(globals))
1545 return Py_None;
1546
1547 if (namestr == NULL) {
1548 namestr = PyString_InternFromString("__name__");
1549 if (namestr == NULL)
1550 return NULL;
1551 }
1552 if (pathstr == NULL) {
1553 pathstr = PyString_InternFromString("__path__");
1554 if (pathstr == NULL)
1555 return NULL;
1556 }
1557
1558 *buf = '\0';
1559 *p_buflen = 0;
1560 modname = PyDict_GetItem(globals, namestr);
1561 if (modname == NULL || !PyString_Check(modname))
1562 return Py_None;
1563
1564 modpath = PyDict_GetItem(globals, pathstr);
1565 if (modpath != NULL) {
1566 int len = PyString_GET_SIZE(modname);
1567 if (len > MAXPATHLEN) {
1568 PyErr_SetString(PyExc_ValueError,
1569 "Module name too long");
1570 return NULL;
1571 }
1572 strcpy(buf, PyString_AS_STRING(modname));
1573 *p_buflen = len;
1574 }
1575 else {
1576 char *start = PyString_AS_STRING(modname);
1577 char *lastdot = strrchr(start, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00001578 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001579 if (lastdot == NULL)
1580 return Py_None;
1581 len = lastdot - start;
1582 if (len >= MAXPATHLEN) {
1583 PyErr_SetString(PyExc_ValueError,
1584 "Module name too long");
1585 return NULL;
1586 }
1587 strncpy(buf, start, len);
1588 buf[len] = '\0';
1589 *p_buflen = len;
1590 }
1591
1592 modules = PyImport_GetModuleDict();
1593 parent = PyDict_GetItemString(modules, buf);
1594 if (parent == NULL)
1595 parent = Py_None;
1596 return parent;
1597 /* We expect, but can't guarantee, if parent != None, that:
1598 - parent.__name__ == buf
1599 - parent.__dict__ is globals
1600 If this is violated... Who cares? */
1601}
1602
1603static PyObject *
1604load_next(mod, altmod, p_name, buf, p_buflen)
1605 PyObject *mod;
1606 PyObject *altmod; /* Either None or same as mod */
1607 char **p_name;
1608 char *buf;
1609 int *p_buflen;
1610{
1611 char *name = *p_name;
1612 char *dot = strchr(name, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00001613 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001614 char *p;
1615 PyObject *result;
1616
1617 if (dot == NULL) {
1618 *p_name = NULL;
1619 len = strlen(name);
1620 }
1621 else {
1622 *p_name = dot+1;
1623 len = dot-name;
1624 }
Guido van Rossum111c20b1998-04-11 17:38:22 +00001625 if (len == 0) {
1626 PyErr_SetString(PyExc_ValueError,
1627 "Empty module name");
1628 return NULL;
1629 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001630
1631 p = buf + *p_buflen;
1632 if (p != buf)
1633 *p++ = '.';
1634 if (p+len-buf >= MAXPATHLEN) {
1635 PyErr_SetString(PyExc_ValueError,
1636 "Module name too long");
1637 return NULL;
1638 }
1639 strncpy(p, name, len);
1640 p[len] = '\0';
1641 *p_buflen = p+len-buf;
1642
1643 result = import_submodule(mod, p, buf);
1644 if (result == Py_None && altmod != mod) {
1645 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001646 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00001647 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001648 if (result != NULL && result != Py_None) {
1649 if (mark_miss(buf) != 0) {
1650 Py_DECREF(result);
1651 return NULL;
1652 }
1653 strncpy(buf, name, len);
1654 buf[len] = '\0';
1655 *p_buflen = len;
1656 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001657 }
1658 if (result == NULL)
1659 return NULL;
1660
1661 if (result == Py_None) {
1662 Py_DECREF(result);
1663 PyErr_Format(PyExc_ImportError,
1664 "No module named %.200s", name);
1665 return NULL;
1666 }
1667
1668 return result;
1669}
1670
1671static int
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001672mark_miss(name)
1673 char *name;
1674{
1675 PyObject *modules = PyImport_GetModuleDict();
1676 return PyDict_SetItemString(modules, name, Py_None);
1677}
1678
1679static int
Guido van Rossum9905ef91997-09-08 16:07:11 +00001680ensure_fromlist(mod, fromlist, buf, buflen, recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001681 PyObject *mod;
1682 PyObject *fromlist;
1683 char *buf;
1684 int buflen;
Guido van Rossum9905ef91997-09-08 16:07:11 +00001685 int recursive;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001686{
1687 int i;
1688
1689 if (!PyObject_HasAttrString(mod, "__path__"))
1690 return 1;
1691
1692 for (i = 0; ; i++) {
1693 PyObject *item = PySequence_GetItem(fromlist, i);
1694 int hasit;
1695 if (item == NULL) {
1696 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
1697 PyErr_Clear();
1698 return 1;
1699 }
1700 return 0;
1701 }
1702 if (!PyString_Check(item)) {
1703 PyErr_SetString(PyExc_TypeError,
1704 "Item in ``from list'' not a string");
1705 Py_DECREF(item);
1706 return 0;
1707 }
1708 if (PyString_AS_STRING(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00001709 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001710 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00001711 /* See if the package defines __all__ */
1712 if (recursive)
1713 continue; /* Avoid endless recursion */
1714 all = PyObject_GetAttrString(mod, "__all__");
1715 if (all == NULL)
1716 PyErr_Clear();
1717 else {
1718 if (!ensure_fromlist(mod, all, buf, buflen, 1))
1719 return 0;
1720 Py_DECREF(all);
1721 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001722 continue;
1723 }
1724 hasit = PyObject_HasAttr(mod, item);
1725 if (!hasit) {
1726 char *subname = PyString_AS_STRING(item);
1727 PyObject *submod;
1728 char *p;
1729 if (buflen + strlen(subname) >= MAXPATHLEN) {
1730 PyErr_SetString(PyExc_ValueError,
1731 "Module name too long");
1732 Py_DECREF(item);
1733 return 0;
1734 }
1735 p = buf + buflen;
1736 *p++ = '.';
1737 strcpy(p, subname);
1738 submod = import_submodule(mod, subname, buf);
1739 Py_XDECREF(submod);
1740 if (submod == NULL) {
1741 Py_DECREF(item);
1742 return 0;
1743 }
1744 }
1745 Py_DECREF(item);
1746 }
1747
Guido van Rossuma7f2e811997-10-03 15:33:32 +00001748 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001749}
1750
1751static PyObject *
1752import_submodule(mod, subname, fullname)
1753 PyObject *mod; /* May be None */
1754 char *subname;
1755 char *fullname;
1756{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001757 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001758 PyObject *m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001759
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001760 /* Require:
1761 if mod == None: subname == fullname
1762 else: mod.__name__ + "." + subname == fullname
1763 */
1764
1765 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001766 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001767 }
1768 else {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001769 PyObject *path;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001770 char buf[MAXPATHLEN+1];
1771 struct filedescr *fdp;
1772 FILE *fp = NULL;
1773
Guido van Rossum9c0afe51998-05-19 15:09:05 +00001774 if (mod == Py_None)
1775 path = NULL;
1776 else {
1777 path = PyObject_GetAttrString(mod, "__path__");
1778 if (path == NULL) {
1779 PyErr_Clear();
1780 Py_INCREF(Py_None);
1781 return Py_None;
1782 }
1783 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001784
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001785 buf[0] = '\0';
Guido van Rossumb68cd421998-07-01 17:36:26 +00001786 fdp = find_module(subname, path, buf, MAXPATHLEN+1, &fp);
1787 Py_XDECREF(path);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001788 if (fdp == NULL) {
1789 if (!PyErr_ExceptionMatches(PyExc_ImportError))
1790 return NULL;
1791 PyErr_Clear();
1792 Py_INCREF(Py_None);
1793 return Py_None;
1794 }
1795 m = load_module(fullname, fp, buf, fdp->type);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001796 if (fp)
1797 fclose(fp);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001798 if (m != NULL && mod != Py_None) {
1799 if (PyObject_SetAttrString(mod, subname, m) < 0) {
1800 Py_DECREF(m);
1801 m = NULL;
1802 }
1803 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00001804 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001805
1806 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001807}
1808
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001809
1810/* Re-import a module of any kind and return its module object, WITH
1811 INCREMENTED REFERENCE COUNT */
1812
Guido van Rossum79f25d91997-04-29 20:08:16 +00001813PyObject *
1814PyImport_ReloadModule(m)
1815 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001816{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001817 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum222ef561997-09-06 19:41:09 +00001818 PyObject *path = NULL;
1819 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001820 char buf[MAXPATHLEN+1];
1821 struct filedescr *fdp;
1822 FILE *fp = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001823
Guido van Rossum79f25d91997-04-29 20:08:16 +00001824 if (m == NULL || !PyModule_Check(m)) {
1825 PyErr_SetString(PyExc_TypeError,
1826 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001827 return NULL;
1828 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001829 name = PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001830 if (name == NULL)
1831 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001832 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001833 PyErr_Format(PyExc_ImportError,
1834 "reload(): module %.200s not in sys.modules",
1835 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001836 return NULL;
1837 }
Guido van Rossum222ef561997-09-06 19:41:09 +00001838 subname = strrchr(name, '.');
1839 if (subname == NULL)
1840 subname = name;
1841 else {
1842 PyObject *parentname, *parent;
1843 parentname = PyString_FromStringAndSize(name, (subname-name));
1844 if (parentname == NULL)
1845 return NULL;
1846 parent = PyDict_GetItem(modules, parentname);
Barry Warsaw38793331999-01-27 17:54:20 +00001847 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00001848 if (parent == NULL) {
1849 PyErr_Format(PyExc_ImportError,
1850 "reload(): parent %.200s not in sys.modules",
1851 name);
1852 return NULL;
1853 }
1854 subname++;
1855 path = PyObject_GetAttrString(parent, "__path__");
1856 if (path == NULL)
1857 PyErr_Clear();
1858 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001859 buf[0] = '\0';
Guido van Rossum222ef561997-09-06 19:41:09 +00001860 fdp = find_module(subname, path, buf, MAXPATHLEN+1, &fp);
1861 Py_XDECREF(path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001862 if (fdp == NULL)
1863 return NULL;
1864 m = load_module(name, fp, buf, fdp->type);
1865 if (fp)
1866 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001867 return m;
1868}
1869
1870
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001871/* Higher-level import emulator which emulates the "import" statement
1872 more accurately -- it invokes the __import__() function from the
1873 builtins of the current globals. This means that the import is
1874 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00001875 environment, e.g. by "rexec".
1876 A dummy list ["__doc__"] is passed as the 4th argument so that
1877 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
1878 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001879
1880PyObject *
1881PyImport_Import(module_name)
1882 PyObject *module_name;
1883{
1884 static PyObject *silly_list = NULL;
1885 static PyObject *builtins_str = NULL;
1886 static PyObject *import_str = NULL;
1887 static PyObject *standard_builtins = NULL;
1888 PyObject *globals = NULL;
1889 PyObject *import = NULL;
1890 PyObject *builtins = NULL;
1891 PyObject *r = NULL;
1892
1893 /* Initialize constant string objects */
1894 if (silly_list == NULL) {
1895 import_str = PyString_InternFromString("__import__");
1896 if (import_str == NULL)
1897 return NULL;
1898 builtins_str = PyString_InternFromString("__builtins__");
1899 if (builtins_str == NULL)
1900 return NULL;
1901 silly_list = Py_BuildValue("[s]", "__doc__");
1902 if (silly_list == NULL)
1903 return NULL;
1904 }
1905
1906 /* Get the builtins from current globals */
1907 globals = PyEval_GetGlobals();
1908 if(globals != NULL) {
Guido van Rossum66468561998-10-22 15:46:50 +00001909 Py_INCREF(globals);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001910 builtins = PyObject_GetItem(globals, builtins_str);
1911 if (builtins == NULL)
1912 goto err;
1913 }
1914 else {
1915 /* No globals -- use standard builtins, and fake globals */
1916 PyErr_Clear();
1917
1918 if (standard_builtins == NULL) {
1919 standard_builtins =
1920 PyImport_ImportModule("__builtin__");
1921 if (standard_builtins == NULL)
1922 return NULL;
1923 }
1924
1925 builtins = standard_builtins;
1926 Py_INCREF(builtins);
1927 globals = Py_BuildValue("{OO}", builtins_str, builtins);
1928 if (globals == NULL)
1929 goto err;
1930 }
1931
1932 /* Get the __import__ function from the builtins */
1933 if (PyDict_Check(builtins))
1934 import=PyObject_GetItem(builtins, import_str);
1935 else
1936 import=PyObject_GetAttr(builtins, import_str);
1937 if (import == NULL)
1938 goto err;
1939
1940 /* Call the _import__ function with the proper argument list */
1941 r = PyObject_CallFunction(import, "OOOO",
1942 module_name, globals, globals, silly_list);
1943
1944 err:
1945 Py_XDECREF(globals);
1946 Py_XDECREF(builtins);
1947 Py_XDECREF(import);
1948
1949 return r;
1950}
1951
1952
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001953/* Module 'imp' provides Python access to the primitives used for
1954 importing modules.
1955*/
1956
Guido van Rossum79f25d91997-04-29 20:08:16 +00001957static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001958imp_get_magic(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001959 PyObject *self;
1960 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001961{
1962 char buf[4];
1963
Guido van Rossum43713e52000-02-29 13:59:29 +00001964 if (!PyArg_ParseTuple(args, ":get_magic"))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001965 return NULL;
Guido van Rossum96774c12000-05-01 20:19:08 +00001966 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
1967 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
1968 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
1969 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001970
Guido van Rossum79f25d91997-04-29 20:08:16 +00001971 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001972}
1973
Guido van Rossum79f25d91997-04-29 20:08:16 +00001974static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001975imp_get_suffixes(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001976 PyObject *self;
1977 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001978{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001979 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001980 struct filedescr *fdp;
1981
Guido van Rossum43713e52000-02-29 13:59:29 +00001982 if (!PyArg_ParseTuple(args, ":get_suffixes"))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001983 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001984 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001985 if (list == NULL)
1986 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001987 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
1988 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001989 fdp->suffix, fdp->mode, fdp->type);
1990 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001991 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001992 return NULL;
1993 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001994 if (PyList_Append(list, item) < 0) {
1995 Py_DECREF(list);
1996 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001997 return NULL;
1998 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001999 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002000 }
2001 return list;
2002}
2003
Guido van Rossum79f25d91997-04-29 20:08:16 +00002004static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002005call_find_module(name, path)
2006 char *name;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002007 PyObject *path; /* list or None or NULL */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002008{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002009 extern int fclose Py_PROTO((FILE *));
Guido van Rossum79f25d91997-04-29 20:08:16 +00002010 PyObject *fob, *ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002011 struct filedescr *fdp;
2012 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002013 FILE *fp = NULL;
2014
2015 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002016 if (path == Py_None)
2017 path = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002018 fdp = find_module(name, path, pathname, MAXPATHLEN+1, &fp);
2019 if (fdp == NULL)
2020 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002021 if (fp != NULL) {
2022 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
2023 if (fob == NULL) {
2024 fclose(fp);
2025 return NULL;
2026 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002027 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002028 else {
2029 fob = Py_None;
2030 Py_INCREF(fob);
2031 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002032 ret = Py_BuildValue("Os(ssi)",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002033 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002034 Py_DECREF(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002035 return ret;
2036}
2037
Guido van Rossum79f25d91997-04-29 20:08:16 +00002038static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002039imp_find_module(self, args)
2040 PyObject *self;
2041 PyObject *args;
2042{
2043 char *name;
2044 PyObject *path = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002045 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002046 return NULL;
2047 return call_find_module(name, path);
2048}
2049
2050static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002051imp_init_builtin(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002052 PyObject *self;
2053 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002054{
2055 char *name;
2056 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002057 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002058 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002059 return NULL;
2060 ret = init_builtin(name);
2061 if (ret < 0)
2062 return NULL;
2063 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002064 Py_INCREF(Py_None);
2065 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002066 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002067 m = PyImport_AddModule(name);
2068 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002069 return m;
2070}
2071
Guido van Rossum79f25d91997-04-29 20:08:16 +00002072static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002073imp_init_frozen(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002074 PyObject *self;
2075 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002076{
2077 char *name;
2078 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002079 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002080 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002081 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002082 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002083 if (ret < 0)
2084 return NULL;
2085 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002086 Py_INCREF(Py_None);
2087 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002088 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002089 m = PyImport_AddModule(name);
2090 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002091 return m;
2092}
2093
Guido van Rossum79f25d91997-04-29 20:08:16 +00002094static PyObject *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002095imp_get_frozen_object(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002096 PyObject *self;
2097 PyObject *args;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002098{
2099 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002100
Guido van Rossum43713e52000-02-29 13:59:29 +00002101 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002102 return NULL;
2103 return get_frozen_object(name);
2104}
2105
Guido van Rossum79f25d91997-04-29 20:08:16 +00002106static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002107imp_is_builtin(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002108 PyObject *self;
2109 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002110{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002111 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002112 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002113 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002114 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002115}
2116
Guido van Rossum79f25d91997-04-29 20:08:16 +00002117static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002118imp_is_frozen(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002119 PyObject *self;
2120 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002121{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002122 char *name;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002123 struct _frozen *p;
Guido van Rossum43713e52000-02-29 13:59:29 +00002124 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002125 return NULL;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002126 p = find_frozen(name);
2127 return PyInt_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002128}
2129
2130static FILE *
2131get_file(pathname, fob, mode)
2132 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002133 PyObject *fob;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002134 char *mode;
2135{
2136 FILE *fp;
2137 if (fob == NULL) {
2138 fp = fopen(pathname, mode);
2139 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002140 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002141 }
2142 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002143 fp = PyFile_AsFile(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002144 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002145 PyErr_SetString(PyExc_ValueError,
2146 "bad/closed file object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002147 }
2148 return fp;
2149}
2150
Guido van Rossum79f25d91997-04-29 20:08:16 +00002151static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002152imp_load_compiled(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002153 PyObject *self;
2154 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002155{
2156 char *name;
2157 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002158 PyObject *fob = NULL;
2159 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002160 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002161 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002162 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002163 return NULL;
2164 fp = get_file(pathname, fob, "rb");
2165 if (fp == NULL)
2166 return NULL;
2167 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002168 if (fob == NULL)
2169 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002170 return m;
2171}
2172
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002173#ifdef HAVE_DYNAMIC_LOADING
2174
Guido van Rossum79f25d91997-04-29 20:08:16 +00002175static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002176imp_load_dynamic(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002177 PyObject *self;
2178 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002179{
2180 char *name;
2181 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002182 PyObject *fob = NULL;
2183 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00002184 FILE *fp = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002185 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002186 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002187 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002188 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00002189 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002190 if (fp == NULL)
2191 return NULL;
2192 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002193 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00002194 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002195}
2196
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002197#endif /* HAVE_DYNAMIC_LOADING */
2198
Guido van Rossum79f25d91997-04-29 20:08:16 +00002199static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002200imp_load_source(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002201 PyObject *self;
2202 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002203{
2204 char *name;
2205 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002206 PyObject *fob = NULL;
2207 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002208 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002209 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002210 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002211 return NULL;
2212 fp = get_file(pathname, fob, "r");
2213 if (fp == NULL)
2214 return NULL;
2215 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002216 if (fob == NULL)
2217 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002218 return m;
2219}
2220
Jack Jansen9c96a921995-02-15 22:57:06 +00002221#ifdef macintosh
Guido van Rossum79f25d91997-04-29 20:08:16 +00002222static PyObject *
Jack Jansen9c96a921995-02-15 22:57:06 +00002223imp_load_resource(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002224 PyObject *self;
2225 PyObject *args;
Jack Jansen9c96a921995-02-15 22:57:06 +00002226{
2227 char *name;
2228 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002229 PyObject *m;
Jack Jansen9c96a921995-02-15 22:57:06 +00002230
Guido van Rossum43713e52000-02-29 13:59:29 +00002231 if (!PyArg_ParseTuple(args, "ss:load_resource", &name, &pathname))
Jack Jansen9c96a921995-02-15 22:57:06 +00002232 return NULL;
2233 m = PyMac_LoadResourceModule(name, pathname);
2234 return m;
2235}
2236#endif /* macintosh */
2237
Guido van Rossum79f25d91997-04-29 20:08:16 +00002238static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002239imp_load_module(self, args)
2240 PyObject *self;
2241 PyObject *args;
2242{
2243 char *name;
2244 PyObject *fob;
2245 char *pathname;
2246 char *suffix; /* Unused */
2247 char *mode;
2248 int type;
2249 FILE *fp;
2250
Guido van Rossum43713e52000-02-29 13:59:29 +00002251 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002252 &name, &fob, &pathname,
2253 &suffix, &mode, &type))
2254 return NULL;
2255 if (*mode && (*mode != 'r' || strchr(mode, '+') != NULL)) {
2256 PyErr_Format(PyExc_ValueError,
2257 "invalid file open mode %.200s", mode);
2258 return NULL;
2259 }
2260 if (fob == Py_None)
2261 fp = NULL;
2262 else {
2263 if (!PyFile_Check(fob)) {
2264 PyErr_SetString(PyExc_ValueError,
2265 "load_module arg#2 should be a file or None");
2266 return NULL;
2267 }
2268 fp = get_file(pathname, fob, mode);
2269 if (fp == NULL)
2270 return NULL;
2271 }
2272 return load_module(name, fp, pathname, type);
2273}
2274
2275static PyObject *
2276imp_load_package(self, args)
2277 PyObject *self;
2278 PyObject *args;
2279{
2280 char *name;
2281 char *pathname;
Guido van Rossum43713e52000-02-29 13:59:29 +00002282 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002283 return NULL;
2284 return load_package(name, pathname);
2285}
2286
2287static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002288imp_new_module(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002289 PyObject *self;
2290 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002291{
2292 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002293 if (!PyArg_ParseTuple(args, "s:new_module", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002294 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002295 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002296}
2297
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002298/* Doc strings */
2299
2300static char doc_imp[] = "\
2301This module provides the components needed to build your own\n\
2302__import__ function. Undocumented functions are obsolete.\n\
2303";
2304
2305static char doc_find_module[] = "\
2306find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
2307Search for a module. If path is omitted or None, search for a\n\
2308built-in, frozen or special module and continue search in sys.path.\n\
2309The module name cannot contain '.'; to search for a submodule of a\n\
2310package, pass the submodule name and the package's __path__.\
2311";
2312
2313static char doc_load_module[] = "\
2314load_module(name, file, filename, (suffix, mode, type)) -> module\n\
2315Load a module, given information returned by find_module().\n\
2316The module name must include the full package name, if any.\
2317";
2318
2319static char doc_get_magic[] = "\
2320get_magic() -> string\n\
2321Return the magic number for .pyc or .pyo files.\
2322";
2323
2324static char doc_get_suffixes[] = "\
2325get_suffixes() -> [(suffix, mode, type), ...]\n\
2326Return a list of (suffix, mode, type) tuples describing the files\n\
2327that find_module() looks for.\
2328";
2329
2330static char doc_new_module[] = "\
2331new_module(name) -> module\n\
2332Create a new module. Do not enter it in sys.modules.\n\
2333The module name must include the full package name, if any.\
2334";
2335
Guido van Rossum79f25d91997-04-29 20:08:16 +00002336static PyMethodDef imp_methods[] = {
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002337 {"find_module", imp_find_module, 1, doc_find_module},
2338 {"get_magic", imp_get_magic, 1, doc_get_magic},
2339 {"get_suffixes", imp_get_suffixes, 1, doc_get_suffixes},
2340 {"load_module", imp_load_module, 1, doc_load_module},
2341 {"new_module", imp_new_module, 1, doc_new_module},
2342 /* The rest are obsolete */
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002343 {"get_frozen_object", imp_get_frozen_object, 1},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002344 {"init_builtin", imp_init_builtin, 1},
2345 {"init_frozen", imp_init_frozen, 1},
2346 {"is_builtin", imp_is_builtin, 1},
2347 {"is_frozen", imp_is_frozen, 1},
2348 {"load_compiled", imp_load_compiled, 1},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002349#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002350 {"load_dynamic", imp_load_dynamic, 1},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002351#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002352 {"load_package", imp_load_package, 1},
Jack Jansen9c96a921995-02-15 22:57:06 +00002353#ifdef macintosh
2354 {"load_resource", imp_load_resource, 1},
2355#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002356 {"load_source", imp_load_source, 1},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002357 {NULL, NULL} /* sentinel */
2358};
2359
Guido van Rossum1a8791e1998-08-04 22:46:29 +00002360static int
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002361setint(d, name, value)
2362 PyObject *d;
2363 char *name;
2364 int value;
2365{
2366 PyObject *v;
2367 int err;
2368
2369 v = PyInt_FromLong((long)value);
2370 err = PyDict_SetItemString(d, name, v);
2371 Py_XDECREF(v);
2372 return err;
2373}
2374
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002375void
2376initimp()
2377{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002378 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002379
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002380 m = Py_InitModule4("imp", imp_methods, doc_imp,
2381 NULL, PYTHON_API_VERSION);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002382 d = PyModule_GetDict(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002383
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002384 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
2385 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
2386 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
2387 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
2388 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
2389 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
2390 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
2391 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum0f84a341998-08-06 13:36:01 +00002392 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002393
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002394 failure:
2395 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002396}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002397
2398
Guido van Rossumb18618d2000-05-03 23:44:39 +00002399/* API for embedding applications that want to add their own entries
2400 to the table of built-in modules. This should normally be called
2401 *before* Py_Initialize(). When the table resize fails, -1 is
2402 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002403
2404 After a similar function by Just van Rossum. */
2405
2406int
2407PyImport_ExtendInittab(newtab)
2408 struct _inittab *newtab;
2409{
2410 static struct _inittab *our_copy = NULL;
2411 struct _inittab *p;
2412 int i, n;
2413
2414 /* Count the number of entries in both tables */
2415 for (n = 0; newtab[n].name != NULL; n++)
2416 ;
2417 if (n == 0)
2418 return 0; /* Nothing to do */
2419 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
2420 ;
2421
2422 /* Allocate new memory for the combined table */
Guido van Rossumb18618d2000-05-03 23:44:39 +00002423 p = our_copy;
2424 PyMem_RESIZE(p, struct _inittab, i+n+1);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002425 if (p == NULL)
2426 return -1;
2427
2428 /* Copy the tables into the new memory */
2429 if (our_copy != PyImport_Inittab)
2430 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
2431 PyImport_Inittab = our_copy = p;
2432 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
2433
2434 return 0;
2435}
2436
2437/* Shorthand to add a single entry given a name and a function */
2438
2439int
2440PyImport_AppendInittab(name, initfunc)
2441 char *name;
2442 void (*initfunc)();
2443{
2444 struct _inittab newtab[2];
2445
2446 memset(newtab, '\0', sizeof newtab);
2447
2448 newtab[0].name = name;
2449 newtab[0].initfunc = initfunc;
2450
2451 return PyImport_ExtendInittab(newtab);
2452}