source: python/trunk/Python/import.c@ 394

Last change on this file since 394 was 391, checked in by dmik, 11 years ago

python: Merge vendor 2.7.6 to trunk.

  • Property svn:eol-style set to native
File size: 100.4 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(__KLIBC__)
1652#include <stdlib.h>
1653
1654#elif defined(PYOS_OS2)
1655#define INCL_DOS
1656#define INCL_DOSERRORS
1657#define INCL_NOPMAPI
1658#include <os2.h>
1659
1660#elif defined(RISCOS)
1661#include "oslib/osfscontrol.h"
1662#endif
1663
1664static int
1665case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
1666{
1667/* Pick a platform-specific implementation; the sequence of #if's here should
1668 * match the sequence just above.
1669 */
1670
1671/* MS_WINDOWS */
1672#if defined(MS_WINDOWS)
1673 WIN32_FIND_DATA data;
1674 HANDLE h;
1675
1676 if (Py_GETENV("PYTHONCASEOK") != NULL)
1677 return 1;
1678
1679 h = FindFirstFile(buf, &data);
1680 if (h == INVALID_HANDLE_VALUE) {
1681 PyErr_Format(PyExc_NameError,
1682 "Can't find file for module %.100s\n(filename %.300s)",
1683 name, buf);
1684 return 0;
1685 }
1686 FindClose(h);
1687 return strncmp(data.cFileName, name, namelen) == 0;
1688
1689/* DJGPP */
1690#elif defined(DJGPP)
1691 struct ffblk ffblk;
1692 int done;
1693
1694 if (Py_GETENV("PYTHONCASEOK") != NULL)
1695 return 1;
1696
1697 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1698 if (done) {
1699 PyErr_Format(PyExc_NameError,
1700 "Can't find file for module %.100s\n(filename %.300s)",
1701 name, buf);
1702 return 0;
1703 }
1704 return strncmp(ffblk.ff_name, name, namelen) == 0;
1705
1706/* new-fangled macintosh (macosx) or Cygwin */
1707#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
1708 DIR *dirp;
1709 struct dirent *dp;
1710 char dirname[MAXPATHLEN + 1];
1711 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
1712
1713 if (Py_GETENV("PYTHONCASEOK") != NULL)
1714 return 1;
1715
1716 /* Copy the dir component into dirname; substitute "." if empty */
1717 if (dirlen <= 0) {
1718 dirname[0] = '.';
1719 dirname[1] = '\0';
1720 }
1721 else {
1722 assert(dirlen <= MAXPATHLEN);
1723 memcpy(dirname, buf, dirlen);
1724 dirname[dirlen] = '\0';
1725 }
1726 /* Open the directory and search the entries for an exact match. */
1727 dirp = opendir(dirname);
1728 if (dirp) {
1729 char *nameWithExt = buf + len - namelen;
1730 while ((dp = readdir(dirp)) != NULL) {
1731 const int thislen =
1732#ifdef _DIRENT_HAVE_D_NAMELEN
1733 dp->d_namlen;
1734#else
1735 strlen(dp->d_name);
1736#endif
1737 if (thislen >= namelen &&
1738 strcmp(dp->d_name, nameWithExt) == 0) {
1739 (void)closedir(dirp);
1740 return 1; /* Found */
1741 }
1742 }
1743 (void)closedir(dirp);
1744 }
1745 return 0 ; /* Not found */
1746
1747/* RISC OS */
1748#elif defined(RISCOS)
1749 char canon[MAXPATHLEN+1]; /* buffer for the canonical form of the path */
1750 char buf2[MAXPATHLEN+2];
1751 char *nameWithExt = buf+len-namelen;
1752 int canonlen;
1753 os_error *e;
1754
1755 if (Py_GETENV("PYTHONCASEOK") != NULL)
1756 return 1;
1757
1758 /* workaround:
1759 append wildcard, otherwise case of filename wouldn't be touched */
1760 strcpy(buf2, buf);
1761 strcat(buf2, "*");
1762
1763 e = xosfscontrol_canonicalise_path(buf2,canon,0,0,MAXPATHLEN+1,&canonlen);
1764 canonlen = MAXPATHLEN+1-canonlen;
1765 if (e || canonlen<=0 || canonlen>(MAXPATHLEN+1) )
1766 return 0;
1767 if (strcmp(nameWithExt, canon+canonlen-strlen(nameWithExt))==0)
1768 return 1; /* match */
1769
1770 return 0;
1771
1772/* OS/2 */
1773#elif defined(__KLIBC__)
1774 char canon[MAXPATHLEN+1];
1775 size_t canonlen;
1776 char *p, *p2;
1777
1778 if (Py_GETENV("PYTHONCASEOK") != NULL)
1779 return 1;
1780
1781 /* This resolves case differences and return and native OS/2
1782 path. Unfortunately, it'll also resolve symbolic links
1783 while of course will screw up a bit... */
1784 if (!_realrealpath(buf, canon, sizeof(canon)))
1785 return 0;
1786 canonlen = strlen(canon);
1787 if (canonlen < namelen)
1788 return 0;
1789 p = strrchr(canon, SEP);
1790 p2 = strrchr(p ? p : canon, ALTSEP);
1791 if (p2)
1792 p = p2;
1793
1794 return strncmp(p ? p + 1 : canon, name, namelen) == 0;
1795
1796#elif defined(PYOS_OS2)
1797 HDIR hdir = 1;
1798 ULONG srchcnt = 1;
1799 FILEFINDBUF3 ffbuf;
1800 APIRET rc;
1801
1802 if (Py_GETENV("PYTHONCASEOK") != NULL)
1803 return 1;
1804
1805 rc = DosFindFirst(buf,
1806 &hdir,
1807 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1808 &ffbuf, sizeof(ffbuf),
1809 &srchcnt,
1810 FIL_STANDARD);
1811 if (rc != NO_ERROR)
1812 return 0;
1813 return strncmp(ffbuf.achName, name, namelen) == 0;
1814
1815/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1816#else
1817 return 1;
1818
1819#endif
1820}
1821
1822
1823#ifdef HAVE_STAT
1824/* Helper to look for __init__.py or __init__.py[co] in potential package */
1825static int
1826find_init_module(char *buf)
1827{
1828 const size_t save_len = strlen(buf);
1829 size_t i = save_len;
1830 char *pname; /* pointer to start of __init__ */
1831 struct stat statbuf;
1832
1833/* For calling case_ok(buf, len, namelen, name):
1834 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1835 * ^ ^ ^ ^
1836 * |--------------------- buf ---------------------|
1837 * |------------------- len ------------------|
1838 * |------ name -------|
1839 * |----- namelen -----|
1840 */
1841 if (save_len + 13 >= MAXPATHLEN)
1842 return 0;
1843 buf[i++] = SEP;
1844 pname = buf + i;
1845 strcpy(pname, "__init__.py");
1846 if (stat(buf, &statbuf) == 0) {
1847 if (case_ok(buf,
1848 save_len + 9, /* len("/__init__") */
1849 8, /* len("__init__") */
1850 pname)) {
1851 buf[save_len] = '\0';
1852 return 1;
1853 }
1854 }
1855 i += strlen(pname);
1856 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
1857 if (stat(buf, &statbuf) == 0) {
1858 if (case_ok(buf,
1859 save_len + 9, /* len("/__init__") */
1860 8, /* len("__init__") */
1861 pname)) {
1862 buf[save_len] = '\0';
1863 return 1;
1864 }
1865 }
1866 buf[save_len] = '\0';
1867 return 0;
1868}
1869
1870#else
1871
1872#ifdef RISCOS
1873static int
1874find_init_module(buf)
1875 char *buf;
1876{
1877 int save_len = strlen(buf);
1878 int i = save_len;
1879
1880 if (save_len + 13 >= MAXPATHLEN)
1881 return 0;
1882 buf[i++] = SEP;
1883 strcpy(buf+i, "__init__/py");
1884 if (isfile(buf)) {
1885 buf[save_len] = '\0';
1886 return 1;
1887 }
1888
1889 if (Py_OptimizeFlag)
1890 strcpy(buf+i, "o");
1891 else
1892 strcpy(buf+i, "c");
1893 if (isfile(buf)) {
1894 buf[save_len] = '\0';
1895 return 1;
1896 }
1897 buf[save_len] = '\0';
1898 return 0;
1899}
1900#endif /*RISCOS*/
1901
1902#endif /* HAVE_STAT */
1903
1904
1905static int init_builtin(char *); /* Forward */
1906
1907/* Load an external module using the default search path and return
1908 its module object WITH INCREMENTED REFERENCE COUNT */
1909
1910static PyObject *
1911load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader)
1912{
1913 PyObject *modules;
1914 PyObject *m;
1915 int err;
1916
1917 /* First check that there's an open file (if we need one) */
1918 switch (type) {
1919 case PY_SOURCE:
1920 case PY_COMPILED:
1921 if (fp == NULL) {
1922 PyErr_Format(PyExc_ValueError,
1923 "file object required for import (type code %d)",
1924 type);
1925 return NULL;
1926 }
1927 }
1928
1929 switch (type) {
1930
1931 case PY_SOURCE:
1932 m = load_source_module(name, pathname, fp);
1933 break;
1934
1935 case PY_COMPILED:
1936 m = load_compiled_module(name, pathname, fp);
1937 break;
1938
1939#ifdef HAVE_DYNAMIC_LOADING
1940 case C_EXTENSION:
1941 m = _PyImport_LoadDynamicModule(name, pathname, fp);
1942 break;
1943#endif
1944
1945 case PKG_DIRECTORY:
1946 m = load_package(name, pathname);
1947 break;
1948
1949 case C_BUILTIN:
1950 case PY_FROZEN:
1951 if (pathname != NULL && pathname[0] != '\0')
1952 name = pathname;
1953 if (type == C_BUILTIN)
1954 err = init_builtin(name);
1955 else
1956 err = PyImport_ImportFrozenModule(name);
1957 if (err < 0)
1958 return NULL;
1959 if (err == 0) {
1960 PyErr_Format(PyExc_ImportError,
1961 "Purported %s module %.200s not found",
1962 type == C_BUILTIN ?
1963 "builtin" : "frozen",
1964 name);
1965 return NULL;
1966 }
1967 modules = PyImport_GetModuleDict();
1968 m = PyDict_GetItemString(modules, name);
1969 if (m == NULL) {
1970 PyErr_Format(
1971 PyExc_ImportError,
1972 "%s module %.200s not properly initialized",
1973 type == C_BUILTIN ?
1974 "builtin" : "frozen",
1975 name);
1976 return NULL;
1977 }
1978 Py_INCREF(m);
1979 break;
1980
1981 case IMP_HOOK: {
1982 if (loader == NULL) {
1983 PyErr_SetString(PyExc_ImportError,
1984 "import hook without loader");
1985 return NULL;
1986 }
1987 m = PyObject_CallMethod(loader, "load_module", "s", name);
1988 break;
1989 }
1990
1991 default:
1992 PyErr_Format(PyExc_ImportError,
1993 "Don't know how to import %.200s (type code %d)",
1994 name, type);
1995 m = NULL;
1996
1997 }
1998
1999 return m;
2000}
2001
2002
2003/* Initialize a built-in module.
2004 Return 1 for success, 0 if the module is not found, and -1 with
2005 an exception set if the initialization failed. */
2006
2007static int
2008init_builtin(char *name)
2009{
2010 struct _inittab *p;
2011
2012 if (_PyImport_FindExtension(name, name) != NULL)
2013 return 1;
2014
2015 for (p = PyImport_Inittab; p->name != NULL; p++) {
2016 if (strcmp(name, p->name) == 0) {
2017 if (p->initfunc == NULL) {
2018 PyErr_Format(PyExc_ImportError,
2019 "Cannot re-init internal module %.200s",
2020 name);
2021 return -1;
2022 }
2023 if (Py_VerboseFlag)
2024 PySys_WriteStderr("import %s # builtin\n", name);
2025 (*p->initfunc)();
2026 if (PyErr_Occurred())
2027 return -1;
2028 if (_PyImport_FixupExtension(name, name) == NULL)
2029 return -1;
2030 return 1;
2031 }
2032 }
2033 return 0;
2034}
2035
2036
2037/* Frozen modules */
2038
2039static struct _frozen *
2040find_frozen(char *name)
2041{
2042 struct _frozen *p;
2043
2044 for (p = PyImport_FrozenModules; ; p++) {
2045 if (p->name == NULL)
2046 return NULL;
2047 if (strcmp(p->name, name) == 0)
2048 break;
2049 }
2050 return p;
2051}
2052
2053static PyObject *
2054get_frozen_object(char *name)
2055{
2056 struct _frozen *p = find_frozen(name);
2057 int size;
2058
2059 if (p == NULL) {
2060 PyErr_Format(PyExc_ImportError,
2061 "No such frozen object named %.200s",
2062 name);
2063 return NULL;
2064 }
2065 if (p->code == NULL) {
2066 PyErr_Format(PyExc_ImportError,
2067 "Excluded frozen object named %.200s",
2068 name);
2069 return NULL;
2070 }
2071 size = p->size;
2072 if (size < 0)
2073 size = -size;
2074 return PyMarshal_ReadObjectFromString((char *)p->code, size);
2075}
2076
2077/* Initialize a frozen module.
2078 Return 1 for succes, 0 if the module is not found, and -1 with
2079 an exception set if the initialization failed.
2080 This function is also used from frozenmain.c */
2081
2082int
2083PyImport_ImportFrozenModule(char *name)
2084{
2085 struct _frozen *p = find_frozen(name);
2086 PyObject *co;
2087 PyObject *m;
2088 int ispackage;
2089 int size;
2090
2091 if (p == NULL)
2092 return 0;
2093 if (p->code == NULL) {
2094 PyErr_Format(PyExc_ImportError,
2095 "Excluded frozen object named %.200s",
2096 name);
2097 return -1;
2098 }
2099 size = p->size;
2100 ispackage = (size < 0);
2101 if (ispackage)
2102 size = -size;
2103 if (Py_VerboseFlag)
2104 PySys_WriteStderr("import %s # frozen%s\n",
2105 name, ispackage ? " package" : "");
2106 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
2107 if (co == NULL)
2108 return -1;
2109 if (!PyCode_Check(co)) {
2110 PyErr_Format(PyExc_TypeError,
2111 "frozen object %.200s is not a code object",
2112 name);
2113 goto err_return;
2114 }
2115 if (ispackage) {
2116 /* Set __path__ to the package name */
2117 PyObject *d, *s;
2118 int err;
2119 m = PyImport_AddModule(name);
2120 if (m == NULL)
2121 goto err_return;
2122 d = PyModule_GetDict(m);
2123 s = PyString_InternFromString(name);
2124 if (s == NULL)
2125 goto err_return;
2126 err = PyDict_SetItemString(d, "__path__", s);
2127 Py_DECREF(s);
2128 if (err != 0)
2129 goto err_return;
2130 }
2131 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
2132 if (m == NULL)
2133 goto err_return;
2134 Py_DECREF(co);
2135 Py_DECREF(m);
2136 return 1;
2137err_return:
2138 Py_DECREF(co);
2139 return -1;
2140}
2141
2142
2143/* Import a module, either built-in, frozen, or external, and return
2144 its module object WITH INCREMENTED REFERENCE COUNT */
2145
2146PyObject *
2147PyImport_ImportModule(const char *name)
2148{
2149 PyObject *pname;
2150 PyObject *result;
2151
2152 pname = PyString_FromString(name);
2153 if (pname == NULL)
2154 return NULL;
2155 result = PyImport_Import(pname);
2156 Py_DECREF(pname);
2157 return result;
2158}
2159
2160/* Import a module without blocking
2161 *
2162 * At first it tries to fetch the module from sys.modules. If the module was
2163 * never loaded before it loads it with PyImport_ImportModule() unless another
2164 * thread holds the import lock. In the latter case the function raises an
2165 * ImportError instead of blocking.
2166 *
2167 * Returns the module object with incremented ref count.
2168 */
2169PyObject *
2170PyImport_ImportModuleNoBlock(const char *name)
2171{
2172 PyObject *result;
2173 PyObject *modules;
2174#ifdef WITH_THREAD
2175 long me;
2176#endif
2177
2178 /* Try to get the module from sys.modules[name] */
2179 modules = PyImport_GetModuleDict();
2180 if (modules == NULL)
2181 return NULL;
2182
2183 result = PyDict_GetItemString(modules, name);
2184 if (result != NULL) {
2185 Py_INCREF(result);
2186 return result;
2187 }
2188 else {
2189 PyErr_Clear();
2190 }
2191#ifdef WITH_THREAD
2192 /* check the import lock
2193 * me might be -1 but I ignore the error here, the lock function
2194 * takes care of the problem */
2195 me = PyThread_get_thread_ident();
2196 if (import_lock_thread == -1 || import_lock_thread == me) {
2197 /* no thread or me is holding the lock */
2198 return PyImport_ImportModule(name);
2199 }
2200 else {
2201 PyErr_Format(PyExc_ImportError,
2202 "Failed to import %.200s because the import lock"
2203 "is held by another thread.",
2204 name);
2205 return NULL;
2206 }
2207#else
2208 return PyImport_ImportModule(name);
2209#endif
2210}
2211
2212/* Forward declarations for helper routines */
2213static PyObject *get_parent(PyObject *globals, char *buf,
2214 Py_ssize_t *p_buflen, int level);
2215static PyObject *load_next(PyObject *mod, PyObject *altmod,
2216 char **p_name, char *buf, Py_ssize_t *p_buflen);
2217static int mark_miss(char *name);
2218static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
2219 char *buf, Py_ssize_t buflen, int recursive);
2220static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
2221
2222/* The Magnum Opus of dotted-name import :-) */
2223
2224static PyObject *
2225import_module_level(char *name, PyObject *globals, PyObject *locals,
2226 PyObject *fromlist, int level)
2227{
2228 char *buf;
2229 Py_ssize_t buflen = 0;
2230 PyObject *parent, *head, *next, *tail;
2231
2232 if (strchr(name, '/') != NULL
2233#ifdef MS_WINDOWS
2234 || strchr(name, '\\') != NULL
2235#endif
2236 ) {
2237 PyErr_SetString(PyExc_ImportError,
2238 "Import by filename is not supported.");
2239 return NULL;
2240 }
2241
2242 buf = PyMem_MALLOC(MAXPATHLEN+1);
2243 if (buf == NULL) {
2244 return PyErr_NoMemory();
2245 }
2246 parent = get_parent(globals, buf, &buflen, level);
2247 if (parent == NULL)
2248 goto error_exit;
2249
2250 head = load_next(parent, level < 0 ? Py_None : parent, &name, buf,
2251 &buflen);
2252 if (head == NULL)
2253 goto error_exit;
2254
2255 tail = head;
2256 Py_INCREF(tail);
2257 while (name) {
2258 next = load_next(tail, tail, &name, buf, &buflen);
2259 Py_DECREF(tail);
2260 if (next == NULL) {
2261 Py_DECREF(head);
2262 goto error_exit;
2263 }
2264 tail = next;
2265 }
2266 if (tail == Py_None) {
2267 /* If tail is Py_None, both get_parent and load_next found
2268 an empty module name: someone called __import__("") or
2269 doctored faulty bytecode */
2270 Py_DECREF(tail);
2271 Py_DECREF(head);
2272 PyErr_SetString(PyExc_ValueError,
2273 "Empty module name");
2274 goto error_exit;
2275 }
2276
2277 if (fromlist != NULL) {
2278 int b = (fromlist == Py_None) ? 0 : PyObject_IsTrue(fromlist);
2279 if (b < 0) {
2280 Py_DECREF(tail);
2281 Py_DECREF(head);
2282 goto error_exit;
2283 }
2284 if (!b)
2285 fromlist = NULL;
2286 }
2287
2288 if (fromlist == NULL) {
2289 Py_DECREF(tail);
2290 PyMem_FREE(buf);
2291 return head;
2292 }
2293
2294 Py_DECREF(head);
2295 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
2296 Py_DECREF(tail);
2297 goto error_exit;
2298 }
2299
2300 PyMem_FREE(buf);
2301 return tail;
2302
2303error_exit:
2304 PyMem_FREE(buf);
2305 return NULL;
2306}
2307
2308PyObject *
2309PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
2310 PyObject *fromlist, int level)
2311{
2312 PyObject *result;
2313 _PyImport_AcquireLock();
2314 result = import_module_level(name, globals, locals, fromlist, level);
2315 if (_PyImport_ReleaseLock() < 0) {
2316 Py_XDECREF(result);
2317 PyErr_SetString(PyExc_RuntimeError,
2318 "not holding the import lock");
2319 return NULL;
2320 }
2321 return result;
2322}
2323
2324/* Return the package that an import is being performed in. If globals comes
2325 from the module foo.bar.bat (not itself a package), this returns the
2326 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
2327 the package's entry in sys.modules is returned, as a borrowed reference.
2328
2329 The *name* of the returned package is returned in buf, with the length of
2330 the name in *p_buflen.
2331
2332 If globals doesn't come from a package or a module in a package, or a
2333 corresponding entry is not found in sys.modules, Py_None is returned.
2334*/
2335static PyObject *
2336get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
2337{
2338 static PyObject *namestr = NULL;
2339 static PyObject *pathstr = NULL;
2340 static PyObject *pkgstr = NULL;
2341 PyObject *pkgname, *modname, *modpath, *modules, *parent;
2342 int orig_level = level;
2343
2344 if (globals == NULL || !PyDict_Check(globals) || !level)
2345 return Py_None;
2346
2347 if (namestr == NULL) {
2348 namestr = PyString_InternFromString("__name__");
2349 if (namestr == NULL)
2350 return NULL;
2351 }
2352 if (pathstr == NULL) {
2353 pathstr = PyString_InternFromString("__path__");
2354 if (pathstr == NULL)
2355 return NULL;
2356 }
2357 if (pkgstr == NULL) {
2358 pkgstr = PyString_InternFromString("__package__");
2359 if (pkgstr == NULL)
2360 return NULL;
2361 }
2362
2363 *buf = '\0';
2364 *p_buflen = 0;
2365 pkgname = PyDict_GetItem(globals, pkgstr);
2366
2367 if ((pkgname != NULL) && (pkgname != Py_None)) {
2368 /* __package__ is set, so use it */
2369 Py_ssize_t len;
2370 if (!PyString_Check(pkgname)) {
2371 PyErr_SetString(PyExc_ValueError,
2372 "__package__ set to non-string");
2373 return NULL;
2374 }
2375 len = PyString_GET_SIZE(pkgname);
2376 if (len == 0) {
2377 if (level > 0) {
2378 PyErr_SetString(PyExc_ValueError,
2379 "Attempted relative import in non-package");
2380 return NULL;
2381 }
2382 return Py_None;
2383 }
2384 if (len > MAXPATHLEN) {
2385 PyErr_SetString(PyExc_ValueError,
2386 "Package name too long");
2387 return NULL;
2388 }
2389 strcpy(buf, PyString_AS_STRING(pkgname));
2390 } else {
2391 /* __package__ not set, so figure it out and set it */
2392 modname = PyDict_GetItem(globals, namestr);
2393 if (modname == NULL || !PyString_Check(modname))
2394 return Py_None;
2395
2396 modpath = PyDict_GetItem(globals, pathstr);
2397 if (modpath != NULL) {
2398 /* __path__ is set, so modname is already the package name */
2399 Py_ssize_t len = PyString_GET_SIZE(modname);
2400 int error;
2401 if (len > MAXPATHLEN) {
2402 PyErr_SetString(PyExc_ValueError,
2403 "Module name too long");
2404 return NULL;
2405 }
2406 strcpy(buf, PyString_AS_STRING(modname));
2407 error = PyDict_SetItem(globals, pkgstr, modname);
2408 if (error) {
2409 PyErr_SetString(PyExc_ValueError,
2410 "Could not set __package__");
2411 return NULL;
2412 }
2413 } else {
2414 /* Normal module, so work out the package name if any */
2415 char *start = PyString_AS_STRING(modname);
2416 char *lastdot = strrchr(start, '.');
2417 size_t len;
2418 int error;
2419 if (lastdot == NULL && level > 0) {
2420 PyErr_SetString(PyExc_ValueError,
2421 "Attempted relative import in non-package");
2422 return NULL;
2423 }
2424 if (lastdot == NULL) {
2425 error = PyDict_SetItem(globals, pkgstr, Py_None);
2426 if (error) {
2427 PyErr_SetString(PyExc_ValueError,
2428 "Could not set __package__");
2429 return NULL;
2430 }
2431 return Py_None;
2432 }
2433 len = lastdot - start;
2434 if (len >= MAXPATHLEN) {
2435 PyErr_SetString(PyExc_ValueError,
2436 "Module name too long");
2437 return NULL;
2438 }
2439 strncpy(buf, start, len);
2440 buf[len] = '\0';
2441 pkgname = PyString_FromString(buf);
2442 if (pkgname == NULL) {
2443 return NULL;
2444 }
2445 error = PyDict_SetItem(globals, pkgstr, pkgname);
2446 Py_DECREF(pkgname);
2447 if (error) {
2448 PyErr_SetString(PyExc_ValueError,
2449 "Could not set __package__");
2450 return NULL;
2451 }
2452 }
2453 }
2454 while (--level > 0) {
2455 char *dot = strrchr(buf, '.');
2456 if (dot == NULL) {
2457 PyErr_SetString(PyExc_ValueError,
2458 "Attempted relative import beyond "
2459 "toplevel package");
2460 return NULL;
2461 }
2462 *dot = '\0';
2463 }
2464 *p_buflen = strlen(buf);
2465
2466 modules = PyImport_GetModuleDict();
2467 parent = PyDict_GetItemString(modules, buf);
2468 if (parent == NULL) {
2469 if (orig_level < 1) {
2470 PyObject *err_msg = PyString_FromFormat(
2471 "Parent module '%.200s' not found "
2472 "while handling absolute import", buf);
2473 if (err_msg == NULL) {
2474 return NULL;
2475 }
2476 if (!PyErr_WarnEx(PyExc_RuntimeWarning,
2477 PyString_AsString(err_msg), 1)) {
2478 *buf = '\0';
2479 *p_buflen = 0;
2480 parent = Py_None;
2481 }
2482 Py_DECREF(err_msg);
2483 } else {
2484 PyErr_Format(PyExc_SystemError,
2485 "Parent module '%.200s' not loaded, "
2486 "cannot perform relative import", buf);
2487 }
2488 }
2489 return parent;
2490 /* We expect, but can't guarantee, if parent != None, that:
2491 - parent.__name__ == buf
2492 - parent.__dict__ is globals
2493 If this is violated... Who cares? */
2494}
2495
2496/* altmod is either None or same as mod */
2497static PyObject *
2498load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
2499 Py_ssize_t *p_buflen)
2500{
2501 char *name = *p_name;
2502 char *dot = strchr(name, '.');
2503 size_t len;
2504 char *p;
2505 PyObject *result;
2506
2507 if (strlen(name) == 0) {
2508 /* completely empty module name should only happen in
2509 'from . import' (or '__import__("")')*/
2510 Py_INCREF(mod);
2511 *p_name = NULL;
2512 return mod;
2513 }
2514
2515 if (dot == NULL) {
2516 *p_name = NULL;
2517 len = strlen(name);
2518 }
2519 else {
2520 *p_name = dot+1;
2521 len = dot-name;
2522 }
2523 if (len == 0) {
2524 PyErr_SetString(PyExc_ValueError,
2525 "Empty module name");
2526 return NULL;
2527 }
2528
2529 p = buf + *p_buflen;
2530 if (p != buf)
2531 *p++ = '.';
2532 if (p+len-buf >= MAXPATHLEN) {
2533 PyErr_SetString(PyExc_ValueError,
2534 "Module name too long");
2535 return NULL;
2536 }
2537 strncpy(p, name, len);
2538 p[len] = '\0';
2539 *p_buflen = p+len-buf;
2540
2541 result = import_submodule(mod, p, buf);
2542 if (result == Py_None && altmod != mod) {
2543 Py_DECREF(result);
2544 /* Here, altmod must be None and mod must not be None */
2545 result = import_submodule(altmod, p, p);
2546 if (result != NULL && result != Py_None) {
2547 if (mark_miss(buf) != 0) {
2548 Py_DECREF(result);
2549 return NULL;
2550 }
2551 strncpy(buf, name, len);
2552 buf[len] = '\0';
2553 *p_buflen = len;
2554 }
2555 }
2556 if (result == NULL)
2557 return NULL;
2558
2559 if (result == Py_None) {
2560 Py_DECREF(result);
2561 PyErr_Format(PyExc_ImportError,
2562 "No module named %.200s", name);
2563 return NULL;
2564 }
2565
2566 return result;
2567}
2568
2569static int
2570mark_miss(char *name)
2571{
2572 PyObject *modules = PyImport_GetModuleDict();
2573 return PyDict_SetItemString(modules, name, Py_None);
2574}
2575
2576static int
2577ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
2578 int recursive)
2579{
2580 int i;
2581
2582 if (!PyObject_HasAttrString(mod, "__path__"))
2583 return 1;
2584
2585 for (i = 0; ; i++) {
2586 PyObject *item = PySequence_GetItem(fromlist, i);
2587 int hasit;
2588 if (item == NULL) {
2589 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2590 PyErr_Clear();
2591 return 1;
2592 }
2593 return 0;
2594 }
2595 if (!PyString_Check(item)) {
2596 PyErr_SetString(PyExc_TypeError,
2597 "Item in ``from list'' not a string");
2598 Py_DECREF(item);
2599 return 0;
2600 }
2601 if (PyString_AS_STRING(item)[0] == '*') {
2602 PyObject *all;
2603 Py_DECREF(item);
2604 /* See if the package defines __all__ */
2605 if (recursive)
2606 continue; /* Avoid endless recursion */
2607 all = PyObject_GetAttrString(mod, "__all__");
2608 if (all == NULL)
2609 PyErr_Clear();
2610 else {
2611 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
2612 Py_DECREF(all);
2613 if (!ret)
2614 return 0;
2615 }
2616 continue;
2617 }
2618 hasit = PyObject_HasAttr(mod, item);
2619 if (!hasit) {
2620 char *subname = PyString_AS_STRING(item);
2621 PyObject *submod;
2622 char *p;
2623 if (buflen + strlen(subname) >= MAXPATHLEN) {
2624 PyErr_SetString(PyExc_ValueError,
2625 "Module name too long");
2626 Py_DECREF(item);
2627 return 0;
2628 }
2629 p = buf + buflen;
2630 *p++ = '.';
2631 strcpy(p, subname);
2632 submod = import_submodule(mod, subname, buf);
2633 Py_XDECREF(submod);
2634 if (submod == NULL) {
2635 Py_DECREF(item);
2636 return 0;
2637 }
2638 }
2639 Py_DECREF(item);
2640 }
2641
2642 /* NOTREACHED */
2643}
2644
2645static int
2646add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
2647 PyObject *modules)
2648{
2649 if (mod == Py_None)
2650 return 1;
2651 /* Irrespective of the success of this load, make a
2652 reference to it in the parent package module. A copy gets
2653 saved in the modules dictionary under the full name, so get a
2654 reference from there, if need be. (The exception is when the
2655 load failed with a SyntaxError -- then there's no trace in
2656 sys.modules. In that case, of course, do nothing extra.) */
2657 if (submod == NULL) {
2658 submod = PyDict_GetItemString(modules, fullname);
2659 if (submod == NULL)
2660 return 1;
2661 }
2662 if (PyModule_Check(mod)) {
2663 /* We can't use setattr here since it can give a
2664 * spurious warning if the submodule name shadows a
2665 * builtin name */
2666 PyObject *dict = PyModule_GetDict(mod);
2667 if (!dict)
2668 return 0;
2669 if (PyDict_SetItemString(dict, subname, submod) < 0)
2670 return 0;
2671 }
2672 else {
2673 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2674 return 0;
2675 }
2676 return 1;
2677}
2678
2679static PyObject *
2680import_submodule(PyObject *mod, char *subname, char *fullname)
2681{
2682 PyObject *modules = PyImport_GetModuleDict();
2683 PyObject *m = NULL;
2684
2685 /* Require:
2686 if mod == None: subname == fullname
2687 else: mod.__name__ + "." + subname == fullname
2688 */
2689
2690 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
2691 Py_INCREF(m);
2692 }
2693 else {
2694 PyObject *path, *loader = NULL;
2695 char *buf;
2696 struct filedescr *fdp;
2697 FILE *fp = NULL;
2698
2699 if (mod == Py_None)
2700 path = NULL;
2701 else {
2702 path = PyObject_GetAttrString(mod, "__path__");
2703 if (path == NULL) {
2704 PyErr_Clear();
2705 Py_INCREF(Py_None);
2706 return Py_None;
2707 }
2708 }
2709
2710 buf = PyMem_MALLOC(MAXPATHLEN+1);
2711 if (buf == NULL) {
2712 return PyErr_NoMemory();
2713 }
2714 buf[0] = '\0';
2715 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2716 &fp, &loader);
2717 Py_XDECREF(path);
2718 if (fdp == NULL) {
2719 PyMem_FREE(buf);
2720 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2721 return NULL;
2722 PyErr_Clear();
2723 Py_INCREF(Py_None);
2724 return Py_None;
2725 }
2726 m = load_module(fullname, fp, buf, fdp->type, loader);
2727 Py_XDECREF(loader);
2728 if (fp)
2729 fclose(fp);
2730 if (!add_submodule(mod, m, fullname, subname, modules)) {
2731 Py_XDECREF(m);
2732 m = NULL;
2733 }
2734 PyMem_FREE(buf);
2735 }
2736
2737 return m;
2738}
2739
2740
2741/* Re-import a module of any kind and return its module object, WITH
2742 INCREMENTED REFERENCE COUNT */
2743
2744PyObject *
2745PyImport_ReloadModule(PyObject *m)
2746{
2747 PyInterpreterState *interp = PyThreadState_Get()->interp;
2748 PyObject *modules_reloading = interp->modules_reloading;
2749 PyObject *modules = PyImport_GetModuleDict();
2750 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
2751 char *name, *subname;
2752 char *buf;
2753 struct filedescr *fdp;
2754 FILE *fp = NULL;
2755 PyObject *newm;
2756
2757 if (modules_reloading == NULL) {
2758 Py_FatalError("PyImport_ReloadModule: "
2759 "no modules_reloading dictionary!");
2760 return NULL;
2761 }
2762
2763 if (m == NULL || !PyModule_Check(m)) {
2764 PyErr_SetString(PyExc_TypeError,
2765 "reload() argument must be module");
2766 return NULL;
2767 }
2768 name = PyModule_GetName(m);
2769 if (name == NULL)
2770 return NULL;
2771 if (m != PyDict_GetItemString(modules, name)) {
2772 PyErr_Format(PyExc_ImportError,
2773 "reload(): module %.200s not in sys.modules",
2774 name);
2775 return NULL;
2776 }
2777 existing_m = PyDict_GetItemString(modules_reloading, name);
2778 if (existing_m != NULL) {
2779 /* Due to a recursive reload, this module is already
2780 being reloaded. */
2781 Py_INCREF(existing_m);
2782 return existing_m;
2783 }
2784 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
2785 return NULL;
2786
2787 subname = strrchr(name, '.');
2788 if (subname == NULL)
2789 subname = name;
2790 else {
2791 PyObject *parentname, *parent;
2792 parentname = PyString_FromStringAndSize(name, (subname-name));
2793 if (parentname == NULL) {
2794 imp_modules_reloading_clear();
2795 return NULL;
2796 }
2797 parent = PyDict_GetItem(modules, parentname);
2798 if (parent == NULL) {
2799 PyErr_Format(PyExc_ImportError,
2800 "reload(): parent %.200s not in sys.modules",
2801 PyString_AS_STRING(parentname));
2802 Py_DECREF(parentname);
2803 imp_modules_reloading_clear();
2804 return NULL;
2805 }
2806 Py_DECREF(parentname);
2807 subname++;
2808 path = PyObject_GetAttrString(parent, "__path__");
2809 if (path == NULL)
2810 PyErr_Clear();
2811 }
2812 buf = PyMem_MALLOC(MAXPATHLEN+1);
2813 if (buf == NULL) {
2814 Py_XDECREF(path);
2815 return PyErr_NoMemory();
2816 }
2817 buf[0] = '\0';
2818 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
2819 Py_XDECREF(path);
2820
2821 if (fdp == NULL) {
2822 Py_XDECREF(loader);
2823 imp_modules_reloading_clear();
2824 PyMem_FREE(buf);
2825 return NULL;
2826 }
2827
2828 newm = load_module(name, fp, buf, fdp->type, loader);
2829 Py_XDECREF(loader);
2830
2831 if (fp)
2832 fclose(fp);
2833 if (newm == NULL) {
2834 /* load_module probably removed name from modules because of
2835 * the error. Put back the original module object. We're
2836 * going to return NULL in this case regardless of whether
2837 * replacing name succeeds, so the return value is ignored.
2838 */
2839 PyDict_SetItemString(modules, name, m);
2840 }
2841 imp_modules_reloading_clear();
2842 PyMem_FREE(buf);
2843 return newm;
2844}
2845
2846
2847/* Higher-level import emulator which emulates the "import" statement
2848 more accurately -- it invokes the __import__() function from the
2849 builtins of the current globals. This means that the import is
2850 done using whatever import hooks are installed in the current
2851 environment, e.g. by "rexec".
2852 A dummy list ["__doc__"] is passed as the 4th argument so that
2853 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
2854 will return <module "gencache"> instead of <module "win32com">. */
2855
2856PyObject *
2857PyImport_Import(PyObject *module_name)
2858{
2859 static PyObject *silly_list = NULL;
2860 static PyObject *builtins_str = NULL;
2861 static PyObject *import_str = NULL;
2862 PyObject *globals = NULL;
2863 PyObject *import = NULL;
2864 PyObject *builtins = NULL;
2865 PyObject *r = NULL;
2866
2867 /* Initialize constant string objects */
2868 if (silly_list == NULL) {
2869 import_str = PyString_InternFromString("__import__");
2870 if (import_str == NULL)
2871 return NULL;
2872 builtins_str = PyString_InternFromString("__builtins__");
2873 if (builtins_str == NULL)
2874 return NULL;
2875 silly_list = Py_BuildValue("[s]", "__doc__");
2876 if (silly_list == NULL)
2877 return NULL;
2878 }
2879
2880 /* Get the builtins from current globals */
2881 globals = PyEval_GetGlobals();
2882 if (globals != NULL) {
2883 Py_INCREF(globals);
2884 builtins = PyObject_GetItem(globals, builtins_str);
2885 if (builtins == NULL)
2886 goto err;
2887 }
2888 else {
2889 /* No globals -- use standard builtins, and fake globals */
2890 builtins = PyImport_ImportModuleLevel("__builtin__",
2891 NULL, NULL, NULL, 0);
2892 if (builtins == NULL)
2893 return NULL;
2894 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2895 if (globals == NULL)
2896 goto err;
2897 }
2898
2899 /* Get the __import__ function from the builtins */
2900 if (PyDict_Check(builtins)) {
2901 import = PyObject_GetItem(builtins, import_str);
2902 if (import == NULL)
2903 PyErr_SetObject(PyExc_KeyError, import_str);
2904 }
2905 else
2906 import = PyObject_GetAttr(builtins, import_str);
2907 if (import == NULL)
2908 goto err;
2909
2910 /* Call the __import__ function with the proper argument list
2911 * Always use absolute import here. */
2912 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
2913 globals, silly_list, 0, NULL);
2914
2915 err:
2916 Py_XDECREF(globals);
2917 Py_XDECREF(builtins);
2918 Py_XDECREF(import);
2919
2920 return r;
2921}
2922
2923
2924/* Module 'imp' provides Python access to the primitives used for
2925 importing modules.
2926*/
2927
2928static PyObject *
2929imp_get_magic(PyObject *self, PyObject *noargs)
2930{
2931 char buf[4];
2932
2933 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2934 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2935 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2936 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
2937
2938 return PyString_FromStringAndSize(buf, 4);
2939}
2940
2941static PyObject *
2942imp_get_suffixes(PyObject *self, PyObject *noargs)
2943{
2944 PyObject *list;
2945 struct filedescr *fdp;
2946
2947 list = PyList_New(0);
2948 if (list == NULL)
2949 return NULL;
2950 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2951 PyObject *item = Py_BuildValue("ssi",
2952 fdp->suffix, fdp->mode, fdp->type);
2953 if (item == NULL) {
2954 Py_DECREF(list);
2955 return NULL;
2956 }
2957 if (PyList_Append(list, item) < 0) {
2958 Py_DECREF(list);
2959 Py_DECREF(item);
2960 return NULL;
2961 }
2962 Py_DECREF(item);
2963 }
2964 return list;
2965}
2966
2967static PyObject *
2968call_find_module(char *name, PyObject *path)
2969{
2970 extern int fclose(FILE *);
2971 PyObject *fob, *ret;
2972 struct filedescr *fdp;
2973 char *pathname;
2974 FILE *fp = NULL;
2975
2976 pathname = PyMem_MALLOC(MAXPATHLEN+1);
2977 if (pathname == NULL) {
2978 return PyErr_NoMemory();
2979 }
2980 pathname[0] = '\0';
2981 if (path == Py_None)
2982 path = NULL;
2983 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
2984 if (fdp == NULL) {
2985 PyMem_FREE(pathname);
2986 return NULL;
2987 }
2988 if (fp != NULL) {
2989 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose);
2990 if (fob == NULL) {
2991 PyMem_FREE(pathname);
2992 return NULL;
2993 }
2994 }
2995 else {
2996 fob = Py_None;
2997 Py_INCREF(fob);
2998 }
2999 ret = Py_BuildValue("Os(ssi)",
3000 fob, pathname, fdp->suffix, fdp->mode, fdp->type);
3001 Py_DECREF(fob);
3002 PyMem_FREE(pathname);
3003 return ret;
3004}
3005
3006static PyObject *
3007imp_find_module(PyObject *self, PyObject *args)
3008{
3009 char *name;
3010 PyObject *path = NULL;
3011 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path))
3012 return NULL;
3013 return call_find_module(name, path);
3014}
3015
3016static PyObject *
3017imp_init_builtin(PyObject *self, PyObject *args)
3018{
3019 char *name;
3020 int ret;
3021 PyObject *m;
3022 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
3023 return NULL;
3024 ret = init_builtin(name);
3025 if (ret < 0)
3026 return NULL;
3027 if (ret == 0) {
3028 Py_INCREF(Py_None);
3029 return Py_None;
3030 }
3031 m = PyImport_AddModule(name);
3032 Py_XINCREF(m);
3033 return m;
3034}
3035
3036static PyObject *
3037imp_init_frozen(PyObject *self, PyObject *args)
3038{
3039 char *name;
3040 int ret;
3041 PyObject *m;
3042 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
3043 return NULL;
3044 ret = PyImport_ImportFrozenModule(name);
3045 if (ret < 0)
3046 return NULL;
3047 if (ret == 0) {
3048 Py_INCREF(Py_None);
3049 return Py_None;
3050 }
3051 m = PyImport_AddModule(name);
3052 Py_XINCREF(m);
3053 return m;
3054}
3055
3056static PyObject *
3057imp_get_frozen_object(PyObject *self, PyObject *args)
3058{
3059 char *name;
3060
3061 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
3062 return NULL;
3063 return get_frozen_object(name);
3064}
3065
3066static PyObject *
3067imp_is_builtin(PyObject *self, PyObject *args)
3068{
3069 char *name;
3070 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
3071 return NULL;
3072 return PyInt_FromLong(is_builtin(name));
3073}
3074
3075static PyObject *
3076imp_is_frozen(PyObject *self, PyObject *args)
3077{
3078 char *name;
3079 struct _frozen *p;
3080 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
3081 return NULL;
3082 p = find_frozen(name);
3083 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
3084}
3085
3086static FILE *
3087get_file(char *pathname, PyObject *fob, char *mode)
3088{
3089 FILE *fp;
3090 if (fob == NULL) {
3091 if (mode[0] == 'U')
3092 mode = "r" PY_STDIOTEXTMODE;
3093 fp = fopen(pathname, mode);
3094 if (fp == NULL)
3095 PyErr_SetFromErrno(PyExc_IOError);
3096 }
3097 else {
3098 fp = PyFile_AsFile(fob);
3099 if (fp == NULL)
3100 PyErr_SetString(PyExc_ValueError,
3101 "bad/closed file object");
3102 }
3103 return fp;
3104}
3105
3106static PyObject *
3107imp_load_compiled(PyObject *self, PyObject *args)
3108{
3109 char *name;
3110 char *pathname;
3111 PyObject *fob = NULL;
3112 PyObject *m;
3113 FILE *fp;
3114 if (!PyArg_ParseTuple(args, "ss|O!:load_compiled", &name, &pathname,
3115 &PyFile_Type, &fob))
3116 return NULL;
3117 fp = get_file(pathname, fob, "rb");
3118 if (fp == NULL)
3119 return NULL;
3120 m = load_compiled_module(name, pathname, fp);
3121 if (fob == NULL)
3122 fclose(fp);
3123 return m;
3124}
3125
3126#ifdef HAVE_DYNAMIC_LOADING
3127
3128static PyObject *
3129imp_load_dynamic(PyObject *self, PyObject *args)
3130{
3131 char *name;
3132 char *pathname;
3133 PyObject *fob = NULL;
3134 PyObject *m;
3135 FILE *fp = NULL;
3136 if (!PyArg_ParseTuple(args, "ss|O!:load_dynamic", &name, &pathname,
3137 &PyFile_Type, &fob))
3138 return NULL;
3139 if (fob) {
3140 fp = get_file(pathname, fob, "r");
3141 if (fp == NULL)
3142 return NULL;
3143 }
3144 m = _PyImport_LoadDynamicModule(name, pathname, fp);
3145 return m;
3146}
3147
3148#endif /* HAVE_DYNAMIC_LOADING */
3149
3150static PyObject *
3151imp_load_source(PyObject *self, PyObject *args)
3152{
3153 char *name;
3154 char *pathname;
3155 PyObject *fob = NULL;
3156 PyObject *m;
3157 FILE *fp;
3158 if (!PyArg_ParseTuple(args, "ss|O!:load_source", &name, &pathname,
3159 &PyFile_Type, &fob))
3160 return NULL;
3161 fp = get_file(pathname, fob, "r");
3162 if (fp == NULL)
3163 return NULL;
3164 m = load_source_module(name, pathname, fp);
3165 if (fob == NULL)
3166 fclose(fp);
3167 return m;
3168}
3169
3170static PyObject *
3171imp_load_module(PyObject *self, PyObject *args)
3172{
3173 char *name;
3174 PyObject *fob;
3175 char *pathname;
3176 char *suffix; /* Unused */
3177 char *mode;
3178 int type;
3179 FILE *fp;
3180
3181 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
3182 &name, &fob, &pathname,
3183 &suffix, &mode, &type))
3184 return NULL;
3185 if (*mode) {
3186 /* Mode must start with 'r' or 'U' and must not contain '+'.
3187 Implicit in this test is the assumption that the mode
3188 may contain other modifiers like 'b' or 't'. */
3189
3190 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
3191 PyErr_Format(PyExc_ValueError,
3192 "invalid file open mode %.200s", mode);
3193 return NULL;
3194 }
3195 }
3196 if (fob == Py_None)
3197 fp = NULL;
3198 else {
3199 if (!PyFile_Check(fob)) {
3200 PyErr_SetString(PyExc_ValueError,
3201 "load_module arg#2 should be a file or None");
3202 return NULL;
3203 }
3204 fp = get_file(pathname, fob, mode);
3205 if (fp == NULL)
3206 return NULL;
3207 }
3208 return load_module(name, fp, pathname, type, NULL);
3209}
3210
3211static PyObject *
3212imp_load_package(PyObject *self, PyObject *args)
3213{
3214 char *name;
3215 char *pathname;
3216 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
3217 return NULL;
3218 return load_package(name, pathname);
3219}
3220
3221static PyObject *
3222imp_new_module(PyObject *self, PyObject *args)
3223{
3224 char *name;
3225 if (!PyArg_ParseTuple(args, "s:new_module", &name))
3226 return NULL;
3227 return PyModule_New(name);
3228}
3229
3230static PyObject *
3231imp_reload(PyObject *self, PyObject *v)
3232{
3233 return PyImport_ReloadModule(v);
3234}
3235
3236
3237/* Doc strings */
3238
3239PyDoc_STRVAR(doc_imp,
3240"This module provides the components needed to build your own\n\
3241__import__ function. Undocumented functions are obsolete.");
3242
3243PyDoc_STRVAR(doc_reload,
3244"reload(module) -> module\n\
3245\n\
3246Reload the module. The module must have been successfully imported before.");
3247
3248PyDoc_STRVAR(doc_find_module,
3249"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
3250Search for a module. If path is omitted or None, search for a\n\
3251built-in, frozen or special module and continue search in sys.path.\n\
3252The module name cannot contain '.'; to search for a submodule of a\n\
3253package, pass the submodule name and the package's __path__.");
3254
3255PyDoc_STRVAR(doc_load_module,
3256"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
3257Load a module, given information returned by find_module().\n\
3258The module name must include the full package name, if any.");
3259
3260PyDoc_STRVAR(doc_get_magic,
3261"get_magic() -> string\n\
3262Return the magic number for .pyc or .pyo files.");
3263
3264PyDoc_STRVAR(doc_get_suffixes,
3265"get_suffixes() -> [(suffix, mode, type), ...]\n\
3266Return a list of (suffix, mode, type) tuples describing the files\n\
3267that find_module() looks for.");
3268
3269PyDoc_STRVAR(doc_new_module,
3270"new_module(name) -> module\n\
3271Create a new module. Do not enter it in sys.modules.\n\
3272The module name must include the full package name, if any.");
3273
3274PyDoc_STRVAR(doc_lock_held,
3275"lock_held() -> boolean\n\
3276Return True if the import lock is currently held, else False.\n\
3277On platforms without threads, return False.");
3278
3279PyDoc_STRVAR(doc_acquire_lock,
3280"acquire_lock() -> None\n\
3281Acquires the interpreter's import lock for the current thread.\n\
3282This lock should be used by import hooks to ensure thread-safety\n\
3283when importing modules.\n\
3284On platforms without threads, this function does nothing.");
3285
3286PyDoc_STRVAR(doc_release_lock,
3287"release_lock() -> None\n\
3288Release the interpreter's import lock.\n\
3289On platforms without threads, this function does nothing.");
3290
3291static PyMethodDef imp_methods[] = {
3292 {"reload", imp_reload, METH_O, doc_reload},
3293 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3294 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3295 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3296 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3297 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3298 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3299 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3300 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
3301 /* The rest are obsolete */
3302 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3303 {"init_builtin", imp_init_builtin, METH_VARARGS},
3304 {"init_frozen", imp_init_frozen, METH_VARARGS},
3305 {"is_builtin", imp_is_builtin, METH_VARARGS},
3306 {"is_frozen", imp_is_frozen, METH_VARARGS},
3307 {"load_compiled", imp_load_compiled, METH_VARARGS},
3308#ifdef HAVE_DYNAMIC_LOADING
3309 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
3310#endif
3311 {"load_package", imp_load_package, METH_VARARGS},
3312 {"load_source", imp_load_source, METH_VARARGS},
3313 {NULL, NULL} /* sentinel */
3314};
3315
3316static int
3317setint(PyObject *d, char *name, int value)
3318{
3319 PyObject *v;
3320 int err;
3321
3322 v = PyInt_FromLong((long)value);
3323 err = PyDict_SetItemString(d, name, v);
3324 Py_XDECREF(v);
3325 return err;
3326}
3327
3328typedef struct {
3329 PyObject_HEAD
3330} NullImporter;
3331
3332static int
3333NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3334{
3335 char *path;
3336 Py_ssize_t pathlen;
3337
3338 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3339 return -1;
3340
3341 if (!PyArg_ParseTuple(args, "s:NullImporter",
3342 &path))
3343 return -1;
3344
3345 pathlen = strlen(path);
3346 if (pathlen == 0) {
3347 PyErr_SetString(PyExc_ImportError, "empty pathname");
3348 return -1;
3349 } else {
3350 if(isdir(path)) {
3351 PyErr_SetString(PyExc_ImportError,
3352 "existing directory");
3353 return -1;
3354 }
3355 }
3356 return 0;
3357}
3358
3359static PyObject *
3360NullImporter_find_module(NullImporter *self, PyObject *args)
3361{
3362 Py_RETURN_NONE;
3363}
3364
3365static PyMethodDef NullImporter_methods[] = {
3366 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3367 "Always return None"
3368 },
3369 {NULL} /* Sentinel */
3370};
3371
3372
3373PyTypeObject PyNullImporter_Type = {
3374 PyVarObject_HEAD_INIT(NULL, 0)
3375 "imp.NullImporter", /*tp_name*/
3376 sizeof(NullImporter), /*tp_basicsize*/
3377 0, /*tp_itemsize*/
3378 0, /*tp_dealloc*/
3379 0, /*tp_print*/
3380 0, /*tp_getattr*/
3381 0, /*tp_setattr*/
3382 0, /*tp_compare*/
3383 0, /*tp_repr*/
3384 0, /*tp_as_number*/
3385 0, /*tp_as_sequence*/
3386 0, /*tp_as_mapping*/
3387 0, /*tp_hash */
3388 0, /*tp_call*/
3389 0, /*tp_str*/
3390 0, /*tp_getattro*/
3391 0, /*tp_setattro*/
3392 0, /*tp_as_buffer*/
3393 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3394 "Null importer object", /* tp_doc */
3395 0, /* tp_traverse */
3396 0, /* tp_clear */
3397 0, /* tp_richcompare */
3398 0, /* tp_weaklistoffset */
3399 0, /* tp_iter */
3400 0, /* tp_iternext */
3401 NullImporter_methods, /* tp_methods */
3402 0, /* tp_members */
3403 0, /* tp_getset */
3404 0, /* tp_base */
3405 0, /* tp_dict */
3406 0, /* tp_descr_get */
3407 0, /* tp_descr_set */
3408 0, /* tp_dictoffset */
3409 (initproc)NullImporter_init, /* tp_init */
3410 0, /* tp_alloc */
3411 PyType_GenericNew /* tp_new */
3412};
3413
3414
3415PyMODINIT_FUNC
3416initimp(void)
3417{
3418 PyObject *m, *d;
3419
3420 if (PyType_Ready(&PyNullImporter_Type) < 0)
3421 goto failure;
3422
3423 m = Py_InitModule4("imp", imp_methods, doc_imp,
3424 NULL, PYTHON_API_VERSION);
3425 if (m == NULL)
3426 goto failure;
3427 d = PyModule_GetDict(m);
3428 if (d == NULL)
3429 goto failure;
3430
3431 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3432 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3433 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3434 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3435 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3436 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3437 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3438 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
3439 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
3440 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
3441
3442 Py_INCREF(&PyNullImporter_Type);
3443 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
3444 failure:
3445 ;
3446}
3447
3448
3449/* API for embedding applications that want to add their own entries
3450 to the table of built-in modules. This should normally be called
3451 *before* Py_Initialize(). When the table resize fails, -1 is
3452 returned and the existing table is unchanged.
3453
3454 After a similar function by Just van Rossum. */
3455
3456int
3457PyImport_ExtendInittab(struct _inittab *newtab)
3458{
3459 static struct _inittab *our_copy = NULL;
3460 struct _inittab *p;
3461 int i, n;
3462
3463 /* Count the number of entries in both tables */
3464 for (n = 0; newtab[n].name != NULL; n++)
3465 ;
3466 if (n == 0)
3467 return 0; /* Nothing to do */
3468 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3469 ;
3470
3471 /* Allocate new memory for the combined table */
3472 p = our_copy;
3473 PyMem_RESIZE(p, struct _inittab, i+n+1);
3474 if (p == NULL)
3475 return -1;
3476
3477 /* Copy the tables into the new memory */
3478 if (our_copy != PyImport_Inittab)
3479 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3480 PyImport_Inittab = our_copy = p;
3481 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
3482
3483 return 0;
3484}
3485
3486/* Shorthand to add a single entry given a name and a function */
3487
3488int
3489PyImport_AppendInittab(const char *name, void (*initfunc)(void))
3490{
3491 struct _inittab newtab[2];
3492
3493 memset(newtab, '\0', sizeof newtab);
3494
3495 newtab[0].name = (char *)name;
3496 newtab[0].initfunc = initfunc;
3497
3498 return PyImport_ExtendInittab(newtab);
3499}
3500
3501#ifdef __cplusplus
3502}
3503#endif
Note: See TracBrowser for help on using the repository browser.