source: python/vendor/current/Python/import.c

Last change on this file was 388, checked in by dmik, 11 years ago

python: Update vendor to 2.7.6.

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