2 /* Module definition and import implementation */
26 #if defined(PYCC_VACPP)
27 /* VisualAge C/C++ Failed to Define MountType Field in sys/stat.h */
28 #define S_IFMT (S_IFDIR|S_IFCHR|S_IFREG)
32 #define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
35 extern time_t PyOS_GetLastModificationTime(char *, FILE *);
38 /* Magic word to reject .pyc files generated by other Python versions */
39 /* Change for each incompatible change */
40 /* The value of CR and LF is incorporated so if you ever read or write
41 a .pyc file in text mode the magic number will be wrong; also, the
42 Apple MPW compiler swaps their values, botching string constants */
43 /* XXX Perhaps the magic number should be frozen and a version field
44 added to the .pyc file header? */
45 /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */
46 #define MAGIC (60202 | ((long)'\r'<<16) | ((long)'\n'<<24))
48 /* Magic word as global; note that _PyImport_Init() can change the
49 value of this global to accommodate for alterations of how the
50 compiler works which are enabled by command line switches. */
51 static long pyc_magic
= MAGIC
;
53 /* See _PyImport_FixupExtension() below */
54 static PyObject
*extensions
= NULL
;
56 /* This table is defined in config.c: */
57 extern struct _inittab _PyImport_Inittab
[];
59 struct _inittab
*PyImport_Inittab
= _PyImport_Inittab
;
61 /* these tables define the module suffixes that Python recognizes */
62 struct filedescr
* _PyImport_Filetab
= NULL
;
65 static const struct filedescr _PyImport_StandardFiletab
[] = {
66 {"/py", "r", PY_SOURCE
},
67 {"/pyc", "rb", PY_COMPILED
},
71 static const struct filedescr _PyImport_StandardFiletab
[] = {
72 {".py", "r", PY_SOURCE
},
73 {".pyc", "rb", PY_COMPILED
},
78 /* Initialize things */
83 const struct filedescr
*scan
;
84 struct filedescr
*filetab
;
88 /* prepare _PyImport_Filetab: copy entries from
89 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
91 for (scan
= _PyImport_DynLoadFiletab
; scan
->suffix
!= NULL
; ++scan
)
93 for (scan
= _PyImport_StandardFiletab
; scan
->suffix
!= NULL
; ++scan
)
95 filetab
= PyMem_NEW(struct filedescr
, countD
+ countS
+ 1);
96 memcpy(filetab
, _PyImport_DynLoadFiletab
,
97 countD
* sizeof(struct filedescr
));
98 memcpy(filetab
+ countD
, _PyImport_StandardFiletab
,
99 countS
* sizeof(struct filedescr
));
100 filetab
[countD
+ countS
].suffix
= NULL
;
102 _PyImport_Filetab
= filetab
;
104 if (Py_OptimizeFlag
) {
105 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
106 for (; filetab
->suffix
!= NULL
; filetab
++) {
108 if (strcmp(filetab
->suffix
, ".pyc") == 0)
109 filetab
->suffix
= ".pyo";
111 if (strcmp(filetab
->suffix
, "/pyc") == 0)
112 filetab
->suffix
= "/pyo";
117 if (Py_UnicodeFlag
) {
118 /* Fix the pyc_magic so that byte compiled code created
119 using the all-Unicode method doesn't interfere with
120 code created in normal operation mode. */
121 pyc_magic
= MAGIC
+ 1;
128 Py_XDECREF(extensions
);
130 PyMem_DEL(_PyImport_Filetab
);
131 _PyImport_Filetab
= NULL
;
135 /* Locking primitives to prevent parallel imports of the same module
136 in different threads to return with a partially loaded module.
137 These calls are serialized by the global interpreter lock. */
141 #include "pythread.h"
143 static PyThread_type_lock import_lock
= 0;
144 static long import_lock_thread
= -1;
145 static int import_lock_level
= 0;
150 long me
= PyThread_get_thread_ident();
152 return; /* Too bad */
153 if (import_lock
== NULL
)
154 import_lock
= PyThread_allocate_lock();
155 if (import_lock_thread
== me
) {
159 if (import_lock_thread
!= -1 || !PyThread_acquire_lock(import_lock
, 0)) {
160 PyThreadState
*tstate
= PyEval_SaveThread();
161 PyThread_acquire_lock(import_lock
, 1);
162 PyEval_RestoreThread(tstate
);
164 import_lock_thread
= me
;
165 import_lock_level
= 1;
171 long me
= PyThread_get_thread_ident();
173 return; /* Too bad */
174 if (import_lock_thread
!= me
)
175 Py_FatalError("unlock_import: not holding the import lock");
177 if (import_lock_level
== 0) {
178 import_lock_thread
= -1;
179 PyThread_release_lock(import_lock
);
185 #define lock_import()
186 #define unlock_import()
193 PyImport_GetModuleDict(void)
195 PyInterpreterState
*interp
= PyThreadState_Get()->interp
;
196 if (interp
->modules
== NULL
)
197 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
198 return interp
->modules
;
202 /* List of names to clear in sys */
203 static char* sys_deletes
[] = {
204 "path", "argv", "ps1", "ps2", "exitfunc",
205 "exc_type", "exc_value", "exc_traceback",
206 "last_type", "last_value", "last_traceback",
210 static char* sys_files
[] = {
211 "stdin", "__stdin__",
212 "stdout", "__stdout__",
213 "stderr", "__stderr__",
218 /* Un-initialize things, as good as we can */
221 PyImport_Cleanup(void)
225 PyObject
*key
, *value
, *dict
;
226 PyInterpreterState
*interp
= PyThreadState_Get()->interp
;
227 PyObject
*modules
= interp
->modules
;
230 return; /* Already done */
232 /* Delete some special variables first. These are common
233 places where user values hide and people complain when their
234 destructors fail. Since the modules containing them are
235 deleted *last* of all, they would come too late in the normal
236 destruction order. Sigh. */
238 value
= PyDict_GetItemString(modules
, "__builtin__");
239 if (value
!= NULL
&& PyModule_Check(value
)) {
240 dict
= PyModule_GetDict(value
);
242 PySys_WriteStderr("# clear __builtin__._\n");
243 PyDict_SetItemString(dict
, "_", Py_None
);
245 value
= PyDict_GetItemString(modules
, "sys");
246 if (value
!= NULL
&& PyModule_Check(value
)) {
249 dict
= PyModule_GetDict(value
);
250 for (p
= sys_deletes
; *p
!= NULL
; p
++) {
252 PySys_WriteStderr("# clear sys.%s\n", *p
);
253 PyDict_SetItemString(dict
, *p
, Py_None
);
255 for (p
= sys_files
; *p
!= NULL
; p
+=2) {
257 PySys_WriteStderr("# restore sys.%s\n", *p
);
258 v
= PyDict_GetItemString(dict
, *(p
+1));
261 PyDict_SetItemString(dict
, *p
, v
);
265 /* First, delete __main__ */
266 value
= PyDict_GetItemString(modules
, "__main__");
267 if (value
!= NULL
&& PyModule_Check(value
)) {
269 PySys_WriteStderr("# cleanup __main__\n");
270 _PyModule_Clear(value
);
271 PyDict_SetItemString(modules
, "__main__", Py_None
);
274 /* The special treatment of __builtin__ here is because even
275 when it's not referenced as a module, its dictionary is
276 referenced by almost every module's __builtins__. Since
277 deleting a module clears its dictionary (even if there are
278 references left to it), we need to delete the __builtin__
279 module last. Likewise, we don't delete sys until the very
280 end because it is implicitly referenced (e.g. by print).
282 Also note that we 'delete' modules by replacing their entry
283 in the modules dict with None, rather than really deleting
284 them; this avoids a rehash of the modules dictionary and
285 also marks them as "non existent" so they won't be
288 /* Next, repeatedly delete modules with a reference count of
289 one (skipping __builtin__ and sys) and delete them */
293 while (PyDict_Next(modules
, &pos
, &key
, &value
)) {
294 if (value
->ob_refcnt
!= 1)
296 if (PyString_Check(key
) && PyModule_Check(value
)) {
297 name
= PyString_AS_STRING(key
);
298 if (strcmp(name
, "__builtin__") == 0)
300 if (strcmp(name
, "sys") == 0)
304 "# cleanup[1] %s\n", name
);
305 _PyModule_Clear(value
);
306 PyDict_SetItem(modules
, key
, Py_None
);
312 /* Next, delete all modules (still skipping __builtin__ and sys) */
314 while (PyDict_Next(modules
, &pos
, &key
, &value
)) {
315 if (PyString_Check(key
) && PyModule_Check(value
)) {
316 name
= PyString_AS_STRING(key
);
317 if (strcmp(name
, "__builtin__") == 0)
319 if (strcmp(name
, "sys") == 0)
322 PySys_WriteStderr("# cleanup[2] %s\n", name
);
323 _PyModule_Clear(value
);
324 PyDict_SetItem(modules
, key
, Py_None
);
328 /* Next, delete sys and __builtin__ (in that order) */
329 value
= PyDict_GetItemString(modules
, "sys");
330 if (value
!= NULL
&& PyModule_Check(value
)) {
332 PySys_WriteStderr("# cleanup sys\n");
333 _PyModule_Clear(value
);
334 PyDict_SetItemString(modules
, "sys", Py_None
);
336 value
= PyDict_GetItemString(modules
, "__builtin__");
337 if (value
!= NULL
&& PyModule_Check(value
)) {
339 PySys_WriteStderr("# cleanup __builtin__\n");
340 _PyModule_Clear(value
);
341 PyDict_SetItemString(modules
, "__builtin__", Py_None
);
344 /* Finally, clear and delete the modules directory */
345 PyDict_Clear(modules
);
346 interp
->modules
= NULL
;
351 /* Helper for pythonrun.c -- return magic number */
354 PyImport_GetMagicNumber(void)
360 /* Magic for extension modules (built-in as well as dynamically
361 loaded). To prevent initializing an extension module more than
362 once, we keep a static dictionary 'extensions' keyed by module name
363 (for built-in modules) or by filename (for dynamically loaded
364 modules), containing these modules. A copy od the module's
365 dictionary is stored by calling _PyImport_FixupExtension()
366 immediately after the module initialization function succeeds. A
367 copy can be retrieved from there by calling
368 _PyImport_FindExtension(). */
371 _PyImport_FixupExtension(char *name
, char *filename
)
373 PyObject
*modules
, *mod
, *dict
, *copy
;
374 if (extensions
== NULL
) {
375 extensions
= PyDict_New();
376 if (extensions
== NULL
)
379 modules
= PyImport_GetModuleDict();
380 mod
= PyDict_GetItemString(modules
, name
);
381 if (mod
== NULL
|| !PyModule_Check(mod
)) {
382 PyErr_Format(PyExc_SystemError
,
383 "_PyImport_FixupExtension: module %.200s not loaded", name
);
386 dict
= PyModule_GetDict(mod
);
389 copy
= PyObject_CallMethod(dict
, "copy", "");
392 PyDict_SetItemString(extensions
, filename
, copy
);
398 _PyImport_FindExtension(char *name
, char *filename
)
400 PyObject
*dict
, *mod
, *mdict
, *result
;
401 if (extensions
== NULL
)
403 dict
= PyDict_GetItemString(extensions
, filename
);
406 mod
= PyImport_AddModule(name
);
409 mdict
= PyModule_GetDict(mod
);
412 result
= PyObject_CallMethod(mdict
, "update", "O", dict
);
417 PySys_WriteStderr("import %s # previously loaded (%s)\n",
423 /* Get the module object corresponding to a module name.
424 First check the modules dictionary if there's one there,
425 if not, create a new one and insert in in the modules dictionary.
426 Because the former action is most common, THIS DOES NOT RETURN A
430 PyImport_AddModule(char *name
)
432 PyObject
*modules
= PyImport_GetModuleDict();
435 if ((m
= PyDict_GetItemString(modules
, name
)) != NULL
&&
438 m
= PyModule_New(name
);
441 if (PyDict_SetItemString(modules
, name
, m
) != 0) {
445 Py_DECREF(m
); /* Yes, it still exists, in modules! */
451 /* Execute a code object in a module and return the module object
452 WITH INCREMENTED REFERENCE COUNT */
455 PyImport_ExecCodeModule(char *name
, PyObject
*co
)
457 return PyImport_ExecCodeModuleEx(name
, co
, (char *)NULL
);
461 PyImport_ExecCodeModuleEx(char *name
, PyObject
*co
, char *pathname
)
463 PyObject
*modules
= PyImport_GetModuleDict();
466 m
= PyImport_AddModule(name
);
469 d
= PyModule_GetDict(m
);
470 if (PyDict_GetItemString(d
, "__builtins__") == NULL
) {
471 if (PyDict_SetItemString(d
, "__builtins__",
472 PyEval_GetBuiltins()) != 0)
475 /* Remember the filename as the __file__ attribute */
477 if (pathname
!= NULL
) {
478 v
= PyString_FromString(pathname
);
483 v
= ((PyCodeObject
*)co
)->co_filename
;
486 if (PyDict_SetItemString(d
, "__file__", v
) != 0)
487 PyErr_Clear(); /* Not important enough to report */
490 v
= PyEval_EvalCode((PyCodeObject
*)co
, d
, d
);
495 if ((m
= PyDict_GetItemString(modules
, name
)) == NULL
) {
496 PyErr_Format(PyExc_ImportError
,
497 "Loaded module %.200s not found in sys.modules",
508 /* Given a pathname for a Python source file, fill a buffer with the
509 pathname for the corresponding compiled file. Return the pathname
510 for the compiled file, or NULL if there's no space in the buffer.
511 Doesn't set an exception. */
514 make_compiled_pathname(char *pathname
, char *buf
, size_t buflen
)
518 len
= strlen(pathname
);
521 strcpy(buf
, pathname
);
522 strcpy(buf
+len
, Py_OptimizeFlag
? "o" : "c");
528 /* Given a pathname for a Python source file, its time of last
529 modification, and a pathname for a compiled file, check whether the
530 compiled file represents the same version of the source. If so,
531 return a FILE pointer for the compiled file, positioned just after
532 the header; if not, return NULL.
533 Doesn't set an exception. */
536 check_compiled_module(char *pathname
, long mtime
, char *cpathname
)
542 fp
= fopen(cpathname
, "rb");
545 magic
= PyMarshal_ReadLongFromFile(fp
);
546 if (magic
!= pyc_magic
) {
548 PySys_WriteStderr("# %s has bad magic\n", cpathname
);
552 pyc_mtime
= PyMarshal_ReadLongFromFile(fp
);
553 if (pyc_mtime
!= mtime
) {
555 PySys_WriteStderr("# %s has bad mtime\n", cpathname
);
560 PySys_WriteStderr("# %s matches %s\n", cpathname
, pathname
);
565 /* Read a code object from a file and check it for validity */
567 static PyCodeObject
*
568 read_compiled_module(char *cpathname
, FILE *fp
)
572 co
= PyMarshal_ReadLastObjectFromFile(fp
);
573 /* Ugly: rd_object() may return NULL with or without error */
574 if (co
== NULL
|| !PyCode_Check(co
)) {
575 if (!PyErr_Occurred())
576 PyErr_Format(PyExc_ImportError
,
577 "Non-code object in %.200s", cpathname
);
581 return (PyCodeObject
*)co
;
585 /* Load a module from a compiled file, execute it, and return its
586 module object WITH INCREMENTED REFERENCE COUNT */
589 load_compiled_module(char *name
, char *cpathname
, FILE *fp
)
595 magic
= PyMarshal_ReadLongFromFile(fp
);
596 if (magic
!= pyc_magic
) {
597 PyErr_Format(PyExc_ImportError
,
598 "Bad magic number in %.200s", cpathname
);
601 (void) PyMarshal_ReadLongFromFile(fp
);
602 co
= read_compiled_module(cpathname
, fp
);
606 PySys_WriteStderr("import %s # precompiled from %s\n",
608 m
= PyImport_ExecCodeModuleEx(name
, (PyObject
*)co
, cpathname
);
614 /* Parse a source file and return the corresponding code object */
616 static PyCodeObject
*
617 parse_source_module(char *pathname
, FILE *fp
)
622 n
= PyParser_SimpleParseFile(fp
, pathname
, Py_file_input
);
625 co
= PyNode_Compile(n
, pathname
);
632 /* Helper to open a bytecode file for writing in exclusive mode */
635 open_exclusive(char *filename
)
637 #if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
638 /* Use O_EXCL to avoid a race condition when another process tries to
639 write the same file. When that happens, our open() call fails,
640 which is just fine (since it's only a cache).
641 XXX If the file exists and is writable but the directory is not
642 writable, the file will never be written. Oh well.
645 (void) unlink(filename
);
646 fd
= open(filename
, O_EXCL
|O_CREAT
|O_WRONLY
|O_TRUNC
648 |O_BINARY
/* necessary for Windows */
654 return fdopen(fd
, "wb");
656 /* Best we can do -- on Windows this can't happen anyway */
657 return fopen(filename
, "wb");
662 /* Write a compiled module to a file, placing the time of last
663 modification of its source into the header.
664 Errors are ignored, if a write error occurs an attempt is made to
668 write_compiled_module(PyCodeObject
*co
, char *cpathname
, long mtime
)
672 fp
= open_exclusive(cpathname
);
676 "# can't create %s\n", cpathname
);
679 PyMarshal_WriteLongToFile(pyc_magic
, fp
);
680 /* First write a 0 for mtime */
681 PyMarshal_WriteLongToFile(0L, fp
);
682 PyMarshal_WriteObjectToFile((PyObject
*)co
, fp
);
685 PySys_WriteStderr("# can't write %s\n", cpathname
);
686 /* Don't keep partial file */
688 (void) unlink(cpathname
);
691 /* Now write the true mtime */
693 PyMarshal_WriteLongToFile(mtime
, fp
);
697 PySys_WriteStderr("# wrote %s\n", cpathname
);
699 PyMac_setfiletype(cpathname
, 'Pyth', 'PYC ');
704 /* Load a source module from a given file and return its module
705 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
706 byte-compiled file, use that instead. */
709 load_source_module(char *name
, char *pathname
, FILE *fp
)
713 char buf
[MAXPATHLEN
+1];
718 mtime
= PyOS_GetLastModificationTime(pathname
, fp
);
719 if (mtime
== (time_t)(-1))
721 #if SIZEOF_TIME_T > 4
722 /* Python's .pyc timestamp handling presumes that the timestamp fits
723 in 4 bytes. This will be fine until sometime in the year 2038,
724 when a 4-byte signed time_t will overflow.
727 PyErr_SetString(PyExc_OverflowError
,
728 "modification time overflows a 4 byte field");
732 cpathname
= make_compiled_pathname(pathname
, buf
,
733 (size_t)MAXPATHLEN
+ 1);
734 if (cpathname
!= NULL
&&
735 (fpc
= check_compiled_module(pathname
, mtime
, cpathname
))) {
736 co
= read_compiled_module(cpathname
, fpc
);
741 PySys_WriteStderr("import %s # precompiled from %s\n",
743 pathname
= cpathname
;
746 co
= parse_source_module(pathname
, fp
);
750 PySys_WriteStderr("import %s # from %s\n",
752 write_compiled_module(co
, cpathname
, mtime
);
754 m
= PyImport_ExecCodeModuleEx(name
, (PyObject
*)co
, pathname
);
762 static PyObject
*load_module(char *, FILE *, char *, int);
763 static struct filedescr
*find_module(char *, PyObject
*,
764 char *, size_t, FILE **);
765 static struct _frozen
*find_frozen(char *name
);
767 /* Load a package and return its module object WITH INCREMENTED
771 load_package(char *name
, char *pathname
)
773 PyObject
*m
, *d
, *file
, *path
;
775 char buf
[MAXPATHLEN
+1];
777 struct filedescr
*fdp
;
779 m
= PyImport_AddModule(name
);
783 PySys_WriteStderr("import %s # directory %s\n",
785 d
= PyModule_GetDict(m
);
786 file
= PyString_FromString(pathname
);
789 path
= Py_BuildValue("[O]", file
);
794 err
= PyDict_SetItemString(d
, "__file__", file
);
796 err
= PyDict_SetItemString(d
, "__path__", path
);
802 fdp
= find_module("__init__", path
, buf
, sizeof(buf
), &fp
);
804 if (PyErr_ExceptionMatches(PyExc_ImportError
)) {
811 m
= load_module(name
, fp
, buf
, fdp
->type
);
821 /* Helper to test for built-in module */
824 is_builtin(char *name
)
827 for (i
= 0; PyImport_Inittab
[i
].name
!= NULL
; i
++) {
828 if (strcmp(name
, PyImport_Inittab
[i
].name
) == 0) {
829 if (PyImport_Inittab
[i
].initfunc
== NULL
)
839 /* Search the path (default sys.path) for a module. Return the
840 corresponding filedescr struct, and (via return arguments) the
841 pathname and an open file. Return NULL if the module is not found. */
844 extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr
**,
848 static int case_ok(char *, int, int, char *);
849 static int find_init_module(char *); /* Forward */
851 static struct filedescr
*
852 find_module(char *realname
, PyObject
*path
, char *buf
, size_t buflen
,
858 struct filedescr
*fdp
= NULL
;
863 static struct filedescr fd_frozen
= {"", "", PY_FROZEN
};
864 static struct filedescr fd_builtin
= {"", "", C_BUILTIN
};
865 static struct filedescr fd_package
= {"", "", PKG_DIRECTORY
};
866 char name
[MAXPATHLEN
+1];
868 if (strlen(realname
) > MAXPATHLEN
) {
869 PyErr_SetString(PyExc_OverflowError
, "module name is too long");
872 strcpy(name
, realname
);
874 if (path
!= NULL
&& PyString_Check(path
)) {
875 /* Submodule of "frozen" package:
876 Set name to the fullname, path to NULL
877 and continue as "usual" */
878 if (PyString_Size(path
) + 1 + strlen(name
) >= (size_t)buflen
) {
879 PyErr_SetString(PyExc_ImportError
,
880 "full frozen module name too long");
883 strcpy(buf
, PyString_AsString(path
));
890 if (is_builtin(name
)) {
894 if ((f
= find_frozen(name
)) != NULL
) {
900 fp
= PyWin_FindRegisteredModule(name
, &fdp
, buf
, buflen
);
906 path
= PySys_GetObject("path");
908 if (path
== NULL
|| !PyList_Check(path
)) {
909 PyErr_SetString(PyExc_ImportError
,
910 "sys.path must be a list of directory names");
913 npath
= PyList_Size(path
);
914 namelen
= strlen(name
);
915 for (i
= 0; i
< npath
; i
++) {
916 PyObject
*v
= PyList_GetItem(path
, i
);
917 if (!PyString_Check(v
))
919 len
= PyString_Size(v
);
920 if (len
+ 2 + namelen
+ MAXSUFFIXSIZE
>= buflen
)
921 continue; /* Too long */
922 strcpy(buf
, PyString_AsString(v
));
923 if (strlen(buf
) != len
)
924 continue; /* v contains '\0' */
926 #ifdef INTERN_STRINGS
928 ** Speedup: each sys.path item is interned, and
929 ** FindResourceModule remembers which items refer to
930 ** folders (so we don't have to bother trying to look
931 ** into them for resources).
933 PyString_InternInPlace(&PyList_GET_ITEM(path
, i
));
934 v
= PyList_GET_ITEM(path
, i
);
936 if (PyMac_FindResourceModule((PyStringObject
*)v
, name
, buf
)) {
937 static struct filedescr resfiledescr
=
938 {"", "", PY_RESOURCE
};
940 return &resfiledescr
;
942 if (PyMac_FindCodeResourceModule((PyStringObject
*)v
, name
, buf
)) {
943 static struct filedescr resfiledescr
=
944 {"", "", PY_CODERESOURCE
};
946 return &resfiledescr
;
949 if (len
> 0 && buf
[len
-1] != SEP
951 && buf
[len
-1] != ALTSEP
955 strcpy(buf
+len
, name
);
958 /* Check for package import (buf holds a directory name,
959 and there's an __init__ module in that directory */
961 if (stat(buf
, &statbuf
) == 0 && /* it exists */
962 S_ISDIR(statbuf
.st_mode
) && /* it's a directory */
963 find_init_module(buf
) && /* it has __init__.py */
964 case_ok(buf
, len
, namelen
, name
)) /* and case matches */
967 /* XXX How are you going to test for directories? */
970 static struct filedescr fd
= {"", "", PKG_DIRECTORY
};
972 if (find_init_module(buf
))
979 fdp
= PyMac_FindModuleExtension(buf
, &len
, name
);
982 for (fdp
= _PyImport_Filetab
; fdp
->suffix
!= NULL
; fdp
++) {
983 strcpy(buf
+len
, fdp
->suffix
);
984 if (Py_VerboseFlag
> 1)
985 PySys_WriteStderr("# trying %s\n", buf
);
986 #endif /* !macintosh */
987 fp
= fopen(buf
, fdp
->mode
);
989 if (case_ok(buf
, len
, namelen
, name
))
991 else { /* continue search */
1001 PyErr_Format(PyExc_ImportError
,
1002 "No module named %.200s", name
);
1009 /* case_ok(char* buf, int len, int namelen, char* name)
1010 * The arguments here are tricky, best shown by example:
1011 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1013 * |--------------------- buf ---------------------|
1014 * |------------------- len ------------------|
1015 * |------ name -------|
1016 * |----- namelen -----|
1017 * buf is the full path, but len only counts up to (& exclusive of) the
1018 * extension. name is the module name, also exclusive of extension.
1020 * We've already done a successful stat() or fopen() on buf, so know that
1021 * there's some match, possibly case-insensitive.
1023 * case_ok() is to return 1 if there's a case-sensitive match for
1024 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1027 * case_ok() is used to implement case-sensitive import semantics even
1028 * on platforms with case-insensitive filesystems. It's trivial to implement
1029 * for case-sensitive filesystems. It's pretty much a cross-platform
1030 * nightmare for systems with case-insensitive filesystems.
1033 /* First we may need a pile of platform-specific header files; the sequence
1034 * of #if's here should match the sequence in the body of case_ok().
1036 #if defined(MS_WIN32) || defined(__CYGWIN__)
1037 #include <windows.h>
1039 #include <sys/cygwin.h>
1042 #elif defined(DJGPP)
1045 #elif defined(macintosh)
1046 #include <TextUtils.h>
1048 #include "TFileSpec.h" /* for Path2FSSpec() */
1051 #elif defined(__MACH__) && defined(__APPLE__) && defined(HAVE_DIRENT_H)
1052 #include <sys/types.h>
1058 case_ok(char *buf
, int len
, int namelen
, char *name
)
1060 /* Pick a platform-specific implementation; the sequence of #if's here should
1061 * match the sequence just above.
1064 /* MS_WIN32 || __CYGWIN__ */
1065 #if defined(MS_WIN32) || defined(__CYGWIN__)
1066 WIN32_FIND_DATA data
;
1069 char tempbuf
[MAX_PATH
];
1072 if (getenv("PYTHONCASEOK") != NULL
)
1076 cygwin32_conv_to_win32_path(buf
, tempbuf
);
1077 h
= FindFirstFile(tempbuf
, &data
);
1079 h
= FindFirstFile(buf
, &data
);
1081 if (h
== INVALID_HANDLE_VALUE
) {
1082 PyErr_Format(PyExc_NameError
,
1083 "Can't find file for module %.100s\n(filename %.300s)",
1088 return strncmp(data
.cFileName
, name
, namelen
) == 0;
1091 #elif defined(DJGPP)
1095 if (getenv("PYTHONCASEOK") != NULL
)
1098 done
= findfirst(buf
, &ffblk
, FA_ARCH
|FA_RDONLY
|FA_HIDDEN
|FA_DIREC
);
1100 PyErr_Format(PyExc_NameError
,
1101 "Can't find file for module %.100s\n(filename %.300s)",
1105 return strncmp(ffblk
.ff_name
, name
, namelen
) == 0;
1108 #elif defined(macintosh)
1112 if (getenv("PYTHONCASEOK") != NULL
)
1116 err
= FSMakeFSSpec(0, 0, Pstring(buf
), &fss
);
1118 /* GUSI's Path2FSSpec() resolves all possible aliases nicely on
1119 the way, which is fine for all directories, but here we need
1120 the original name of the alias file (say, Dlg.ppc.slb, not
1121 toolboxmodules.ppc.slb). */
1123 err
= Path2FSSpec(buf
, &fss
);
1125 colon
= strrchr(buf
, ':'); /* find filename */
1127 err
= FSMakeFSSpec(fss
.vRefNum
, fss
.parID
,
1128 Pstring(colon
+1), &fss
);
1130 err
= FSMakeFSSpec(fss
.vRefNum
, fss
.parID
,
1135 PyErr_Format(PyExc_NameError
,
1136 "Can't find file for module %.100s\n(filename %.300s)",
1140 return fss
.name
[0] >= namelen
&&
1141 strncmp(name
, (char *)fss
.name
+1, namelen
) == 0;
1143 /* new-fangled macintosh (macosx) */
1144 #elif defined(__MACH__) && defined(__APPLE__) && defined(HAVE_DIRENT_H)
1147 char dirname
[MAXPATHLEN
+ 1];
1148 const int dirlen
= len
- namelen
- 1; /* don't want trailing SEP */
1150 if (getenv("PYTHONCASEOK") != NULL
)
1153 /* Copy the dir component into dirname; substitute "." if empty */
1159 assert(dirlen
<= MAXPATHLEN
);
1160 memcpy(dirname
, buf
, dirlen
);
1161 dirname
[dirlen
] = '\0';
1163 /* Open the directory and search the entries for an exact match. */
1164 dirp
= opendir(dirname
);
1166 char *nameWithExt
= buf
+ len
- namelen
;
1167 while ((dp
= readdir(dirp
)) != NULL
) {
1169 #ifdef _DIRENT_HAVE_D_NAMELEN
1174 if (thislen
>= namelen
&&
1175 strcmp(dp
->d_name
, nameWithExt
) == 0) {
1176 (void)closedir(dirp
);
1177 return 1; /* Found */
1180 (void)closedir(dirp
);
1182 return 0 ; /* Not found */
1184 /* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1193 /* Helper to look for __init__.py or __init__.py[co] in potential package */
1195 find_init_module(char *buf
)
1197 const size_t save_len
= strlen(buf
);
1198 size_t i
= save_len
;
1199 char *pname
; /* pointer to start of __init__ */
1200 struct stat statbuf
;
1202 /* For calling case_ok(buf, len, namelen, name):
1203 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1205 * |--------------------- buf ---------------------|
1206 * |------------------- len ------------------|
1207 * |------ name -------|
1208 * |----- namelen -----|
1210 if (save_len
+ 13 >= MAXPATHLEN
)
1214 strcpy(pname
, "__init__.py");
1215 if (stat(buf
, &statbuf
) == 0) {
1217 save_len
+ 9, /* len("/__init__") */
1218 8, /* len("__init__") */
1220 buf
[save_len
] = '\0';
1225 strcpy(buf
+i
, Py_OptimizeFlag
? "o" : "c");
1226 if (stat(buf
, &statbuf
) == 0) {
1228 save_len
+ 9, /* len("/__init__") */
1229 8, /* len("__init__") */
1231 buf
[save_len
] = '\0';
1235 buf
[save_len
] = '\0';
1243 find_init_module(buf
)
1246 int save_len
= strlen(buf
);
1249 if (save_len
+ 13 >= MAXPATHLEN
)
1252 strcpy(buf
+i
, "__init__/py");
1254 buf
[save_len
] = '\0';
1258 if (Py_OptimizeFlag
)
1263 buf
[save_len
] = '\0';
1266 buf
[save_len
] = '\0';
1271 #endif /* HAVE_STAT */
1274 static int init_builtin(char *); /* Forward */
1276 /* Load an external module using the default search path and return
1277 its module object WITH INCREMENTED REFERENCE COUNT */
1280 load_module(char *name
, FILE *fp
, char *buf
, int type
)
1286 /* First check that there's an open file (if we need one) */
1291 PyErr_Format(PyExc_ValueError
,
1292 "file object required for import (type code %d)",
1301 m
= load_source_module(name
, buf
, fp
);
1305 m
= load_compiled_module(name
, buf
, fp
);
1308 #ifdef HAVE_DYNAMIC_LOADING
1310 m
= _PyImport_LoadDynamicModule(name
, buf
, fp
);
1316 m
= PyMac_LoadResourceModule(name
, buf
);
1318 case PY_CODERESOURCE
:
1319 m
= PyMac_LoadCodeResourceModule(name
, buf
);
1324 m
= load_package(name
, buf
);
1329 if (buf
!= NULL
&& buf
[0] != '\0')
1331 if (type
== C_BUILTIN
)
1332 err
= init_builtin(name
);
1334 err
= PyImport_ImportFrozenModule(name
);
1338 PyErr_Format(PyExc_ImportError
,
1339 "Purported %s module %.200s not found",
1341 "builtin" : "frozen",
1345 modules
= PyImport_GetModuleDict();
1346 m
= PyDict_GetItemString(modules
, name
);
1350 "%s module %.200s not properly initialized",
1352 "builtin" : "frozen",
1360 PyErr_Format(PyExc_ImportError
,
1361 "Don't know how to import %.200s (type code %d)",
1371 /* Initialize a built-in module.
1372 Return 1 for succes, 0 if the module is not found, and -1 with
1373 an exception set if the initialization failed. */
1376 init_builtin(char *name
)
1381 if ((mod
= _PyImport_FindExtension(name
, name
)) != NULL
)
1384 for (p
= PyImport_Inittab
; p
->name
!= NULL
; p
++) {
1385 if (strcmp(name
, p
->name
) == 0) {
1386 if (p
->initfunc
== NULL
) {
1387 PyErr_Format(PyExc_ImportError
,
1388 "Cannot re-init internal module %.200s",
1393 PySys_WriteStderr("import %s # builtin\n", name
);
1395 if (PyErr_Occurred())
1397 if (_PyImport_FixupExtension(name
, name
) == NULL
)
1406 /* Frozen modules */
1408 static struct _frozen
*
1409 find_frozen(char *name
)
1413 for (p
= PyImport_FrozenModules
; ; p
++) {
1414 if (p
->name
== NULL
)
1416 if (strcmp(p
->name
, name
) == 0)
1423 get_frozen_object(char *name
)
1425 struct _frozen
*p
= find_frozen(name
);
1429 PyErr_Format(PyExc_ImportError
,
1430 "No such frozen object named %.200s",
1437 return PyMarshal_ReadObjectFromString((char *)p
->code
, size
);
1440 /* Initialize a frozen module.
1441 Return 1 for succes, 0 if the module is not found, and -1 with
1442 an exception set if the initialization failed.
1443 This function is also used from frozenmain.c */
1446 PyImport_ImportFrozenModule(char *name
)
1448 struct _frozen
*p
= find_frozen(name
);
1457 ispackage
= (size
< 0);
1461 PySys_WriteStderr("import %s # frozen%s\n",
1462 name
, ispackage
? " package" : "");
1463 co
= PyMarshal_ReadObjectFromString((char *)p
->code
, size
);
1466 if (!PyCode_Check(co
)) {
1468 PyErr_Format(PyExc_TypeError
,
1469 "frozen object %.200s is not a code object",
1474 /* Set __path__ to the package name */
1477 m
= PyImport_AddModule(name
);
1480 d
= PyModule_GetDict(m
);
1481 s
= PyString_InternFromString(name
);
1484 err
= PyDict_SetItemString(d
, "__path__", s
);
1489 m
= PyImport_ExecCodeModuleEx(name
, co
, "<frozen>");
1498 /* Import a module, either built-in, frozen, or external, and return
1499 its module object WITH INCREMENTED REFERENCE COUNT */
1502 PyImport_ImportModule(char *name
)
1507 pname
= PyString_FromString(name
);
1508 result
= PyImport_Import(pname
);
1513 /* Forward declarations for helper routines */
1514 static PyObject
*get_parent(PyObject
*globals
, char *buf
, int *p_buflen
);
1515 static PyObject
*load_next(PyObject
*mod
, PyObject
*altmod
,
1516 char **p_name
, char *buf
, int *p_buflen
);
1517 static int mark_miss(char *name
);
1518 static int ensure_fromlist(PyObject
*mod
, PyObject
*fromlist
,
1519 char *buf
, int buflen
, int recursive
);
1520 static PyObject
* import_submodule(PyObject
*mod
, char *name
, char *fullname
);
1522 /* The Magnum Opus of dotted-name import :-) */
1525 import_module_ex(char *name
, PyObject
*globals
, PyObject
*locals
,
1528 char buf
[MAXPATHLEN
+1];
1530 PyObject
*parent
, *head
, *next
, *tail
;
1532 parent
= get_parent(globals
, buf
, &buflen
);
1536 head
= load_next(parent
, Py_None
, &name
, buf
, &buflen
);
1543 next
= load_next(tail
, tail
, &name
, buf
, &buflen
);
1552 if (fromlist
!= NULL
) {
1553 if (fromlist
== Py_None
|| !PyObject_IsTrue(fromlist
))
1557 if (fromlist
== NULL
) {
1563 if (!ensure_fromlist(tail
, fromlist
, buf
, buflen
, 0)) {
1572 PyImport_ImportModuleEx(char *name
, PyObject
*globals
, PyObject
*locals
,
1577 result
= import_module_ex(name
, globals
, locals
, fromlist
);
1583 get_parent(PyObject
*globals
, char *buf
, int *p_buflen
)
1585 static PyObject
*namestr
= NULL
;
1586 static PyObject
*pathstr
= NULL
;
1587 PyObject
*modname
, *modpath
, *modules
, *parent
;
1589 if (globals
== NULL
|| !PyDict_Check(globals
))
1592 if (namestr
== NULL
) {
1593 namestr
= PyString_InternFromString("__name__");
1594 if (namestr
== NULL
)
1597 if (pathstr
== NULL
) {
1598 pathstr
= PyString_InternFromString("__path__");
1599 if (pathstr
== NULL
)
1605 modname
= PyDict_GetItem(globals
, namestr
);
1606 if (modname
== NULL
|| !PyString_Check(modname
))
1609 modpath
= PyDict_GetItem(globals
, pathstr
);
1610 if (modpath
!= NULL
) {
1611 int len
= PyString_GET_SIZE(modname
);
1612 if (len
> MAXPATHLEN
) {
1613 PyErr_SetString(PyExc_ValueError
,
1614 "Module name too long");
1617 strcpy(buf
, PyString_AS_STRING(modname
));
1621 char *start
= PyString_AS_STRING(modname
);
1622 char *lastdot
= strrchr(start
, '.');
1624 if (lastdot
== NULL
)
1626 len
= lastdot
- start
;
1627 if (len
>= MAXPATHLEN
) {
1628 PyErr_SetString(PyExc_ValueError
,
1629 "Module name too long");
1632 strncpy(buf
, start
, len
);
1637 modules
= PyImport_GetModuleDict();
1638 parent
= PyDict_GetItemString(modules
, buf
);
1642 /* We expect, but can't guarantee, if parent != None, that:
1643 - parent.__name__ == buf
1644 - parent.__dict__ is globals
1645 If this is violated... Who cares? */
1648 /* altmod is either None or same as mod */
1650 load_next(PyObject
*mod
, PyObject
*altmod
, char **p_name
, char *buf
,
1653 char *name
= *p_name
;
1654 char *dot
= strchr(name
, '.');
1668 PyErr_SetString(PyExc_ValueError
,
1669 "Empty module name");
1673 p
= buf
+ *p_buflen
;
1676 if (p
+len
-buf
>= MAXPATHLEN
) {
1677 PyErr_SetString(PyExc_ValueError
,
1678 "Module name too long");
1681 strncpy(p
, name
, len
);
1683 *p_buflen
= p
+len
-buf
;
1685 result
= import_submodule(mod
, p
, buf
);
1686 if (result
== Py_None
&& altmod
!= mod
) {
1688 /* Here, altmod must be None and mod must not be None */
1689 result
= import_submodule(altmod
, p
, p
);
1690 if (result
!= NULL
&& result
!= Py_None
) {
1691 if (mark_miss(buf
) != 0) {
1695 strncpy(buf
, name
, len
);
1703 if (result
== Py_None
) {
1705 PyErr_Format(PyExc_ImportError
,
1706 "No module named %.200s", name
);
1714 mark_miss(char *name
)
1716 PyObject
*modules
= PyImport_GetModuleDict();
1717 return PyDict_SetItemString(modules
, name
, Py_None
);
1721 ensure_fromlist(PyObject
*mod
, PyObject
*fromlist
, char *buf
, int buflen
,
1726 if (!PyObject_HasAttrString(mod
, "__path__"))
1729 for (i
= 0; ; i
++) {
1730 PyObject
*item
= PySequence_GetItem(fromlist
, i
);
1733 if (PyErr_ExceptionMatches(PyExc_IndexError
)) {
1739 if (!PyString_Check(item
)) {
1740 PyErr_SetString(PyExc_TypeError
,
1741 "Item in ``from list'' not a string");
1745 if (PyString_AS_STRING(item
)[0] == '*') {
1748 /* See if the package defines __all__ */
1750 continue; /* Avoid endless recursion */
1751 all
= PyObject_GetAttrString(mod
, "__all__");
1755 if (!ensure_fromlist(mod
, all
, buf
, buflen
, 1))
1761 hasit
= PyObject_HasAttr(mod
, item
);
1763 char *subname
= PyString_AS_STRING(item
);
1766 if (buflen
+ strlen(subname
) >= MAXPATHLEN
) {
1767 PyErr_SetString(PyExc_ValueError
,
1768 "Module name too long");
1775 submod
= import_submodule(mod
, subname
, buf
);
1777 if (submod
== NULL
) {
1789 import_submodule(PyObject
*mod
, char *subname
, char *fullname
)
1791 PyObject
*modules
= PyImport_GetModuleDict();
1795 if mod == None: subname == fullname
1796 else: mod.__name__ + "." + subname == fullname
1799 if ((m
= PyDict_GetItemString(modules
, fullname
)) != NULL
) {
1804 char buf
[MAXPATHLEN
+1];
1805 struct filedescr
*fdp
;
1811 path
= PyObject_GetAttrString(mod
, "__path__");
1820 fdp
= find_module(subname
, path
, buf
, MAXPATHLEN
+1, &fp
);
1823 if (!PyErr_ExceptionMatches(PyExc_ImportError
))
1829 m
= load_module(fullname
, fp
, buf
, fdp
->type
);
1832 if (m
!= NULL
&& mod
!= Py_None
) {
1833 if (PyObject_SetAttrString(mod
, subname
, m
) < 0) {
1844 /* Re-import a module of any kind and return its module object, WITH
1845 INCREMENTED REFERENCE COUNT */
1848 PyImport_ReloadModule(PyObject
*m
)
1850 PyObject
*modules
= PyImport_GetModuleDict();
1851 PyObject
*path
= NULL
;
1852 char *name
, *subname
;
1853 char buf
[MAXPATHLEN
+1];
1854 struct filedescr
*fdp
;
1857 if (m
== NULL
|| !PyModule_Check(m
)) {
1858 PyErr_SetString(PyExc_TypeError
,
1859 "reload() argument must be module");
1862 name
= PyModule_GetName(m
);
1865 if (m
!= PyDict_GetItemString(modules
, name
)) {
1866 PyErr_Format(PyExc_ImportError
,
1867 "reload(): module %.200s not in sys.modules",
1871 subname
= strrchr(name
, '.');
1872 if (subname
== NULL
)
1875 PyObject
*parentname
, *parent
;
1876 parentname
= PyString_FromStringAndSize(name
, (subname
-name
));
1877 if (parentname
== NULL
)
1879 parent
= PyDict_GetItem(modules
, parentname
);
1880 Py_DECREF(parentname
);
1881 if (parent
== NULL
) {
1882 PyErr_Format(PyExc_ImportError
,
1883 "reload(): parent %.200s not in sys.modules",
1888 path
= PyObject_GetAttrString(parent
, "__path__");
1893 fdp
= find_module(subname
, path
, buf
, MAXPATHLEN
+1, &fp
);
1897 m
= load_module(name
, fp
, buf
, fdp
->type
);
1904 /* Higher-level import emulator which emulates the "import" statement
1905 more accurately -- it invokes the __import__() function from the
1906 builtins of the current globals. This means that the import is
1907 done using whatever import hooks are installed in the current
1908 environment, e.g. by "rexec".
1909 A dummy list ["__doc__"] is passed as the 4th argument so that
1910 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
1911 will return <module "gencache"> instead of <module "win32com">. */
1914 PyImport_Import(PyObject
*module_name
)
1916 static PyObject
*silly_list
= NULL
;
1917 static PyObject
*builtins_str
= NULL
;
1918 static PyObject
*import_str
= NULL
;
1919 PyObject
*globals
= NULL
;
1920 PyObject
*import
= NULL
;
1921 PyObject
*builtins
= NULL
;
1924 /* Initialize constant string objects */
1925 if (silly_list
== NULL
) {
1926 import_str
= PyString_InternFromString("__import__");
1927 if (import_str
== NULL
)
1929 builtins_str
= PyString_InternFromString("__builtins__");
1930 if (builtins_str
== NULL
)
1932 silly_list
= Py_BuildValue("[s]", "__doc__");
1933 if (silly_list
== NULL
)
1937 /* Get the builtins from current globals */
1938 globals
= PyEval_GetGlobals();
1939 if (globals
!= NULL
) {
1941 builtins
= PyObject_GetItem(globals
, builtins_str
);
1942 if (builtins
== NULL
)
1946 /* No globals -- use standard builtins, and fake globals */
1949 builtins
= PyImport_ImportModuleEx("__builtin__",
1951 if (builtins
== NULL
)
1953 globals
= Py_BuildValue("{OO}", builtins_str
, builtins
);
1954 if (globals
== NULL
)
1958 /* Get the __import__ function from the builtins */
1959 if (PyDict_Check(builtins
))
1960 import
= PyObject_GetItem(builtins
, import_str
);
1962 import
= PyObject_GetAttr(builtins
, import_str
);
1966 /* Call the _import__ function with the proper argument list */
1967 r
= PyObject_CallFunction(import
, "OOOO",
1968 module_name
, globals
, globals
, silly_list
);
1971 Py_XDECREF(globals
);
1972 Py_XDECREF(builtins
);
1979 /* Module 'imp' provides Python access to the primitives used for
1984 imp_get_magic(PyObject
*self
, PyObject
*args
)
1988 if (!PyArg_ParseTuple(args
, ":get_magic"))
1990 buf
[0] = (char) ((pyc_magic
>> 0) & 0xff);
1991 buf
[1] = (char) ((pyc_magic
>> 8) & 0xff);
1992 buf
[2] = (char) ((pyc_magic
>> 16) & 0xff);
1993 buf
[3] = (char) ((pyc_magic
>> 24) & 0xff);
1995 return PyString_FromStringAndSize(buf
, 4);
1999 imp_get_suffixes(PyObject
*self
, PyObject
*args
)
2002 struct filedescr
*fdp
;
2004 if (!PyArg_ParseTuple(args
, ":get_suffixes"))
2006 list
= PyList_New(0);
2009 for (fdp
= _PyImport_Filetab
; fdp
->suffix
!= NULL
; fdp
++) {
2010 PyObject
*item
= Py_BuildValue("ssi",
2011 fdp
->suffix
, fdp
->mode
, fdp
->type
);
2016 if (PyList_Append(list
, item
) < 0) {
2027 call_find_module(char *name
, PyObject
*path
)
2029 extern int fclose(FILE *);
2030 PyObject
*fob
, *ret
;
2031 struct filedescr
*fdp
;
2032 char pathname
[MAXPATHLEN
+1];
2036 if (path
== Py_None
)
2038 fdp
= find_module(name
, path
, pathname
, MAXPATHLEN
+1, &fp
);
2042 fob
= PyFile_FromFile(fp
, pathname
, fdp
->mode
, fclose
);
2052 ret
= Py_BuildValue("Os(ssi)",
2053 fob
, pathname
, fdp
->suffix
, fdp
->mode
, fdp
->type
);
2059 imp_find_module(PyObject
*self
, PyObject
*args
)
2062 PyObject
*path
= NULL
;
2063 if (!PyArg_ParseTuple(args
, "s|O:find_module", &name
, &path
))
2065 return call_find_module(name
, path
);
2069 imp_init_builtin(PyObject
*self
, PyObject
*args
)
2074 if (!PyArg_ParseTuple(args
, "s:init_builtin", &name
))
2076 ret
= init_builtin(name
);
2083 m
= PyImport_AddModule(name
);
2089 imp_init_frozen(PyObject
*self
, PyObject
*args
)
2094 if (!PyArg_ParseTuple(args
, "s:init_frozen", &name
))
2096 ret
= PyImport_ImportFrozenModule(name
);
2103 m
= PyImport_AddModule(name
);
2109 imp_get_frozen_object(PyObject
*self
, PyObject
*args
)
2113 if (!PyArg_ParseTuple(args
, "s:get_frozen_object", &name
))
2115 return get_frozen_object(name
);
2119 imp_is_builtin(PyObject
*self
, PyObject
*args
)
2122 if (!PyArg_ParseTuple(args
, "s:is_builtin", &name
))
2124 return PyInt_FromLong(is_builtin(name
));
2128 imp_is_frozen(PyObject
*self
, PyObject
*args
)
2132 if (!PyArg_ParseTuple(args
, "s:is_frozen", &name
))
2134 p
= find_frozen(name
);
2135 return PyInt_FromLong((long) (p
== NULL
? 0 : p
->size
));
2139 get_file(char *pathname
, PyObject
*fob
, char *mode
)
2143 fp
= fopen(pathname
, mode
);
2145 PyErr_SetFromErrno(PyExc_IOError
);
2148 fp
= PyFile_AsFile(fob
);
2150 PyErr_SetString(PyExc_ValueError
,
2151 "bad/closed file object");
2157 imp_load_compiled(PyObject
*self
, PyObject
*args
)
2161 PyObject
*fob
= NULL
;
2164 if (!PyArg_ParseTuple(args
, "ss|O!:load_compiled", &name
, &pathname
,
2165 &PyFile_Type
, &fob
))
2167 fp
= get_file(pathname
, fob
, "rb");
2170 m
= load_compiled_module(name
, pathname
, fp
);
2176 #ifdef HAVE_DYNAMIC_LOADING
2179 imp_load_dynamic(PyObject
*self
, PyObject
*args
)
2183 PyObject
*fob
= NULL
;
2186 if (!PyArg_ParseTuple(args
, "ss|O!:load_dynamic", &name
, &pathname
,
2187 &PyFile_Type
, &fob
))
2190 fp
= get_file(pathname
, fob
, "r");
2194 m
= _PyImport_LoadDynamicModule(name
, pathname
, fp
);
2198 #endif /* HAVE_DYNAMIC_LOADING */
2201 imp_load_source(PyObject
*self
, PyObject
*args
)
2205 PyObject
*fob
= NULL
;
2208 if (!PyArg_ParseTuple(args
, "ss|O!:load_source", &name
, &pathname
,
2209 &PyFile_Type
, &fob
))
2211 fp
= get_file(pathname
, fob
, "r");
2214 m
= load_source_module(name
, pathname
, fp
);
2222 imp_load_resource(PyObject
*self
, PyObject
*args
)
2228 if (!PyArg_ParseTuple(args
, "ss:load_resource", &name
, &pathname
))
2230 m
= PyMac_LoadResourceModule(name
, pathname
);
2233 #endif /* macintosh */
2236 imp_load_module(PyObject
*self
, PyObject
*args
)
2241 char *suffix
; /* Unused */
2246 if (!PyArg_ParseTuple(args
, "sOs(ssi):load_module",
2247 &name
, &fob
, &pathname
,
2248 &suffix
, &mode
, &type
))
2250 if (*mode
&& (*mode
!= 'r' || strchr(mode
, '+') != NULL
)) {
2251 PyErr_Format(PyExc_ValueError
,
2252 "invalid file open mode %.200s", mode
);
2258 if (!PyFile_Check(fob
)) {
2259 PyErr_SetString(PyExc_ValueError
,
2260 "load_module arg#2 should be a file or None");
2263 fp
= get_file(pathname
, fob
, mode
);
2267 return load_module(name
, fp
, pathname
, type
);
2271 imp_load_package(PyObject
*self
, PyObject
*args
)
2275 if (!PyArg_ParseTuple(args
, "ss:load_package", &name
, &pathname
))
2277 return load_package(name
, pathname
);
2281 imp_new_module(PyObject
*self
, PyObject
*args
)
2284 if (!PyArg_ParseTuple(args
, "s:new_module", &name
))
2286 return PyModule_New(name
);
2291 static char doc_imp
[] = "\
2292 This module provides the components needed to build your own\n\
2293 __import__ function. Undocumented functions are obsolete.\n\
2296 static char doc_find_module
[] = "\
2297 find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
2298 Search for a module. If path is omitted or None, search for a\n\
2299 built-in, frozen or special module and continue search in sys.path.\n\
2300 The module name cannot contain '.'; to search for a submodule of a\n\
2301 package, pass the submodule name and the package's __path__.\
2304 static char doc_load_module
[] = "\
2305 load_module(name, file, filename, (suffix, mode, type)) -> module\n\
2306 Load a module, given information returned by find_module().\n\
2307 The module name must include the full package name, if any.\
2310 static char doc_get_magic
[] = "\
2311 get_magic() -> string\n\
2312 Return the magic number for .pyc or .pyo files.\
2315 static char doc_get_suffixes
[] = "\
2316 get_suffixes() -> [(suffix, mode, type), ...]\n\
2317 Return a list of (suffix, mode, type) tuples describing the files\n\
2318 that find_module() looks for.\
2321 static char doc_new_module
[] = "\
2322 new_module(name) -> module\n\
2323 Create a new module. Do not enter it in sys.modules.\n\
2324 The module name must include the full package name, if any.\
2327 static PyMethodDef imp_methods
[] = {
2328 {"find_module", imp_find_module
, 1, doc_find_module
},
2329 {"get_magic", imp_get_magic
, 1, doc_get_magic
},
2330 {"get_suffixes", imp_get_suffixes
, 1, doc_get_suffixes
},
2331 {"load_module", imp_load_module
, 1, doc_load_module
},
2332 {"new_module", imp_new_module
, 1, doc_new_module
},
2333 /* The rest are obsolete */
2334 {"get_frozen_object", imp_get_frozen_object
, 1},
2335 {"init_builtin", imp_init_builtin
, 1},
2336 {"init_frozen", imp_init_frozen
, 1},
2337 {"is_builtin", imp_is_builtin
, 1},
2338 {"is_frozen", imp_is_frozen
, 1},
2339 {"load_compiled", imp_load_compiled
, 1},
2340 #ifdef HAVE_DYNAMIC_LOADING
2341 {"load_dynamic", imp_load_dynamic
, 1},
2343 {"load_package", imp_load_package
, 1},
2345 {"load_resource", imp_load_resource
, 1},
2347 {"load_source", imp_load_source
, 1},
2348 {NULL
, NULL
} /* sentinel */
2352 setint(PyObject
*d
, char *name
, int value
)
2357 v
= PyInt_FromLong((long)value
);
2358 err
= PyDict_SetItemString(d
, name
, v
);
2368 m
= Py_InitModule4("imp", imp_methods
, doc_imp
,
2369 NULL
, PYTHON_API_VERSION
);
2370 d
= PyModule_GetDict(m
);
2372 if (setint(d
, "SEARCH_ERROR", SEARCH_ERROR
) < 0) goto failure
;
2373 if (setint(d
, "PY_SOURCE", PY_SOURCE
) < 0) goto failure
;
2374 if (setint(d
, "PY_COMPILED", PY_COMPILED
) < 0) goto failure
;
2375 if (setint(d
, "C_EXTENSION", C_EXTENSION
) < 0) goto failure
;
2376 if (setint(d
, "PY_RESOURCE", PY_RESOURCE
) < 0) goto failure
;
2377 if (setint(d
, "PKG_DIRECTORY", PKG_DIRECTORY
) < 0) goto failure
;
2378 if (setint(d
, "C_BUILTIN", C_BUILTIN
) < 0) goto failure
;
2379 if (setint(d
, "PY_FROZEN", PY_FROZEN
) < 0) goto failure
;
2380 if (setint(d
, "PY_CODERESOURCE", PY_CODERESOURCE
) < 0) goto failure
;
2387 /* API for embedding applications that want to add their own entries
2388 to the table of built-in modules. This should normally be called
2389 *before* Py_Initialize(). When the table resize fails, -1 is
2390 returned and the existing table is unchanged.
2392 After a similar function by Just van Rossum. */
2395 PyImport_ExtendInittab(struct _inittab
*newtab
)
2397 static struct _inittab
*our_copy
= NULL
;
2401 /* Count the number of entries in both tables */
2402 for (n
= 0; newtab
[n
].name
!= NULL
; n
++)
2405 return 0; /* Nothing to do */
2406 for (i
= 0; PyImport_Inittab
[i
].name
!= NULL
; i
++)
2409 /* Allocate new memory for the combined table */
2411 PyMem_RESIZE(p
, struct _inittab
, i
+n
+1);
2415 /* Copy the tables into the new memory */
2416 if (our_copy
!= PyImport_Inittab
)
2417 memcpy(p
, PyImport_Inittab
, (i
+1) * sizeof(struct _inittab
));
2418 PyImport_Inittab
= our_copy
= p
;
2419 memcpy(p
+i
, newtab
, (n
+1) * sizeof(struct _inittab
));
2424 /* Shorthand to add a single entry given a name and a function */
2427 PyImport_AppendInittab(char *name
, void (*initfunc
)(void))
2429 struct _inittab newtab
[2];
2431 memset(newtab
, '\0', sizeof newtab
);
2433 newtab
[0].name
= name
;
2434 newtab
[0].initfunc
= initfunc
;
2436 return PyImport_ExtendInittab(newtab
);