Expand test coverage for struct.pack with native integer packing;
[python.git] / Python / import.c
blob67c6cb212d632138737d136f039bd423351adbdc
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)
80 #define MAGIC (62191 | ((long)'\r'<<16) | ((long)'\n'<<24))
82 /* Magic word as global; note that _PyImport_Init() can change the
83 value of this global to accommodate for alterations of how the
84 compiler works which are enabled by command line switches. */
85 static long pyc_magic = MAGIC;
87 /* See _PyImport_FixupExtension() below */
88 static PyObject *extensions = NULL;
90 /* This table is defined in config.c: */
91 extern struct _inittab _PyImport_Inittab[];
93 struct _inittab *PyImport_Inittab = _PyImport_Inittab;
95 /* these tables define the module suffixes that Python recognizes */
96 struct filedescr * _PyImport_Filetab = NULL;
98 #ifdef RISCOS
99 static const struct filedescr _PyImport_StandardFiletab[] = {
100 {"/py", "U", PY_SOURCE},
101 {"/pyc", "rb", PY_COMPILED},
102 {0, 0}
104 #else
105 static const struct filedescr _PyImport_StandardFiletab[] = {
106 {".py", "U", PY_SOURCE},
107 #ifdef MS_WINDOWS
108 {".pyw", "U", PY_SOURCE},
109 #endif
110 {".pyc", "rb", PY_COMPILED},
111 {0, 0}
113 #endif
116 /* Initialize things */
118 void
119 _PyImport_Init(void)
121 const struct filedescr *scan;
122 struct filedescr *filetab;
123 int countD = 0;
124 int countS = 0;
126 /* prepare _PyImport_Filetab: copy entries from
127 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
129 #ifdef HAVE_DYNAMIC_LOADING
130 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
131 ++countD;
132 #endif
133 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
134 ++countS;
135 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
136 if (filetab == NULL)
137 Py_FatalError("Can't initialize import file table.");
138 #ifdef HAVE_DYNAMIC_LOADING
139 memcpy(filetab, _PyImport_DynLoadFiletab,
140 countD * sizeof(struct filedescr));
141 #endif
142 memcpy(filetab + countD, _PyImport_StandardFiletab,
143 countS * sizeof(struct filedescr));
144 filetab[countD + countS].suffix = NULL;
146 _PyImport_Filetab = filetab;
148 if (Py_OptimizeFlag) {
149 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
150 for (; filetab->suffix != NULL; filetab++) {
151 #ifndef RISCOS
152 if (strcmp(filetab->suffix, ".pyc") == 0)
153 filetab->suffix = ".pyo";
154 #else
155 if (strcmp(filetab->suffix, "/pyc") == 0)
156 filetab->suffix = "/pyo";
157 #endif
161 if (Py_UnicodeFlag) {
162 /* Fix the pyc_magic so that byte compiled code created
163 using the all-Unicode method doesn't interfere with
164 code created in normal operation mode. */
165 pyc_magic = MAGIC + 1;
169 void
170 _PyImportHooks_Init(void)
172 PyObject *v, *path_hooks = NULL, *zimpimport;
173 int err = 0;
175 /* adding sys.path_hooks and sys.path_importer_cache, setting up
176 zipimport */
177 if (PyType_Ready(&PyNullImporter_Type) < 0)
178 goto error;
180 if (Py_VerboseFlag)
181 PySys_WriteStderr("# installing zipimport hook\n");
183 v = PyList_New(0);
184 if (v == NULL)
185 goto error;
186 err = PySys_SetObject("meta_path", v);
187 Py_DECREF(v);
188 if (err)
189 goto error;
190 v = PyDict_New();
191 if (v == NULL)
192 goto error;
193 err = PySys_SetObject("path_importer_cache", v);
194 Py_DECREF(v);
195 if (err)
196 goto error;
197 path_hooks = PyList_New(0);
198 if (path_hooks == NULL)
199 goto error;
200 err = PySys_SetObject("path_hooks", path_hooks);
201 if (err) {
202 error:
203 PyErr_Print();
204 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
205 "path_importer_cache, or NullImporter failed"
209 zimpimport = PyImport_ImportModule("zipimport");
210 if (zimpimport == NULL) {
211 PyErr_Clear(); /* No zip import module -- okay */
212 if (Py_VerboseFlag)
213 PySys_WriteStderr("# can't import zipimport\n");
215 else {
216 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
217 "zipimporter");
218 Py_DECREF(zimpimport);
219 if (zipimporter == NULL) {
220 PyErr_Clear(); /* No zipimporter object -- okay */
221 if (Py_VerboseFlag)
222 PySys_WriteStderr(
223 "# can't import zipimport.zipimporter\n");
225 else {
226 /* sys.path_hooks.append(zipimporter) */
227 err = PyList_Append(path_hooks, zipimporter);
228 Py_DECREF(zipimporter);
229 if (err)
230 goto error;
231 if (Py_VerboseFlag)
232 PySys_WriteStderr(
233 "# installed zipimport hook\n");
236 Py_DECREF(path_hooks);
239 void
240 _PyImport_Fini(void)
242 Py_XDECREF(extensions);
243 extensions = NULL;
244 PyMem_DEL(_PyImport_Filetab);
245 _PyImport_Filetab = NULL;
249 /* Locking primitives to prevent parallel imports of the same module
250 in different threads to return with a partially loaded module.
251 These calls are serialized by the global interpreter lock. */
253 #ifdef WITH_THREAD
255 #include "pythread.h"
257 static PyThread_type_lock import_lock = 0;
258 static long import_lock_thread = -1;
259 static int import_lock_level = 0;
261 static void
262 lock_import(void)
264 long me = PyThread_get_thread_ident();
265 if (me == -1)
266 return; /* Too bad */
267 if (import_lock == NULL) {
268 import_lock = PyThread_allocate_lock();
269 if (import_lock == NULL)
270 return; /* Nothing much we can do. */
272 if (import_lock_thread == me) {
273 import_lock_level++;
274 return;
276 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
278 PyThreadState *tstate = PyEval_SaveThread();
279 PyThread_acquire_lock(import_lock, 1);
280 PyEval_RestoreThread(tstate);
282 import_lock_thread = me;
283 import_lock_level = 1;
286 static int
287 unlock_import(void)
289 long me = PyThread_get_thread_ident();
290 if (me == -1 || import_lock == NULL)
291 return 0; /* Too bad */
292 if (import_lock_thread != me)
293 return -1;
294 import_lock_level--;
295 if (import_lock_level == 0) {
296 import_lock_thread = -1;
297 PyThread_release_lock(import_lock);
299 return 1;
302 /* This function is called from PyOS_AfterFork to ensure that newly
303 created child processes do not share locks with the parent. */
305 void
306 _PyImport_ReInitLock(void)
308 #ifdef _AIX
309 if (import_lock != NULL)
310 import_lock = PyThread_allocate_lock();
311 #endif
314 #else
316 #define lock_import()
317 #define unlock_import() 0
319 #endif
321 static PyObject *
322 imp_lock_held(PyObject *self, PyObject *noargs)
324 #ifdef WITH_THREAD
325 return PyBool_FromLong(import_lock_thread != -1);
326 #else
327 return PyBool_FromLong(0);
328 #endif
331 static PyObject *
332 imp_acquire_lock(PyObject *self, PyObject *noargs)
334 #ifdef WITH_THREAD
335 lock_import();
336 #endif
337 Py_INCREF(Py_None);
338 return Py_None;
341 static PyObject *
342 imp_release_lock(PyObject *self, PyObject *noargs)
344 #ifdef WITH_THREAD
345 if (unlock_import() < 0) {
346 PyErr_SetString(PyExc_RuntimeError,
347 "not holding the import lock");
348 return NULL;
350 #endif
351 Py_INCREF(Py_None);
352 return Py_None;
355 static void
356 imp_modules_reloading_clear(void)
358 PyInterpreterState *interp = PyThreadState_Get()->interp;
359 if (interp->modules_reloading != NULL)
360 PyDict_Clear(interp->modules_reloading);
363 /* Helper for sys */
365 PyObject *
366 PyImport_GetModuleDict(void)
368 PyInterpreterState *interp = PyThreadState_GET()->interp;
369 if (interp->modules == NULL)
370 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
371 return interp->modules;
375 /* List of names to clear in sys */
376 static char* sys_deletes[] = {
377 "path", "argv", "ps1", "ps2", "exitfunc",
378 "exc_type", "exc_value", "exc_traceback",
379 "last_type", "last_value", "last_traceback",
380 "path_hooks", "path_importer_cache", "meta_path",
381 /* misc stuff */
382 "flags", "float_info",
383 NULL
386 static char* sys_files[] = {
387 "stdin", "__stdin__",
388 "stdout", "__stdout__",
389 "stderr", "__stderr__",
390 NULL
394 /* Un-initialize things, as good as we can */
396 void
397 PyImport_Cleanup(void)
399 Py_ssize_t pos, ndone;
400 char *name;
401 PyObject *key, *value, *dict;
402 PyInterpreterState *interp = PyThreadState_GET()->interp;
403 PyObject *modules = interp->modules;
405 if (modules == NULL)
406 return; /* Already done */
408 /* Delete some special variables first. These are common
409 places where user values hide and people complain when their
410 destructors fail. Since the modules containing them are
411 deleted *last* of all, they would come too late in the normal
412 destruction order. Sigh. */
414 value = PyDict_GetItemString(modules, "__builtin__");
415 if (value != NULL && PyModule_Check(value)) {
416 dict = PyModule_GetDict(value);
417 if (Py_VerboseFlag)
418 PySys_WriteStderr("# clear __builtin__._\n");
419 PyDict_SetItemString(dict, "_", Py_None);
421 value = PyDict_GetItemString(modules, "sys");
422 if (value != NULL && PyModule_Check(value)) {
423 char **p;
424 PyObject *v;
425 dict = PyModule_GetDict(value);
426 for (p = sys_deletes; *p != NULL; p++) {
427 if (Py_VerboseFlag)
428 PySys_WriteStderr("# clear sys.%s\n", *p);
429 PyDict_SetItemString(dict, *p, Py_None);
431 for (p = sys_files; *p != NULL; p+=2) {
432 if (Py_VerboseFlag)
433 PySys_WriteStderr("# restore sys.%s\n", *p);
434 v = PyDict_GetItemString(dict, *(p+1));
435 if (v == NULL)
436 v = Py_None;
437 PyDict_SetItemString(dict, *p, v);
441 /* First, delete __main__ */
442 value = PyDict_GetItemString(modules, "__main__");
443 if (value != NULL && PyModule_Check(value)) {
444 if (Py_VerboseFlag)
445 PySys_WriteStderr("# cleanup __main__\n");
446 _PyModule_Clear(value);
447 PyDict_SetItemString(modules, "__main__", Py_None);
450 /* The special treatment of __builtin__ here is because even
451 when it's not referenced as a module, its dictionary is
452 referenced by almost every module's __builtins__. Since
453 deleting a module clears its dictionary (even if there are
454 references left to it), we need to delete the __builtin__
455 module last. Likewise, we don't delete sys until the very
456 end because it is implicitly referenced (e.g. by print).
458 Also note that we 'delete' modules by replacing their entry
459 in the modules dict with None, rather than really deleting
460 them; this avoids a rehash of the modules dictionary and
461 also marks them as "non existent" so they won't be
462 re-imported. */
464 /* Next, repeatedly delete modules with a reference count of
465 one (skipping __builtin__ and sys) and delete them */
466 do {
467 ndone = 0;
468 pos = 0;
469 while (PyDict_Next(modules, &pos, &key, &value)) {
470 if (value->ob_refcnt != 1)
471 continue;
472 if (PyString_Check(key) && PyModule_Check(value)) {
473 name = PyString_AS_STRING(key);
474 if (strcmp(name, "__builtin__") == 0)
475 continue;
476 if (strcmp(name, "sys") == 0)
477 continue;
478 if (Py_VerboseFlag)
479 PySys_WriteStderr(
480 "# cleanup[1] %s\n", name);
481 _PyModule_Clear(value);
482 PyDict_SetItem(modules, key, Py_None);
483 ndone++;
486 } while (ndone > 0);
488 /* Next, delete all modules (still skipping __builtin__ and sys) */
489 pos = 0;
490 while (PyDict_Next(modules, &pos, &key, &value)) {
491 if (PyString_Check(key) && PyModule_Check(value)) {
492 name = PyString_AS_STRING(key);
493 if (strcmp(name, "__builtin__") == 0)
494 continue;
495 if (strcmp(name, "sys") == 0)
496 continue;
497 if (Py_VerboseFlag)
498 PySys_WriteStderr("# cleanup[2] %s\n", name);
499 _PyModule_Clear(value);
500 PyDict_SetItem(modules, key, Py_None);
504 /* Next, delete sys and __builtin__ (in that order) */
505 value = PyDict_GetItemString(modules, "sys");
506 if (value != NULL && PyModule_Check(value)) {
507 if (Py_VerboseFlag)
508 PySys_WriteStderr("# cleanup sys\n");
509 _PyModule_Clear(value);
510 PyDict_SetItemString(modules, "sys", Py_None);
512 value = PyDict_GetItemString(modules, "__builtin__");
513 if (value != NULL && PyModule_Check(value)) {
514 if (Py_VerboseFlag)
515 PySys_WriteStderr("# cleanup __builtin__\n");
516 _PyModule_Clear(value);
517 PyDict_SetItemString(modules, "__builtin__", Py_None);
520 /* Finally, clear and delete the modules directory */
521 PyDict_Clear(modules);
522 interp->modules = NULL;
523 Py_DECREF(modules);
524 Py_CLEAR(interp->modules_reloading);
528 /* Helper for pythonrun.c -- return magic number */
530 long
531 PyImport_GetMagicNumber(void)
533 return pyc_magic;
537 /* Magic for extension modules (built-in as well as dynamically
538 loaded). To prevent initializing an extension module more than
539 once, we keep a static dictionary 'extensions' keyed by module name
540 (for built-in modules) or by filename (for dynamically loaded
541 modules), containing these modules. A copy of the module's
542 dictionary is stored by calling _PyImport_FixupExtension()
543 immediately after the module initialization function succeeds. A
544 copy can be retrieved from there by calling
545 _PyImport_FindExtension(). */
547 PyObject *
548 _PyImport_FixupExtension(char *name, char *filename)
550 PyObject *modules, *mod, *dict, *copy;
551 if (extensions == NULL) {
552 extensions = PyDict_New();
553 if (extensions == NULL)
554 return NULL;
556 modules = PyImport_GetModuleDict();
557 mod = PyDict_GetItemString(modules, name);
558 if (mod == NULL || !PyModule_Check(mod)) {
559 PyErr_Format(PyExc_SystemError,
560 "_PyImport_FixupExtension: module %.200s not loaded", name);
561 return NULL;
563 dict = PyModule_GetDict(mod);
564 if (dict == NULL)
565 return NULL;
566 copy = PyDict_Copy(dict);
567 if (copy == NULL)
568 return NULL;
569 PyDict_SetItemString(extensions, filename, copy);
570 Py_DECREF(copy);
571 return copy;
574 PyObject *
575 _PyImport_FindExtension(char *name, char *filename)
577 PyObject *dict, *mod, *mdict;
578 if (extensions == NULL)
579 return NULL;
580 dict = PyDict_GetItemString(extensions, filename);
581 if (dict == NULL)
582 return NULL;
583 mod = PyImport_AddModule(name);
584 if (mod == NULL)
585 return NULL;
586 mdict = PyModule_GetDict(mod);
587 if (mdict == NULL)
588 return NULL;
589 if (PyDict_Update(mdict, dict))
590 return NULL;
591 if (Py_VerboseFlag)
592 PySys_WriteStderr("import %s # previously loaded (%s)\n",
593 name, filename);
594 return mod;
598 /* Get the module object corresponding to a module name.
599 First check the modules dictionary if there's one there,
600 if not, create a new one and insert it in the modules dictionary.
601 Because the former action is most common, THIS DOES NOT RETURN A
602 'NEW' REFERENCE! */
604 PyObject *
605 PyImport_AddModule(const char *name)
607 PyObject *modules = PyImport_GetModuleDict();
608 PyObject *m;
610 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
611 PyModule_Check(m))
612 return m;
613 m = PyModule_New(name);
614 if (m == NULL)
615 return NULL;
616 if (PyDict_SetItemString(modules, name, m) != 0) {
617 Py_DECREF(m);
618 return NULL;
620 Py_DECREF(m); /* Yes, it still exists, in modules! */
622 return m;
625 /* Remove name from sys.modules, if it's there. */
626 static void
627 _RemoveModule(const char *name)
629 PyObject *modules = PyImport_GetModuleDict();
630 if (PyDict_GetItemString(modules, name) == NULL)
631 return;
632 if (PyDict_DelItemString(modules, name) < 0)
633 Py_FatalError("import: deleting existing key in"
634 "sys.modules failed");
637 /* Execute a code object in a module and return the module object
638 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
639 * removed from sys.modules, to avoid leaving damaged module objects
640 * in sys.modules. The caller may wish to restore the original
641 * module object (if any) in this case; PyImport_ReloadModule is an
642 * example.
644 PyObject *
645 PyImport_ExecCodeModule(char *name, PyObject *co)
647 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
650 PyObject *
651 PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
653 PyObject *modules = PyImport_GetModuleDict();
654 PyObject *m, *d, *v;
656 m = PyImport_AddModule(name);
657 if (m == NULL)
658 return NULL;
659 /* If the module is being reloaded, we get the old module back
660 and re-use its dict to exec the new code. */
661 d = PyModule_GetDict(m);
662 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
663 if (PyDict_SetItemString(d, "__builtins__",
664 PyEval_GetBuiltins()) != 0)
665 goto error;
667 /* Remember the filename as the __file__ attribute */
668 v = NULL;
669 if (pathname != NULL) {
670 v = PyString_FromString(pathname);
671 if (v == NULL)
672 PyErr_Clear();
674 if (v == NULL) {
675 v = ((PyCodeObject *)co)->co_filename;
676 Py_INCREF(v);
678 if (PyDict_SetItemString(d, "__file__", v) != 0)
679 PyErr_Clear(); /* Not important enough to report */
680 Py_DECREF(v);
682 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
683 if (v == NULL)
684 goto error;
685 Py_DECREF(v);
687 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
688 PyErr_Format(PyExc_ImportError,
689 "Loaded module %.200s not found in sys.modules",
690 name);
691 return NULL;
694 Py_INCREF(m);
696 return m;
698 error:
699 _RemoveModule(name);
700 return NULL;
704 /* Given a pathname for a Python source file, fill a buffer with the
705 pathname for the corresponding compiled file. Return the pathname
706 for the compiled file, or NULL if there's no space in the buffer.
707 Doesn't set an exception. */
709 static char *
710 make_compiled_pathname(char *pathname, char *buf, size_t buflen)
712 size_t len = strlen(pathname);
713 if (len+2 > buflen)
714 return NULL;
716 #ifdef MS_WINDOWS
717 /* Treat .pyw as if it were .py. The case of ".pyw" must match
718 that used in _PyImport_StandardFiletab. */
719 if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0)
720 --len; /* pretend 'w' isn't there */
721 #endif
722 memcpy(buf, pathname, len);
723 buf[len] = Py_OptimizeFlag ? 'o' : 'c';
724 buf[len+1] = '\0';
726 return buf;
730 /* Given a pathname for a Python source file, its time of last
731 modification, and a pathname for a compiled file, check whether the
732 compiled file represents the same version of the source. If so,
733 return a FILE pointer for the compiled file, positioned just after
734 the header; if not, return NULL.
735 Doesn't set an exception. */
737 static FILE *
738 check_compiled_module(char *pathname, time_t mtime, char *cpathname)
740 FILE *fp;
741 long magic;
742 long pyc_mtime;
744 fp = fopen(cpathname, "rb");
745 if (fp == NULL)
746 return NULL;
747 magic = PyMarshal_ReadLongFromFile(fp);
748 if (magic != pyc_magic) {
749 if (Py_VerboseFlag)
750 PySys_WriteStderr("# %s has bad magic\n", cpathname);
751 fclose(fp);
752 return NULL;
754 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
755 if (pyc_mtime != mtime) {
756 if (Py_VerboseFlag)
757 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
758 fclose(fp);
759 return NULL;
761 if (Py_VerboseFlag)
762 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
763 return fp;
767 /* Read a code object from a file and check it for validity */
769 static PyCodeObject *
770 read_compiled_module(char *cpathname, FILE *fp)
772 PyObject *co;
774 co = PyMarshal_ReadLastObjectFromFile(fp);
775 if (co == NULL)
776 return NULL;
777 if (!PyCode_Check(co)) {
778 PyErr_Format(PyExc_ImportError,
779 "Non-code object in %.200s", cpathname);
780 Py_DECREF(co);
781 return NULL;
783 return (PyCodeObject *)co;
787 /* Load a module from a compiled file, execute it, and return its
788 module object WITH INCREMENTED REFERENCE COUNT */
790 static PyObject *
791 load_compiled_module(char *name, char *cpathname, FILE *fp)
793 long magic;
794 PyCodeObject *co;
795 PyObject *m;
797 magic = PyMarshal_ReadLongFromFile(fp);
798 if (magic != pyc_magic) {
799 PyErr_Format(PyExc_ImportError,
800 "Bad magic number in %.200s", cpathname);
801 return NULL;
803 (void) PyMarshal_ReadLongFromFile(fp);
804 co = read_compiled_module(cpathname, fp);
805 if (co == NULL)
806 return NULL;
807 if (Py_VerboseFlag)
808 PySys_WriteStderr("import %s # precompiled from %s\n",
809 name, cpathname);
810 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
811 Py_DECREF(co);
813 return m;
816 /* Parse a source file and return the corresponding code object */
818 static PyCodeObject *
819 parse_source_module(const char *pathname, FILE *fp)
821 PyCodeObject *co = NULL;
822 mod_ty mod;
823 PyCompilerFlags flags;
824 PyArena *arena = PyArena_New();
825 if (arena == NULL)
826 return NULL;
828 flags.cf_flags = 0;
830 mod = PyParser_ASTFromFile(fp, pathname, Py_file_input, 0, 0, &flags,
831 NULL, arena);
832 if (mod) {
833 co = PyAST_Compile(mod, pathname, NULL, arena);
835 PyArena_Free(arena);
836 return co;
840 /* Helper to open a bytecode file for writing in exclusive mode */
842 static FILE *
843 open_exclusive(char *filename, mode_t mode)
845 #if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
846 /* Use O_EXCL to avoid a race condition when another process tries to
847 write the same file. When that happens, our open() call fails,
848 which is just fine (since it's only a cache).
849 XXX If the file exists and is writable but the directory is not
850 writable, the file will never be written. Oh well.
852 int fd;
853 (void) unlink(filename);
854 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
855 #ifdef O_BINARY
856 |O_BINARY /* necessary for Windows */
857 #endif
858 #ifdef __VMS
859 , mode, "ctxt=bin", "shr=nil"
860 #else
861 , mode
862 #endif
864 if (fd < 0)
865 return NULL;
866 return fdopen(fd, "wb");
867 #else
868 /* Best we can do -- on Windows this can't happen anyway */
869 return fopen(filename, "wb");
870 #endif
874 /* Write a compiled module to a file, placing the time of last
875 modification of its source into the header.
876 Errors are ignored, if a write error occurs an attempt is made to
877 remove the file. */
879 static void
880 write_compiled_module(PyCodeObject *co, char *cpathname, struct stat *srcstat)
882 FILE *fp;
883 time_t mtime = srcstat->st_mtime;
884 #ifdef MS_WINDOWS /* since Windows uses different permissions */
885 mode_t mode = srcstat->st_mode & ~S_IEXEC;
886 #else
887 mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
888 #endif
890 fp = open_exclusive(cpathname, mode);
891 if (fp == NULL) {
892 if (Py_VerboseFlag)
893 PySys_WriteStderr(
894 "# can't create %s\n", cpathname);
895 return;
897 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
898 /* First write a 0 for mtime */
899 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
900 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
901 if (fflush(fp) != 0 || ferror(fp)) {
902 if (Py_VerboseFlag)
903 PySys_WriteStderr("# can't write %s\n", cpathname);
904 /* Don't keep partial file */
905 fclose(fp);
906 (void) unlink(cpathname);
907 return;
909 /* Now write the true mtime */
910 fseek(fp, 4L, 0);
911 assert(mtime < LONG_MAX);
912 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
913 fflush(fp);
914 fclose(fp);
915 if (Py_VerboseFlag)
916 PySys_WriteStderr("# wrote %s\n", cpathname);
919 static void
920 update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
922 PyObject *constants, *tmp;
923 Py_ssize_t i, n;
925 if (!_PyString_Eq(co->co_filename, oldname))
926 return;
928 tmp = co->co_filename;
929 co->co_filename = newname;
930 Py_INCREF(co->co_filename);
931 Py_DECREF(tmp);
933 constants = co->co_consts;
934 n = PyTuple_GET_SIZE(constants);
935 for (i = 0; i < n; i++) {
936 tmp = PyTuple_GET_ITEM(constants, i);
937 if (PyCode_Check(tmp))
938 update_code_filenames((PyCodeObject *)tmp,
939 oldname, newname);
943 static int
944 update_compiled_module(PyCodeObject *co, char *pathname)
946 PyObject *oldname, *newname;
948 if (strcmp(PyString_AsString(co->co_filename), pathname) == 0)
949 return 0;
951 newname = PyString_FromString(pathname);
952 if (newname == NULL)
953 return -1;
955 oldname = co->co_filename;
956 Py_INCREF(oldname);
957 update_code_filenames(co, oldname, newname);
958 Py_DECREF(oldname);
959 Py_DECREF(newname);
960 return 1;
963 /* Load a source module from a given file and return its module
964 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
965 byte-compiled file, use that instead. */
967 static PyObject *
968 load_source_module(char *name, char *pathname, FILE *fp)
970 struct stat st;
971 FILE *fpc;
972 char buf[MAXPATHLEN+1];
973 char *cpathname;
974 PyCodeObject *co;
975 PyObject *m;
977 if (fstat(fileno(fp), &st) != 0) {
978 PyErr_Format(PyExc_RuntimeError,
979 "unable to get file status from '%s'",
980 pathname);
981 return NULL;
983 #if SIZEOF_TIME_T > 4
984 /* Python's .pyc timestamp handling presumes that the timestamp fits
985 in 4 bytes. This will be fine until sometime in the year 2038,
986 when a 4-byte signed time_t will overflow.
988 if (st.st_mtime >> 32) {
989 PyErr_SetString(PyExc_OverflowError,
990 "modification time overflows a 4 byte field");
991 return NULL;
993 #endif
994 cpathname = make_compiled_pathname(pathname, buf,
995 (size_t)MAXPATHLEN + 1);
996 if (cpathname != NULL &&
997 (fpc = check_compiled_module(pathname, st.st_mtime, cpathname))) {
998 co = read_compiled_module(cpathname, fpc);
999 fclose(fpc);
1000 if (co == NULL)
1001 return NULL;
1002 if (update_compiled_module(co, pathname) < 0)
1003 return NULL;
1004 if (Py_VerboseFlag)
1005 PySys_WriteStderr("import %s # precompiled from %s\n",
1006 name, cpathname);
1007 pathname = cpathname;
1009 else {
1010 co = parse_source_module(pathname, fp);
1011 if (co == NULL)
1012 return NULL;
1013 if (Py_VerboseFlag)
1014 PySys_WriteStderr("import %s # from %s\n",
1015 name, pathname);
1016 if (cpathname) {
1017 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1018 if (ro == NULL || !PyObject_IsTrue(ro))
1019 write_compiled_module(co, cpathname, &st);
1022 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
1023 Py_DECREF(co);
1025 return m;
1029 /* Forward */
1030 static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
1031 static struct filedescr *find_module(char *, char *, PyObject *,
1032 char *, size_t, FILE **, PyObject **);
1033 static struct _frozen *find_frozen(char *name);
1035 /* Load a package and return its module object WITH INCREMENTED
1036 REFERENCE COUNT */
1038 static PyObject *
1039 load_package(char *name, char *pathname)
1041 PyObject *m, *d;
1042 PyObject *file = NULL;
1043 PyObject *path = NULL;
1044 int err;
1045 char buf[MAXPATHLEN+1];
1046 FILE *fp = NULL;
1047 struct filedescr *fdp;
1049 m = PyImport_AddModule(name);
1050 if (m == NULL)
1051 return NULL;
1052 if (Py_VerboseFlag)
1053 PySys_WriteStderr("import %s # directory %s\n",
1054 name, pathname);
1055 d = PyModule_GetDict(m);
1056 file = PyString_FromString(pathname);
1057 if (file == NULL)
1058 goto error;
1059 path = Py_BuildValue("[O]", file);
1060 if (path == NULL)
1061 goto error;
1062 err = PyDict_SetItemString(d, "__file__", file);
1063 if (err == 0)
1064 err = PyDict_SetItemString(d, "__path__", path);
1065 if (err != 0)
1066 goto error;
1067 buf[0] = '\0';
1068 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
1069 if (fdp == NULL) {
1070 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1071 PyErr_Clear();
1072 Py_INCREF(m);
1074 else
1075 m = NULL;
1076 goto cleanup;
1078 m = load_module(name, fp, buf, fdp->type, NULL);
1079 if (fp != NULL)
1080 fclose(fp);
1081 goto cleanup;
1083 error:
1084 m = NULL;
1085 cleanup:
1086 Py_XDECREF(path);
1087 Py_XDECREF(file);
1088 return m;
1092 /* Helper to test for built-in module */
1094 static int
1095 is_builtin(char *name)
1097 int i;
1098 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1099 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1100 if (PyImport_Inittab[i].initfunc == NULL)
1101 return -1;
1102 else
1103 return 1;
1106 return 0;
1110 /* Return an importer object for a sys.path/pkg.__path__ item 'p',
1111 possibly by fetching it from the path_importer_cache dict. If it
1112 wasn't yet cached, traverse path_hooks until a hook is found
1113 that can handle the path item. Return None if no hook could;
1114 this tells our caller it should fall back to the builtin
1115 import mechanism. Cache the result in path_importer_cache.
1116 Returns a borrowed reference. */
1118 static PyObject *
1119 get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
1120 PyObject *p)
1122 PyObject *importer;
1123 Py_ssize_t j, nhooks;
1125 /* These conditions are the caller's responsibility: */
1126 assert(PyList_Check(path_hooks));
1127 assert(PyDict_Check(path_importer_cache));
1129 nhooks = PyList_Size(path_hooks);
1130 if (nhooks < 0)
1131 return NULL; /* Shouldn't happen */
1133 importer = PyDict_GetItem(path_importer_cache, p);
1134 if (importer != NULL)
1135 return importer;
1137 /* set path_importer_cache[p] to None to avoid recursion */
1138 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1139 return NULL;
1141 for (j = 0; j < nhooks; j++) {
1142 PyObject *hook = PyList_GetItem(path_hooks, j);
1143 if (hook == NULL)
1144 return NULL;
1145 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1146 if (importer != NULL)
1147 break;
1149 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1150 return NULL;
1152 PyErr_Clear();
1154 if (importer == NULL) {
1155 importer = PyObject_CallFunctionObjArgs(
1156 (PyObject *)&PyNullImporter_Type, p, NULL
1158 if (importer == NULL) {
1159 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1160 PyErr_Clear();
1161 return Py_None;
1165 if (importer != NULL) {
1166 int err = PyDict_SetItem(path_importer_cache, p, importer);
1167 Py_DECREF(importer);
1168 if (err != 0)
1169 return NULL;
1171 return importer;
1174 PyAPI_FUNC(PyObject *)
1175 PyImport_GetImporter(PyObject *path) {
1176 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
1178 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1179 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1180 importer = get_path_importer(path_importer_cache,
1181 path_hooks, path);
1184 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1185 return importer;
1188 /* Search the path (default sys.path) for a module. Return the
1189 corresponding filedescr struct, and (via return arguments) the
1190 pathname and an open file. Return NULL if the module is not found. */
1192 #ifdef MS_COREDLL
1193 extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
1194 char *, Py_ssize_t);
1195 #endif
1197 static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
1198 static int find_init_module(char *); /* Forward */
1199 static struct filedescr importhookdescr = {"", "", IMP_HOOK};
1201 static struct filedescr *
1202 find_module(char *fullname, char *subname, PyObject *path, char *buf,
1203 size_t buflen, FILE **p_fp, PyObject **p_loader)
1205 Py_ssize_t i, npath;
1206 size_t len, namelen;
1207 struct filedescr *fdp = NULL;
1208 char *filemode;
1209 FILE *fp = NULL;
1210 PyObject *path_hooks, *path_importer_cache;
1211 #ifndef RISCOS
1212 struct stat statbuf;
1213 #endif
1214 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1215 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1216 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
1217 char name[MAXPATHLEN+1];
1218 #if defined(PYOS_OS2)
1219 size_t saved_len;
1220 size_t saved_namelen;
1221 char *saved_buf = NULL;
1222 #endif
1223 if (p_loader != NULL)
1224 *p_loader = NULL;
1226 if (strlen(subname) > MAXPATHLEN) {
1227 PyErr_SetString(PyExc_OverflowError,
1228 "module name is too long");
1229 return NULL;
1231 strcpy(name, subname);
1233 /* sys.meta_path import hook */
1234 if (p_loader != NULL) {
1235 PyObject *meta_path;
1237 meta_path = PySys_GetObject("meta_path");
1238 if (meta_path == NULL || !PyList_Check(meta_path)) {
1239 PyErr_SetString(PyExc_ImportError,
1240 "sys.meta_path must be a list of "
1241 "import hooks");
1242 return NULL;
1244 Py_INCREF(meta_path); /* zap guard */
1245 npath = PyList_Size(meta_path);
1246 for (i = 0; i < npath; i++) {
1247 PyObject *loader;
1248 PyObject *hook = PyList_GetItem(meta_path, i);
1249 loader = PyObject_CallMethod(hook, "find_module",
1250 "sO", fullname,
1251 path != NULL ?
1252 path : Py_None);
1253 if (loader == NULL) {
1254 Py_DECREF(meta_path);
1255 return NULL; /* true error */
1257 if (loader != Py_None) {
1258 /* a loader was found */
1259 *p_loader = loader;
1260 Py_DECREF(meta_path);
1261 return &importhookdescr;
1263 Py_DECREF(loader);
1265 Py_DECREF(meta_path);
1268 if (path != NULL && PyString_Check(path)) {
1269 /* The only type of submodule allowed inside a "frozen"
1270 package are other frozen modules or packages. */
1271 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
1272 PyErr_SetString(PyExc_ImportError,
1273 "full frozen module name too long");
1274 return NULL;
1276 strcpy(buf, PyString_AsString(path));
1277 strcat(buf, ".");
1278 strcat(buf, name);
1279 strcpy(name, buf);
1280 if (find_frozen(name) != NULL) {
1281 strcpy(buf, name);
1282 return &fd_frozen;
1284 PyErr_Format(PyExc_ImportError,
1285 "No frozen submodule named %.200s", name);
1286 return NULL;
1288 if (path == NULL) {
1289 if (is_builtin(name)) {
1290 strcpy(buf, name);
1291 return &fd_builtin;
1293 if ((find_frozen(name)) != NULL) {
1294 strcpy(buf, name);
1295 return &fd_frozen;
1298 #ifdef MS_COREDLL
1299 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1300 if (fp != NULL) {
1301 *p_fp = fp;
1302 return fdp;
1304 #endif
1305 path = PySys_GetObject("path");
1307 if (path == NULL || !PyList_Check(path)) {
1308 PyErr_SetString(PyExc_ImportError,
1309 "sys.path must be a list of directory names");
1310 return NULL;
1313 path_hooks = PySys_GetObject("path_hooks");
1314 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
1315 PyErr_SetString(PyExc_ImportError,
1316 "sys.path_hooks must be a list of "
1317 "import hooks");
1318 return NULL;
1320 path_importer_cache = PySys_GetObject("path_importer_cache");
1321 if (path_importer_cache == NULL ||
1322 !PyDict_Check(path_importer_cache)) {
1323 PyErr_SetString(PyExc_ImportError,
1324 "sys.path_importer_cache must be a dict");
1325 return NULL;
1328 npath = PyList_Size(path);
1329 namelen = strlen(name);
1330 for (i = 0; i < npath; i++) {
1331 PyObject *copy = NULL;
1332 PyObject *v = PyList_GetItem(path, i);
1333 if (!v)
1334 return NULL;
1335 #ifdef Py_USING_UNICODE
1336 if (PyUnicode_Check(v)) {
1337 copy = PyUnicode_Encode(PyUnicode_AS_UNICODE(v),
1338 PyUnicode_GET_SIZE(v), Py_FileSystemDefaultEncoding, NULL);
1339 if (copy == NULL)
1340 return NULL;
1341 v = copy;
1343 else
1344 #endif
1345 if (!PyString_Check(v))
1346 continue;
1347 len = PyString_GET_SIZE(v);
1348 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1349 Py_XDECREF(copy);
1350 continue; /* Too long */
1352 strcpy(buf, PyString_AS_STRING(v));
1353 if (strlen(buf) != len) {
1354 Py_XDECREF(copy);
1355 continue; /* v contains '\0' */
1358 /* sys.path_hooks import hook */
1359 if (p_loader != NULL) {
1360 PyObject *importer;
1362 importer = get_path_importer(path_importer_cache,
1363 path_hooks, v);
1364 if (importer == NULL) {
1365 Py_XDECREF(copy);
1366 return NULL;
1368 /* Note: importer is a borrowed reference */
1369 if (importer != Py_None) {
1370 PyObject *loader;
1371 loader = PyObject_CallMethod(importer,
1372 "find_module",
1373 "s", fullname);
1374 Py_XDECREF(copy);
1375 if (loader == NULL)
1376 return NULL; /* error */
1377 if (loader != Py_None) {
1378 /* a loader was found */
1379 *p_loader = loader;
1380 return &importhookdescr;
1382 Py_DECREF(loader);
1383 continue;
1386 /* no hook was found, use builtin import */
1388 if (len > 0 && buf[len-1] != SEP
1389 #ifdef ALTSEP
1390 && buf[len-1] != ALTSEP
1391 #endif
1393 buf[len++] = SEP;
1394 strcpy(buf+len, name);
1395 len += namelen;
1397 /* Check for package import (buf holds a directory name,
1398 and there's an __init__ module in that directory */
1399 #ifdef HAVE_STAT
1400 if (stat(buf, &statbuf) == 0 && /* it exists */
1401 S_ISDIR(statbuf.st_mode) && /* it's a directory */
1402 case_ok(buf, len, namelen, name)) { /* case matches */
1403 if (find_init_module(buf)) { /* and has __init__.py */
1404 Py_XDECREF(copy);
1405 return &fd_package;
1407 else {
1408 char warnstr[MAXPATHLEN+80];
1409 sprintf(warnstr, "Not importing directory "
1410 "'%.*s': missing __init__.py",
1411 MAXPATHLEN, buf);
1412 if (PyErr_Warn(PyExc_ImportWarning,
1413 warnstr)) {
1414 Py_XDECREF(copy);
1415 return NULL;
1419 #else
1420 /* XXX How are you going to test for directories? */
1421 #ifdef RISCOS
1422 if (isdir(buf) &&
1423 case_ok(buf, len, namelen, name)) {
1424 if (find_init_module(buf)) {
1425 Py_XDECREF(copy);
1426 return &fd_package;
1428 else {
1429 char warnstr[MAXPATHLEN+80];
1430 sprintf(warnstr, "Not importing directory "
1431 "'%.*s': missing __init__.py",
1432 MAXPATHLEN, buf);
1433 if (PyErr_Warn(PyExc_ImportWarning,
1434 warnstr)) {
1435 Py_XDECREF(copy);
1436 return NULL;
1439 #endif
1440 #endif
1441 #if defined(PYOS_OS2)
1442 /* take a snapshot of the module spec for restoration
1443 * after the 8 character DLL hackery
1445 saved_buf = strdup(buf);
1446 saved_len = len;
1447 saved_namelen = namelen;
1448 #endif /* PYOS_OS2 */
1449 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
1450 #if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
1451 /* OS/2 limits DLLs to 8 character names (w/o
1452 extension)
1453 * so if the name is longer than that and its a
1454 * dynamically loaded module we're going to try,
1455 * truncate the name before trying
1457 if (strlen(subname) > 8) {
1458 /* is this an attempt to load a C extension? */
1459 const struct filedescr *scan;
1460 scan = _PyImport_DynLoadFiletab;
1461 while (scan->suffix != NULL) {
1462 if (!strcmp(scan->suffix, fdp->suffix))
1463 break;
1464 else
1465 scan++;
1467 if (scan->suffix != NULL) {
1468 /* yes, so truncate the name */
1469 namelen = 8;
1470 len -= strlen(subname) - namelen;
1471 buf[len] = '\0';
1474 #endif /* PYOS_OS2 */
1475 strcpy(buf+len, fdp->suffix);
1476 if (Py_VerboseFlag > 1)
1477 PySys_WriteStderr("# trying %s\n", buf);
1478 filemode = fdp->mode;
1479 if (filemode[0] == 'U')
1480 filemode = "r" PY_STDIOTEXTMODE;
1481 fp = fopen(buf, filemode);
1482 if (fp != NULL) {
1483 if (case_ok(buf, len, namelen, name))
1484 break;
1485 else { /* continue search */
1486 fclose(fp);
1487 fp = NULL;
1490 #if defined(PYOS_OS2)
1491 /* restore the saved snapshot */
1492 strcpy(buf, saved_buf);
1493 len = saved_len;
1494 namelen = saved_namelen;
1495 #endif
1497 #if defined(PYOS_OS2)
1498 /* don't need/want the module name snapshot anymore */
1499 if (saved_buf)
1501 free(saved_buf);
1502 saved_buf = NULL;
1504 #endif
1505 Py_XDECREF(copy);
1506 if (fp != NULL)
1507 break;
1509 if (fp == NULL) {
1510 PyErr_Format(PyExc_ImportError,
1511 "No module named %.200s", name);
1512 return NULL;
1514 *p_fp = fp;
1515 return fdp;
1518 /* Helpers for main.c
1519 * Find the source file corresponding to a named module
1521 struct filedescr *
1522 _PyImport_FindModule(const char *name, PyObject *path, char *buf,
1523 size_t buflen, FILE **p_fp, PyObject **p_loader)
1525 return find_module((char *) name, (char *) name, path,
1526 buf, buflen, p_fp, p_loader);
1529 PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1531 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
1534 /* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
1535 * The arguments here are tricky, best shown by example:
1536 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1537 * ^ ^ ^ ^
1538 * |--------------------- buf ---------------------|
1539 * |------------------- len ------------------|
1540 * |------ name -------|
1541 * |----- namelen -----|
1542 * buf is the full path, but len only counts up to (& exclusive of) the
1543 * extension. name is the module name, also exclusive of extension.
1545 * We've already done a successful stat() or fopen() on buf, so know that
1546 * there's some match, possibly case-insensitive.
1548 * case_ok() is to return 1 if there's a case-sensitive match for
1549 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1550 * exists.
1552 * case_ok() is used to implement case-sensitive import semantics even
1553 * on platforms with case-insensitive filesystems. It's trivial to implement
1554 * for case-sensitive filesystems. It's pretty much a cross-platform
1555 * nightmare for systems with case-insensitive filesystems.
1558 /* First we may need a pile of platform-specific header files; the sequence
1559 * of #if's here should match the sequence in the body of case_ok().
1561 #if defined(MS_WINDOWS)
1562 #include <windows.h>
1564 #elif defined(DJGPP)
1565 #include <dir.h>
1567 #elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
1568 #include <sys/types.h>
1569 #include <dirent.h>
1571 #elif defined(PYOS_OS2)
1572 #define INCL_DOS
1573 #define INCL_DOSERRORS
1574 #define INCL_NOPMAPI
1575 #include <os2.h>
1577 #elif defined(RISCOS)
1578 #include "oslib/osfscontrol.h"
1579 #endif
1581 static int
1582 case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
1584 /* Pick a platform-specific implementation; the sequence of #if's here should
1585 * match the sequence just above.
1588 /* MS_WINDOWS */
1589 #if defined(MS_WINDOWS)
1590 WIN32_FIND_DATA data;
1591 HANDLE h;
1593 if (Py_GETENV("PYTHONCASEOK") != NULL)
1594 return 1;
1596 h = FindFirstFile(buf, &data);
1597 if (h == INVALID_HANDLE_VALUE) {
1598 PyErr_Format(PyExc_NameError,
1599 "Can't find file for module %.100s\n(filename %.300s)",
1600 name, buf);
1601 return 0;
1603 FindClose(h);
1604 return strncmp(data.cFileName, name, namelen) == 0;
1606 /* DJGPP */
1607 #elif defined(DJGPP)
1608 struct ffblk ffblk;
1609 int done;
1611 if (Py_GETENV("PYTHONCASEOK") != NULL)
1612 return 1;
1614 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1615 if (done) {
1616 PyErr_Format(PyExc_NameError,
1617 "Can't find file for module %.100s\n(filename %.300s)",
1618 name, buf);
1619 return 0;
1621 return strncmp(ffblk.ff_name, name, namelen) == 0;
1623 /* new-fangled macintosh (macosx) or Cygwin */
1624 #elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
1625 DIR *dirp;
1626 struct dirent *dp;
1627 char dirname[MAXPATHLEN + 1];
1628 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
1630 if (Py_GETENV("PYTHONCASEOK") != NULL)
1631 return 1;
1633 /* Copy the dir component into dirname; substitute "." if empty */
1634 if (dirlen <= 0) {
1635 dirname[0] = '.';
1636 dirname[1] = '\0';
1638 else {
1639 assert(dirlen <= MAXPATHLEN);
1640 memcpy(dirname, buf, dirlen);
1641 dirname[dirlen] = '\0';
1643 /* Open the directory and search the entries for an exact match. */
1644 dirp = opendir(dirname);
1645 if (dirp) {
1646 char *nameWithExt = buf + len - namelen;
1647 while ((dp = readdir(dirp)) != NULL) {
1648 const int thislen =
1649 #ifdef _DIRENT_HAVE_D_NAMELEN
1650 dp->d_namlen;
1651 #else
1652 strlen(dp->d_name);
1653 #endif
1654 if (thislen >= namelen &&
1655 strcmp(dp->d_name, nameWithExt) == 0) {
1656 (void)closedir(dirp);
1657 return 1; /* Found */
1660 (void)closedir(dirp);
1662 return 0 ; /* Not found */
1664 /* RISC OS */
1665 #elif defined(RISCOS)
1666 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1667 char buf2[MAXPATHLEN+2];
1668 char *nameWithExt = buf+len-namelen;
1669 int canonlen;
1670 os_error *e;
1672 if (Py_GETENV("PYTHONCASEOK") != NULL)
1673 return 1;
1675 /* workaround:
1676 append wildcard, otherwise case of filename wouldn't be touched */
1677 strcpy(buf2, buf);
1678 strcat(buf2, "*");
1680 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1681 canonlen = MAXPATHLEN+1-canonlen;
1682 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1683 return 0;
1684 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1685 return 1; /* match */
1687 return 0;
1689 /* OS/2 */
1690 #elif defined(PYOS_OS2)
1691 HDIR hdir = 1;
1692 ULONG srchcnt = 1;
1693 FILEFINDBUF3 ffbuf;
1694 APIRET rc;
1696 if (Py_GETENV("PYTHONCASEOK") != NULL)
1697 return 1;
1699 rc = DosFindFirst(buf,
1700 &hdir,
1701 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1702 &ffbuf, sizeof(ffbuf),
1703 &srchcnt,
1704 FIL_STANDARD);
1705 if (rc != NO_ERROR)
1706 return 0;
1707 return strncmp(ffbuf.achName, name, namelen) == 0;
1709 /* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1710 #else
1711 return 1;
1713 #endif
1717 #ifdef HAVE_STAT
1718 /* Helper to look for __init__.py or __init__.py[co] in potential package */
1719 static int
1720 find_init_module(char *buf)
1722 const size_t save_len = strlen(buf);
1723 size_t i = save_len;
1724 char *pname; /* pointer to start of __init__ */
1725 struct stat statbuf;
1727 /* For calling case_ok(buf, len, namelen, name):
1728 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1729 * ^ ^ ^ ^
1730 * |--------------------- buf ---------------------|
1731 * |------------------- len ------------------|
1732 * |------ name -------|
1733 * |----- namelen -----|
1735 if (save_len + 13 >= MAXPATHLEN)
1736 return 0;
1737 buf[i++] = SEP;
1738 pname = buf + i;
1739 strcpy(pname, "__init__.py");
1740 if (stat(buf, &statbuf) == 0) {
1741 if (case_ok(buf,
1742 save_len + 9, /* len("/__init__") */
1743 8, /* len("__init__") */
1744 pname)) {
1745 buf[save_len] = '\0';
1746 return 1;
1749 i += strlen(pname);
1750 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
1751 if (stat(buf, &statbuf) == 0) {
1752 if (case_ok(buf,
1753 save_len + 9, /* len("/__init__") */
1754 8, /* len("__init__") */
1755 pname)) {
1756 buf[save_len] = '\0';
1757 return 1;
1760 buf[save_len] = '\0';
1761 return 0;
1764 #else
1766 #ifdef RISCOS
1767 static int
1768 find_init_module(buf)
1769 char *buf;
1771 int save_len = strlen(buf);
1772 int i = save_len;
1774 if (save_len + 13 >= MAXPATHLEN)
1775 return 0;
1776 buf[i++] = SEP;
1777 strcpy(buf+i, "__init__/py");
1778 if (isfile(buf)) {
1779 buf[save_len] = '\0';
1780 return 1;
1783 if (Py_OptimizeFlag)
1784 strcpy(buf+i, "o");
1785 else
1786 strcpy(buf+i, "c");
1787 if (isfile(buf)) {
1788 buf[save_len] = '\0';
1789 return 1;
1791 buf[save_len] = '\0';
1792 return 0;
1794 #endif /*RISCOS*/
1796 #endif /* HAVE_STAT */
1799 static int init_builtin(char *); /* Forward */
1801 /* Load an external module using the default search path and return
1802 its module object WITH INCREMENTED REFERENCE COUNT */
1804 static PyObject *
1805 load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader)
1807 PyObject *modules;
1808 PyObject *m;
1809 int err;
1811 /* First check that there's an open file (if we need one) */
1812 switch (type) {
1813 case PY_SOURCE:
1814 case PY_COMPILED:
1815 if (fp == NULL) {
1816 PyErr_Format(PyExc_ValueError,
1817 "file object required for import (type code %d)",
1818 type);
1819 return NULL;
1823 switch (type) {
1825 case PY_SOURCE:
1826 m = load_source_module(name, buf, fp);
1827 break;
1829 case PY_COMPILED:
1830 m = load_compiled_module(name, buf, fp);
1831 break;
1833 #ifdef HAVE_DYNAMIC_LOADING
1834 case C_EXTENSION:
1835 m = _PyImport_LoadDynamicModule(name, buf, fp);
1836 break;
1837 #endif
1839 case PKG_DIRECTORY:
1840 m = load_package(name, buf);
1841 break;
1843 case C_BUILTIN:
1844 case PY_FROZEN:
1845 if (buf != NULL && buf[0] != '\0')
1846 name = buf;
1847 if (type == C_BUILTIN)
1848 err = init_builtin(name);
1849 else
1850 err = PyImport_ImportFrozenModule(name);
1851 if (err < 0)
1852 return NULL;
1853 if (err == 0) {
1854 PyErr_Format(PyExc_ImportError,
1855 "Purported %s module %.200s not found",
1856 type == C_BUILTIN ?
1857 "builtin" : "frozen",
1858 name);
1859 return NULL;
1861 modules = PyImport_GetModuleDict();
1862 m = PyDict_GetItemString(modules, name);
1863 if (m == NULL) {
1864 PyErr_Format(
1865 PyExc_ImportError,
1866 "%s module %.200s not properly initialized",
1867 type == C_BUILTIN ?
1868 "builtin" : "frozen",
1869 name);
1870 return NULL;
1872 Py_INCREF(m);
1873 break;
1875 case IMP_HOOK: {
1876 if (loader == NULL) {
1877 PyErr_SetString(PyExc_ImportError,
1878 "import hook without loader");
1879 return NULL;
1881 m = PyObject_CallMethod(loader, "load_module", "s", name);
1882 break;
1885 default:
1886 PyErr_Format(PyExc_ImportError,
1887 "Don't know how to import %.200s (type code %d)",
1888 name, type);
1889 m = NULL;
1893 return m;
1897 /* Initialize a built-in module.
1898 Return 1 for success, 0 if the module is not found, and -1 with
1899 an exception set if the initialization failed. */
1901 static int
1902 init_builtin(char *name)
1904 struct _inittab *p;
1906 if (_PyImport_FindExtension(name, name) != NULL)
1907 return 1;
1909 for (p = PyImport_Inittab; p->name != NULL; p++) {
1910 if (strcmp(name, p->name) == 0) {
1911 if (p->initfunc == NULL) {
1912 PyErr_Format(PyExc_ImportError,
1913 "Cannot re-init internal module %.200s",
1914 name);
1915 return -1;
1917 if (Py_VerboseFlag)
1918 PySys_WriteStderr("import %s # builtin\n", name);
1919 (*p->initfunc)();
1920 if (PyErr_Occurred())
1921 return -1;
1922 if (_PyImport_FixupExtension(name, name) == NULL)
1923 return -1;
1924 return 1;
1927 return 0;
1931 /* Frozen modules */
1933 static struct _frozen *
1934 find_frozen(char *name)
1936 struct _frozen *p;
1938 for (p = PyImport_FrozenModules; ; p++) {
1939 if (p->name == NULL)
1940 return NULL;
1941 if (strcmp(p->name, name) == 0)
1942 break;
1944 return p;
1947 static PyObject *
1948 get_frozen_object(char *name)
1950 struct _frozen *p = find_frozen(name);
1951 int size;
1953 if (p == NULL) {
1954 PyErr_Format(PyExc_ImportError,
1955 "No such frozen object named %.200s",
1956 name);
1957 return NULL;
1959 if (p->code == NULL) {
1960 PyErr_Format(PyExc_ImportError,
1961 "Excluded frozen object named %.200s",
1962 name);
1963 return NULL;
1965 size = p->size;
1966 if (size < 0)
1967 size = -size;
1968 return PyMarshal_ReadObjectFromString((char *)p->code, size);
1971 /* Initialize a frozen module.
1972 Return 1 for succes, 0 if the module is not found, and -1 with
1973 an exception set if the initialization failed.
1974 This function is also used from frozenmain.c */
1977 PyImport_ImportFrozenModule(char *name)
1979 struct _frozen *p = find_frozen(name);
1980 PyObject *co;
1981 PyObject *m;
1982 int ispackage;
1983 int size;
1985 if (p == NULL)
1986 return 0;
1987 if (p->code == NULL) {
1988 PyErr_Format(PyExc_ImportError,
1989 "Excluded frozen object named %.200s",
1990 name);
1991 return -1;
1993 size = p->size;
1994 ispackage = (size < 0);
1995 if (ispackage)
1996 size = -size;
1997 if (Py_VerboseFlag)
1998 PySys_WriteStderr("import %s # frozen%s\n",
1999 name, ispackage ? " package" : "");
2000 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
2001 if (co == NULL)
2002 return -1;
2003 if (!PyCode_Check(co)) {
2004 PyErr_Format(PyExc_TypeError,
2005 "frozen object %.200s is not a code object",
2006 name);
2007 goto err_return;
2009 if (ispackage) {
2010 /* Set __path__ to the package name */
2011 PyObject *d, *s;
2012 int err;
2013 m = PyImport_AddModule(name);
2014 if (m == NULL)
2015 goto err_return;
2016 d = PyModule_GetDict(m);
2017 s = PyString_InternFromString(name);
2018 if (s == NULL)
2019 goto err_return;
2020 err = PyDict_SetItemString(d, "__path__", s);
2021 Py_DECREF(s);
2022 if (err != 0)
2023 goto err_return;
2025 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
2026 if (m == NULL)
2027 goto err_return;
2028 Py_DECREF(co);
2029 Py_DECREF(m);
2030 return 1;
2031 err_return:
2032 Py_DECREF(co);
2033 return -1;
2037 /* Import a module, either built-in, frozen, or external, and return
2038 its module object WITH INCREMENTED REFERENCE COUNT */
2040 PyObject *
2041 PyImport_ImportModule(const char *name)
2043 PyObject *pname;
2044 PyObject *result;
2046 pname = PyString_FromString(name);
2047 if (pname == NULL)
2048 return NULL;
2049 result = PyImport_Import(pname);
2050 Py_DECREF(pname);
2051 return result;
2054 /* Import a module without blocking
2056 * At first it tries to fetch the module from sys.modules. If the module was
2057 * never loaded before it loads it with PyImport_ImportModule() unless another
2058 * thread holds the import lock. In the latter case the function raises an
2059 * ImportError instead of blocking.
2061 * Returns the module object with incremented ref count.
2063 PyObject *
2064 PyImport_ImportModuleNoBlock(const char *name)
2066 PyObject *result;
2067 PyObject *modules;
2068 long me;
2070 /* Try to get the module from sys.modules[name] */
2071 modules = PyImport_GetModuleDict();
2072 if (modules == NULL)
2073 return NULL;
2075 result = PyDict_GetItemString(modules, name);
2076 if (result != NULL) {
2077 Py_INCREF(result);
2078 return result;
2080 else {
2081 PyErr_Clear();
2083 #ifdef WITH_THREAD
2084 /* check the import lock
2085 * me might be -1 but I ignore the error here, the lock function
2086 * takes care of the problem */
2087 me = PyThread_get_thread_ident();
2088 if (import_lock_thread == -1 || import_lock_thread == me) {
2089 /* no thread or me is holding the lock */
2090 return PyImport_ImportModule(name);
2092 else {
2093 PyErr_Format(PyExc_ImportError,
2094 "Failed to import %.200s because the import lock"
2095 "is held by another thread.",
2096 name);
2097 return NULL;
2099 #else
2100 return PyImport_ImportModule(name);
2101 #endif
2104 /* Forward declarations for helper routines */
2105 static PyObject *get_parent(PyObject *globals, char *buf,
2106 Py_ssize_t *p_buflen, int level);
2107 static PyObject *load_next(PyObject *mod, PyObject *altmod,
2108 char **p_name, char *buf, Py_ssize_t *p_buflen);
2109 static int mark_miss(char *name);
2110 static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
2111 char *buf, Py_ssize_t buflen, int recursive);
2112 static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
2114 /* The Magnum Opus of dotted-name import :-) */
2116 static PyObject *
2117 import_module_level(char *name, PyObject *globals, PyObject *locals,
2118 PyObject *fromlist, int level)
2120 char buf[MAXPATHLEN+1];
2121 Py_ssize_t buflen = 0;
2122 PyObject *parent, *head, *next, *tail;
2124 if (strchr(name, '/') != NULL
2125 #ifdef MS_WINDOWS
2126 || strchr(name, '\\') != NULL
2127 #endif
2129 PyErr_SetString(PyExc_ImportError,
2130 "Import by filename is not supported.");
2131 return NULL;
2134 parent = get_parent(globals, buf, &buflen, level);
2135 if (parent == NULL)
2136 return NULL;
2138 head = load_next(parent, Py_None, &name, buf, &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 lock_import();
2189 result = import_module_level(name, globals, locals, fromlist, level);
2190 if (unlock_import() < 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 PyErr_Clear();
2754 builtins = PyImport_ImportModuleLevel("__builtin__",
2755 NULL, NULL, NULL, 0);
2756 if (builtins == NULL)
2757 return NULL;
2758 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2759 if (globals == NULL)
2760 goto err;
2763 /* Get the __import__ function from the builtins */
2764 if (PyDict_Check(builtins)) {
2765 import = PyObject_GetItem(builtins, import_str);
2766 if (import == NULL)
2767 PyErr_SetObject(PyExc_KeyError, import_str);
2769 else
2770 import = PyObject_GetAttr(builtins, import_str);
2771 if (import == NULL)
2772 goto err;
2774 /* Call the __import__ function with the proper argument list
2775 * Always use absolute import here. */
2776 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
2777 globals, silly_list, 0, NULL);
2779 err:
2780 Py_XDECREF(globals);
2781 Py_XDECREF(builtins);
2782 Py_XDECREF(import);
2784 return r;
2788 /* Module 'imp' provides Python access to the primitives used for
2789 importing modules.
2792 static PyObject *
2793 imp_get_magic(PyObject *self, PyObject *noargs)
2795 char buf[4];
2797 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2798 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2799 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2800 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
2802 return PyString_FromStringAndSize(buf, 4);
2805 static PyObject *
2806 imp_get_suffixes(PyObject *self, PyObject *noargs)
2808 PyObject *list;
2809 struct filedescr *fdp;
2811 list = PyList_New(0);
2812 if (list == NULL)
2813 return NULL;
2814 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2815 PyObject *item = Py_BuildValue("ssi",
2816 fdp->suffix, fdp->mode, fdp->type);
2817 if (item == NULL) {
2818 Py_DECREF(list);
2819 return NULL;
2821 if (PyList_Append(list, item) < 0) {
2822 Py_DECREF(list);
2823 Py_DECREF(item);
2824 return NULL;
2826 Py_DECREF(item);
2828 return list;
2831 static PyObject *
2832 call_find_module(char *name, PyObject *path)
2834 extern int fclose(FILE *);
2835 PyObject *fob, *ret;
2836 struct filedescr *fdp;
2837 char pathname[MAXPATHLEN+1];
2838 FILE *fp = NULL;
2840 pathname[0] = '\0';
2841 if (path == Py_None)
2842 path = NULL;
2843 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
2844 if (fdp == NULL)
2845 return NULL;
2846 if (fp != NULL) {
2847 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
2848 if (fob == NULL) {
2849 fclose(fp);
2850 return NULL;
2853 else {
2854 fob = Py_None;
2855 Py_INCREF(fob);
2857 ret = Py_BuildValue("Os(ssi)",
2858 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
2859 Py_DECREF(fob);
2860 return ret;
2863 static PyObject *
2864 imp_find_module(PyObject *self, PyObject *args)
2866 char *name;
2867 PyObject *path = NULL;
2868 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
2869 return NULL;
2870 return call_find_module(name, path);
2873 static PyObject *
2874 imp_init_builtin(PyObject *self, PyObject *args)
2876 char *name;
2877 int ret;
2878 PyObject *m;
2879 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
2880 return NULL;
2881 ret = init_builtin(name);
2882 if (ret < 0)
2883 return NULL;
2884 if (ret == 0) {
2885 Py_INCREF(Py_None);
2886 return Py_None;
2888 m = PyImport_AddModule(name);
2889 Py_XINCREF(m);
2890 return m;
2893 static PyObject *
2894 imp_init_frozen(PyObject *self, PyObject *args)
2896 char *name;
2897 int ret;
2898 PyObject *m;
2899 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
2900 return NULL;
2901 ret = PyImport_ImportFrozenModule(name);
2902 if (ret < 0)
2903 return NULL;
2904 if (ret == 0) {
2905 Py_INCREF(Py_None);
2906 return Py_None;
2908 m = PyImport_AddModule(name);
2909 Py_XINCREF(m);
2910 return m;
2913 static PyObject *
2914 imp_get_frozen_object(PyObject *self, PyObject *args)
2916 char *name;
2918 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
2919 return NULL;
2920 return get_frozen_object(name);
2923 static PyObject *
2924 imp_is_builtin(PyObject *self, PyObject *args)
2926 char *name;
2927 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
2928 return NULL;
2929 return PyInt_FromLong(is_builtin(name));
2932 static PyObject *
2933 imp_is_frozen(PyObject *self, PyObject *args)
2935 char *name;
2936 struct _frozen *p;
2937 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
2938 return NULL;
2939 p = find_frozen(name);
2940 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
2943 static FILE *
2944 get_file(char *pathname, PyObject *fob, char *mode)
2946 FILE *fp;
2947 if (fob == NULL) {
2948 if (mode[0] == 'U')
2949 mode = "r" PY_STDIOTEXTMODE;
2950 fp = fopen(pathname, mode);
2951 if (fp == NULL)
2952 PyErr_SetFromErrno(PyExc_IOError);
2954 else {
2955 fp = PyFile_AsFile(fob);
2956 if (fp == NULL)
2957 PyErr_SetString(PyExc_ValueError,
2958 "bad/closed file object");
2960 return fp;
2963 static PyObject *
2964 imp_load_compiled(PyObject *self, PyObject *args)
2966 char *name;
2967 char *pathname;
2968 PyObject *fob = NULL;
2969 PyObject *m;
2970 FILE *fp;
2971 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
2972 &PyFile_Type, &fob))
2973 return NULL;
2974 fp = get_file(pathname, fob, "rb");
2975 if (fp == NULL)
2976 return NULL;
2977 m = load_compiled_module(name, pathname, fp);
2978 if (fob == NULL)
2979 fclose(fp);
2980 return m;
2983 #ifdef HAVE_DYNAMIC_LOADING
2985 static PyObject *
2986 imp_load_dynamic(PyObject *self, PyObject *args)
2988 char *name;
2989 char *pathname;
2990 PyObject *fob = NULL;
2991 PyObject *m;
2992 FILE *fp = NULL;
2993 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
2994 &PyFile_Type, &fob))
2995 return NULL;
2996 if (fob) {
2997 fp = get_file(pathname, fob, "r");
2998 if (fp == NULL)
2999 return NULL;
3001 m = _PyImport_LoadDynamicModule(name, pathname, fp);
3002 return m;
3005 #endif /* HAVE_DYNAMIC_LOADING */
3007 static PyObject *
3008 imp_load_source(PyObject *self, PyObject *args)
3010 char *name;
3011 char *pathname;
3012 PyObject *fob = NULL;
3013 PyObject *m;
3014 FILE *fp;
3015 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
3016 &PyFile_Type, &fob))
3017 return NULL;
3018 fp = get_file(pathname, fob, "r");
3019 if (fp == NULL)
3020 return NULL;
3021 m = load_source_module(name, pathname, fp);
3022 if (fob == NULL)
3023 fclose(fp);
3024 return m;
3027 static PyObject *
3028 imp_load_module(PyObject *self, PyObject *args)
3030 char *name;
3031 PyObject *fob;
3032 char *pathname;
3033 char *suffix; /* Unused */
3034 char *mode;
3035 int type;
3036 FILE *fp;
3038 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
3039 &name, &fob, &pathname,
3040 &suffix, &mode, &type))
3041 return NULL;
3042 if (*mode) {
3043 /* Mode must start with 'r' or 'U' and must not contain '+'.
3044 Implicit in this test is the assumption that the mode
3045 may contain other modifiers like 'b' or 't'. */
3047 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
3048 PyErr_Format(PyExc_ValueError,
3049 "invalid file open mode %.200s", mode);
3050 return NULL;
3053 if (fob == Py_None)
3054 fp = NULL;
3055 else {
3056 if (!PyFile_Check(fob)) {
3057 PyErr_SetString(PyExc_ValueError,
3058 "load_module arg#2 should be a file or None");
3059 return NULL;
3061 fp = get_file(pathname, fob, mode);
3062 if (fp == NULL)
3063 return NULL;
3065 return load_module(name, fp, pathname, type, NULL);
3068 static PyObject *
3069 imp_load_package(PyObject *self, PyObject *args)
3071 char *name;
3072 char *pathname;
3073 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
3074 return NULL;
3075 return load_package(name, pathname);
3078 static PyObject *
3079 imp_new_module(PyObject *self, PyObject *args)
3081 char *name;
3082 if (!PyArg_ParseTuple(args, "s:new_module", &name))
3083 return NULL;
3084 return PyModule_New(name);
3087 static PyObject *
3088 imp_reload(PyObject *self, PyObject *v)
3090 return PyImport_ReloadModule(v);
3094 /* Doc strings */
3096 PyDoc_STRVAR(doc_imp,
3097 "This module provides the components needed to build your own\n\
3098 __import__ function. Undocumented functions are obsolete.");
3100 PyDoc_STRVAR(doc_reload,
3101 "reload(module) -> module\n\
3103 Reload the module. The module must have been successfully imported before.");
3105 PyDoc_STRVAR(doc_find_module,
3106 "find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
3107 Search for a module. If path is omitted or None, search for a\n\
3108 built-in, frozen or special module and continue search in sys.path.\n\
3109 The module name cannot contain '.'; to search for a submodule of a\n\
3110 package, pass the submodule name and the package's __path__.");
3112 PyDoc_STRVAR(doc_load_module,
3113 "load_module(name, file, filename, (suffix, mode, type)) -> module\n\
3114 Load a module, given information returned by find_module().\n\
3115 The module name must include the full package name, if any.");
3117 PyDoc_STRVAR(doc_get_magic,
3118 "get_magic() -> string\n\
3119 Return the magic number for .pyc or .pyo files.");
3121 PyDoc_STRVAR(doc_get_suffixes,
3122 "get_suffixes() -> [(suffix, mode, type), ...]\n\
3123 Return a list of (suffix, mode, type) tuples describing the files\n\
3124 that find_module() looks for.");
3126 PyDoc_STRVAR(doc_new_module,
3127 "new_module(name) -> module\n\
3128 Create a new module. Do not enter it in sys.modules.\n\
3129 The module name must include the full package name, if any.");
3131 PyDoc_STRVAR(doc_lock_held,
3132 "lock_held() -> boolean\n\
3133 Return True if the import lock is currently held, else False.\n\
3134 On platforms without threads, return False.");
3136 PyDoc_STRVAR(doc_acquire_lock,
3137 "acquire_lock() -> None\n\
3138 Acquires the interpreter's import lock for the current thread.\n\
3139 This lock should be used by import hooks to ensure thread-safety\n\
3140 when importing modules.\n\
3141 On platforms without threads, this function does nothing.");
3143 PyDoc_STRVAR(doc_release_lock,
3144 "release_lock() -> None\n\
3145 Release the interpreter's import lock.\n\
3146 On platforms without threads, this function does nothing.");
3148 static PyMethodDef imp_methods[] = {
3149 {"reload", imp_reload, METH_O, doc_reload},
3150 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3151 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3152 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3153 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3154 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3155 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3156 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3157 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
3158 /* The rest are obsolete */
3159 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3160 {"init_builtin", imp_init_builtin, METH_VARARGS},
3161 {"init_frozen", imp_init_frozen, METH_VARARGS},
3162 {"is_builtin", imp_is_builtin, METH_VARARGS},
3163 {"is_frozen", imp_is_frozen, METH_VARARGS},
3164 {"load_compiled", imp_load_compiled, METH_VARARGS},
3165 #ifdef HAVE_DYNAMIC_LOADING
3166 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
3167 #endif
3168 {"load_package", imp_load_package, METH_VARARGS},
3169 {"load_source", imp_load_source, METH_VARARGS},
3170 {NULL, NULL} /* sentinel */
3173 static int
3174 setint(PyObject *d, char *name, int value)
3176 PyObject *v;
3177 int err;
3179 v = PyInt_FromLong((long)value);
3180 err = PyDict_SetItemString(d, name, v);
3181 Py_XDECREF(v);
3182 return err;
3185 typedef struct {
3186 PyObject_HEAD
3187 } NullImporter;
3189 static int
3190 NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3192 char *path;
3193 Py_ssize_t pathlen;
3195 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3196 return -1;
3198 if (!PyArg_ParseTuple(args, "s:NullImporter",
3199 &path))
3200 return -1;
3202 pathlen = strlen(path);
3203 if (pathlen == 0) {
3204 PyErr_SetString(PyExc_ImportError, "empty pathname");
3205 return -1;
3206 } else {
3207 #ifndef RISCOS
3208 #ifndef MS_WINDOWS
3209 struct stat statbuf;
3210 int rv;
3212 rv = stat(path, &statbuf);
3213 if (rv == 0) {
3214 /* it exists */
3215 if (S_ISDIR(statbuf.st_mode)) {
3216 /* it's a directory */
3217 PyErr_SetString(PyExc_ImportError,
3218 "existing directory");
3219 return -1;
3222 #else /* MS_WINDOWS */
3223 DWORD rv;
3224 /* see issue1293 and issue3677:
3225 * stat() on Windows doesn't recognise paths like
3226 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
3228 rv = GetFileAttributesA(path);
3229 if (rv != INVALID_FILE_ATTRIBUTES) {
3230 /* it exists */
3231 if (rv & FILE_ATTRIBUTE_DIRECTORY) {
3232 /* it's a directory */
3233 PyErr_SetString(PyExc_ImportError,
3234 "existing directory");
3235 return -1;
3238 #endif
3239 #else /* RISCOS */
3240 if (object_exists(path)) {
3241 /* it exists */
3242 if (isdir(path)) {
3243 /* it's a directory */
3244 PyErr_SetString(PyExc_ImportError,
3245 "existing directory");
3246 return -1;
3249 #endif
3251 return 0;
3254 static PyObject *
3255 NullImporter_find_module(NullImporter *self, PyObject *args)
3257 Py_RETURN_NONE;
3260 static PyMethodDef NullImporter_methods[] = {
3261 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3262 "Always return None"
3264 {NULL} /* Sentinel */
3268 PyTypeObject PyNullImporter_Type = {
3269 PyVarObject_HEAD_INIT(NULL, 0)
3270 "imp.NullImporter", /*tp_name*/
3271 sizeof(NullImporter), /*tp_basicsize*/
3272 0, /*tp_itemsize*/
3273 0, /*tp_dealloc*/
3274 0, /*tp_print*/
3275 0, /*tp_getattr*/
3276 0, /*tp_setattr*/
3277 0, /*tp_compare*/
3278 0, /*tp_repr*/
3279 0, /*tp_as_number*/
3280 0, /*tp_as_sequence*/
3281 0, /*tp_as_mapping*/
3282 0, /*tp_hash */
3283 0, /*tp_call*/
3284 0, /*tp_str*/
3285 0, /*tp_getattro*/
3286 0, /*tp_setattro*/
3287 0, /*tp_as_buffer*/
3288 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3289 "Null importer object", /* tp_doc */
3290 0, /* tp_traverse */
3291 0, /* tp_clear */
3292 0, /* tp_richcompare */
3293 0, /* tp_weaklistoffset */
3294 0, /* tp_iter */
3295 0, /* tp_iternext */
3296 NullImporter_methods, /* tp_methods */
3297 0, /* tp_members */
3298 0, /* tp_getset */
3299 0, /* tp_base */
3300 0, /* tp_dict */
3301 0, /* tp_descr_get */
3302 0, /* tp_descr_set */
3303 0, /* tp_dictoffset */
3304 (initproc)NullImporter_init, /* tp_init */
3305 0, /* tp_alloc */
3306 PyType_GenericNew /* tp_new */
3310 PyMODINIT_FUNC
3311 initimp(void)
3313 PyObject *m, *d;
3315 if (PyType_Ready(&PyNullImporter_Type) < 0)
3316 goto failure;
3318 m = Py_InitModule4("imp", imp_methods, doc_imp,
3319 NULL, PYTHON_API_VERSION);
3320 if (m == NULL)
3321 goto failure;
3322 d = PyModule_GetDict(m);
3323 if (d == NULL)
3324 goto failure;
3326 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3327 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3328 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3329 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3330 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3331 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3332 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3333 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
3334 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
3335 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
3337 Py_INCREF(&PyNullImporter_Type);
3338 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
3339 failure:
3344 /* API for embedding applications that want to add their own entries
3345 to the table of built-in modules. This should normally be called
3346 *before* Py_Initialize(). When the table resize fails, -1 is
3347 returned and the existing table is unchanged.
3349 After a similar function by Just van Rossum. */
3352 PyImport_ExtendInittab(struct _inittab *newtab)
3354 static struct _inittab *our_copy = NULL;
3355 struct _inittab *p;
3356 int i, n;
3358 /* Count the number of entries in both tables */
3359 for (n = 0; newtab[n].name != NULL; n++)
3361 if (n == 0)
3362 return 0; /* Nothing to do */
3363 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3366 /* Allocate new memory for the combined table */
3367 p = our_copy;
3368 PyMem_RESIZE(p, struct _inittab, i+n+1);
3369 if (p == NULL)
3370 return -1;
3372 /* Copy the tables into the new memory */
3373 if (our_copy != PyImport_Inittab)
3374 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3375 PyImport_Inittab = our_copy = p;
3376 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
3378 return 0;
3381 /* Shorthand to add a single entry given a name and a function */
3384 PyImport_AppendInittab(const char *name, void (*initfunc)(void))
3386 struct _inittab newtab[2];
3388 memset(newtab, '\0', sizeof newtab);
3390 newtab[0].name = (char *)name;
3391 newtab[0].initfunc = initfunc;
3393 return PyImport_ExtendInittab(newtab);
3396 #ifdef __cplusplus
3398 #endif