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
, (size_t)MAXPATHLEN
+1);
733 if (cpathname
!= NULL
&&
734 (fpc
= check_compiled_module(pathname
, mtime
, cpathname
))) {
735 co
= read_compiled_module(cpathname
, fpc
);
740 PySys_WriteStderr("import %s # precompiled from %s\n",
742 pathname
= cpathname
;
745 co
= parse_source_module(pathname
, fp
);
749 PySys_WriteStderr("import %s # from %s\n",
751 write_compiled_module(co
, cpathname
, mtime
);
753 m
= PyImport_ExecCodeModuleEx(name
, (PyObject
*)co
, pathname
);
761 static PyObject
*load_module(char *, FILE *, char *, int);
762 static struct filedescr
*find_module(char *, PyObject
*,
763 char *, size_t, FILE **);
764 static struct _frozen
*find_frozen(char *name
);
766 /* Load a package and return its module object WITH INCREMENTED
770 load_package(char *name
, char *pathname
)
772 PyObject
*m
, *d
, *file
, *path
;
774 char buf
[MAXPATHLEN
+1];
776 struct filedescr
*fdp
;
778 m
= PyImport_AddModule(name
);
782 PySys_WriteStderr("import %s # directory %s\n",
784 d
= PyModule_GetDict(m
);
785 file
= PyString_FromString(pathname
);
788 path
= Py_BuildValue("[O]", file
);
793 err
= PyDict_SetItemString(d
, "__file__", file
);
795 err
= PyDict_SetItemString(d
, "__path__", path
);
801 fdp
= find_module("__init__", path
, buf
, sizeof(buf
), &fp
);
803 if (PyErr_ExceptionMatches(PyExc_ImportError
)) {
810 m
= load_module(name
, fp
, buf
, fdp
->type
);
820 /* Helper to test for built-in module */
823 is_builtin(char *name
)
826 for (i
= 0; PyImport_Inittab
[i
].name
!= NULL
; i
++) {
827 if (strcmp(name
, PyImport_Inittab
[i
].name
) == 0) {
828 if (PyImport_Inittab
[i
].initfunc
== NULL
)
838 /* Search the path (default sys.path) for a module. Return the
839 corresponding filedescr struct, and (via return arguments) the
840 pathname and an open file. Return NULL if the module is not found. */
843 extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr
**,
847 static int case_ok(char *, int, int, char *);
848 static int find_init_module(char *); /* Forward */
850 static struct filedescr
*
851 find_module(char *realname
, PyObject
*path
, char *buf
, size_t buflen
,
857 struct filedescr
*fdp
= NULL
;
862 static struct filedescr fd_frozen
= {"", "", PY_FROZEN
};
863 static struct filedescr fd_builtin
= {"", "", C_BUILTIN
};
864 static struct filedescr fd_package
= {"", "", PKG_DIRECTORY
};
865 char name
[MAXPATHLEN
+1];
867 if (strlen(realname
) > MAXPATHLEN
) {
868 PyErr_SetString(PyExc_OverflowError
, "module name is too long");
871 strcpy(name
, realname
);
873 if (path
!= NULL
&& PyString_Check(path
)) {
874 /* Submodule of "frozen" package:
875 Set name to the fullname, path to NULL
876 and continue as "usual" */
877 if (PyString_Size(path
) + 1 + strlen(name
) >= (size_t)buflen
) {
878 PyErr_SetString(PyExc_ImportError
,
879 "full frozen module name too long");
882 strcpy(buf
, PyString_AsString(path
));
889 if (is_builtin(name
)) {
893 if ((f
= find_frozen(name
)) != NULL
) {
899 fp
= PyWin_FindRegisteredModule(name
, &fdp
, buf
, buflen
);
905 path
= PySys_GetObject("path");
907 if (path
== NULL
|| !PyList_Check(path
)) {
908 PyErr_SetString(PyExc_ImportError
,
909 "sys.path must be a list of directory names");
912 npath
= PyList_Size(path
);
913 namelen
= strlen(name
);
914 for (i
= 0; i
< npath
; i
++) {
915 PyObject
*v
= PyList_GetItem(path
, i
);
916 if (!PyString_Check(v
))
918 len
= PyString_Size(v
);
919 if (len
+ 2 + namelen
+ MAXSUFFIXSIZE
>= buflen
)
920 continue; /* Too long */
921 strcpy(buf
, PyString_AsString(v
));
922 if (strlen(buf
) != len
)
923 continue; /* v contains '\0' */
925 #ifdef INTERN_STRINGS
927 ** Speedup: each sys.path item is interned, and
928 ** FindResourceModule remembers which items refer to
929 ** folders (so we don't have to bother trying to look
930 ** into them for resources).
932 PyString_InternInPlace(&PyList_GET_ITEM(path
, i
));
933 v
= PyList_GET_ITEM(path
, i
);
935 if (PyMac_FindResourceModule((PyStringObject
*)v
, name
, buf
)) {
936 static struct filedescr resfiledescr
=
937 {"", "", PY_RESOURCE
};
939 return &resfiledescr
;
941 if (PyMac_FindCodeResourceModule((PyStringObject
*)v
, name
, buf
)) {
942 static struct filedescr resfiledescr
=
943 {"", "", PY_CODERESOURCE
};
945 return &resfiledescr
;
948 if (len
> 0 && buf
[len
-1] != SEP
950 && buf
[len
-1] != ALTSEP
954 strcpy(buf
+len
, name
);
957 /* Check for package import (buf holds a directory name,
958 and there's an __init__ module in that directory */
960 if (stat(buf
, &statbuf
) == 0 &&
961 S_ISDIR(statbuf
.st_mode
) &&
962 find_init_module(buf
)) {
963 if (case_ok(buf
, len
, namelen
, name
))
969 /* XXX How are you going to test for directories? */
972 static struct filedescr fd
= {"", "", PKG_DIRECTORY
};
974 if (find_init_module(buf
))
981 fdp
= PyMac_FindModuleExtension(buf
, &len
, name
);
984 for (fdp
= _PyImport_Filetab
; fdp
->suffix
!= NULL
; fdp
++) {
985 strcpy(buf
+len
, fdp
->suffix
);
986 if (Py_VerboseFlag
> 1)
987 PySys_WriteStderr("# trying %s\n", buf
);
988 #endif /* !macintosh */
989 fp
= fopen(buf
, fdp
->mode
);
991 if (case_ok(buf
, len
, namelen
, name
))
993 else { /* continue search */
1003 PyErr_Format(PyExc_ImportError
,
1004 "No module named %.200s", name
);
1011 /* case_ok(char* buf, int len, int namelen, char* name)
1012 * The arguments here are tricky, best shown by example:
1013 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1015 * |--------------------- buf ---------------------|
1016 * |------------------- len ------------------|
1017 * |------ name -------|
1018 * |----- namelen -----|
1019 * buf is the full path, but len only counts up to (& exclusive of) the
1020 * extension. name is the module name, also exclusive of extension.
1022 * We've already done a successful stat() or fopen() on buf, so know that
1023 * there's some match, possibly case-insensitive.
1025 * case_ok() is to return 1 if there's a case-sensitive match for
1026 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1029 * case_ok() is used to implement case-sensitive import semantics even
1030 * on platforms with case-insensitive filesystems. It's trivial to implement
1031 * for case-sensitive filesystems. It's pretty much a cross-platform
1032 * nightmare for systems with case-insensitive filesystems.
1035 /* First we may need a pile of platform-specific header files; the sequence
1036 * of #if's here should match the sequence in the body of case_ok().
1038 #if defined(MS_WIN32) || defined(__CYGWIN__)
1039 #include <windows.h>
1041 #include <sys/cygwin.h>
1044 #elif defined(DJGPP)
1047 #elif defined(macintosh)
1048 #include <TextUtils.h>
1050 #include "TFileSpec.h" /* for Path2FSSpec() */
1053 #elif defined(__MACH__) && defined(__APPLE__) && defined(HAVE_DIRENT_H)
1054 #include <sys/types.h>
1060 case_ok(char *buf
, int len
, int namelen
, char *name
)
1062 /* Pick a platform-specific implementation; the sequence of #if's here should
1063 * match the sequence just above.
1066 /* MS_WIN32 || __CYGWIN__ */
1067 #if defined(MS_WIN32) || defined(__CYGWIN__)
1068 WIN32_FIND_DATA data
;
1071 char tempbuf
[MAX_PATH
];
1074 if (getenv("PYTHONCASEOK") != NULL
)
1078 cygwin32_conv_to_win32_path(buf
, tempbuf
);
1079 h
= FindFirstFile(tempbuf
, &data
);
1081 h
= FindFirstFile(buf
, &data
);
1083 if (h
== INVALID_HANDLE_VALUE
) {
1084 PyErr_Format(PyExc_NameError
,
1085 "Can't find file for module %.100s\n(filename %.300s)",
1090 return strncmp(data
.cFileName
, name
, namelen
) == 0;
1093 #elif defined(DJGPP)
1097 if (getenv("PYTHONCASEOK") != NULL
)
1100 done
= findfirst(buf
, &ffblk
, FA_ARCH
|FA_RDONLY
|FA_HIDDEN
|FA_DIREC
);
1102 PyErr_Format(PyExc_NameError
,
1103 "Can't find file for module %.100s\n(filename %.300s)",
1107 return strncmp(ffblk
.ff_name
, name
, namelen
) == 0;
1110 #elif defined(macintosh)
1114 if (getenv("PYTHONCASEOK") != NULL
)
1118 err
= FSMakeFSSpec(0, 0, Pstring(buf
), &fss
);
1120 /* GUSI's Path2FSSpec() resolves all possible aliases nicely on
1121 the way, which is fine for all directories, but here we need
1122 the original name of the alias file (say, Dlg.ppc.slb, not
1123 toolboxmodules.ppc.slb). */
1125 err
= Path2FSSpec(buf
, &fss
);
1127 colon
= strrchr(buf
, ':'); /* find filename */
1129 err
= FSMakeFSSpec(fss
.vRefNum
, fss
.parID
,
1130 Pstring(colon
+1), &fss
);
1132 err
= FSMakeFSSpec(fss
.vRefNum
, fss
.parID
,
1137 PyErr_Format(PyExc_NameError
,
1138 "Can't find file for module %.100s\n(filename %.300s)",
1142 return fss
.name
[0] >= namelen
&&
1143 strncmp(name
, (char *)fss
.name
+1, namelen
) == 0;
1145 /* new-fangled macintosh (macosx) */
1146 #elif defined(__MACH__) && defined(__APPLE__) && defined(HAVE_DIRENT_H)
1149 char dirname
[MAXPATHLEN
+ 1];
1150 const int dirlen
= len
- namelen
- 1; /* don't want trailing SEP */
1152 if (getenv("PYTHONCASEOK") != NULL
)
1155 /* Copy the dir component into dirname; substitute "." if empty */
1161 assert(dirlen
<= MAXPATHLEN
);
1162 memcpy(dirname
, buf
, dirlen
);
1163 dirname
[dirlen
] = '\0';
1165 /* Open the directory and search the entries for an exact match. */
1166 dirp
= opendir(dirname
);
1168 char *nameWithExt
= buf
+ len
- namelen
;
1169 while ((dp
= readdir(dirp
)) != NULL
) {
1171 #ifdef _DIRENT_HAVE_D_NAMELEN
1176 if (thislen
>= namelen
&&
1177 strcmp(dp
->d_name
, nameWithExt
) == 0) {
1178 (void)closedir(dirp
);
1179 return 1; /* Found */
1182 (void)closedir(dirp
);
1184 return 0 ; /* Not found */
1186 /* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1195 /* Helper to look for __init__.py or __init__.py[co] in potential package */
1197 find_init_module(char *buf
)
1199 size_t save_len
= strlen(buf
);
1200 size_t i
= save_len
;
1201 struct stat statbuf
;
1203 if (save_len
+ 13 >= MAXPATHLEN
)
1206 strcpy(buf
+i
, "__init__.py");
1207 if (stat(buf
, &statbuf
) == 0) {
1208 buf
[save_len
] = '\0';
1212 if (Py_OptimizeFlag
)
1216 if (stat(buf
, &statbuf
) == 0) {
1217 buf
[save_len
] = '\0';
1220 buf
[save_len
] = '\0';
1228 find_init_module(buf
)
1231 int save_len
= strlen(buf
);
1234 if (save_len
+ 13 >= MAXPATHLEN
)
1237 strcpy(buf
+i
, "__init__/py");
1239 buf
[save_len
] = '\0';
1243 if (Py_OptimizeFlag
)
1248 buf
[save_len
] = '\0';
1251 buf
[save_len
] = '\0';
1256 #endif /* HAVE_STAT */
1259 static int init_builtin(char *); /* Forward */
1261 /* Load an external module using the default search path and return
1262 its module object WITH INCREMENTED REFERENCE COUNT */
1265 load_module(char *name
, FILE *fp
, char *buf
, int type
)
1271 /* First check that there's an open file (if we need one) */
1276 PyErr_Format(PyExc_ValueError
,
1277 "file object required for import (type code %d)",
1286 m
= load_source_module(name
, buf
, fp
);
1290 m
= load_compiled_module(name
, buf
, fp
);
1293 #ifdef HAVE_DYNAMIC_LOADING
1295 m
= _PyImport_LoadDynamicModule(name
, buf
, fp
);
1301 m
= PyMac_LoadResourceModule(name
, buf
);
1303 case PY_CODERESOURCE
:
1304 m
= PyMac_LoadCodeResourceModule(name
, buf
);
1309 m
= load_package(name
, buf
);
1314 if (buf
!= NULL
&& buf
[0] != '\0')
1316 if (type
== C_BUILTIN
)
1317 err
= init_builtin(name
);
1319 err
= PyImport_ImportFrozenModule(name
);
1323 PyErr_Format(PyExc_ImportError
,
1324 "Purported %s module %.200s not found",
1326 "builtin" : "frozen",
1330 modules
= PyImport_GetModuleDict();
1331 m
= PyDict_GetItemString(modules
, name
);
1335 "%s module %.200s not properly initialized",
1337 "builtin" : "frozen",
1345 PyErr_Format(PyExc_ImportError
,
1346 "Don't know how to import %.200s (type code %d)",
1356 /* Initialize a built-in module.
1357 Return 1 for succes, 0 if the module is not found, and -1 with
1358 an exception set if the initialization failed. */
1361 init_builtin(char *name
)
1366 if ((mod
= _PyImport_FindExtension(name
, name
)) != NULL
)
1369 for (p
= PyImport_Inittab
; p
->name
!= NULL
; p
++) {
1370 if (strcmp(name
, p
->name
) == 0) {
1371 if (p
->initfunc
== NULL
) {
1372 PyErr_Format(PyExc_ImportError
,
1373 "Cannot re-init internal module %.200s",
1378 PySys_WriteStderr("import %s # builtin\n", name
);
1380 if (PyErr_Occurred())
1382 if (_PyImport_FixupExtension(name
, name
) == NULL
)
1391 /* Frozen modules */
1393 static struct _frozen
*
1394 find_frozen(char *name
)
1398 for (p
= PyImport_FrozenModules
; ; p
++) {
1399 if (p
->name
== NULL
)
1401 if (strcmp(p
->name
, name
) == 0)
1408 get_frozen_object(char *name
)
1410 struct _frozen
*p
= find_frozen(name
);
1414 PyErr_Format(PyExc_ImportError
,
1415 "No such frozen object named %.200s",
1422 return PyMarshal_ReadObjectFromString((char *)p
->code
, size
);
1425 /* Initialize a frozen module.
1426 Return 1 for succes, 0 if the module is not found, and -1 with
1427 an exception set if the initialization failed.
1428 This function is also used from frozenmain.c */
1431 PyImport_ImportFrozenModule(char *name
)
1433 struct _frozen
*p
= find_frozen(name
);
1442 ispackage
= (size
< 0);
1446 PySys_WriteStderr("import %s # frozen%s\n",
1447 name
, ispackage
? " package" : "");
1448 co
= PyMarshal_ReadObjectFromString((char *)p
->code
, size
);
1451 if (!PyCode_Check(co
)) {
1453 PyErr_Format(PyExc_TypeError
,
1454 "frozen object %.200s is not a code object",
1459 /* Set __path__ to the package name */
1462 m
= PyImport_AddModule(name
);
1465 d
= PyModule_GetDict(m
);
1466 s
= PyString_InternFromString(name
);
1469 err
= PyDict_SetItemString(d
, "__path__", s
);
1474 m
= PyImport_ExecCodeModuleEx(name
, co
, "<frozen>");
1483 /* Import a module, either built-in, frozen, or external, and return
1484 its module object WITH INCREMENTED REFERENCE COUNT */
1487 PyImport_ImportModule(char *name
)
1492 pname
= PyString_FromString(name
);
1493 result
= PyImport_Import(pname
);
1498 /* Forward declarations for helper routines */
1499 static PyObject
*get_parent(PyObject
*globals
, char *buf
, int *p_buflen
);
1500 static PyObject
*load_next(PyObject
*mod
, PyObject
*altmod
,
1501 char **p_name
, char *buf
, int *p_buflen
);
1502 static int mark_miss(char *name
);
1503 static int ensure_fromlist(PyObject
*mod
, PyObject
*fromlist
,
1504 char *buf
, int buflen
, int recursive
);
1505 static PyObject
* import_submodule(PyObject
*mod
, char *name
, char *fullname
);
1507 /* The Magnum Opus of dotted-name import :-) */
1510 import_module_ex(char *name
, PyObject
*globals
, PyObject
*locals
,
1513 char buf
[MAXPATHLEN
+1];
1515 PyObject
*parent
, *head
, *next
, *tail
;
1517 parent
= get_parent(globals
, buf
, &buflen
);
1521 head
= load_next(parent
, Py_None
, &name
, buf
, &buflen
);
1528 next
= load_next(tail
, tail
, &name
, buf
, &buflen
);
1537 if (fromlist
!= NULL
) {
1538 if (fromlist
== Py_None
|| !PyObject_IsTrue(fromlist
))
1542 if (fromlist
== NULL
) {
1548 if (!ensure_fromlist(tail
, fromlist
, buf
, buflen
, 0)) {
1557 PyImport_ImportModuleEx(char *name
, PyObject
*globals
, PyObject
*locals
,
1562 result
= import_module_ex(name
, globals
, locals
, fromlist
);
1568 get_parent(PyObject
*globals
, char *buf
, int *p_buflen
)
1570 static PyObject
*namestr
= NULL
;
1571 static PyObject
*pathstr
= NULL
;
1572 PyObject
*modname
, *modpath
, *modules
, *parent
;
1574 if (globals
== NULL
|| !PyDict_Check(globals
))
1577 if (namestr
== NULL
) {
1578 namestr
= PyString_InternFromString("__name__");
1579 if (namestr
== NULL
)
1582 if (pathstr
== NULL
) {
1583 pathstr
= PyString_InternFromString("__path__");
1584 if (pathstr
== NULL
)
1590 modname
= PyDict_GetItem(globals
, namestr
);
1591 if (modname
== NULL
|| !PyString_Check(modname
))
1594 modpath
= PyDict_GetItem(globals
, pathstr
);
1595 if (modpath
!= NULL
) {
1596 int len
= PyString_GET_SIZE(modname
);
1597 if (len
> MAXPATHLEN
) {
1598 PyErr_SetString(PyExc_ValueError
,
1599 "Module name too long");
1602 strcpy(buf
, PyString_AS_STRING(modname
));
1606 char *start
= PyString_AS_STRING(modname
);
1607 char *lastdot
= strrchr(start
, '.');
1609 if (lastdot
== NULL
)
1611 len
= lastdot
- start
;
1612 if (len
>= MAXPATHLEN
) {
1613 PyErr_SetString(PyExc_ValueError
,
1614 "Module name too long");
1617 strncpy(buf
, start
, len
);
1622 modules
= PyImport_GetModuleDict();
1623 parent
= PyDict_GetItemString(modules
, buf
);
1627 /* We expect, but can't guarantee, if parent != None, that:
1628 - parent.__name__ == buf
1629 - parent.__dict__ is globals
1630 If this is violated... Who cares? */
1633 /* altmod is either None or same as mod */
1635 load_next(PyObject
*mod
, PyObject
*altmod
, char **p_name
, char *buf
,
1638 char *name
= *p_name
;
1639 char *dot
= strchr(name
, '.');
1653 PyErr_SetString(PyExc_ValueError
,
1654 "Empty module name");
1658 p
= buf
+ *p_buflen
;
1661 if (p
+len
-buf
>= MAXPATHLEN
) {
1662 PyErr_SetString(PyExc_ValueError
,
1663 "Module name too long");
1666 strncpy(p
, name
, len
);
1668 *p_buflen
= p
+len
-buf
;
1670 result
= import_submodule(mod
, p
, buf
);
1671 if (result
== Py_None
&& altmod
!= mod
) {
1673 /* Here, altmod must be None and mod must not be None */
1674 result
= import_submodule(altmod
, p
, p
);
1675 if (result
!= NULL
&& result
!= Py_None
) {
1676 if (mark_miss(buf
) != 0) {
1680 strncpy(buf
, name
, len
);
1688 if (result
== Py_None
) {
1690 PyErr_Format(PyExc_ImportError
,
1691 "No module named %.200s", name
);
1699 mark_miss(char *name
)
1701 PyObject
*modules
= PyImport_GetModuleDict();
1702 return PyDict_SetItemString(modules
, name
, Py_None
);
1706 ensure_fromlist(PyObject
*mod
, PyObject
*fromlist
, char *buf
, int buflen
,
1711 if (!PyObject_HasAttrString(mod
, "__path__"))
1714 for (i
= 0; ; i
++) {
1715 PyObject
*item
= PySequence_GetItem(fromlist
, i
);
1718 if (PyErr_ExceptionMatches(PyExc_IndexError
)) {
1724 if (!PyString_Check(item
)) {
1725 PyErr_SetString(PyExc_TypeError
,
1726 "Item in ``from list'' not a string");
1730 if (PyString_AS_STRING(item
)[0] == '*') {
1733 /* See if the package defines __all__ */
1735 continue; /* Avoid endless recursion */
1736 all
= PyObject_GetAttrString(mod
, "__all__");
1740 if (!ensure_fromlist(mod
, all
, buf
, buflen
, 1))
1746 hasit
= PyObject_HasAttr(mod
, item
);
1748 char *subname
= PyString_AS_STRING(item
);
1751 if (buflen
+ strlen(subname
) >= MAXPATHLEN
) {
1752 PyErr_SetString(PyExc_ValueError
,
1753 "Module name too long");
1760 submod
= import_submodule(mod
, subname
, buf
);
1762 if (submod
== NULL
) {
1774 import_submodule(PyObject
*mod
, char *subname
, char *fullname
)
1776 PyObject
*modules
= PyImport_GetModuleDict();
1780 if mod == None: subname == fullname
1781 else: mod.__name__ + "." + subname == fullname
1784 if ((m
= PyDict_GetItemString(modules
, fullname
)) != NULL
) {
1789 char buf
[MAXPATHLEN
+1];
1790 struct filedescr
*fdp
;
1796 path
= PyObject_GetAttrString(mod
, "__path__");
1805 fdp
= find_module(subname
, path
, buf
, MAXPATHLEN
+1, &fp
);
1808 if (!PyErr_ExceptionMatches(PyExc_ImportError
))
1814 m
= load_module(fullname
, fp
, buf
, fdp
->type
);
1817 if (m
!= NULL
&& mod
!= Py_None
) {
1818 if (PyObject_SetAttrString(mod
, subname
, m
) < 0) {
1829 /* Re-import a module of any kind and return its module object, WITH
1830 INCREMENTED REFERENCE COUNT */
1833 PyImport_ReloadModule(PyObject
*m
)
1835 PyObject
*modules
= PyImport_GetModuleDict();
1836 PyObject
*path
= NULL
;
1837 char *name
, *subname
;
1838 char buf
[MAXPATHLEN
+1];
1839 struct filedescr
*fdp
;
1842 if (m
== NULL
|| !PyModule_Check(m
)) {
1843 PyErr_SetString(PyExc_TypeError
,
1844 "reload() argument must be module");
1847 name
= PyModule_GetName(m
);
1850 if (m
!= PyDict_GetItemString(modules
, name
)) {
1851 PyErr_Format(PyExc_ImportError
,
1852 "reload(): module %.200s not in sys.modules",
1856 subname
= strrchr(name
, '.');
1857 if (subname
== NULL
)
1860 PyObject
*parentname
, *parent
;
1861 parentname
= PyString_FromStringAndSize(name
, (subname
-name
));
1862 if (parentname
== NULL
)
1864 parent
= PyDict_GetItem(modules
, parentname
);
1865 Py_DECREF(parentname
);
1866 if (parent
== NULL
) {
1867 PyErr_Format(PyExc_ImportError
,
1868 "reload(): parent %.200s not in sys.modules",
1873 path
= PyObject_GetAttrString(parent
, "__path__");
1878 fdp
= find_module(subname
, path
, buf
, MAXPATHLEN
+1, &fp
);
1882 m
= load_module(name
, fp
, buf
, fdp
->type
);
1889 /* Higher-level import emulator which emulates the "import" statement
1890 more accurately -- it invokes the __import__() function from the
1891 builtins of the current globals. This means that the import is
1892 done using whatever import hooks are installed in the current
1893 environment, e.g. by "rexec".
1894 A dummy list ["__doc__"] is passed as the 4th argument so that
1895 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
1896 will return <module "gencache"> instead of <module "win32com">. */
1899 PyImport_Import(PyObject
*module_name
)
1901 static PyObject
*silly_list
= NULL
;
1902 static PyObject
*builtins_str
= NULL
;
1903 static PyObject
*import_str
= NULL
;
1904 PyObject
*globals
= NULL
;
1905 PyObject
*import
= NULL
;
1906 PyObject
*builtins
= NULL
;
1909 /* Initialize constant string objects */
1910 if (silly_list
== NULL
) {
1911 import_str
= PyString_InternFromString("__import__");
1912 if (import_str
== NULL
)
1914 builtins_str
= PyString_InternFromString("__builtins__");
1915 if (builtins_str
== NULL
)
1917 silly_list
= Py_BuildValue("[s]", "__doc__");
1918 if (silly_list
== NULL
)
1922 /* Get the builtins from current globals */
1923 globals
= PyEval_GetGlobals();
1924 if (globals
!= NULL
) {
1926 builtins
= PyObject_GetItem(globals
, builtins_str
);
1927 if (builtins
== NULL
)
1931 /* No globals -- use standard builtins, and fake globals */
1934 builtins
= PyImport_ImportModuleEx("__builtin__",
1936 if (builtins
== NULL
)
1938 globals
= Py_BuildValue("{OO}", builtins_str
, builtins
);
1939 if (globals
== NULL
)
1943 /* Get the __import__ function from the builtins */
1944 if (PyDict_Check(builtins
))
1945 import
= PyObject_GetItem(builtins
, import_str
);
1947 import
= PyObject_GetAttr(builtins
, import_str
);
1951 /* Call the _import__ function with the proper argument list */
1952 r
= PyObject_CallFunction(import
, "OOOO",
1953 module_name
, globals
, globals
, silly_list
);
1956 Py_XDECREF(globals
);
1957 Py_XDECREF(builtins
);
1964 /* Module 'imp' provides Python access to the primitives used for
1969 imp_get_magic(PyObject
*self
, PyObject
*args
)
1973 if (!PyArg_ParseTuple(args
, ":get_magic"))
1975 buf
[0] = (char) ((pyc_magic
>> 0) & 0xff);
1976 buf
[1] = (char) ((pyc_magic
>> 8) & 0xff);
1977 buf
[2] = (char) ((pyc_magic
>> 16) & 0xff);
1978 buf
[3] = (char) ((pyc_magic
>> 24) & 0xff);
1980 return PyString_FromStringAndSize(buf
, 4);
1984 imp_get_suffixes(PyObject
*self
, PyObject
*args
)
1987 struct filedescr
*fdp
;
1989 if (!PyArg_ParseTuple(args
, ":get_suffixes"))
1991 list
= PyList_New(0);
1994 for (fdp
= _PyImport_Filetab
; fdp
->suffix
!= NULL
; fdp
++) {
1995 PyObject
*item
= Py_BuildValue("ssi",
1996 fdp
->suffix
, fdp
->mode
, fdp
->type
);
2001 if (PyList_Append(list
, item
) < 0) {
2012 call_find_module(char *name
, PyObject
*path
)
2014 extern int fclose(FILE *);
2015 PyObject
*fob
, *ret
;
2016 struct filedescr
*fdp
;
2017 char pathname
[MAXPATHLEN
+1];
2021 if (path
== Py_None
)
2023 fdp
= find_module(name
, path
, pathname
, MAXPATHLEN
+1, &fp
);
2027 fob
= PyFile_FromFile(fp
, pathname
, fdp
->mode
, fclose
);
2037 ret
= Py_BuildValue("Os(ssi)",
2038 fob
, pathname
, fdp
->suffix
, fdp
->mode
, fdp
->type
);
2044 imp_find_module(PyObject
*self
, PyObject
*args
)
2047 PyObject
*path
= NULL
;
2048 if (!PyArg_ParseTuple(args
, "s|O:find_module", &name
, &path
))
2050 return call_find_module(name
, path
);
2054 imp_init_builtin(PyObject
*self
, PyObject
*args
)
2059 if (!PyArg_ParseTuple(args
, "s:init_builtin", &name
))
2061 ret
= init_builtin(name
);
2068 m
= PyImport_AddModule(name
);
2074 imp_init_frozen(PyObject
*self
, PyObject
*args
)
2079 if (!PyArg_ParseTuple(args
, "s:init_frozen", &name
))
2081 ret
= PyImport_ImportFrozenModule(name
);
2088 m
= PyImport_AddModule(name
);
2094 imp_get_frozen_object(PyObject
*self
, PyObject
*args
)
2098 if (!PyArg_ParseTuple(args
, "s:get_frozen_object", &name
))
2100 return get_frozen_object(name
);
2104 imp_is_builtin(PyObject
*self
, PyObject
*args
)
2107 if (!PyArg_ParseTuple(args
, "s:is_builtin", &name
))
2109 return PyInt_FromLong(is_builtin(name
));
2113 imp_is_frozen(PyObject
*self
, PyObject
*args
)
2117 if (!PyArg_ParseTuple(args
, "s:is_frozen", &name
))
2119 p
= find_frozen(name
);
2120 return PyInt_FromLong((long) (p
== NULL
? 0 : p
->size
));
2124 get_file(char *pathname
, PyObject
*fob
, char *mode
)
2128 fp
= fopen(pathname
, mode
);
2130 PyErr_SetFromErrno(PyExc_IOError
);
2133 fp
= PyFile_AsFile(fob
);
2135 PyErr_SetString(PyExc_ValueError
,
2136 "bad/closed file object");
2142 imp_load_compiled(PyObject
*self
, PyObject
*args
)
2146 PyObject
*fob
= NULL
;
2149 if (!PyArg_ParseTuple(args
, "ss|O!:load_compiled", &name
, &pathname
,
2150 &PyFile_Type
, &fob
))
2152 fp
= get_file(pathname
, fob
, "rb");
2155 m
= load_compiled_module(name
, pathname
, fp
);
2161 #ifdef HAVE_DYNAMIC_LOADING
2164 imp_load_dynamic(PyObject
*self
, PyObject
*args
)
2168 PyObject
*fob
= NULL
;
2171 if (!PyArg_ParseTuple(args
, "ss|O!:load_dynamic", &name
, &pathname
,
2172 &PyFile_Type
, &fob
))
2175 fp
= get_file(pathname
, fob
, "r");
2179 m
= _PyImport_LoadDynamicModule(name
, pathname
, fp
);
2183 #endif /* HAVE_DYNAMIC_LOADING */
2186 imp_load_source(PyObject
*self
, PyObject
*args
)
2190 PyObject
*fob
= NULL
;
2193 if (!PyArg_ParseTuple(args
, "ss|O!:load_source", &name
, &pathname
,
2194 &PyFile_Type
, &fob
))
2196 fp
= get_file(pathname
, fob
, "r");
2199 m
= load_source_module(name
, pathname
, fp
);
2207 imp_load_resource(PyObject
*self
, PyObject
*args
)
2213 if (!PyArg_ParseTuple(args
, "ss:load_resource", &name
, &pathname
))
2215 m
= PyMac_LoadResourceModule(name
, pathname
);
2218 #endif /* macintosh */
2221 imp_load_module(PyObject
*self
, PyObject
*args
)
2226 char *suffix
; /* Unused */
2231 if (!PyArg_ParseTuple(args
, "sOs(ssi):load_module",
2232 &name
, &fob
, &pathname
,
2233 &suffix
, &mode
, &type
))
2235 if (*mode
&& (*mode
!= 'r' || strchr(mode
, '+') != NULL
)) {
2236 PyErr_Format(PyExc_ValueError
,
2237 "invalid file open mode %.200s", mode
);
2243 if (!PyFile_Check(fob
)) {
2244 PyErr_SetString(PyExc_ValueError
,
2245 "load_module arg#2 should be a file or None");
2248 fp
= get_file(pathname
, fob
, mode
);
2252 return load_module(name
, fp
, pathname
, type
);
2256 imp_load_package(PyObject
*self
, PyObject
*args
)
2260 if (!PyArg_ParseTuple(args
, "ss:load_package", &name
, &pathname
))
2262 return load_package(name
, pathname
);
2266 imp_new_module(PyObject
*self
, PyObject
*args
)
2269 if (!PyArg_ParseTuple(args
, "s:new_module", &name
))
2271 return PyModule_New(name
);
2276 static char doc_imp
[] = "\
2277 This module provides the components needed to build your own\n\
2278 __import__ function. Undocumented functions are obsolete.\n\
2281 static char doc_find_module
[] = "\
2282 find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
2283 Search for a module. If path is omitted or None, search for a\n\
2284 built-in, frozen or special module and continue search in sys.path.\n\
2285 The module name cannot contain '.'; to search for a submodule of a\n\
2286 package, pass the submodule name and the package's __path__.\
2289 static char doc_load_module
[] = "\
2290 load_module(name, file, filename, (suffix, mode, type)) -> module\n\
2291 Load a module, given information returned by find_module().\n\
2292 The module name must include the full package name, if any.\
2295 static char doc_get_magic
[] = "\
2296 get_magic() -> string\n\
2297 Return the magic number for .pyc or .pyo files.\
2300 static char doc_get_suffixes
[] = "\
2301 get_suffixes() -> [(suffix, mode, type), ...]\n\
2302 Return a list of (suffix, mode, type) tuples describing the files\n\
2303 that find_module() looks for.\
2306 static char doc_new_module
[] = "\
2307 new_module(name) -> module\n\
2308 Create a new module. Do not enter it in sys.modules.\n\
2309 The module name must include the full package name, if any.\
2312 static PyMethodDef imp_methods
[] = {
2313 {"find_module", imp_find_module
, 1, doc_find_module
},
2314 {"get_magic", imp_get_magic
, 1, doc_get_magic
},
2315 {"get_suffixes", imp_get_suffixes
, 1, doc_get_suffixes
},
2316 {"load_module", imp_load_module
, 1, doc_load_module
},
2317 {"new_module", imp_new_module
, 1, doc_new_module
},
2318 /* The rest are obsolete */
2319 {"get_frozen_object", imp_get_frozen_object
, 1},
2320 {"init_builtin", imp_init_builtin
, 1},
2321 {"init_frozen", imp_init_frozen
, 1},
2322 {"is_builtin", imp_is_builtin
, 1},
2323 {"is_frozen", imp_is_frozen
, 1},
2324 {"load_compiled", imp_load_compiled
, 1},
2325 #ifdef HAVE_DYNAMIC_LOADING
2326 {"load_dynamic", imp_load_dynamic
, 1},
2328 {"load_package", imp_load_package
, 1},
2330 {"load_resource", imp_load_resource
, 1},
2332 {"load_source", imp_load_source
, 1},
2333 {NULL
, NULL
} /* sentinel */
2337 setint(PyObject
*d
, char *name
, int value
)
2342 v
= PyInt_FromLong((long)value
);
2343 err
= PyDict_SetItemString(d
, name
, v
);
2353 m
= Py_InitModule4("imp", imp_methods
, doc_imp
,
2354 NULL
, PYTHON_API_VERSION
);
2355 d
= PyModule_GetDict(m
);
2357 if (setint(d
, "SEARCH_ERROR", SEARCH_ERROR
) < 0) goto failure
;
2358 if (setint(d
, "PY_SOURCE", PY_SOURCE
) < 0) goto failure
;
2359 if (setint(d
, "PY_COMPILED", PY_COMPILED
) < 0) goto failure
;
2360 if (setint(d
, "C_EXTENSION", C_EXTENSION
) < 0) goto failure
;
2361 if (setint(d
, "PY_RESOURCE", PY_RESOURCE
) < 0) goto failure
;
2362 if (setint(d
, "PKG_DIRECTORY", PKG_DIRECTORY
) < 0) goto failure
;
2363 if (setint(d
, "C_BUILTIN", C_BUILTIN
) < 0) goto failure
;
2364 if (setint(d
, "PY_FROZEN", PY_FROZEN
) < 0) goto failure
;
2365 if (setint(d
, "PY_CODERESOURCE", PY_CODERESOURCE
) < 0) goto failure
;
2372 /* API for embedding applications that want to add their own entries
2373 to the table of built-in modules. This should normally be called
2374 *before* Py_Initialize(). When the table resize fails, -1 is
2375 returned and the existing table is unchanged.
2377 After a similar function by Just van Rossum. */
2380 PyImport_ExtendInittab(struct _inittab
*newtab
)
2382 static struct _inittab
*our_copy
= NULL
;
2386 /* Count the number of entries in both tables */
2387 for (n
= 0; newtab
[n
].name
!= NULL
; n
++)
2390 return 0; /* Nothing to do */
2391 for (i
= 0; PyImport_Inittab
[i
].name
!= NULL
; i
++)
2394 /* Allocate new memory for the combined table */
2396 PyMem_RESIZE(p
, struct _inittab
, i
+n
+1);
2400 /* Copy the tables into the new memory */
2401 if (our_copy
!= PyImport_Inittab
)
2402 memcpy(p
, PyImport_Inittab
, (i
+1) * sizeof(struct _inittab
));
2403 PyImport_Inittab
= our_copy
= p
;
2404 memcpy(p
+i
, newtab
, (n
+1) * sizeof(struct _inittab
));
2409 /* Shorthand to add a single entry given a name and a function */
2412 PyImport_AppendInittab(char *name
, void (*initfunc
)(void))
2414 struct _inittab newtab
[2];
2416 memset(newtab
, '\0', sizeof newtab
);
2418 newtab
[0].name
= name
;
2419 newtab
[0].initfunc
= initfunc
;
2421 return PyImport_ExtendInittab(newtab
);