blob: 621284ecb45992435dd7832f28be877ae7f543f7 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00002/* Module definition and import implementation */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00005
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00006#include "Python-ast.h"
Guido van Rossumd8faa362007-04-27 19:54:29 +00007#undef Yield /* undefine macro conflicting with winbase.h */
Neal Norwitzadb69fc2005-12-17 20:54:49 +00008#include "pyarena.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00009#include "pythonrun.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000010#include "errcode.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000011#include "marshal.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000012#include "code.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000013#include "compile.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000014#include "eval.h"
Guido van Rossumd8bac6d1992-02-26 15:19:13 +000015#include "osdefs.h"
Guido van Rossum1ae940a1995-01-02 19:04:15 +000016#include "importdl.h"
Guido van Rossumc405b7b1991-06-04 19:39:42 +000017
Guido van Rossum55a83382000-09-20 20:31:38 +000018#ifdef HAVE_FCNTL_H
19#include <fcntl.h>
20#endif
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000021#ifdef __cplusplus
22extern "C" {
23#endif
Guido van Rossum55a83382000-09-20 20:31:38 +000024
Christian Heimesd3eb5a152008-02-24 00:38:49 +000025#ifdef MS_WINDOWS
26/* for stat.st_mode */
27typedef unsigned short mode_t;
28#endif
29
Thomas Woutersf70ef4f2000-07-22 18:47:25 +000030extern time_t PyOS_GetLastModificationTime(char *, FILE *);
31 /* In getmtime.c */
Guido van Rossum21d335e1993-10-15 13:01:11 +000032
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000033/* Magic word to reject .pyc files generated by other Python versions.
34 It should change for each incompatible change to the bytecode.
35
36 The value of CR and LF is incorporated so if you ever read or write
Guido van Rossum7faeab31995-07-07 22:50:36 +000037 a .pyc file in text mode the magic number will be wrong; also, the
Tim Peters36515e22001-11-18 04:06:29 +000038 Apple MPW compiler swaps their values, botching string constants.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000039
Guido van Rossum45aecf42006-03-15 04:58:47 +000040 The magic numbers must be spaced apart at least 2 values, as the
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000041 -U interpeter flag will cause MAGIC+1 being used. They have been
42 odd numbers for some time now.
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000043
Jeremy Hyltond4ceb312004-04-01 02:45:22 +000044 There were a variety of old schemes for setting the magic number.
45 The current working scheme is to increment the previous value by
46 10.
Guido van Rossumf6894922002-08-31 15:16:14 +000047
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000048 Known values:
49 Python 1.5: 20121
50 Python 1.5.1: 20121
51 Python 1.5.2: 20121
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000052 Python 1.6: 50428
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000053 Python 2.0: 50823
54 Python 2.0.1: 50823
55 Python 2.1: 60202
56 Python 2.1.1: 60202
57 Python 2.1.2: 60202
58 Python 2.2: 60717
Neal Norwitz7fdcb412002-06-14 01:07:39 +000059 Python 2.3a0: 62011
Michael W. Hudsondd32a912002-08-15 14:59:02 +000060 Python 2.3a0: 62021
Guido van Rossumf6894922002-08-31 15:16:14 +000061 Python 2.3a0: 62011 (!)
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000062 Python 2.4a0: 62041
Raymond Hettingerfd2d1f72004-08-23 23:37:48 +000063 Python 2.4a3: 62051
Raymond Hettinger2c31a052004-09-22 18:44:21 +000064 Python 2.4b1: 62061
Michael W. Hudsondf888462005-06-03 14:41:55 +000065 Python 2.5a0: 62071
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000066 Python 2.5a0: 62081 (ast-branch)
Guido van Rossumc2e20742006-02-27 22:32:47 +000067 Python 2.5a0: 62091 (with)
Guido van Rossumf6694362006-03-10 02:28:35 +000068 Python 2.5a0: 62092 (changed WITH_CLEANUP opcode)
Thomas Wouters0e3f5912006-08-11 14:57:12 +000069 Python 2.5b3: 62101 (fix wrong code: for x, in ...)
70 Python 2.5b3: 62111 (fix wrong code: x += yield)
71 Python 2.5c1: 62121 (fix wrong lnotab with for loops and
72 storing constants that should have been removed)
Thomas Wouters89f507f2006-12-13 04:49:30 +000073 Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp)
Christian Heimes99170a52007-12-19 02:07:34 +000074 Python 2.6a0: 62151 (peephole optimizations and STORE_MAP opcode)
Christian Heimesdd15f6c2008-03-16 00:07:10 +000075 Python 2.6a1: 62161 (WITH_CLEANUP optimization)
Guido van Rossum45aecf42006-03-15 04:58:47 +000076 Python 3000: 3000
Brett Cannone2e23ef2006-08-25 05:05:30 +000077 3010 (removed UNARY_CONVERT)
Guido van Rossum86e58e22006-08-28 15:27:34 +000078 3020 (added BUILD_SET)
Guido van Rossum4f72a782006-10-27 23:31:49 +000079 3030 (added keyword-only parameters)
Guido van Rossum3203bdc2006-12-28 21:03:31 +000080 3040 (added signature annotations)
Guido van Rossum452bf512007-02-09 05:32:43 +000081 3050 (print becomes a function)
Guido van Rossum52cc1d82007-03-18 15:41:51 +000082 3060 (PEP 3115 metaclass syntax)
Guido van Rossum00bc0e02007-10-15 02:52:41 +000083 3070 (PEP 3109 raise changes)
84 3080 (PEP 3137 make __file__ and __name__ unicode)
Guido van Rossum98297ee2007-11-06 21:34:58 +000085 3090 (kill str8 interning)
Christian Heimes99170a52007-12-19 02:07:34 +000086 3100 (merge from 2.6a0, see 62151)
Christian Heimes3b06e532008-01-07 20:12:44 +000087 3102 (__file__ points to source file)
Christian Heimesdd15f6c2008-03-16 00:07:10 +000088 Python 3.0a4: 3110 (WITH_CLEANUP optimization).
Benjamin Petersoneec3d712008-06-11 15:59:43 +000089 Python 3.0a5: 3130 (lexical exception stacking, including POP_EXCEPT)
Antoine Pitrouf289ae62008-12-18 11:06:25 +000090 Python 3.1a0: 3140 (optimize list, set and dict comprehensions:
91 change LIST_APPEND and SET_ADD, add MAP_ADD)
Tim Peters36515e22001-11-18 04:06:29 +000092*/
Antoine Pitrouf289ae62008-12-18 11:06:25 +000093#define MAGIC (3140 | ((long)'\r'<<16) | ((long)'\n'<<24))
Guido van Rossum3ddee711991-12-16 13:06:34 +000094
Guido van Rossum96774c12000-05-01 20:19:08 +000095/* Magic word as global; note that _PyImport_Init() can change the
Jeremy Hylton9262b8a2000-06-30 04:59:17 +000096 value of this global to accommodate for alterations of how the
Guido van Rossum96774c12000-05-01 20:19:08 +000097 compiler works which are enabled by command line switches. */
98static long pyc_magic = MAGIC;
99
Guido van Rossum25ce5661997-08-02 03:10:38 +0000100/* See _PyImport_FixupExtension() below */
101static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000102
Guido van Rossum771c6c81997-10-31 18:37:24 +0000103/* This table is defined in config.c: */
104extern struct _inittab _PyImport_Inittab[];
105
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000106/* Method from Parser/tokenizer.c */
Guido van Rossum40d20bc2007-10-22 00:09:51 +0000107extern char * PyTokenizer_FindEncoding(int);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000108
Guido van Rossum771c6c81997-10-31 18:37:24 +0000109struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +0000110
Guido van Rossumed1170e1999-12-20 21:23:41 +0000111/* these tables define the module suffixes that Python recognizes */
112struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +0000113
Guido van Rossumed1170e1999-12-20 21:23:41 +0000114static const struct filedescr _PyImport_StandardFiletab[] = {
Jack Jansenc88da1f2002-05-28 10:58:19 +0000115 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000116#ifdef MS_WINDOWS
Jack Jansenc88da1f2002-05-28 10:58:19 +0000117 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000118#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000119 {".pyc", "rb", PY_COMPILED},
120 {0, 0}
121};
122
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000123
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000124/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000125
126void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000127_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000128{
Guido van Rossumed1170e1999-12-20 21:23:41 +0000129 const struct filedescr *scan;
130 struct filedescr *filetab;
131 int countD = 0;
132 int countS = 0;
133
134 /* prepare _PyImport_Filetab: copy entries from
135 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
136 */
Guido van Rossum04110fb2007-08-24 16:32:05 +0000137#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossumed1170e1999-12-20 21:23:41 +0000138 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
139 ++countD;
Guido van Rossum04110fb2007-08-24 16:32:05 +0000140#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000141 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
142 ++countS;
Guido van Rossumb18618d2000-05-03 23:44:39 +0000143 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000144 if (filetab == NULL)
145 Py_FatalError("Can't initialize import file table.");
Guido van Rossum04110fb2007-08-24 16:32:05 +0000146#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossumed1170e1999-12-20 21:23:41 +0000147 memcpy(filetab, _PyImport_DynLoadFiletab,
148 countD * sizeof(struct filedescr));
Guido van Rossum04110fb2007-08-24 16:32:05 +0000149#endif
Guido van Rossumed1170e1999-12-20 21:23:41 +0000150 memcpy(filetab + countD, _PyImport_StandardFiletab,
151 countS * sizeof(struct filedescr));
152 filetab[countD + countS].suffix = NULL;
153
154 _PyImport_Filetab = filetab;
155
Guido van Rossum0824f631997-03-11 18:37:35 +0000156 if (Py_OptimizeFlag) {
Guido van Rossumed1170e1999-12-20 21:23:41 +0000157 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
158 for (; filetab->suffix != NULL; filetab++) {
159 if (strcmp(filetab->suffix, ".pyc") == 0)
160 filetab->suffix = ".pyo";
Guido van Rossum0824f631997-03-11 18:37:35 +0000161 }
162 }
Guido van Rossum96774c12000-05-01 20:19:08 +0000163
Guido van Rossum572dbf82007-04-27 23:53:51 +0000164 {
Guido van Rossum96774c12000-05-01 20:19:08 +0000165 /* Fix the pyc_magic so that byte compiled code created
166 using the all-Unicode method doesn't interfere with
167 code created in normal operation mode. */
168 pyc_magic = MAGIC + 1;
169 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000170}
171
Guido van Rossum25ce5661997-08-02 03:10:38 +0000172void
Just van Rossum52e14d62002-12-30 22:08:05 +0000173_PyImportHooks_Init(void)
174{
175 PyObject *v, *path_hooks = NULL, *zimpimport;
176 int err = 0;
177
178 /* adding sys.path_hooks and sys.path_importer_cache, setting up
179 zipimport */
Christian Heimes9cd17752007-11-18 19:35:23 +0000180 if (PyType_Ready(&PyNullImporter_Type) < 0)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000181 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000182
183 if (Py_VerboseFlag)
184 PySys_WriteStderr("# installing zipimport hook\n");
185
186 v = PyList_New(0);
187 if (v == NULL)
188 goto error;
189 err = PySys_SetObject("meta_path", v);
190 Py_DECREF(v);
191 if (err)
192 goto error;
193 v = PyDict_New();
194 if (v == NULL)
195 goto error;
196 err = PySys_SetObject("path_importer_cache", v);
197 Py_DECREF(v);
198 if (err)
199 goto error;
200 path_hooks = PyList_New(0);
201 if (path_hooks == NULL)
202 goto error;
203 err = PySys_SetObject("path_hooks", path_hooks);
204 if (err) {
205 error:
206 PyErr_Print();
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000207 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
208 "path_importer_cache, or NullImporter failed"
209 );
Just van Rossum52e14d62002-12-30 22:08:05 +0000210 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000211
Just van Rossum52e14d62002-12-30 22:08:05 +0000212 zimpimport = PyImport_ImportModule("zipimport");
213 if (zimpimport == NULL) {
214 PyErr_Clear(); /* No zip import module -- okay */
215 if (Py_VerboseFlag)
216 PySys_WriteStderr("# can't import zipimport\n");
217 }
218 else {
219 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
220 "zipimporter");
221 Py_DECREF(zimpimport);
222 if (zipimporter == NULL) {
223 PyErr_Clear(); /* No zipimporter object -- okay */
224 if (Py_VerboseFlag)
225 PySys_WriteStderr(
Fred Drake1e5fc552003-07-11 15:01:02 +0000226 "# can't import zipimport.zipimporter\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000227 }
228 else {
229 /* sys.path_hooks.append(zipimporter) */
230 err = PyList_Append(path_hooks, zipimporter);
231 Py_DECREF(zipimporter);
232 if (err)
233 goto error;
234 if (Py_VerboseFlag)
235 PySys_WriteStderr(
236 "# installed zipimport hook\n");
237 }
238 }
239 Py_DECREF(path_hooks);
240}
241
242void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000243_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000244{
245 Py_XDECREF(extensions);
246 extensions = NULL;
Barry Warsaw84294482000-10-03 16:02:05 +0000247 PyMem_DEL(_PyImport_Filetab);
248 _PyImport_Filetab = NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000249}
250
251
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000252/* Locking primitives to prevent parallel imports of the same module
253 in different threads to return with a partially loaded module.
254 These calls are serialized by the global interpreter lock. */
255
256#ifdef WITH_THREAD
257
Guido van Rossum49b56061998-10-01 20:42:43 +0000258#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000259
Guido van Rossum65d5b571998-12-21 19:32:43 +0000260static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000261static long import_lock_thread = -1;
262static int import_lock_level = 0;
263
264static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000265lock_import(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000266{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000267 long me = PyThread_get_thread_ident();
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000268 if (me == -1)
269 return; /* Too bad */
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000270 if (import_lock == NULL) {
Guido van Rossum65d5b571998-12-21 19:32:43 +0000271 import_lock = PyThread_allocate_lock();
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000272 if (import_lock == NULL)
273 return; /* Nothing much we can do. */
274 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000275 if (import_lock_thread == me) {
276 import_lock_level++;
277 return;
278 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000279 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
280 {
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000281 PyThreadState *tstate = PyEval_SaveThread();
Guido van Rossum65d5b571998-12-21 19:32:43 +0000282 PyThread_acquire_lock(import_lock, 1);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000283 PyEval_RestoreThread(tstate);
284 }
285 import_lock_thread = me;
286 import_lock_level = 1;
287}
288
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000289static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000290unlock_import(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000291{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000292 long me = PyThread_get_thread_ident();
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000293 if (me == -1 || import_lock == NULL)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000294 return 0; /* Too bad */
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000295 if (import_lock_thread != me)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000296 return -1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000297 import_lock_level--;
298 if (import_lock_level == 0) {
299 import_lock_thread = -1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000300 PyThread_release_lock(import_lock);
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000301 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000302 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000303}
304
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000305/* This function is called from PyOS_AfterFork to ensure that newly
306 created child processes do not share locks with the parent. */
307
308void
309_PyImport_ReInitLock(void)
310{
311#ifdef _AIX
312 if (import_lock != NULL)
313 import_lock = PyThread_allocate_lock();
314#endif
315}
316
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000317#else
318
319#define lock_import()
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000320#define unlock_import() 0
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000321
322#endif
323
Tim Peters69232342001-08-30 05:16:13 +0000324static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000325imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000326{
Tim Peters69232342001-08-30 05:16:13 +0000327#ifdef WITH_THREAD
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000328 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000329#else
Guido van Rossumb8bff3f2002-04-07 06:34:38 +0000330 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000331#endif
332}
333
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000334static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000335imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000336{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000337#ifdef WITH_THREAD
338 lock_import();
339#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000340 Py_INCREF(Py_None);
341 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000342}
343
344static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000345imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000346{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000347#ifdef WITH_THREAD
348 if (unlock_import() < 0) {
349 PyErr_SetString(PyExc_RuntimeError,
350 "not holding the import lock");
351 return NULL;
352 }
353#endif
Neal Norwitz2294c0d2003-02-12 23:02:21 +0000354 Py_INCREF(Py_None);
355 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000356}
357
Guido van Rossumd8faa362007-04-27 19:54:29 +0000358static void
359imp_modules_reloading_clear(void)
360{
361 PyInterpreterState *interp = PyThreadState_Get()->interp;
362 if (interp->modules_reloading != NULL)
363 PyDict_Clear(interp->modules_reloading);
364}
365
Guido van Rossum25ce5661997-08-02 03:10:38 +0000366/* Helper for sys */
367
368PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000369PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000370{
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000371 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000372 if (interp->modules == NULL)
373 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
374 return interp->modules;
375}
376
Guido van Rossum3f5da241990-12-20 15:06:42 +0000377
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000378/* List of names to clear in sys */
379static char* sys_deletes[] = {
Collin Winter670e6922007-03-21 02:57:17 +0000380 "path", "argv", "ps1", "ps2",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000381 "last_type", "last_value", "last_traceback",
Just van Rossum52e14d62002-12-30 22:08:05 +0000382 "path_hooks", "path_importer_cache", "meta_path",
Christian Heimes7b3ce6a2008-01-31 14:31:45 +0000383 /* misc stuff */
384 "flags", "float_info",
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000385 NULL
386};
387
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000388static char* sys_files[] = {
389 "stdin", "__stdin__",
390 "stdout", "__stdout__",
391 "stderr", "__stderr__",
392 NULL
393};
394
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000395
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000396/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000397
Guido van Rossum3f5da241990-12-20 15:06:42 +0000398void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000399PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000400{
Martin v. Löwis18e16552006-02-15 17:27:45 +0000401 Py_ssize_t pos, ndone;
Guido van Rossum758eec01998-01-19 21:58:26 +0000402 char *name;
403 PyObject *key, *value, *dict;
Nicholas Bastine5662ae2004-03-24 22:22:12 +0000404 PyInterpreterState *interp = PyThreadState_GET()->interp;
Guido van Rossum758eec01998-01-19 21:58:26 +0000405 PyObject *modules = interp->modules;
406
407 if (modules == NULL)
408 return; /* Already done */
409
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000410 /* Delete some special variables first. These are common
411 places where user values hide and people complain when their
412 destructors fail. Since the modules containing them are
413 deleted *last* of all, they would come too late in the normal
414 destruction order. Sigh. */
415
Georg Brandl1a3284e2007-12-02 09:40:06 +0000416 value = PyDict_GetItemString(modules, "builtins");
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000417 if (value != NULL && PyModule_Check(value)) {
418 dict = PyModule_GetDict(value);
419 if (Py_VerboseFlag)
Georg Brandl1a3284e2007-12-02 09:40:06 +0000420 PySys_WriteStderr("# clear builtins._\n");
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000421 PyDict_SetItemString(dict, "_", Py_None);
422 }
423 value = PyDict_GetItemString(modules, "sys");
424 if (value != NULL && PyModule_Check(value)) {
425 char **p;
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000426 PyObject *v;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000427 dict = PyModule_GetDict(value);
428 for (p = sys_deletes; *p != NULL; p++) {
429 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000430 PySys_WriteStderr("# clear sys.%s\n", *p);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000431 PyDict_SetItemString(dict, *p, Py_None);
432 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000433 for (p = sys_files; *p != NULL; p+=2) {
434 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000435 PySys_WriteStderr("# restore sys.%s\n", *p);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000436 v = PyDict_GetItemString(dict, *(p+1));
437 if (v == NULL)
438 v = Py_None;
439 PyDict_SetItemString(dict, *p, v);
440 }
441 }
442
443 /* First, delete __main__ */
444 value = PyDict_GetItemString(modules, "__main__");
445 if (value != NULL && PyModule_Check(value)) {
446 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000447 PySys_WriteStderr("# cleanup __main__\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000448 _PyModule_Clear(value);
449 PyDict_SetItemString(modules, "__main__", Py_None);
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000450 }
451
Georg Brandl1a3284e2007-12-02 09:40:06 +0000452 /* The special treatment of "builtins" here is because even
Guido van Rossum758eec01998-01-19 21:58:26 +0000453 when it's not referenced as a module, its dictionary is
454 referenced by almost every module's __builtins__. Since
455 deleting a module clears its dictionary (even if there are
Georg Brandl1a3284e2007-12-02 09:40:06 +0000456 references left to it), we need to delete the "builtins"
Guido van Rossum758eec01998-01-19 21:58:26 +0000457 module last. Likewise, we don't delete sys until the very
458 end because it is implicitly referenced (e.g. by print).
459
460 Also note that we 'delete' modules by replacing their entry
461 in the modules dict with None, rather than really deleting
462 them; this avoids a rehash of the modules dictionary and
463 also marks them as "non existent" so they won't be
464 re-imported. */
465
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000466 /* Next, repeatedly delete modules with a reference count of
Georg Brandl1a3284e2007-12-02 09:40:06 +0000467 one (skipping builtins and sys) and delete them */
Guido van Rossum758eec01998-01-19 21:58:26 +0000468 do {
469 ndone = 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000470 pos = 0;
Guido van Rossum758eec01998-01-19 21:58:26 +0000471 while (PyDict_Next(modules, &pos, &key, &value)) {
472 if (value->ob_refcnt != 1)
473 continue;
Neal Norwitz80e7f272007-08-26 06:45:23 +0000474 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +0000475 name = _PyUnicode_AsString(key);
Georg Brandl1a3284e2007-12-02 09:40:06 +0000476 if (strcmp(name, "builtins") == 0)
Guido van Rossum758eec01998-01-19 21:58:26 +0000477 continue;
478 if (strcmp(name, "sys") == 0)
479 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000480 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000481 PySys_WriteStderr(
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000482 "# cleanup[1] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000483 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000484 PyDict_SetItem(modules, key, Py_None);
485 ndone++;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000486 }
487 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000488 } while (ndone > 0);
489
Georg Brandl1a3284e2007-12-02 09:40:06 +0000490 /* Next, delete all modules (still skipping builtins and sys) */
Guido van Rossum758eec01998-01-19 21:58:26 +0000491 pos = 0;
492 while (PyDict_Next(modules, &pos, &key, &value)) {
Neal Norwitz80e7f272007-08-26 06:45:23 +0000493 if (PyUnicode_Check(key) && PyModule_Check(value)) {
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +0000494 name = _PyUnicode_AsString(key);
Georg Brandl1a3284e2007-12-02 09:40:06 +0000495 if (strcmp(name, "builtins") == 0)
Guido van Rossum758eec01998-01-19 21:58:26 +0000496 continue;
497 if (strcmp(name, "sys") == 0)
498 continue;
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000499 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000500 PySys_WriteStderr("# cleanup[2] %s\n", name);
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000501 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000502 PyDict_SetItem(modules, key, Py_None);
503 }
504 }
505
Georg Brandl1a3284e2007-12-02 09:40:06 +0000506 /* Next, delete sys and builtins (in that order) */
Guido van Rossum758eec01998-01-19 21:58:26 +0000507 value = PyDict_GetItemString(modules, "sys");
508 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000509 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000510 PySys_WriteStderr("# cleanup sys\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000511 _PyModule_Clear(value);
Guido van Rossum758eec01998-01-19 21:58:26 +0000512 PyDict_SetItemString(modules, "sys", Py_None);
513 }
Georg Brandl1a3284e2007-12-02 09:40:06 +0000514 value = PyDict_GetItemString(modules, "builtins");
Guido van Rossum758eec01998-01-19 21:58:26 +0000515 if (value != NULL && PyModule_Check(value)) {
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000516 if (Py_VerboseFlag)
Georg Brandl1a3284e2007-12-02 09:40:06 +0000517 PySys_WriteStderr("# cleanup builtins\n");
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000518 _PyModule_Clear(value);
Georg Brandl1a3284e2007-12-02 09:40:06 +0000519 PyDict_SetItemString(modules, "builtins", Py_None);
Guido van Rossum758eec01998-01-19 21:58:26 +0000520 }
521
522 /* Finally, clear and delete the modules directory */
523 PyDict_Clear(modules);
524 interp->modules = NULL;
525 Py_DECREF(modules);
Guido van Rossumd8faa362007-04-27 19:54:29 +0000526 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000527}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000528
529
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000530/* Helper for pythonrun.c -- return magic number */
531
532long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000533PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000534{
Guido van Rossum96774c12000-05-01 20:19:08 +0000535 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000536}
537
538
Guido van Rossum25ce5661997-08-02 03:10:38 +0000539/* Magic for extension modules (built-in as well as dynamically
540 loaded). To prevent initializing an extension module more than
541 once, we keep a static dictionary 'extensions' keyed by module name
542 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000543 modules), containing these modules. A copy of the module's
Guido van Rossum25ce5661997-08-02 03:10:38 +0000544 dictionary is stored by calling _PyImport_FixupExtension()
545 immediately after the module initialization function succeeds. A
546 copy can be retrieved from there by calling
Martin v. Löwis1a214512008-06-11 05:26:20 +0000547 _PyImport_FindExtension().
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000548
Martin v. Löwis1a214512008-06-11 05:26:20 +0000549 Modules which do support multiple multiple initialization set
550 their m_size field to a non-negative number (indicating the size
551 of the module-specific state). They are still recorded in the
552 extensions dictionary, to avoid loading shared libraries twice.
553*/
554
555int
556_PyImport_FixupExtension(PyObject *mod, char *name, char *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000557{
Martin v. Löwis1a214512008-06-11 05:26:20 +0000558 PyObject *modules, *dict;
559 struct PyModuleDef *def;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000560 if (extensions == NULL) {
561 extensions = PyDict_New();
562 if (extensions == NULL)
Martin v. Löwis1a214512008-06-11 05:26:20 +0000563 return -1;
564 }
565 if (mod == NULL || !PyModule_Check(mod)) {
566 PyErr_BadInternalCall();
567 return -1;
568 }
569 def = PyModule_GetDef(mod);
570 if (!def) {
571 PyErr_BadInternalCall();
572 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000573 }
574 modules = PyImport_GetModuleDict();
Martin v. Löwis1a214512008-06-11 05:26:20 +0000575 if (PyDict_SetItemString(modules, name, mod) < 0)
576 return -1;
577 if (_PyState_AddModule(mod, def) < 0) {
578 PyDict_DelItemString(modules, name);
579 return -1;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000580 }
Martin v. Löwis1a214512008-06-11 05:26:20 +0000581 if (def->m_size == -1) {
582 if (def->m_base.m_copy) {
583 /* Somebody already imported the module,
584 likely under a different name.
585 XXX this should really not happen. */
586 Py_DECREF(def->m_base.m_copy);
587 def->m_base.m_copy = NULL;
588 }
589 dict = PyModule_GetDict(mod);
590 if (dict == NULL)
591 return -1;
592 def->m_base.m_copy = PyDict_Copy(dict);
593 if (def->m_base.m_copy == NULL)
594 return -1;
595 }
596 PyDict_SetItemString(extensions, filename, (PyObject*)def);
597 return 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000598}
599
600PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000601_PyImport_FindExtension(char *name, char *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000602{
Martin v. Löwis1a214512008-06-11 05:26:20 +0000603 PyObject *mod, *mdict;
604 PyModuleDef* def;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000605 if (extensions == NULL)
606 return NULL;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000607 def = (PyModuleDef*)PyDict_GetItemString(extensions, filename);
608 if (def == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000609 return NULL;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000610 if (def->m_size == -1) {
611 /* Module does not support repeated initialization */
612 if (def->m_base.m_copy == NULL)
613 return NULL;
614 mod = PyImport_AddModule(name);
615 if (mod == NULL)
616 return NULL;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000617 mdict = PyModule_GetDict(mod);
618 if (mdict == NULL)
619 return NULL;
620 if (PyDict_Update(mdict, def->m_base.m_copy))
621 return NULL;
622 }
623 else {
624 if (def->m_base.m_init == NULL)
625 return NULL;
626 mod = def->m_base.m_init();
627 if (mod == NULL)
628 return NULL;
629 PyDict_SetItemString(PyImport_GetModuleDict(), name, mod);
Benjamin Petersonad956532008-09-04 02:28:15 +0000630 Py_DECREF(mod);
Martin v. Löwis1a214512008-06-11 05:26:20 +0000631 }
632 if (_PyState_AddModule(mod, def) < 0) {
633 PyDict_DelItemString(PyImport_GetModuleDict(), name);
634 Py_DECREF(mod);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000635 return NULL;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000636 }
Guido van Rossum25ce5661997-08-02 03:10:38 +0000637 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000638 PySys_WriteStderr("import %s # previously loaded (%s)\n",
Martin v. Löwis1a214512008-06-11 05:26:20 +0000639 name, filename);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000640 return mod;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000641
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000642}
643
644
645/* Get the module object corresponding to a module name.
646 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000647 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000648 Because the former action is most common, THIS DOES NOT RETURN A
649 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000650
Guido van Rossum79f25d91997-04-29 20:08:16 +0000651PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000652PyImport_AddModule(const char *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000653{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000654 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000655 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000656
Guido van Rossum25ce5661997-08-02 03:10:38 +0000657 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
Guido van Rossum79f25d91997-04-29 20:08:16 +0000658 PyModule_Check(m))
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000659 return m;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000660 m = PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000661 if (m == NULL)
662 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000663 if (PyDict_SetItemString(modules, name, m) != 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000664 Py_DECREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000665 return NULL;
666 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000667 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000668
669 return m;
670}
671
Tim Peters1cd70172004-08-02 03:52:12 +0000672/* Remove name from sys.modules, if it's there. */
673static void
674_RemoveModule(const char *name)
675{
676 PyObject *modules = PyImport_GetModuleDict();
677 if (PyDict_GetItemString(modules, name) == NULL)
678 return;
679 if (PyDict_DelItemString(modules, name) < 0)
680 Py_FatalError("import: deleting existing key in"
681 "sys.modules failed");
682}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000683
Christian Heimes3b06e532008-01-07 20:12:44 +0000684static PyObject * get_sourcefile(const char *file);
685
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000686/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000687 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
688 * removed from sys.modules, to avoid leaving damaged module objects
689 * in sys.modules. The caller may wish to restore the original
690 * module object (if any) in this case; PyImport_ReloadModule is an
691 * example.
692 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000693PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000694PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000695{
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000696 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL);
697}
698
699PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000700PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000701{
Guido van Rossum25ce5661997-08-02 03:10:38 +0000702 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossum79f25d91997-04-29 20:08:16 +0000703 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000704
Guido van Rossum79f25d91997-04-29 20:08:16 +0000705 m = PyImport_AddModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000706 if (m == NULL)
707 return NULL;
Jeremy Hyltonecd91292004-01-02 23:25:32 +0000708 /* If the module is being reloaded, we get the old module back
709 and re-use its dict to exec the new code. */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000710 d = PyModule_GetDict(m);
711 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
712 if (PyDict_SetItemString(d, "__builtins__",
713 PyEval_GetBuiltins()) != 0)
Tim Peters1cd70172004-08-02 03:52:12 +0000714 goto error;
Guido van Rossum6135a871995-01-09 17:53:26 +0000715 }
Guido van Rossum9c9a07c1996-05-16 20:43:40 +0000716 /* Remember the filename as the __file__ attribute */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000717 v = NULL;
718 if (pathname != NULL) {
Christian Heimes3b06e532008-01-07 20:12:44 +0000719 v = get_sourcefile(pathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000720 if (v == NULL)
721 PyErr_Clear();
722 }
723 if (v == NULL) {
724 v = ((PyCodeObject *)co)->co_filename;
725 Py_INCREF(v);
726 }
727 if (PyDict_SetItemString(d, "__file__", v) != 0)
Guido van Rossum79f25d91997-04-29 20:08:16 +0000728 PyErr_Clear(); /* Not important enough to report */
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000729 Py_DECREF(v);
730
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000731 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000732 if (v == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +0000733 goto error;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000734 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000735
Guido van Rossum25ce5661997-08-02 03:10:38 +0000736 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000737 PyErr_Format(PyExc_ImportError,
738 "Loaded module %.200s not found in sys.modules",
739 name);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000740 return NULL;
741 }
742
Guido van Rossum79f25d91997-04-29 20:08:16 +0000743 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000744
745 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000746
747 error:
748 _RemoveModule(name);
749 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000750}
751
752
753/* Given a pathname for a Python source file, fill a buffer with the
754 pathname for the corresponding compiled file. Return the pathname
755 for the compiled file, or NULL if there's no space in the buffer.
756 Doesn't set an exception. */
757
758static char *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000759make_compiled_pathname(char *pathname, char *buf, size_t buflen)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000760{
Tim Petersc1731372001-08-04 08:12:36 +0000761 size_t len = strlen(pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000762 if (len+2 > buflen)
763 return NULL;
Tim Petersc1731372001-08-04 08:12:36 +0000764
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000765#ifdef MS_WINDOWS
Tim Petersc1731372001-08-04 08:12:36 +0000766 /* Treat .pyw as if it were .py. The case of ".pyw" must match
767 that used in _PyImport_StandardFiletab. */
768 if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0)
769 --len; /* pretend 'w' isn't there */
770#endif
771 memcpy(buf, pathname, len);
772 buf[len] = Py_OptimizeFlag ? 'o' : 'c';
773 buf[len+1] = '\0';
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000774
775 return buf;
776}
777
778
779/* Given a pathname for a Python source file, its time of last
780 modification, and a pathname for a compiled file, check whether the
781 compiled file represents the same version of the source. If so,
782 return a FILE pointer for the compiled file, positioned just after
783 the header; if not, return NULL.
784 Doesn't set an exception. */
785
786static FILE *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000787check_compiled_module(char *pathname, time_t mtime, char *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000788{
789 FILE *fp;
790 long magic;
791 long pyc_mtime;
792
793 fp = fopen(cpathname, "rb");
794 if (fp == NULL)
795 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000796 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000797 if (magic != pyc_magic) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000798 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000799 PySys_WriteStderr("# %s has bad magic\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000800 fclose(fp);
801 return NULL;
802 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000803 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000804 if (pyc_mtime != mtime) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000805 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000806 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000807 fclose(fp);
808 return NULL;
809 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000810 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000811 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000812 return fp;
813}
814
815
816/* Read a code object from a file and check it for validity */
817
Guido van Rossum79f25d91997-04-29 20:08:16 +0000818static PyCodeObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000819read_compiled_module(char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000820{
Guido van Rossum79f25d91997-04-29 20:08:16 +0000821 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000822
Tim Petersd9b9ac82001-01-28 00:27:39 +0000823 co = PyMarshal_ReadLastObjectFromFile(fp);
Armin Rigo01ab2792004-03-26 15:09:27 +0000824 if (co == NULL)
825 return NULL;
826 if (!PyCode_Check(co)) {
827 PyErr_Format(PyExc_ImportError,
828 "Non-code object in %.200s", cpathname);
829 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000830 return NULL;
831 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000832 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000833}
834
835
836/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000837 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000838
Guido van Rossum79f25d91997-04-29 20:08:16 +0000839static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000840load_compiled_module(char *name, char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000841{
842 long magic;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000843 PyCodeObject *co;
844 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000845
Guido van Rossum79f25d91997-04-29 20:08:16 +0000846 magic = PyMarshal_ReadLongFromFile(fp);
Guido van Rossum96774c12000-05-01 20:19:08 +0000847 if (magic != pyc_magic) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000848 PyErr_Format(PyExc_ImportError,
849 "Bad magic number in %.200s", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000850 return NULL;
851 }
Guido van Rossum79f25d91997-04-29 20:08:16 +0000852 (void) PyMarshal_ReadLongFromFile(fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +0000853 co = read_compiled_module(cpathname, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000854 if (co == NULL)
855 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000856 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000857 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000858 name, cpathname);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000859 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000860 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000861
862 return m;
863}
864
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000865/* Parse a source file and return the corresponding code object */
866
Guido van Rossum79f25d91997-04-29 20:08:16 +0000867static PyCodeObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000868parse_source_module(const char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000869{
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000870 PyCodeObject *co = NULL;
871 mod_ty mod;
Christian Heimes4d6ec852008-03-26 22:34:47 +0000872 PyCompilerFlags flags;
Thomas Wouters89f507f2006-12-13 04:49:30 +0000873 PyArena *arena = PyArena_New();
874 if (arena == NULL)
875 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000876
Christian Heimesb1b3efc2008-03-26 23:24:27 +0000877 flags.cf_flags = 0;
Martin v. Löwis85bcc662007-09-04 09:18:06 +0000878 mod = PyParser_ASTFromFile(fp, pathname, NULL,
Christian Heimes4d6ec852008-03-26 22:34:47 +0000879 Py_file_input, 0, 0, &flags,
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000880 NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000881 if (mod) {
Neal Norwitzadb69fc2005-12-17 20:54:49 +0000882 co = PyAST_Compile(mod, pathname, NULL, arena);
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000883 }
Thomas Wouters89f507f2006-12-13 04:49:30 +0000884 PyArena_Free(arena);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000885 return co;
886}
887
888
Guido van Rossum55a83382000-09-20 20:31:38 +0000889/* Helper to open a bytecode file for writing in exclusive mode */
890
891static FILE *
Christian Heimes05e8be12008-02-23 18:30:17 +0000892open_exclusive(char *filename, mode_t mode)
Guido van Rossum55a83382000-09-20 20:31:38 +0000893{
894#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
895 /* Use O_EXCL to avoid a race condition when another process tries to
896 write the same file. When that happens, our open() call fails,
897 which is just fine (since it's only a cache).
898 XXX If the file exists and is writable but the directory is not
899 writable, the file will never be written. Oh well.
900 */
901 int fd;
902 (void) unlink(filename);
Tim Peters42c83af2000-09-29 04:03:10 +0000903 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
904#ifdef O_BINARY
905 |O_BINARY /* necessary for Windows */
906#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000907#ifdef __VMS
Christian Heimes05e8be12008-02-23 18:30:17 +0000908 , mode, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000909#else
Christian Heimes05e8be12008-02-23 18:30:17 +0000910 , mode
Martin v. Löwis79acb9e2002-12-06 12:48:53 +0000911#endif
Martin v. Löwis18e16552006-02-15 17:27:45 +0000912 );
Guido van Rossum55a83382000-09-20 20:31:38 +0000913 if (fd < 0)
914 return NULL;
915 return fdopen(fd, "wb");
916#else
917 /* Best we can do -- on Windows this can't happen anyway */
918 return fopen(filename, "wb");
919#endif
920}
921
922
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000923/* Write a compiled module to a file, placing the time of last
924 modification of its source into the header.
925 Errors are ignored, if a write error occurs an attempt is made to
926 remove the file. */
927
928static void
Christian Heimes05e8be12008-02-23 18:30:17 +0000929write_compiled_module(PyCodeObject *co, char *cpathname, struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000930{
931 FILE *fp;
Christian Heimes05e8be12008-02-23 18:30:17 +0000932 time_t mtime = srcstat->st_mtime;
933 mode_t mode = srcstat->st_mode;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000934
Christian Heimes05e8be12008-02-23 18:30:17 +0000935 fp = open_exclusive(cpathname, mode);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000936 if (fp == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000937 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000938 PySys_WriteStderr(
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000939 "# can't create %s\n", cpathname);
940 return;
941 }
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000942 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000943 /* First write a 0 for mtime */
Martin v. Löwisef82d2f2004-06-27 16:51:46 +0000944 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
945 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
Armin Rigo01ab2792004-03-26 15:09:27 +0000946 if (fflush(fp) != 0 || ferror(fp)) {
Guido van Rossum79f25d91997-04-29 20:08:16 +0000947 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000948 PySys_WriteStderr("# can't write %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000949 /* Don't keep partial file */
950 fclose(fp);
951 (void) unlink(cpathname);
952 return;
953 }
954 /* Now write the true mtime */
955 fseek(fp, 4L, 0);
Martin v. Löwis18e16552006-02-15 17:27:45 +0000956 assert(mtime < LONG_MAX);
Martin v. Löwis725507b2006-03-07 12:08:51 +0000957 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000958 fflush(fp);
959 fclose(fp);
Guido van Rossum79f25d91997-04-29 20:08:16 +0000960 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +0000961 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000962}
963
964
965/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000966 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
967 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000968
Guido van Rossum79f25d91997-04-29 20:08:16 +0000969static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000970load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000971{
Christian Heimes05e8be12008-02-23 18:30:17 +0000972 struct stat st;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000973 FILE *fpc;
974 char buf[MAXPATHLEN+1];
975 char *cpathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +0000976 PyCodeObject *co;
977 PyObject *m;
Christian Heimes05e8be12008-02-23 18:30:17 +0000978
979 if (fstat(fileno(fp), &st) != 0) {
Neal Norwitz708e51a2005-10-03 04:48:15 +0000980 PyErr_Format(PyExc_RuntimeError,
Christian Heimes05e8be12008-02-23 18:30:17 +0000981 "unable to get file status from '%s'",
Neal Norwitz708e51a2005-10-03 04:48:15 +0000982 pathname);
Fred Drake4c82b232000-06-30 16:18:57 +0000983 return NULL;
Neal Norwitz708e51a2005-10-03 04:48:15 +0000984 }
Fred Drake4c82b232000-06-30 16:18:57 +0000985#if SIZEOF_TIME_T > 4
986 /* Python's .pyc timestamp handling presumes that the timestamp fits
987 in 4 bytes. This will be fine until sometime in the year 2038,
988 when a 4-byte signed time_t will overflow.
989 */
Christian Heimes05e8be12008-02-23 18:30:17 +0000990 if (st.st_mtime >> 32) {
Fred Drake4c82b232000-06-30 16:18:57 +0000991 PyErr_SetString(PyExc_OverflowError,
Fred Drakec63d3e92001-03-01 06:33:32 +0000992 "modification time overflows a 4 byte field");
Fred Drake4c82b232000-06-30 16:18:57 +0000993 return NULL;
994 }
995#endif
Tim Peters36515e22001-11-18 04:06:29 +0000996 cpathname = make_compiled_pathname(pathname, buf,
Jeremy Hylton37832f02001-04-13 17:50:20 +0000997 (size_t)MAXPATHLEN + 1);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000998 if (cpathname != NULL &&
Christian Heimes05e8be12008-02-23 18:30:17 +0000999 (fpc = check_compiled_module(pathname, st.st_mtime, cpathname))) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001000 co = read_compiled_module(cpathname, fpc);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001001 fclose(fpc);
1002 if (co == NULL)
1003 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001004 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001005 PySys_WriteStderr("import %s # precompiled from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001006 name, cpathname);
Guido van Rossumafd3dae1998-08-25 18:44:34 +00001007 pathname = cpathname;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001008 }
1009 else {
1010 co = parse_source_module(pathname, fp);
1011 if (co == NULL)
1012 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001013 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001014 PySys_WriteStderr("import %s # from %s\n",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001015 name, pathname);
Christian Heimes790c8232008-01-07 21:14:23 +00001016 if (cpathname) {
1017 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1018 if (ro == NULL || !PyObject_IsTrue(ro))
Christian Heimes05e8be12008-02-23 18:30:17 +00001019 write_compiled_module(co, cpathname, &st);
Christian Heimes790c8232008-01-07 21:14:23 +00001020 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001021 }
Guido van Rossumafd3dae1998-08-25 18:44:34 +00001022 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001023 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001024
1025 return m;
1026}
1027
Christian Heimes3b06e532008-01-07 20:12:44 +00001028/* Get source file -> unicode or None
1029 * Returns the path to the py file if available, else the given path
1030 */
1031static PyObject *
1032get_sourcefile(const char *file)
1033{
1034 char py[MAXPATHLEN + 1];
1035 Py_ssize_t len;
1036 PyObject *u;
1037 struct stat statbuf;
1038
1039 if (!file || !*file) {
1040 Py_RETURN_NONE;
1041 }
1042
1043 len = strlen(file);
Christian Heimes3540b502008-01-11 07:03:05 +00001044 /* match '*.py?' */
1045 if (len > MAXPATHLEN || PyOS_strnicmp(&file[len-4], ".py", 3) != 0) {
Christian Heimes3b06e532008-01-07 20:12:44 +00001046 return PyUnicode_DecodeFSDefault(file);
1047 }
1048
1049 strncpy(py, file, len-1);
Martin v. Löwis5021ebc2008-03-22 22:07:13 +00001050 py[len-1] = '\0';
Christian Heimes3b06e532008-01-07 20:12:44 +00001051 if (stat(py, &statbuf) == 0 &&
1052 S_ISREG(statbuf.st_mode)) {
1053 u = PyUnicode_DecodeFSDefault(py);
1054 }
1055 else {
1056 u = PyUnicode_DecodeFSDefault(file);
1057 }
1058 return u;
1059}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001060
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001061/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001062static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
1063static struct filedescr *find_module(char *, char *, PyObject *,
1064 char *, size_t, FILE **, PyObject **);
Christian Heimes3b06e532008-01-07 20:12:44 +00001065static struct _frozen * find_frozen(char *);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001066
1067/* Load a package and return its module object WITH INCREMENTED
1068 REFERENCE COUNT */
1069
1070static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001071load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001072{
Tim Peters1cd70172004-08-02 03:52:12 +00001073 PyObject *m, *d;
1074 PyObject *file = NULL;
1075 PyObject *path = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001076 int err;
1077 char buf[MAXPATHLEN+1];
1078 FILE *fp = NULL;
1079 struct filedescr *fdp;
1080
1081 m = PyImport_AddModule(name);
1082 if (m == NULL)
1083 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001084 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001085 PySys_WriteStderr("import %s # directory %s\n",
Guido van Rossum17fc85f1997-09-06 18:52:03 +00001086 name, pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001087 d = PyModule_GetDict(m);
Christian Heimes3b06e532008-01-07 20:12:44 +00001088 file = get_sourcefile(pathname);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001089 if (file == NULL)
Tim Peters1cd70172004-08-02 03:52:12 +00001090 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001091 path = Py_BuildValue("[O]", file);
Tim Peters1cd70172004-08-02 03:52:12 +00001092 if (path == NULL)
1093 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001094 err = PyDict_SetItemString(d, "__file__", file);
1095 if (err == 0)
1096 err = PyDict_SetItemString(d, "__path__", path);
Tim Peters1cd70172004-08-02 03:52:12 +00001097 if (err != 0)
1098 goto error;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001099 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00001100 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001101 if (fdp == NULL) {
1102 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1103 PyErr_Clear();
Thomas Heller25653242004-06-07 15:04:10 +00001104 Py_INCREF(m);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001105 }
1106 else
1107 m = NULL;
1108 goto cleanup;
1109 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001110 m = load_module(name, fp, buf, fdp->type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001111 if (fp != NULL)
1112 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00001113 goto cleanup;
1114
1115 error:
1116 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001117 cleanup:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001118 Py_XDECREF(path);
1119 Py_XDECREF(file);
1120 return m;
1121}
1122
1123
1124/* Helper to test for built-in module */
1125
1126static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001127is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001128{
1129 int i;
Guido van Rossum771c6c81997-10-31 18:37:24 +00001130 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1131 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1132 if (PyImport_Inittab[i].initfunc == NULL)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001133 return -1;
1134 else
1135 return 1;
1136 }
1137 }
1138 return 0;
1139}
1140
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001141
Just van Rossum52e14d62002-12-30 22:08:05 +00001142/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1143 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +00001144 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001145 that can handle the path item. Return None if no hook could;
1146 this tells our caller it should fall back to the builtin
1147 import mechanism. Cache the result in path_importer_cache.
1148 Returns a borrowed reference. */
1149
1150static PyObject *
1151get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
1152 PyObject *p)
1153{
1154 PyObject *importer;
Martin v. Löwis725507b2006-03-07 12:08:51 +00001155 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001156
1157 /* These conditions are the caller's responsibility: */
1158 assert(PyList_Check(path_hooks));
1159 assert(PyDict_Check(path_importer_cache));
1160
1161 nhooks = PyList_Size(path_hooks);
1162 if (nhooks < 0)
1163 return NULL; /* Shouldn't happen */
1164
1165 importer = PyDict_GetItem(path_importer_cache, p);
1166 if (importer != NULL)
1167 return importer;
1168
1169 /* set path_importer_cache[p] to None to avoid recursion */
1170 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1171 return NULL;
1172
1173 for (j = 0; j < nhooks; j++) {
1174 PyObject *hook = PyList_GetItem(path_hooks, j);
1175 if (hook == NULL)
1176 return NULL;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001177 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
Just van Rossum52e14d62002-12-30 22:08:05 +00001178 if (importer != NULL)
1179 break;
1180
1181 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1182 return NULL;
1183 }
1184 PyErr_Clear();
1185 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001186 if (importer == NULL) {
1187 importer = PyObject_CallFunctionObjArgs(
Christian Heimes9cd17752007-11-18 19:35:23 +00001188 (PyObject *)&PyNullImporter_Type, p, NULL
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001189 );
1190 if (importer == NULL) {
1191 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1192 PyErr_Clear();
1193 return Py_None;
1194 }
1195 }
1196 }
1197 if (importer != NULL) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001198 int err = PyDict_SetItem(path_importer_cache, p, importer);
1199 Py_DECREF(importer);
1200 if (err != 0)
1201 return NULL;
1202 }
1203 return importer;
1204}
1205
Christian Heimes9cd17752007-11-18 19:35:23 +00001206PyAPI_FUNC(PyObject *)
1207PyImport_GetImporter(PyObject *path) {
1208 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
1209
1210 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1211 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1212 importer = get_path_importer(path_importer_cache,
1213 path_hooks, path);
1214 }
1215 }
1216 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1217 return importer;
1218}
1219
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001220/* Search the path (default sys.path) for a module. Return the
1221 corresponding filedescr struct, and (via return arguments) the
1222 pathname and an open file. Return NULL if the module is not found. */
1223
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001224#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001225extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Martin v. Löwis18e16552006-02-15 17:27:45 +00001226 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001227#endif
1228
Martin v. Löwis18e16552006-02-15 17:27:45 +00001229static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001230static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001231static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001232
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001233static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001234find_module(char *fullname, char *subname, PyObject *path, char *buf,
1235 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001236{
Martin v. Löwis725507b2006-03-07 12:08:51 +00001237 Py_ssize_t i, npath;
Fred Drake4c82b232000-06-30 16:18:57 +00001238 size_t len, namelen;
Guido van Rossum80bb9651996-12-05 23:27:02 +00001239 struct filedescr *fdp = NULL;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001240 char *filemode;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001241 FILE *fp = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001242 PyObject *path_hooks, *path_importer_cache;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001243 struct stat statbuf;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001244 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1245 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1246 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
Guido van Rossum0506a431998-08-11 15:07:39 +00001247 char name[MAXPATHLEN+1];
Andrew MacIntyred9400542002-02-26 11:41:34 +00001248#if defined(PYOS_OS2)
1249 size_t saved_len;
1250 size_t saved_namelen;
1251 char *saved_buf = NULL;
1252#endif
Just van Rossum52e14d62002-12-30 22:08:05 +00001253 if (p_loader != NULL)
1254 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001255
Just van Rossum52e14d62002-12-30 22:08:05 +00001256 if (strlen(subname) > MAXPATHLEN) {
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001257 PyErr_SetString(PyExc_OverflowError,
1258 "module name is too long");
Fred Drake4c82b232000-06-30 16:18:57 +00001259 return NULL;
1260 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001261 strcpy(name, subname);
1262
1263 /* sys.meta_path import hook */
1264 if (p_loader != NULL) {
1265 PyObject *meta_path;
1266
1267 meta_path = PySys_GetObject("meta_path");
1268 if (meta_path == NULL || !PyList_Check(meta_path)) {
1269 PyErr_SetString(PyExc_ImportError,
1270 "sys.meta_path must be a list of "
1271 "import hooks");
1272 return NULL;
1273 }
1274 Py_INCREF(meta_path); /* zap guard */
1275 npath = PyList_Size(meta_path);
1276 for (i = 0; i < npath; i++) {
1277 PyObject *loader;
1278 PyObject *hook = PyList_GetItem(meta_path, i);
1279 loader = PyObject_CallMethod(hook, "find_module",
1280 "sO", fullname,
1281 path != NULL ?
1282 path : Py_None);
1283 if (loader == NULL) {
1284 Py_DECREF(meta_path);
1285 return NULL; /* true error */
1286 }
1287 if (loader != Py_None) {
1288 /* a loader was found */
1289 *p_loader = loader;
1290 Py_DECREF(meta_path);
1291 return &importhookdescr;
1292 }
1293 Py_DECREF(loader);
1294 }
1295 Py_DECREF(meta_path);
1296 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001297
Benjamin Petersond968e272008-11-05 22:48:33 +00001298 if (find_frozen(fullname) != NULL) {
1299 strcpy(buf, fullname);
1300 return &fd_frozen;
Guido van Rossum0506a431998-08-11 15:07:39 +00001301 }
Benjamin Petersond968e272008-11-05 22:48:33 +00001302
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001303 if (path == NULL) {
1304 if (is_builtin(name)) {
Guido van Rossuma5568d31998-03-05 03:45:08 +00001305 strcpy(buf, name);
1306 return &fd_builtin;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001307 }
Guido van Rossumac279101996-08-22 23:10:58 +00001308#ifdef MS_COREDLL
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001309 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1310 if (fp != NULL) {
1311 *p_fp = fp;
1312 return fdp;
1313 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001314#endif
Guido van Rossuma5568d31998-03-05 03:45:08 +00001315 path = PySys_GetObject("path");
1316 }
Benjamin Petersond968e272008-11-05 22:48:33 +00001317
Guido van Rossum79f25d91997-04-29 20:08:16 +00001318 if (path == NULL || !PyList_Check(path)) {
1319 PyErr_SetString(PyExc_ImportError,
Guido van Rossuma5568d31998-03-05 03:45:08 +00001320 "sys.path must be a list of directory names");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001321 return NULL;
1322 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001323
1324 path_hooks = PySys_GetObject("path_hooks");
1325 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
1326 PyErr_SetString(PyExc_ImportError,
1327 "sys.path_hooks must be a list of "
1328 "import hooks");
1329 return NULL;
1330 }
1331 path_importer_cache = PySys_GetObject("path_importer_cache");
1332 if (path_importer_cache == NULL ||
1333 !PyDict_Check(path_importer_cache)) {
1334 PyErr_SetString(PyExc_ImportError,
1335 "sys.path_importer_cache must be a dict");
1336 return NULL;
1337 }
1338
Guido van Rossum79f25d91997-04-29 20:08:16 +00001339 npath = PyList_Size(path);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001340 namelen = strlen(name);
1341 for (i = 0; i < npath; i++) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00001342 PyObject *v = PyList_GetItem(path, i);
Guido van Rossumf15a29f2007-05-04 00:41:39 +00001343 PyObject *origv = v;
Guido van Rossum6262cc72007-05-09 23:29:27 +00001344 const char *base;
Guido van Rossumf15a29f2007-05-04 00:41:39 +00001345 Py_ssize_t size;
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00001346 if (!v)
1347 return NULL;
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +00001348 if (PyUnicode_Check(v)) {
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001349 v = PyUnicode_AsEncodedString(v,
1350 Py_FileSystemDefaultEncoding, NULL);
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +00001351 if (v == NULL)
1352 return NULL;
1353 }
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001354 else if (!PyBytes_Check(v))
Guido van Rossuma4b8d1d2007-08-27 15:02:28 +00001355 continue;
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001356 else
1357 Py_INCREF(v);
1358
Christian Heimes72b710a2008-05-26 13:28:38 +00001359 base = PyBytes_AS_STRING(v);
1360 size = PyBytes_GET_SIZE(v);
Guido van Rossumf15a29f2007-05-04 00:41:39 +00001361 len = size;
Walter Dörwald3430d702002-06-17 10:43:59 +00001362 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001363 Py_DECREF(v);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001364 continue; /* Too long */
Walter Dörwald3430d702002-06-17 10:43:59 +00001365 }
Guido van Rossumf15a29f2007-05-04 00:41:39 +00001366 strcpy(buf, base);
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001367 Py_DECREF(v);
1368
Walter Dörwald3430d702002-06-17 10:43:59 +00001369 if (strlen(buf) != len) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001370 continue; /* v contains '\0' */
Walter Dörwald3430d702002-06-17 10:43:59 +00001371 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001372
1373 /* sys.path_hooks import hook */
1374 if (p_loader != NULL) {
1375 PyObject *importer;
1376
1377 importer = get_path_importer(path_importer_cache,
Guido van Rossumf15a29f2007-05-04 00:41:39 +00001378 path_hooks, origv);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001379 if (importer == NULL) {
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001380 return NULL;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001381 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001382 /* Note: importer is a borrowed reference */
1383 if (importer != Py_None) {
Just van Rossum52e14d62002-12-30 22:08:05 +00001384 PyObject *loader;
1385 loader = PyObject_CallMethod(importer,
1386 "find_module",
1387 "s", fullname);
1388 if (loader == NULL)
1389 return NULL; /* error */
1390 if (loader != Py_None) {
1391 /* a loader was found */
1392 *p_loader = loader;
1393 return &importhookdescr;
1394 }
1395 Py_DECREF(loader);
Thomas Wouters477c8d52006-05-27 19:21:47 +00001396 continue;
Just van Rossum52e14d62002-12-30 22:08:05 +00001397 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001398 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001399 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001400
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001401 if (len > 0 && buf[len-1] != SEP
1402#ifdef ALTSEP
1403 && buf[len-1] != ALTSEP
1404#endif
1405 )
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001406 buf[len++] = SEP;
Guido van Rossum215c3402000-11-13 17:26:32 +00001407 strcpy(buf+len, name);
1408 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001409
1410 /* Check for package import (buf holds a directory name,
1411 and there's an __init__ module in that directory */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001412#ifdef HAVE_STAT
Walter Dörwald3430d702002-06-17 10:43:59 +00001413 if (stat(buf, &statbuf) == 0 && /* it exists */
1414 S_ISDIR(statbuf.st_mode) && /* it's a directory */
Thomas Wouters477c8d52006-05-27 19:21:47 +00001415 case_ok(buf, len, namelen, name)) { /* case matches */
1416 if (find_init_module(buf)) { /* and has __init__.py */
Thomas Wouters477c8d52006-05-27 19:21:47 +00001417 return &fd_package;
1418 }
1419 else {
1420 char warnstr[MAXPATHLEN+80];
1421 sprintf(warnstr, "Not importing directory "
1422 "'%.*s': missing __init__.py",
1423 MAXPATHLEN, buf);
Skip Montanaro46fc3372007-08-12 11:44:53 +00001424 if (PyErr_WarnEx(PyExc_ImportWarning,
1425 warnstr, 1)) {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001426 return NULL;
1427 }
1428 }
Walter Dörwald3430d702002-06-17 10:43:59 +00001429 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001430#endif
Andrew MacIntyred9400542002-02-26 11:41:34 +00001431#if defined(PYOS_OS2)
1432 /* take a snapshot of the module spec for restoration
1433 * after the 8 character DLL hackery
1434 */
1435 saved_buf = strdup(buf);
1436 saved_len = len;
1437 saved_namelen = namelen;
1438#endif /* PYOS_OS2 */
Guido van Rossum79f25d91997-04-29 20:08:16 +00001439 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Guido van Rossum04110fb2007-08-24 16:32:05 +00001440#if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001441 /* OS/2 limits DLLs to 8 character names (w/o
1442 extension)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001443 * so if the name is longer than that and its a
1444 * dynamically loaded module we're going to try,
1445 * truncate the name before trying
1446 */
Just van Rossum52e14d62002-12-30 22:08:05 +00001447 if (strlen(subname) > 8) {
Andrew MacIntyred9400542002-02-26 11:41:34 +00001448 /* is this an attempt to load a C extension? */
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001449 const struct filedescr *scan;
1450 scan = _PyImport_DynLoadFiletab;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001451 while (scan->suffix != NULL) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001452 if (!strcmp(scan->suffix, fdp->suffix))
Andrew MacIntyred9400542002-02-26 11:41:34 +00001453 break;
1454 else
1455 scan++;
1456 }
1457 if (scan->suffix != NULL) {
1458 /* yes, so truncate the name */
1459 namelen = 8;
Just van Rossum52e14d62002-12-30 22:08:05 +00001460 len -= strlen(subname) - namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001461 buf[len] = '\0';
1462 }
1463 }
1464#endif /* PYOS_OS2 */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001465 strcpy(buf+len, fdp->suffix);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001466 if (Py_VerboseFlag > 1)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001467 PySys_WriteStderr("# trying %s\n", buf);
Jack Jansenc88da1f2002-05-28 10:58:19 +00001468 filemode = fdp->mode;
Tim Peters86c7d2f2004-08-01 23:24:21 +00001469 if (filemode[0] == 'U')
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00001470 filemode = "r" PY_STDIOTEXTMODE;
Jack Jansenc88da1f2002-05-28 10:58:19 +00001471 fp = fopen(buf, filemode);
Tim Peters50d8d372001-02-28 05:34:27 +00001472 if (fp != NULL) {
1473 if (case_ok(buf, len, namelen, name))
1474 break;
1475 else { /* continue search */
1476 fclose(fp);
1477 fp = NULL;
Barry Warsaw914a0b12001-02-02 19:12:16 +00001478 }
Barry Warsaw914a0b12001-02-02 19:12:16 +00001479 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001480#if defined(PYOS_OS2)
1481 /* restore the saved snapshot */
1482 strcpy(buf, saved_buf);
1483 len = saved_len;
1484 namelen = saved_namelen;
1485#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001486 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001487#if defined(PYOS_OS2)
1488 /* don't need/want the module name snapshot anymore */
1489 if (saved_buf)
1490 {
1491 free(saved_buf);
1492 saved_buf = NULL;
1493 }
1494#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001495 if (fp != NULL)
1496 break;
1497 }
1498 if (fp == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001499 PyErr_Format(PyExc_ImportError,
1500 "No module named %.200s", name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001501 return NULL;
1502 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001503 *p_fp = fp;
1504 return fdp;
1505}
1506
Raymond Hettingerdb29e0f2004-10-07 06:46:25 +00001507/* Helpers for main.c
1508 * Find the source file corresponding to a named module
1509 */
1510struct filedescr *
1511_PyImport_FindModule(const char *name, PyObject *path, char *buf,
1512 size_t buflen, FILE **p_fp, PyObject **p_loader)
1513{
1514 return find_module((char *) name, (char *) name, path,
1515 buf, buflen, p_fp, p_loader);
1516}
1517
1518PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd)
1519{
1520 return fd->type == PY_SOURCE || fd->type == PY_COMPILED;
1521}
1522
Martin v. Löwis18e16552006-02-15 17:27:45 +00001523/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001524 * The arguments here are tricky, best shown by example:
1525 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1526 * ^ ^ ^ ^
1527 * |--------------------- buf ---------------------|
1528 * |------------------- len ------------------|
1529 * |------ name -------|
1530 * |----- namelen -----|
1531 * buf is the full path, but len only counts up to (& exclusive of) the
1532 * extension. name is the module name, also exclusive of extension.
1533 *
1534 * We've already done a successful stat() or fopen() on buf, so know that
1535 * there's some match, possibly case-insensitive.
1536 *
Tim Peters50d8d372001-02-28 05:34:27 +00001537 * case_ok() is to return 1 if there's a case-sensitive match for
1538 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1539 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001540 *
Tim Peters50d8d372001-02-28 05:34:27 +00001541 * case_ok() is used to implement case-sensitive import semantics even
1542 * on platforms with case-insensitive filesystems. It's trivial to implement
1543 * for case-sensitive filesystems. It's pretty much a cross-platform
1544 * nightmare for systems with case-insensitive filesystems.
1545 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001546
Tim Peters50d8d372001-02-28 05:34:27 +00001547/* First we may need a pile of platform-specific header files; the sequence
1548 * of #if's here should match the sequence in the body of case_ok().
1549 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001550#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001551#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001552
Tim Peters50d8d372001-02-28 05:34:27 +00001553#elif defined(DJGPP)
1554#include <dir.h>
1555
Jason Tishler7961aa62005-05-20 00:56:54 +00001556#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001557#include <sys/types.h>
1558#include <dirent.h>
1559
Andrew MacIntyred9400542002-02-26 11:41:34 +00001560#elif defined(PYOS_OS2)
1561#define INCL_DOS
1562#define INCL_DOSERRORS
1563#define INCL_NOPMAPI
1564#include <os2.h>
Tim Peters50d8d372001-02-28 05:34:27 +00001565#endif
1566
Guido van Rossum0980bd91998-02-13 17:18:36 +00001567static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001568case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001569{
Tim Peters50d8d372001-02-28 05:34:27 +00001570/* Pick a platform-specific implementation; the sequence of #if's here should
1571 * match the sequence just above.
1572 */
1573
Jason Tishler7961aa62005-05-20 00:56:54 +00001574/* MS_WINDOWS */
1575#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001576 WIN32_FIND_DATA data;
1577 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001578
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001579 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001580 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001581
Guido van Rossum0980bd91998-02-13 17:18:36 +00001582 h = FindFirstFile(buf, &data);
1583 if (h == INVALID_HANDLE_VALUE) {
1584 PyErr_Format(PyExc_NameError,
1585 "Can't find file for module %.100s\n(filename %.300s)",
1586 name, buf);
1587 return 0;
1588 }
1589 FindClose(h);
Tim Peters50d8d372001-02-28 05:34:27 +00001590 return strncmp(data.cFileName, name, namelen) == 0;
1591
1592/* DJGPP */
1593#elif defined(DJGPP)
1594 struct ffblk ffblk;
1595 int done;
1596
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001597 if (Py_GETENV("PYTHONCASEOK") != NULL)
Guido van Rossum323bf5e1998-06-24 03:54:06 +00001598 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001599
1600 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1601 if (done) {
Guido van Rossum0980bd91998-02-13 17:18:36 +00001602 PyErr_Format(PyExc_NameError,
Tim Peters50d8d372001-02-28 05:34:27 +00001603 "Can't find file for module %.100s\n(filename %.300s)",
Guido van Rossum0980bd91998-02-13 17:18:36 +00001604 name, buf);
1605 return 0;
1606 }
Tim Peters50d8d372001-02-28 05:34:27 +00001607 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001608
Jason Tishler7961aa62005-05-20 00:56:54 +00001609/* new-fangled macintosh (macosx) or Cygwin */
1610#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001611 DIR *dirp;
1612 struct dirent *dp;
Tim Petersd1e87a82001-03-01 18:12:00 +00001613 char dirname[MAXPATHLEN + 1];
1614 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001615
Neil Schemenauer7d4bb9f2001-07-23 16:30:27 +00001616 if (Py_GETENV("PYTHONCASEOK") != NULL)
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001617 return 1;
1618
Tim Petersd1e87a82001-03-01 18:12:00 +00001619 /* Copy the dir component into dirname; substitute "." if empty */
1620 if (dirlen <= 0) {
1621 dirname[0] = '.';
1622 dirname[1] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001623 }
1624 else {
Tim Petersd1e87a82001-03-01 18:12:00 +00001625 assert(dirlen <= MAXPATHLEN);
1626 memcpy(dirname, buf, dirlen);
1627 dirname[dirlen] = '\0';
Tim Peters430f5d42001-03-01 01:30:56 +00001628 }
1629 /* Open the directory and search the entries for an exact match. */
Tim Petersd1e87a82001-03-01 18:12:00 +00001630 dirp = opendir(dirname);
Tim Peters430f5d42001-03-01 01:30:56 +00001631 if (dirp) {
Tim Peters677898a2001-03-02 03:28:03 +00001632 char *nameWithExt = buf + len - namelen;
Tim Peters430f5d42001-03-01 01:30:56 +00001633 while ((dp = readdir(dirp)) != NULL) {
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001634 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001635#ifdef _DIRENT_HAVE_D_NAMELEN
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001636 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001637#else
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001638 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001639#endif
Tim Petersd1e87a82001-03-01 18:12:00 +00001640 if (thislen >= namelen &&
Tim Peters677898a2001-03-02 03:28:03 +00001641 strcmp(dp->d_name, nameWithExt) == 0) {
Tim Peters430f5d42001-03-01 01:30:56 +00001642 (void)closedir(dirp);
1643 return 1; /* Found */
1644 }
1645 }
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001646 (void)closedir(dirp);
Tim Peters430f5d42001-03-01 01:30:56 +00001647 }
Tim Peters430f5d42001-03-01 01:30:56 +00001648 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001649
Andrew MacIntyred9400542002-02-26 11:41:34 +00001650/* OS/2 */
1651#elif defined(PYOS_OS2)
1652 HDIR hdir = 1;
1653 ULONG srchcnt = 1;
1654 FILEFINDBUF3 ffbuf;
1655 APIRET rc;
1656
Christian Heimes790c8232008-01-07 21:14:23 +00001657 if (Py_GETENV("PYTHONCASEOK") != NULL)
Andrew MacIntyred9400542002-02-26 11:41:34 +00001658 return 1;
1659
1660 rc = DosFindFirst(buf,
1661 &hdir,
1662 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1663 &ffbuf, sizeof(ffbuf),
1664 &srchcnt,
1665 FIL_STANDARD);
1666 if (rc != NO_ERROR)
1667 return 0;
1668 return strncmp(ffbuf.achName, name, namelen) == 0;
1669
Tim Peters50d8d372001-02-28 05:34:27 +00001670/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1671#else
Guido van Rossum0980bd91998-02-13 17:18:36 +00001672 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001673
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001674#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001675}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001676
Guido van Rossum0980bd91998-02-13 17:18:36 +00001677
Guido van Rossum197346f1997-10-31 18:38:52 +00001678#ifdef HAVE_STAT
1679/* Helper to look for __init__.py or __init__.py[co] in potential package */
1680static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001681find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00001682{
Tim Peters0f9431f2001-07-05 03:47:53 +00001683 const size_t save_len = strlen(buf);
Fred Drake4c82b232000-06-30 16:18:57 +00001684 size_t i = save_len;
Tim Peters0f9431f2001-07-05 03:47:53 +00001685 char *pname; /* pointer to start of __init__ */
Guido van Rossum197346f1997-10-31 18:38:52 +00001686 struct stat statbuf;
1687
Tim Peters0f9431f2001-07-05 03:47:53 +00001688/* For calling case_ok(buf, len, namelen, name):
1689 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1690 * ^ ^ ^ ^
1691 * |--------------------- buf ---------------------|
1692 * |------------------- len ------------------|
1693 * |------ name -------|
1694 * |----- namelen -----|
1695 */
Guido van Rossum197346f1997-10-31 18:38:52 +00001696 if (save_len + 13 >= MAXPATHLEN)
1697 return 0;
1698 buf[i++] = SEP;
Tim Peters0f9431f2001-07-05 03:47:53 +00001699 pname = buf + i;
1700 strcpy(pname, "__init__.py");
Guido van Rossum197346f1997-10-31 18:38:52 +00001701 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001702 if (case_ok(buf,
1703 save_len + 9, /* len("/__init__") */
1704 8, /* len("__init__") */
1705 pname)) {
1706 buf[save_len] = '\0';
1707 return 1;
1708 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001709 }
Tim Peters0f9431f2001-07-05 03:47:53 +00001710 i += strlen(pname);
1711 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
Guido van Rossum197346f1997-10-31 18:38:52 +00001712 if (stat(buf, &statbuf) == 0) {
Tim Peters0f9431f2001-07-05 03:47:53 +00001713 if (case_ok(buf,
1714 save_len + 9, /* len("/__init__") */
1715 8, /* len("__init__") */
1716 pname)) {
1717 buf[save_len] = '\0';
1718 return 1;
1719 }
Guido van Rossum197346f1997-10-31 18:38:52 +00001720 }
1721 buf[save_len] = '\0';
1722 return 0;
1723}
Guido van Rossum48a680c2001-03-02 06:34:14 +00001724
Guido van Rossum197346f1997-10-31 18:38:52 +00001725#endif /* HAVE_STAT */
1726
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001727
Tim Petersdbd9ba62000-07-09 03:09:57 +00001728static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001729
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001730/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001731 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001732
Guido van Rossum79f25d91997-04-29 20:08:16 +00001733static PyObject *
Just van Rossum52e14d62002-12-30 22:08:05 +00001734load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001735{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001736 PyObject *modules;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001737 PyObject *m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001738 int err;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001739
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001740 /* First check that there's an open file (if we need one) */
1741 switch (type) {
1742 case PY_SOURCE:
1743 case PY_COMPILED:
1744 if (fp == NULL) {
1745 PyErr_Format(PyExc_ValueError,
1746 "file object required for import (type code %d)",
1747 type);
1748 return NULL;
1749 }
1750 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001751
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001752 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001753
1754 case PY_SOURCE:
1755 m = load_source_module(name, buf, fp);
1756 break;
1757
1758 case PY_COMPILED:
1759 m = load_compiled_module(name, buf, fp);
1760 break;
1761
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001762#ifdef HAVE_DYNAMIC_LOADING
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001763 case C_EXTENSION:
Guido van Rossum79f25d91997-04-29 20:08:16 +00001764 m = _PyImport_LoadDynamicModule(name, buf, fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001765 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00001766#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001767
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001768 case PKG_DIRECTORY:
1769 m = load_package(name, buf);
1770 break;
1771
1772 case C_BUILTIN:
1773 case PY_FROZEN:
Guido van Rossuma5568d31998-03-05 03:45:08 +00001774 if (buf != NULL && buf[0] != '\0')
1775 name = buf;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001776 if (type == C_BUILTIN)
1777 err = init_builtin(name);
1778 else
1779 err = PyImport_ImportFrozenModule(name);
1780 if (err < 0)
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001781 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001782 if (err == 0) {
1783 PyErr_Format(PyExc_ImportError,
1784 "Purported %s module %.200s not found",
1785 type == C_BUILTIN ?
1786 "builtin" : "frozen",
1787 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001788 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001789 }
1790 modules = PyImport_GetModuleDict();
1791 m = PyDict_GetItemString(modules, name);
1792 if (m == NULL) {
1793 PyErr_Format(
1794 PyExc_ImportError,
1795 "%s module %.200s not properly initialized",
1796 type == C_BUILTIN ?
1797 "builtin" : "frozen",
1798 name);
Guido van Rossuma86f77d1997-09-09 18:53:47 +00001799 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001800 }
1801 Py_INCREF(m);
1802 break;
1803
Just van Rossum52e14d62002-12-30 22:08:05 +00001804 case IMP_HOOK: {
1805 if (loader == NULL) {
1806 PyErr_SetString(PyExc_ImportError,
1807 "import hook without loader");
1808 return NULL;
1809 }
1810 m = PyObject_CallMethod(loader, "load_module", "s", name);
1811 break;
1812 }
1813
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001814 default:
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001815 PyErr_Format(PyExc_ImportError,
1816 "Don't know how to import %.200s (type code %d)",
1817 name, type);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001818 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001819
1820 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001821
1822 return m;
1823}
1824
1825
1826/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +00001827 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001828 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001829
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001830static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001831init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001832{
Guido van Rossum25ce5661997-08-02 03:10:38 +00001833 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001834
Greg Ward201baee2001-10-04 14:52:06 +00001835 if (_PyImport_FindExtension(name, name) != NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001836 return 1;
1837
Guido van Rossum771c6c81997-10-31 18:37:24 +00001838 for (p = PyImport_Inittab; p->name != NULL; p++) {
Martin v. Löwis1a214512008-06-11 05:26:20 +00001839 PyObject *mod;
Guido van Rossum25ce5661997-08-02 03:10:38 +00001840 if (strcmp(name, p->name) == 0) {
1841 if (p->initfunc == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001842 PyErr_Format(PyExc_ImportError,
1843 "Cannot re-init internal module %.200s",
1844 name);
Guido van Rossum74e6a111994-08-29 12:54:38 +00001845 return -1;
1846 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00001847 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001848 PySys_WriteStderr("import %s # builtin\n", name);
Martin v. Löwis1a214512008-06-11 05:26:20 +00001849 mod = (*p->initfunc)();
1850 if (mod == 0)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001851 return -1;
Martin v. Löwis1a214512008-06-11 05:26:20 +00001852 if (_PyImport_FixupExtension(mod, name, name) < 0)
Guido van Rossum25ce5661997-08-02 03:10:38 +00001853 return -1;
Martin v. Löwis1a214512008-06-11 05:26:20 +00001854 /* FixupExtension has put the module into sys.modules,
1855 so we can release our own reference. */
1856 Py_DECREF(mod);
Guido van Rossum7f133ed1991-02-19 12:23:57 +00001857 return 1;
1858 }
1859 }
1860 return 0;
1861}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001862
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001863
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001864/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001865
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001866static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001867find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001868{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001869 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001870
Benjamin Petersond968e272008-11-05 22:48:33 +00001871 if (!name)
1872 return NULL;
1873
Guido van Rossum79f25d91997-04-29 20:08:16 +00001874 for (p = PyImport_FrozenModules; ; p++) {
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001875 if (p->name == NULL)
1876 return NULL;
1877 if (strcmp(p->name, name) == 0)
1878 break;
1879 }
1880 return p;
1881}
1882
Guido van Rossum79f25d91997-04-29 20:08:16 +00001883static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001884get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001885{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001886 struct _frozen *p = find_frozen(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001887 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001888
1889 if (p == NULL) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001890 PyErr_Format(PyExc_ImportError,
1891 "No such frozen object named %.200s",
1892 name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001893 return NULL;
1894 }
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001895 if (p->code == NULL) {
1896 PyErr_Format(PyExc_ImportError,
1897 "Excluded frozen object named %.200s",
1898 name);
1899 return NULL;
1900 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001901 size = p->size;
1902 if (size < 0)
1903 size = -size;
1904 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001905}
1906
1907/* Initialize a frozen module.
1908 Return 1 for succes, 0 if the module is not found, and -1 with
1909 an exception set if the initialization failed.
1910 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00001911
1912int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001913PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001914{
Guido van Rossumcfd0a221996-06-17 17:06:34 +00001915 struct _frozen *p = find_frozen(name);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001916 PyObject *co;
1917 PyObject *m;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001918 int ispackage;
1919 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00001920
1921 if (p == NULL)
1922 return 0;
Guido van Rossum8f4d3312001-10-18 18:54:11 +00001923 if (p->code == NULL) {
1924 PyErr_Format(PyExc_ImportError,
1925 "Excluded frozen object named %.200s",
1926 name);
1927 return -1;
1928 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001929 size = p->size;
1930 ispackage = (size < 0);
1931 if (ispackage)
1932 size = -size;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001933 if (Py_VerboseFlag)
Guido van Rossum2f3667a1998-10-12 18:23:55 +00001934 PySys_WriteStderr("import %s # frozen%s\n",
Guido van Rossuma5568d31998-03-05 03:45:08 +00001935 name, ispackage ? " package" : "");
1936 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001937 if (co == NULL)
1938 return -1;
Guido van Rossum79f25d91997-04-29 20:08:16 +00001939 if (!PyCode_Check(co)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001940 PyErr_Format(PyExc_TypeError,
1941 "frozen object %.200s is not a code object",
1942 name);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001943 goto err_return;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001944 }
Guido van Rossuma5568d31998-03-05 03:45:08 +00001945 if (ispackage) {
1946 /* Set __path__ to the package name */
Benjamin Petersond968e272008-11-05 22:48:33 +00001947 PyObject *d, *s, *l;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001948 int err;
1949 m = PyImport_AddModule(name);
1950 if (m == NULL)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001951 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001952 d = PyModule_GetDict(m);
Martin v. Löwis5b222132007-06-10 09:51:05 +00001953 s = PyUnicode_InternFromString(name);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001954 if (s == NULL)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001955 goto err_return;
Benjamin Petersond968e272008-11-05 22:48:33 +00001956 l = PyList_New(1);
1957 if (l == NULL) {
1958 Py_DECREF(s);
1959 goto err_return;
1960 }
1961 PyList_SET_ITEM(l, 0, s);
1962 err = PyDict_SetItemString(d, "__path__", l);
1963 Py_DECREF(l);
Guido van Rossuma5568d31998-03-05 03:45:08 +00001964 if (err != 0)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001965 goto err_return;
Guido van Rossuma5568d31998-03-05 03:45:08 +00001966 }
Guido van Rossume32bf6e1998-02-11 05:53:02 +00001967 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001968 if (m == NULL)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001969 goto err_return;
1970 Py_DECREF(co);
Guido van Rossum79f25d91997-04-29 20:08:16 +00001971 Py_DECREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001972 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001973err_return:
1974 Py_DECREF(co);
1975 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00001976}
Guido van Rossum74e6a111994-08-29 12:54:38 +00001977
1978
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001979/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001980 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00001981
Guido van Rossum79f25d91997-04-29 20:08:16 +00001982PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00001983PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00001984{
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001985 PyObject *pname;
1986 PyObject *result;
1987
Martin v. Löwis5b222132007-06-10 09:51:05 +00001988 pname = PyUnicode_FromString(name);
Neal Norwitza11e4c12003-03-23 14:31:01 +00001989 if (pname == NULL)
1990 return NULL;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00001991 result = PyImport_Import(pname);
1992 Py_DECREF(pname);
1993 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001994}
1995
Christian Heimes072c0f12008-01-03 23:01:04 +00001996/* Import a module without blocking
1997 *
1998 * At first it tries to fetch the module from sys.modules. If the module was
1999 * never loaded before it loads it with PyImport_ImportModule() unless another
2000 * thread holds the import lock. In the latter case the function raises an
2001 * ImportError instead of blocking.
2002 *
2003 * Returns the module object with incremented ref count.
2004 */
2005PyObject *
2006PyImport_ImportModuleNoBlock(const char *name)
2007{
2008 PyObject *result;
2009 PyObject *modules;
2010 long me;
2011
2012 /* Try to get the module from sys.modules[name] */
2013 modules = PyImport_GetModuleDict();
2014 if (modules == NULL)
2015 return NULL;
2016
2017 result = PyDict_GetItemString(modules, name);
2018 if (result != NULL) {
2019 Py_INCREF(result);
2020 return result;
2021 }
2022 else {
2023 PyErr_Clear();
2024 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002025#ifdef WITH_THREAD
Christian Heimes072c0f12008-01-03 23:01:04 +00002026 /* check the import lock
2027 * me might be -1 but I ignore the error here, the lock function
2028 * takes care of the problem */
2029 me = PyThread_get_thread_ident();
2030 if (import_lock_thread == -1 || import_lock_thread == me) {
2031 /* no thread or me is holding the lock */
2032 return PyImport_ImportModule(name);
2033 }
2034 else {
2035 PyErr_Format(PyExc_ImportError,
2036 "Failed to import %.200s because the import lock"
2037 "is held by another thread.",
2038 name);
2039 return NULL;
2040 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002041#else
2042 return PyImport_ImportModule(name);
2043#endif
Christian Heimes072c0f12008-01-03 23:01:04 +00002044}
2045
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002046/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002047static PyObject *get_parent(PyObject *globals, char *buf,
2048 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002049static PyObject *load_next(PyObject *mod, PyObject *altmod,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002050 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002051static int mark_miss(char *name);
2052static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002053 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002054static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002055
2056/* The Magnum Opus of dotted-name import :-) */
2057
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002058static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002059import_module_level(char *name, PyObject *globals, PyObject *locals,
2060 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002061{
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002062 char buf[MAXPATHLEN+1];
Martin v. Löwis18e16552006-02-15 17:27:45 +00002063 Py_ssize_t buflen = 0;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002064 PyObject *parent, *head, *next, *tail;
2065
Christian Heimes454f37b2008-01-10 00:10:02 +00002066 if (strchr(name, '/') != NULL
2067#ifdef MS_WINDOWS
2068 || strchr(name, '\\') != NULL
2069#endif
2070 ) {
2071 PyErr_SetString(PyExc_ImportError,
2072 "Import by filename is not supported.");
2073 return NULL;
2074 }
2075
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002076 parent = get_parent(globals, buf, &buflen, level);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002077 if (parent == NULL)
2078 return NULL;
2079
2080 head = load_next(parent, Py_None, &name, buf, &buflen);
2081 if (head == NULL)
2082 return NULL;
2083
2084 tail = head;
2085 Py_INCREF(tail);
2086 while (name) {
2087 next = load_next(tail, tail, &name, buf, &buflen);
2088 Py_DECREF(tail);
2089 if (next == NULL) {
2090 Py_DECREF(head);
2091 return NULL;
2092 }
2093 tail = next;
2094 }
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002095 if (tail == Py_None) {
2096 /* If tail is Py_None, both get_parent and load_next found
2097 an empty module name: someone called __import__("") or
2098 doctored faulty bytecode */
2099 Py_DECREF(tail);
2100 Py_DECREF(head);
2101 PyErr_SetString(PyExc_ValueError,
2102 "Empty module name");
2103 return NULL;
2104 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002105
2106 if (fromlist != NULL) {
2107 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2108 fromlist = NULL;
2109 }
2110
2111 if (fromlist == NULL) {
2112 Py_DECREF(tail);
2113 return head;
2114 }
2115
2116 Py_DECREF(head);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002117 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002118 Py_DECREF(tail);
2119 return NULL;
2120 }
2121
2122 return tail;
2123}
2124
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002125PyObject *
2126PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
2127 PyObject *fromlist, int level)
2128{
2129 PyObject *result;
2130 lock_import();
2131 result = import_module_level(name, globals, locals, fromlist, level);
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00002132 if (unlock_import() < 0) {
2133 Py_XDECREF(result);
2134 PyErr_SetString(PyExc_RuntimeError,
2135 "not holding the import lock");
2136 return NULL;
2137 }
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002138 return result;
2139}
2140
Fred Drake87590902004-05-28 20:21:36 +00002141/* Return the package that an import is being performed in. If globals comes
2142 from the module foo.bar.bat (not itself a package), this returns the
2143 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002144 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002145
2146 The *name* of the returned package is returned in buf, with the length of
2147 the name in *p_buflen.
2148
2149 If globals doesn't come from a package or a module in a package, or a
2150 corresponding entry is not found in sys.modules, Py_None is returned.
2151*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002152static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002153get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002154{
2155 static PyObject *namestr = NULL;
2156 static PyObject *pathstr = NULL;
Nick Coghlande10c852007-12-04 12:22:52 +00002157 static PyObject *pkgstr = NULL;
2158 PyObject *pkgname, *modname, *modpath, *modules, *parent;
Georg Brandl2ee470f2008-07-16 12:55:28 +00002159 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002160
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002161 if (globals == NULL || !PyDict_Check(globals) || !level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002162 return Py_None;
2163
2164 if (namestr == NULL) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00002165 namestr = PyUnicode_InternFromString("__name__");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002166 if (namestr == NULL)
2167 return NULL;
2168 }
2169 if (pathstr == NULL) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00002170 pathstr = PyUnicode_InternFromString("__path__");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002171 if (pathstr == NULL)
2172 return NULL;
2173 }
Nick Coghlande10c852007-12-04 12:22:52 +00002174 if (pkgstr == NULL) {
2175 pkgstr = PyUnicode_InternFromString("__package__");
2176 if (pkgstr == NULL)
2177 return NULL;
2178 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002179
2180 *buf = '\0';
2181 *p_buflen = 0;
Nick Coghlande10c852007-12-04 12:22:52 +00002182 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002183
Nick Coghlande10c852007-12-04 12:22:52 +00002184 if ((pkgname != NULL) && (pkgname != Py_None)) {
2185 /* __package__ is set, so use it */
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002186 char *pkgname_str;
Nick Coghlande10c852007-12-04 12:22:52 +00002187 Py_ssize_t len;
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002188
Nick Coghlande10c852007-12-04 12:22:52 +00002189 if (!PyUnicode_Check(pkgname)) {
2190 PyErr_SetString(PyExc_ValueError,
2191 "__package__ set to non-string");
2192 return NULL;
2193 }
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00002194 pkgname_str = _PyUnicode_AsStringAndSize(pkgname, &len);
Nick Coghlande10c852007-12-04 12:22:52 +00002195 if (len == 0) {
2196 if (level > 0) {
2197 PyErr_SetString(PyExc_ValueError,
2198 "Attempted relative import in non-package");
2199 return NULL;
2200 }
2201 return Py_None;
2202 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002203 if (len > MAXPATHLEN) {
2204 PyErr_SetString(PyExc_ValueError,
Nick Coghlande10c852007-12-04 12:22:52 +00002205 "Package name too long");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002206 return NULL;
2207 }
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002208 strcpy(buf, pkgname_str);
Nick Coghlande10c852007-12-04 12:22:52 +00002209 } else {
2210 /* __package__ not set, so figure it out and set it */
2211 modname = PyDict_GetItem(globals, namestr);
2212 if (modname == NULL || !PyUnicode_Check(modname))
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002213 return Py_None;
Nick Coghlande10c852007-12-04 12:22:52 +00002214
2215 modpath = PyDict_GetItem(globals, pathstr);
2216 if (modpath != NULL) {
2217 /* __path__ is set, so modname is already the package name */
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002218 char *modname_str;
2219 Py_ssize_t len;
Nick Coghlande10c852007-12-04 12:22:52 +00002220 int error;
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002221
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00002222 modname_str = _PyUnicode_AsStringAndSize(modname, &len);
Nick Coghlande10c852007-12-04 12:22:52 +00002223 if (len > MAXPATHLEN) {
2224 PyErr_SetString(PyExc_ValueError,
2225 "Module name too long");
2226 return NULL;
2227 }
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002228 strcpy(buf, modname_str);
Nick Coghlande10c852007-12-04 12:22:52 +00002229 error = PyDict_SetItem(globals, pkgstr, modname);
2230 if (error) {
2231 PyErr_SetString(PyExc_ValueError,
2232 "Could not set __package__");
2233 return NULL;
2234 }
2235 } else {
2236 /* Normal module, so work out the package name if any */
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00002237 char *start = _PyUnicode_AsString(modname);
Nick Coghlande10c852007-12-04 12:22:52 +00002238 char *lastdot = strrchr(start, '.');
2239 size_t len;
2240 int error;
2241 if (lastdot == NULL && level > 0) {
2242 PyErr_SetString(PyExc_ValueError,
2243 "Attempted relative import in non-package");
2244 return NULL;
2245 }
2246 if (lastdot == NULL) {
2247 error = PyDict_SetItem(globals, pkgstr, Py_None);
2248 if (error) {
2249 PyErr_SetString(PyExc_ValueError,
2250 "Could not set __package__");
2251 return NULL;
2252 }
2253 return Py_None;
2254 }
2255 len = lastdot - start;
2256 if (len >= MAXPATHLEN) {
2257 PyErr_SetString(PyExc_ValueError,
2258 "Module name too long");
2259 return NULL;
2260 }
2261 strncpy(buf, start, len);
2262 buf[len] = '\0';
2263 pkgname = PyUnicode_FromString(buf);
2264 if (pkgname == NULL) {
2265 return NULL;
2266 }
2267 error = PyDict_SetItem(globals, pkgstr, pkgname);
2268 Py_DECREF(pkgname);
2269 if (error) {
2270 PyErr_SetString(PyExc_ValueError,
2271 "Could not set __package__");
2272 return NULL;
2273 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002274 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002275 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002276 while (--level > 0) {
2277 char *dot = strrchr(buf, '.');
2278 if (dot == NULL) {
2279 PyErr_SetString(PyExc_ValueError,
Thomas Wouters89f507f2006-12-13 04:49:30 +00002280 "Attempted relative import beyond "
2281 "toplevel package");
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002282 return NULL;
2283 }
2284 *dot = '\0';
2285 }
2286 *p_buflen = strlen(buf);
2287
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002288 modules = PyImport_GetModuleDict();
2289 parent = PyDict_GetItemString(modules, buf);
Georg Brandl2ee470f2008-07-16 12:55:28 +00002290 if (parent == NULL) {
2291 if (orig_level < 1) {
2292 PyObject *err_msg = PyBytes_FromFormat(
2293 "Parent module '%.200s' not found "
2294 "while handling absolute import", buf);
2295 if (err_msg == NULL) {
2296 return NULL;
2297 }
2298 if (!PyErr_WarnEx(PyExc_RuntimeWarning,
2299 PyBytes_AsString(err_msg), 1)) {
2300 *buf = '\0';
2301 *p_buflen = 0;
2302 parent = Py_None;
2303 }
2304 Py_DECREF(err_msg);
2305 } else {
2306 PyErr_Format(PyExc_SystemError,
2307 "Parent module '%.200s' not loaded, "
2308 "cannot perform relative import", buf);
2309 }
2310 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002311 return parent;
2312 /* We expect, but can't guarantee, if parent != None, that:
2313 - parent.__name__ == buf
2314 - parent.__dict__ is globals
2315 If this is violated... Who cares? */
2316}
2317
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002318/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002319static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002320load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Martin v. Löwis18e16552006-02-15 17:27:45 +00002321 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002322{
2323 char *name = *p_name;
2324 char *dot = strchr(name, '.');
Fred Drake4c82b232000-06-30 16:18:57 +00002325 size_t len;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002326 char *p;
2327 PyObject *result;
2328
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002329 if (strlen(name) == 0) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002330 /* completely empty module name should only happen in
2331 'from . import' (or '__import__("")')*/
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002332 Py_INCREF(mod);
2333 *p_name = NULL;
2334 return mod;
2335 }
2336
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002337 if (dot == NULL) {
2338 *p_name = NULL;
2339 len = strlen(name);
2340 }
2341 else {
2342 *p_name = dot+1;
2343 len = dot-name;
2344 }
Guido van Rossum111c20b1998-04-11 17:38:22 +00002345 if (len == 0) {
2346 PyErr_SetString(PyExc_ValueError,
2347 "Empty module name");
2348 return NULL;
2349 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002350
2351 p = buf + *p_buflen;
2352 if (p != buf)
2353 *p++ = '.';
2354 if (p+len-buf >= MAXPATHLEN) {
2355 PyErr_SetString(PyExc_ValueError,
2356 "Module name too long");
2357 return NULL;
2358 }
2359 strncpy(p, name, len);
2360 p[len] = '\0';
2361 *p_buflen = p+len-buf;
2362
2363 result = import_submodule(mod, p, buf);
2364 if (result == Py_None && altmod != mod) {
2365 Py_DECREF(result);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002366 /* Here, altmod must be None and mod must not be None */
Guido van Rossum0c819451997-09-07 06:16:57 +00002367 result = import_submodule(altmod, p, p);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002368 if (result != NULL && result != Py_None) {
2369 if (mark_miss(buf) != 0) {
2370 Py_DECREF(result);
2371 return NULL;
2372 }
2373 strncpy(buf, name, len);
2374 buf[len] = '\0';
2375 *p_buflen = len;
2376 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002377 }
2378 if (result == NULL)
2379 return NULL;
2380
2381 if (result == Py_None) {
2382 Py_DECREF(result);
2383 PyErr_Format(PyExc_ImportError,
2384 "No module named %.200s", name);
2385 return NULL;
2386 }
2387
2388 return result;
2389}
2390
2391static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002392mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002393{
2394 PyObject *modules = PyImport_GetModuleDict();
2395 return PyDict_SetItemString(modules, name, Py_None);
2396}
2397
2398static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002399ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002400 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002401{
2402 int i;
2403
2404 if (!PyObject_HasAttrString(mod, "__path__"))
2405 return 1;
2406
2407 for (i = 0; ; i++) {
2408 PyObject *item = PySequence_GetItem(fromlist, i);
2409 int hasit;
2410 if (item == NULL) {
2411 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2412 PyErr_Clear();
2413 return 1;
2414 }
2415 return 0;
2416 }
Martin v. Löwis5b222132007-06-10 09:51:05 +00002417 if (!PyUnicode_Check(item)) {
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002418 PyErr_SetString(PyExc_TypeError,
Neal Norwitz80e7f272007-08-26 06:45:23 +00002419 "Item in ``from list'' not a string");
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002420 Py_DECREF(item);
2421 return 0;
2422 }
Martin v. Löwis5b222132007-06-10 09:51:05 +00002423 if (PyUnicode_AS_UNICODE(item)[0] == '*') {
Guido van Rossum9905ef91997-09-08 16:07:11 +00002424 PyObject *all;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002425 Py_DECREF(item);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002426 /* See if the package defines __all__ */
2427 if (recursive)
2428 continue; /* Avoid endless recursion */
2429 all = PyObject_GetAttrString(mod, "__all__");
2430 if (all == NULL)
2431 PyErr_Clear();
2432 else {
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002433 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
Guido van Rossum9905ef91997-09-08 16:07:11 +00002434 Py_DECREF(all);
Martin v. Löwis83969ee2004-03-23 16:28:13 +00002435 if (!ret)
2436 return 0;
Guido van Rossum9905ef91997-09-08 16:07:11 +00002437 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002438 continue;
2439 }
2440 hasit = PyObject_HasAttr(mod, item);
2441 if (!hasit) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00002442 PyObject *item8;
2443 char *subname;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002444 PyObject *submod;
2445 char *p;
Martin v. Löwis5b222132007-06-10 09:51:05 +00002446 if (!Py_FileSystemDefaultEncoding) {
2447 item8 = PyUnicode_EncodeASCII(PyUnicode_AsUnicode(item),
2448 PyUnicode_GetSize(item),
Martin v. Löwis427dbff2007-06-12 05:53:00 +00002449 NULL);
Martin v. Löwis5b222132007-06-10 09:51:05 +00002450 } else {
Guido van Rossum98297ee2007-11-06 21:34:58 +00002451 item8 = PyUnicode_AsEncodedString(item,
2452 Py_FileSystemDefaultEncoding, NULL);
Martin v. Löwis5b222132007-06-10 09:51:05 +00002453 }
2454 if (!item8) {
2455 PyErr_SetString(PyExc_ValueError, "Cannot encode path item");
2456 return 0;
2457 }
Christian Heimes72b710a2008-05-26 13:28:38 +00002458 subname = PyBytes_AS_STRING(item8);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002459 if (buflen + strlen(subname) >= MAXPATHLEN) {
2460 PyErr_SetString(PyExc_ValueError,
2461 "Module name too long");
2462 Py_DECREF(item);
2463 return 0;
2464 }
2465 p = buf + buflen;
2466 *p++ = '.';
2467 strcpy(p, subname);
2468 submod = import_submodule(mod, subname, buf);
Martin v. Löwis5b222132007-06-10 09:51:05 +00002469 Py_DECREF(item8);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002470 Py_XDECREF(submod);
2471 if (submod == NULL) {
2472 Py_DECREF(item);
2473 return 0;
2474 }
2475 }
2476 Py_DECREF(item);
2477 }
2478
Guido van Rossuma7f2e811997-10-03 15:33:32 +00002479 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002480}
2481
Neil Schemenauer00b09662003-06-16 21:03:07 +00002482static int
2483add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
2484 PyObject *modules)
2485{
2486 if (mod == Py_None)
2487 return 1;
2488 /* Irrespective of the success of this load, make a
2489 reference to it in the parent package module. A copy gets
2490 saved in the modules dictionary under the full name, so get a
2491 reference from there, if need be. (The exception is when the
2492 load failed with a SyntaxError -- then there's no trace in
2493 sys.modules. In that case, of course, do nothing extra.) */
2494 if (submod == NULL) {
2495 submod = PyDict_GetItemString(modules, fullname);
2496 if (submod == NULL)
2497 return 1;
2498 }
2499 if (PyModule_Check(mod)) {
2500 /* We can't use setattr here since it can give a
2501 * spurious warning if the submodule name shadows a
2502 * builtin name */
2503 PyObject *dict = PyModule_GetDict(mod);
2504 if (!dict)
2505 return 0;
2506 if (PyDict_SetItemString(dict, subname, submod) < 0)
2507 return 0;
2508 }
2509 else {
2510 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2511 return 0;
2512 }
2513 return 1;
2514}
2515
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002516static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002517import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002518{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002519 PyObject *modules = PyImport_GetModuleDict();
Neil Schemenauer00b09662003-06-16 21:03:07 +00002520 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002521
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002522 /* Require:
2523 if mod == None: subname == fullname
2524 else: mod.__name__ + "." + subname == fullname
2525 */
2526
Tim Peters50d8d372001-02-28 05:34:27 +00002527 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002528 Py_INCREF(m);
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002529 }
2530 else {
Just van Rossum52e14d62002-12-30 22:08:05 +00002531 PyObject *path, *loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002532 char buf[MAXPATHLEN+1];
2533 struct filedescr *fdp;
2534 FILE *fp = NULL;
2535
Guido van Rossum9c0afe51998-05-19 15:09:05 +00002536 if (mod == Py_None)
2537 path = NULL;
2538 else {
2539 path = PyObject_GetAttrString(mod, "__path__");
2540 if (path == NULL) {
2541 PyErr_Clear();
2542 Py_INCREF(Py_None);
2543 return Py_None;
2544 }
2545 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002546
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002547 buf[0] = '\0';
Just van Rossum52e14d62002-12-30 22:08:05 +00002548 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2549 &fp, &loader);
Guido van Rossumb68cd421998-07-01 17:36:26 +00002550 Py_XDECREF(path);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002551 if (fdp == NULL) {
2552 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2553 return NULL;
2554 PyErr_Clear();
2555 Py_INCREF(Py_None);
2556 return Py_None;
2557 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002558 m = load_module(fullname, fp, buf, fdp->type, loader);
2559 Py_XDECREF(loader);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002560 if (fp)
2561 fclose(fp);
Neil Schemenauer00b09662003-06-16 21:03:07 +00002562 if (!add_submodule(mod, m, fullname, subname, modules)) {
2563 Py_XDECREF(m);
2564 m = NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002565 }
Guido van Rossum74e6a111994-08-29 12:54:38 +00002566 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002567
2568 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002569}
2570
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002571
2572/* Re-import a module of any kind and return its module object, WITH
2573 INCREMENTED REFERENCE COUNT */
2574
Guido van Rossum79f25d91997-04-29 20:08:16 +00002575PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002576PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002577{
Guido van Rossumd8faa362007-04-27 19:54:29 +00002578 PyInterpreterState *interp = PyThreadState_Get()->interp;
2579 PyObject *modules_reloading = interp->modules_reloading;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002580 PyObject *modules = PyImport_GetModuleDict();
Guido van Rossumd8faa362007-04-27 19:54:29 +00002581 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
Guido van Rossum222ef561997-09-06 19:41:09 +00002582 char *name, *subname;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002583 char buf[MAXPATHLEN+1];
2584 struct filedescr *fdp;
2585 FILE *fp = NULL;
Tim Peters1cd70172004-08-02 03:52:12 +00002586 PyObject *newm;
Guido van Rossumd8faa362007-04-27 19:54:29 +00002587
2588 if (modules_reloading == NULL) {
2589 Py_FatalError("PyImport_ReloadModule: "
Guido van Rossume7ba4952007-06-06 23:52:48 +00002590 "no modules_reloading dictionary!");
Guido van Rossumd8faa362007-04-27 19:54:29 +00002591 return NULL;
2592 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002593
Guido van Rossum79f25d91997-04-29 20:08:16 +00002594 if (m == NULL || !PyModule_Check(m)) {
2595 PyErr_SetString(PyExc_TypeError,
2596 "reload() argument must be module");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002597 return NULL;
2598 }
Neal Norwitz5616c6d2007-08-26 05:32:41 +00002599 name = (char*)PyModule_GetName(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002600 if (name == NULL)
2601 return NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002602 if (m != PyDict_GetItemString(modules, name)) {
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002603 PyErr_Format(PyExc_ImportError,
2604 "reload(): module %.200s not in sys.modules",
2605 name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002606 return NULL;
2607 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00002608 existing_m = PyDict_GetItemString(modules_reloading, name);
2609 if (existing_m != NULL) {
2610 /* Due to a recursive reload, this module is already
2611 being reloaded. */
2612 Py_INCREF(existing_m);
2613 return existing_m;
2614 }
2615 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
2616 return NULL;
2617
Guido van Rossum222ef561997-09-06 19:41:09 +00002618 subname = strrchr(name, '.');
2619 if (subname == NULL)
2620 subname = name;
2621 else {
2622 PyObject *parentname, *parent;
Christian Heimesc4cb3b82007-11-04 12:10:01 +00002623 parentname = PyUnicode_FromStringAndSize(name, (subname-name));
Guido van Rossumd8faa362007-04-27 19:54:29 +00002624 if (parentname == NULL) {
2625 imp_modules_reloading_clear();
Guido van Rossum222ef561997-09-06 19:41:09 +00002626 return NULL;
Guido van Rossumd8faa362007-04-27 19:54:29 +00002627 }
Guido van Rossum222ef561997-09-06 19:41:09 +00002628 parent = PyDict_GetItem(modules, parentname);
2629 if (parent == NULL) {
2630 PyErr_Format(PyExc_ImportError,
2631 "reload(): parent %.200s not in sys.modules",
Marc-André Lemburg4cc0f242008-08-07 18:54:33 +00002632 _PyUnicode_AsString(parentname));
Georg Brandl0c55f292005-09-14 06:56:20 +00002633 Py_DECREF(parentname);
Guido van Rossume7ba4952007-06-06 23:52:48 +00002634 imp_modules_reloading_clear();
Guido van Rossum222ef561997-09-06 19:41:09 +00002635 return NULL;
2636 }
Georg Brandl0c55f292005-09-14 06:56:20 +00002637 Py_DECREF(parentname);
Guido van Rossum222ef561997-09-06 19:41:09 +00002638 subname++;
2639 path = PyObject_GetAttrString(parent, "__path__");
2640 if (path == NULL)
2641 PyErr_Clear();
2642 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002643 buf[0] = '\0';
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002644 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
Guido van Rossum222ef561997-09-06 19:41:09 +00002645 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002646
2647 if (fdp == NULL) {
2648 Py_XDECREF(loader);
Guido van Rossumd8faa362007-04-27 19:54:29 +00002649 imp_modules_reloading_clear();
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002650 return NULL;
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00002651 }
2652
2653 newm = load_module(name, fp, buf, fdp->type, loader);
2654 Py_XDECREF(loader);
2655
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002656 if (fp)
2657 fclose(fp);
Tim Peters1cd70172004-08-02 03:52:12 +00002658 if (newm == NULL) {
2659 /* load_module probably removed name from modules because of
2660 * the error. Put back the original module object. We're
2661 * going to return NULL in this case regardless of whether
2662 * replacing name succeeds, so the return value is ignored.
2663 */
2664 PyDict_SetItemString(modules, name, m);
2665 }
Guido van Rossumd8faa362007-04-27 19:54:29 +00002666 imp_modules_reloading_clear();
Tim Peters1cd70172004-08-02 03:52:12 +00002667 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002668}
2669
2670
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002671/* Higher-level import emulator which emulates the "import" statement
2672 more accurately -- it invokes the __import__() function from the
2673 builtins of the current globals. This means that the import is
2674 done using whatever import hooks are installed in the current
Guido van Rossum6058eb41998-12-21 19:51:00 +00002675 environment, e.g. by "rexec".
2676 A dummy list ["__doc__"] is passed as the 4th argument so that
Neal Norwitz80e7f272007-08-26 06:45:23 +00002677 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00002678 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002679
2680PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002681PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002682{
2683 static PyObject *silly_list = NULL;
2684 static PyObject *builtins_str = NULL;
2685 static PyObject *import_str = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002686 PyObject *globals = NULL;
2687 PyObject *import = NULL;
2688 PyObject *builtins = NULL;
2689 PyObject *r = NULL;
2690
2691 /* Initialize constant string objects */
2692 if (silly_list == NULL) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00002693 import_str = PyUnicode_InternFromString("__import__");
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002694 if (import_str == NULL)
2695 return NULL;
Martin v. Löwis5b222132007-06-10 09:51:05 +00002696 builtins_str = PyUnicode_InternFromString("__builtins__");
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002697 if (builtins_str == NULL)
2698 return NULL;
2699 silly_list = Py_BuildValue("[s]", "__doc__");
2700 if (silly_list == NULL)
2701 return NULL;
2702 }
2703
2704 /* Get the builtins from current globals */
2705 globals = PyEval_GetGlobals();
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002706 if (globals != NULL) {
Guido van Rossum66468561998-10-22 15:46:50 +00002707 Py_INCREF(globals);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002708 builtins = PyObject_GetItem(globals, builtins_str);
2709 if (builtins == NULL)
2710 goto err;
2711 }
2712 else {
2713 /* No globals -- use standard builtins, and fake globals */
2714 PyErr_Clear();
2715
Georg Brandl1a3284e2007-12-02 09:40:06 +00002716 builtins = PyImport_ImportModuleLevel("builtins",
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002717 NULL, NULL, NULL, 0);
Guido van Rossum85cd1d62001-02-20 21:43:24 +00002718 if (builtins == NULL)
2719 return NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002720 globals = Py_BuildValue("{OO}", builtins_str, builtins);
2721 if (globals == NULL)
2722 goto err;
2723 }
2724
2725 /* Get the __import__ function from the builtins */
Tim Peters6d6c1a32001-08-02 04:15:00 +00002726 if (PyDict_Check(builtins)) {
Fred Drakea76ba6e2001-03-06 06:31:15 +00002727 import = PyObject_GetItem(builtins, import_str);
Tim Peters6d6c1a32001-08-02 04:15:00 +00002728 if (import == NULL)
2729 PyErr_SetObject(PyExc_KeyError, import_str);
2730 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002731 else
Fred Drakea76ba6e2001-03-06 06:31:15 +00002732 import = PyObject_GetAttr(builtins, import_str);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002733 if (import == NULL)
2734 goto err;
2735
Christian Heimes072c0f12008-01-03 23:01:04 +00002736 /* Call the __import__ function with the proper argument list
2737 * Always use absolute import here. */
2738 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
2739 globals, silly_list, 0, NULL);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002740
2741 err:
2742 Py_XDECREF(globals);
2743 Py_XDECREF(builtins);
2744 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00002745
Guido van Rossumd47a0a81997-08-14 20:11:26 +00002746 return r;
2747}
2748
2749
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002750/* Module 'imp' provides Python access to the primitives used for
2751 importing modules.
2752*/
2753
Guido van Rossum79f25d91997-04-29 20:08:16 +00002754static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002755imp_get_magic(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002756{
2757 char buf[4];
2758
Guido van Rossum96774c12000-05-01 20:19:08 +00002759 buf[0] = (char) ((pyc_magic >> 0) & 0xff);
2760 buf[1] = (char) ((pyc_magic >> 8) & 0xff);
2761 buf[2] = (char) ((pyc_magic >> 16) & 0xff);
2762 buf[3] = (char) ((pyc_magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002763
Christian Heimes72b710a2008-05-26 13:28:38 +00002764 return PyBytes_FromStringAndSize(buf, 4);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002765}
2766
Guido van Rossum79f25d91997-04-29 20:08:16 +00002767static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00002768imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002769{
Guido van Rossum79f25d91997-04-29 20:08:16 +00002770 PyObject *list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002771 struct filedescr *fdp;
2772
Guido van Rossum79f25d91997-04-29 20:08:16 +00002773 list = PyList_New(0);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002774 if (list == NULL)
2775 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002776 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
2777 PyObject *item = Py_BuildValue("ssi",
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002778 fdp->suffix, fdp->mode, fdp->type);
2779 if (item == NULL) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002780 Py_DECREF(list);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002781 return NULL;
2782 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002783 if (PyList_Append(list, item) < 0) {
2784 Py_DECREF(list);
2785 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002786 return NULL;
2787 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002788 Py_DECREF(item);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002789 }
2790 return list;
2791}
2792
Guido van Rossum79f25d91997-04-29 20:08:16 +00002793static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002794call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002795{
Tim Petersdbd9ba62000-07-09 03:09:57 +00002796 extern int fclose(FILE *);
Guido van Rossum79f25d91997-04-29 20:08:16 +00002797 PyObject *fob, *ret;
Amaury Forgeot d'Arc9a5499b2008-11-11 23:04:59 +00002798 PyObject *pathobj;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002799 struct filedescr *fdp;
2800 char pathname[MAXPATHLEN+1];
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002801 FILE *fp = NULL;
Guido van Rossum40d20bc2007-10-22 00:09:51 +00002802 int fd = -1;
Brett Cannon3bb42d92007-10-20 03:43:15 +00002803 char *found_encoding = NULL;
Guido van Rossumce3a72a2007-10-19 23:16:50 +00002804 char *encoding = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002805
2806 pathname[0] = '\0';
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002807 if (path == Py_None)
2808 path = NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00002809 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002810 if (fdp == NULL)
2811 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002812 if (fp != NULL) {
Guido van Rossum40d20bc2007-10-22 00:09:51 +00002813 fd = fileno(fp);
2814 if (fd != -1)
2815 fd = dup(fd);
2816 fclose(fp);
2817 fp = NULL;
2818 }
2819 if (fd != -1) {
Guido van Rossumce3a72a2007-10-19 23:16:50 +00002820 if (strchr(fdp->mode, 'b') == NULL) {
Brett Cannon3bb42d92007-10-20 03:43:15 +00002821 /* PyTokenizer_FindEncoding() returns PyMem_MALLOC'ed
2822 memory. */
Guido van Rossum40d20bc2007-10-22 00:09:51 +00002823 found_encoding = PyTokenizer_FindEncoding(fd);
2824 lseek(fd, 0, 0); /* Reset position */
Amaury Forgeot d'Arc1b933ed2008-09-04 22:34:09 +00002825 if (found_encoding == NULL && PyErr_Occurred())
2826 return NULL;
Brett Cannon3bb42d92007-10-20 03:43:15 +00002827 encoding = (found_encoding != NULL) ? found_encoding :
Guido van Rossumce3a72a2007-10-19 23:16:50 +00002828 (char*)PyUnicode_GetDefaultEncoding();
2829 }
Guido van Rossum40d20bc2007-10-22 00:09:51 +00002830 fob = PyFile_FromFd(fd, pathname, fdp->mode, -1,
Guido van Rossume7fc50f2007-12-03 22:54:21 +00002831 (char*)encoding, NULL, NULL, 1);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002832 if (fob == NULL) {
Guido van Rossum40d20bc2007-10-22 00:09:51 +00002833 close(fd);
Brett Cannon3bb42d92007-10-20 03:43:15 +00002834 PyMem_FREE(found_encoding);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002835 return NULL;
2836 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002837 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002838 else {
2839 fob = Py_None;
2840 Py_INCREF(fob);
Tim Peters50d8d372001-02-28 05:34:27 +00002841 }
Amaury Forgeot d'Arc9a5499b2008-11-11 23:04:59 +00002842 pathobj = PyUnicode_DecodeFSDefault(pathname);
2843 ret = Py_BuildValue("NN(ssi)",
2844 fob, pathobj, fdp->suffix, fdp->mode, fdp->type);
Brett Cannon3bb42d92007-10-20 03:43:15 +00002845 PyMem_FREE(found_encoding);
2846
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002847 return ret;
2848}
2849
Guido van Rossum79f25d91997-04-29 20:08:16 +00002850static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002851imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002852{
2853 char *name;
2854 PyObject *path = NULL;
Amaury Forgeot d'Arc9a5499b2008-11-11 23:04:59 +00002855 if (!PyArg_ParseTuple(args, "es|O:find_module",
2856 Py_FileSystemDefaultEncoding, &name,
2857 &path))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002858 return NULL;
2859 return call_find_module(name, path);
2860}
2861
2862static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002863imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002864{
2865 char *name;
2866 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002867 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002868 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002869 return NULL;
2870 ret = init_builtin(name);
2871 if (ret < 0)
2872 return NULL;
2873 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002874 Py_INCREF(Py_None);
2875 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002876 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002877 m = PyImport_AddModule(name);
2878 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002879 return m;
2880}
2881
Guido van Rossum79f25d91997-04-29 20:08:16 +00002882static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002883imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002884{
2885 char *name;
2886 int ret;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002887 PyObject *m;
Guido van Rossum43713e52000-02-29 13:59:29 +00002888 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002889 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002890 ret = PyImport_ImportFrozenModule(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002891 if (ret < 0)
2892 return NULL;
2893 if (ret == 0) {
Guido van Rossum79f25d91997-04-29 20:08:16 +00002894 Py_INCREF(Py_None);
2895 return Py_None;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002896 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002897 m = PyImport_AddModule(name);
2898 Py_XINCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002899 return m;
2900}
2901
Guido van Rossum79f25d91997-04-29 20:08:16 +00002902static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002903imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002904{
2905 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00002906
Guido van Rossum43713e52000-02-29 13:59:29 +00002907 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002908 return NULL;
2909 return get_frozen_object(name);
2910}
2911
Guido van Rossum79f25d91997-04-29 20:08:16 +00002912static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002913imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002914{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002915 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00002916 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002917 return NULL;
Christian Heimes217cfd12007-12-02 14:31:20 +00002918 return PyLong_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002919}
2920
Guido van Rossum79f25d91997-04-29 20:08:16 +00002921static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002922imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002923{
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002924 char *name;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002925 struct _frozen *p;
Guido van Rossum43713e52000-02-29 13:59:29 +00002926 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002927 return NULL;
Guido van Rossum323bf5e1998-06-24 03:54:06 +00002928 p = find_frozen(name);
Guido van Rossumb8bff3f2002-04-07 06:34:38 +00002929 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002930}
2931
2932static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002933get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002934{
2935 FILE *fp;
Guido van Rossumda5b8f22007-06-12 23:30:11 +00002936 if (mode[0] == 'U')
2937 mode = "r" PY_STDIOTEXTMODE;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002938 if (fob == NULL) {
2939 fp = fopen(pathname, mode);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002940 }
2941 else {
Guido van Rossumda5b8f22007-06-12 23:30:11 +00002942 int fd = PyObject_AsFileDescriptor(fob);
2943 if (fd == -1)
2944 return NULL;
2945 /* XXX This will leak a FILE struct. Fix this!!!!
2946 (But it doesn't leak a file descrioptor!) */
2947 fp = fdopen(fd, mode);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002948 }
Guido van Rossumda5b8f22007-06-12 23:30:11 +00002949 if (fp == NULL)
2950 PyErr_SetFromErrno(PyExc_IOError);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002951 return fp;
2952}
2953
Guido van Rossum79f25d91997-04-29 20:08:16 +00002954static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002955imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002956{
2957 char *name;
2958 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002959 PyObject *fob = NULL;
2960 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002961 FILE *fp;
Guido van Rossumda5b8f22007-06-12 23:30:11 +00002962 if (!PyArg_ParseTuple(args, "ss|O:load_compiled",
2963 &name, &pathname, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002964 return NULL;
2965 fp = get_file(pathname, fob, "rb");
2966 if (fp == NULL)
2967 return NULL;
2968 m = load_compiled_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002969 if (fob == NULL)
2970 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002971 return m;
2972}
2973
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002974#ifdef HAVE_DYNAMIC_LOADING
2975
Guido van Rossum79f25d91997-04-29 20:08:16 +00002976static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002977imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002978{
2979 char *name;
2980 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00002981 PyObject *fob = NULL;
2982 PyObject *m;
Guido van Rossum7faeab31995-07-07 22:50:36 +00002983 FILE *fp = NULL;
Guido van Rossumda5b8f22007-06-12 23:30:11 +00002984 if (!PyArg_ParseTuple(args, "ss|O:load_dynamic",
2985 &name, &pathname, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002986 return NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002987 if (fob) {
Guido van Rossum7faeab31995-07-07 22:50:36 +00002988 fp = get_file(pathname, fob, "r");
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002989 if (fp == NULL)
2990 return NULL;
2991 }
Guido van Rossum79f25d91997-04-29 20:08:16 +00002992 m = _PyImport_LoadDynamicModule(name, pathname, fp);
Guido van Rossum7faeab31995-07-07 22:50:36 +00002993 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002994}
2995
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002996#endif /* HAVE_DYNAMIC_LOADING */
2997
Guido van Rossum79f25d91997-04-29 20:08:16 +00002998static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002999imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003000{
3001 char *name;
3002 char *pathname;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003003 PyObject *fob = NULL;
3004 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003005 FILE *fp;
Guido van Rossumda5b8f22007-06-12 23:30:11 +00003006 if (!PyArg_ParseTuple(args, "ss|O:load_source",
3007 &name, &pathname, &fob))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003008 return NULL;
3009 fp = get_file(pathname, fob, "r");
3010 if (fp == NULL)
3011 return NULL;
3012 m = load_source_module(name, pathname, fp);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003013 if (fob == NULL)
3014 fclose(fp);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003015 return m;
3016}
3017
Guido van Rossum79f25d91997-04-29 20:08:16 +00003018static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003019imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003020{
3021 char *name;
3022 PyObject *fob;
3023 char *pathname;
3024 char *suffix; /* Unused */
3025 char *mode;
3026 int type;
3027 FILE *fp;
3028
Guido van Rossum43713e52000-02-29 13:59:29 +00003029 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module",
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003030 &name, &fob, &pathname,
3031 &suffix, &mode, &type))
3032 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003033 if (*mode) {
3034 /* Mode must start with 'r' or 'U' and must not contain '+'.
3035 Implicit in this test is the assumption that the mode
3036 may contain other modifiers like 'b' or 't'. */
3037
3038 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
Jeremy Hylton4ae6fae2002-05-30 17:15:25 +00003039 PyErr_Format(PyExc_ValueError,
3040 "invalid file open mode %.200s", mode);
3041 return NULL;
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003042 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003043 }
3044 if (fob == Py_None)
3045 fp = NULL;
3046 else {
Guido van Rossumda5b8f22007-06-12 23:30:11 +00003047 fp = get_file(NULL, fob, mode);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003048 if (fp == NULL)
3049 return NULL;
3050 }
Just van Rossum52e14d62002-12-30 22:08:05 +00003051 return load_module(name, fp, pathname, type, NULL);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003052}
3053
3054static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003055imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003056{
3057 char *name;
3058 char *pathname;
Guido van Rossum43713e52000-02-29 13:59:29 +00003059 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname))
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003060 return NULL;
3061 return load_package(name, pathname);
3062}
3063
3064static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003065imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003066{
3067 char *name;
Guido van Rossum43713e52000-02-29 13:59:29 +00003068 if (!PyArg_ParseTuple(args, "s:new_module", &name))
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003069 return NULL;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003070 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003071}
3072
Christian Heimes13a7a212008-01-07 17:13:09 +00003073static PyObject *
3074imp_reload(PyObject *self, PyObject *v)
3075{
3076 return PyImport_ReloadModule(v);
3077}
3078
3079PyDoc_STRVAR(doc_reload,
3080"reload(module) -> module\n\
3081\n\
3082Reload the module. The module must have been successfully imported before.");
3083
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003084/* Doc strings */
3085
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003086PyDoc_STRVAR(doc_imp,
3087"This module provides the components needed to build your own\n\
3088__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003089
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003090PyDoc_STRVAR(doc_find_module,
3091"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003092Search for a module. If path is omitted or None, search for a\n\
3093built-in, frozen or special module and continue search in sys.path.\n\
3094The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003095package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003096
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003097PyDoc_STRVAR(doc_load_module,
3098"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003099Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003100The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003101
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003102PyDoc_STRVAR(doc_get_magic,
3103"get_magic() -> string\n\
3104Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003105
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003106PyDoc_STRVAR(doc_get_suffixes,
3107"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003108Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003109that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003110
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003111PyDoc_STRVAR(doc_new_module,
3112"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003113Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003114The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003115
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003116PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00003117"lock_held() -> boolean\n\
3118Return True if the import lock is currently held, else False.\n\
3119On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00003120
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003121PyDoc_STRVAR(doc_acquire_lock,
3122"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00003123Acquires the interpreter's import lock for the current thread.\n\
3124This lock should be used by import hooks to ensure thread-safety\n\
3125when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003126On platforms without threads, this function does nothing.");
3127
3128PyDoc_STRVAR(doc_release_lock,
3129"release_lock() -> None\n\
3130Release the interpreter's import lock.\n\
3131On platforms without threads, this function does nothing.");
3132
Guido van Rossum79f25d91997-04-29 20:08:16 +00003133static PyMethodDef imp_methods[] = {
Neal Norwitz08ea61a2003-02-17 18:18:00 +00003134 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3135 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3136 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3137 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3138 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3139 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3140 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3141 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
Christian Heimes13a7a212008-01-07 17:13:09 +00003142 {"reload", imp_reload, METH_O, doc_reload},
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003143 /* The rest are obsolete */
Neal Norwitz031829d2002-03-31 14:37:44 +00003144 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3145 {"init_builtin", imp_init_builtin, METH_VARARGS},
3146 {"init_frozen", imp_init_frozen, METH_VARARGS},
3147 {"is_builtin", imp_is_builtin, METH_VARARGS},
3148 {"is_frozen", imp_is_frozen, METH_VARARGS},
3149 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003150#ifdef HAVE_DYNAMIC_LOADING
Neal Norwitz031829d2002-03-31 14:37:44 +00003151 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003152#endif
Neal Norwitz031829d2002-03-31 14:37:44 +00003153 {"load_package", imp_load_package, METH_VARARGS},
Neal Norwitz031829d2002-03-31 14:37:44 +00003154 {"load_source", imp_load_source, METH_VARARGS},
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003155 {NULL, NULL} /* sentinel */
3156};
3157
Guido van Rossum1a8791e1998-08-04 22:46:29 +00003158static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003159setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003160{
3161 PyObject *v;
3162 int err;
3163
Christian Heimes217cfd12007-12-02 14:31:20 +00003164 v = PyLong_FromLong((long)value);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003165 err = PyDict_SetItemString(d, name, v);
3166 Py_XDECREF(v);
3167 return err;
3168}
3169
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003170typedef struct {
3171 PyObject_HEAD
3172} NullImporter;
3173
3174static int
3175NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3176{
3177 char *path;
Christian Heimes7d3bc0a2007-11-07 17:26:16 +00003178 Py_ssize_t pathlen;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003179
3180 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3181 return -1;
3182
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00003183 if (!PyArg_ParseTuple(args, "es:NullImporter",
3184 Py_FileSystemDefaultEncoding, &path))
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003185 return -1;
3186
Christian Heimes7d3bc0a2007-11-07 17:26:16 +00003187 pathlen = strlen(path);
3188 if (pathlen == 0) {
Georg Brandl8494d572008-07-19 10:13:15 +00003189 PyMem_Free(path);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003190 PyErr_SetString(PyExc_ImportError, "empty pathname");
3191 return -1;
3192 } else {
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003193 struct stat statbuf;
3194 int rv;
3195
3196 rv = stat(path, &statbuf);
Guido van Rossumc1bdbc32007-11-07 17:46:34 +00003197#ifdef MS_WINDOWS
3198 /* MS Windows stat() chokes on paths like C:\path\. Try to
3199 * recover *one* time by stripping off a trailing slash or
3200 * backslash. http://bugs.python.org/issue1293
3201 */
Christian Heimes7d3bc0a2007-11-07 17:26:16 +00003202 if (rv != 0 && pathlen <= MAXPATHLEN &&
3203 (path[pathlen-1] == '/' || path[pathlen-1] == '\\')) {
3204 char mangled[MAXPATHLEN+1];
3205
3206 strcpy(mangled, path);
3207 mangled[pathlen-1] = '\0';
3208 rv = stat(mangled, &statbuf);
3209 }
Christian Heimes7d3bc0a2007-11-07 17:26:16 +00003210#endif
Georg Brandl8494d572008-07-19 10:13:15 +00003211 PyMem_Free(path);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003212 if (rv == 0) {
3213 /* it exists */
3214 if (S_ISDIR(statbuf.st_mode)) {
3215 /* it's a directory */
3216 PyErr_SetString(PyExc_ImportError,
3217 "existing directory");
3218 return -1;
3219 }
3220 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003221 }
3222 return 0;
3223}
3224
3225static PyObject *
3226NullImporter_find_module(NullImporter *self, PyObject *args)
3227{
3228 Py_RETURN_NONE;
3229}
3230
3231static PyMethodDef NullImporter_methods[] = {
3232 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3233 "Always return None"
3234 },
3235 {NULL} /* Sentinel */
3236};
3237
3238
Christian Heimes9cd17752007-11-18 19:35:23 +00003239PyTypeObject PyNullImporter_Type = {
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00003240 PyVarObject_HEAD_INIT(NULL, 0)
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003241 "imp.NullImporter", /*tp_name*/
3242 sizeof(NullImporter), /*tp_basicsize*/
3243 0, /*tp_itemsize*/
3244 0, /*tp_dealloc*/
3245 0, /*tp_print*/
3246 0, /*tp_getattr*/
3247 0, /*tp_setattr*/
3248 0, /*tp_compare*/
3249 0, /*tp_repr*/
3250 0, /*tp_as_number*/
3251 0, /*tp_as_sequence*/
3252 0, /*tp_as_mapping*/
3253 0, /*tp_hash */
3254 0, /*tp_call*/
3255 0, /*tp_str*/
3256 0, /*tp_getattro*/
3257 0, /*tp_setattro*/
3258 0, /*tp_as_buffer*/
3259 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3260 "Null importer object", /* tp_doc */
3261 0, /* tp_traverse */
3262 0, /* tp_clear */
3263 0, /* tp_richcompare */
3264 0, /* tp_weaklistoffset */
3265 0, /* tp_iter */
3266 0, /* tp_iternext */
3267 NullImporter_methods, /* tp_methods */
3268 0, /* tp_members */
3269 0, /* tp_getset */
3270 0, /* tp_base */
3271 0, /* tp_dict */
3272 0, /* tp_descr_get */
3273 0, /* tp_descr_set */
3274 0, /* tp_dictoffset */
3275 (initproc)NullImporter_init, /* tp_init */
3276 0, /* tp_alloc */
3277 PyType_GenericNew /* tp_new */
3278};
3279
Martin v. Löwis1a214512008-06-11 05:26:20 +00003280static struct PyModuleDef impmodule = {
3281 PyModuleDef_HEAD_INIT,
3282 "imp",
3283 doc_imp,
3284 0,
3285 imp_methods,
3286 NULL,
3287 NULL,
3288 NULL,
3289 NULL
3290};
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003291
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003292PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00003293PyInit_imp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003294{
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003295 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003296
Christian Heimes9cd17752007-11-18 19:35:23 +00003297 if (PyType_Ready(&PyNullImporter_Type) < 0)
Martin v. Löwis1a214512008-06-11 05:26:20 +00003298 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003299
Martin v. Löwis1a214512008-06-11 05:26:20 +00003300 m = PyModule_Create(&impmodule);
Neal Norwitz1ac754f2006-01-19 06:09:39 +00003301 if (m == NULL)
3302 goto failure;
Guido van Rossum79f25d91997-04-29 20:08:16 +00003303 d = PyModule_GetDict(m);
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00003304 if (d == NULL)
3305 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003306
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003307 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3308 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3309 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3310 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3311 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3312 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3313 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3314 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
Guido van Rossum0f84a341998-08-06 13:36:01 +00003315 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
Just van Rossum52e14d62002-12-30 22:08:05 +00003316 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003317
Christian Heimes9cd17752007-11-18 19:35:23 +00003318 Py_INCREF(&PyNullImporter_Type);
3319 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
Martin v. Löwis1a214512008-06-11 05:26:20 +00003320 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003321 failure:
Martin v. Löwis1a214512008-06-11 05:26:20 +00003322 Py_XDECREF(m);
3323 return NULL;
3324
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003325}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003326
3327
Guido van Rossumb18618d2000-05-03 23:44:39 +00003328/* API for embedding applications that want to add their own entries
3329 to the table of built-in modules. This should normally be called
3330 *before* Py_Initialize(). When the table resize fails, -1 is
3331 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003332
3333 After a similar function by Just van Rossum. */
3334
3335int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003336PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003337{
3338 static struct _inittab *our_copy = NULL;
3339 struct _inittab *p;
3340 int i, n;
3341
3342 /* Count the number of entries in both tables */
3343 for (n = 0; newtab[n].name != NULL; n++)
3344 ;
3345 if (n == 0)
3346 return 0; /* Nothing to do */
3347 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3348 ;
3349
3350 /* Allocate new memory for the combined table */
Guido van Rossumb18618d2000-05-03 23:44:39 +00003351 p = our_copy;
3352 PyMem_RESIZE(p, struct _inittab, i+n+1);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003353 if (p == NULL)
3354 return -1;
3355
3356 /* Copy the tables into the new memory */
3357 if (our_copy != PyImport_Inittab)
3358 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3359 PyImport_Inittab = our_copy = p;
3360 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
3361
3362 return 0;
3363}
3364
3365/* Shorthand to add a single entry given a name and a function */
3366
3367int
Martin v. Löwis1a214512008-06-11 05:26:20 +00003368PyImport_AppendInittab(char *name, PyObject* (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003369{
3370 struct _inittab newtab[2];
3371
3372 memset(newtab, '\0', sizeof newtab);
3373
3374 newtab[0].name = name;
3375 newtab[0].initfunc = initfunc;
3376
3377 return PyImport_ExtendInittab(newtab);
3378}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003379
3380#ifdef __cplusplus
3381}
3382#endif