blob: ede6cb68d99ed5ad14852ef1035d0273b4adab44 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001/***********************************************************
Guido van Rossum6d023c91995-01-04 19:12:13 +00002Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
3The Netherlands.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00004
5 All Rights Reserved
6
Guido van Rossumd266eb41996-10-25 14:44:06 +00007Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
Guido van Rossumf70e43a1991-02-19 12:39:46 +00009provided that the above copyright notice appear in all copies and that
Guido van Rossumd266eb41996-10-25 14:44:06 +000010both that copyright notice and this permission notice appear in
Guido van Rossumf70e43a1991-02-19 12:39:46 +000011supporting documentation, and that the names of Stichting Mathematisch
Guido van Rossumd266eb41996-10-25 14:44:06 +000012Centrum or CWI or Corporation for National Research Initiatives or
13CNRI not be used in advertising or publicity pertaining to
14distribution of the software without specific, written prior
15permission.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000016
Guido van Rossumd266eb41996-10-25 14:44:06 +000017While CWI is the initial source for this software, a modified version
18is made available by the Corporation for National Research Initiatives
19(CNRI) at the Internet address ftp://ftp.python.org.
20
21STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28PERFORMANCE OF THIS SOFTWARE.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000029
30******************************************************************/
31
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000032/* Module definition and import implementation */
33
Guido van Rossum79f25d91997-04-29 20:08:16 +000034#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000035
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000036#include "node.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000037#include "token.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000038#include "errcode.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000039#include "marshal.h"
40#include "compile.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000041#include "eval.h"
Guido van Rossumd8bac6d1992-02-26 15:19:13 +000042#include "osdefs.h"
Guido van Rossum1ae940a1995-01-02 19:04:15 +000043#include "importdl.h"
Jack Jansen9c96a921995-02-15 22:57:06 +000044#ifdef macintosh
45#include "macglue.h"
46#endif
Guido van Rossumc405b7b1991-06-04 19:39:42 +000047
Guido van Rossum80bb9651996-12-05 23:27:02 +000048#ifdef HAVE_UNISTD_H
49#include <unistd.h>
50#endif
51
Guido van Rossumaee0bad1997-09-05 07:33:22 +000052/* We expect that stat exists on most systems.
53 It's confirmed on Unix, Mac and Windows.
54 If you don't have it, add #define DONT_HAVE_STAT to your config.h. */
55#ifndef DONT_HAVE_STAT
56#define HAVE_STAT
57
Guido van Rossum2571cc81999-04-07 16:07:23 +000058#ifndef DONT_HAVE_SYS_TYPES_H
Guido van Rossumaee0bad1997-09-05 07:33:22 +000059#include <sys/types.h>
Guido van Rossum2571cc81999-04-07 16:07:23 +000060#endif
61#ifndef DONT_HAVE_SYS_STAT_H
Guido van Rossumaee0bad1997-09-05 07:33:22 +000062#include <sys/stat.h>
Guido van Rossum2571cc81999-04-07 16:07:23 +000063#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +000064
Guido van Rossum595d7ba1997-12-05 21:45:29 +000065#if defined(PYCC_VACPP)
66/* VisualAge C/C++ Failed to Define MountType Field in sys/stat.h */
67#define S_IFMT (S_IFDIR|S_IFCHR|S_IFREG)
68#endif
69
Guido van Rossumaee0bad1997-09-05 07:33:22 +000070#ifndef S_ISDIR
71#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
72#endif
73
74#endif
75
76
Fred Drake4c82b232000-06-30 16:18:57 +000077extern time_t PyOS_GetLastModificationTime(); /* In getmtime.c */
Guido van Rossum21d335e1993-10-15 13:01:11 +000078
Guido van Rossum6c849691994-09-26 15:47:17 +000079/* Magic word to reject .pyc files generated by other Python versions */
Guido van Rossum7faeab31995-07-07 22:50:36 +000080/* Change for each incompatible change */
81/* The value of CR and LF is incorporated so if you ever read or write
82 a .pyc file in text mode the magic number will be wrong; also, the
83 Apple MPW compiler swaps their values, botching string constants */
84/* XXX Perhaps the magic number should be frozen and a version field
85 added to the .pyc file header? */
Guido van Rossumdd5db431997-01-17 21:06:11 +000086/* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */
Guido van Rossum1cb6cd02000-04-28 19:03:54 +000087#define MAGIC (50428 | ((long)'\r'<<16) | ((long)'\n'<<24))
Guido van Rossum3ddee711991-12-16 13:06:34 +000088
Guido van Rossum96774c12000-05-01 20:19:08 +000089/* Magic word as global; note that _PyImport_Init() can change the
Jeremy Hylton9262b8a2000-06-30 04:59:17 +000090 value of this global to accommodate for alterations of how the
Guido van Rossum96774c12000-05-01 20:19:08 +000091 compiler works which are enabled by command line switches. */
92static long pyc_magic = MAGIC;
93
Guido van Rossum25ce5661997-08-02 03:10:38 +000094/* See _PyImport_FixupExtension() below */
95static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +000096
Guido van Rossum771c6c81997-10-31 18:37:24 +000097/* This table is defined in config.c: */
98extern struct _inittab _PyImport_Inittab[];
99
100struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +0000101
Guido van Rossumed1170e1999-12-20 21:23:41 +0000102/* these tables define the module suffixes that Python recognizes */
103struct filedescr * _PyImport_Filetab = NULL;
104static const struct filedescr _PyImport_StandardFiletab[] = {
105 {".py", "r", PY_SOURCE},
106 {".pyc", "rb", PY_COMPILED},
107 {0, 0}
108};
109
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000110/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000111
112void
Guido van Rossum25ce5661997-08-02 03:10:38 +0000113_PyImport_Init()
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000114{
Guido van Rossumed1170e1999-12-20 21:23:41 +0000115 const struct filedescr *scan;
116 struct filedescr *filetab;
117 int countD = 0;
118 int countS = 0;
119
120 /* prepare _PyImport_Filetab: copy entries from
121 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
122 */
123 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
124 ++countD;
125 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
126 ++countS;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000127 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
Guido van Rossumed1170e1999-12-20 21:23:41 +0000128 memcpy(filetab, _PyImport_DynLoadFiletab,
129 countD * sizeof(struct filedescr));
130 memcpy(filetab + countD, _PyImport_StandardFiletab,
131 countS * sizeof(struct filedescr));
132 filetab[countD + countS].suffix = NULL;
133
134 _PyImport_Filetab = filetab;
135
Guido van Rossum0824f631997-03-11 18:37:35 +0000136 if (Py_OptimizeFlag) {
Guido van Rossumed1170e1999-12-20 21:23:41 +0000137 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
138 for (; filetab->suffix != NULL; filetab++) {
139 if (strcmp(filetab->suffix, ".pyc") == 0)
140 filetab->suffix = ".pyo";
Guido van Rossum0824f631997-03-11 18:37:35 +0000141 }
142 }
Guido van Rossum96774c12000-05-01 20:19:08 +0000143
144 if (Py_UnicodeFlag) {
145 /* Fix the pyc_magic so that byte compiled code created
146 using the all-Unicode method doesn't interfere with
147 code created in normal operation mode. */
148 pyc_magic = MAGIC + 1;
149 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000150}
151
Guido van Rossum25ce5661997-08-02 03:10:38 +0000152void
153_PyImport_Fini()
154{
155 Py_XDECREF(extensions);
156 extensions = NULL;
157}
158
159
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000160/* Locking primitives to prevent parallel imports of the same module
161 in different threads to return with a partially loaded module.
162 These calls are serialized by the global interpreter lock. */
163
164#ifdef WITH_THREAD
165
Guido van Rossum49b56061998-10-01 20:42:43 +0000166#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000167
Guido van Rossum65d5b571998-12-21 19:32:43 +0000168static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000169static long import_lock_thread = -1;
170static int import_lock_level = 0;
171
172static void
173lock_import()
174{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000175 long me = PyThread_get_thread_ident();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000176 if (me == -1)
177 return; /* Too bad */
178 if (import_lock == NULL)
Guido van Rossum65d5b571998-12-21 19:32:43 +0000179 import_lock = PyThread_allocate_lock();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000180 if (import_lock_thread == me) {
181 import_lock_level++;
182 return;
183 }
Guido van Rossum65d5b571998-12-21 19:32:43 +0000184 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0)) {
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000185 PyThreadState *tstate = PyEval_SaveThread();
Guido van Rossum65d5b571998-12-21 19:32:43 +0000186 PyThread_acquire_lock(import_lock, 1);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000187 PyEval_RestoreThread(tstate);
188 }
189 import_lock_thread = me;
190 import_lock_level = 1;
191}
192
193static void
194unlock_import()
195{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000196 long me = PyThread_get_thread_ident();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000197 if (me == -1)
198 return; /* Too bad */
199 if (import_lock_thread != me)
200 Py_FatalError("unlock_import: not holding the import lock");
201 import_lock_level--;
202 if (import_lock_level == 0) {
203 import_lock_thread = -1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000204 PyThread_release_lock(import_lock);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000205 }
206}
207
208#else
209
210#define lock_import()
211#define unlock_import()
212
213#endif
214
Guido van Rossum25ce5661997-08-02 03:10:38 +0000215/* Helper for sys */
216
217PyObject *
218PyImport_GetModuleDict()
219{
220 PyInterpreterState *interp = PyThreadState_Get()->interp;
221 if (interp->modules == NULL)
222 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
223 return interp->modules;
224}
225
Guido van Rossum3f5da241990-12-20 15:06:42 +0000226
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000227/* List of names to clear in sys */
228static char* sys_deletes[] = {
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000229 "path", "argv", "ps1", "ps2", "exitfunc",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000230 "exc_type", "exc_value", "exc_traceback",
231 "last_type", "last_value", "last_traceback",
232 NULL
233};
234
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000235static char* sys_files[] = {
236 "stdin", "__stdin__",
237 "stdout", "__stdout__",
238 "stderr", "__stderr__",
239 NULL
240};
241
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000242
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000243/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000244
Guido van Rossum3f5da241990-12-20 15:06:42 +0000245void
Guido van Rossum79f25d91997-04-29 20:08:16 +0000246PyImport_Cleanup()
Guido van Rossum3f5da241990-12-20 15:06:42 +0000247{
Guido van Rossum758eec01998-01-19 21:58:26 +0000248 int pos, ndone;
249 char *name;
250 PyObject *key, *value, *dict;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000251 PyInterpreterState *interp = PyThreadState_Get()->interp;
Guido van Rossum758eec01998-01-19 21:58:26 +0000252 PyObject *modules = interp->modules;
253
254 if (modules == NULL)
255 return; /* Already done */
256
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000257 /* Delete some special variables first. These are common
258 places where user values hide and people complain when their
259 destructors fail. Since the modules containing them are
260 deleted *last* of all, they would come too late in the normal
261 destruction order. Sigh. */
262
263 value = PyDict_GetItemString(modules, "__builtin__");
264 if (value != NULL && PyModule_Check(value)) {
265 dict = PyModule_GetDict(value);
266 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000267 PySys_WriteStderr("# clear __builtin__._\n");
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000268 PyDict_SetItemString(dict, "_", Py_None);
269 }
270 value = PyDict_GetItemString(modules, "sys");
271 if (value != NULL && PyModule_Check(value)) {
272 char **p;
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000273 PyObject *v;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000274 dict = PyModule_GetDict(value);
275 for (p = sys_deletes; *p != NULL; p++) {
276 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000277 PySys_WriteStderr("# clear sys.%s\n", *p);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000278 PyDict_SetItemString(dict, *p, Py_None);
279 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000280 for (p = sys_files; *p != NULL; p+=2) {
281 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000282 PySys_WriteStderr("# restore sys.%s\n", *p);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000283 v = PyDict_GetItemString(dict, *(p+1));
284 if (v == NULL)
285 v = Py_None;
286 PyDict_SetItemString(dict, *p, v);
287 }
288 }
289
290 /* First, delete __main__ */
291 value = PyDict_GetItemString(modules, "__main__");
292 if (value != NULL && PyModule_Check(value)) {
293 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000294 PySys_WriteStderr("# cleanup __main__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000295 _PyModule_Clear(value);
296 PyDict_SetItemString(modules, "__main__", Py_None);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000297 }
298
Guido van Rossum758eec01998-01-19 21:58:26 +0000299 /* The special treatment of __builtin__ here is because even
300 when it's not referenced as a module, its dictionary is
301 referenced by almost every module's __builtins__. Since
302 deleting a module clears its dictionary (even if there are
303 references left to it), we need to delete the __builtin__
304 module last. Likewise, we don't delete sys until the very
305 end because it is implicitly referenced (e.g. by print).
306
307 Also note that we 'delete' modules by replacing their entry
308 in the modules dict with None, rather than really deleting
309 them; this avoids a rehash of the modules dictionary and
310 also marks them as "non existent" so they won't be
311 re-imported. */
312
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000313 /* Next, repeatedly delete modules with a reference count of
Guido van Rossum758eec01998-01-19 21:58:26 +0000314 one (skipping __builtin__ and sys) and delete them */
315 do {
316 ndone = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000317 pos = 0;
Guido van Rossum758eec01998-01-19 21:58:26 +0000318 while (PyDict_Next(modules, &pos, &key, &value)) {
319 if (value->ob_refcnt != 1)
320 continue;
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(
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000329 "# cleanup[1] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000330 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000331 PyDict_SetItem(modules, key, Py_None);
332 ndone++;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000333 }
334 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000335 } while (ndone > 0);
336
Guido van Rossum758eec01998-01-19 21:58:26 +0000337 /* Next, delete all modules (still skipping __builtin__ and sys) */
338 pos = 0;
339 while (PyDict_Next(modules, &pos, &key, &value)) {
Guido van Rossum566373e1998-10-01 15:24:50 +0000340 if (PyString_Check(key) && PyModule_Check(value)) {
341 name = PyString_AS_STRING(key);
Guido van Rossum758eec01998-01-19 21:58:26 +0000342 if (strcmp(name, "__builtin__") == 0)
343 continue;
344 if (strcmp(name, "sys") == 0)
345 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000346 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000347 PySys_WriteStderr("# cleanup[2] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000348 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000349 PyDict_SetItem(modules, key, Py_None);
350 }
351 }
352
353 /* Next, delete sys and __builtin__ (in that order) */
354 value = PyDict_GetItemString(modules, "sys");
355 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000356 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000357 PySys_WriteStderr("# cleanup sys\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000358 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000359 PyDict_SetItemString(modules, "sys", Py_None);
360 }
361 value = PyDict_GetItemString(modules, "__builtin__");
362 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000363 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000364 PySys_WriteStderr("# cleanup __builtin__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000365 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000366 PyDict_SetItemString(modules, "__builtin__", Py_None);
367 }
368
369 /* Finally, clear and delete the modules directory */
370 PyDict_Clear(modules);
371 interp->modules = NULL;
372 Py_DECREF(modules);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000373}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000374
375
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000376/* Helper for pythonrun.c -- return magic number */
377
378long
Guido van Rossum79f25d91997-04-29 20:08:16 +0000379PyImport_GetMagicNumber()
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000380{
Guido van Rossum96774c12000-05-01 20:19:08 +0000381 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000382}
383
384
Guido van Rossum25ce5661997-08-02 03:10:38 +0000385/* Magic for extension modules (built-in as well as dynamically
386 loaded). To prevent initializing an extension module more than
387 once, we keep a static dictionary 'extensions' keyed by module name
388 (for built-in modules) or by filename (for dynamically loaded
389 modules), containing these modules. A copy od the module's
390 dictionary is stored by calling _PyImport_FixupExtension()
391 immediately after the module initialization function succeeds. A
392 copy can be retrieved from there by calling
393 _PyImport_FindExtension(). */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000394
Guido van Rossum79f25d91997-04-29 20:08:16 +0000395PyObject *
Guido van Rossum25ce5661997-08-02 03:10:38 +0000396_PyImport_FixupExtension(name, filename)
397 char *name;
398 char *filename;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000399{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000400 PyObject *modules, *mod, *dict, *copy;
401 if (extensions == NULL) {
402 extensions = PyDict_New();
403 if (extensions == NULL)
404 return NULL;
405 }
406 modules = PyImport_GetModuleDict();
407 mod = PyDict_GetItemString(modules, name);
408 if (mod == NULL || !PyModule_Check(mod)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000409 PyErr_Format(PyExc_SystemError,
410 "_PyImport_FixupExtension: module %.200s not loaded", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000411 return NULL;
412 }
413 dict = PyModule_GetDict(mod);
414 if (dict == NULL)
415 return NULL;
416 copy = PyObject_CallMethod(dict, "copy", "");
417 if (copy == NULL)
418 return NULL;
419 PyDict_SetItemString(extensions, filename, copy);
420 Py_DECREF(copy);
421 return copy;
422}
423
424PyObject *
425_PyImport_FindExtension(name, filename)
426 char *name;
427 char *filename;
428{
429 PyObject *dict, *mod, *mdict, *result;
430 if (extensions == NULL)
431 return NULL;
432 dict = PyDict_GetItemString(extensions, filename);
433 if (dict == NULL)
434 return NULL;
435 mod = PyImport_AddModule(name);
436 if (mod == NULL)
437 return NULL;
438 mdict = PyModule_GetDict(mod);
439 if (mdict == NULL)
440 return NULL;
441 result = PyObject_CallMethod(mdict, "update", "O", dict);
442 if (result == NULL)
443 return NULL;
444 Py_DECREF(result);
445 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000446 PySys_WriteStderr("import %s # previously loaded (%s)\n",
Guido van Rossum25ce5661997-08-02 03:10:38 +0000447 name, filename);
448 return mod;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000449}
450
451
452/* Get the module object corresponding to a module name.
453 First check the modules dictionary if there's one there,
454 if not, create a new one and insert in in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000455 Because the former action is most common, THIS DOES NOT RETURN A
456 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000457
Guido van Rossum79f25d91997-04-29 20:08:16 +0000458PyObject *
459PyImport_AddModule(name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000460 char *name;
461{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000462 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000463 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000464
Guido van Rossum25ce5661997-08-02 03:10:38 +0000465 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
Guido van Rossum79f25d91997-04-29 20:08:16 +0000466 PyModule_Check(m))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000467 return m;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000468 m = PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000469 if (m == NULL)
470 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000471 if (PyDict_SetItemString(modules, name, m) != 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000472 Py_DECREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000473 return NULL;
474 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000475 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000476
477 return m;
478}
479
480
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000481/* Execute a code object in a module and return the module object
482 WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000483
Guido van Rossum79f25d91997-04-29 20:08:16 +0000484PyObject *
485PyImport_ExecCodeModule(name, co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000486 char *name;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000487 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000488{
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000489 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
490}
491
492PyObject *
493PyImport_ExecCodeModuleEx(name, co, pathname)
494 char *name;
495 PyObject *co;
496 char *pathname;
497{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000498 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000499 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000500
Guido van Rossum79f25d91997-04-29 20:08:16 +0000501 m = PyImport_AddModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000502 if (m == NULL)
503 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000504 d = PyModule_GetDict(m);
505 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
506 if (PyDict_SetItemString(d, "__builtins__",
507 PyEval_GetBuiltins()) != 0)
Guido van Rossum6135a871995-01-09 17:53:26 +0000508 return NULL;
509 }
Guido van Rossum9c9a07c1996-05-16 20:43:40 +0000510 /* Remember the filename as the __file__ attribute */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000511 v = NULL;
512 if (pathname != NULL) {
513 v = PyString_FromString(pathname);
514 if (v == NULL)
515 PyErr_Clear();
516 }
517 if (v == NULL) {
518 v = ((PyCodeObject *)co)->co_filename;
519 Py_INCREF(v);
520 }
521 if (PyDict_SetItemString(d, "__file__", v) != 0)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000522 PyErr_Clear(); /* Not important enough to report */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000523 Py_DECREF(v);
524
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000525 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000526 if (v == NULL)
527 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000528 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000529
Guido van Rossum25ce5661997-08-02 03:10:38 +0000530 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000531 PyErr_Format(PyExc_ImportError,
532 "Loaded module %.200s not found in sys.modules",
533 name);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000534 return NULL;
535 }
536
Guido van Rossum79f25d91997-04-29 20:08:16 +0000537 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000538
539 return m;
540}
541
542
543/* Given a pathname for a Python source file, fill a buffer with the
544 pathname for the corresponding compiled file. Return the pathname
545 for the compiled file, or NULL if there's no space in the buffer.
546 Doesn't set an exception. */
547
548static char *
549make_compiled_pathname(pathname, buf, buflen)
550 char *pathname;
551 char *buf;
Fred Drake4c82b232000-06-30 16:18:57 +0000552 size_t buflen;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000553{
Fred Drake4c82b232000-06-30 16:18:57 +0000554 size_t len;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000555
556 len = strlen(pathname);
557 if (len+2 > buflen)
558 return NULL;
559 strcpy(buf, pathname);
Guido van Rossum0824f631997-03-11 18:37:35 +0000560 strcpy(buf+len, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000561
562 return buf;
563}
564
565
566/* Given a pathname for a Python source file, its time of last
567 modification, and a pathname for a compiled file, check whether the
568 compiled file represents the same version of the source. If so,
569 return a FILE pointer for the compiled file, positioned just after
570 the header; if not, return NULL.
571 Doesn't set an exception. */
572
573static FILE *
574check_compiled_module(pathname, mtime, cpathname)
575 char *pathname;
576 long mtime;
577 char *cpathname;
578{
579 FILE *fp;
580 long magic;
581 long pyc_mtime;
582
583 fp = fopen(cpathname, "rb");
584 if (fp == NULL)
585 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000586 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000587 if (magic != pyc_magic) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000588 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000589 PySys_WriteStderr("# %s has bad magic\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000590 fclose(fp);
591 return NULL;
592 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000593 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000594 if (pyc_mtime != mtime) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000595 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000596 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000597 fclose(fp);
598 return NULL;
599 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000600 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000601 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000602 return fp;
603}
604
605
606/* Read a code object from a file and check it for validity */
607
Guido van Rossum79f25d91997-04-29 20:08:16 +0000608static PyCodeObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000609read_compiled_module(cpathname, fp)
610 char *cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000611 FILE *fp;
612{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000613 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000614
Guido van Rossum79f25d91997-04-29 20:08:16 +0000615 co = PyMarshal_ReadObjectFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000616 /* Ugly: rd_object() may return NULL with or without error */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000617 if (co == NULL || !PyCode_Check(co)) {
618 if (!PyErr_Occurred())
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000619 PyErr_Format(PyExc_ImportError,
620 "Non-code object in %.200s", cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000621 Py_XDECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000622 return NULL;
623 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000624 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000625}
626
627
628/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000629 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000630
Guido van Rossum79f25d91997-04-29 20:08:16 +0000631static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000632load_compiled_module(name, cpathname, fp)
633 char *name;
634 char *cpathname;
635 FILE *fp;
636{
637 long magic;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000638 PyCodeObject *co;
639 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000640
Guido van Rossum79f25d91997-04-29 20:08:16 +0000641 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000642 if (magic != pyc_magic) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000643 PyErr_Format(PyExc_ImportError,
644 "Bad magic number in %.200s", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000645 return NULL;
646 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000647 (void) PyMarshal_ReadLongFromFile(fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000648 co = read_compiled_module(cpathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000649 if (co == NULL)
650 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000651 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000652 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000653 name, cpathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000654 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000655 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000656
657 return m;
658}
659
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000660/* Parse a source file and return the corresponding code object */
661
Guido van Rossum79f25d91997-04-29 20:08:16 +0000662static PyCodeObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000663parse_source_module(pathname, fp)
664 char *pathname;
665 FILE *fp;
666{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000667 PyCodeObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000668 node *n;
669
Guido van Rossumb05a5c71997-05-07 17:46:13 +0000670 n = PyParser_SimpleParseFile(fp, pathname, Py_file_input);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000671 if (n == NULL)
672 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000673 co = PyNode_Compile(n, pathname);
674 PyNode_Free(n);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000675
676 return co;
677}
678
679
680/* Write a compiled module to a file, placing the time of last
681 modification of its source into the header.
682 Errors are ignored, if a write error occurs an attempt is made to
683 remove the file. */
684
685static void
686write_compiled_module(co, cpathname, mtime)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000687 PyCodeObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000688 char *cpathname;
689 long mtime;
690{
691 FILE *fp;
692
693 fp = fopen(cpathname, "wb");
694 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000695 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000696 PySys_WriteStderr(
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000697 "# can't create %s\n", cpathname);
698 return;
699 }
Guido van Rossum96774c12000-05-01 20:19:08 +0000700 PyMarshal_WriteLongToFile(pyc_magic, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000701 /* First write a 0 for mtime */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000702 PyMarshal_WriteLongToFile(0L, fp);
703 PyMarshal_WriteObjectToFile((PyObject *)co, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000704 if (ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000705 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000706 PySys_WriteStderr("# can't write %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000707 /* Don't keep partial file */
708 fclose(fp);
709 (void) unlink(cpathname);
710 return;
711 }
712 /* Now write the true mtime */
713 fseek(fp, 4L, 0);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000714 PyMarshal_WriteLongToFile(mtime, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000715 fflush(fp);
716 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000717 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000718 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000719#ifdef macintosh
Guido van Rossumbe1a6e21996-02-21 15:29:20 +0000720 setfiletype(cpathname, 'Pyth', 'PYC ');
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000721#endif
722}
723
724
725/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000726 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
727 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000728
Guido van Rossum79f25d91997-04-29 20:08:16 +0000729static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000730load_source_module(name, pathname, fp)
731 char *name;
732 char *pathname;
733 FILE *fp;
734{
Fred Drake4c82b232000-06-30 16:18:57 +0000735 time_t mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000736 FILE *fpc;
737 char buf[MAXPATHLEN+1];
738 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000739 PyCodeObject *co;
740 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000741
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000742 mtime = PyOS_GetLastModificationTime(pathname, fp);
Fred Drake4c82b232000-06-30 16:18:57 +0000743 if (mtime == -1)
744 return NULL;
745#if SIZEOF_TIME_T > 4
746 /* Python's .pyc timestamp handling presumes that the timestamp fits
747 in 4 bytes. This will be fine until sometime in the year 2038,
748 when a 4-byte signed time_t will overflow.
749 */
750 if (mtime >> 32) {
751 PyErr_SetString(PyExc_OverflowError,
752 "modification time overflows a 4 bytes");
753 return NULL;
754 }
755#endif
756 cpathname = make_compiled_pathname(pathname, buf, (size_t)MAXPATHLEN+1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000757 if (cpathname != NULL &&
758 (fpc = check_compiled_module(pathname, mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000759 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000760 fclose(fpc);
761 if (co == NULL)
762 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000763 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000764 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000765 name, cpathname);
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000766 pathname = cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000767 }
768 else {
769 co = parse_source_module(pathname, fp);
770 if (co == NULL)
771 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000772 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000773 PySys_WriteStderr("import %s # from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000774 name, pathname);
775 write_compiled_module(co, cpathname, mtime);
776 }
Guido van Rossumafd3dae1998-08-25 18:44:34 +0000777 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000778 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000779
780 return m;
781}
782
783
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000784/* Forward */
785static PyObject *load_module Py_PROTO((char *, FILE *, char *, int));
786static struct filedescr *find_module Py_PROTO((char *, PyObject *,
Fred Drake4c82b232000-06-30 16:18:57 +0000787 char *, size_t, FILE **));
Guido van Rossuma86f77d1997-09-09 18:53:47 +0000788static struct _frozen *find_frozen Py_PROTO((char *name));
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000789
790/* Load a package and return its module object WITH INCREMENTED
791 REFERENCE COUNT */
792
793static PyObject *
794load_package(name, pathname)
795 char *name;
796 char *pathname;
797{
798 PyObject *m, *d, *file, *path;
799 int err;
800 char buf[MAXPATHLEN+1];
801 FILE *fp = NULL;
802 struct filedescr *fdp;
803
804 m = PyImport_AddModule(name);
805 if (m == NULL)
806 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000807 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000808 PySys_WriteStderr("import %s # directory %s\n",
Guido van Rossum17fc85f1997-09-06 18:52:03 +0000809 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000810 d = PyModule_GetDict(m);
811 file = PyString_FromString(pathname);
812 if (file == NULL)
813 return NULL;
814 path = Py_BuildValue("[O]", file);
815 if (path == NULL) {
816 Py_DECREF(file);
817 return NULL;
818 }
819 err = PyDict_SetItemString(d, "__file__", file);
820 if (err == 0)
821 err = PyDict_SetItemString(d, "__path__", path);
822 if (err != 0) {
823 m = NULL;
824 goto cleanup;
825 }
826 buf[0] = '\0';
827 fdp = find_module("__init__", path, buf, sizeof(buf), &fp);
828 if (fdp == NULL) {
829 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
830 PyErr_Clear();
831 }
832 else
833 m = NULL;
834 goto cleanup;
835 }
836 m = load_module(name, fp, buf, fdp->type);
837 if (fp != NULL)
838 fclose(fp);
839 cleanup:
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000840 Py_XDECREF(path);
841 Py_XDECREF(file);
842 return m;
843}
844
845
846/* Helper to test for built-in module */
847
848static int
849is_builtin(name)
850 char *name;
851{
852 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +0000853 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
854 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
855 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000856 return -1;
857 else
858 return 1;
859 }
860 }
861 return 0;
862}
863
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000864
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000865/* Search the path (default sys.path) for a module. Return the
866 corresponding filedescr struct, and (via return arguments) the
867 pathname and an open file. Return NULL if the module is not found. */
868
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000869#ifdef MS_COREDLL
870extern FILE *PyWin_FindRegisteredModule();
871#endif
872
Guido van Rossum0980bd91998-02-13 17:18:36 +0000873#ifdef CHECK_IMPORT_CASE
874static int check_case(char *, int, int, char *);
875#endif
876
Guido van Rossum197346f1997-10-31 18:38:52 +0000877static int find_init_module Py_PROTO((char *)); /* Forward */
878
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000879static struct filedescr *
Guido van Rossum0506a431998-08-11 15:07:39 +0000880find_module(realname, path, buf, buflen, p_fp)
881 char *realname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000882 PyObject *path;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000883 /* Output parameters: */
884 char *buf;
Fred Drake4c82b232000-06-30 16:18:57 +0000885 size_t buflen;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000886 FILE **p_fp;
887{
Fred Drake4c82b232000-06-30 16:18:57 +0000888 int i, npath;
889 size_t len, namelen;
Guido van Rossuma5568d31998-03-05 03:45:08 +0000890 struct _frozen *f;
Guido van Rossum80bb9651996-12-05 23:27:02 +0000891 struct filedescr *fdp = NULL;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +0000892 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000893 struct stat statbuf;
Guido van Rossuma5568d31998-03-05 03:45:08 +0000894 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
895 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
896 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Guido van Rossum0506a431998-08-11 15:07:39 +0000897 char name[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000898
Fred Drake4c82b232000-06-30 16:18:57 +0000899 if (strlen(realname) > MAXPATHLEN) {
900 PyErr_SetString(PyExc_OverflowError, "module name is too long");
901 return NULL;
902 }
Guido van Rossum0506a431998-08-11 15:07:39 +0000903 strcpy(name, realname);
904
905 if (path != NULL && PyString_Check(path)) {
906 /* Submodule of "frozen" package:
907 Set name to the fullname, path to NULL
908 and continue as "usual" */
909 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
910 PyErr_SetString(PyExc_ImportError,
911 "full frozen module name too long");
912 return NULL;
913 }
914 strcpy(buf, PyString_AsString(path));
915 strcat(buf, ".");
916 strcat(buf, name);
917 strcpy(name, buf);
918 path = NULL;
919 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000920 if (path == NULL) {
921 if (is_builtin(name)) {
Guido van Rossuma5568d31998-03-05 03:45:08 +0000922 strcpy(buf, name);
923 return &fd_builtin;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000924 }
Guido van Rossuma5568d31998-03-05 03:45:08 +0000925 if ((f = find_frozen(name)) != NULL) {
926 strcpy(buf, name);
927 return &fd_frozen;
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000928 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000929
Guido van Rossumac279101996-08-22 23:10:58 +0000930#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000931 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
932 if (fp != NULL) {
933 *p_fp = fp;
934 return fdp;
935 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +0000936#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +0000937 path = PySys_GetObject("path");
938 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000939 if (path == NULL || !PyList_Check(path)) {
940 PyErr_SetString(PyExc_ImportError,
Guido van Rossuma5568d31998-03-05 03:45:08 +0000941 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000942 return NULL;
943 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000944 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000945 namelen = strlen(name);
946 for (i = 0; i < npath; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000947 PyObject *v = PyList_GetItem(path, i);
948 if (!PyString_Check(v))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000949 continue;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000950 len = PyString_Size(v);
Guido van Rossumef3d02e1997-07-21 14:54:36 +0000951 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000952 continue; /* Too long */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000953 strcpy(buf, PyString_AsString(v));
Fred Drake4c82b232000-06-30 16:18:57 +0000954 if (strlen(buf) != len)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000955 continue; /* v contains '\0' */
Jack Jansen9c96a921995-02-15 22:57:06 +0000956#ifdef macintosh
Guido van Rossum741689d1997-08-12 14:53:39 +0000957#ifdef INTERN_STRINGS
958 /*
959 ** Speedup: each sys.path item is interned, and
960 ** FindResourceModule remembers which items refer to
961 ** folders (so we don't have to bother trying to look
962 ** into them for resources).
963 */
964 PyString_InternInPlace(&PyList_GET_ITEM(path, i));
965 v = PyList_GET_ITEM(path, i);
966#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000967 if (PyMac_FindResourceModule((PyStringObject *)v, name, buf)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000968 static struct filedescr resfiledescr =
969 {"", "", PY_RESOURCE};
Jack Jansen9c96a921995-02-15 22:57:06 +0000970
971 return &resfiledescr;
972 }
Guido van Rossum0f84a341998-08-06 13:36:01 +0000973 if (PyMac_FindCodeResourceModule((PyStringObject *)v, name, buf)) {
974 static struct filedescr resfiledescr =
975 {"", "", PY_CODERESOURCE};
976
977 return &resfiledescr;
978 }
Jack Jansen9c96a921995-02-15 22:57:06 +0000979#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000980 if (len > 0 && buf[len-1] != SEP
981#ifdef ALTSEP
982 && buf[len-1] != ALTSEP
983#endif
984 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000985 buf[len++] = SEP;
Guido van Rossum40f470f1996-05-23 22:51:04 +0000986#ifdef IMPORT_8x3_NAMES
Guido van Rossume8c27bb1997-12-17 18:57:16 +0000987 /* see if we are searching in directory dos-8x3 */
988 if (len > 7 && !strncmp(buf + len - 8, "dos-8x3", 7)){
Guido van Rossum40f470f1996-05-23 22:51:04 +0000989 int j;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000990 char ch; /* limit name to 8 lower-case characters */
Guido van Rossum40f470f1996-05-23 22:51:04 +0000991 for (j = 0; (ch = name[j]) && j < 8; j++)
992 if (isupper(ch))
993 buf[len++] = tolower(ch);
994 else
995 buf[len++] = ch;
996 }
Guido van Rossume8c27bb1997-12-17 18:57:16 +0000997 else /* Not in dos-8x3, use the full name */
Guido van Rossum6f489d91996-06-28 20:15:15 +0000998#endif
Guido van Rossum0e41c8c1996-06-20 14:18:34 +0000999 {
Guido van Rossum40f470f1996-05-23 22:51:04 +00001000 strcpy(buf+len, name);
1001 len += namelen;
1002 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001003#ifdef HAVE_STAT
1004 if (stat(buf, &statbuf) == 0) {
Guido van Rossum197346f1997-10-31 18:38:52 +00001005 if (S_ISDIR(statbuf.st_mode)) {
Guido van Rossum0980bd91998-02-13 17:18:36 +00001006 if (find_init_module(buf)) {
1007#ifdef CHECK_IMPORT_CASE
1008 if (!check_case(buf, len, namelen,
1009 name))
1010 return NULL;
1011#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001012 return &fd_package;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001013 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001014 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001015 }
1016#else
1017 /* XXX How are you going to test for directories? */
1018#endif
Guido van Rossum9a61dc91997-10-08 15:25:08 +00001019#ifdef macintosh
1020 fdp = PyMac_FindModuleExtension(buf, &len, name);
1021 if (fdp)
1022 fp = fopen(buf, fdp->mode);
1023#else
Guido van Rossum79f25d91997-04-29 20:08:16 +00001024 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001025 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001026 if (Py_VerboseFlag > 1)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001027 PySys_WriteStderr("# trying %s\n", buf);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001028 fp = fopen(buf, fdp->mode);
1029 if (fp != NULL)
1030 break;
1031 }
Guido van Rossum741689d1997-08-12 14:53:39 +00001032#endif /* !macintosh */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001033 if (fp != NULL)
1034 break;
1035 }
1036 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001037 PyErr_Format(PyExc_ImportError,
1038 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001039 return NULL;
1040 }
Guido van Rossum0980bd91998-02-13 17:18:36 +00001041#ifdef CHECK_IMPORT_CASE
1042 if (!check_case(buf, len, namelen, name)) {
1043 fclose(fp);
1044 return NULL;
1045 }
1046#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001047
1048 *p_fp = fp;
1049 return fdp;
1050}
1051
Guido van Rossum0980bd91998-02-13 17:18:36 +00001052#ifdef CHECK_IMPORT_CASE
1053
1054#ifdef MS_WIN32
1055#include <windows.h>
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001056#include <ctype.h>
1057
1058static int
1059allcaps8x3(s)
1060 char *s;
1061{
1062 /* Return 1 if s is an 8.3 filename in ALLCAPS */
1063 char c;
1064 char *dot = strchr(s, '.');
1065 char *end = strchr(s, '\0');
1066 if (dot != NULL) {
1067 if (dot-s > 8)
Guido van Rossum22b65a82000-05-01 17:36:58 +00001068 return 0; /* More than 8 before '.' */
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001069 if (end-dot > 4)
Guido van Rossum22b65a82000-05-01 17:36:58 +00001070 return 0; /* More than 3 after '.' */
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001071 end = strchr(dot+1, '.');
1072 if (end != NULL)
Guido van Rossum22b65a82000-05-01 17:36:58 +00001073 return 0; /* More than one dot */
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001074 }
1075 else if (end-s > 8)
Guido van Rossum22b65a82000-05-01 17:36:58 +00001076 return 0; /* More than 8 and no dot */
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001077 while ((c = *s++)) {
1078 if (islower(c))
1079 return 0;
1080 }
1081 return 1;
1082}
1083
Guido van Rossum0980bd91998-02-13 17:18:36 +00001084static int
1085check_case(char *buf, int len, int namelen, char *name)
1086{
1087 WIN32_FIND_DATA data;
1088 HANDLE h;
1089 if (getenv("PYTHONCASEOK") != NULL)
1090 return 1;
1091 h = FindFirstFile(buf, &data);
1092 if (h == INVALID_HANDLE_VALUE) {
1093 PyErr_Format(PyExc_NameError,
1094 "Can't find file for module %.100s\n(filename %.300s)",
1095 name, buf);
1096 return 0;
1097 }
1098 FindClose(h);
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001099 if (allcaps8x3(data.cFileName)) {
1100 /* Skip the test if the filename is ALL.CAPS. This can
1101 happen in certain circumstances beyond our control,
1102 e.g. when software is installed under NT on a FAT
1103 filesystem and then the same FAT filesystem is used
1104 under Windows 95. */
1105 return 1;
1106 }
Guido van Rossum0980bd91998-02-13 17:18:36 +00001107 if (strncmp(data.cFileName, name, namelen) != 0) {
1108 strcpy(buf+len-namelen, data.cFileName);
1109 PyErr_Format(PyExc_NameError,
1110 "Case mismatch for module name %.100s\n(filename %.300s)",
1111 name, buf);
1112 return 0;
1113 }
1114 return 1;
1115}
1116#endif /* MS_WIN32 */
1117
1118#ifdef macintosh
1119#include <TextUtils.h>
Guido van Rossumb33aa1a2000-04-24 15:08:18 +00001120#ifdef USE_GUSI1
Guido van Rossuma0f0a331998-09-14 13:40:53 +00001121#include "TFileSpec.h" /* for Path2FSSpec() */
1122#endif
Guido van Rossum0980bd91998-02-13 17:18:36 +00001123static int
1124check_case(char *buf, int len, int namelen, char *name)
1125{
1126 FSSpec fss;
1127 OSErr err;
Guido van Rossumb33aa1a2000-04-24 15:08:18 +00001128#ifndef USE_GUSI1
Guido van Rossuma0f0a331998-09-14 13:40:53 +00001129 err = FSMakeFSSpec(0, 0, Pstring(buf), &fss);
1130#else
1131 /* GUSI's Path2FSSpec() resolves all possible aliases nicely on
1132 the way, which is fine for all directories, but here we need
1133 the original name of the alias file (say, Dlg.ppc.slb, not
1134 toolboxmodules.ppc.slb). */
1135 char *colon;
1136 err = Path2FSSpec(buf, &fss);
1137 if (err == noErr) {
1138 colon = strrchr(buf, ':'); /* find filename */
1139 if (colon != NULL)
1140 err = FSMakeFSSpec(fss.vRefNum, fss.parID,
1141 Pstring(colon+1), &fss);
1142 else
1143 err = FSMakeFSSpec(fss.vRefNum, fss.parID,
1144 fss.name, &fss);
1145 }
1146#endif
Guido van Rossum0980bd91998-02-13 17:18:36 +00001147 if (err) {
1148 PyErr_Format(PyExc_NameError,
Guido van Rossuma0f0a331998-09-14 13:40:53 +00001149 "Can't find file for module %.100s\n(filename %.300s)",
1150 name, buf);
Guido van Rossum0980bd91998-02-13 17:18:36 +00001151 return 0;
1152 }
1153 p2cstr(fss.name);
1154 if ( strncmp(name, (char *)fss.name, namelen) != 0 ) {
1155 PyErr_Format(PyExc_NameError,
Guido van Rossuma0f0a331998-09-14 13:40:53 +00001156 "Case mismatch for module name %.100s\n(filename %.300s)",
1157 name, fss.name);
Guido van Rossum0980bd91998-02-13 17:18:36 +00001158 return 0;
1159 }
1160 return 1;
1161}
1162#endif /* macintosh */
1163
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001164#ifdef DJGPP
Guido van Rossumaeca79b1998-02-18 16:21:00 +00001165#include <dir.h>
1166
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001167static int
1168check_case(char *buf, int len, int namelen, char *name)
1169{
1170 struct ffblk ffblk;
1171 int done;
1172
1173 if (getenv("PYTHONCASEOK") != NULL)
1174 return 1;
Guido van Rossumaeca79b1998-02-18 16:21:00 +00001175 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001176 if (done) {
1177 PyErr_Format(PyExc_NameError,
1178 "Can't find file for module %.100s\n(filename %.300s)",
1179 name, buf);
1180 return 0;
1181 }
1182
1183 if (strncmp(ffblk.ff_name, name, namelen) != 0) {
1184 strcpy(buf+len-namelen, ffblk.ff_name);
1185 PyErr_Format(PyExc_NameError,
1186 "Case mismatch for module name %.100s\n(filename %.300s)",
1187 name, buf);
1188 return 0;
1189 }
1190 return 1;
1191}
1192#endif
1193
Guido van Rossum8766a771998-04-10 23:44:32 +00001194#endif /* CHECK_IMPORT_CASE */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001195
Guido van Rossum197346f1997-10-31 18:38:52 +00001196#ifdef HAVE_STAT
1197/* Helper to look for __init__.py or __init__.py[co] in potential package */
1198static int
1199find_init_module(buf)
1200 char *buf;
1201{
Fred Drake4c82b232000-06-30 16:18:57 +00001202 size_t save_len = strlen(buf);
1203 size_t i = save_len;
Guido van Rossum197346f1997-10-31 18:38:52 +00001204 struct stat statbuf;
1205
1206 if (save_len + 13 >= MAXPATHLEN)
1207 return 0;
1208 buf[i++] = SEP;
1209 strcpy(buf+i, "__init__.py");
1210 if (stat(buf, &statbuf) == 0) {
1211 buf[save_len] = '\0';
1212 return 1;
1213 }
1214 i += strlen(buf+i);
1215 if (Py_OptimizeFlag)
1216 strcpy(buf+i, "o");
1217 else
1218 strcpy(buf+i, "c");
1219 if (stat(buf, &statbuf) == 0) {
1220 buf[save_len] = '\0';
1221 return 1;
1222 }
1223 buf[save_len] = '\0';
1224 return 0;
1225}
1226#endif /* HAVE_STAT */
1227
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001228
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001229static int init_builtin Py_PROTO((char *)); /* Forward */
1230
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001231/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001232 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001233
Guido van Rossum79f25d91997-04-29 20:08:16 +00001234static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001235load_module(name, fp, buf, type)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001236 char *name;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001237 FILE *fp;
1238 char *buf;
1239 int type;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001240{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001241 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001242 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001243 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001244
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001245 /* First check that there's an open file (if we need one) */
1246 switch (type) {
1247 case PY_SOURCE:
1248 case PY_COMPILED:
1249 if (fp == NULL) {
1250 PyErr_Format(PyExc_ValueError,
1251 "file object required for import (type code %d)",
1252 type);
1253 return NULL;
1254 }
1255 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001256
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001257 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001258
1259 case PY_SOURCE:
1260 m = load_source_module(name, buf, fp);
1261 break;
1262
1263 case PY_COMPILED:
1264 m = load_compiled_module(name, buf, fp);
1265 break;
1266
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001267#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001268 case C_EXTENSION:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001269 m = _PyImport_LoadDynamicModule(name, buf, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001270 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001271#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001272
Jack Jansen9c96a921995-02-15 22:57:06 +00001273#ifdef macintosh
1274 case PY_RESOURCE:
1275 m = PyMac_LoadResourceModule(name, buf);
1276 break;
Guido van Rossum0f84a341998-08-06 13:36:01 +00001277 case PY_CODERESOURCE:
1278 m = PyMac_LoadCodeResourceModule(name, buf);
1279 break;
Jack Jansen9c96a921995-02-15 22:57:06 +00001280#endif
1281
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001282 case PKG_DIRECTORY:
1283 m = load_package(name, buf);
1284 break;
1285
1286 case C_BUILTIN:
1287 case PY_FROZEN:
Guido van Rossuma5568d31998-03-05 03:45:08 +00001288 if (buf != NULL && buf[0] != '\0')
1289 name = buf;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001290 if (type == C_BUILTIN)
1291 err = init_builtin(name);
1292 else
1293 err = PyImport_ImportFrozenModule(name);
1294 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001295 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001296 if (err == 0) {
1297 PyErr_Format(PyExc_ImportError,
1298 "Purported %s module %.200s not found",
1299 type == C_BUILTIN ?
1300 "builtin" : "frozen",
1301 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001302 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001303 }
1304 modules = PyImport_GetModuleDict();
1305 m = PyDict_GetItemString(modules, name);
1306 if (m == NULL) {
1307 PyErr_Format(
1308 PyExc_ImportError,
1309 "%s module %.200s not properly initialized",
1310 type == C_BUILTIN ?
1311 "builtin" : "frozen",
1312 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001313 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001314 }
1315 Py_INCREF(m);
1316 break;
1317
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001318 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001319 PyErr_Format(PyExc_ImportError,
1320 "Don't know how to import %.200s (type code %d)",
1321 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001322 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001323
1324 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001325
1326 return m;
1327}
1328
1329
1330/* Initialize a built-in module.
1331 Return 1 for succes, 0 if the module is not found, and -1 with
1332 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001333
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001334static int
1335init_builtin(name)
1336 char *name;
1337{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001338 struct _inittab *p;
1339 PyObject *mod;
1340
1341 if ((mod = _PyImport_FindExtension(name, name)) != NULL)
1342 return 1;
1343
Guido van Rossum771c6c81997-10-31 18:37:24 +00001344 for (p = PyImport_Inittab; p->name != NULL; p++) {
Guido van Rossum25ce5661997-08-02 03:10:38 +00001345 if (strcmp(name, p->name) == 0) {
1346 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001347 PyErr_Format(PyExc_ImportError,
1348 "Cannot re-init internal module %.200s",
1349 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001350 return -1;
1351 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001352 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001353 PySys_WriteStderr("import %s # builtin\n", name);
Guido van Rossum25ce5661997-08-02 03:10:38 +00001354 (*p->initfunc)();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001355 if (PyErr_Occurred())
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001356 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001357 if (_PyImport_FixupExtension(name, name) == NULL)
1358 return -1;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001359 return 1;
1360 }
1361 }
1362 return 0;
1363}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001364
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001365
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001366/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001367
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001368static struct _frozen *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001369find_frozen(name)
1370 char *name;
1371{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001372 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001373
Guido van Rossum79f25d91997-04-29 20:08:16 +00001374 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001375 if (p->name == NULL)
1376 return NULL;
1377 if (strcmp(p->name, name) == 0)
1378 break;
1379 }
1380 return p;
1381}
1382
Guido van Rossum79f25d91997-04-29 20:08:16 +00001383static PyObject *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001384get_frozen_object(name)
1385 char *name;
1386{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001387 struct _frozen *p = find_frozen(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001388 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001389
1390 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001391 PyErr_Format(PyExc_ImportError,
1392 "No such frozen object named %.200s",
1393 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001394 return NULL;
1395 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001396 size = p->size;
1397 if (size < 0)
1398 size = -size;
1399 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001400}
1401
1402/* Initialize a frozen module.
1403 Return 1 for succes, 0 if the module is not found, and -1 with
1404 an exception set if the initialization failed.
1405 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001406
1407int
Guido van Rossum79f25d91997-04-29 20:08:16 +00001408PyImport_ImportFrozenModule(name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001409 char *name;
1410{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001411 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001412 PyObject *co;
1413 PyObject *m;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001414 int ispackage;
1415 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001416
1417 if (p == NULL)
1418 return 0;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001419 size = p->size;
1420 ispackage = (size < 0);
1421 if (ispackage)
1422 size = -size;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001423 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001424 PySys_WriteStderr("import %s # frozen%s\n",
Guido van Rossuma5568d31998-03-05 03:45:08 +00001425 name, ispackage ? " package" : "");
1426 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001427 if (co == NULL)
1428 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001429 if (!PyCode_Check(co)) {
1430 Py_DECREF(co);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001431 PyErr_Format(PyExc_TypeError,
1432 "frozen object %.200s is not a code object",
1433 name);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001434 return -1;
1435 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001436 if (ispackage) {
1437 /* Set __path__ to the package name */
1438 PyObject *d, *s;
1439 int err;
1440 m = PyImport_AddModule(name);
1441 if (m == NULL)
1442 return -1;
1443 d = PyModule_GetDict(m);
1444 s = PyString_InternFromString(name);
1445 if (s == NULL)
1446 return -1;
1447 err = PyDict_SetItemString(d, "__path__", s);
1448 Py_DECREF(s);
1449 if (err != 0)
1450 return err;
1451 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00001452 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum79f25d91997-04-29 20:08:16 +00001453 Py_DECREF(co);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001454 if (m == NULL)
1455 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001456 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001457 return 1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001458}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001459
1460
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001461/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001462 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001463
Guido van Rossum79f25d91997-04-29 20:08:16 +00001464PyObject *
1465PyImport_ImportModule(name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001466 char *name;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001467{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001468 static PyObject *fromlist = NULL;
1469 if (fromlist == NULL && strchr(name, '.') != NULL) {
1470 fromlist = Py_BuildValue("[s]", "*");
1471 if (fromlist == NULL)
1472 return NULL;
1473 }
1474 return PyImport_ImportModuleEx(name, NULL, NULL, fromlist);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001475}
1476
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001477/* Forward declarations for helper routines */
1478static PyObject *get_parent Py_PROTO((PyObject *globals,
1479 char *buf, int *p_buflen));
1480static PyObject *load_next Py_PROTO((PyObject *mod, PyObject *altmod,
1481 char **p_name, char *buf, int *p_buflen));
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001482static int mark_miss Py_PROTO((char *name));
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001483static int ensure_fromlist Py_PROTO((PyObject *mod, PyObject *fromlist,
Guido van Rossum9905ef91997-09-08 16:07:11 +00001484 char *buf, int buflen, int recursive));
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001485static PyObject * import_submodule Py_PROTO((PyObject *mod,
1486 char *name, char *fullname));
1487
1488/* The Magnum Opus of dotted-name import :-) */
1489
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001490static PyObject *
1491import_module_ex(name, globals, locals, fromlist)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001492 char *name;
1493 PyObject *globals;
1494 PyObject *locals;
1495 PyObject *fromlist;
1496{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001497 char buf[MAXPATHLEN+1];
1498 int buflen = 0;
1499 PyObject *parent, *head, *next, *tail;
1500
1501 parent = get_parent(globals, buf, &buflen);
1502 if (parent == NULL)
1503 return NULL;
1504
1505 head = load_next(parent, Py_None, &name, buf, &buflen);
1506 if (head == NULL)
1507 return NULL;
1508
1509 tail = head;
1510 Py_INCREF(tail);
1511 while (name) {
1512 next = load_next(tail, tail, &name, buf, &buflen);
1513 Py_DECREF(tail);
1514 if (next == NULL) {
1515 Py_DECREF(head);
1516 return NULL;
1517 }
1518 tail = next;
1519 }
1520
1521 if (fromlist != NULL) {
1522 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
1523 fromlist = NULL;
1524 }
1525
1526 if (fromlist == NULL) {
1527 Py_DECREF(tail);
1528 return head;
1529 }
1530
1531 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00001532 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001533 Py_DECREF(tail);
1534 return NULL;
1535 }
1536
1537 return tail;
1538}
1539
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001540PyObject *
1541PyImport_ImportModuleEx(name, globals, locals, fromlist)
1542 char *name;
1543 PyObject *globals;
1544 PyObject *locals;
1545 PyObject *fromlist;
1546{
1547 PyObject *result;
1548 lock_import();
Guido van Rossumd65911b1998-03-03 22:33:27 +00001549 result = import_module_ex(name, globals, locals, fromlist);
Guido van Rossum75acc9c1998-03-03 22:26:50 +00001550 unlock_import();
1551 return result;
1552}
1553
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001554static PyObject *
1555get_parent(globals, buf, p_buflen)
1556 PyObject *globals;
1557 char *buf;
1558 int *p_buflen;
1559{
1560 static PyObject *namestr = NULL;
1561 static PyObject *pathstr = NULL;
1562 PyObject *modname, *modpath, *modules, *parent;
1563
1564 if (globals == NULL || !PyDict_Check(globals))
1565 return Py_None;
1566
1567 if (namestr == NULL) {
1568 namestr = PyString_InternFromString("__name__");
1569 if (namestr == NULL)
1570 return NULL;
1571 }
1572 if (pathstr == NULL) {
1573 pathstr = PyString_InternFromString("__path__");
1574 if (pathstr == NULL)
1575 return NULL;
1576 }
1577
1578 *buf = '\0';
1579 *p_buflen = 0;
1580 modname = PyDict_GetItem(globals, namestr);
1581 if (modname == NULL || !PyString_Check(modname))
1582 return Py_None;
1583
1584 modpath = PyDict_GetItem(globals, pathstr);
1585 if (modpath != NULL) {
1586 int len = PyString_GET_SIZE(modname);
1587 if (len > MAXPATHLEN) {
1588 PyErr_SetString(PyExc_ValueError,
1589 "Module name too long");
1590 return NULL;
1591 }
1592 strcpy(buf, PyString_AS_STRING(modname));
1593 *p_buflen = len;
1594 }
1595 else {
1596 char *start = PyString_AS_STRING(modname);
1597 char *lastdot = strrchr(start, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00001598 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001599 if (lastdot == NULL)
1600 return Py_None;
1601 len = lastdot - start;
1602 if (len >= MAXPATHLEN) {
1603 PyErr_SetString(PyExc_ValueError,
1604 "Module name too long");
1605 return NULL;
1606 }
1607 strncpy(buf, start, len);
1608 buf[len] = '\0';
1609 *p_buflen = len;
1610 }
1611
1612 modules = PyImport_GetModuleDict();
1613 parent = PyDict_GetItemString(modules, buf);
1614 if (parent == NULL)
1615 parent = Py_None;
1616 return parent;
1617 /* We expect, but can't guarantee, if parent != None, that:
1618 - parent.__name__ == buf
1619 - parent.__dict__ is globals
1620 If this is violated... Who cares? */
1621}
1622
1623static PyObject *
1624load_next(mod, altmod, p_name, buf, p_buflen)
1625 PyObject *mod;
1626 PyObject *altmod; /* Either None or same as mod */
1627 char **p_name;
1628 char *buf;
1629 int *p_buflen;
1630{
1631 char *name = *p_name;
1632 char *dot = strchr(name, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00001633 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001634 char *p;
1635 PyObject *result;
1636
1637 if (dot == NULL) {
1638 *p_name = NULL;
1639 len = strlen(name);
1640 }
1641 else {
1642 *p_name = dot+1;
1643 len = dot-name;
1644 }
Guido van Rossum111c20b1998-04-11 17:38:22 +00001645 if (len == 0) {
1646 PyErr_SetString(PyExc_ValueError,
1647 "Empty module name");
1648 return NULL;
1649 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001650
1651 p = buf + *p_buflen;
1652 if (p != buf)
1653 *p++ = '.';
1654 if (p+len-buf >= MAXPATHLEN) {
1655 PyErr_SetString(PyExc_ValueError,
1656 "Module name too long");
1657 return NULL;
1658 }
1659 strncpy(p, name, len);
1660 p[len] = '\0';
1661 *p_buflen = p+len-buf;
1662
1663 result = import_submodule(mod, p, buf);
1664 if (result == Py_None && altmod != mod) {
1665 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001666 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00001667 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001668 if (result != NULL && result != Py_None) {
1669 if (mark_miss(buf) != 0) {
1670 Py_DECREF(result);
1671 return NULL;
1672 }
1673 strncpy(buf, name, len);
1674 buf[len] = '\0';
1675 *p_buflen = len;
1676 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001677 }
1678 if (result == NULL)
1679 return NULL;
1680
1681 if (result == Py_None) {
1682 Py_DECREF(result);
1683 PyErr_Format(PyExc_ImportError,
1684 "No module named %.200s", name);
1685 return NULL;
1686 }
1687
1688 return result;
1689}
1690
1691static int
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00001692mark_miss(name)
1693 char *name;
1694{
1695 PyObject *modules = PyImport_GetModuleDict();
1696 return PyDict_SetItemString(modules, name, Py_None);
1697}
1698
1699static int
Guido van Rossum9905ef91997-09-08 16:07:11 +00001700ensure_fromlist(mod, fromlist, buf, buflen, recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001701 PyObject *mod;
1702 PyObject *fromlist;
1703 char *buf;
1704 int buflen;
Guido van Rossum9905ef91997-09-08 16:07:11 +00001705 int recursive;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001706{
1707 int i;
1708
1709 if (!PyObject_HasAttrString(mod, "__path__"))
1710 return 1;
1711
1712 for (i = 0; ; i++) {
1713 PyObject *item = PySequence_GetItem(fromlist, i);
1714 int hasit;
1715 if (item == NULL) {
1716 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
1717 PyErr_Clear();
1718 return 1;
1719 }
1720 return 0;
1721 }
1722 if (!PyString_Check(item)) {
1723 PyErr_SetString(PyExc_TypeError,
1724 "Item in ``from list'' not a string");
1725 Py_DECREF(item);
1726 return 0;
1727 }
1728 if (PyString_AS_STRING(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00001729 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001730 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00001731 /* See if the package defines __all__ */
1732 if (recursive)
1733 continue; /* Avoid endless recursion */
1734 all = PyObject_GetAttrString(mod, "__all__");
1735 if (all == NULL)
1736 PyErr_Clear();
1737 else {
1738 if (!ensure_fromlist(mod, all, buf, buflen, 1))
1739 return 0;
1740 Py_DECREF(all);
1741 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001742 continue;
1743 }
1744 hasit = PyObject_HasAttr(mod, item);
1745 if (!hasit) {
1746 char *subname = PyString_AS_STRING(item);
1747 PyObject *submod;
1748 char *p;
1749 if (buflen + strlen(subname) >= MAXPATHLEN) {
1750 PyErr_SetString(PyExc_ValueError,
1751 "Module name too long");
1752 Py_DECREF(item);
1753 return 0;
1754 }
1755 p = buf + buflen;
1756 *p++ = '.';
1757 strcpy(p, subname);
1758 submod = import_submodule(mod, subname, buf);
1759 Py_XDECREF(submod);
1760 if (submod == NULL) {
1761 Py_DECREF(item);
1762 return 0;
1763 }
1764 }
1765 Py_DECREF(item);
1766 }
1767
Guido van Rossuma7f2e811997-10-03 15:33:32 +00001768 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001769}
1770
1771static PyObject *
1772import_submodule(mod, subname, fullname)
1773 PyObject *mod; /* May be None */
1774 char *subname;
1775 char *fullname;
1776{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001777 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +00001778 PyObject *m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001779
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001780 /* Require:
1781 if mod == None: subname == fullname
1782 else: mod.__name__ + "." + subname == fullname
1783 */
1784
1785 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001786 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001787 }
1788 else {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001789 PyObject *path;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001790 char buf[MAXPATHLEN+1];
1791 struct filedescr *fdp;
1792 FILE *fp = NULL;
1793
Guido van Rossum9c0afe51998-05-19 15:09:05 +00001794 if (mod == Py_None)
1795 path = NULL;
1796 else {
1797 path = PyObject_GetAttrString(mod, "__path__");
1798 if (path == NULL) {
1799 PyErr_Clear();
1800 Py_INCREF(Py_None);
1801 return Py_None;
1802 }
1803 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001804
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001805 buf[0] = '\0';
Guido van Rossumb68cd421998-07-01 17:36:26 +00001806 fdp = find_module(subname, path, buf, MAXPATHLEN+1, &fp);
1807 Py_XDECREF(path);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001808 if (fdp == NULL) {
1809 if (!PyErr_ExceptionMatches(PyExc_ImportError))
1810 return NULL;
1811 PyErr_Clear();
1812 Py_INCREF(Py_None);
1813 return Py_None;
1814 }
1815 m = load_module(fullname, fp, buf, fdp->type);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001816 if (fp)
1817 fclose(fp);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001818 if (m != NULL && mod != Py_None) {
1819 if (PyObject_SetAttrString(mod, subname, m) < 0) {
1820 Py_DECREF(m);
1821 m = NULL;
1822 }
1823 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00001824 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001825
1826 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00001827}
1828
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001829
1830/* Re-import a module of any kind and return its module object, WITH
1831 INCREMENTED REFERENCE COUNT */
1832
Guido van Rossum79f25d91997-04-29 20:08:16 +00001833PyObject *
1834PyImport_ReloadModule(m)
1835 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001836{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001837 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum222ef561997-09-06 19:41:09 +00001838 PyObject *path = NULL;
1839 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001840 char buf[MAXPATHLEN+1];
1841 struct filedescr *fdp;
1842 FILE *fp = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001843
Guido van Rossum79f25d91997-04-29 20:08:16 +00001844 if (m == NULL || !PyModule_Check(m)) {
1845 PyErr_SetString(PyExc_TypeError,
1846 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001847 return NULL;
1848 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001849 name = PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001850 if (name == NULL)
1851 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001852 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001853 PyErr_Format(PyExc_ImportError,
1854 "reload(): module %.200s not in sys.modules",
1855 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001856 return NULL;
1857 }
Guido van Rossum222ef561997-09-06 19:41:09 +00001858 subname = strrchr(name, '.');
1859 if (subname == NULL)
1860 subname = name;
1861 else {
1862 PyObject *parentname, *parent;
1863 parentname = PyString_FromStringAndSize(name, (subname-name));
1864 if (parentname == NULL)
1865 return NULL;
1866 parent = PyDict_GetItem(modules, parentname);
Barry Warsaw38793331999-01-27 17:54:20 +00001867 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00001868 if (parent == NULL) {
1869 PyErr_Format(PyExc_ImportError,
1870 "reload(): parent %.200s not in sys.modules",
1871 name);
1872 return NULL;
1873 }
1874 subname++;
1875 path = PyObject_GetAttrString(parent, "__path__");
1876 if (path == NULL)
1877 PyErr_Clear();
1878 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001879 buf[0] = '\0';
Guido van Rossum222ef561997-09-06 19:41:09 +00001880 fdp = find_module(subname, path, buf, MAXPATHLEN+1, &fp);
1881 Py_XDECREF(path);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001882 if (fdp == NULL)
1883 return NULL;
1884 m = load_module(name, fp, buf, fdp->type);
1885 if (fp)
1886 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001887 return m;
1888}
1889
1890
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001891/* Higher-level import emulator which emulates the "import" statement
1892 more accurately -- it invokes the __import__() function from the
1893 builtins of the current globals. This means that the import is
1894 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00001895 environment, e.g. by "rexec".
1896 A dummy list ["__doc__"] is passed as the 4th argument so that
1897 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
1898 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001899
1900PyObject *
1901PyImport_Import(module_name)
1902 PyObject *module_name;
1903{
1904 static PyObject *silly_list = NULL;
1905 static PyObject *builtins_str = NULL;
1906 static PyObject *import_str = NULL;
1907 static PyObject *standard_builtins = NULL;
1908 PyObject *globals = NULL;
1909 PyObject *import = NULL;
1910 PyObject *builtins = NULL;
1911 PyObject *r = NULL;
1912
1913 /* Initialize constant string objects */
1914 if (silly_list == NULL) {
1915 import_str = PyString_InternFromString("__import__");
1916 if (import_str == NULL)
1917 return NULL;
1918 builtins_str = PyString_InternFromString("__builtins__");
1919 if (builtins_str == NULL)
1920 return NULL;
1921 silly_list = Py_BuildValue("[s]", "__doc__");
1922 if (silly_list == NULL)
1923 return NULL;
1924 }
1925
1926 /* Get the builtins from current globals */
1927 globals = PyEval_GetGlobals();
1928 if(globals != NULL) {
Guido van Rossum66468561998-10-22 15:46:50 +00001929 Py_INCREF(globals);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00001930 builtins = PyObject_GetItem(globals, builtins_str);
1931 if (builtins == NULL)
1932 goto err;
1933 }
1934 else {
1935 /* No globals -- use standard builtins, and fake globals */
1936 PyErr_Clear();
1937
1938 if (standard_builtins == NULL) {
1939 standard_builtins =
1940 PyImport_ImportModule("__builtin__");
1941 if (standard_builtins == NULL)
1942 return NULL;
1943 }
1944
1945 builtins = standard_builtins;
1946 Py_INCREF(builtins);
1947 globals = Py_BuildValue("{OO}", builtins_str, builtins);
1948 if (globals == NULL)
1949 goto err;
1950 }
1951
1952 /* Get the __import__ function from the builtins */
1953 if (PyDict_Check(builtins))
1954 import=PyObject_GetItem(builtins, import_str);
1955 else
1956 import=PyObject_GetAttr(builtins, import_str);
1957 if (import == NULL)
1958 goto err;
1959
1960 /* Call the _import__ function with the proper argument list */
1961 r = PyObject_CallFunction(import, "OOOO",
1962 module_name, globals, globals, silly_list);
1963
1964 err:
1965 Py_XDECREF(globals);
1966 Py_XDECREF(builtins);
1967 Py_XDECREF(import);
1968
1969 return r;
1970}
1971
1972
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001973/* Module 'imp' provides Python access to the primitives used for
1974 importing modules.
1975*/
1976
Guido van Rossum79f25d91997-04-29 20:08:16 +00001977static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001978imp_get_magic(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001979 PyObject *self;
1980 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001981{
1982 char buf[4];
1983
Guido van Rossum43713e52000-02-29 13:59:29 +00001984 if (!PyArg_ParseTuple(args, ":get_magic"))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001985 return NULL;
Guido van Rossum96774c12000-05-01 20:19:08 +00001986 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
1987 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
1988 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
1989 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001990
Guido van Rossum79f25d91997-04-29 20:08:16 +00001991 return PyString_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001992}
1993
Guido van Rossum79f25d91997-04-29 20:08:16 +00001994static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001995imp_get_suffixes(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00001996 PyObject *self;
1997 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001998{
Guido van Rossum79f25d91997-04-29 20:08:16 +00001999 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002000 struct filedescr *fdp;
2001
Guido van Rossum43713e52000-02-29 13:59:29 +00002002 if (!PyArg_ParseTuple(args, ":get_suffixes"))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002003 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002004 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002005 if (list == NULL)
2006 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002007 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2008 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002009 fdp->suffix, fdp->mode, fdp->type);
2010 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002011 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002012 return NULL;
2013 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002014 if (PyList_Append(list, item) < 0) {
2015 Py_DECREF(list);
2016 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002017 return NULL;
2018 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002019 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002020 }
2021 return list;
2022}
2023
Guido van Rossum79f25d91997-04-29 20:08:16 +00002024static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002025call_find_module(name, path)
2026 char *name;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002027 PyObject *path; /* list or None or NULL */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002028{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002029 extern int fclose Py_PROTO((FILE *));
Guido van Rossum79f25d91997-04-29 20:08:16 +00002030 PyObject *fob, *ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002031 struct filedescr *fdp;
2032 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002033 FILE *fp = NULL;
2034
2035 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002036 if (path == Py_None)
2037 path = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002038 fdp = find_module(name, path, pathname, MAXPATHLEN+1, &fp);
2039 if (fdp == NULL)
2040 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002041 if (fp != NULL) {
2042 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
2043 if (fob == NULL) {
2044 fclose(fp);
2045 return NULL;
2046 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002047 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002048 else {
2049 fob = Py_None;
2050 Py_INCREF(fob);
2051 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002052 ret = Py_BuildValue("Os(ssi)",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002053 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002054 Py_DECREF(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002055 return ret;
2056}
2057
Guido van Rossum79f25d91997-04-29 20:08:16 +00002058static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002059imp_find_module(self, args)
2060 PyObject *self;
2061 PyObject *args;
2062{
2063 char *name;
2064 PyObject *path = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002065 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002066 return NULL;
2067 return call_find_module(name, path);
2068}
2069
2070static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002071imp_init_builtin(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_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002079 return NULL;
2080 ret = init_builtin(name);
2081 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 Rossum1ae940a1995-01-02 19:04:15 +00002093imp_init_frozen(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002094 PyObject *self;
2095 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002096{
2097 char *name;
2098 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002099 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002100 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002101 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002102 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002103 if (ret < 0)
2104 return NULL;
2105 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002106 Py_INCREF(Py_None);
2107 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002108 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002109 m = PyImport_AddModule(name);
2110 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002111 return m;
2112}
2113
Guido van Rossum79f25d91997-04-29 20:08:16 +00002114static PyObject *
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002115imp_get_frozen_object(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002116 PyObject *self;
2117 PyObject *args;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002118{
2119 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002120
Guido van Rossum43713e52000-02-29 13:59:29 +00002121 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002122 return NULL;
2123 return get_frozen_object(name);
2124}
2125
Guido van Rossum79f25d91997-04-29 20:08:16 +00002126static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002127imp_is_builtin(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002128 PyObject *self;
2129 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002130{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002131 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002132 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002133 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002134 return PyInt_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002135}
2136
Guido van Rossum79f25d91997-04-29 20:08:16 +00002137static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002138imp_is_frozen(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002139 PyObject *self;
2140 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002141{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002142 char *name;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002143 struct _frozen *p;
Guido van Rossum43713e52000-02-29 13:59:29 +00002144 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002145 return NULL;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002146 p = find_frozen(name);
2147 return PyInt_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002148}
2149
2150static FILE *
2151get_file(pathname, fob, mode)
2152 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002153 PyObject *fob;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002154 char *mode;
2155{
2156 FILE *fp;
2157 if (fob == NULL) {
2158 fp = fopen(pathname, mode);
2159 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002160 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002161 }
2162 else {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002163 fp = PyFile_AsFile(fob);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002164 if (fp == NULL)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002165 PyErr_SetString(PyExc_ValueError,
2166 "bad/closed file object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002167 }
2168 return fp;
2169}
2170
Guido van Rossum79f25d91997-04-29 20:08:16 +00002171static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002172imp_load_compiled(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002173 PyObject *self;
2174 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002175{
2176 char *name;
2177 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002178 PyObject *fob = NULL;
2179 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002180 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002181 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002182 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002183 return NULL;
2184 fp = get_file(pathname, fob, "rb");
2185 if (fp == NULL)
2186 return NULL;
2187 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002188 if (fob == NULL)
2189 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002190 return m;
2191}
2192
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002193#ifdef HAVE_DYNAMIC_LOADING
2194
Guido van Rossum79f25d91997-04-29 20:08:16 +00002195static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002196imp_load_dynamic(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002197 PyObject *self;
2198 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002199{
2200 char *name;
2201 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002202 PyObject *fob = NULL;
2203 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00002204 FILE *fp = NULL;
Guido van Rossum43713e52000-02-29 13:59:29 +00002205 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002206 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002207 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002208 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00002209 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002210 if (fp == NULL)
2211 return NULL;
2212 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002213 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00002214 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002215}
2216
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002217#endif /* HAVE_DYNAMIC_LOADING */
2218
Guido van Rossum79f25d91997-04-29 20:08:16 +00002219static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002220imp_load_source(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002221 PyObject *self;
2222 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002223{
2224 char *name;
2225 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002226 PyObject *fob = NULL;
2227 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002228 FILE *fp;
Guido van Rossum43713e52000-02-29 13:59:29 +00002229 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
Guido van Rossum79f25d91997-04-29 20:08:16 +00002230 &PyFile_Type, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002231 return NULL;
2232 fp = get_file(pathname, fob, "r");
2233 if (fp == NULL)
2234 return NULL;
2235 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002236 if (fob == NULL)
2237 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002238 return m;
2239}
2240
Jack Jansen9c96a921995-02-15 22:57:06 +00002241#ifdef macintosh
Guido van Rossum79f25d91997-04-29 20:08:16 +00002242static PyObject *
Jack Jansen9c96a921995-02-15 22:57:06 +00002243imp_load_resource(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002244 PyObject *self;
2245 PyObject *args;
Jack Jansen9c96a921995-02-15 22:57:06 +00002246{
2247 char *name;
2248 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002249 PyObject *m;
Jack Jansen9c96a921995-02-15 22:57:06 +00002250
Guido van Rossum43713e52000-02-29 13:59:29 +00002251 if (!PyArg_ParseTuple(args, "ss:load_resource", &name, &pathname))
Jack Jansen9c96a921995-02-15 22:57:06 +00002252 return NULL;
2253 m = PyMac_LoadResourceModule(name, pathname);
2254 return m;
2255}
2256#endif /* macintosh */
2257
Guido van Rossum79f25d91997-04-29 20:08:16 +00002258static PyObject *
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002259imp_load_module(self, args)
2260 PyObject *self;
2261 PyObject *args;
2262{
2263 char *name;
2264 PyObject *fob;
2265 char *pathname;
2266 char *suffix; /* Unused */
2267 char *mode;
2268 int type;
2269 FILE *fp;
2270
Guido van Rossum43713e52000-02-29 13:59:29 +00002271 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002272 &name, &fob, &pathname,
2273 &suffix, &mode, &type))
2274 return NULL;
2275 if (*mode && (*mode != 'r' || strchr(mode, '+') != NULL)) {
2276 PyErr_Format(PyExc_ValueError,
2277 "invalid file open mode %.200s", mode);
2278 return NULL;
2279 }
2280 if (fob == Py_None)
2281 fp = NULL;
2282 else {
2283 if (!PyFile_Check(fob)) {
2284 PyErr_SetString(PyExc_ValueError,
2285 "load_module arg#2 should be a file or None");
2286 return NULL;
2287 }
2288 fp = get_file(pathname, fob, mode);
2289 if (fp == NULL)
2290 return NULL;
2291 }
2292 return load_module(name, fp, pathname, type);
2293}
2294
2295static PyObject *
2296imp_load_package(self, args)
2297 PyObject *self;
2298 PyObject *args;
2299{
2300 char *name;
2301 char *pathname;
Guido van Rossum43713e52000-02-29 13:59:29 +00002302 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002303 return NULL;
2304 return load_package(name, pathname);
2305}
2306
2307static PyObject *
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002308imp_new_module(self, args)
Guido van Rossum79f25d91997-04-29 20:08:16 +00002309 PyObject *self;
2310 PyObject *args;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002311{
2312 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002313 if (!PyArg_ParseTuple(args, "s:new_module", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002314 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002315 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002316}
2317
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002318/* Doc strings */
2319
2320static char doc_imp[] = "\
2321This module provides the components needed to build your own\n\
2322__import__ function. Undocumented functions are obsolete.\n\
2323";
2324
2325static char doc_find_module[] = "\
2326find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
2327Search for a module. If path is omitted or None, search for a\n\
2328built-in, frozen or special module and continue search in sys.path.\n\
2329The module name cannot contain '.'; to search for a submodule of a\n\
2330package, pass the submodule name and the package's __path__.\
2331";
2332
2333static char doc_load_module[] = "\
2334load_module(name, file, filename, (suffix, mode, type)) -> module\n\
2335Load a module, given information returned by find_module().\n\
2336The module name must include the full package name, if any.\
2337";
2338
2339static char doc_get_magic[] = "\
2340get_magic() -> string\n\
2341Return the magic number for .pyc or .pyo files.\
2342";
2343
2344static char doc_get_suffixes[] = "\
2345get_suffixes() -> [(suffix, mode, type), ...]\n\
2346Return a list of (suffix, mode, type) tuples describing the files\n\
2347that find_module() looks for.\
2348";
2349
2350static char doc_new_module[] = "\
2351new_module(name) -> module\n\
2352Create a new module. Do not enter it in sys.modules.\n\
2353The module name must include the full package name, if any.\
2354";
2355
Guido van Rossum79f25d91997-04-29 20:08:16 +00002356static PyMethodDef imp_methods[] = {
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002357 {"find_module", imp_find_module, 1, doc_find_module},
2358 {"get_magic", imp_get_magic, 1, doc_get_magic},
2359 {"get_suffixes", imp_get_suffixes, 1, doc_get_suffixes},
2360 {"load_module", imp_load_module, 1, doc_load_module},
2361 {"new_module", imp_new_module, 1, doc_new_module},
2362 /* The rest are obsolete */
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002363 {"get_frozen_object", imp_get_frozen_object, 1},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002364 {"init_builtin", imp_init_builtin, 1},
2365 {"init_frozen", imp_init_frozen, 1},
2366 {"is_builtin", imp_is_builtin, 1},
2367 {"is_frozen", imp_is_frozen, 1},
2368 {"load_compiled", imp_load_compiled, 1},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002369#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002370 {"load_dynamic", imp_load_dynamic, 1},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002371#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002372 {"load_package", imp_load_package, 1},
Jack Jansen9c96a921995-02-15 22:57:06 +00002373#ifdef macintosh
2374 {"load_resource", imp_load_resource, 1},
2375#endif
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002376 {"load_source", imp_load_source, 1},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002377 {NULL, NULL} /* sentinel */
2378};
2379
Guido van Rossum1a8791e1998-08-04 22:46:29 +00002380static int
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002381setint(d, name, value)
2382 PyObject *d;
2383 char *name;
2384 int value;
2385{
2386 PyObject *v;
2387 int err;
2388
2389 v = PyInt_FromLong((long)value);
2390 err = PyDict_SetItemString(d, name, v);
2391 Py_XDECREF(v);
2392 return err;
2393}
2394
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002395void
2396initimp()
2397{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002398 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002399
Guido van Rossum0207e6d1997-09-09 22:04:42 +00002400 m = Py_InitModule4("imp", imp_methods, doc_imp,
2401 NULL, PYTHON_API_VERSION);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002402 d = PyModule_GetDict(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002403
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002404 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
2405 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
2406 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
2407 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
2408 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
2409 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
2410 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
2411 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum0f84a341998-08-06 13:36:01 +00002412 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002413
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002414 failure:
2415 ;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002416}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002417
2418
Guido van Rossumb18618d2000-05-03 23:44:39 +00002419/* API for embedding applications that want to add their own entries
2420 to the table of built-in modules. This should normally be called
2421 *before* Py_Initialize(). When the table resize fails, -1 is
2422 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002423
2424 After a similar function by Just van Rossum. */
2425
2426int
2427PyImport_ExtendInittab(newtab)
2428 struct _inittab *newtab;
2429{
2430 static struct _inittab *our_copy = NULL;
2431 struct _inittab *p;
2432 int i, n;
2433
2434 /* Count the number of entries in both tables */
2435 for (n = 0; newtab[n].name != NULL; n++)
2436 ;
2437 if (n == 0)
2438 return 0; /* Nothing to do */
2439 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
2440 ;
2441
2442 /* Allocate new memory for the combined table */
Guido van Rossumb18618d2000-05-03 23:44:39 +00002443 p = our_copy;
2444 PyMem_RESIZE(p, struct _inittab, i+n+1);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00002445 if (p == NULL)
2446 return -1;
2447
2448 /* Copy the tables into the new memory */
2449 if (our_copy != PyImport_Inittab)
2450 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
2451 PyImport_Inittab = our_copy = p;
2452 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
2453
2454 return 0;
2455}
2456
2457/* Shorthand to add a single entry given a name and a function */
2458
2459int
2460PyImport_AppendInittab(name, initfunc)
2461 char *name;
2462 void (*initfunc)();
2463{
2464 struct _inittab newtab[2];
2465
2466 memset(newtab, '\0', sizeof newtab);
2467
2468 newtab[0].name = name;
2469 newtab[0].initfunc = initfunc;
2470
2471 return PyImport_ExtendInittab(newtab);
2472}