blob: 99c811fb842fba3a470c17f6a725d5160ef8ecb2 [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
Jack Jansencbf630f2000-07-11 21:59:16 +0000701 PyMac_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 */
Tim Petersdbd9ba62000-07-09 03:09:57 +0000766static PyObject *load_module(char *, FILE *, char *, int);
767static struct filedescr *find_module(char *, PyObject *,
768 char *, size_t, FILE **);
769static struct _frozen *find_frozen(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
Tim Petersdbd9ba62000-07-09 03:09:57 +0000858static int find_init_module(char *); /* Forward */
Guido van Rossum197346f1997-10-31 18:38:52 +0000859
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
Tim Petersdbd9ba62000-07-09 03:09:57 +00001209static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001210
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 */
Tim Petersdbd9ba62000-07-09 03:09:57 +00001458static PyObject *get_parent(PyObject *globals, char *buf, int *p_buflen);
1459static PyObject *load_next(PyObject *mod, PyObject *altmod,
1460 char **p_name, char *buf, int *p_buflen);
1461static int mark_miss(char *name);
1462static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
1463 char *buf, int buflen, int recursive);
1464static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001465
1466/* The Magnum Opus of dotted-name import :-) */
1467
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001468static PyObject *
1469import_module_ex(name, globals, locals, fromlist)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001470 char *name;
1471 PyObject *globals;
1472 PyObject *locals;
1473 PyObject *fromlist;
1474{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001475 char buf[MAXPATHLEN+1];
1476 int buflen = 0;
1477 PyObject *parent, *head, *next, *tail;
1478
1479 parent = get_parent(globals, buf, &buflen);
1480 if (parent == NULL)
1481 return NULL;
1482
1483 head = load_next(parent, Py_None, &name, buf, &buflen);
1484 if (head == NULL)
1485 return NULL;
1486
1487 tail = head;
1488 Py_INCREF(tail);
1489 while (name) {
1490 next = load_next(tail, tail, &name, buf, &buflen);
1491 Py_DECREF(tail);
1492 if (next == NULL) {
1493 Py_DECREF(head);
1494 return NULL;
1495 }
1496 tail = next;
1497 }
1498
1499 if (fromlist != NULL) {
1500 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
1501 fromlist = NULL;
1502 }
1503
1504 if (fromlist == NULL) {
1505 Py_DECREF(tail);
1506 return head;
1507 }
1508
1509 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00001510 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001511 Py_DECREF(tail);
1512 return NULL;
1513 }
1514
1515 return tail;
1516}
1517
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001518PyObject *
1519PyImport_ImportModuleEx(name, globals, locals, fromlist)
1520 char *name;
1521 PyObject *globals;
1522 PyObject *locals;
1523 PyObject *fromlist;
1524{
1525 PyObject *result;
1526 lock_import();
Guido van Rossumd65911b1998-03-03 22:33:27 +00001527 result = import_module_ex(name, globals, locals, fromlist);
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001528 unlock_import();
1529 return result;
1530}
1531
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001532static PyObject *
1533get_parent(globals, buf, p_buflen)
1534 PyObject *globals;
1535 char *buf;
1536 int *p_buflen;
1537{
1538 static PyObject *namestr = NULL;
1539 static PyObject *pathstr = NULL;
1540 PyObject *modname, *modpath, *modules, *parent;
1541
1542 if (globals == NULL || !PyDict_Check(globals))
1543 return Py_None;
1544
1545 if (namestr == NULL) {
1546 namestr = PyString_InternFromString("__name__");
1547 if (namestr == NULL)
1548 return NULL;
1549 }
1550 if (pathstr == NULL) {
1551 pathstr = PyString_InternFromString("__path__");
1552 if (pathstr == NULL)
1553 return NULL;
1554 }
1555
1556 *buf = '\0';
1557 *p_buflen = 0;
1558 modname = PyDict_GetItem(globals, namestr);
1559 if (modname == NULL || !PyString_Check(modname))
1560 return Py_None;
1561
1562 modpath = PyDict_GetItem(globals, pathstr);
1563 if (modpath != NULL) {
1564 int len = PyString_GET_SIZE(modname);
1565 if (len > MAXPATHLEN) {
1566 PyErr_SetString(PyExc_ValueError,
1567 "Module name too long");
1568 return NULL;
1569 }
1570 strcpy(buf, PyString_AS_STRING(modname));
1571 *p_buflen = len;
1572 }
1573 else {
1574 char *start = PyString_AS_STRING(modname);
1575 char *lastdot = strrchr(start, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00001576 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001577 if (lastdot == NULL)
1578 return Py_None;
1579 len = lastdot - start;
1580 if (len >= MAXPATHLEN) {
1581 PyErr_SetString(PyExc_ValueError,
1582 "Module name too long");
1583 return NULL;
1584 }
1585 strncpy(buf, start, len);
1586 buf[len] = '\0';
1587 *p_buflen = len;
1588 }
1589
1590 modules = PyImport_GetModuleDict();
1591 parent = PyDict_GetItemString(modules, buf);
1592 if (parent == NULL)
1593 parent = Py_None;
1594 return parent;
1595 /* We expect, but can't guarantee, if parent != None, that:
1596 - parent.__name__ == buf
1597 - parent.__dict__ is globals
1598 If this is violated... Who cares? */
1599}
1600
1601static PyObject *
1602load_next(mod, altmod, p_name, buf, p_buflen)
1603 PyObject *mod;
1604 PyObject *altmod; /* Either None or same as mod */
1605 char **p_name;
1606 char *buf;
1607 int *p_buflen;
1608{
1609 char *name = *p_name;
1610 char *dot = strchr(name, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00001611 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001612 char *p;
1613 PyObject *result;
1614
1615 if (dot == NULL) {
1616 *p_name = NULL;
1617 len = strlen(name);
1618 }
1619 else {
1620 *p_name = dot+1;
1621 len = dot-name;
1622 }
Guido van Rossum111c20b1998-04-11 17:38:22 +00001623 if (len == 0) {
1624 PyErr_SetString(PyExc_ValueError,
1625 "Empty module name");
1626 return NULL;
1627 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001628
1629 p = buf + *p_buflen;
1630 if (p != buf)
1631 *p++ = '.';
1632 if (p+len-buf >= MAXPATHLEN) {
1633 PyErr_SetString(PyExc_ValueError,
1634 "Module name too long");
1635 return NULL;
1636 }
1637 strncpy(p, name, len);
1638 p[len] = '\0';
1639 *p_buflen = p+len-buf;
1640
1641 result = import_submodule(mod, p, buf);
1642 if (result == Py_None && altmod != mod) {
1643 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001644 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00001645 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001646 if (result != NULL && result != Py_None) {
1647 if (mark_miss(buf) != 0) {
1648 Py_DECREF(result);
1649 return NULL;
1650 }
1651 strncpy(buf, name, len);
1652 buf[len] = '\0';
1653 *p_buflen = len;
1654 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001655 }
1656 if (result == NULL)
1657 return NULL;
1658
1659 if (result == Py_None) {
1660 Py_DECREF(result);
1661 PyErr_Format(PyExc_ImportError,
1662 "No module named %.200s", name);
1663 return NULL;
1664 }
1665
1666 return result;
1667}
1668
1669static int
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001670mark_miss(name)
1671 char *name;
1672{
1673 PyObject *modules = PyImport_GetModuleDict();
1674 return PyDict_SetItemString(modules, name, Py_None);
1675}
1676
1677static int
Guido van Rossum9905ef91997-09-08 16:07:11 +00001678ensure_fromlist(mod, fromlist, buf, buflen, recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001679 PyObject *mod;
1680 PyObject *fromlist;
1681 char *buf;
1682 int buflen;
Guido van Rossum9905ef91997-09-08 16:07:11 +00001683 int recursive;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001684{
1685 int i;
1686
1687 if (!PyObject_HasAttrString(mod, "__path__"))
1688 return 1;
1689
1690 for (i = 0; ; i++) {
1691 PyObject *item = PySequence_GetItem(fromlist, i);
1692 int hasit;
1693 if (item == NULL) {
1694 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
1695 PyErr_Clear();
1696 return 1;
1697 }
1698 return 0;
1699 }
1700 if (!PyString_Check(item)) {
1701 PyErr_SetString(PyExc_TypeError,
1702 "Item in ``from list'' not a string");
1703 Py_DECREF(item);
1704 return 0;
1705 }
1706 if (PyString_AS_STRING(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00001707 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001708 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00001709 /* See if the package defines __all__ */
1710 if (recursive)
1711 continue; /* Avoid endless recursion */
1712 all = PyObject_GetAttrString(mod, "__all__");
1713 if (all == NULL)
1714 PyErr_Clear();
1715 else {
1716 if (!ensure_fromlist(mod, all, buf, buflen, 1))
1717 return 0;
1718 Py_DECREF(all);
1719 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001720 continue;
1721 }
1722 hasit = PyObject_HasAttr(mod, item);
1723 if (!hasit) {
1724 char *subname = PyString_AS_STRING(item);
1725 PyObject *submod;
1726 char *p;
1727 if (buflen + strlen(subname) >= MAXPATHLEN) {
1728 PyErr_SetString(PyExc_ValueError,
1729 "Module name too long");
1730 Py_DECREF(item);
1731 return 0;
1732 }
1733 p = buf + buflen;
1734 *p++ = '.';
1735 strcpy(p, subname);
1736 submod = import_submodule(mod, subname, buf);
1737 Py_XDECREF(submod);
1738 if (submod == NULL) {
1739 Py_DECREF(item);
1740 return 0;
1741 }
1742 }
1743 Py_DECREF(item);
1744 }
1745
Guido van Rossuma7f2e811997-10-03 15:33:32 +00001746 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001747}
1748
1749static PyObject *
1750import_submodule(mod, subname, fullname)
1751 PyObject *mod; /* May be None */
1752 char *subname;
1753 char *fullname;
1754{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001755 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001756 PyObject *m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001757
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001758 /* Require:
1759 if mod == None: subname == fullname
1760 else: mod.__name__ + "." + subname == fullname
1761 */
1762
1763 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001764 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001765 }
1766 else {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001767 PyObject *path;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001768 char buf[MAXPATHLEN+1];
1769 struct filedescr *fdp;
1770 FILE *fp = NULL;
1771
Guido van Rossum9c0afe51998-05-19 15:09:05 +00001772 if (mod == Py_None)
1773 path = NULL;
1774 else {
1775 path = PyObject_GetAttrString(mod, "__path__");
1776 if (path == NULL) {
1777 PyErr_Clear();
1778 Py_INCREF(Py_None);
1779 return Py_None;
1780 }
1781 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001782
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001783 buf[0] = '\0';
Guido van Rossumb68cd421998-07-01 17:36:26 +00001784 fdp = find_module(subname, path, buf, MAXPATHLEN+1, &fp);
1785 Py_XDECREF(path);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001786 if (fdp == NULL) {
1787 if (!PyErr_ExceptionMatches(PyExc_ImportError))
1788 return NULL;
1789 PyErr_Clear();
1790 Py_INCREF(Py_None);
1791 return Py_None;
1792 }
1793 m = load_module(fullname, fp, buf, fdp->type);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001794 if (fp)
1795 fclose(fp);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001796 if (m != NULL && mod != Py_None) {
1797 if (PyObject_SetAttrString(mod, subname, m) < 0) {
1798 Py_DECREF(m);
1799 m = NULL;
1800 }
1801 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00001802 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001803
1804 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001805}
1806
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001807
1808/* Re-import a module of any kind and return its module object, WITH
1809 INCREMENTED REFERENCE COUNT */
1810
Guido van Rossum79f25d91997-04-29 20:08:16 +00001811PyObject *
1812PyImport_ReloadModule(m)
1813 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001814{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001815 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum222ef561997-09-06 19:41:09 +00001816 PyObject *path = NULL;
1817 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001818 char buf[MAXPATHLEN+1];
1819 struct filedescr *fdp;
1820 FILE *fp = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001821
Guido van Rossum79f25d91997-04-29 20:08:16 +00001822 if (m == NULL || !PyModule_Check(m)) {
1823 PyErr_SetString(PyExc_TypeError,
1824 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001825 return NULL;
1826 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001827 name = PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001828 if (name == NULL)
1829 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001830 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001831 PyErr_Format(PyExc_ImportError,
1832 "reload(): module %.200s not in sys.modules",
1833 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001834 return NULL;
1835 }
Guido van Rossum222ef561997-09-06 19:41:09 +00001836 subname = strrchr(name, '.');
1837 if (subname == NULL)
1838 subname = name;
1839 else {
1840 PyObject *parentname, *parent;
1841 parentname = PyString_FromStringAndSize(name, (subname-name));
1842 if (parentname == NULL)
1843 return NULL;
1844 parent = PyDict_GetItem(modules, parentname);
Barry Warsaw38793331999-01-27 17:54:20 +00001845 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00001846 if (parent == NULL) {
1847 PyErr_Format(PyExc_ImportError,
1848 "reload(): parent %.200s not in sys.modules",
1849 name);
1850 return NULL;
1851 }
1852 subname++;
1853 path = PyObject_GetAttrString(parent, "__path__");
1854 if (path == NULL)
1855 PyErr_Clear();
1856 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001857 buf[0] = '\0';
Guido van Rossum222ef561997-09-06 19:41:09 +00001858 fdp = find_module(subname, path, buf, MAXPATHLEN+1, &fp);
1859 Py_XDECREF(path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001860 if (fdp == NULL)
1861 return NULL;
1862 m = load_module(name, fp, buf, fdp->type);
1863 if (fp)
1864 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001865 return m;
1866}
1867
1868
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001869/* Higher-level import emulator which emulates the "import" statement
1870 more accurately -- it invokes the __import__() function from the
1871 builtins of the current globals. This means that the import is
1872 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00001873 environment, e.g. by "rexec".
1874 A dummy list ["__doc__"] is passed as the 4th argument so that
1875 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
1876 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001877
1878PyObject *
1879PyImport_Import(module_name)
1880 PyObject *module_name;
1881{
1882 static PyObject *silly_list = NULL;
1883 static PyObject *builtins_str = NULL;
1884 static PyObject *import_str = NULL;
1885 static PyObject *standard_builtins = NULL;
1886 PyObject *globals = NULL;
1887 PyObject *import = NULL;
1888 PyObject *builtins = NULL;
1889 PyObject *r = NULL;
1890
1891 /* Initialize constant string objects */
1892 if (silly_list == NULL) {
1893 import_str = PyString_InternFromString("__import__");
1894 if (import_str == NULL)
1895 return NULL;
1896 builtins_str = PyString_InternFromString("__builtins__");
1897 if (builtins_str == NULL)
1898 return NULL;
1899 silly_list = Py_BuildValue("[s]", "__doc__");
1900 if (silly_list == NULL)
1901 return NULL;
1902 }
1903
1904 /* Get the builtins from current globals */
1905 globals = PyEval_GetGlobals();
1906 if(globals != NULL) {
Guido van Rossum66468561998-10-22 15:46:50 +00001907 Py_INCREF(globals);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001908 builtins = PyObject_GetItem(globals, builtins_str);
1909 if (builtins == NULL)
1910 goto err;
1911 }
1912 else {
1913 /* No globals -- use standard builtins, and fake globals */
1914 PyErr_Clear();
1915
1916 if (standard_builtins == NULL) {
1917 standard_builtins =
1918 PyImport_ImportModule("__builtin__");
1919 if (standard_builtins == NULL)
1920 return NULL;
1921 }
1922
1923 builtins = standard_builtins;
1924 Py_INCREF(builtins);
1925 globals = Py_BuildValue("{OO}", builtins_str, builtins);
1926 if (globals == NULL)
1927 goto err;
1928 }
1929
1930 /* Get the __import__ function from the builtins */
1931 if (PyDict_Check(builtins))
1932 import=PyObject_GetItem(builtins, import_str);
1933 else
1934 import=PyObject_GetAttr(builtins, import_str);
1935 if (import == NULL)
1936 goto err;
1937
1938 /* Call the _import__ function with the proper argument list */
1939 r = PyObject_CallFunction(import, "OOOO",
1940 module_name, globals, globals, silly_list);
1941
1942 err:
1943 Py_XDECREF(globals);
1944 Py_XDECREF(builtins);
1945 Py_XDECREF(import);
1946
1947 return r;
1948}
1949
1950
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001951/* Module 'imp' provides Python access to the primitives used for
1952 importing modules.
1953*/
1954
Guido van Rossum79f25d91997-04-29 20:08:16 +00001955static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001956imp_get_magic(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001957 PyObject *self;
1958 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001959{
1960 char buf[4];
1961
Guido van Rossum43713e52000-02-29 13:59:29 +00001962 if (!PyArg_ParseTuple(args, ":get_magic"))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001963 return NULL;
Guido van Rossum96774c12000-05-01 20:19:08 +00001964 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
1965 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
1966 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
1967 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001968
Guido van Rossum79f25d91997-04-29 20:08:16 +00001969 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001970}
1971
Guido van Rossum79f25d91997-04-29 20:08:16 +00001972static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001973imp_get_suffixes(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001974 PyObject *self;
1975 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001976{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001977 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001978 struct filedescr *fdp;
1979
Guido van Rossum43713e52000-02-29 13:59:29 +00001980 if (!PyArg_ParseTuple(args, ":get_suffixes"))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001981 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001982 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001983 if (list == NULL)
1984 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001985 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
1986 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001987 fdp->suffix, fdp->mode, fdp->type);
1988 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001989 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001990 return NULL;
1991 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001992 if (PyList_Append(list, item) < 0) {
1993 Py_DECREF(list);
1994 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001995 return NULL;
1996 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001997 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001998 }
1999 return list;
2000}
2001
Guido van Rossum79f25d91997-04-29 20:08:16 +00002002static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002003call_find_module(name, path)
2004 char *name;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002005 PyObject *path; /* list or None or NULL */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002006{
Tim Petersdbd9ba62000-07-09 03:09:57 +00002007 extern int fclose(FILE *);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002008 PyObject *fob, *ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002009 struct filedescr *fdp;
2010 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002011 FILE *fp = NULL;
2012
2013 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002014 if (path == Py_None)
2015 path = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002016 fdp = find_module(name, path, pathname, MAXPATHLEN+1, &fp);
2017 if (fdp == NULL)
2018 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002019 if (fp != NULL) {
2020 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
2021 if (fob == NULL) {
2022 fclose(fp);
2023 return NULL;
2024 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002025 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002026 else {
2027 fob = Py_None;
2028 Py_INCREF(fob);
2029 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002030 ret = Py_BuildValue("Os(ssi)",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002031 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002032 Py_DECREF(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002033 return ret;
2034}
2035
Guido van Rossum79f25d91997-04-29 20:08:16 +00002036static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002037imp_find_module(self, args)
2038 PyObject *self;
2039 PyObject *args;
2040{
2041 char *name;
2042 PyObject *path = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002043 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002044 return NULL;
2045 return call_find_module(name, path);
2046}
2047
2048static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002049imp_init_builtin(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002050 PyObject *self;
2051 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002052{
2053 char *name;
2054 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002055 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002056 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002057 return NULL;
2058 ret = init_builtin(name);
2059 if (ret < 0)
2060 return NULL;
2061 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002062 Py_INCREF(Py_None);
2063 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002064 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002065 m = PyImport_AddModule(name);
2066 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002067 return m;
2068}
2069
Guido van Rossum79f25d91997-04-29 20:08:16 +00002070static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002071imp_init_frozen(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002072 PyObject *self;
2073 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002074{
2075 char *name;
2076 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002077 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002078 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002079 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002080 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002081 if (ret < 0)
2082 return NULL;
2083 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002084 Py_INCREF(Py_None);
2085 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002086 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002087 m = PyImport_AddModule(name);
2088 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002089 return m;
2090}
2091
Guido van Rossum79f25d91997-04-29 20:08:16 +00002092static PyObject *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002093imp_get_frozen_object(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002094 PyObject *self;
2095 PyObject *args;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002096{
2097 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002098
Guido van Rossum43713e52000-02-29 13:59:29 +00002099 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002100 return NULL;
2101 return get_frozen_object(name);
2102}
2103
Guido van Rossum79f25d91997-04-29 20:08:16 +00002104static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002105imp_is_builtin(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002106 PyObject *self;
2107 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002108{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002109 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002110 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002111 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002112 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002113}
2114
Guido van Rossum79f25d91997-04-29 20:08:16 +00002115static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002116imp_is_frozen(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002117 PyObject *self;
2118 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002119{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002120 char *name;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002121 struct _frozen *p;
Guido van Rossum43713e52000-02-29 13:59:29 +00002122 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002123 return NULL;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002124 p = find_frozen(name);
2125 return PyInt_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002126}
2127
2128static FILE *
2129get_file(pathname, fob, mode)
2130 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002131 PyObject *fob;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002132 char *mode;
2133{
2134 FILE *fp;
2135 if (fob == NULL) {
2136 fp = fopen(pathname, mode);
2137 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002138 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002139 }
2140 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002141 fp = PyFile_AsFile(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002142 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002143 PyErr_SetString(PyExc_ValueError,
2144 "bad/closed file object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002145 }
2146 return fp;
2147}
2148
Guido van Rossum79f25d91997-04-29 20:08:16 +00002149static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002150imp_load_compiled(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002151 PyObject *self;
2152 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002153{
2154 char *name;
2155 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002156 PyObject *fob = NULL;
2157 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002158 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002159 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002160 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002161 return NULL;
2162 fp = get_file(pathname, fob, "rb");
2163 if (fp == NULL)
2164 return NULL;
2165 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002166 if (fob == NULL)
2167 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002168 return m;
2169}
2170
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002171#ifdef HAVE_DYNAMIC_LOADING
2172
Guido van Rossum79f25d91997-04-29 20:08:16 +00002173static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002174imp_load_dynamic(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002175 PyObject *self;
2176 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002177{
2178 char *name;
2179 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002180 PyObject *fob = NULL;
2181 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00002182 FILE *fp = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002183 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002184 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002185 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002186 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00002187 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002188 if (fp == NULL)
2189 return NULL;
2190 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002191 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00002192 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002193}
2194
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002195#endif /* HAVE_DYNAMIC_LOADING */
2196
Guido van Rossum79f25d91997-04-29 20:08:16 +00002197static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002198imp_load_source(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002199 PyObject *self;
2200 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002201{
2202 char *name;
2203 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002204 PyObject *fob = NULL;
2205 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002206 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002207 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002208 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002209 return NULL;
2210 fp = get_file(pathname, fob, "r");
2211 if (fp == NULL)
2212 return NULL;
2213 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002214 if (fob == NULL)
2215 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002216 return m;
2217}
2218
Jack Jansen9c96a921995-02-15 22:57:06 +00002219#ifdef macintosh
Guido van Rossum79f25d91997-04-29 20:08:16 +00002220static PyObject *
Jack Jansen9c96a921995-02-15 22:57:06 +00002221imp_load_resource(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002222 PyObject *self;
2223 PyObject *args;
Jack Jansen9c96a921995-02-15 22:57:06 +00002224{
2225 char *name;
2226 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002227 PyObject *m;
Jack Jansen9c96a921995-02-15 22:57:06 +00002228
Guido van Rossum43713e52000-02-29 13:59:29 +00002229 if (!PyArg_ParseTuple(args, "ss:load_resource", &name, &pathname))
Jack Jansen9c96a921995-02-15 22:57:06 +00002230 return NULL;
2231 m = PyMac_LoadResourceModule(name, pathname);
2232 return m;
2233}
2234#endif /* macintosh */
2235
Guido van Rossum79f25d91997-04-29 20:08:16 +00002236static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002237imp_load_module(self, args)
2238 PyObject *self;
2239 PyObject *args;
2240{
2241 char *name;
2242 PyObject *fob;
2243 char *pathname;
2244 char *suffix; /* Unused */
2245 char *mode;
2246 int type;
2247 FILE *fp;
2248
Guido van Rossum43713e52000-02-29 13:59:29 +00002249 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002250 &name, &fob, &pathname,
2251 &suffix, &mode, &type))
2252 return NULL;
2253 if (*mode && (*mode != 'r' || strchr(mode, '+') != NULL)) {
2254 PyErr_Format(PyExc_ValueError,
2255 "invalid file open mode %.200s", mode);
2256 return NULL;
2257 }
2258 if (fob == Py_None)
2259 fp = NULL;
2260 else {
2261 if (!PyFile_Check(fob)) {
2262 PyErr_SetString(PyExc_ValueError,
2263 "load_module arg#2 should be a file or None");
2264 return NULL;
2265 }
2266 fp = get_file(pathname, fob, mode);
2267 if (fp == NULL)
2268 return NULL;
2269 }
2270 return load_module(name, fp, pathname, type);
2271}
2272
2273static PyObject *
2274imp_load_package(self, args)
2275 PyObject *self;
2276 PyObject *args;
2277{
2278 char *name;
2279 char *pathname;
Guido van Rossum43713e52000-02-29 13:59:29 +00002280 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002281 return NULL;
2282 return load_package(name, pathname);
2283}
2284
2285static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002286imp_new_module(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002287 PyObject *self;
2288 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002289{
2290 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002291 if (!PyArg_ParseTuple(args, "s:new_module", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002292 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002293 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002294}
2295
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002296/* Doc strings */
2297
2298static char doc_imp[] = "\
2299This module provides the components needed to build your own\n\
2300__import__ function. Undocumented functions are obsolete.\n\
2301";
2302
2303static char doc_find_module[] = "\
2304find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
2305Search for a module. If path is omitted or None, search for a\n\
2306built-in, frozen or special module and continue search in sys.path.\n\
2307The module name cannot contain '.'; to search for a submodule of a\n\
2308package, pass the submodule name and the package's __path__.\
2309";
2310
2311static char doc_load_module[] = "\
2312load_module(name, file, filename, (suffix, mode, type)) -> module\n\
2313Load a module, given information returned by find_module().\n\
2314The module name must include the full package name, if any.\
2315";
2316
2317static char doc_get_magic[] = "\
2318get_magic() -> string\n\
2319Return the magic number for .pyc or .pyo files.\
2320";
2321
2322static char doc_get_suffixes[] = "\
2323get_suffixes() -> [(suffix, mode, type), ...]\n\
2324Return a list of (suffix, mode, type) tuples describing the files\n\
2325that find_module() looks for.\
2326";
2327
2328static char doc_new_module[] = "\
2329new_module(name) -> module\n\
2330Create a new module. Do not enter it in sys.modules.\n\
2331The module name must include the full package name, if any.\
2332";
2333
Guido van Rossum79f25d91997-04-29 20:08:16 +00002334static PyMethodDef imp_methods[] = {
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002335 {"find_module", imp_find_module, 1, doc_find_module},
2336 {"get_magic", imp_get_magic, 1, doc_get_magic},
2337 {"get_suffixes", imp_get_suffixes, 1, doc_get_suffixes},
2338 {"load_module", imp_load_module, 1, doc_load_module},
2339 {"new_module", imp_new_module, 1, doc_new_module},
2340 /* The rest are obsolete */
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002341 {"get_frozen_object", imp_get_frozen_object, 1},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002342 {"init_builtin", imp_init_builtin, 1},
2343 {"init_frozen", imp_init_frozen, 1},
2344 {"is_builtin", imp_is_builtin, 1},
2345 {"is_frozen", imp_is_frozen, 1},
2346 {"load_compiled", imp_load_compiled, 1},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002347#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002348 {"load_dynamic", imp_load_dynamic, 1},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002349#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002350 {"load_package", imp_load_package, 1},
Jack Jansen9c96a921995-02-15 22:57:06 +00002351#ifdef macintosh
2352 {"load_resource", imp_load_resource, 1},
2353#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002354 {"load_source", imp_load_source, 1},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002355 {NULL, NULL} /* sentinel */
2356};
2357
Guido van Rossum1a8791e1998-08-04 22:46:29 +00002358static int
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002359setint(d, name, value)
2360 PyObject *d;
2361 char *name;
2362 int value;
2363{
2364 PyObject *v;
2365 int err;
2366
2367 v = PyInt_FromLong((long)value);
2368 err = PyDict_SetItemString(d, name, v);
2369 Py_XDECREF(v);
2370 return err;
2371}
2372
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002373void
2374initimp()
2375{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002376 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002377
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002378 m = Py_InitModule4("imp", imp_methods, doc_imp,
2379 NULL, PYTHON_API_VERSION);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002380 d = PyModule_GetDict(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002381
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002382 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
2383 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
2384 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
2385 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
2386 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
2387 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
2388 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
2389 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum0f84a341998-08-06 13:36:01 +00002390 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002391
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002392 failure:
2393 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002394}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002395
2396
Guido van Rossumb18618d2000-05-03 23:44:39 +00002397/* API for embedding applications that want to add their own entries
2398 to the table of built-in modules. This should normally be called
2399 *before* Py_Initialize(). When the table resize fails, -1 is
2400 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002401
2402 After a similar function by Just van Rossum. */
2403
2404int
2405PyImport_ExtendInittab(newtab)
2406 struct _inittab *newtab;
2407{
2408 static struct _inittab *our_copy = NULL;
2409 struct _inittab *p;
2410 int i, n;
2411
2412 /* Count the number of entries in both tables */
2413 for (n = 0; newtab[n].name != NULL; n++)
2414 ;
2415 if (n == 0)
2416 return 0; /* Nothing to do */
2417 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
2418 ;
2419
2420 /* Allocate new memory for the combined table */
Guido van Rossumb18618d2000-05-03 23:44:39 +00002421 p = our_copy;
2422 PyMem_RESIZE(p, struct _inittab, i+n+1);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002423 if (p == NULL)
2424 return -1;
2425
2426 /* Copy the tables into the new memory */
2427 if (our_copy != PyImport_Inittab)
2428 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
2429 PyImport_Inittab = our_copy = p;
2430 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
2431
2432 return 0;
2433}
2434
2435/* Shorthand to add a single entry given a name and a function */
2436
2437int
2438PyImport_AppendInittab(name, initfunc)
2439 char *name;
2440 void (*initfunc)();
2441{
2442 struct _inittab newtab[2];
2443
2444 memset(newtab, '\0', sizeof newtab);
2445
2446 newtab[0].name = name;
2447 newtab[0].initfunc = initfunc;
2448
2449 return PyImport_ExtendInittab(newtab);
2450}