Patch by Jeremy Katz (SF #1609407)
[python.git] / Python / import.c
blob45c5507aa9f79b53b9b9dc1c4c85655286715d77
2 /* Module definition and import implementation */
4 #include "Python.h"
6 #include "Python-ast.h"
7 #include "pyarena.h"
8 #include "pythonrun.h"
9 #include "errcode.h"
10 #include "marshal.h"
11 #include "code.h"
12 #include "compile.h"
13 #include "eval.h"
14 #include "osdefs.h"
15 #include "importdl.h"
17 #ifdef HAVE_FCNTL_H
18 #include <fcntl.h>
19 #endif
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
24 extern time_t PyOS_GetLastModificationTime(char *, FILE *);
25 /* In getmtime.c */
27 /* Magic word to reject .pyc files generated by other Python versions.
28 It should change for each incompatible change to the bytecode.
30 The value of CR and LF is incorporated so if you ever read or write
31 a .pyc file in text mode the magic number will be wrong; also, the
32 Apple MPW compiler swaps their values, botching string constants.
34 The magic numbers must be spaced apart atleast 2 values, as the
35 -U interpeter flag will cause MAGIC+1 being used. They have been
36 odd numbers for some time now.
38 There were a variety of old schemes for setting the magic number.
39 The current working scheme is to increment the previous value by
40 10.
42 Known values:
43 Python 1.5: 20121
44 Python 1.5.1: 20121
45 Python 1.5.2: 20121
46 Python 1.6: 50428
47 Python 2.0: 50823
48 Python 2.0.1: 50823
49 Python 2.1: 60202
50 Python 2.1.1: 60202
51 Python 2.1.2: 60202
52 Python 2.2: 60717
53 Python 2.3a0: 62011
54 Python 2.3a0: 62021
55 Python 2.3a0: 62011 (!)
56 Python 2.4a0: 62041
57 Python 2.4a3: 62051
58 Python 2.4b1: 62061
59 Python 2.5a0: 62071
60 Python 2.5a0: 62081 (ast-branch)
61 Python 2.5a0: 62091 (with)
62 Python 2.5a0: 62092 (changed WITH_CLEANUP opcode)
63 Python 2.5b3: 62101 (fix wrong code: for x, in ...)
64 Python 2.5b3: 62111 (fix wrong code: x += yield)
65 Python 2.5c1: 62121 (fix wrong lnotab with for loops and
66 storing constants that should have been removed)
67 Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp)
68 Python 2.6a0: 62141 (peephole optimizations)
71 #define MAGIC (62141 | ((long)'\r'<<16) | ((long)'\n'<<24))
73 /* Magic word as global; note that _PyImport_Init() can change the
74 value of this global to accommodate for alterations of how the
75 compiler works which are enabled by command line switches. */
76 static long pyc_magic = MAGIC;
78 /* See _PyImport_FixupExtension() below */
79 static PyObject *extensions = NULL;
81 /* This table is defined in config.c: */
82 extern struct _inittab _PyImport_Inittab[];
84 struct _inittab *PyImport_Inittab = _PyImport_Inittab;
86 /* these tables define the module suffixes that Python recognizes */
87 struct filedescr * _PyImport_Filetab = NULL;
89 #ifdef RISCOS
90 static const struct filedescr _PyImport_StandardFiletab[] = {
91 {"/py", "U", PY_SOURCE},
92 {"/pyc", "rb", PY_COMPILED},
93 {0, 0}
95 #else
96 static const struct filedescr _PyImport_StandardFiletab[] = {
97 {".py", "U", PY_SOURCE},
98 #ifdef MS_WINDOWS
99 {".pyw", "U", PY_SOURCE},
100 #endif
101 {".pyc", "rb", PY_COMPILED},
102 {0, 0}
104 #endif
106 static PyTypeObject NullImporterType; /* Forward reference */
108 /* Initialize things */
110 void
111 _PyImport_Init(void)
113 const struct filedescr *scan;
114 struct filedescr *filetab;
115 int countD = 0;
116 int countS = 0;
118 /* prepare _PyImport_Filetab: copy entries from
119 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
121 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
122 ++countD;
123 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
124 ++countS;
125 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
126 if (filetab == NULL)
127 Py_FatalError("Can't initialize import file table.");
128 memcpy(filetab, _PyImport_DynLoadFiletab,
129 countD * sizeof(struct filedescr));
130 memcpy(filetab + countD, _PyImport_StandardFiletab,
131 countS * sizeof(struct filedescr));
132 filetab[countD + countS].suffix = NULL;
134 _PyImport_Filetab = filetab;
136 if (Py_OptimizeFlag) {
137 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
138 for (; filetab->suffix != NULL; filetab++) {
139 #ifndef RISCOS
140 if (strcmp(filetab->suffix, ".pyc") == 0)
141 filetab->suffix = ".pyo";
142 #else
143 if (strcmp(filetab->suffix, "/pyc") == 0)
144 filetab->suffix = "/pyo";
145 #endif
149 if (Py_UnicodeFlag) {
150 /* Fix the pyc_magic so that byte compiled code created
151 using the all-Unicode method doesn't interfere with
152 code created in normal operation mode. */
153 pyc_magic = MAGIC + 1;
157 void
158 _PyImportHooks_Init(void)
160 PyObject *v, *path_hooks = NULL, *zimpimport;
161 int err = 0;
163 /* adding sys.path_hooks and sys.path_importer_cache, setting up
164 zipimport */
165 if (PyType_Ready(&NullImporterType) < 0)
166 goto error;
168 if (Py_VerboseFlag)
169 PySys_WriteStderr("# installing zipimport hook\n");
171 v = PyList_New(0);
172 if (v == NULL)
173 goto error;
174 err = PySys_SetObject("meta_path", v);
175 Py_DECREF(v);
176 if (err)
177 goto error;
178 v = PyDict_New();
179 if (v == NULL)
180 goto error;
181 err = PySys_SetObject("path_importer_cache", v);
182 Py_DECREF(v);
183 if (err)
184 goto error;
185 path_hooks = PyList_New(0);
186 if (path_hooks == NULL)
187 goto error;
188 err = PySys_SetObject("path_hooks", path_hooks);
189 if (err) {
190 error:
191 PyErr_Print();
192 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
193 "path_importer_cache, or NullImporter failed"
197 zimpimport = PyImport_ImportModule("zipimport");
198 if (zimpimport == NULL) {
199 PyErr_Clear(); /* No zip import module -- okay */
200 if (Py_VerboseFlag)
201 PySys_WriteStderr("# can't import zipimport\n");
203 else {
204 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
205 "zipimporter");
206 Py_DECREF(zimpimport);
207 if (zipimporter == NULL) {
208 PyErr_Clear(); /* No zipimporter object -- okay */
209 if (Py_VerboseFlag)
210 PySys_WriteStderr(
211 "# can't import zipimport.zipimporter\n");
213 else {
214 /* sys.path_hooks.append(zipimporter) */
215 err = PyList_Append(path_hooks, zipimporter);
216 Py_DECREF(zipimporter);
217 if (err)
218 goto error;
219 if (Py_VerboseFlag)
220 PySys_WriteStderr(
221 "# installed zipimport hook\n");
224 Py_DECREF(path_hooks);
227 void
228 _PyImport_Fini(void)
230 Py_XDECREF(extensions);
231 extensions = NULL;
232 PyMem_DEL(_PyImport_Filetab);
233 _PyImport_Filetab = NULL;
237 /* Locking primitives to prevent parallel imports of the same module
238 in different threads to return with a partially loaded module.
239 These calls are serialized by the global interpreter lock. */
241 #ifdef WITH_THREAD
243 #include "pythread.h"
245 static PyThread_type_lock import_lock = 0;
246 static long import_lock_thread = -1;
247 static int import_lock_level = 0;
249 static void
250 lock_import(void)
252 long me = PyThread_get_thread_ident();
253 if (me == -1)
254 return; /* Too bad */
255 if (import_lock == NULL) {
256 import_lock = PyThread_allocate_lock();
257 if (import_lock == NULL)
258 return; /* Nothing much we can do. */
260 if (import_lock_thread == me) {
261 import_lock_level++;
262 return;
264 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
266 PyThreadState *tstate = PyEval_SaveThread();
267 PyThread_acquire_lock(import_lock, 1);
268 PyEval_RestoreThread(tstate);
270 import_lock_thread = me;
271 import_lock_level = 1;
274 static int
275 unlock_import(void)
277 long me = PyThread_get_thread_ident();
278 if (me == -1 || import_lock == NULL)
279 return 0; /* Too bad */
280 if (import_lock_thread != me)
281 return -1;
282 import_lock_level--;
283 if (import_lock_level == 0) {
284 import_lock_thread = -1;
285 PyThread_release_lock(import_lock);
287 return 1;
290 /* This function is called from PyOS_AfterFork to ensure that newly
291 created child processes do not share locks with the parent. */
293 void
294 _PyImport_ReInitLock(void)
296 #ifdef _AIX
297 if (import_lock != NULL)
298 import_lock = PyThread_allocate_lock();
299 #endif
302 #else
304 #define lock_import()
305 #define unlock_import() 0
307 #endif
309 static PyObject *
310 imp_lock_held(PyObject *self, PyObject *noargs)
312 #ifdef WITH_THREAD
313 return PyBool_FromLong(import_lock_thread != -1);
314 #else
315 return PyBool_FromLong(0);
316 #endif
319 static PyObject *
320 imp_acquire_lock(PyObject *self, PyObject *noargs)
322 #ifdef WITH_THREAD
323 lock_import();
324 #endif
325 Py_INCREF(Py_None);
326 return Py_None;
329 static PyObject *
330 imp_release_lock(PyObject *self, PyObject *noargs)
332 #ifdef WITH_THREAD
333 if (unlock_import() < 0) {
334 PyErr_SetString(PyExc_RuntimeError,
335 "not holding the import lock");
336 return NULL;
338 #endif
339 Py_INCREF(Py_None);
340 return Py_None;
343 /* Helper for sys */
345 PyObject *
346 PyImport_GetModuleDict(void)
348 PyInterpreterState *interp = PyThreadState_GET()->interp;
349 if (interp->modules == NULL)
350 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
351 return interp->modules;
355 /* List of names to clear in sys */
356 static char* sys_deletes[] = {
357 "path", "argv", "ps1", "ps2", "exitfunc",
358 "exc_type", "exc_value", "exc_traceback",
359 "last_type", "last_value", "last_traceback",
360 "path_hooks", "path_importer_cache", "meta_path",
361 NULL
364 static char* sys_files[] = {
365 "stdin", "__stdin__",
366 "stdout", "__stdout__",
367 "stderr", "__stderr__",
368 NULL
372 /* Un-initialize things, as good as we can */
374 void
375 PyImport_Cleanup(void)
377 Py_ssize_t pos, ndone;
378 char *name;
379 PyObject *key, *value, *dict;
380 PyInterpreterState *interp = PyThreadState_GET()->interp;
381 PyObject *modules = interp->modules;
383 if (modules == NULL)
384 return; /* Already done */
386 /* Delete some special variables first. These are common
387 places where user values hide and people complain when their
388 destructors fail. Since the modules containing them are
389 deleted *last* of all, they would come too late in the normal
390 destruction order. Sigh. */
392 value = PyDict_GetItemString(modules, "__builtin__");
393 if (value != NULL && PyModule_Check(value)) {
394 dict = PyModule_GetDict(value);
395 if (Py_VerboseFlag)
396 PySys_WriteStderr("# clear __builtin__._\n");
397 PyDict_SetItemString(dict, "_", Py_None);
399 value = PyDict_GetItemString(modules, "sys");
400 if (value != NULL && PyModule_Check(value)) {
401 char **p;
402 PyObject *v;
403 dict = PyModule_GetDict(value);
404 for (p = sys_deletes; *p != NULL; p++) {
405 if (Py_VerboseFlag)
406 PySys_WriteStderr("# clear sys.%s\n", *p);
407 PyDict_SetItemString(dict, *p, Py_None);
409 for (p = sys_files; *p != NULL; p+=2) {
410 if (Py_VerboseFlag)
411 PySys_WriteStderr("# restore sys.%s\n", *p);
412 v = PyDict_GetItemString(dict, *(p+1));
413 if (v == NULL)
414 v = Py_None;
415 PyDict_SetItemString(dict, *p, v);
419 /* First, delete __main__ */
420 value = PyDict_GetItemString(modules, "__main__");
421 if (value != NULL && PyModule_Check(value)) {
422 if (Py_VerboseFlag)
423 PySys_WriteStderr("# cleanup __main__\n");
424 _PyModule_Clear(value);
425 PyDict_SetItemString(modules, "__main__", Py_None);
428 /* The special treatment of __builtin__ here is because even
429 when it's not referenced as a module, its dictionary is
430 referenced by almost every module's __builtins__. Since
431 deleting a module clears its dictionary (even if there are
432 references left to it), we need to delete the __builtin__
433 module last. Likewise, we don't delete sys until the very
434 end because it is implicitly referenced (e.g. by print).
436 Also note that we 'delete' modules by replacing their entry
437 in the modules dict with None, rather than really deleting
438 them; this avoids a rehash of the modules dictionary and
439 also marks them as "non existent" so they won't be
440 re-imported. */
442 /* Next, repeatedly delete modules with a reference count of
443 one (skipping __builtin__ and sys) and delete them */
444 do {
445 ndone = 0;
446 pos = 0;
447 while (PyDict_Next(modules, &pos, &key, &value)) {
448 if (value->ob_refcnt != 1)
449 continue;
450 if (PyString_Check(key) && PyModule_Check(value)) {
451 name = PyString_AS_STRING(key);
452 if (strcmp(name, "__builtin__") == 0)
453 continue;
454 if (strcmp(name, "sys") == 0)
455 continue;
456 if (Py_VerboseFlag)
457 PySys_WriteStderr(
458 "# cleanup[1] %s\n", name);
459 _PyModule_Clear(value);
460 PyDict_SetItem(modules, key, Py_None);
461 ndone++;
464 } while (ndone > 0);
466 /* Next, delete all modules (still skipping __builtin__ and sys) */
467 pos = 0;
468 while (PyDict_Next(modules, &pos, &key, &value)) {
469 if (PyString_Check(key) && PyModule_Check(value)) {
470 name = PyString_AS_STRING(key);
471 if (strcmp(name, "__builtin__") == 0)
472 continue;
473 if (strcmp(name, "sys") == 0)
474 continue;
475 if (Py_VerboseFlag)
476 PySys_WriteStderr("# cleanup[2] %s\n", name);
477 _PyModule_Clear(value);
478 PyDict_SetItem(modules, key, Py_None);
482 /* Next, delete sys and __builtin__ (in that order) */
483 value = PyDict_GetItemString(modules, "sys");
484 if (value != NULL && PyModule_Check(value)) {
485 if (Py_VerboseFlag)
486 PySys_WriteStderr("# cleanup sys\n");
487 _PyModule_Clear(value);
488 PyDict_SetItemString(modules, "sys", Py_None);
490 value = PyDict_GetItemString(modules, "__builtin__");
491 if (value != NULL && PyModule_Check(value)) {
492 if (Py_VerboseFlag)
493 PySys_WriteStderr("# cleanup __builtin__\n");
494 _PyModule_Clear(value);
495 PyDict_SetItemString(modules, "__builtin__", Py_None);
498 /* Finally, clear and delete the modules directory */
499 PyDict_Clear(modules);
500 interp->modules = NULL;
501 Py_DECREF(modules);
505 /* Helper for pythonrun.c -- return magic number */
507 long
508 PyImport_GetMagicNumber(void)
510 return pyc_magic;
514 /* Magic for extension modules (built-in as well as dynamically
515 loaded). To prevent initializing an extension module more than
516 once, we keep a static dictionary 'extensions' keyed by module name
517 (for built-in modules) or by filename (for dynamically loaded
518 modules), containing these modules. A copy of the module's
519 dictionary is stored by calling _PyImport_FixupExtension()
520 immediately after the module initialization function succeeds. A
521 copy can be retrieved from there by calling
522 _PyImport_FindExtension(). */
524 PyObject *
525 _PyImport_FixupExtension(char *name, char *filename)
527 PyObject *modules, *mod, *dict, *copy;
528 if (extensions == NULL) {
529 extensions = PyDict_New();
530 if (extensions == NULL)
531 return NULL;
533 modules = PyImport_GetModuleDict();
534 mod = PyDict_GetItemString(modules, name);
535 if (mod == NULL || !PyModule_Check(mod)) {
536 PyErr_Format(PyExc_SystemError,
537 "_PyImport_FixupExtension: module %.200s not loaded", name);
538 return NULL;
540 dict = PyModule_GetDict(mod);
541 if (dict == NULL)
542 return NULL;
543 copy = PyDict_Copy(dict);
544 if (copy == NULL)
545 return NULL;
546 PyDict_SetItemString(extensions, filename, copy);
547 Py_DECREF(copy);
548 return copy;
551 PyObject *
552 _PyImport_FindExtension(char *name, char *filename)
554 PyObject *dict, *mod, *mdict;
555 if (extensions == NULL)
556 return NULL;
557 dict = PyDict_GetItemString(extensions, filename);
558 if (dict == NULL)
559 return NULL;
560 mod = PyImport_AddModule(name);
561 if (mod == NULL)
562 return NULL;
563 mdict = PyModule_GetDict(mod);
564 if (mdict == NULL)
565 return NULL;
566 if (PyDict_Update(mdict, dict))
567 return NULL;
568 if (Py_VerboseFlag)
569 PySys_WriteStderr("import %s # previously loaded (%s)\n",
570 name, filename);
571 return mod;
575 /* Get the module object corresponding to a module name.
576 First check the modules dictionary if there's one there,
577 if not, create a new one and insert it in the modules dictionary.
578 Because the former action is most common, THIS DOES NOT RETURN A
579 'NEW' REFERENCE! */
581 PyObject *
582 PyImport_AddModule(const char *name)
584 PyObject *modules = PyImport_GetModuleDict();
585 PyObject *m;
587 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
588 PyModule_Check(m))
589 return m;
590 m = PyModule_New(name);
591 if (m == NULL)
592 return NULL;
593 if (PyDict_SetItemString(modules, name, m) != 0) {
594 Py_DECREF(m);
595 return NULL;
597 Py_DECREF(m); /* Yes, it still exists, in modules! */
599 return m;
602 /* Remove name from sys.modules, if it's there. */
603 static void
604 _RemoveModule(const char *name)
606 PyObject *modules = PyImport_GetModuleDict();
607 if (PyDict_GetItemString(modules, name) == NULL)
608 return;
609 if (PyDict_DelItemString(modules, name) < 0)
610 Py_FatalError("import: deleting existing key in"
611 "sys.modules failed");
614 /* Execute a code object in a module and return the module object
615 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
616 * removed from sys.modules, to avoid leaving damaged module objects
617 * in sys.modules. The caller may wish to restore the original
618 * module object (if any) in this case; PyImport_ReloadModule is an
619 * example.
621 PyObject *
622 PyImport_ExecCodeModule(char *name, PyObject *co)
624 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
627 PyObject *
628 PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
630 PyObject *modules = PyImport_GetModuleDict();
631 PyObject *m, *d, *v;
633 m = PyImport_AddModule(name);
634 if (m == NULL)
635 return NULL;
636 /* If the module is being reloaded, we get the old module back
637 and re-use its dict to exec the new code. */
638 d = PyModule_GetDict(m);
639 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
640 if (PyDict_SetItemString(d, "__builtins__",
641 PyEval_GetBuiltins()) != 0)
642 goto error;
644 /* Remember the filename as the __file__ attribute */
645 v = NULL;
646 if (pathname != NULL) {
647 v = PyString_FromString(pathname);
648 if (v == NULL)
649 PyErr_Clear();
651 if (v == NULL) {
652 v = ((PyCodeObject *)co)->co_filename;
653 Py_INCREF(v);
655 if (PyDict_SetItemString(d, "__file__", v) != 0)
656 PyErr_Clear(); /* Not important enough to report */
657 Py_DECREF(v);
659 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
660 if (v == NULL)
661 goto error;
662 Py_DECREF(v);
664 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
665 PyErr_Format(PyExc_ImportError,
666 "Loaded module %.200s not found in sys.modules",
667 name);
668 return NULL;
671 Py_INCREF(m);
673 return m;
675 error:
676 _RemoveModule(name);
677 return NULL;
681 /* Given a pathname for a Python source file, fill a buffer with the
682 pathname for the corresponding compiled file. Return the pathname
683 for the compiled file, or NULL if there's no space in the buffer.
684 Doesn't set an exception. */
686 static char *
687 make_compiled_pathname(char *pathname, char *buf, size_t buflen)
689 size_t len = strlen(pathname);
690 if (len+2 > buflen)
691 return NULL;
693 #ifdef MS_WINDOWS
694 /* Treat .pyw as if it were .py. The case of ".pyw" must match
695 that used in _PyImport_StandardFiletab. */
696 if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0)
697 --len; /* pretend 'w' isn't there */
698 #endif
699 memcpy(buf, pathname, len);
700 buf[len] = Py_OptimizeFlag ? 'o' : 'c';
701 buf[len+1] = '\0';
703 return buf;
707 /* Given a pathname for a Python source file, its time of last
708 modification, and a pathname for a compiled file, check whether the
709 compiled file represents the same version of the source. If so,
710 return a FILE pointer for the compiled file, positioned just after
711 the header; if not, return NULL.
712 Doesn't set an exception. */
714 static FILE *
715 check_compiled_module(char *pathname, time_t mtime, char *cpathname)
717 FILE *fp;
718 long magic;
719 long pyc_mtime;
721 fp = fopen(cpathname, "rb");
722 if (fp == NULL)
723 return NULL;
724 magic = PyMarshal_ReadLongFromFile(fp);
725 if (magic != pyc_magic) {
726 if (Py_VerboseFlag)
727 PySys_WriteStderr("# %s has bad magic\n", cpathname);
728 fclose(fp);
729 return NULL;
731 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
732 if (pyc_mtime != mtime) {
733 if (Py_VerboseFlag)
734 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
735 fclose(fp);
736 return NULL;
738 if (Py_VerboseFlag)
739 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
740 return fp;
744 /* Read a code object from a file and check it for validity */
746 static PyCodeObject *
747 read_compiled_module(char *cpathname, FILE *fp)
749 PyObject *co;
751 co = PyMarshal_ReadLastObjectFromFile(fp);
752 if (co == NULL)
753 return NULL;
754 if (!PyCode_Check(co)) {
755 PyErr_Format(PyExc_ImportError,
756 "Non-code object in %.200s", cpathname);
757 Py_DECREF(co);
758 return NULL;
760 return (PyCodeObject *)co;
764 /* Load a module from a compiled file, execute it, and return its
765 module object WITH INCREMENTED REFERENCE COUNT */
767 static PyObject *
768 load_compiled_module(char *name, char *cpathname, FILE *fp)
770 long magic;
771 PyCodeObject *co;
772 PyObject *m;
774 magic = PyMarshal_ReadLongFromFile(fp);
775 if (magic != pyc_magic) {
776 PyErr_Format(PyExc_ImportError,
777 "Bad magic number in %.200s", cpathname);
778 return NULL;
780 (void) PyMarshal_ReadLongFromFile(fp);
781 co = read_compiled_module(cpathname, fp);
782 if (co == NULL)
783 return NULL;
784 if (Py_VerboseFlag)
785 PySys_WriteStderr("import %s # precompiled from %s\n",
786 name, cpathname);
787 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
788 Py_DECREF(co);
790 return m;
793 /* Parse a source file and return the corresponding code object */
795 static PyCodeObject *
796 parse_source_module(const char *pathname, FILE *fp)
798 PyCodeObject *co = NULL;
799 mod_ty mod;
800 PyArena *arena = PyArena_New();
801 if (arena == NULL)
802 return NULL;
804 mod = PyParser_ASTFromFile(fp, pathname, Py_file_input, 0, 0, 0,
805 NULL, arena);
806 if (mod) {
807 co = PyAST_Compile(mod, pathname, NULL, arena);
809 PyArena_Free(arena);
810 return co;
814 /* Helper to open a bytecode file for writing in exclusive mode */
816 static FILE *
817 open_exclusive(char *filename)
819 #if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
820 /* Use O_EXCL to avoid a race condition when another process tries to
821 write the same file. When that happens, our open() call fails,
822 which is just fine (since it's only a cache).
823 XXX If the file exists and is writable but the directory is not
824 writable, the file will never be written. Oh well.
826 int fd;
827 (void) unlink(filename);
828 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
829 #ifdef O_BINARY
830 |O_BINARY /* necessary for Windows */
831 #endif
832 #ifdef __VMS
833 , 0666, "ctxt=bin", "shr=nil"
834 #else
835 , 0666
836 #endif
838 if (fd < 0)
839 return NULL;
840 return fdopen(fd, "wb");
841 #else
842 /* Best we can do -- on Windows this can't happen anyway */
843 return fopen(filename, "wb");
844 #endif
848 /* Write a compiled module to a file, placing the time of last
849 modification of its source into the header.
850 Errors are ignored, if a write error occurs an attempt is made to
851 remove the file. */
853 static void
854 write_compiled_module(PyCodeObject *co, char *cpathname, time_t mtime)
856 FILE *fp;
858 fp = open_exclusive(cpathname);
859 if (fp == NULL) {
860 if (Py_VerboseFlag)
861 PySys_WriteStderr(
862 "# can't create %s\n", cpathname);
863 return;
865 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
866 /* First write a 0 for mtime */
867 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
868 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
869 if (fflush(fp) != 0 || ferror(fp)) {
870 if (Py_VerboseFlag)
871 PySys_WriteStderr("# can't write %s\n", cpathname);
872 /* Don't keep partial file */
873 fclose(fp);
874 (void) unlink(cpathname);
875 return;
877 /* Now write the true mtime */
878 fseek(fp, 4L, 0);
879 assert(mtime < LONG_MAX);
880 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
881 fflush(fp);
882 fclose(fp);
883 if (Py_VerboseFlag)
884 PySys_WriteStderr("# wrote %s\n", cpathname);
888 /* Load a source module from a given file and return its module
889 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
890 byte-compiled file, use that instead. */
892 static PyObject *
893 load_source_module(char *name, char *pathname, FILE *fp)
895 time_t mtime;
896 FILE *fpc;
897 char buf[MAXPATHLEN+1];
898 char *cpathname;
899 PyCodeObject *co;
900 PyObject *m;
902 mtime = PyOS_GetLastModificationTime(pathname, fp);
903 if (mtime == (time_t)(-1)) {
904 PyErr_Format(PyExc_RuntimeError,
905 "unable to get modification time from '%s'",
906 pathname);
907 return NULL;
909 #if SIZEOF_TIME_T > 4
910 /* Python's .pyc timestamp handling presumes that the timestamp fits
911 in 4 bytes. This will be fine until sometime in the year 2038,
912 when a 4-byte signed time_t will overflow.
914 if (mtime >> 32) {
915 PyErr_SetString(PyExc_OverflowError,
916 "modification time overflows a 4 byte field");
917 return NULL;
919 #endif
920 cpathname = make_compiled_pathname(pathname, buf,
921 (size_t)MAXPATHLEN + 1);
922 if (cpathname != NULL &&
923 (fpc = check_compiled_module(pathname, mtime, cpathname))) {
924 co = read_compiled_module(cpathname, fpc);
925 fclose(fpc);
926 if (co == NULL)
927 return NULL;
928 if (Py_VerboseFlag)
929 PySys_WriteStderr("import %s # precompiled from %s\n",
930 name, cpathname);
931 pathname = cpathname;
933 else {
934 co = parse_source_module(pathname, fp);
935 if (co == NULL)
936 return NULL;
937 if (Py_VerboseFlag)
938 PySys_WriteStderr("import %s # from %s\n",
939 name, pathname);
940 if (cpathname)
941 write_compiled_module(co, cpathname, mtime);
943 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
944 Py_DECREF(co);
946 return m;
950 /* Forward */
951 static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
952 static struct filedescr *find_module(char *, char *, PyObject *,
953 char *, size_t, FILE **, PyObject **);
954 static struct _frozen *find_frozen(char *name);
956 /* Load a package and return its module object WITH INCREMENTED
957 REFERENCE COUNT */
959 static PyObject *
960 load_package(char *name, char *pathname)
962 PyObject *m, *d;
963 PyObject *file = NULL;
964 PyObject *path = NULL;
965 int err;
966 char buf[MAXPATHLEN+1];
967 FILE *fp = NULL;
968 struct filedescr *fdp;
970 m = PyImport_AddModule(name);
971 if (m == NULL)
972 return NULL;
973 if (Py_VerboseFlag)
974 PySys_WriteStderr("import %s # directory %s\n",
975 name, pathname);
976 d = PyModule_GetDict(m);
977 file = PyString_FromString(pathname);
978 if (file == NULL)
979 goto error;
980 path = Py_BuildValue("[O]", file);
981 if (path == NULL)
982 goto error;
983 err = PyDict_SetItemString(d, "__file__", file);
984 if (err == 0)
985 err = PyDict_SetItemString(d, "__path__", path);
986 if (err != 0)
987 goto error;
988 buf[0] = '\0';
989 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
990 if (fdp == NULL) {
991 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
992 PyErr_Clear();
993 Py_INCREF(m);
995 else
996 m = NULL;
997 goto cleanup;
999 m = load_module(name, fp, buf, fdp->type, NULL);
1000 if (fp != NULL)
1001 fclose(fp);
1002 goto cleanup;
1004 error:
1005 m = NULL;
1006 cleanup:
1007 Py_XDECREF(path);
1008 Py_XDECREF(file);
1009 return m;
1013 /* Helper to test for built-in module */
1015 static int
1016 is_builtin(char *name)
1018 int i;
1019 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1020 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1021 if (PyImport_Inittab[i].initfunc == NULL)
1022 return -1;
1023 else
1024 return 1;
1027 return 0;
1031 /* Return an importer object for a sys.path/pkg.__path__ item 'p',
1032 possibly by fetching it from the path_importer_cache dict. If it
1033 wasn't yet cached, traverse path_hooks until a hook is found
1034 that can handle the path item. Return None if no hook could;
1035 this tells our caller it should fall back to the builtin
1036 import mechanism. Cache the result in path_importer_cache.
1037 Returns a borrowed reference. */
1039 static PyObject *
1040 get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
1041 PyObject *p)
1043 PyObject *importer;
1044 Py_ssize_t j, nhooks;
1046 /* These conditions are the caller's responsibility: */
1047 assert(PyList_Check(path_hooks));
1048 assert(PyDict_Check(path_importer_cache));
1050 nhooks = PyList_Size(path_hooks);
1051 if (nhooks < 0)
1052 return NULL; /* Shouldn't happen */
1054 importer = PyDict_GetItem(path_importer_cache, p);
1055 if (importer != NULL)
1056 return importer;
1058 /* set path_importer_cache[p] to None to avoid recursion */
1059 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1060 return NULL;
1062 for (j = 0; j < nhooks; j++) {
1063 PyObject *hook = PyList_GetItem(path_hooks, j);
1064 if (hook == NULL)
1065 return NULL;
1066 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1067 if (importer != NULL)
1068 break;
1070 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1071 return NULL;
1073 PyErr_Clear();
1075 if (importer == NULL) {
1076 importer = PyObject_CallFunctionObjArgs(
1077 (PyObject *)&NullImporterType, p, NULL
1079 if (importer == NULL) {
1080 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1081 PyErr_Clear();
1082 return Py_None;
1086 if (importer != NULL) {
1087 int err = PyDict_SetItem(path_importer_cache, p, importer);
1088 Py_DECREF(importer);
1089 if (err != 0)
1090 return NULL;
1092 return importer;
1095 /* Search the path (default sys.path) for a module. Return the
1096 corresponding filedescr struct, and (via return arguments) the
1097 pathname and an open file. Return NULL if the module is not found. */
1099 #ifdef MS_COREDLL
1100 extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
1101 char *, Py_ssize_t);
1102 #endif
1104 static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
1105 static int find_init_module(char *); /* Forward */
1106 static struct filedescr importhookdescr = {"", "", IMP_HOOK};
1108 static struct filedescr *
1109 find_module(char *fullname, char *subname, PyObject *path, char *buf,
1110 size_t buflen, FILE **p_fp, PyObject **p_loader)
1112 Py_ssize_t i, npath;
1113 size_t len, namelen;
1114 struct filedescr *fdp = NULL;
1115 char *filemode;
1116 FILE *fp = NULL;
1117 PyObject *path_hooks, *path_importer_cache;
1118 #ifndef RISCOS
1119 struct stat statbuf;
1120 #endif
1121 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1122 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1123 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
1124 char name[MAXPATHLEN+1];
1125 #if defined(PYOS_OS2)
1126 size_t saved_len;
1127 size_t saved_namelen;
1128 char *saved_buf = NULL;
1129 #endif
1130 if (p_loader != NULL)
1131 *p_loader = NULL;
1133 if (strlen(subname) > MAXPATHLEN) {
1134 PyErr_SetString(PyExc_OverflowError,
1135 "module name is too long");
1136 return NULL;
1138 strcpy(name, subname);
1140 /* sys.meta_path import hook */
1141 if (p_loader != NULL) {
1142 PyObject *meta_path;
1144 meta_path = PySys_GetObject("meta_path");
1145 if (meta_path == NULL || !PyList_Check(meta_path)) {
1146 PyErr_SetString(PyExc_ImportError,
1147 "sys.meta_path must be a list of "
1148 "import hooks");
1149 return NULL;
1151 Py_INCREF(meta_path); /* zap guard */
1152 npath = PyList_Size(meta_path);
1153 for (i = 0; i < npath; i++) {
1154 PyObject *loader;
1155 PyObject *hook = PyList_GetItem(meta_path, i);
1156 loader = PyObject_CallMethod(hook, "find_module",
1157 "sO", fullname,
1158 path != NULL ?
1159 path : Py_None);
1160 if (loader == NULL) {
1161 Py_DECREF(meta_path);
1162 return NULL; /* true error */
1164 if (loader != Py_None) {
1165 /* a loader was found */
1166 *p_loader = loader;
1167 Py_DECREF(meta_path);
1168 return &importhookdescr;
1170 Py_DECREF(loader);
1172 Py_DECREF(meta_path);
1175 if (path != NULL && PyString_Check(path)) {
1176 /* The only type of submodule allowed inside a "frozen"
1177 package are other frozen modules or packages. */
1178 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) {
1179 PyErr_SetString(PyExc_ImportError,
1180 "full frozen module name too long");
1181 return NULL;
1183 strcpy(buf, PyString_AsString(path));
1184 strcat(buf, ".");
1185 strcat(buf, name);
1186 strcpy(name, buf);
1187 if (find_frozen(name) != NULL) {
1188 strcpy(buf, name);
1189 return &fd_frozen;
1191 PyErr_Format(PyExc_ImportError,
1192 "No frozen submodule named %.200s", name);
1193 return NULL;
1195 if (path == NULL) {
1196 if (is_builtin(name)) {
1197 strcpy(buf, name);
1198 return &fd_builtin;
1200 if ((find_frozen(name)) != NULL) {
1201 strcpy(buf, name);
1202 return &fd_frozen;
1205 #ifdef MS_COREDLL
1206 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1207 if (fp != NULL) {
1208 *p_fp = fp;
1209 return fdp;
1211 #endif
1212 path = PySys_GetObject("path");
1214 if (path == NULL || !PyList_Check(path)) {
1215 PyErr_SetString(PyExc_ImportError,
1216 "sys.path must be a list of directory names");
1217 return NULL;
1220 path_hooks = PySys_GetObject("path_hooks");
1221 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
1222 PyErr_SetString(PyExc_ImportError,
1223 "sys.path_hooks must be a list of "
1224 "import hooks");
1225 return NULL;
1227 path_importer_cache = PySys_GetObject("path_importer_cache");
1228 if (path_importer_cache == NULL ||
1229 !PyDict_Check(path_importer_cache)) {
1230 PyErr_SetString(PyExc_ImportError,
1231 "sys.path_importer_cache must be a dict");
1232 return NULL;
1235 npath = PyList_Size(path);
1236 namelen = strlen(name);
1237 for (i = 0; i < npath; i++) {
1238 PyObject *copy = NULL;
1239 PyObject *v = PyList_GetItem(path, i);
1240 if (!v)
1241 return NULL;
1242 #ifdef Py_USING_UNICODE
1243 if (PyUnicode_Check(v)) {
1244 copy = PyUnicode_Encode(PyUnicode_AS_UNICODE(v),
1245 PyUnicode_GET_SIZE(v), Py_FileSystemDefaultEncoding, NULL);
1246 if (copy == NULL)
1247 return NULL;
1248 v = copy;
1250 else
1251 #endif
1252 if (!PyString_Check(v))
1253 continue;
1254 len = PyString_GET_SIZE(v);
1255 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1256 Py_XDECREF(copy);
1257 continue; /* Too long */
1259 strcpy(buf, PyString_AS_STRING(v));
1260 if (strlen(buf) != len) {
1261 Py_XDECREF(copy);
1262 continue; /* v contains '\0' */
1265 /* sys.path_hooks import hook */
1266 if (p_loader != NULL) {
1267 PyObject *importer;
1269 importer = get_path_importer(path_importer_cache,
1270 path_hooks, v);
1271 if (importer == NULL) {
1272 Py_XDECREF(copy);
1273 return NULL;
1275 /* Note: importer is a borrowed reference */
1276 if (importer != Py_None) {
1277 PyObject *loader;
1278 loader = PyObject_CallMethod(importer,
1279 "find_module",
1280 "s", fullname);
1281 Py_XDECREF(copy);
1282 if (loader == NULL)
1283 return NULL; /* error */
1284 if (loader != Py_None) {
1285 /* a loader was found */
1286 *p_loader = loader;
1287 return &importhookdescr;
1289 Py_DECREF(loader);
1290 continue;
1293 /* no hook was found, use builtin import */
1295 if (len > 0 && buf[len-1] != SEP
1296 #ifdef ALTSEP
1297 && buf[len-1] != ALTSEP
1298 #endif
1300 buf[len++] = SEP;
1301 strcpy(buf+len, name);
1302 len += namelen;
1304 /* Check for package import (buf holds a directory name,
1305 and there's an __init__ module in that directory */
1306 #ifdef HAVE_STAT
1307 if (stat(buf, &statbuf) == 0 && /* it exists */
1308 S_ISDIR(statbuf.st_mode) && /* it's a directory */
1309 case_ok(buf, len, namelen, name)) { /* case matches */
1310 if (find_init_module(buf)) { /* and has __init__.py */
1311 Py_XDECREF(copy);
1312 return &fd_package;
1314 else {
1315 char warnstr[MAXPATHLEN+80];
1316 sprintf(warnstr, "Not importing directory "
1317 "'%.*s': missing __init__.py",
1318 MAXPATHLEN, buf);
1319 if (PyErr_Warn(PyExc_ImportWarning,
1320 warnstr)) {
1321 Py_XDECREF(copy);
1322 return NULL;
1326 #else
1327 /* XXX How are you going to test for directories? */
1328 #ifdef RISCOS
1329 if (isdir(buf) &&
1330 case_ok(buf, len, namelen, name)) {
1331 if (find_init_module(buf)) {
1332 Py_XDECREF(copy);
1333 return &fd_package;
1335 else {
1336 char warnstr[MAXPATHLEN+80];
1337 sprintf(warnstr, "Not importing directory "
1338 "'%.*s': missing __init__.py",
1339 MAXPATHLEN, buf);
1340 if (PyErr_Warn(PyExc_ImportWarning,
1341 warnstr)) {
1342 Py_XDECREF(copy);
1343 return NULL;
1346 #endif
1347 #endif
1348 #if defined(PYOS_OS2)
1349 /* take a snapshot of the module spec for restoration
1350 * after the 8 character DLL hackery
1352 saved_buf = strdup(buf);
1353 saved_len = len;
1354 saved_namelen = namelen;
1355 #endif /* PYOS_OS2 */
1356 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
1357 #if defined(PYOS_OS2)
1358 /* OS/2 limits DLLs to 8 character names (w/o
1359 extension)
1360 * so if the name is longer than that and its a
1361 * dynamically loaded module we're going to try,
1362 * truncate the name before trying
1364 if (strlen(subname) > 8) {
1365 /* is this an attempt to load a C extension? */
1366 const struct filedescr *scan;
1367 scan = _PyImport_DynLoadFiletab;
1368 while (scan->suffix != NULL) {
1369 if (!strcmp(scan->suffix, fdp->suffix))
1370 break;
1371 else
1372 scan++;
1374 if (scan->suffix != NULL) {
1375 /* yes, so truncate the name */
1376 namelen = 8;
1377 len -= strlen(subname) - namelen;
1378 buf[len] = '\0';
1381 #endif /* PYOS_OS2 */
1382 strcpy(buf+len, fdp->suffix);
1383 if (Py_VerboseFlag > 1)
1384 PySys_WriteStderr("# trying %s\n", buf);
1385 filemode = fdp->mode;
1386 if (filemode[0] == 'U')
1387 filemode = "r" PY_STDIOTEXTMODE;
1388 fp = fopen(buf, filemode);
1389 if (fp != NULL) {
1390 if (case_ok(buf, len, namelen, name))
1391 break;
1392 else { /* continue search */
1393 fclose(fp);
1394 fp = NULL;
1397 #if defined(PYOS_OS2)
1398 /* restore the saved snapshot */
1399 strcpy(buf, saved_buf);
1400 len = saved_len;
1401 namelen = saved_namelen;
1402 #endif
1404 #if defined(PYOS_OS2)
1405 /* don't need/want the module name snapshot anymore */
1406 if (saved_buf)
1408 free(saved_buf);
1409 saved_buf = NULL;
1411 #endif
1412 Py_XDECREF(copy);
1413 if (fp != NULL)
1414 break;
1416 if (fp == NULL) {
1417 PyErr_Format(PyExc_ImportError,
1418 "No module named %.200s", name);
1419 return NULL;
1421 *p_fp = fp;
1422 return fdp;
1425 /* Helpers for main.c
1426 * Find the source file corresponding to a named module
1428 struct filedescr *
1429 _PyImport_FindModule(const char *name, PyObject *path, char *buf,
1430 size_t buflen, FILE **p_fp, PyObject **p_loader)
1432 return find_module((char *) name, (char *) name, path,
1433 buf, buflen, p_fp, p_loader);
1436 PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1438 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
1441 /* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
1442 * The arguments here are tricky, best shown by example:
1443 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1444 * ^ ^ ^ ^
1445 * |--------------------- buf ---------------------|
1446 * |------------------- len ------------------|
1447 * |------ name -------|
1448 * |----- namelen -----|
1449 * buf is the full path, but len only counts up to (& exclusive of) the
1450 * extension. name is the module name, also exclusive of extension.
1452 * We've already done a successful stat() or fopen() on buf, so know that
1453 * there's some match, possibly case-insensitive.
1455 * case_ok() is to return 1 if there's a case-sensitive match for
1456 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1457 * exists.
1459 * case_ok() is used to implement case-sensitive import semantics even
1460 * on platforms with case-insensitive filesystems. It's trivial to implement
1461 * for case-sensitive filesystems. It's pretty much a cross-platform
1462 * nightmare for systems with case-insensitive filesystems.
1465 /* First we may need a pile of platform-specific header files; the sequence
1466 * of #if's here should match the sequence in the body of case_ok().
1468 #if defined(MS_WINDOWS)
1469 #include <windows.h>
1471 #elif defined(DJGPP)
1472 #include <dir.h>
1474 #elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
1475 #include <sys/types.h>
1476 #include <dirent.h>
1478 #elif defined(PYOS_OS2)
1479 #define INCL_DOS
1480 #define INCL_DOSERRORS
1481 #define INCL_NOPMAPI
1482 #include <os2.h>
1484 #elif defined(RISCOS)
1485 #include "oslib/osfscontrol.h"
1486 #endif
1488 static int
1489 case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
1491 /* Pick a platform-specific implementation; the sequence of #if's here should
1492 * match the sequence just above.
1495 /* MS_WINDOWS */
1496 #if defined(MS_WINDOWS)
1497 WIN32_FIND_DATA data;
1498 HANDLE h;
1500 if (Py_GETENV("PYTHONCASEOK") != NULL)
1501 return 1;
1503 h = FindFirstFile(buf, &data);
1504 if (h == INVALID_HANDLE_VALUE) {
1505 PyErr_Format(PyExc_NameError,
1506 "Can't find file for module %.100s\n(filename %.300s)",
1507 name, buf);
1508 return 0;
1510 FindClose(h);
1511 return strncmp(data.cFileName, name, namelen) == 0;
1513 /* DJGPP */
1514 #elif defined(DJGPP)
1515 struct ffblk ffblk;
1516 int done;
1518 if (Py_GETENV("PYTHONCASEOK") != NULL)
1519 return 1;
1521 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1522 if (done) {
1523 PyErr_Format(PyExc_NameError,
1524 "Can't find file for module %.100s\n(filename %.300s)",
1525 name, buf);
1526 return 0;
1528 return strncmp(ffblk.ff_name, name, namelen) == 0;
1530 /* new-fangled macintosh (macosx) or Cygwin */
1531 #elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
1532 DIR *dirp;
1533 struct dirent *dp;
1534 char dirname[MAXPATHLEN + 1];
1535 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
1537 if (Py_GETENV("PYTHONCASEOK") != NULL)
1538 return 1;
1540 /* Copy the dir component into dirname; substitute "." if empty */
1541 if (dirlen <= 0) {
1542 dirname[0] = '.';
1543 dirname[1] = '\0';
1545 else {
1546 assert(dirlen <= MAXPATHLEN);
1547 memcpy(dirname, buf, dirlen);
1548 dirname[dirlen] = '\0';
1550 /* Open the directory and search the entries for an exact match. */
1551 dirp = opendir(dirname);
1552 if (dirp) {
1553 char *nameWithExt = buf + len - namelen;
1554 while ((dp = readdir(dirp)) != NULL) {
1555 const int thislen =
1556 #ifdef _DIRENT_HAVE_D_NAMELEN
1557 dp->d_namlen;
1558 #else
1559 strlen(dp->d_name);
1560 #endif
1561 if (thislen >= namelen &&
1562 strcmp(dp->d_name, nameWithExt) == 0) {
1563 (void)closedir(dirp);
1564 return 1; /* Found */
1567 (void)closedir(dirp);
1569 return 0 ; /* Not found */
1571 /* RISC OS */
1572 #elif defined(RISCOS)
1573 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1574 char buf2[MAXPATHLEN+2];
1575 char *nameWithExt = buf+len-namelen;
1576 int canonlen;
1577 os_error *e;
1579 if (Py_GETENV("PYTHONCASEOK") != NULL)
1580 return 1;
1582 /* workaround:
1583 append wildcard, otherwise case of filename wouldn't be touched */
1584 strcpy(buf2, buf);
1585 strcat(buf2, "*");
1587 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1588 canonlen = MAXPATHLEN+1-canonlen;
1589 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1590 return 0;
1591 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1592 return 1; /* match */
1594 return 0;
1596 /* OS/2 */
1597 #elif defined(PYOS_OS2)
1598 HDIR hdir = 1;
1599 ULONG srchcnt = 1;
1600 FILEFINDBUF3 ffbuf;
1601 APIRET rc;
1603 if (getenv("PYTHONCASEOK") != NULL)
1604 return 1;
1606 rc = DosFindFirst(buf,
1607 &hdir,
1608 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1609 &ffbuf, sizeof(ffbuf),
1610 &srchcnt,
1611 FIL_STANDARD);
1612 if (rc != NO_ERROR)
1613 return 0;
1614 return strncmp(ffbuf.achName, name, namelen) == 0;
1616 /* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1617 #else
1618 return 1;
1620 #endif
1624 #ifdef HAVE_STAT
1625 /* Helper to look for __init__.py or __init__.py[co] in potential package */
1626 static int
1627 find_init_module(char *buf)
1629 const size_t save_len = strlen(buf);
1630 size_t i = save_len;
1631 char *pname; /* pointer to start of __init__ */
1632 struct stat statbuf;
1634 /* For calling case_ok(buf, len, namelen, name):
1635 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1636 * ^ ^ ^ ^
1637 * |--------------------- buf ---------------------|
1638 * |------------------- len ------------------|
1639 * |------ name -------|
1640 * |----- namelen -----|
1642 if (save_len + 13 >= MAXPATHLEN)
1643 return 0;
1644 buf[i++] = SEP;
1645 pname = buf + i;
1646 strcpy(pname, "__init__.py");
1647 if (stat(buf, &statbuf) == 0) {
1648 if (case_ok(buf,
1649 save_len + 9, /* len("/__init__") */
1650 8, /* len("__init__") */
1651 pname)) {
1652 buf[save_len] = '\0';
1653 return 1;
1656 i += strlen(pname);
1657 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
1658 if (stat(buf, &statbuf) == 0) {
1659 if (case_ok(buf,
1660 save_len + 9, /* len("/__init__") */
1661 8, /* len("__init__") */
1662 pname)) {
1663 buf[save_len] = '\0';
1664 return 1;
1667 buf[save_len] = '\0';
1668 return 0;
1671 #else
1673 #ifdef RISCOS
1674 static int
1675 find_init_module(buf)
1676 char *buf;
1678 int save_len = strlen(buf);
1679 int i = save_len;
1681 if (save_len + 13 >= MAXPATHLEN)
1682 return 0;
1683 buf[i++] = SEP;
1684 strcpy(buf+i, "__init__/py");
1685 if (isfile(buf)) {
1686 buf[save_len] = '\0';
1687 return 1;
1690 if (Py_OptimizeFlag)
1691 strcpy(buf+i, "o");
1692 else
1693 strcpy(buf+i, "c");
1694 if (isfile(buf)) {
1695 buf[save_len] = '\0';
1696 return 1;
1698 buf[save_len] = '\0';
1699 return 0;
1701 #endif /*RISCOS*/
1703 #endif /* HAVE_STAT */
1706 static int init_builtin(char *); /* Forward */
1708 /* Load an external module using the default search path and return
1709 its module object WITH INCREMENTED REFERENCE COUNT */
1711 static PyObject *
1712 load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader)
1714 PyObject *modules;
1715 PyObject *m;
1716 int err;
1718 /* First check that there's an open file (if we need one) */
1719 switch (type) {
1720 case PY_SOURCE:
1721 case PY_COMPILED:
1722 if (fp == NULL) {
1723 PyErr_Format(PyExc_ValueError,
1724 "file object required for import (type code %d)",
1725 type);
1726 return NULL;
1730 switch (type) {
1732 case PY_SOURCE:
1733 m = load_source_module(name, buf, fp);
1734 break;
1736 case PY_COMPILED:
1737 m = load_compiled_module(name, buf, fp);
1738 break;
1740 #ifdef HAVE_DYNAMIC_LOADING
1741 case C_EXTENSION:
1742 m = _PyImport_LoadDynamicModule(name, buf, fp);
1743 break;
1744 #endif
1746 case PKG_DIRECTORY:
1747 m = load_package(name, buf);
1748 break;
1750 case C_BUILTIN:
1751 case PY_FROZEN:
1752 if (buf != NULL && buf[0] != '\0')
1753 name = buf;
1754 if (type == C_BUILTIN)
1755 err = init_builtin(name);
1756 else
1757 err = PyImport_ImportFrozenModule(name);
1758 if (err < 0)
1759 return NULL;
1760 if (err == 0) {
1761 PyErr_Format(PyExc_ImportError,
1762 "Purported %s module %.200s not found",
1763 type == C_BUILTIN ?
1764 "builtin" : "frozen",
1765 name);
1766 return NULL;
1768 modules = PyImport_GetModuleDict();
1769 m = PyDict_GetItemString(modules, name);
1770 if (m == NULL) {
1771 PyErr_Format(
1772 PyExc_ImportError,
1773 "%s module %.200s not properly initialized",
1774 type == C_BUILTIN ?
1775 "builtin" : "frozen",
1776 name);
1777 return NULL;
1779 Py_INCREF(m);
1780 break;
1782 case IMP_HOOK: {
1783 if (loader == NULL) {
1784 PyErr_SetString(PyExc_ImportError,
1785 "import hook without loader");
1786 return NULL;
1788 m = PyObject_CallMethod(loader, "load_module", "s", name);
1789 break;
1792 default:
1793 PyErr_Format(PyExc_ImportError,
1794 "Don't know how to import %.200s (type code %d)",
1795 name, type);
1796 m = NULL;
1800 return m;
1804 /* Initialize a built-in module.
1805 Return 1 for success, 0 if the module is not found, and -1 with
1806 an exception set if the initialization failed. */
1808 static int
1809 init_builtin(char *name)
1811 struct _inittab *p;
1813 if (_PyImport_FindExtension(name, name) != NULL)
1814 return 1;
1816 for (p = PyImport_Inittab; p->name != NULL; p++) {
1817 if (strcmp(name, p->name) == 0) {
1818 if (p->initfunc == NULL) {
1819 PyErr_Format(PyExc_ImportError,
1820 "Cannot re-init internal module %.200s",
1821 name);
1822 return -1;
1824 if (Py_VerboseFlag)
1825 PySys_WriteStderr("import %s # builtin\n", name);
1826 (*p->initfunc)();
1827 if (PyErr_Occurred())
1828 return -1;
1829 if (_PyImport_FixupExtension(name, name) == NULL)
1830 return -1;
1831 return 1;
1834 return 0;
1838 /* Frozen modules */
1840 static struct _frozen *
1841 find_frozen(char *name)
1843 struct _frozen *p;
1845 for (p = PyImport_FrozenModules; ; p++) {
1846 if (p->name == NULL)
1847 return NULL;
1848 if (strcmp(p->name, name) == 0)
1849 break;
1851 return p;
1854 static PyObject *
1855 get_frozen_object(char *name)
1857 struct _frozen *p = find_frozen(name);
1858 int size;
1860 if (p == NULL) {
1861 PyErr_Format(PyExc_ImportError,
1862 "No such frozen object named %.200s",
1863 name);
1864 return NULL;
1866 if (p->code == NULL) {
1867 PyErr_Format(PyExc_ImportError,
1868 "Excluded frozen object named %.200s",
1869 name);
1870 return NULL;
1872 size = p->size;
1873 if (size < 0)
1874 size = -size;
1875 return PyMarshal_ReadObjectFromString((char *)p->code, size);
1878 /* Initialize a frozen module.
1879 Return 1 for succes, 0 if the module is not found, and -1 with
1880 an exception set if the initialization failed.
1881 This function is also used from frozenmain.c */
1884 PyImport_ImportFrozenModule(char *name)
1886 struct _frozen *p = find_frozen(name);
1887 PyObject *co;
1888 PyObject *m;
1889 int ispackage;
1890 int size;
1892 if (p == NULL)
1893 return 0;
1894 if (p->code == NULL) {
1895 PyErr_Format(PyExc_ImportError,
1896 "Excluded frozen object named %.200s",
1897 name);
1898 return -1;
1900 size = p->size;
1901 ispackage = (size < 0);
1902 if (ispackage)
1903 size = -size;
1904 if (Py_VerboseFlag)
1905 PySys_WriteStderr("import %s # frozen%s\n",
1906 name, ispackage ? " package" : "");
1907 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
1908 if (co == NULL)
1909 return -1;
1910 if (!PyCode_Check(co)) {
1911 PyErr_Format(PyExc_TypeError,
1912 "frozen object %.200s is not a code object",
1913 name);
1914 goto err_return;
1916 if (ispackage) {
1917 /* Set __path__ to the package name */
1918 PyObject *d, *s;
1919 int err;
1920 m = PyImport_AddModule(name);
1921 if (m == NULL)
1922 goto err_return;
1923 d = PyModule_GetDict(m);
1924 s = PyString_InternFromString(name);
1925 if (s == NULL)
1926 goto err_return;
1927 err = PyDict_SetItemString(d, "__path__", s);
1928 Py_DECREF(s);
1929 if (err != 0)
1930 goto err_return;
1932 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
1933 if (m == NULL)
1934 goto err_return;
1935 Py_DECREF(co);
1936 Py_DECREF(m);
1937 return 1;
1938 err_return:
1939 Py_DECREF(co);
1940 return -1;
1944 /* Import a module, either built-in, frozen, or external, and return
1945 its module object WITH INCREMENTED REFERENCE COUNT */
1947 PyObject *
1948 PyImport_ImportModule(const char *name)
1950 PyObject *pname;
1951 PyObject *result;
1953 pname = PyString_FromString(name);
1954 if (pname == NULL)
1955 return NULL;
1956 result = PyImport_Import(pname);
1957 Py_DECREF(pname);
1958 return result;
1961 /* Forward declarations for helper routines */
1962 static PyObject *get_parent(PyObject *globals, char *buf,
1963 Py_ssize_t *p_buflen, int level);
1964 static PyObject *load_next(PyObject *mod, PyObject *altmod,
1965 char **p_name, char *buf, Py_ssize_t *p_buflen);
1966 static int mark_miss(char *name);
1967 static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
1968 char *buf, Py_ssize_t buflen, int recursive);
1969 static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
1971 /* The Magnum Opus of dotted-name import :-) */
1973 static PyObject *
1974 import_module_level(char *name, PyObject *globals, PyObject *locals,
1975 PyObject *fromlist, int level)
1977 char buf[MAXPATHLEN+1];
1978 Py_ssize_t buflen = 0;
1979 PyObject *parent, *head, *next, *tail;
1981 parent = get_parent(globals, buf, &buflen, level);
1982 if (parent == NULL)
1983 return NULL;
1985 head = load_next(parent, Py_None, &name, buf, &buflen);
1986 if (head == NULL)
1987 return NULL;
1989 tail = head;
1990 Py_INCREF(tail);
1991 while (name) {
1992 next = load_next(tail, tail, &name, buf, &buflen);
1993 Py_DECREF(tail);
1994 if (next == NULL) {
1995 Py_DECREF(head);
1996 return NULL;
1998 tail = next;
2000 if (tail == Py_None) {
2001 /* If tail is Py_None, both get_parent and load_next found
2002 an empty module name: someone called __import__("") or
2003 doctored faulty bytecode */
2004 Py_DECREF(tail);
2005 Py_DECREF(head);
2006 PyErr_SetString(PyExc_ValueError,
2007 "Empty module name");
2008 return NULL;
2011 if (fromlist != NULL) {
2012 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2013 fromlist = NULL;
2016 if (fromlist == NULL) {
2017 Py_DECREF(tail);
2018 return head;
2021 Py_DECREF(head);
2022 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
2023 Py_DECREF(tail);
2024 return NULL;
2027 return tail;
2030 /* For DLL compatibility */
2031 #undef PyImport_ImportModuleEx
2032 PyObject *
2033 PyImport_ImportModuleEx(char *name, PyObject *globals, PyObject *locals,
2034 PyObject *fromlist)
2036 PyObject *result;
2037 lock_import();
2038 result = import_module_level(name, globals, locals, fromlist, -1);
2039 if (unlock_import() < 0) {
2040 Py_XDECREF(result);
2041 PyErr_SetString(PyExc_RuntimeError,
2042 "not holding the import lock");
2043 return NULL;
2045 return result;
2047 #define PyImport_ImportModuleEx(n, g, l, f) \
2048 PyImport_ImportModuleLevel(n, g, l, f, -1);
2050 PyObject *
2051 PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
2052 PyObject *fromlist, int level)
2054 PyObject *result;
2055 lock_import();
2056 result = import_module_level(name, globals, locals, fromlist, level);
2057 if (unlock_import() < 0) {
2058 Py_XDECREF(result);
2059 PyErr_SetString(PyExc_RuntimeError,
2060 "not holding the import lock");
2061 return NULL;
2063 return result;
2066 /* Return the package that an import is being performed in. If globals comes
2067 from the module foo.bar.bat (not itself a package), this returns the
2068 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
2069 the package's entry in sys.modules is returned, as a borrowed reference.
2071 The *name* of the returned package is returned in buf, with the length of
2072 the name in *p_buflen.
2074 If globals doesn't come from a package or a module in a package, or a
2075 corresponding entry is not found in sys.modules, Py_None is returned.
2077 static PyObject *
2078 get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
2080 static PyObject *namestr = NULL;
2081 static PyObject *pathstr = NULL;
2082 PyObject *modname, *modpath, *modules, *parent;
2084 if (globals == NULL || !PyDict_Check(globals) || !level)
2085 return Py_None;
2087 if (namestr == NULL) {
2088 namestr = PyString_InternFromString("__name__");
2089 if (namestr == NULL)
2090 return NULL;
2092 if (pathstr == NULL) {
2093 pathstr = PyString_InternFromString("__path__");
2094 if (pathstr == NULL)
2095 return NULL;
2098 *buf = '\0';
2099 *p_buflen = 0;
2100 modname = PyDict_GetItem(globals, namestr);
2101 if (modname == NULL || !PyString_Check(modname))
2102 return Py_None;
2104 modpath = PyDict_GetItem(globals, pathstr);
2105 if (modpath != NULL) {
2106 Py_ssize_t len = PyString_GET_SIZE(modname);
2107 if (len > MAXPATHLEN) {
2108 PyErr_SetString(PyExc_ValueError,
2109 "Module name too long");
2110 return NULL;
2112 strcpy(buf, PyString_AS_STRING(modname));
2114 else {
2115 char *start = PyString_AS_STRING(modname);
2116 char *lastdot = strrchr(start, '.');
2117 size_t len;
2118 if (lastdot == NULL && level > 0) {
2119 PyErr_SetString(PyExc_ValueError,
2120 "Attempted relative import in non-package");
2121 return NULL;
2123 if (lastdot == NULL)
2124 return Py_None;
2125 len = lastdot - start;
2126 if (len >= MAXPATHLEN) {
2127 PyErr_SetString(PyExc_ValueError,
2128 "Module name too long");
2129 return NULL;
2131 strncpy(buf, start, len);
2132 buf[len] = '\0';
2135 while (--level > 0) {
2136 char *dot = strrchr(buf, '.');
2137 if (dot == NULL) {
2138 PyErr_SetString(PyExc_ValueError,
2139 "Attempted relative import beyond "
2140 "toplevel package");
2141 return NULL;
2143 *dot = '\0';
2145 *p_buflen = strlen(buf);
2147 modules = PyImport_GetModuleDict();
2148 parent = PyDict_GetItemString(modules, buf);
2149 if (parent == NULL)
2150 PyErr_Format(PyExc_SystemError,
2151 "Parent module '%.200s' not loaded", buf);
2152 return parent;
2153 /* We expect, but can't guarantee, if parent != None, that:
2154 - parent.__name__ == buf
2155 - parent.__dict__ is globals
2156 If this is violated... Who cares? */
2159 /* altmod is either None or same as mod */
2160 static PyObject *
2161 load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
2162 Py_ssize_t *p_buflen)
2164 char *name = *p_name;
2165 char *dot = strchr(name, '.');
2166 size_t len;
2167 char *p;
2168 PyObject *result;
2170 if (strlen(name) == 0) {
2171 /* completely empty module name should only happen in
2172 'from . import' (or '__import__("")')*/
2173 Py_INCREF(mod);
2174 *p_name = NULL;
2175 return mod;
2178 if (dot == NULL) {
2179 *p_name = NULL;
2180 len = strlen(name);
2182 else {
2183 *p_name = dot+1;
2184 len = dot-name;
2186 if (len == 0) {
2187 PyErr_SetString(PyExc_ValueError,
2188 "Empty module name");
2189 return NULL;
2192 p = buf + *p_buflen;
2193 if (p != buf)
2194 *p++ = '.';
2195 if (p+len-buf >= MAXPATHLEN) {
2196 PyErr_SetString(PyExc_ValueError,
2197 "Module name too long");
2198 return NULL;
2200 strncpy(p, name, len);
2201 p[len] = '\0';
2202 *p_buflen = p+len-buf;
2204 result = import_submodule(mod, p, buf);
2205 if (result == Py_None && altmod != mod) {
2206 Py_DECREF(result);
2207 /* Here, altmod must be None and mod must not be None */
2208 result = import_submodule(altmod, p, p);
2209 if (result != NULL && result != Py_None) {
2210 if (mark_miss(buf) != 0) {
2211 Py_DECREF(result);
2212 return NULL;
2214 strncpy(buf, name, len);
2215 buf[len] = '\0';
2216 *p_buflen = len;
2219 if (result == NULL)
2220 return NULL;
2222 if (result == Py_None) {
2223 Py_DECREF(result);
2224 PyErr_Format(PyExc_ImportError,
2225 "No module named %.200s", name);
2226 return NULL;
2229 return result;
2232 static int
2233 mark_miss(char *name)
2235 PyObject *modules = PyImport_GetModuleDict();
2236 return PyDict_SetItemString(modules, name, Py_None);
2239 static int
2240 ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
2241 int recursive)
2243 int i;
2245 if (!PyObject_HasAttrString(mod, "__path__"))
2246 return 1;
2248 for (i = 0; ; i++) {
2249 PyObject *item = PySequence_GetItem(fromlist, i);
2250 int hasit;
2251 if (item == NULL) {
2252 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2253 PyErr_Clear();
2254 return 1;
2256 return 0;
2258 if (!PyString_Check(item)) {
2259 PyErr_SetString(PyExc_TypeError,
2260 "Item in ``from list'' not a string");
2261 Py_DECREF(item);
2262 return 0;
2264 if (PyString_AS_STRING(item)[0] == '*') {
2265 PyObject *all;
2266 Py_DECREF(item);
2267 /* See if the package defines __all__ */
2268 if (recursive)
2269 continue; /* Avoid endless recursion */
2270 all = PyObject_GetAttrString(mod, "__all__");
2271 if (all == NULL)
2272 PyErr_Clear();
2273 else {
2274 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
2275 Py_DECREF(all);
2276 if (!ret)
2277 return 0;
2279 continue;
2281 hasit = PyObject_HasAttr(mod, item);
2282 if (!hasit) {
2283 char *subname = PyString_AS_STRING(item);
2284 PyObject *submod;
2285 char *p;
2286 if (buflen + strlen(subname) >= MAXPATHLEN) {
2287 PyErr_SetString(PyExc_ValueError,
2288 "Module name too long");
2289 Py_DECREF(item);
2290 return 0;
2292 p = buf + buflen;
2293 *p++ = '.';
2294 strcpy(p, subname);
2295 submod = import_submodule(mod, subname, buf);
2296 Py_XDECREF(submod);
2297 if (submod == NULL) {
2298 Py_DECREF(item);
2299 return 0;
2302 Py_DECREF(item);
2305 /* NOTREACHED */
2308 static int
2309 add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
2310 PyObject *modules)
2312 if (mod == Py_None)
2313 return 1;
2314 /* Irrespective of the success of this load, make a
2315 reference to it in the parent package module. A copy gets
2316 saved in the modules dictionary under the full name, so get a
2317 reference from there, if need be. (The exception is when the
2318 load failed with a SyntaxError -- then there's no trace in
2319 sys.modules. In that case, of course, do nothing extra.) */
2320 if (submod == NULL) {
2321 submod = PyDict_GetItemString(modules, fullname);
2322 if (submod == NULL)
2323 return 1;
2325 if (PyModule_Check(mod)) {
2326 /* We can't use setattr here since it can give a
2327 * spurious warning if the submodule name shadows a
2328 * builtin name */
2329 PyObject *dict = PyModule_GetDict(mod);
2330 if (!dict)
2331 return 0;
2332 if (PyDict_SetItemString(dict, subname, submod) < 0)
2333 return 0;
2335 else {
2336 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2337 return 0;
2339 return 1;
2342 static PyObject *
2343 import_submodule(PyObject *mod, char *subname, char *fullname)
2345 PyObject *modules = PyImport_GetModuleDict();
2346 PyObject *m = NULL;
2348 /* Require:
2349 if mod == None: subname == fullname
2350 else: mod.__name__ + "." + subname == fullname
2353 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
2354 Py_INCREF(m);
2356 else {
2357 PyObject *path, *loader = NULL;
2358 char buf[MAXPATHLEN+1];
2359 struct filedescr *fdp;
2360 FILE *fp = NULL;
2362 if (mod == Py_None)
2363 path = NULL;
2364 else {
2365 path = PyObject_GetAttrString(mod, "__path__");
2366 if (path == NULL) {
2367 PyErr_Clear();
2368 Py_INCREF(Py_None);
2369 return Py_None;
2373 buf[0] = '\0';
2374 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2375 &fp, &loader);
2376 Py_XDECREF(path);
2377 if (fdp == NULL) {
2378 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2379 return NULL;
2380 PyErr_Clear();
2381 Py_INCREF(Py_None);
2382 return Py_None;
2384 m = load_module(fullname, fp, buf, fdp->type, loader);
2385 Py_XDECREF(loader);
2386 if (fp)
2387 fclose(fp);
2388 if (!add_submodule(mod, m, fullname, subname, modules)) {
2389 Py_XDECREF(m);
2390 m = NULL;
2394 return m;
2398 /* Re-import a module of any kind and return its module object, WITH
2399 INCREMENTED REFERENCE COUNT */
2401 PyObject *
2402 PyImport_ReloadModule(PyObject *m)
2404 PyObject *modules = PyImport_GetModuleDict();
2405 PyObject *path = NULL, *loader = NULL;
2406 char *name, *subname;
2407 char buf[MAXPATHLEN+1];
2408 struct filedescr *fdp;
2409 FILE *fp = NULL;
2410 PyObject *newm;
2412 if (m == NULL || !PyModule_Check(m)) {
2413 PyErr_SetString(PyExc_TypeError,
2414 "reload() argument must be module");
2415 return NULL;
2417 name = PyModule_GetName(m);
2418 if (name == NULL)
2419 return NULL;
2420 if (m != PyDict_GetItemString(modules, name)) {
2421 PyErr_Format(PyExc_ImportError,
2422 "reload(): module %.200s not in sys.modules",
2423 name);
2424 return NULL;
2426 subname = strrchr(name, '.');
2427 if (subname == NULL)
2428 subname = name;
2429 else {
2430 PyObject *parentname, *parent;
2431 parentname = PyString_FromStringAndSize(name, (subname-name));
2432 if (parentname == NULL)
2433 return NULL;
2434 parent = PyDict_GetItem(modules, parentname);
2435 if (parent == NULL) {
2436 PyErr_Format(PyExc_ImportError,
2437 "reload(): parent %.200s not in sys.modules",
2438 PyString_AS_STRING(parentname));
2439 Py_DECREF(parentname);
2440 return NULL;
2442 Py_DECREF(parentname);
2443 subname++;
2444 path = PyObject_GetAttrString(parent, "__path__");
2445 if (path == NULL)
2446 PyErr_Clear();
2448 buf[0] = '\0';
2449 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
2450 Py_XDECREF(path);
2452 if (fdp == NULL) {
2453 Py_XDECREF(loader);
2454 return NULL;
2457 newm = load_module(name, fp, buf, fdp->type, loader);
2458 Py_XDECREF(loader);
2460 if (fp)
2461 fclose(fp);
2462 if (newm == NULL) {
2463 /* load_module probably removed name from modules because of
2464 * the error. Put back the original module object. We're
2465 * going to return NULL in this case regardless of whether
2466 * replacing name succeeds, so the return value is ignored.
2468 PyDict_SetItemString(modules, name, m);
2470 return newm;
2474 /* Higher-level import emulator which emulates the "import" statement
2475 more accurately -- it invokes the __import__() function from the
2476 builtins of the current globals. This means that the import is
2477 done using whatever import hooks are installed in the current
2478 environment, e.g. by "rexec".
2479 A dummy list ["__doc__"] is passed as the 4th argument so that
2480 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
2481 will return <module "gencache"> instead of <module "win32com">. */
2483 PyObject *
2484 PyImport_Import(PyObject *module_name)
2486 static PyObject *silly_list = NULL;
2487 static PyObject *builtins_str = NULL;
2488 static PyObject *import_str = NULL;
2489 PyObject *globals = NULL;
2490 PyObject *import = NULL;
2491 PyObject *builtins = NULL;
2492 PyObject *r = NULL;
2494 /* Initialize constant string objects */
2495 if (silly_list == NULL) {
2496 import_str = PyString_InternFromString("__import__");
2497 if (import_str == NULL)
2498 return NULL;
2499 builtins_str = PyString_InternFromString("__builtins__");
2500 if (builtins_str == NULL)
2501 return NULL;
2502 silly_list = Py_BuildValue("[s]", "__doc__");
2503 if (silly_list == NULL)
2504 return NULL;
2507 /* Get the builtins from current globals */
2508 globals = PyEval_GetGlobals();
2509 if (globals != NULL) {
2510 Py_INCREF(globals);
2511 builtins = PyObject_GetItem(globals, builtins_str);
2512 if (builtins == NULL)
2513 goto err;
2515 else {
2516 /* No globals -- use standard builtins, and fake globals */
2517 PyErr_Clear();
2519 builtins = PyImport_ImportModuleLevel("__builtin__",
2520 NULL, NULL, NULL, 0);
2521 if (builtins == NULL)
2522 return NULL;
2523 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2524 if (globals == NULL)
2525 goto err;
2528 /* Get the __import__ function from the builtins */
2529 if (PyDict_Check(builtins)) {
2530 import = PyObject_GetItem(builtins, import_str);
2531 if (import == NULL)
2532 PyErr_SetObject(PyExc_KeyError, import_str);
2534 else
2535 import = PyObject_GetAttr(builtins, import_str);
2536 if (import == NULL)
2537 goto err;
2539 /* Call the _import__ function with the proper argument list */
2540 r = PyObject_CallFunctionObjArgs(import, module_name, globals,
2541 globals, silly_list, NULL);
2543 err:
2544 Py_XDECREF(globals);
2545 Py_XDECREF(builtins);
2546 Py_XDECREF(import);
2548 return r;
2552 /* Module 'imp' provides Python access to the primitives used for
2553 importing modules.
2556 static PyObject *
2557 imp_get_magic(PyObject *self, PyObject *noargs)
2559 char buf[4];
2561 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2562 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2563 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2564 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
2566 return PyString_FromStringAndSize(buf, 4);
2569 static PyObject *
2570 imp_get_suffixes(PyObject *self, PyObject *noargs)
2572 PyObject *list;
2573 struct filedescr *fdp;
2575 list = PyList_New(0);
2576 if (list == NULL)
2577 return NULL;
2578 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2579 PyObject *item = Py_BuildValue("ssi",
2580 fdp->suffix, fdp->mode, fdp->type);
2581 if (item == NULL) {
2582 Py_DECREF(list);
2583 return NULL;
2585 if (PyList_Append(list, item) < 0) {
2586 Py_DECREF(list);
2587 Py_DECREF(item);
2588 return NULL;
2590 Py_DECREF(item);
2592 return list;
2595 static PyObject *
2596 call_find_module(char *name, PyObject *path)
2598 extern int fclose(FILE *);
2599 PyObject *fob, *ret;
2600 struct filedescr *fdp;
2601 char pathname[MAXPATHLEN+1];
2602 FILE *fp = NULL;
2604 pathname[0] = '\0';
2605 if (path == Py_None)
2606 path = NULL;
2607 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
2608 if (fdp == NULL)
2609 return NULL;
2610 if (fp != NULL) {
2611 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
2612 if (fob == NULL) {
2613 fclose(fp);
2614 return NULL;
2617 else {
2618 fob = Py_None;
2619 Py_INCREF(fob);
2621 ret = Py_BuildValue("Os(ssi)",
2622 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
2623 Py_DECREF(fob);
2624 return ret;
2627 static PyObject *
2628 imp_find_module(PyObject *self, PyObject *args)
2630 char *name;
2631 PyObject *path = NULL;
2632 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
2633 return NULL;
2634 return call_find_module(name, path);
2637 static PyObject *
2638 imp_init_builtin(PyObject *self, PyObject *args)
2640 char *name;
2641 int ret;
2642 PyObject *m;
2643 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
2644 return NULL;
2645 ret = init_builtin(name);
2646 if (ret < 0)
2647 return NULL;
2648 if (ret == 0) {
2649 Py_INCREF(Py_None);
2650 return Py_None;
2652 m = PyImport_AddModule(name);
2653 Py_XINCREF(m);
2654 return m;
2657 static PyObject *
2658 imp_init_frozen(PyObject *self, PyObject *args)
2660 char *name;
2661 int ret;
2662 PyObject *m;
2663 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
2664 return NULL;
2665 ret = PyImport_ImportFrozenModule(name);
2666 if (ret < 0)
2667 return NULL;
2668 if (ret == 0) {
2669 Py_INCREF(Py_None);
2670 return Py_None;
2672 m = PyImport_AddModule(name);
2673 Py_XINCREF(m);
2674 return m;
2677 static PyObject *
2678 imp_get_frozen_object(PyObject *self, PyObject *args)
2680 char *name;
2682 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
2683 return NULL;
2684 return get_frozen_object(name);
2687 static PyObject *
2688 imp_is_builtin(PyObject *self, PyObject *args)
2690 char *name;
2691 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
2692 return NULL;
2693 return PyInt_FromLong(is_builtin(name));
2696 static PyObject *
2697 imp_is_frozen(PyObject *self, PyObject *args)
2699 char *name;
2700 struct _frozen *p;
2701 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
2702 return NULL;
2703 p = find_frozen(name);
2704 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
2707 static FILE *
2708 get_file(char *pathname, PyObject *fob, char *mode)
2710 FILE *fp;
2711 if (fob == NULL) {
2712 if (mode[0] == 'U')
2713 mode = "r" PY_STDIOTEXTMODE;
2714 fp = fopen(pathname, mode);
2715 if (fp == NULL)
2716 PyErr_SetFromErrno(PyExc_IOError);
2718 else {
2719 fp = PyFile_AsFile(fob);
2720 if (fp == NULL)
2721 PyErr_SetString(PyExc_ValueError,
2722 "bad/closed file object");
2724 return fp;
2727 static PyObject *
2728 imp_load_compiled(PyObject *self, PyObject *args)
2730 char *name;
2731 char *pathname;
2732 PyObject *fob = NULL;
2733 PyObject *m;
2734 FILE *fp;
2735 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
2736 &PyFile_Type, &fob))
2737 return NULL;
2738 fp = get_file(pathname, fob, "rb");
2739 if (fp == NULL)
2740 return NULL;
2741 m = load_compiled_module(name, pathname, fp);
2742 if (fob == NULL)
2743 fclose(fp);
2744 return m;
2747 #ifdef HAVE_DYNAMIC_LOADING
2749 static PyObject *
2750 imp_load_dynamic(PyObject *self, PyObject *args)
2752 char *name;
2753 char *pathname;
2754 PyObject *fob = NULL;
2755 PyObject *m;
2756 FILE *fp = NULL;
2757 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
2758 &PyFile_Type, &fob))
2759 return NULL;
2760 if (fob) {
2761 fp = get_file(pathname, fob, "r");
2762 if (fp == NULL)
2763 return NULL;
2765 m = _PyImport_LoadDynamicModule(name, pathname, fp);
2766 return m;
2769 #endif /* HAVE_DYNAMIC_LOADING */
2771 static PyObject *
2772 imp_load_source(PyObject *self, PyObject *args)
2774 char *name;
2775 char *pathname;
2776 PyObject *fob = NULL;
2777 PyObject *m;
2778 FILE *fp;
2779 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
2780 &PyFile_Type, &fob))
2781 return NULL;
2782 fp = get_file(pathname, fob, "r");
2783 if (fp == NULL)
2784 return NULL;
2785 m = load_source_module(name, pathname, fp);
2786 if (fob == NULL)
2787 fclose(fp);
2788 return m;
2791 static PyObject *
2792 imp_load_module(PyObject *self, PyObject *args)
2794 char *name;
2795 PyObject *fob;
2796 char *pathname;
2797 char *suffix; /* Unused */
2798 char *mode;
2799 int type;
2800 FILE *fp;
2802 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
2803 &name, &fob, &pathname,
2804 &suffix, &mode, &type))
2805 return NULL;
2806 if (*mode) {
2807 /* Mode must start with 'r' or 'U' and must not contain '+'.
2808 Implicit in this test is the assumption that the mode
2809 may contain other modifiers like 'b' or 't'. */
2811 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
2812 PyErr_Format(PyExc_ValueError,
2813 "invalid file open mode %.200s", mode);
2814 return NULL;
2817 if (fob == Py_None)
2818 fp = NULL;
2819 else {
2820 if (!PyFile_Check(fob)) {
2821 PyErr_SetString(PyExc_ValueError,
2822 "load_module arg#2 should be a file or None");
2823 return NULL;
2825 fp = get_file(pathname, fob, mode);
2826 if (fp == NULL)
2827 return NULL;
2829 return load_module(name, fp, pathname, type, NULL);
2832 static PyObject *
2833 imp_load_package(PyObject *self, PyObject *args)
2835 char *name;
2836 char *pathname;
2837 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
2838 return NULL;
2839 return load_package(name, pathname);
2842 static PyObject *
2843 imp_new_module(PyObject *self, PyObject *args)
2845 char *name;
2846 if (!PyArg_ParseTuple(args, "s:new_module", &name))
2847 return NULL;
2848 return PyModule_New(name);
2851 /* Doc strings */
2853 PyDoc_STRVAR(doc_imp,
2854 "This module provides the components needed to build your own\n\
2855 __import__ function. Undocumented functions are obsolete.");
2857 PyDoc_STRVAR(doc_find_module,
2858 "find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
2859 Search for a module. If path is omitted or None, search for a\n\
2860 built-in, frozen or special module and continue search in sys.path.\n\
2861 The module name cannot contain '.'; to search for a submodule of a\n\
2862 package, pass the submodule name and the package's __path__.");
2864 PyDoc_STRVAR(doc_load_module,
2865 "load_module(name, file, filename, (suffix, mode, type)) -> module\n\
2866 Load a module, given information returned by find_module().\n\
2867 The module name must include the full package name, if any.");
2869 PyDoc_STRVAR(doc_get_magic,
2870 "get_magic() -> string\n\
2871 Return the magic number for .pyc or .pyo files.");
2873 PyDoc_STRVAR(doc_get_suffixes,
2874 "get_suffixes() -> [(suffix, mode, type), ...]\n\
2875 Return a list of (suffix, mode, type) tuples describing the files\n\
2876 that find_module() looks for.");
2878 PyDoc_STRVAR(doc_new_module,
2879 "new_module(name) -> module\n\
2880 Create a new module. Do not enter it in sys.modules.\n\
2881 The module name must include the full package name, if any.");
2883 PyDoc_STRVAR(doc_lock_held,
2884 "lock_held() -> boolean\n\
2885 Return True if the import lock is currently held, else False.\n\
2886 On platforms without threads, return False.");
2888 PyDoc_STRVAR(doc_acquire_lock,
2889 "acquire_lock() -> None\n\
2890 Acquires the interpreter's import lock for the current thread.\n\
2891 This lock should be used by import hooks to ensure thread-safety\n\
2892 when importing modules.\n\
2893 On platforms without threads, this function does nothing.");
2895 PyDoc_STRVAR(doc_release_lock,
2896 "release_lock() -> None\n\
2897 Release the interpreter's import lock.\n\
2898 On platforms without threads, this function does nothing.");
2900 static PyMethodDef imp_methods[] = {
2901 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
2902 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
2903 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
2904 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
2905 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
2906 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
2907 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
2908 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
2909 /* The rest are obsolete */
2910 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
2911 {"init_builtin", imp_init_builtin, METH_VARARGS},
2912 {"init_frozen", imp_init_frozen, METH_VARARGS},
2913 {"is_builtin", imp_is_builtin, METH_VARARGS},
2914 {"is_frozen", imp_is_frozen, METH_VARARGS},
2915 {"load_compiled", imp_load_compiled, METH_VARARGS},
2916 #ifdef HAVE_DYNAMIC_LOADING
2917 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
2918 #endif
2919 {"load_package", imp_load_package, METH_VARARGS},
2920 {"load_source", imp_load_source, METH_VARARGS},
2921 {NULL, NULL} /* sentinel */
2924 static int
2925 setint(PyObject *d, char *name, int value)
2927 PyObject *v;
2928 int err;
2930 v = PyInt_FromLong((long)value);
2931 err = PyDict_SetItemString(d, name, v);
2932 Py_XDECREF(v);
2933 return err;
2936 typedef struct {
2937 PyObject_HEAD
2938 } NullImporter;
2940 static int
2941 NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
2943 char *path;
2945 if (!_PyArg_NoKeywords("NullImporter()", kwds))
2946 return -1;
2948 if (!PyArg_ParseTuple(args, "s:NullImporter",
2949 &path))
2950 return -1;
2952 if (strlen(path) == 0) {
2953 PyErr_SetString(PyExc_ImportError, "empty pathname");
2954 return -1;
2955 } else {
2956 #ifndef RISCOS
2957 struct stat statbuf;
2958 int rv;
2960 rv = stat(path, &statbuf);
2961 if (rv == 0) {
2962 /* it exists */
2963 if (S_ISDIR(statbuf.st_mode)) {
2964 /* it's a directory */
2965 PyErr_SetString(PyExc_ImportError,
2966 "existing directory");
2967 return -1;
2970 #else
2971 if (object_exists(path)) {
2972 /* it exists */
2973 if (isdir(path)) {
2974 /* it's a directory */
2975 PyErr_SetString(PyExc_ImportError,
2976 "existing directory");
2977 return -1;
2980 #endif
2982 return 0;
2985 static PyObject *
2986 NullImporter_find_module(NullImporter *self, PyObject *args)
2988 Py_RETURN_NONE;
2991 static PyMethodDef NullImporter_methods[] = {
2992 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
2993 "Always return None"
2995 {NULL} /* Sentinel */
2999 static PyTypeObject NullImporterType = {
3000 PyObject_HEAD_INIT(NULL)
3001 0, /*ob_size*/
3002 "imp.NullImporter", /*tp_name*/
3003 sizeof(NullImporter), /*tp_basicsize*/
3004 0, /*tp_itemsize*/
3005 0, /*tp_dealloc*/
3006 0, /*tp_print*/
3007 0, /*tp_getattr*/
3008 0, /*tp_setattr*/
3009 0, /*tp_compare*/
3010 0, /*tp_repr*/
3011 0, /*tp_as_number*/
3012 0, /*tp_as_sequence*/
3013 0, /*tp_as_mapping*/
3014 0, /*tp_hash */
3015 0, /*tp_call*/
3016 0, /*tp_str*/
3017 0, /*tp_getattro*/
3018 0, /*tp_setattro*/
3019 0, /*tp_as_buffer*/
3020 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3021 "Null importer object", /* tp_doc */
3022 0, /* tp_traverse */
3023 0, /* tp_clear */
3024 0, /* tp_richcompare */
3025 0, /* tp_weaklistoffset */
3026 0, /* tp_iter */
3027 0, /* tp_iternext */
3028 NullImporter_methods, /* tp_methods */
3029 0, /* tp_members */
3030 0, /* tp_getset */
3031 0, /* tp_base */
3032 0, /* tp_dict */
3033 0, /* tp_descr_get */
3034 0, /* tp_descr_set */
3035 0, /* tp_dictoffset */
3036 (initproc)NullImporter_init, /* tp_init */
3037 0, /* tp_alloc */
3038 PyType_GenericNew /* tp_new */
3042 PyMODINIT_FUNC
3043 initimp(void)
3045 PyObject *m, *d;
3047 if (PyType_Ready(&NullImporterType) < 0)
3048 goto failure;
3050 m = Py_InitModule4("imp", imp_methods, doc_imp,
3051 NULL, PYTHON_API_VERSION);
3052 if (m == NULL)
3053 goto failure;
3054 d = PyModule_GetDict(m);
3055 if (d == NULL)
3056 goto failure;
3058 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3059 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3060 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3061 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3062 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3063 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3064 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3065 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
3066 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
3067 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
3069 Py_INCREF(&NullImporterType);
3070 PyModule_AddObject(m, "NullImporter", (PyObject *)&NullImporterType);
3071 failure:
3076 /* API for embedding applications that want to add their own entries
3077 to the table of built-in modules. This should normally be called
3078 *before* Py_Initialize(). When the table resize fails, -1 is
3079 returned and the existing table is unchanged.
3081 After a similar function by Just van Rossum. */
3084 PyImport_ExtendInittab(struct _inittab *newtab)
3086 static struct _inittab *our_copy = NULL;
3087 struct _inittab *p;
3088 int i, n;
3090 /* Count the number of entries in both tables */
3091 for (n = 0; newtab[n].name != NULL; n++)
3093 if (n == 0)
3094 return 0; /* Nothing to do */
3095 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3098 /* Allocate new memory for the combined table */
3099 p = our_copy;
3100 PyMem_RESIZE(p, struct _inittab, i+n+1);
3101 if (p == NULL)
3102 return -1;
3104 /* Copy the tables into the new memory */
3105 if (our_copy != PyImport_Inittab)
3106 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3107 PyImport_Inittab = our_copy = p;
3108 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
3110 return 0;
3113 /* Shorthand to add a single entry given a name and a function */
3116 PyImport_AppendInittab(char *name, void (*initfunc)(void))
3118 struct _inittab newtab[2];
3120 memset(newtab, '\0', sizeof newtab);
3122 newtab[0].name = name;
3123 newtab[0].initfunc = initfunc;
3125 return PyImport_ExtendInittab(newtab);
3128 #ifdef __cplusplus
3130 #endif