move sections
[python/dscho.git] / Python / import.c
blob990ee51311e9cd1949770177442368ef8543ad2e
2 /* Module definition and import implementation */
4 #include "Python.h"
6 #include "Python-ast.h"
7 #undef Yield /* undefine macro conflicting with winbase.h */
8 #include "pyarena.h"
9 #include "pythonrun.h"
10 #include "errcode.h"
11 #include "marshal.h"
12 #include "code.h"
13 #include "compile.h"
14 #include "eval.h"
15 #include "osdefs.h"
16 #include "importdl.h"
18 #ifdef HAVE_FCNTL_H
19 #include <fcntl.h>
20 #endif
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
25 #ifdef MS_WINDOWS
26 /* for stat.st_mode */
27 typedef unsigned short mode_t;
28 #endif
31 /* Magic word to reject .pyc files generated by other Python versions.
32 It should change for each incompatible change to the bytecode.
34 The value of CR and LF is incorporated so if you ever read or write
35 a .pyc file in text mode the magic number will be wrong; also, the
36 Apple MPW compiler swaps their values, botching string constants.
38 The magic numbers must be spaced apart atleast 2 values, as the
39 -U interpeter flag will cause MAGIC+1 being used. They have been
40 odd numbers for some time now.
42 There were a variety of old schemes for setting the magic number.
43 The current working scheme is to increment the previous value by
44 10.
46 Known values:
47 Python 1.5: 20121
48 Python 1.5.1: 20121
49 Python 1.5.2: 20121
50 Python 1.6: 50428
51 Python 2.0: 50823
52 Python 2.0.1: 50823
53 Python 2.1: 60202
54 Python 2.1.1: 60202
55 Python 2.1.2: 60202
56 Python 2.2: 60717
57 Python 2.3a0: 62011
58 Python 2.3a0: 62021
59 Python 2.3a0: 62011 (!)
60 Python 2.4a0: 62041
61 Python 2.4a3: 62051
62 Python 2.4b1: 62061
63 Python 2.5a0: 62071
64 Python 2.5a0: 62081 (ast-branch)
65 Python 2.5a0: 62091 (with)
66 Python 2.5a0: 62092 (changed WITH_CLEANUP opcode)
67 Python 2.5b3: 62101 (fix wrong code: for x, in ...)
68 Python 2.5b3: 62111 (fix wrong code: x += yield)
69 Python 2.5c1: 62121 (fix wrong lnotab with for loops and
70 storing constants that should have been removed)
71 Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp)
72 Python 2.6a0: 62151 (peephole optimizations and STORE_MAP opcode)
73 Python 2.6a1: 62161 (WITH_CLEANUP optimization)
74 Python 2.7a0: 62171 (optimize list comprehensions/change LIST_APPEND)
75 Python 2.7a0: 62181 (optimize conditional branches:
76 introduce POP_JUMP_IF_FALSE and POP_JUMP_IF_TRUE)
77 Python 2.7a0 62191 (introduce SETUP_WITH)
78 Python 2.7a0 62201 (introduce BUILD_SET)
79 Python 2.7a0 62211 (introduce MAP_ADD and SET_ADD)
82 #define MAGIC (62211 | ((long)'\r'<<16) | ((long)'\n'<<24))
84 /* Magic word as global; note that _PyImport_Init() can change the
85 value of this global to accommodate for alterations of how the
86 compiler works which are enabled by command line switches. */
87 static long pyc_magic = MAGIC;
89 /* See _PyImport_FixupExtension() below */
90 static PyObject *extensions = NULL;
92 /* This table is defined in config.c: */
93 extern struct _inittab _PyImport_Inittab[];
95 struct _inittab *PyImport_Inittab = _PyImport_Inittab;
97 /* these tables define the module suffixes that Python recognizes */
98 struct filedescr * _PyImport_Filetab = NULL;
100 #ifdef RISCOS
101 static const struct filedescr _PyImport_StandardFiletab[] = {
102 {"/py", "U", PY_SOURCE},
103 {"/pyc", "rb", PY_COMPILED},
104 {0, 0}
106 #else
107 static const struct filedescr _PyImport_StandardFiletab[] = {
108 {".py", "U", PY_SOURCE},
109 #ifdef MS_WINDOWS
110 {".pyw", "U", PY_SOURCE},
111 #endif
112 {".pyc", "rb", PY_COMPILED},
113 {0, 0}
115 #endif
118 /* Initialize things */
120 void
121 _PyImport_Init(void)
123 const struct filedescr *scan;
124 struct filedescr *filetab;
125 int countD = 0;
126 int countS = 0;
128 /* prepare _PyImport_Filetab: copy entries from
129 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
131 #ifdef HAVE_DYNAMIC_LOADING
132 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
133 ++countD;
134 #endif
135 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
136 ++countS;
137 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
138 if (filetab == NULL)
139 Py_FatalError("Can't initialize import file table.");
140 #ifdef HAVE_DYNAMIC_LOADING
141 memcpy(filetab, _PyImport_DynLoadFiletab,
142 countD * sizeof(struct filedescr));
143 #endif
144 memcpy(filetab + countD, _PyImport_StandardFiletab,
145 countS * sizeof(struct filedescr));
146 filetab[countD + countS].suffix = NULL;
148 _PyImport_Filetab = filetab;
150 if (Py_OptimizeFlag) {
151 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
152 for (; filetab->suffix != NULL; filetab++) {
153 #ifndef RISCOS
154 if (strcmp(filetab->suffix, ".pyc") == 0)
155 filetab->suffix = ".pyo";
156 #else
157 if (strcmp(filetab->suffix, "/pyc") == 0)
158 filetab->suffix = "/pyo";
159 #endif
163 if (Py_UnicodeFlag) {
164 /* Fix the pyc_magic so that byte compiled code created
165 using the all-Unicode method doesn't interfere with
166 code created in normal operation mode. */
167 pyc_magic = MAGIC + 1;
171 void
172 _PyImportHooks_Init(void)
174 PyObject *v, *path_hooks = NULL, *zimpimport;
175 int err = 0;
177 /* adding sys.path_hooks and sys.path_importer_cache, setting up
178 zipimport */
179 if (PyType_Ready(&PyNullImporter_Type) < 0)
180 goto error;
182 if (Py_VerboseFlag)
183 PySys_WriteStderr("# installing zipimport hook\n");
185 v = PyList_New(0);
186 if (v == NULL)
187 goto error;
188 err = PySys_SetObject("meta_path", v);
189 Py_DECREF(v);
190 if (err)
191 goto error;
192 v = PyDict_New();
193 if (v == NULL)
194 goto error;
195 err = PySys_SetObject("path_importer_cache", v);
196 Py_DECREF(v);
197 if (err)
198 goto error;
199 path_hooks = PyList_New(0);
200 if (path_hooks == NULL)
201 goto error;
202 err = PySys_SetObject("path_hooks", path_hooks);
203 if (err) {
204 error:
205 PyErr_Print();
206 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
207 "path_importer_cache, or NullImporter failed"
211 zimpimport = PyImport_ImportModule("zipimport");
212 if (zimpimport == NULL) {
213 PyErr_Clear(); /* No zip import module -- okay */
214 if (Py_VerboseFlag)
215 PySys_WriteStderr("# can't import zipimport\n");
217 else {
218 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
219 "zipimporter");
220 Py_DECREF(zimpimport);
221 if (zipimporter == NULL) {
222 PyErr_Clear(); /* No zipimporter object -- okay */
223 if (Py_VerboseFlag)
224 PySys_WriteStderr(
225 "# can't import zipimport.zipimporter\n");
227 else {
228 /* sys.path_hooks.append(zipimporter) */
229 err = PyList_Append(path_hooks, zipimporter);
230 Py_DECREF(zipimporter);
231 if (err)
232 goto error;
233 if (Py_VerboseFlag)
234 PySys_WriteStderr(
235 "# installed zipimport hook\n");
238 Py_DECREF(path_hooks);
241 void
242 _PyImport_Fini(void)
244 Py_XDECREF(extensions);
245 extensions = NULL;
246 PyMem_DEL(_PyImport_Filetab);
247 _PyImport_Filetab = NULL;
251 /* Locking primitives to prevent parallel imports of the same module
252 in different threads to return with a partially loaded module.
253 These calls are serialized by the global interpreter lock. */
255 #ifdef WITH_THREAD
257 #include "pythread.h"
259 static PyThread_type_lock import_lock = 0;
260 static long import_lock_thread = -1;
261 static int import_lock_level = 0;
263 void
264 _PyImport_AcquireLock(void)
266 long me = PyThread_get_thread_ident();
267 if (me == -1)
268 return; /* Too bad */
269 if (import_lock == NULL) {
270 import_lock = PyThread_allocate_lock();
271 if (import_lock == NULL)
272 return; /* Nothing much we can do. */
274 if (import_lock_thread == me) {
275 import_lock_level++;
276 return;
278 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
280 PyThreadState *tstate = PyEval_SaveThread();
281 PyThread_acquire_lock(import_lock, 1);
282 PyEval_RestoreThread(tstate);
284 import_lock_thread = me;
285 import_lock_level = 1;
289 _PyImport_ReleaseLock(void)
291 long me = PyThread_get_thread_ident();
292 if (me == -1 || import_lock == NULL)
293 return 0; /* Too bad */
294 if (import_lock_thread != me)
295 return -1;
296 import_lock_level--;
297 if (import_lock_level == 0) {
298 import_lock_thread = -1;
299 PyThread_release_lock(import_lock);
301 return 1;
304 /* This function is called from PyOS_AfterFork to ensure that newly
305 created child processes do not share locks with the parent.
306 We now acquire the import lock around fork() calls but on some platforms
307 (Solaris 9 and earlier? see isue7242) that still left us with problems. */
309 void
310 _PyImport_ReInitLock(void)
312 if (import_lock != NULL)
313 import_lock = PyThread_allocate_lock();
314 import_lock_thread = -1;
315 import_lock_level = 0;
318 #endif
320 static PyObject *
321 imp_lock_held(PyObject *self, PyObject *noargs)
323 #ifdef WITH_THREAD
324 return PyBool_FromLong(import_lock_thread != -1);
325 #else
326 return PyBool_FromLong(0);
327 #endif
330 static PyObject *
331 imp_acquire_lock(PyObject *self, PyObject *noargs)
333 #ifdef WITH_THREAD
334 _PyImport_AcquireLock();
335 #endif
336 Py_INCREF(Py_None);
337 return Py_None;
340 static PyObject *
341 imp_release_lock(PyObject *self, PyObject *noargs)
343 #ifdef WITH_THREAD
344 if (_PyImport_ReleaseLock() < 0) {
345 PyErr_SetString(PyExc_RuntimeError,
346 "not holding the import lock");
347 return NULL;
349 #endif
350 Py_INCREF(Py_None);
351 return Py_None;
354 static void
355 imp_modules_reloading_clear(void)
357 PyInterpreterState *interp = PyThreadState_Get()->interp;
358 if (interp->modules_reloading != NULL)
359 PyDict_Clear(interp->modules_reloading);
362 /* Helper for sys */
364 PyObject *
365 PyImport_GetModuleDict(void)
367 PyInterpreterState *interp = PyThreadState_GET()->interp;
368 if (interp->modules == NULL)
369 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
370 return interp->modules;
374 /* List of names to clear in sys */
375 static char* sys_deletes[] = {
376 "path", "argv", "ps1", "ps2", "exitfunc",
377 "exc_type", "exc_value", "exc_traceback",
378 "last_type", "last_value", "last_traceback",
379 "path_hooks", "path_importer_cache", "meta_path",
380 /* misc stuff */
381 "flags", "float_info",
382 NULL
385 static char* sys_files[] = {
386 "stdin", "__stdin__",
387 "stdout", "__stdout__",
388 "stderr", "__stderr__",
389 NULL
393 /* Un-initialize things, as good as we can */
395 void
396 PyImport_Cleanup(void)
398 Py_ssize_t pos, ndone;
399 char *name;
400 PyObject *key, *value, *dict;
401 PyInterpreterState *interp = PyThreadState_GET()->interp;
402 PyObject *modules = interp->modules;
404 if (modules == NULL)
405 return; /* Already done */
407 /* Delete some special variables first. These are common
408 places where user values hide and people complain when their
409 destructors fail. Since the modules containing them are
410 deleted *last* of all, they would come too late in the normal
411 destruction order. Sigh. */
413 value = PyDict_GetItemString(modules, "__builtin__");
414 if (value != NULL && PyModule_Check(value)) {
415 dict = PyModule_GetDict(value);
416 if (Py_VerboseFlag)
417 PySys_WriteStderr("# clear __builtin__._\n");
418 PyDict_SetItemString(dict, "_", Py_None);
420 value = PyDict_GetItemString(modules, "sys");
421 if (value != NULL && PyModule_Check(value)) {
422 char **p;
423 PyObject *v;
424 dict = PyModule_GetDict(value);
425 for (p = sys_deletes; *p != NULL; p++) {
426 if (Py_VerboseFlag)
427 PySys_WriteStderr("# clear sys.%s\n", *p);
428 PyDict_SetItemString(dict, *p, Py_None);
430 for (p = sys_files; *p != NULL; p+=2) {
431 if (Py_VerboseFlag)
432 PySys_WriteStderr("# restore sys.%s\n", *p);
433 v = PyDict_GetItemString(dict, *(p+1));
434 if (v == NULL)
435 v = Py_None;
436 PyDict_SetItemString(dict, *p, v);
440 /* First, delete __main__ */
441 value = PyDict_GetItemString(modules, "__main__");
442 if (value != NULL && PyModule_Check(value)) {
443 if (Py_VerboseFlag)
444 PySys_WriteStderr("# cleanup __main__\n");
445 _PyModule_Clear(value);
446 PyDict_SetItemString(modules, "__main__", Py_None);
449 /* The special treatment of __builtin__ here is because even
450 when it's not referenced as a module, its dictionary is
451 referenced by almost every module's __builtins__. Since
452 deleting a module clears its dictionary (even if there are
453 references left to it), we need to delete the __builtin__
454 module last. Likewise, we don't delete sys until the very
455 end because it is implicitly referenced (e.g. by print).
457 Also note that we 'delete' modules by replacing their entry
458 in the modules dict with None, rather than really deleting
459 them; this avoids a rehash of the modules dictionary and
460 also marks them as "non existent" so they won't be
461 re-imported. */
463 /* Next, repeatedly delete modules with a reference count of
464 one (skipping __builtin__ and sys) and delete them */
465 do {
466 ndone = 0;
467 pos = 0;
468 while (PyDict_Next(modules, &pos, &key, &value)) {
469 if (value->ob_refcnt != 1)
470 continue;
471 if (PyString_Check(key) && PyModule_Check(value)) {
472 name = PyString_AS_STRING(key);
473 if (strcmp(name, "__builtin__") == 0)
474 continue;
475 if (strcmp(name, "sys") == 0)
476 continue;
477 if (Py_VerboseFlag)
478 PySys_WriteStderr(
479 "# cleanup[1] %s\n", name);
480 _PyModule_Clear(value);
481 PyDict_SetItem(modules, key, Py_None);
482 ndone++;
485 } while (ndone > 0);
487 /* Next, delete all modules (still skipping __builtin__ and sys) */
488 pos = 0;
489 while (PyDict_Next(modules, &pos, &key, &value)) {
490 if (PyString_Check(key) && PyModule_Check(value)) {
491 name = PyString_AS_STRING(key);
492 if (strcmp(name, "__builtin__") == 0)
493 continue;
494 if (strcmp(name, "sys") == 0)
495 continue;
496 if (Py_VerboseFlag)
497 PySys_WriteStderr("# cleanup[2] %s\n", name);
498 _PyModule_Clear(value);
499 PyDict_SetItem(modules, key, Py_None);
503 /* Next, delete sys and __builtin__ (in that order) */
504 value = PyDict_GetItemString(modules, "sys");
505 if (value != NULL && PyModule_Check(value)) {
506 if (Py_VerboseFlag)
507 PySys_WriteStderr("# cleanup sys\n");
508 _PyModule_Clear(value);
509 PyDict_SetItemString(modules, "sys", Py_None);
511 value = PyDict_GetItemString(modules, "__builtin__");
512 if (value != NULL && PyModule_Check(value)) {
513 if (Py_VerboseFlag)
514 PySys_WriteStderr("# cleanup __builtin__\n");
515 _PyModule_Clear(value);
516 PyDict_SetItemString(modules, "__builtin__", Py_None);
519 /* Finally, clear and delete the modules directory */
520 PyDict_Clear(modules);
521 interp->modules = NULL;
522 Py_DECREF(modules);
523 Py_CLEAR(interp->modules_reloading);
527 /* Helper for pythonrun.c -- return magic number */
529 long
530 PyImport_GetMagicNumber(void)
532 return pyc_magic;
536 /* Magic for extension modules (built-in as well as dynamically
537 loaded). To prevent initializing an extension module more than
538 once, we keep a static dictionary 'extensions' keyed by module name
539 (for built-in modules) or by filename (for dynamically loaded
540 modules), containing these modules. A copy of the module's
541 dictionary is stored by calling _PyImport_FixupExtension()
542 immediately after the module initialization function succeeds. A
543 copy can be retrieved from there by calling
544 _PyImport_FindExtension(). */
546 PyObject *
547 _PyImport_FixupExtension(char *name, char *filename)
549 PyObject *modules, *mod, *dict, *copy;
550 if (extensions == NULL) {
551 extensions = PyDict_New();
552 if (extensions == NULL)
553 return NULL;
555 modules = PyImport_GetModuleDict();
556 mod = PyDict_GetItemString(modules, name);
557 if (mod == NULL || !PyModule_Check(mod)) {
558 PyErr_Format(PyExc_SystemError,
559 "_PyImport_FixupExtension: module %.200s not loaded", name);
560 return NULL;
562 dict = PyModule_GetDict(mod);
563 if (dict == NULL)
564 return NULL;
565 copy = PyDict_Copy(dict);
566 if (copy == NULL)
567 return NULL;
568 PyDict_SetItemString(extensions, filename, copy);
569 Py_DECREF(copy);
570 return copy;
573 PyObject *
574 _PyImport_FindExtension(char *name, char *filename)
576 PyObject *dict, *mod, *mdict;
577 if (extensions == NULL)
578 return NULL;
579 dict = PyDict_GetItemString(extensions, filename);
580 if (dict == NULL)
581 return NULL;
582 mod = PyImport_AddModule(name);
583 if (mod == NULL)
584 return NULL;
585 mdict = PyModule_GetDict(mod);
586 if (mdict == NULL)
587 return NULL;
588 if (PyDict_Update(mdict, dict))
589 return NULL;
590 if (Py_VerboseFlag)
591 PySys_WriteStderr("import %s # previously loaded (%s)\n",
592 name, filename);
593 return mod;
597 /* Get the module object corresponding to a module name.
598 First check the modules dictionary if there's one there,
599 if not, create a new one and insert it in the modules dictionary.
600 Because the former action is most common, THIS DOES NOT RETURN A
601 'NEW' REFERENCE! */
603 PyObject *
604 PyImport_AddModule(const char *name)
606 PyObject *modules = PyImport_GetModuleDict();
607 PyObject *m;
609 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
610 PyModule_Check(m))
611 return m;
612 m = PyModule_New(name);
613 if (m == NULL)
614 return NULL;
615 if (PyDict_SetItemString(modules, name, m) != 0) {
616 Py_DECREF(m);
617 return NULL;
619 Py_DECREF(m); /* Yes, it still exists, in modules! */
621 return m;
624 /* Remove name from sys.modules, if it's there. */
625 static void
626 remove_module(const char *name)
628 PyObject *modules = PyImport_GetModuleDict();
629 if (PyDict_GetItemString(modules, name) == NULL)
630 return;
631 if (PyDict_DelItemString(modules, name) < 0)
632 Py_FatalError("import: deleting existing key in"
633 "sys.modules failed");
636 /* Execute a code object in a module and return the module object
637 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
638 * removed from sys.modules, to avoid leaving damaged module objects
639 * in sys.modules. The caller may wish to restore the original
640 * module object (if any) in this case; PyImport_ReloadModule is an
641 * example.
643 PyObject *
644 PyImport_ExecCodeModule(char *name, PyObject *co)
646 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
649 PyObject *
650 PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
652 PyObject *modules = PyImport_GetModuleDict();
653 PyObject *m, *d, *v;
655 m = PyImport_AddModule(name);
656 if (m == NULL)
657 return NULL;
658 /* If the module is being reloaded, we get the old module back
659 and re-use its dict to exec the new code. */
660 d = PyModule_GetDict(m);
661 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
662 if (PyDict_SetItemString(d, "__builtins__",
663 PyEval_GetBuiltins()) != 0)
664 goto error;
666 /* Remember the filename as the __file__ attribute */
667 v = NULL;
668 if (pathname != NULL) {
669 v = PyString_FromString(pathname);
670 if (v == NULL)
671 PyErr_Clear();
673 if (v == NULL) {
674 v = ((PyCodeObject *)co)->co_filename;
675 Py_INCREF(v);
677 if (PyDict_SetItemString(d, "__file__", v) != 0)
678 PyErr_Clear(); /* Not important enough to report */
679 Py_DECREF(v);
681 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
682 if (v == NULL)
683 goto error;
684 Py_DECREF(v);
686 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
687 PyErr_Format(PyExc_ImportError,
688 "Loaded module %.200s not found in sys.modules",
689 name);
690 return NULL;
693 Py_INCREF(m);
695 return m;
697 error:
698 remove_module(name);
699 return NULL;
703 /* Given a pathname for a Python source file, fill a buffer with the
704 pathname for the corresponding compiled file. Return the pathname
705 for the compiled file, or NULL if there's no space in the buffer.
706 Doesn't set an exception. */
708 static char *
709 make_compiled_pathname(char *pathname, char *buf, size_t buflen)
711 size_t len = strlen(pathname);
712 if (len+2 > buflen)
713 return NULL;
715 #ifdef MS_WINDOWS
716 /* Treat .pyw as if it were .py. The case of ".pyw" must match
717 that used in _PyImport_StandardFiletab. */
718 if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0)
719 --len; /* pretend 'w' isn't there */
720 #endif
721 memcpy(buf, pathname, len);
722 buf[len] = Py_OptimizeFlag ? 'o' : 'c';
723 buf[len+1] = '\0';
725 return buf;
729 /* Given a pathname for a Python source file, its time of last
730 modification, and a pathname for a compiled file, check whether the
731 compiled file represents the same version of the source. If so,
732 return a FILE pointer for the compiled file, positioned just after
733 the header; if not, return NULL.
734 Doesn't set an exception. */
736 static FILE *
737 check_compiled_module(char *pathname, time_t mtime, char *cpathname)
739 FILE *fp;
740 long magic;
741 long pyc_mtime;
743 fp = fopen(cpathname, "rb");
744 if (fp == NULL)
745 return NULL;
746 magic = PyMarshal_ReadLongFromFile(fp);
747 if (magic != pyc_magic) {
748 if (Py_VerboseFlag)
749 PySys_WriteStderr("# %s has bad magic\n", cpathname);
750 fclose(fp);
751 return NULL;
753 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
754 if (pyc_mtime != mtime) {
755 if (Py_VerboseFlag)
756 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
757 fclose(fp);
758 return NULL;
760 if (Py_VerboseFlag)
761 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
762 return fp;
766 /* Read a code object from a file and check it for validity */
768 static PyCodeObject *
769 read_compiled_module(char *cpathname, FILE *fp)
771 PyObject *co;
773 co = PyMarshal_ReadLastObjectFromFile(fp);
774 if (co == NULL)
775 return NULL;
776 if (!PyCode_Check(co)) {
777 PyErr_Format(PyExc_ImportError,
778 "Non-code object in %.200s", cpathname);
779 Py_DECREF(co);
780 return NULL;
782 return (PyCodeObject *)co;
786 /* Load a module from a compiled file, execute it, and return its
787 module object WITH INCREMENTED REFERENCE COUNT */
789 static PyObject *
790 load_compiled_module(char *name, char *cpathname, FILE *fp)
792 long magic;
793 PyCodeObject *co;
794 PyObject *m;
796 magic = PyMarshal_ReadLongFromFile(fp);
797 if (magic != pyc_magic) {
798 PyErr_Format(PyExc_ImportError,
799 "Bad magic number in %.200s", cpathname);
800 return NULL;
802 (void) PyMarshal_ReadLongFromFile(fp);
803 co = read_compiled_module(cpathname, fp);
804 if (co == NULL)
805 return NULL;
806 if (Py_VerboseFlag)
807 PySys_WriteStderr("import %s # precompiled from %s\n",
808 name, cpathname);
809 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
810 Py_DECREF(co);
812 return m;
815 /* Parse a source file and return the corresponding code object */
817 static PyCodeObject *
818 parse_source_module(const char *pathname, FILE *fp)
820 PyCodeObject *co = NULL;
821 mod_ty mod;
822 PyCompilerFlags flags;
823 PyArena *arena = PyArena_New();
824 if (arena == NULL)
825 return NULL;
827 flags.cf_flags = 0;
829 mod = PyParser_ASTFromFile(fp, pathname, Py_file_input, 0, 0, &flags,
830 NULL, arena);
831 if (mod) {
832 co = PyAST_Compile(mod, pathname, NULL, arena);
834 PyArena_Free(arena);
835 return co;
839 /* Helper to open a bytecode file for writing in exclusive mode */
841 static FILE *
842 open_exclusive(char *filename, mode_t mode)
844 #if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
845 /* Use O_EXCL to avoid a race condition when another process tries to
846 write the same file. When that happens, our open() call fails,
847 which is just fine (since it's only a cache).
848 XXX If the file exists and is writable but the directory is not
849 writable, the file will never be written. Oh well.
851 int fd;
852 (void) unlink(filename);
853 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
854 #ifdef O_BINARY
855 |O_BINARY /* necessary for Windows */
856 #endif
857 #ifdef __VMS
858 , mode, "ctxt=bin", "shr=nil"
859 #else
860 , mode
861 #endif
863 if (fd < 0)
864 return NULL;
865 return fdopen(fd, "wb");
866 #else
867 /* Best we can do -- on Windows this can't happen anyway */
868 return fopen(filename, "wb");
869 #endif
873 /* Write a compiled module to a file, placing the time of last
874 modification of its source into the header.
875 Errors are ignored, if a write error occurs an attempt is made to
876 remove the file. */
878 static void
879 write_compiled_module(PyCodeObject *co, char *cpathname, struct stat *srcstat)
881 FILE *fp;
882 time_t mtime = srcstat->st_mtime;
883 #ifdef MS_WINDOWS /* since Windows uses different permissions */
884 mode_t mode = srcstat->st_mode & ~S_IEXEC;
885 #else
886 mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
887 #endif
889 fp = open_exclusive(cpathname, mode);
890 if (fp == NULL) {
891 if (Py_VerboseFlag)
892 PySys_WriteStderr(
893 "# can't create %s\n", cpathname);
894 return;
896 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
897 /* First write a 0 for mtime */
898 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
899 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
900 if (fflush(fp) != 0 || ferror(fp)) {
901 if (Py_VerboseFlag)
902 PySys_WriteStderr("# can't write %s\n", cpathname);
903 /* Don't keep partial file */
904 fclose(fp);
905 (void) unlink(cpathname);
906 return;
908 /* Now write the true mtime */
909 fseek(fp, 4L, 0);
910 assert(mtime < LONG_MAX);
911 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
912 fflush(fp);
913 fclose(fp);
914 if (Py_VerboseFlag)
915 PySys_WriteStderr("# wrote %s\n", cpathname);
918 static void
919 update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
921 PyObject *constants, *tmp;
922 Py_ssize_t i, n;
924 if (!_PyString_Eq(co->co_filename, oldname))
925 return;
927 tmp = co->co_filename;
928 co->co_filename = newname;
929 Py_INCREF(co->co_filename);
930 Py_DECREF(tmp);
932 constants = co->co_consts;
933 n = PyTuple_GET_SIZE(constants);
934 for (i = 0; i < n; i++) {
935 tmp = PyTuple_GET_ITEM(constants, i);
936 if (PyCode_Check(tmp))
937 update_code_filenames((PyCodeObject *)tmp,
938 oldname, newname);
942 static int
943 update_compiled_module(PyCodeObject *co, char *pathname)
945 PyObject *oldname, *newname;
947 if (strcmp(PyString_AsString(co->co_filename), pathname) == 0)
948 return 0;
950 newname = PyString_FromString(pathname);
951 if (newname == NULL)
952 return -1;
954 oldname = co->co_filename;
955 Py_INCREF(oldname);
956 update_code_filenames(co, oldname, newname);
957 Py_DECREF(oldname);
958 Py_DECREF(newname);
959 return 1;
962 /* Load a source module from a given file and return its module
963 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
964 byte-compiled file, use that instead. */
966 static PyObject *
967 load_source_module(char *name, char *pathname, FILE *fp)
969 struct stat st;
970 FILE *fpc;
971 char buf[MAXPATHLEN+1];
972 char *cpathname;
973 PyCodeObject *co;
974 PyObject *m;
976 if (fstat(fileno(fp), &st) != 0) {
977 PyErr_Format(PyExc_RuntimeError,
978 "unable to get file status from '%s'",
979 pathname);
980 return NULL;
982 #if SIZEOF_TIME_T > 4
983 /* Python's .pyc timestamp handling presumes that the timestamp fits
984 in 4 bytes. This will be fine until sometime in the year 2038,
985 when a 4-byte signed time_t will overflow.
987 if (st.st_mtime >> 32) {
988 PyErr_SetString(PyExc_OverflowError,
989 "modification time overflows a 4 byte field");
990 return NULL;
992 #endif
993 cpathname = make_compiled_pathname(pathname, buf,
994 (size_t)MAXPATHLEN + 1);
995 if (cpathname != NULL &&
996 (fpc = check_compiled_module(pathname, st.st_mtime, cpathname))) {
997 co = read_compiled_module(cpathname, fpc);
998 fclose(fpc);
999 if (co == NULL)
1000 return NULL;
1001 if (update_compiled_module(co, pathname) < 0)
1002 return NULL;
1003 if (Py_VerboseFlag)
1004 PySys_WriteStderr("import %s # precompiled from %s\n",
1005 name, cpathname);
1006 pathname = cpathname;
1008 else {
1009 co = parse_source_module(pathname, fp);
1010 if (co == NULL)
1011 return NULL;
1012 if (Py_VerboseFlag)
1013 PySys_WriteStderr("import %s # from %s\n",
1014 name, pathname);
1015 if (cpathname) {
1016 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1017 if (ro == NULL || !PyObject_IsTrue(ro))
1018 write_compiled_module(co, cpathname, &st);
1021 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
1022 Py_DECREF(co);
1024 return m;
1028 /* Forward */
1029 static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
1030 static struct filedescr *find_module(char *, char *, PyObject *,
1031 char *, size_t, FILE **, PyObject **);
1032 static struct _frozen *find_frozen(char *name);
1034 /* Load a package and return its module object WITH INCREMENTED
1035 REFERENCE COUNT */
1037 static PyObject *
1038 load_package(char *name, char *pathname)
1040 PyObject *m, *d;
1041 PyObject *file = NULL;
1042 PyObject *path = NULL;
1043 int err;
1044 char buf[MAXPATHLEN+1];
1045 FILE *fp = NULL;
1046 struct filedescr *fdp;
1048 m = PyImport_AddModule(name);
1049 if (m == NULL)
1050 return NULL;
1051 if (Py_VerboseFlag)
1052 PySys_WriteStderr("import %s # directory %s\n",
1053 name, pathname);
1054 d = PyModule_GetDict(m);
1055 file = PyString_FromString(pathname);
1056 if (file == NULL)
1057 goto error;
1058 path = Py_BuildValue("[O]", file);
1059 if (path == NULL)
1060 goto error;
1061 err = PyDict_SetItemString(d, "__file__", file);
1062 if (err == 0)
1063 err = PyDict_SetItemString(d, "__path__", path);
1064 if (err != 0)
1065 goto error;
1066 buf[0] = '\0';
1067 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
1068 if (fdp == NULL) {
1069 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1070 PyErr_Clear();
1071 Py_INCREF(m);
1073 else
1074 m = NULL;
1075 goto cleanup;
1077 m = load_module(name, fp, buf, fdp->type, NULL);
1078 if (fp != NULL)
1079 fclose(fp);
1080 goto cleanup;
1082 error:
1083 m = NULL;
1084 cleanup:
1085 Py_XDECREF(path);
1086 Py_XDECREF(file);
1087 return m;
1091 /* Helper to test for built-in module */
1093 static int
1094 is_builtin(char *name)
1096 int i;
1097 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1098 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1099 if (PyImport_Inittab[i].initfunc == NULL)
1100 return -1;
1101 else
1102 return 1;
1105 return 0;
1109 /* Return an importer object for a sys.path/pkg.__path__ item 'p',
1110 possibly by fetching it from the path_importer_cache dict. If it
1111 wasn't yet cached, traverse path_hooks until a hook is found
1112 that can handle the path item. Return None if no hook could;
1113 this tells our caller it should fall back to the builtin
1114 import mechanism. Cache the result in path_importer_cache.
1115 Returns a borrowed reference. */
1117 static PyObject *
1118 get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
1119 PyObject *p)
1121 PyObject *importer;
1122 Py_ssize_t j, nhooks;
1124 /* These conditions are the caller's responsibility: */
1125 assert(PyList_Check(path_hooks));
1126 assert(PyDict_Check(path_importer_cache));
1128 nhooks = PyList_Size(path_hooks);
1129 if (nhooks < 0)
1130 return NULL; /* Shouldn't happen */
1132 importer = PyDict_GetItem(path_importer_cache, p);
1133 if (importer != NULL)
1134 return importer;
1136 /* set path_importer_cache[p] to None to avoid recursion */
1137 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1138 return NULL;
1140 for (j = 0; j < nhooks; j++) {
1141 PyObject *hook = PyList_GetItem(path_hooks, j);
1142 if (hook == NULL)
1143 return NULL;
1144 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1145 if (importer != NULL)
1146 break;
1148 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1149 return NULL;
1151 PyErr_Clear();
1153 if (importer == NULL) {
1154 importer = PyObject_CallFunctionObjArgs(
1155 (PyObject *)&PyNullImporter_Type, p, NULL
1157 if (importer == NULL) {
1158 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1159 PyErr_Clear();
1160 return Py_None;
1164 if (importer != NULL) {
1165 int err = PyDict_SetItem(path_importer_cache, p, importer);
1166 Py_DECREF(importer);
1167 if (err != 0)
1168 return NULL;
1170 return importer;
1173 PyAPI_FUNC(PyObject *)
1174 PyImport_GetImporter(PyObject *path) {
1175 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
1177 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1178 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1179 importer = get_path_importer(path_importer_cache,
1180 path_hooks, path);
1183 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1184 return importer;
1187 /* Search the path (default sys.path) for a module. Return the
1188 corresponding filedescr struct, and (via return arguments) the
1189 pathname and an open file. Return NULL if the module is not found. */
1191 #ifdef MS_COREDLL
1192 extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
1193 char *, Py_ssize_t);
1194 #endif
1196 static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
1197 static int find_init_module(char *); /* Forward */
1198 static struct filedescr importhookdescr = {"", "", IMP_HOOK};
1200 static struct filedescr *
1201 find_module(char *fullname, char *subname, PyObject *path, char *buf,
1202 size_t buflen, FILE **p_fp, PyObject **p_loader)
1204 Py_ssize_t i, npath;
1205 size_t len, namelen;
1206 struct filedescr *fdp = NULL;
1207 char *filemode;
1208 FILE *fp = NULL;
1209 PyObject *path_hooks, *path_importer_cache;
1210 #ifndef RISCOS
1211 struct stat statbuf;
1212 #endif
1213 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1214 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1215 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
1216 char name[MAXPATHLEN+1];
1217 #if defined(PYOS_OS2)
1218 size_t saved_len;
1219 size_t saved_namelen;
1220 char *saved_buf = NULL;
1221 #endif
1222 if (p_loader != NULL)
1223 *p_loader = NULL;
1225 if (strlen(subname) > MAXPATHLEN) {
1226 PyErr_SetString(PyExc_OverflowError,
1227 "module name is too long");
1228 return NULL;
1230 strcpy(name, subname);
1232 /* sys.meta_path import hook */
1233 if (p_loader != NULL) {
1234 PyObject *meta_path;
1236 meta_path = PySys_GetObject("meta_path");
1237 if (meta_path == NULL || !PyList_Check(meta_path)) {
1238 PyErr_SetString(PyExc_ImportError,
1239 "sys.meta_path must be a list of "
1240 "import hooks");
1241 return NULL;
1243 Py_INCREF(meta_path); /* zap guard */
1244 npath = PyList_Size(meta_path);
1245 for (i = 0; i < npath; i++) {
1246 PyObject *loader;
1247 PyObject *hook = PyList_GetItem(meta_path, i);
1248 loader = PyObject_CallMethod(hook, "find_module",
1249 "sO", fullname,
1250 path != NULL ?
1251 path : Py_None);
1252 if (loader == NULL) {
1253 Py_DECREF(meta_path);
1254 return NULL; /* true error */
1256 if (loader != Py_None) {
1257 /* a loader was found */
1258 *p_loader = loader;
1259 Py_DECREF(meta_path);
1260 return &importhookdescr;
1262 Py_DECREF(loader);
1264 Py_DECREF(meta_path);
1267 if (path != NULL && PyString_Check(path)) {
1268 /* The only type of submodule allowed inside a "frozen"
1269 package are other frozen modules or packages. */
1270 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
1271 PyErr_SetString(PyExc_ImportError,
1272 "full frozen module name too long");
1273 return NULL;
1275 strcpy(buf, PyString_AsString(path));
1276 strcat(buf, ".");
1277 strcat(buf, name);
1278 strcpy(name, buf);
1279 if (find_frozen(name) != NULL) {
1280 strcpy(buf, name);
1281 return &fd_frozen;
1283 PyErr_Format(PyExc_ImportError,
1284 "No frozen submodule named %.200s", name);
1285 return NULL;
1287 if (path == NULL) {
1288 if (is_builtin(name)) {
1289 strcpy(buf, name);
1290 return &fd_builtin;
1292 if ((find_frozen(name)) != NULL) {
1293 strcpy(buf, name);
1294 return &fd_frozen;
1297 #ifdef MS_COREDLL
1298 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1299 if (fp != NULL) {
1300 *p_fp = fp;
1301 return fdp;
1303 #endif
1304 path = PySys_GetObject("path");
1306 if (path == NULL || !PyList_Check(path)) {
1307 PyErr_SetString(PyExc_ImportError,
1308 "sys.path must be a list of directory names");
1309 return NULL;
1312 path_hooks = PySys_GetObject("path_hooks");
1313 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
1314 PyErr_SetString(PyExc_ImportError,
1315 "sys.path_hooks must be a list of "
1316 "import hooks");
1317 return NULL;
1319 path_importer_cache = PySys_GetObject("path_importer_cache");
1320 if (path_importer_cache == NULL ||
1321 !PyDict_Check(path_importer_cache)) {
1322 PyErr_SetString(PyExc_ImportError,
1323 "sys.path_importer_cache must be a dict");
1324 return NULL;
1327 npath = PyList_Size(path);
1328 namelen = strlen(name);
1329 for (i = 0; i < npath; i++) {
1330 PyObject *copy = NULL;
1331 PyObject *v = PyList_GetItem(path, i);
1332 if (!v)
1333 return NULL;
1334 #ifdef Py_USING_UNICODE
1335 if (PyUnicode_Check(v)) {
1336 copy = PyUnicode_Encode(PyUnicode_AS_UNICODE(v),
1337 PyUnicode_GET_SIZE(v), Py_FileSystemDefaultEncoding, NULL);
1338 if (copy == NULL)
1339 return NULL;
1340 v = copy;
1342 else
1343 #endif
1344 if (!PyString_Check(v))
1345 continue;
1346 len = PyString_GET_SIZE(v);
1347 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1348 Py_XDECREF(copy);
1349 continue; /* Too long */
1351 strcpy(buf, PyString_AS_STRING(v));
1352 if (strlen(buf) != len) {
1353 Py_XDECREF(copy);
1354 continue; /* v contains '\0' */
1357 /* sys.path_hooks import hook */
1358 if (p_loader != NULL) {
1359 PyObject *importer;
1361 importer = get_path_importer(path_importer_cache,
1362 path_hooks, v);
1363 if (importer == NULL) {
1364 Py_XDECREF(copy);
1365 return NULL;
1367 /* Note: importer is a borrowed reference */
1368 if (importer != Py_None) {
1369 PyObject *loader;
1370 loader = PyObject_CallMethod(importer,
1371 "find_module",
1372 "s", fullname);
1373 Py_XDECREF(copy);
1374 if (loader == NULL)
1375 return NULL; /* error */
1376 if (loader != Py_None) {
1377 /* a loader was found */
1378 *p_loader = loader;
1379 return &importhookdescr;
1381 Py_DECREF(loader);
1382 continue;
1385 /* no hook was found, use builtin import */
1387 if (len > 0 && buf[len-1] != SEP
1388 #ifdef ALTSEP
1389 && buf[len-1] != ALTSEP
1390 #endif
1392 buf[len++] = SEP;
1393 strcpy(buf+len, name);
1394 len += namelen;
1396 /* Check for package import (buf holds a directory name,
1397 and there's an __init__ module in that directory */
1398 #ifdef HAVE_STAT
1399 if (stat(buf, &statbuf) == 0 && /* it exists */
1400 S_ISDIR(statbuf.st_mode) && /* it's a directory */
1401 case_ok(buf, len, namelen, name)) { /* case matches */
1402 if (find_init_module(buf)) { /* and has __init__.py */
1403 Py_XDECREF(copy);
1404 return &fd_package;
1406 else {
1407 char warnstr[MAXPATHLEN+80];
1408 sprintf(warnstr, "Not importing directory "
1409 "'%.*s': missing __init__.py",
1410 MAXPATHLEN, buf);
1411 if (PyErr_Warn(PyExc_ImportWarning,
1412 warnstr)) {
1413 Py_XDECREF(copy);
1414 return NULL;
1418 #else
1419 /* XXX How are you going to test for directories? */
1420 #ifdef RISCOS
1421 if (isdir(buf) &&
1422 case_ok(buf, len, namelen, name)) {
1423 if (find_init_module(buf)) {
1424 Py_XDECREF(copy);
1425 return &fd_package;
1427 else {
1428 char warnstr[MAXPATHLEN+80];
1429 sprintf(warnstr, "Not importing directory "
1430 "'%.*s': missing __init__.py",
1431 MAXPATHLEN, buf);
1432 if (PyErr_Warn(PyExc_ImportWarning,
1433 warnstr)) {
1434 Py_XDECREF(copy);
1435 return NULL;
1438 #endif
1439 #endif
1440 #if defined(PYOS_OS2)
1441 /* take a snapshot of the module spec for restoration
1442 * after the 8 character DLL hackery
1444 saved_buf = strdup(buf);
1445 saved_len = len;
1446 saved_namelen = namelen;
1447 #endif /* PYOS_OS2 */
1448 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
1449 #if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
1450 /* OS/2 limits DLLs to 8 character names (w/o
1451 extension)
1452 * so if the name is longer than that and its a
1453 * dynamically loaded module we're going to try,
1454 * truncate the name before trying
1456 if (strlen(subname) > 8) {
1457 /* is this an attempt to load a C extension? */
1458 const struct filedescr *scan;
1459 scan = _PyImport_DynLoadFiletab;
1460 while (scan->suffix != NULL) {
1461 if (!strcmp(scan->suffix, fdp->suffix))
1462 break;
1463 else
1464 scan++;
1466 if (scan->suffix != NULL) {
1467 /* yes, so truncate the name */
1468 namelen = 8;
1469 len -= strlen(subname) - namelen;
1470 buf[len] = '\0';
1473 #endif /* PYOS_OS2 */
1474 strcpy(buf+len, fdp->suffix);
1475 if (Py_VerboseFlag > 1)
1476 PySys_WriteStderr("# trying %s\n", buf);
1477 filemode = fdp->mode;
1478 if (filemode[0] == 'U')
1479 filemode = "r" PY_STDIOTEXTMODE;
1480 fp = fopen(buf, filemode);
1481 if (fp != NULL) {
1482 if (case_ok(buf, len, namelen, name))
1483 break;
1484 else { /* continue search */
1485 fclose(fp);
1486 fp = NULL;
1489 #if defined(PYOS_OS2)
1490 /* restore the saved snapshot */
1491 strcpy(buf, saved_buf);
1492 len = saved_len;
1493 namelen = saved_namelen;
1494 #endif
1496 #if defined(PYOS_OS2)
1497 /* don't need/want the module name snapshot anymore */
1498 if (saved_buf)
1500 free(saved_buf);
1501 saved_buf = NULL;
1503 #endif
1504 Py_XDECREF(copy);
1505 if (fp != NULL)
1506 break;
1508 if (fp == NULL) {
1509 PyErr_Format(PyExc_ImportError,
1510 "No module named %.200s", name);
1511 return NULL;
1513 *p_fp = fp;
1514 return fdp;
1517 /* Helpers for main.c
1518 * Find the source file corresponding to a named module
1520 struct filedescr *
1521 _PyImport_FindModule(const char *name, PyObject *path, char *buf,
1522 size_t buflen, FILE **p_fp, PyObject **p_loader)
1524 return find_module((char *) name, (char *) name, path,
1525 buf, buflen, p_fp, p_loader);
1528 PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1530 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
1533 /* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
1534 * The arguments here are tricky, best shown by example:
1535 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1536 * ^ ^ ^ ^
1537 * |--------------------- buf ---------------------|
1538 * |------------------- len ------------------|
1539 * |------ name -------|
1540 * |----- namelen -----|
1541 * buf is the full path, but len only counts up to (& exclusive of) the
1542 * extension. name is the module name, also exclusive of extension.
1544 * We've already done a successful stat() or fopen() on buf, so know that
1545 * there's some match, possibly case-insensitive.
1547 * case_ok() is to return 1 if there's a case-sensitive match for
1548 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1549 * exists.
1551 * case_ok() is used to implement case-sensitive import semantics even
1552 * on platforms with case-insensitive filesystems. It's trivial to implement
1553 * for case-sensitive filesystems. It's pretty much a cross-platform
1554 * nightmare for systems with case-insensitive filesystems.
1557 /* First we may need a pile of platform-specific header files; the sequence
1558 * of #if's here should match the sequence in the body of case_ok().
1560 #if defined(MS_WINDOWS)
1561 #include <windows.h>
1563 #elif defined(DJGPP)
1564 #include <dir.h>
1566 #elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
1567 #include <sys/types.h>
1568 #include <dirent.h>
1570 #elif defined(PYOS_OS2)
1571 #define INCL_DOS
1572 #define INCL_DOSERRORS
1573 #define INCL_NOPMAPI
1574 #include <os2.h>
1576 #elif defined(RISCOS)
1577 #include "oslib/osfscontrol.h"
1578 #endif
1580 static int
1581 case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
1583 /* Pick a platform-specific implementation; the sequence of #if's here should
1584 * match the sequence just above.
1587 /* MS_WINDOWS */
1588 #if defined(MS_WINDOWS)
1589 WIN32_FIND_DATA data;
1590 HANDLE h;
1592 if (Py_GETENV("PYTHONCASEOK") != NULL)
1593 return 1;
1595 h = FindFirstFile(buf, &data);
1596 if (h == INVALID_HANDLE_VALUE) {
1597 PyErr_Format(PyExc_NameError,
1598 "Can't find file for module %.100s\n(filename %.300s)",
1599 name, buf);
1600 return 0;
1602 FindClose(h);
1603 return strncmp(data.cFileName, name, namelen) == 0;
1605 /* DJGPP */
1606 #elif defined(DJGPP)
1607 struct ffblk ffblk;
1608 int done;
1610 if (Py_GETENV("PYTHONCASEOK") != NULL)
1611 return 1;
1613 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1614 if (done) {
1615 PyErr_Format(PyExc_NameError,
1616 "Can't find file for module %.100s\n(filename %.300s)",
1617 name, buf);
1618 return 0;
1620 return strncmp(ffblk.ff_name, name, namelen) == 0;
1622 /* new-fangled macintosh (macosx) or Cygwin */
1623 #elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
1624 DIR *dirp;
1625 struct dirent *dp;
1626 char dirname[MAXPATHLEN + 1];
1627 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
1629 if (Py_GETENV("PYTHONCASEOK") != NULL)
1630 return 1;
1632 /* Copy the dir component into dirname; substitute "." if empty */
1633 if (dirlen <= 0) {
1634 dirname[0] = '.';
1635 dirname[1] = '\0';
1637 else {
1638 assert(dirlen <= MAXPATHLEN);
1639 memcpy(dirname, buf, dirlen);
1640 dirname[dirlen] = '\0';
1642 /* Open the directory and search the entries for an exact match. */
1643 dirp = opendir(dirname);
1644 if (dirp) {
1645 char *nameWithExt = buf + len - namelen;
1646 while ((dp = readdir(dirp)) != NULL) {
1647 const int thislen =
1648 #ifdef _DIRENT_HAVE_D_NAMELEN
1649 dp->d_namlen;
1650 #else
1651 strlen(dp->d_name);
1652 #endif
1653 if (thislen >= namelen &&
1654 strcmp(dp->d_name, nameWithExt) == 0) {
1655 (void)closedir(dirp);
1656 return 1; /* Found */
1659 (void)closedir(dirp);
1661 return 0 ; /* Not found */
1663 /* RISC OS */
1664 #elif defined(RISCOS)
1665 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1666 char buf2[MAXPATHLEN+2];
1667 char *nameWithExt = buf+len-namelen;
1668 int canonlen;
1669 os_error *e;
1671 if (Py_GETENV("PYTHONCASEOK") != NULL)
1672 return 1;
1674 /* workaround:
1675 append wildcard, otherwise case of filename wouldn't be touched */
1676 strcpy(buf2, buf);
1677 strcat(buf2, "*");
1679 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1680 canonlen = MAXPATHLEN+1-canonlen;
1681 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1682 return 0;
1683 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1684 return 1; /* match */
1686 return 0;
1688 /* OS/2 */
1689 #elif defined(PYOS_OS2)
1690 HDIR hdir = 1;
1691 ULONG srchcnt = 1;
1692 FILEFINDBUF3 ffbuf;
1693 APIRET rc;
1695 if (Py_GETENV("PYTHONCASEOK") != NULL)
1696 return 1;
1698 rc = DosFindFirst(buf,
1699 &hdir,
1700 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1701 &ffbuf, sizeof(ffbuf),
1702 &srchcnt,
1703 FIL_STANDARD);
1704 if (rc != NO_ERROR)
1705 return 0;
1706 return strncmp(ffbuf.achName, name, namelen) == 0;
1708 /* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1709 #else
1710 return 1;
1712 #endif
1716 #ifdef HAVE_STAT
1717 /* Helper to look for __init__.py or __init__.py[co] in potential package */
1718 static int
1719 find_init_module(char *buf)
1721 const size_t save_len = strlen(buf);
1722 size_t i = save_len;
1723 char *pname; /* pointer to start of __init__ */
1724 struct stat statbuf;
1726 /* For calling case_ok(buf, len, namelen, name):
1727 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1728 * ^ ^ ^ ^
1729 * |--------------------- buf ---------------------|
1730 * |------------------- len ------------------|
1731 * |------ name -------|
1732 * |----- namelen -----|
1734 if (save_len + 13 >= MAXPATHLEN)
1735 return 0;
1736 buf[i++] = SEP;
1737 pname = buf + i;
1738 strcpy(pname, "__init__.py");
1739 if (stat(buf, &statbuf) == 0) {
1740 if (case_ok(buf,
1741 save_len + 9, /* len("/__init__") */
1742 8, /* len("__init__") */
1743 pname)) {
1744 buf[save_len] = '\0';
1745 return 1;
1748 i += strlen(pname);
1749 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
1750 if (stat(buf, &statbuf) == 0) {
1751 if (case_ok(buf,
1752 save_len + 9, /* len("/__init__") */
1753 8, /* len("__init__") */
1754 pname)) {
1755 buf[save_len] = '\0';
1756 return 1;
1759 buf[save_len] = '\0';
1760 return 0;
1763 #else
1765 #ifdef RISCOS
1766 static int
1767 find_init_module(buf)
1768 char *buf;
1770 int save_len = strlen(buf);
1771 int i = save_len;
1773 if (save_len + 13 >= MAXPATHLEN)
1774 return 0;
1775 buf[i++] = SEP;
1776 strcpy(buf+i, "__init__/py");
1777 if (isfile(buf)) {
1778 buf[save_len] = '\0';
1779 return 1;
1782 if (Py_OptimizeFlag)
1783 strcpy(buf+i, "o");
1784 else
1785 strcpy(buf+i, "c");
1786 if (isfile(buf)) {
1787 buf[save_len] = '\0';
1788 return 1;
1790 buf[save_len] = '\0';
1791 return 0;
1793 #endif /*RISCOS*/
1795 #endif /* HAVE_STAT */
1798 static int init_builtin(char *); /* Forward */
1800 /* Load an external module using the default search path and return
1801 its module object WITH INCREMENTED REFERENCE COUNT */
1803 static PyObject *
1804 load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader)
1806 PyObject *modules;
1807 PyObject *m;
1808 int err;
1810 /* First check that there's an open file (if we need one) */
1811 switch (type) {
1812 case PY_SOURCE:
1813 case PY_COMPILED:
1814 if (fp == NULL) {
1815 PyErr_Format(PyExc_ValueError,
1816 "file object required for import (type code %d)",
1817 type);
1818 return NULL;
1822 switch (type) {
1824 case PY_SOURCE:
1825 m = load_source_module(name, pathname, fp);
1826 break;
1828 case PY_COMPILED:
1829 m = load_compiled_module(name, pathname, fp);
1830 break;
1832 #ifdef HAVE_DYNAMIC_LOADING
1833 case C_EXTENSION:
1834 m = _PyImport_LoadDynamicModule(name, pathname, fp);
1835 break;
1836 #endif
1838 case PKG_DIRECTORY:
1839 m = load_package(name, pathname);
1840 break;
1842 case C_BUILTIN:
1843 case PY_FROZEN:
1844 if (pathname != NULL && pathname[0] != '\0')
1845 name = pathname;
1846 if (type == C_BUILTIN)
1847 err = init_builtin(name);
1848 else
1849 err = PyImport_ImportFrozenModule(name);
1850 if (err < 0)
1851 return NULL;
1852 if (err == 0) {
1853 PyErr_Format(PyExc_ImportError,
1854 "Purported %s module %.200s not found",
1855 type == C_BUILTIN ?
1856 "builtin" : "frozen",
1857 name);
1858 return NULL;
1860 modules = PyImport_GetModuleDict();
1861 m = PyDict_GetItemString(modules, name);
1862 if (m == NULL) {
1863 PyErr_Format(
1864 PyExc_ImportError,
1865 "%s module %.200s not properly initialized",
1866 type == C_BUILTIN ?
1867 "builtin" : "frozen",
1868 name);
1869 return NULL;
1871 Py_INCREF(m);
1872 break;
1874 case IMP_HOOK: {
1875 if (loader == NULL) {
1876 PyErr_SetString(PyExc_ImportError,
1877 "import hook without loader");
1878 return NULL;
1880 m = PyObject_CallMethod(loader, "load_module", "s", name);
1881 break;
1884 default:
1885 PyErr_Format(PyExc_ImportError,
1886 "Don't know how to import %.200s (type code %d)",
1887 name, type);
1888 m = NULL;
1892 return m;
1896 /* Initialize a built-in module.
1897 Return 1 for success, 0 if the module is not found, and -1 with
1898 an exception set if the initialization failed. */
1900 static int
1901 init_builtin(char *name)
1903 struct _inittab *p;
1905 if (_PyImport_FindExtension(name, name) != NULL)
1906 return 1;
1908 for (p = PyImport_Inittab; p->name != NULL; p++) {
1909 if (strcmp(name, p->name) == 0) {
1910 if (p->initfunc == NULL) {
1911 PyErr_Format(PyExc_ImportError,
1912 "Cannot re-init internal module %.200s",
1913 name);
1914 return -1;
1916 if (Py_VerboseFlag)
1917 PySys_WriteStderr("import %s # builtin\n", name);
1918 (*p->initfunc)();
1919 if (PyErr_Occurred())
1920 return -1;
1921 if (_PyImport_FixupExtension(name, name) == NULL)
1922 return -1;
1923 return 1;
1926 return 0;
1930 /* Frozen modules */
1932 static struct _frozen *
1933 find_frozen(char *name)
1935 struct _frozen *p;
1937 for (p = PyImport_FrozenModules; ; p++) {
1938 if (p->name == NULL)
1939 return NULL;
1940 if (strcmp(p->name, name) == 0)
1941 break;
1943 return p;
1946 static PyObject *
1947 get_frozen_object(char *name)
1949 struct _frozen *p = find_frozen(name);
1950 int size;
1952 if (p == NULL) {
1953 PyErr_Format(PyExc_ImportError,
1954 "No such frozen object named %.200s",
1955 name);
1956 return NULL;
1958 if (p->code == NULL) {
1959 PyErr_Format(PyExc_ImportError,
1960 "Excluded frozen object named %.200s",
1961 name);
1962 return NULL;
1964 size = p->size;
1965 if (size < 0)
1966 size = -size;
1967 return PyMarshal_ReadObjectFromString((char *)p->code, size);
1970 /* Initialize a frozen module.
1971 Return 1 for succes, 0 if the module is not found, and -1 with
1972 an exception set if the initialization failed.
1973 This function is also used from frozenmain.c */
1976 PyImport_ImportFrozenModule(char *name)
1978 struct _frozen *p = find_frozen(name);
1979 PyObject *co;
1980 PyObject *m;
1981 int ispackage;
1982 int size;
1984 if (p == NULL)
1985 return 0;
1986 if (p->code == NULL) {
1987 PyErr_Format(PyExc_ImportError,
1988 "Excluded frozen object named %.200s",
1989 name);
1990 return -1;
1992 size = p->size;
1993 ispackage = (size < 0);
1994 if (ispackage)
1995 size = -size;
1996 if (Py_VerboseFlag)
1997 PySys_WriteStderr("import %s # frozen%s\n",
1998 name, ispackage ? " package" : "");
1999 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
2000 if (co == NULL)
2001 return -1;
2002 if (!PyCode_Check(co)) {
2003 PyErr_Format(PyExc_TypeError,
2004 "frozen object %.200s is not a code object",
2005 name);
2006 goto err_return;
2008 if (ispackage) {
2009 /* Set __path__ to the package name */
2010 PyObject *d, *s;
2011 int err;
2012 m = PyImport_AddModule(name);
2013 if (m == NULL)
2014 goto err_return;
2015 d = PyModule_GetDict(m);
2016 s = PyString_InternFromString(name);
2017 if (s == NULL)
2018 goto err_return;
2019 err = PyDict_SetItemString(d, "__path__", s);
2020 Py_DECREF(s);
2021 if (err != 0)
2022 goto err_return;
2024 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
2025 if (m == NULL)
2026 goto err_return;
2027 Py_DECREF(co);
2028 Py_DECREF(m);
2029 return 1;
2030 err_return:
2031 Py_DECREF(co);
2032 return -1;
2036 /* Import a module, either built-in, frozen, or external, and return
2037 its module object WITH INCREMENTED REFERENCE COUNT */
2039 PyObject *
2040 PyImport_ImportModule(const char *name)
2042 PyObject *pname;
2043 PyObject *result;
2045 pname = PyString_FromString(name);
2046 if (pname == NULL)
2047 return NULL;
2048 result = PyImport_Import(pname);
2049 Py_DECREF(pname);
2050 return result;
2053 /* Import a module without blocking
2055 * At first it tries to fetch the module from sys.modules. If the module was
2056 * never loaded before it loads it with PyImport_ImportModule() unless another
2057 * thread holds the import lock. In the latter case the function raises an
2058 * ImportError instead of blocking.
2060 * Returns the module object with incremented ref count.
2062 PyObject *
2063 PyImport_ImportModuleNoBlock(const char *name)
2065 PyObject *result;
2066 PyObject *modules;
2067 long me;
2069 /* Try to get the module from sys.modules[name] */
2070 modules = PyImport_GetModuleDict();
2071 if (modules == NULL)
2072 return NULL;
2074 result = PyDict_GetItemString(modules, name);
2075 if (result != NULL) {
2076 Py_INCREF(result);
2077 return result;
2079 else {
2080 PyErr_Clear();
2082 #ifdef WITH_THREAD
2083 /* check the import lock
2084 * me might be -1 but I ignore the error here, the lock function
2085 * takes care of the problem */
2086 me = PyThread_get_thread_ident();
2087 if (import_lock_thread == -1 || import_lock_thread == me) {
2088 /* no thread or me is holding the lock */
2089 return PyImport_ImportModule(name);
2091 else {
2092 PyErr_Format(PyExc_ImportError,
2093 "Failed to import %.200s because the import lock"
2094 "is held by another thread.",
2095 name);
2096 return NULL;
2098 #else
2099 return PyImport_ImportModule(name);
2100 #endif
2103 /* Forward declarations for helper routines */
2104 static PyObject *get_parent(PyObject *globals, char *buf,
2105 Py_ssize_t *p_buflen, int level);
2106 static PyObject *load_next(PyObject *mod, PyObject *altmod,
2107 char **p_name, char *buf, Py_ssize_t *p_buflen);
2108 static int mark_miss(char *name);
2109 static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
2110 char *buf, Py_ssize_t buflen, int recursive);
2111 static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
2113 /* The Magnum Opus of dotted-name import :-) */
2115 static PyObject *
2116 import_module_level(char *name, PyObject *globals, PyObject *locals,
2117 PyObject *fromlist, int level)
2119 char buf[MAXPATHLEN+1];
2120 Py_ssize_t buflen = 0;
2121 PyObject *parent, *head, *next, *tail;
2123 if (strchr(name, '/') != NULL
2124 #ifdef MS_WINDOWS
2125 || strchr(name, '\\') != NULL
2126 #endif
2128 PyErr_SetString(PyExc_ImportError,
2129 "Import by filename is not supported.");
2130 return NULL;
2133 parent = get_parent(globals, buf, &buflen, level);
2134 if (parent == NULL)
2135 return NULL;
2137 head = load_next(parent, level < 0 ? Py_None : parent, &name, buf,
2138 &buflen);
2139 if (head == NULL)
2140 return NULL;
2142 tail = head;
2143 Py_INCREF(tail);
2144 while (name) {
2145 next = load_next(tail, tail, &name, buf, &buflen);
2146 Py_DECREF(tail);
2147 if (next == NULL) {
2148 Py_DECREF(head);
2149 return NULL;
2151 tail = next;
2153 if (tail == Py_None) {
2154 /* If tail is Py_None, both get_parent and load_next found
2155 an empty module name: someone called __import__("") or
2156 doctored faulty bytecode */
2157 Py_DECREF(tail);
2158 Py_DECREF(head);
2159 PyErr_SetString(PyExc_ValueError,
2160 "Empty module name");
2161 return NULL;
2164 if (fromlist != NULL) {
2165 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2166 fromlist = NULL;
2169 if (fromlist == NULL) {
2170 Py_DECREF(tail);
2171 return head;
2174 Py_DECREF(head);
2175 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
2176 Py_DECREF(tail);
2177 return NULL;
2180 return tail;
2183 PyObject *
2184 PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
2185 PyObject *fromlist, int level)
2187 PyObject *result;
2188 _PyImport_AcquireLock();
2189 result = import_module_level(name, globals, locals, fromlist, level);
2190 if (_PyImport_ReleaseLock() < 0) {
2191 Py_XDECREF(result);
2192 PyErr_SetString(PyExc_RuntimeError,
2193 "not holding the import lock");
2194 return NULL;
2196 return result;
2199 /* Return the package that an import is being performed in. If globals comes
2200 from the module foo.bar.bat (not itself a package), this returns the
2201 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
2202 the package's entry in sys.modules is returned, as a borrowed reference.
2204 The *name* of the returned package is returned in buf, with the length of
2205 the name in *p_buflen.
2207 If globals doesn't come from a package or a module in a package, or a
2208 corresponding entry is not found in sys.modules, Py_None is returned.
2210 static PyObject *
2211 get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
2213 static PyObject *namestr = NULL;
2214 static PyObject *pathstr = NULL;
2215 static PyObject *pkgstr = NULL;
2216 PyObject *pkgname, *modname, *modpath, *modules, *parent;
2217 int orig_level = level;
2219 if (globals == NULL || !PyDict_Check(globals) || !level)
2220 return Py_None;
2222 if (namestr == NULL) {
2223 namestr = PyString_InternFromString("__name__");
2224 if (namestr == NULL)
2225 return NULL;
2227 if (pathstr == NULL) {
2228 pathstr = PyString_InternFromString("__path__");
2229 if (pathstr == NULL)
2230 return NULL;
2232 if (pkgstr == NULL) {
2233 pkgstr = PyString_InternFromString("__package__");
2234 if (pkgstr == NULL)
2235 return NULL;
2238 *buf = '\0';
2239 *p_buflen = 0;
2240 pkgname = PyDict_GetItem(globals, pkgstr);
2242 if ((pkgname != NULL) && (pkgname != Py_None)) {
2243 /* __package__ is set, so use it */
2244 Py_ssize_t len;
2245 if (!PyString_Check(pkgname)) {
2246 PyErr_SetString(PyExc_ValueError,
2247 "__package__ set to non-string");
2248 return NULL;
2250 len = PyString_GET_SIZE(pkgname);
2251 if (len == 0) {
2252 if (level > 0) {
2253 PyErr_SetString(PyExc_ValueError,
2254 "Attempted relative import in non-package");
2255 return NULL;
2257 return Py_None;
2259 if (len > MAXPATHLEN) {
2260 PyErr_SetString(PyExc_ValueError,
2261 "Package name too long");
2262 return NULL;
2264 strcpy(buf, PyString_AS_STRING(pkgname));
2265 } else {
2266 /* __package__ not set, so figure it out and set it */
2267 modname = PyDict_GetItem(globals, namestr);
2268 if (modname == NULL || !PyString_Check(modname))
2269 return Py_None;
2271 modpath = PyDict_GetItem(globals, pathstr);
2272 if (modpath != NULL) {
2273 /* __path__ is set, so modname is already the package name */
2274 Py_ssize_t len = PyString_GET_SIZE(modname);
2275 int error;
2276 if (len > MAXPATHLEN) {
2277 PyErr_SetString(PyExc_ValueError,
2278 "Module name too long");
2279 return NULL;
2281 strcpy(buf, PyString_AS_STRING(modname));
2282 error = PyDict_SetItem(globals, pkgstr, modname);
2283 if (error) {
2284 PyErr_SetString(PyExc_ValueError,
2285 "Could not set __package__");
2286 return NULL;
2288 } else {
2289 /* Normal module, so work out the package name if any */
2290 char *start = PyString_AS_STRING(modname);
2291 char *lastdot = strrchr(start, '.');
2292 size_t len;
2293 int error;
2294 if (lastdot == NULL && level > 0) {
2295 PyErr_SetString(PyExc_ValueError,
2296 "Attempted relative import in non-package");
2297 return NULL;
2299 if (lastdot == NULL) {
2300 error = PyDict_SetItem(globals, pkgstr, Py_None);
2301 if (error) {
2302 PyErr_SetString(PyExc_ValueError,
2303 "Could not set __package__");
2304 return NULL;
2306 return Py_None;
2308 len = lastdot - start;
2309 if (len >= MAXPATHLEN) {
2310 PyErr_SetString(PyExc_ValueError,
2311 "Module name too long");
2312 return NULL;
2314 strncpy(buf, start, len);
2315 buf[len] = '\0';
2316 pkgname = PyString_FromString(buf);
2317 if (pkgname == NULL) {
2318 return NULL;
2320 error = PyDict_SetItem(globals, pkgstr, pkgname);
2321 Py_DECREF(pkgname);
2322 if (error) {
2323 PyErr_SetString(PyExc_ValueError,
2324 "Could not set __package__");
2325 return NULL;
2329 while (--level > 0) {
2330 char *dot = strrchr(buf, '.');
2331 if (dot == NULL) {
2332 PyErr_SetString(PyExc_ValueError,
2333 "Attempted relative import beyond "
2334 "toplevel package");
2335 return NULL;
2337 *dot = '\0';
2339 *p_buflen = strlen(buf);
2341 modules = PyImport_GetModuleDict();
2342 parent = PyDict_GetItemString(modules, buf);
2343 if (parent == NULL) {
2344 if (orig_level < 1) {
2345 PyObject *err_msg = PyString_FromFormat(
2346 "Parent module '%.200s' not found "
2347 "while handling absolute import", buf);
2348 if (err_msg == NULL) {
2349 return NULL;
2351 if (!PyErr_WarnEx(PyExc_RuntimeWarning,
2352 PyString_AsString(err_msg), 1)) {
2353 *buf = '\0';
2354 *p_buflen = 0;
2355 parent = Py_None;
2357 Py_DECREF(err_msg);
2358 } else {
2359 PyErr_Format(PyExc_SystemError,
2360 "Parent module '%.200s' not loaded, "
2361 "cannot perform relative import", buf);
2364 return parent;
2365 /* We expect, but can't guarantee, if parent != None, that:
2366 - parent.__name__ == buf
2367 - parent.__dict__ is globals
2368 If this is violated... Who cares? */
2371 /* altmod is either None or same as mod */
2372 static PyObject *
2373 load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
2374 Py_ssize_t *p_buflen)
2376 char *name = *p_name;
2377 char *dot = strchr(name, '.');
2378 size_t len;
2379 char *p;
2380 PyObject *result;
2382 if (strlen(name) == 0) {
2383 /* completely empty module name should only happen in
2384 'from . import' (or '__import__("")')*/
2385 Py_INCREF(mod);
2386 *p_name = NULL;
2387 return mod;
2390 if (dot == NULL) {
2391 *p_name = NULL;
2392 len = strlen(name);
2394 else {
2395 *p_name = dot+1;
2396 len = dot-name;
2398 if (len == 0) {
2399 PyErr_SetString(PyExc_ValueError,
2400 "Empty module name");
2401 return NULL;
2404 p = buf + *p_buflen;
2405 if (p != buf)
2406 *p++ = '.';
2407 if (p+len-buf >= MAXPATHLEN) {
2408 PyErr_SetString(PyExc_ValueError,
2409 "Module name too long");
2410 return NULL;
2412 strncpy(p, name, len);
2413 p[len] = '\0';
2414 *p_buflen = p+len-buf;
2416 result = import_submodule(mod, p, buf);
2417 if (result == Py_None && altmod != mod) {
2418 Py_DECREF(result);
2419 /* Here, altmod must be None and mod must not be None */
2420 result = import_submodule(altmod, p, p);
2421 if (result != NULL && result != Py_None) {
2422 if (mark_miss(buf) != 0) {
2423 Py_DECREF(result);
2424 return NULL;
2426 strncpy(buf, name, len);
2427 buf[len] = '\0';
2428 *p_buflen = len;
2431 if (result == NULL)
2432 return NULL;
2434 if (result == Py_None) {
2435 Py_DECREF(result);
2436 PyErr_Format(PyExc_ImportError,
2437 "No module named %.200s", name);
2438 return NULL;
2441 return result;
2444 static int
2445 mark_miss(char *name)
2447 PyObject *modules = PyImport_GetModuleDict();
2448 return PyDict_SetItemString(modules, name, Py_None);
2451 static int
2452 ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
2453 int recursive)
2455 int i;
2457 if (!PyObject_HasAttrString(mod, "__path__"))
2458 return 1;
2460 for (i = 0; ; i++) {
2461 PyObject *item = PySequence_GetItem(fromlist, i);
2462 int hasit;
2463 if (item == NULL) {
2464 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2465 PyErr_Clear();
2466 return 1;
2468 return 0;
2470 if (!PyString_Check(item)) {
2471 PyErr_SetString(PyExc_TypeError,
2472 "Item in ``from list'' not a string");
2473 Py_DECREF(item);
2474 return 0;
2476 if (PyString_AS_STRING(item)[0] == '*') {
2477 PyObject *all;
2478 Py_DECREF(item);
2479 /* See if the package defines __all__ */
2480 if (recursive)
2481 continue; /* Avoid endless recursion */
2482 all = PyObject_GetAttrString(mod, "__all__");
2483 if (all == NULL)
2484 PyErr_Clear();
2485 else {
2486 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
2487 Py_DECREF(all);
2488 if (!ret)
2489 return 0;
2491 continue;
2493 hasit = PyObject_HasAttr(mod, item);
2494 if (!hasit) {
2495 char *subname = PyString_AS_STRING(item);
2496 PyObject *submod;
2497 char *p;
2498 if (buflen + strlen(subname) >= MAXPATHLEN) {
2499 PyErr_SetString(PyExc_ValueError,
2500 "Module name too long");
2501 Py_DECREF(item);
2502 return 0;
2504 p = buf + buflen;
2505 *p++ = '.';
2506 strcpy(p, subname);
2507 submod = import_submodule(mod, subname, buf);
2508 Py_XDECREF(submod);
2509 if (submod == NULL) {
2510 Py_DECREF(item);
2511 return 0;
2514 Py_DECREF(item);
2517 /* NOTREACHED */
2520 static int
2521 add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
2522 PyObject *modules)
2524 if (mod == Py_None)
2525 return 1;
2526 /* Irrespective of the success of this load, make a
2527 reference to it in the parent package module. A copy gets
2528 saved in the modules dictionary under the full name, so get a
2529 reference from there, if need be. (The exception is when the
2530 load failed with a SyntaxError -- then there's no trace in
2531 sys.modules. In that case, of course, do nothing extra.) */
2532 if (submod == NULL) {
2533 submod = PyDict_GetItemString(modules, fullname);
2534 if (submod == NULL)
2535 return 1;
2537 if (PyModule_Check(mod)) {
2538 /* We can't use setattr here since it can give a
2539 * spurious warning if the submodule name shadows a
2540 * builtin name */
2541 PyObject *dict = PyModule_GetDict(mod);
2542 if (!dict)
2543 return 0;
2544 if (PyDict_SetItemString(dict, subname, submod) < 0)
2545 return 0;
2547 else {
2548 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2549 return 0;
2551 return 1;
2554 static PyObject *
2555 import_submodule(PyObject *mod, char *subname, char *fullname)
2557 PyObject *modules = PyImport_GetModuleDict();
2558 PyObject *m = NULL;
2560 /* Require:
2561 if mod == None: subname == fullname
2562 else: mod.__name__ + "." + subname == fullname
2565 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
2566 Py_INCREF(m);
2568 else {
2569 PyObject *path, *loader = NULL;
2570 char buf[MAXPATHLEN+1];
2571 struct filedescr *fdp;
2572 FILE *fp = NULL;
2574 if (mod == Py_None)
2575 path = NULL;
2576 else {
2577 path = PyObject_GetAttrString(mod, "__path__");
2578 if (path == NULL) {
2579 PyErr_Clear();
2580 Py_INCREF(Py_None);
2581 return Py_None;
2585 buf[0] = '\0';
2586 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2587 &fp, &loader);
2588 Py_XDECREF(path);
2589 if (fdp == NULL) {
2590 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2591 return NULL;
2592 PyErr_Clear();
2593 Py_INCREF(Py_None);
2594 return Py_None;
2596 m = load_module(fullname, fp, buf, fdp->type, loader);
2597 Py_XDECREF(loader);
2598 if (fp)
2599 fclose(fp);
2600 if (!add_submodule(mod, m, fullname, subname, modules)) {
2601 Py_XDECREF(m);
2602 m = NULL;
2606 return m;
2610 /* Re-import a module of any kind and return its module object, WITH
2611 INCREMENTED REFERENCE COUNT */
2613 PyObject *
2614 PyImport_ReloadModule(PyObject *m)
2616 PyInterpreterState *interp = PyThreadState_Get()->interp;
2617 PyObject *modules_reloading = interp->modules_reloading;
2618 PyObject *modules = PyImport_GetModuleDict();
2619 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
2620 char *name, *subname;
2621 char buf[MAXPATHLEN+1];
2622 struct filedescr *fdp;
2623 FILE *fp = NULL;
2624 PyObject *newm;
2626 if (modules_reloading == NULL) {
2627 Py_FatalError("PyImport_ReloadModule: "
2628 "no modules_reloading dictionary!");
2629 return NULL;
2632 if (m == NULL || !PyModule_Check(m)) {
2633 PyErr_SetString(PyExc_TypeError,
2634 "reload() argument must be module");
2635 return NULL;
2637 name = PyModule_GetName(m);
2638 if (name == NULL)
2639 return NULL;
2640 if (m != PyDict_GetItemString(modules, name)) {
2641 PyErr_Format(PyExc_ImportError,
2642 "reload(): module %.200s not in sys.modules",
2643 name);
2644 return NULL;
2646 existing_m = PyDict_GetItemString(modules_reloading, name);
2647 if (existing_m != NULL) {
2648 /* Due to a recursive reload, this module is already
2649 being reloaded. */
2650 Py_INCREF(existing_m);
2651 return existing_m;
2653 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
2654 return NULL;
2656 subname = strrchr(name, '.');
2657 if (subname == NULL)
2658 subname = name;
2659 else {
2660 PyObject *parentname, *parent;
2661 parentname = PyString_FromStringAndSize(name, (subname-name));
2662 if (parentname == NULL) {
2663 imp_modules_reloading_clear();
2664 return NULL;
2666 parent = PyDict_GetItem(modules, parentname);
2667 if (parent == NULL) {
2668 PyErr_Format(PyExc_ImportError,
2669 "reload(): parent %.200s not in sys.modules",
2670 PyString_AS_STRING(parentname));
2671 Py_DECREF(parentname);
2672 imp_modules_reloading_clear();
2673 return NULL;
2675 Py_DECREF(parentname);
2676 subname++;
2677 path = PyObject_GetAttrString(parent, "__path__");
2678 if (path == NULL)
2679 PyErr_Clear();
2681 buf[0] = '\0';
2682 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
2683 Py_XDECREF(path);
2685 if (fdp == NULL) {
2686 Py_XDECREF(loader);
2687 imp_modules_reloading_clear();
2688 return NULL;
2691 newm = load_module(name, fp, buf, fdp->type, loader);
2692 Py_XDECREF(loader);
2694 if (fp)
2695 fclose(fp);
2696 if (newm == NULL) {
2697 /* load_module probably removed name from modules because of
2698 * the error. Put back the original module object. We're
2699 * going to return NULL in this case regardless of whether
2700 * replacing name succeeds, so the return value is ignored.
2702 PyDict_SetItemString(modules, name, m);
2704 imp_modules_reloading_clear();
2705 return newm;
2709 /* Higher-level import emulator which emulates the "import" statement
2710 more accurately -- it invokes the __import__() function from the
2711 builtins of the current globals. This means that the import is
2712 done using whatever import hooks are installed in the current
2713 environment, e.g. by "rexec".
2714 A dummy list ["__doc__"] is passed as the 4th argument so that
2715 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
2716 will return <module "gencache"> instead of <module "win32com">. */
2718 PyObject *
2719 PyImport_Import(PyObject *module_name)
2721 static PyObject *silly_list = NULL;
2722 static PyObject *builtins_str = NULL;
2723 static PyObject *import_str = NULL;
2724 PyObject *globals = NULL;
2725 PyObject *import = NULL;
2726 PyObject *builtins = NULL;
2727 PyObject *r = NULL;
2729 /* Initialize constant string objects */
2730 if (silly_list == NULL) {
2731 import_str = PyString_InternFromString("__import__");
2732 if (import_str == NULL)
2733 return NULL;
2734 builtins_str = PyString_InternFromString("__builtins__");
2735 if (builtins_str == NULL)
2736 return NULL;
2737 silly_list = Py_BuildValue("[s]", "__doc__");
2738 if (silly_list == NULL)
2739 return NULL;
2742 /* Get the builtins from current globals */
2743 globals = PyEval_GetGlobals();
2744 if (globals != NULL) {
2745 Py_INCREF(globals);
2746 builtins = PyObject_GetItem(globals, builtins_str);
2747 if (builtins == NULL)
2748 goto err;
2750 else {
2751 /* No globals -- use standard builtins, and fake globals */
2752 builtins = PyImport_ImportModuleLevel("__builtin__",
2753 NULL, NULL, NULL, 0);
2754 if (builtins == NULL)
2755 return NULL;
2756 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2757 if (globals == NULL)
2758 goto err;
2761 /* Get the __import__ function from the builtins */
2762 if (PyDict_Check(builtins)) {
2763 import = PyObject_GetItem(builtins, import_str);
2764 if (import == NULL)
2765 PyErr_SetObject(PyExc_KeyError, import_str);
2767 else
2768 import = PyObject_GetAttr(builtins, import_str);
2769 if (import == NULL)
2770 goto err;
2772 /* Call the __import__ function with the proper argument list
2773 * Always use absolute import here. */
2774 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
2775 globals, silly_list, 0, NULL);
2777 err:
2778 Py_XDECREF(globals);
2779 Py_XDECREF(builtins);
2780 Py_XDECREF(import);
2782 return r;
2786 /* Module 'imp' provides Python access to the primitives used for
2787 importing modules.
2790 static PyObject *
2791 imp_get_magic(PyObject *self, PyObject *noargs)
2793 char buf[4];
2795 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2796 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2797 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2798 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
2800 return PyString_FromStringAndSize(buf, 4);
2803 static PyObject *
2804 imp_get_suffixes(PyObject *self, PyObject *noargs)
2806 PyObject *list;
2807 struct filedescr *fdp;
2809 list = PyList_New(0);
2810 if (list == NULL)
2811 return NULL;
2812 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2813 PyObject *item = Py_BuildValue("ssi",
2814 fdp->suffix, fdp->mode, fdp->type);
2815 if (item == NULL) {
2816 Py_DECREF(list);
2817 return NULL;
2819 if (PyList_Append(list, item) < 0) {
2820 Py_DECREF(list);
2821 Py_DECREF(item);
2822 return NULL;
2824 Py_DECREF(item);
2826 return list;
2829 static PyObject *
2830 call_find_module(char *name, PyObject *path)
2832 extern int fclose(FILE *);
2833 PyObject *fob, *ret;
2834 struct filedescr *fdp;
2835 char pathname[MAXPATHLEN+1];
2836 FILE *fp = NULL;
2838 pathname[0] = '\0';
2839 if (path == Py_None)
2840 path = NULL;
2841 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
2842 if (fdp == NULL)
2843 return NULL;
2844 if (fp != NULL) {
2845 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
2846 if (fob == NULL) {
2847 fclose(fp);
2848 return NULL;
2851 else {
2852 fob = Py_None;
2853 Py_INCREF(fob);
2855 ret = Py_BuildValue("Os(ssi)",
2856 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
2857 Py_DECREF(fob);
2858 return ret;
2861 static PyObject *
2862 imp_find_module(PyObject *self, PyObject *args)
2864 char *name;
2865 PyObject *path = NULL;
2866 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
2867 return NULL;
2868 return call_find_module(name, path);
2871 static PyObject *
2872 imp_init_builtin(PyObject *self, PyObject *args)
2874 char *name;
2875 int ret;
2876 PyObject *m;
2877 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
2878 return NULL;
2879 ret = init_builtin(name);
2880 if (ret < 0)
2881 return NULL;
2882 if (ret == 0) {
2883 Py_INCREF(Py_None);
2884 return Py_None;
2886 m = PyImport_AddModule(name);
2887 Py_XINCREF(m);
2888 return m;
2891 static PyObject *
2892 imp_init_frozen(PyObject *self, PyObject *args)
2894 char *name;
2895 int ret;
2896 PyObject *m;
2897 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
2898 return NULL;
2899 ret = PyImport_ImportFrozenModule(name);
2900 if (ret < 0)
2901 return NULL;
2902 if (ret == 0) {
2903 Py_INCREF(Py_None);
2904 return Py_None;
2906 m = PyImport_AddModule(name);
2907 Py_XINCREF(m);
2908 return m;
2911 static PyObject *
2912 imp_get_frozen_object(PyObject *self, PyObject *args)
2914 char *name;
2916 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
2917 return NULL;
2918 return get_frozen_object(name);
2921 static PyObject *
2922 imp_is_builtin(PyObject *self, PyObject *args)
2924 char *name;
2925 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
2926 return NULL;
2927 return PyInt_FromLong(is_builtin(name));
2930 static PyObject *
2931 imp_is_frozen(PyObject *self, PyObject *args)
2933 char *name;
2934 struct _frozen *p;
2935 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
2936 return NULL;
2937 p = find_frozen(name);
2938 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
2941 static FILE *
2942 get_file(char *pathname, PyObject *fob, char *mode)
2944 FILE *fp;
2945 if (fob == NULL) {
2946 if (mode[0] == 'U')
2947 mode = "r" PY_STDIOTEXTMODE;
2948 fp = fopen(pathname, mode);
2949 if (fp == NULL)
2950 PyErr_SetFromErrno(PyExc_IOError);
2952 else {
2953 fp = PyFile_AsFile(fob);
2954 if (fp == NULL)
2955 PyErr_SetString(PyExc_ValueError,
2956 "bad/closed file object");
2958 return fp;
2961 static PyObject *
2962 imp_load_compiled(PyObject *self, PyObject *args)
2964 char *name;
2965 char *pathname;
2966 PyObject *fob = NULL;
2967 PyObject *m;
2968 FILE *fp;
2969 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
2970 &PyFile_Type, &fob))
2971 return NULL;
2972 fp = get_file(pathname, fob, "rb");
2973 if (fp == NULL)
2974 return NULL;
2975 m = load_compiled_module(name, pathname, fp);
2976 if (fob == NULL)
2977 fclose(fp);
2978 return m;
2981 #ifdef HAVE_DYNAMIC_LOADING
2983 static PyObject *
2984 imp_load_dynamic(PyObject *self, PyObject *args)
2986 char *name;
2987 char *pathname;
2988 PyObject *fob = NULL;
2989 PyObject *m;
2990 FILE *fp = NULL;
2991 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
2992 &PyFile_Type, &fob))
2993 return NULL;
2994 if (fob) {
2995 fp = get_file(pathname, fob, "r");
2996 if (fp == NULL)
2997 return NULL;
2999 m = _PyImport_LoadDynamicModule(name, pathname, fp);
3000 return m;
3003 #endif /* HAVE_DYNAMIC_LOADING */
3005 static PyObject *
3006 imp_load_source(PyObject *self, PyObject *args)
3008 char *name;
3009 char *pathname;
3010 PyObject *fob = NULL;
3011 PyObject *m;
3012 FILE *fp;
3013 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
3014 &PyFile_Type, &fob))
3015 return NULL;
3016 fp = get_file(pathname, fob, "r");
3017 if (fp == NULL)
3018 return NULL;
3019 m = load_source_module(name, pathname, fp);
3020 if (fob == NULL)
3021 fclose(fp);
3022 return m;
3025 static PyObject *
3026 imp_load_module(PyObject *self, PyObject *args)
3028 char *name;
3029 PyObject *fob;
3030 char *pathname;
3031 char *suffix; /* Unused */
3032 char *mode;
3033 int type;
3034 FILE *fp;
3036 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
3037 &name, &fob, &pathname,
3038 &suffix, &mode, &type))
3039 return NULL;
3040 if (*mode) {
3041 /* Mode must start with 'r' or 'U' and must not contain '+'.
3042 Implicit in this test is the assumption that the mode
3043 may contain other modifiers like 'b' or 't'. */
3045 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
3046 PyErr_Format(PyExc_ValueError,
3047 "invalid file open mode %.200s", mode);
3048 return NULL;
3051 if (fob == Py_None)
3052 fp = NULL;
3053 else {
3054 if (!PyFile_Check(fob)) {
3055 PyErr_SetString(PyExc_ValueError,
3056 "load_module arg#2 should be a file or None");
3057 return NULL;
3059 fp = get_file(pathname, fob, mode);
3060 if (fp == NULL)
3061 return NULL;
3063 return load_module(name, fp, pathname, type, NULL);
3066 static PyObject *
3067 imp_load_package(PyObject *self, PyObject *args)
3069 char *name;
3070 char *pathname;
3071 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
3072 return NULL;
3073 return load_package(name, pathname);
3076 static PyObject *
3077 imp_new_module(PyObject *self, PyObject *args)
3079 char *name;
3080 if (!PyArg_ParseTuple(args, "s:new_module", &name))
3081 return NULL;
3082 return PyModule_New(name);
3085 static PyObject *
3086 imp_reload(PyObject *self, PyObject *v)
3088 return PyImport_ReloadModule(v);
3092 /* Doc strings */
3094 PyDoc_STRVAR(doc_imp,
3095 "This module provides the components needed to build your own\n\
3096 __import__ function. Undocumented functions are obsolete.");
3098 PyDoc_STRVAR(doc_reload,
3099 "reload(module) -> module\n\
3101 Reload the module. The module must have been successfully imported before.");
3103 PyDoc_STRVAR(doc_find_module,
3104 "find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
3105 Search for a module. If path is omitted or None, search for a\n\
3106 built-in, frozen or special module and continue search in sys.path.\n\
3107 The module name cannot contain '.'; to search for a submodule of a\n\
3108 package, pass the submodule name and the package's __path__.");
3110 PyDoc_STRVAR(doc_load_module,
3111 "load_module(name, file, filename, (suffix, mode, type)) -> module\n\
3112 Load a module, given information returned by find_module().\n\
3113 The module name must include the full package name, if any.");
3115 PyDoc_STRVAR(doc_get_magic,
3116 "get_magic() -> string\n\
3117 Return the magic number for .pyc or .pyo files.");
3119 PyDoc_STRVAR(doc_get_suffixes,
3120 "get_suffixes() -> [(suffix, mode, type), ...]\n\
3121 Return a list of (suffix, mode, type) tuples describing the files\n\
3122 that find_module() looks for.");
3124 PyDoc_STRVAR(doc_new_module,
3125 "new_module(name) -> module\n\
3126 Create a new module. Do not enter it in sys.modules.\n\
3127 The module name must include the full package name, if any.");
3129 PyDoc_STRVAR(doc_lock_held,
3130 "lock_held() -> boolean\n\
3131 Return True if the import lock is currently held, else False.\n\
3132 On platforms without threads, return False.");
3134 PyDoc_STRVAR(doc_acquire_lock,
3135 "acquire_lock() -> None\n\
3136 Acquires the interpreter's import lock for the current thread.\n\
3137 This lock should be used by import hooks to ensure thread-safety\n\
3138 when importing modules.\n\
3139 On platforms without threads, this function does nothing.");
3141 PyDoc_STRVAR(doc_release_lock,
3142 "release_lock() -> None\n\
3143 Release the interpreter's import lock.\n\
3144 On platforms without threads, this function does nothing.");
3146 static PyMethodDef imp_methods[] = {
3147 {"reload", imp_reload, METH_O, doc_reload},
3148 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3149 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3150 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3151 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3152 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3153 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3154 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3155 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
3156 /* The rest are obsolete */
3157 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3158 {"init_builtin", imp_init_builtin, METH_VARARGS},
3159 {"init_frozen", imp_init_frozen, METH_VARARGS},
3160 {"is_builtin", imp_is_builtin, METH_VARARGS},
3161 {"is_frozen", imp_is_frozen, METH_VARARGS},
3162 {"load_compiled", imp_load_compiled, METH_VARARGS},
3163 #ifdef HAVE_DYNAMIC_LOADING
3164 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
3165 #endif
3166 {"load_package", imp_load_package, METH_VARARGS},
3167 {"load_source", imp_load_source, METH_VARARGS},
3168 {NULL, NULL} /* sentinel */
3171 static int
3172 setint(PyObject *d, char *name, int value)
3174 PyObject *v;
3175 int err;
3177 v = PyInt_FromLong((long)value);
3178 err = PyDict_SetItemString(d, name, v);
3179 Py_XDECREF(v);
3180 return err;
3183 typedef struct {
3184 PyObject_HEAD
3185 } NullImporter;
3187 static int
3188 NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3190 char *path;
3191 Py_ssize_t pathlen;
3193 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3194 return -1;
3196 if (!PyArg_ParseTuple(args, "s:NullImporter",
3197 &path))
3198 return -1;
3200 pathlen = strlen(path);
3201 if (pathlen == 0) {
3202 PyErr_SetString(PyExc_ImportError, "empty pathname");
3203 return -1;
3204 } else {
3205 #ifndef RISCOS
3206 #ifndef MS_WINDOWS
3207 struct stat statbuf;
3208 int rv;
3210 rv = stat(path, &statbuf);
3211 if (rv == 0) {
3212 /* it exists */
3213 if (S_ISDIR(statbuf.st_mode)) {
3214 /* it's a directory */
3215 PyErr_SetString(PyExc_ImportError,
3216 "existing directory");
3217 return -1;
3220 #else /* MS_WINDOWS */
3221 DWORD rv;
3222 /* see issue1293 and issue3677:
3223 * stat() on Windows doesn't recognise paths like
3224 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
3226 rv = GetFileAttributesA(path);
3227 if (rv != INVALID_FILE_ATTRIBUTES) {
3228 /* it exists */
3229 if (rv & FILE_ATTRIBUTE_DIRECTORY) {
3230 /* it's a directory */
3231 PyErr_SetString(PyExc_ImportError,
3232 "existing directory");
3233 return -1;
3236 #endif
3237 #else /* RISCOS */
3238 if (object_exists(path)) {
3239 /* it exists */
3240 if (isdir(path)) {
3241 /* it's a directory */
3242 PyErr_SetString(PyExc_ImportError,
3243 "existing directory");
3244 return -1;
3247 #endif
3249 return 0;
3252 static PyObject *
3253 NullImporter_find_module(NullImporter *self, PyObject *args)
3255 Py_RETURN_NONE;
3258 static PyMethodDef NullImporter_methods[] = {
3259 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3260 "Always return None"
3262 {NULL} /* Sentinel */
3266 PyTypeObject PyNullImporter_Type = {
3267 PyVarObject_HEAD_INIT(NULL, 0)
3268 "imp.NullImporter", /*tp_name*/
3269 sizeof(NullImporter), /*tp_basicsize*/
3270 0, /*tp_itemsize*/
3271 0, /*tp_dealloc*/
3272 0, /*tp_print*/
3273 0, /*tp_getattr*/
3274 0, /*tp_setattr*/
3275 0, /*tp_compare*/
3276 0, /*tp_repr*/
3277 0, /*tp_as_number*/
3278 0, /*tp_as_sequence*/
3279 0, /*tp_as_mapping*/
3280 0, /*tp_hash */
3281 0, /*tp_call*/
3282 0, /*tp_str*/
3283 0, /*tp_getattro*/
3284 0, /*tp_setattro*/
3285 0, /*tp_as_buffer*/
3286 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3287 "Null importer object", /* tp_doc */
3288 0, /* tp_traverse */
3289 0, /* tp_clear */
3290 0, /* tp_richcompare */
3291 0, /* tp_weaklistoffset */
3292 0, /* tp_iter */
3293 0, /* tp_iternext */
3294 NullImporter_methods, /* tp_methods */
3295 0, /* tp_members */
3296 0, /* tp_getset */
3297 0, /* tp_base */
3298 0, /* tp_dict */
3299 0, /* tp_descr_get */
3300 0, /* tp_descr_set */
3301 0, /* tp_dictoffset */
3302 (initproc)NullImporter_init, /* tp_init */
3303 0, /* tp_alloc */
3304 PyType_GenericNew /* tp_new */
3308 PyMODINIT_FUNC
3309 initimp(void)
3311 PyObject *m, *d;
3313 if (PyType_Ready(&PyNullImporter_Type) < 0)
3314 goto failure;
3316 m = Py_InitModule4("imp", imp_methods, doc_imp,
3317 NULL, PYTHON_API_VERSION);
3318 if (m == NULL)
3319 goto failure;
3320 d = PyModule_GetDict(m);
3321 if (d == NULL)
3322 goto failure;
3324 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3325 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3326 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3327 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3328 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3329 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3330 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3331 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
3332 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
3333 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
3335 Py_INCREF(&PyNullImporter_Type);
3336 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
3337 failure:
3342 /* API for embedding applications that want to add their own entries
3343 to the table of built-in modules. This should normally be called
3344 *before* Py_Initialize(). When the table resize fails, -1 is
3345 returned and the existing table is unchanged.
3347 After a similar function by Just van Rossum. */
3350 PyImport_ExtendInittab(struct _inittab *newtab)
3352 static struct _inittab *our_copy = NULL;
3353 struct _inittab *p;
3354 int i, n;
3356 /* Count the number of entries in both tables */
3357 for (n = 0; newtab[n].name != NULL; n++)
3359 if (n == 0)
3360 return 0; /* Nothing to do */
3361 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3364 /* Allocate new memory for the combined table */
3365 p = our_copy;
3366 PyMem_RESIZE(p, struct _inittab, i+n+1);
3367 if (p == NULL)
3368 return -1;
3370 /* Copy the tables into the new memory */
3371 if (our_copy != PyImport_Inittab)
3372 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3373 PyImport_Inittab = our_copy = p;
3374 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
3376 return 0;
3379 /* Shorthand to add a single entry given a name and a function */
3382 PyImport_AppendInittab(const char *name, void (*initfunc)(void))
3384 struct _inittab newtab[2];
3386 memset(newtab, '\0', sizeof newtab);
3388 newtab[0].name = (char *)name;
3389 newtab[0].initfunc = initfunc;
3391 return PyImport_ExtendInittab(newtab);
3394 #ifdef __cplusplus
3396 #endif