blob: ab1615cd05b37c6eb0665c8cccbd1509a67654c6 [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
Brett Cannon9a5b25a2010-03-01 02:09:17 +000022extern "C" {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000023#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;
Daniel Stutzbachc7937792010-09-09 21:18:04 +000028/* for _mkdir */
29#include <direct.h>
Christian Heimesd3eb5a152008-02-24 00:38:49 +000030#endif
31
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
Barry Warsaw28a691b2010-04-17 00:19:56 +000048 Starting with the adoption of PEP 3147 in Python 3.2, every bump in magic
49 number also includes a new "magic tag", i.e. a human readable string used
50 to represent the magic number in __pycache__ directories. When you change
51 the magic number, you must also set a new unique magic tag. Generally this
52 can be named after the Python major version of the magic number bump, but
53 it can really be anything, as long as it's different than anything else
54 that's come before. The tags are included in the following table, starting
55 with Python 3.2a0.
56
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000057 Known values:
58 Python 1.5: 20121
59 Python 1.5.1: 20121
60 Python 1.5.2: 20121
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000061 Python 1.6: 50428
Marc-André Lemburgbd3be8f2002-02-07 11:33:49 +000062 Python 2.0: 50823
63 Python 2.0.1: 50823
64 Python 2.1: 60202
65 Python 2.1.1: 60202
66 Python 2.1.2: 60202
67 Python 2.2: 60717
Neal Norwitz7fdcb412002-06-14 01:07:39 +000068 Python 2.3a0: 62011
Michael W. Hudsondd32a912002-08-15 14:59:02 +000069 Python 2.3a0: 62021
Guido van Rossumf6894922002-08-31 15:16:14 +000070 Python 2.3a0: 62011 (!)
Martin v. Löwisef82d2f2004-06-27 16:51:46 +000071 Python 2.4a0: 62041
Raymond Hettingerfd2d1f72004-08-23 23:37:48 +000072 Python 2.4a3: 62051
Raymond Hettinger2c31a052004-09-22 18:44:21 +000073 Python 2.4b1: 62061
Michael W. Hudsondf888462005-06-03 14:41:55 +000074 Python 2.5a0: 62071
Michael W. Hudsonaee2e282005-10-21 11:32:20 +000075 Python 2.5a0: 62081 (ast-branch)
Guido van Rossumc2e20742006-02-27 22:32:47 +000076 Python 2.5a0: 62091 (with)
Guido van Rossumf6694362006-03-10 02:28:35 +000077 Python 2.5a0: 62092 (changed WITH_CLEANUP opcode)
Thomas Wouters0e3f5912006-08-11 14:57:12 +000078 Python 2.5b3: 62101 (fix wrong code: for x, in ...)
79 Python 2.5b3: 62111 (fix wrong code: x += yield)
80 Python 2.5c1: 62121 (fix wrong lnotab with for loops and
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000081 storing constants that should have been removed)
Thomas Wouters89f507f2006-12-13 04:49:30 +000082 Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp)
Christian Heimes99170a52007-12-19 02:07:34 +000083 Python 2.6a0: 62151 (peephole optimizations and STORE_MAP opcode)
Christian Heimesdd15f6c2008-03-16 00:07:10 +000084 Python 2.6a1: 62161 (WITH_CLEANUP optimization)
Guido van Rossum45aecf42006-03-15 04:58:47 +000085 Python 3000: 3000
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000086 3010 (removed UNARY_CONVERT)
87 3020 (added BUILD_SET)
88 3030 (added keyword-only parameters)
89 3040 (added signature annotations)
90 3050 (print becomes a function)
91 3060 (PEP 3115 metaclass syntax)
92 3061 (string literals become unicode)
93 3071 (PEP 3109 raise changes)
94 3081 (PEP 3137 make __file__ and __name__ unicode)
95 3091 (kill str8 interning)
96 3101 (merge from 2.6a0, see 62151)
97 3103 (__file__ points to source file)
Benjamin Peterson0f6cae02009-12-10 02:09:08 +000098 Python 3.0a4: 3111 (WITH_CLEANUP optimization).
99 Python 3.0a5: 3131 (lexical exception stacking, including POP_EXCEPT)
100 Python 3.1a0: 3141 (optimize list, set and dict comprehensions:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000101 change LIST_APPEND and SET_ADD, add MAP_ADD)
Benjamin Peterson0f6cae02009-12-10 02:09:08 +0000102 Python 3.1a0: 3151 (optimize conditional branches:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000103 introduce POP_JUMP_IF_FALSE and POP_JUMP_IF_TRUE)
Benjamin Peterson876b2f22009-06-28 03:18:59 +0000104 Python 3.2a0: 3160 (add SETUP_WITH)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000105 tag: cpython-32
Antoine Pitrou74a69fa2010-09-04 18:43:52 +0000106 Python 3.2a1: 3170 (add DUP_TOP_TWO, remove DUP_TOPX and ROT_FOUR)
107 tag: cpython-32
Benjamin Peterson6246d6d2010-09-10 21:51:44 +0000108 Python 3.2a2 3180 (add DELETE_DEREF)
Tim Peters36515e22001-11-18 04:06:29 +0000109*/
Guido van Rossum3ddee711991-12-16 13:06:34 +0000110
Nick Coghlancd419ab2010-09-11 00:39:25 +0000111/* MAGIC must change whenever the bytecode emitted by the compiler may no
112 longer be understood by older implementations of the eval loop (usually
113 due to the addition of new opcodes)
114 TAG must change for each major Python release. The magic number will take
115 care of any bytecode changes that occur during development.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000116*/
Benjamin Peterson6246d6d2010-09-10 21:51:44 +0000117#define MAGIC (3180 | ((long)'\r'<<16) | ((long)'\n'<<24))
Barry Warsaw28a691b2010-04-17 00:19:56 +0000118#define TAG "cpython-32"
119#define CACHEDIR "__pycache__"
120/* Current magic word and string tag as globals. */
Guido van Rossum96774c12000-05-01 20:19:08 +0000121static long pyc_magic = MAGIC;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000122static const char *pyc_tag = TAG;
Guido van Rossum96774c12000-05-01 20:19:08 +0000123
Guido van Rossum25ce5661997-08-02 03:10:38 +0000124/* See _PyImport_FixupExtension() below */
125static PyObject *extensions = NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000126
Guido van Rossum771c6c81997-10-31 18:37:24 +0000127/* This table is defined in config.c: */
128extern struct _inittab _PyImport_Inittab[];
129
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000130/* Method from Parser/tokenizer.c */
Guido van Rossum40d20bc2007-10-22 00:09:51 +0000131extern char * PyTokenizer_FindEncoding(int);
Guido van Rossumce3a72a2007-10-19 23:16:50 +0000132
Guido van Rossum771c6c81997-10-31 18:37:24 +0000133struct _inittab *PyImport_Inittab = _PyImport_Inittab;
Guido van Rossum66f1fa81991-04-03 19:03:52 +0000134
Guido van Rossumed1170e1999-12-20 21:23:41 +0000135/* these tables define the module suffixes that Python recognizes */
136struct filedescr * _PyImport_Filetab = NULL;
Guido van Rossum48a680c2001-03-02 06:34:14 +0000137
Guido van Rossumed1170e1999-12-20 21:23:41 +0000138static const struct filedescr _PyImport_StandardFiletab[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000139 {".py", "U", PY_SOURCE},
Martin v. Löwis6238d2b2002-06-30 15:26:10 +0000140#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000141 {".pyw", "U", PY_SOURCE},
Tim Peters36515e22001-11-18 04:06:29 +0000142#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000143 {".pyc", "rb", PY_COMPILED},
144 {0, 0}
Guido van Rossumed1170e1999-12-20 21:23:41 +0000145};
146
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000147
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000148/* Initialize things */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000149
150void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000151_PyImport_Init(void)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000152{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000153 const struct filedescr *scan;
154 struct filedescr *filetab;
155 int countD = 0;
156 int countS = 0;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000157
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000158 /* prepare _PyImport_Filetab: copy entries from
159 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab.
160 */
Guido van Rossum04110fb2007-08-24 16:32:05 +0000161#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000162 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan)
163 ++countD;
Guido van Rossum04110fb2007-08-24 16:32:05 +0000164#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000165 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan)
166 ++countS;
167 filetab = PyMem_NEW(struct filedescr, countD + countS + 1);
168 if (filetab == NULL)
169 Py_FatalError("Can't initialize import file table.");
Guido van Rossum04110fb2007-08-24 16:32:05 +0000170#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000171 memcpy(filetab, _PyImport_DynLoadFiletab,
172 countD * sizeof(struct filedescr));
Guido van Rossum04110fb2007-08-24 16:32:05 +0000173#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000174 memcpy(filetab + countD, _PyImport_StandardFiletab,
175 countS * sizeof(struct filedescr));
176 filetab[countD + countS].suffix = NULL;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000177
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000178 _PyImport_Filetab = filetab;
Guido van Rossumed1170e1999-12-20 21:23:41 +0000179
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000180 if (Py_OptimizeFlag) {
181 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */
182 for (; filetab->suffix != NULL; filetab++) {
183 if (strcmp(filetab->suffix, ".pyc") == 0)
184 filetab->suffix = ".pyo";
185 }
186 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000187}
188
Guido van Rossum25ce5661997-08-02 03:10:38 +0000189void
Just van Rossum52e14d62002-12-30 22:08:05 +0000190_PyImportHooks_Init(void)
191{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000192 PyObject *v, *path_hooks = NULL, *zimpimport;
193 int err = 0;
Just van Rossum52e14d62002-12-30 22:08:05 +0000194
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000195 /* adding sys.path_hooks and sys.path_importer_cache, setting up
196 zipimport */
197 if (PyType_Ready(&PyNullImporter_Type) < 0)
198 goto error;
Just van Rossum52e14d62002-12-30 22:08:05 +0000199
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000200 if (Py_VerboseFlag)
201 PySys_WriteStderr("# installing zipimport hook\n");
Just van Rossum52e14d62002-12-30 22:08:05 +0000202
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000203 v = PyList_New(0);
204 if (v == NULL)
205 goto error;
206 err = PySys_SetObject("meta_path", v);
207 Py_DECREF(v);
208 if (err)
209 goto error;
210 v = PyDict_New();
211 if (v == NULL)
212 goto error;
213 err = PySys_SetObject("path_importer_cache", v);
214 Py_DECREF(v);
215 if (err)
216 goto error;
217 path_hooks = PyList_New(0);
218 if (path_hooks == NULL)
219 goto error;
220 err = PySys_SetObject("path_hooks", path_hooks);
221 if (err) {
Just van Rossum52e14d62002-12-30 22:08:05 +0000222 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000223 PyErr_Print();
224 Py_FatalError("initializing sys.meta_path, sys.path_hooks, "
225 "path_importer_cache, or NullImporter failed"
226 );
227 }
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000228
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000229 zimpimport = PyImport_ImportModule("zipimport");
230 if (zimpimport == NULL) {
231 PyErr_Clear(); /* No zip import module -- okay */
232 if (Py_VerboseFlag)
233 PySys_WriteStderr("# can't import zipimport\n");
234 }
235 else {
236 PyObject *zipimporter = PyObject_GetAttrString(zimpimport,
237 "zipimporter");
238 Py_DECREF(zimpimport);
239 if (zipimporter == NULL) {
240 PyErr_Clear(); /* No zipimporter object -- okay */
241 if (Py_VerboseFlag)
242 PySys_WriteStderr(
243 "# can't import zipimport.zipimporter\n");
244 }
245 else {
246 /* sys.path_hooks.append(zipimporter) */
247 err = PyList_Append(path_hooks, zipimporter);
248 Py_DECREF(zipimporter);
249 if (err)
250 goto error;
251 if (Py_VerboseFlag)
252 PySys_WriteStderr(
253 "# installed zipimport hook\n");
254 }
255 }
256 Py_DECREF(path_hooks);
Just van Rossum52e14d62002-12-30 22:08:05 +0000257}
258
259void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000260_PyImport_Fini(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000261{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000262 Py_XDECREF(extensions);
263 extensions = NULL;
264 PyMem_DEL(_PyImport_Filetab);
265 _PyImport_Filetab = NULL;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000266}
267
268
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000269/* Locking primitives to prevent parallel imports of the same module
270 in different threads to return with a partially loaded module.
271 These calls are serialized by the global interpreter lock. */
272
273#ifdef WITH_THREAD
274
Guido van Rossum49b56061998-10-01 20:42:43 +0000275#include "pythread.h"
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000276
Guido van Rossum65d5b571998-12-21 19:32:43 +0000277static PyThread_type_lock import_lock = 0;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000278static long import_lock_thread = -1;
279static int import_lock_level = 0;
280
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000281void
282_PyImport_AcquireLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000283{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000284 long me = PyThread_get_thread_ident();
285 if (me == -1)
286 return; /* Too bad */
287 if (import_lock == NULL) {
288 import_lock = PyThread_allocate_lock();
289 if (import_lock == NULL)
290 return; /* Nothing much we can do. */
291 }
292 if (import_lock_thread == me) {
293 import_lock_level++;
294 return;
295 }
296 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0))
297 {
298 PyThreadState *tstate = PyEval_SaveThread();
299 PyThread_acquire_lock(import_lock, 1);
300 PyEval_RestoreThread(tstate);
301 }
302 import_lock_thread = me;
303 import_lock_level = 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000304}
305
Benjamin Peterson0df35a92009-10-04 20:32:25 +0000306int
307_PyImport_ReleaseLock(void)
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000308{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000309 long me = PyThread_get_thread_ident();
310 if (me == -1 || import_lock == NULL)
311 return 0; /* Too bad */
312 if (import_lock_thread != me)
313 return -1;
314 import_lock_level--;
315 if (import_lock_level == 0) {
316 import_lock_thread = -1;
317 PyThread_release_lock(import_lock);
318 }
319 return 1;
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000320}
321
Gregory P. Smith24cec9f2010-03-01 06:18:41 +0000322/* This function is called from PyOS_AfterFork to ensure that newly
323 created child processes do not share locks with the parent.
324 We now acquire the import lock around fork() calls but on some platforms
325 (Solaris 9 and earlier? see isue7242) that still left us with problems. */
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000326
327void
328_PyImport_ReInitLock(void)
329{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000330 if (import_lock != NULL)
331 import_lock = PyThread_allocate_lock();
332 import_lock_thread = -1;
333 import_lock_level = 0;
Guido van Rossum8ee3e5a2005-09-14 18:09:42 +0000334}
335
Guido van Rossum75acc9c1998-03-03 22:26:50 +0000336#endif
337
Tim Peters69232342001-08-30 05:16:13 +0000338static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000339imp_lock_held(PyObject *self, PyObject *noargs)
Tim Peters69232342001-08-30 05:16:13 +0000340{
Tim Peters69232342001-08-30 05:16:13 +0000341#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000342 return PyBool_FromLong(import_lock_thread != -1);
Tim Peters69232342001-08-30 05:16:13 +0000343#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000344 return PyBool_FromLong(0);
Tim Peters69232342001-08-30 05:16:13 +0000345#endif
346}
347
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000348static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000349imp_acquire_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000350{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000351#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000352 _PyImport_AcquireLock();
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000353#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000354 Py_INCREF(Py_None);
355 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000356}
357
358static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +0000359imp_release_lock(PyObject *self, PyObject *noargs)
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000360{
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000361#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000362 if (_PyImport_ReleaseLock() < 0) {
363 PyErr_SetString(PyExc_RuntimeError,
364 "not holding the import lock");
365 return NULL;
366 }
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000367#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000368 Py_INCREF(Py_None);
369 return Py_None;
Guido van Rossumc4f4ca92003-02-12 21:46:11 +0000370}
371
Guido van Rossumd8faa362007-04-27 19:54:29 +0000372static void
373imp_modules_reloading_clear(void)
374{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000375 PyInterpreterState *interp = PyThreadState_Get()->interp;
376 if (interp->modules_reloading != NULL)
377 PyDict_Clear(interp->modules_reloading);
Guido van Rossumd8faa362007-04-27 19:54:29 +0000378}
379
Guido van Rossum25ce5661997-08-02 03:10:38 +0000380/* Helper for sys */
381
382PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000383PyImport_GetModuleDict(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000384{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000385 PyInterpreterState *interp = PyThreadState_GET()->interp;
386 if (interp->modules == NULL)
387 Py_FatalError("PyImport_GetModuleDict: no module dictionary!");
388 return interp->modules;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000389}
390
Guido van Rossum3f5da241990-12-20 15:06:42 +0000391
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000392/* List of names to clear in sys */
393static char* sys_deletes[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000394 "path", "argv", "ps1", "ps2",
395 "last_type", "last_value", "last_traceback",
396 "path_hooks", "path_importer_cache", "meta_path",
397 /* misc stuff */
398 "flags", "float_info",
399 NULL
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000400};
401
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000402static char* sys_files[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000403 "stdin", "__stdin__",
404 "stdout", "__stdout__",
405 "stderr", "__stderr__",
406 NULL
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000407};
408
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000409
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000410/* Un-initialize things, as good as we can */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000411
Guido van Rossum3f5da241990-12-20 15:06:42 +0000412void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000413PyImport_Cleanup(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000414{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000415 Py_ssize_t pos, ndone;
416 char *name;
417 PyObject *key, *value, *dict;
418 PyInterpreterState *interp = PyThreadState_GET()->interp;
419 PyObject *modules = interp->modules;
Guido van Rossum758eec01998-01-19 21:58:26 +0000420
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000421 if (modules == NULL)
422 return; /* Already done */
Guido van Rossum758eec01998-01-19 21:58:26 +0000423
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000424 /* Delete some special variables first. These are common
425 places where user values hide and people complain when their
426 destructors fail. Since the modules containing them are
427 deleted *last* of all, they would come too late in the normal
428 destruction order. Sigh. */
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000429
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000430 value = PyDict_GetItemString(modules, "builtins");
431 if (value != NULL && PyModule_Check(value)) {
432 dict = PyModule_GetDict(value);
433 if (Py_VerboseFlag)
434 PySys_WriteStderr("# clear builtins._\n");
435 PyDict_SetItemString(dict, "_", Py_None);
436 }
437 value = PyDict_GetItemString(modules, "sys");
438 if (value != NULL && PyModule_Check(value)) {
439 char **p;
440 PyObject *v;
441 dict = PyModule_GetDict(value);
442 for (p = sys_deletes; *p != NULL; p++) {
443 if (Py_VerboseFlag)
444 PySys_WriteStderr("# clear sys.%s\n", *p);
445 PyDict_SetItemString(dict, *p, Py_None);
446 }
447 for (p = sys_files; *p != NULL; p+=2) {
448 if (Py_VerboseFlag)
449 PySys_WriteStderr("# restore sys.%s\n", *p);
450 v = PyDict_GetItemString(dict, *(p+1));
451 if (v == NULL)
452 v = Py_None;
453 PyDict_SetItemString(dict, *p, v);
454 }
455 }
Guido van Rossum05f9dce1998-02-19 20:58:44 +0000456
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000457 /* First, delete __main__ */
458 value = PyDict_GetItemString(modules, "__main__");
459 if (value != NULL && PyModule_Check(value)) {
460 if (Py_VerboseFlag)
461 PySys_WriteStderr("# cleanup __main__\n");
462 _PyModule_Clear(value);
463 PyDict_SetItemString(modules, "__main__", Py_None);
464 }
Guido van Rossuma0fec2b1998-02-06 17:16:02 +0000465
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000466 /* The special treatment of "builtins" here is because even
467 when it's not referenced as a module, its dictionary is
468 referenced by almost every module's __builtins__. Since
469 deleting a module clears its dictionary (even if there are
470 references left to it), we need to delete the "builtins"
471 module last. Likewise, we don't delete sys until the very
472 end because it is implicitly referenced (e.g. by print).
Guido van Rossum758eec01998-01-19 21:58:26 +0000473
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000474 Also note that we 'delete' modules by replacing their entry
475 in the modules dict with None, rather than really deleting
476 them; this avoids a rehash of the modules dictionary and
477 also marks them as "non existent" so they won't be
478 re-imported. */
Guido van Rossum758eec01998-01-19 21:58:26 +0000479
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000480 /* Next, repeatedly delete modules with a reference count of
481 one (skipping builtins and sys) and delete them */
482 do {
483 ndone = 0;
484 pos = 0;
485 while (PyDict_Next(modules, &pos, &key, &value)) {
486 if (value->ob_refcnt != 1)
487 continue;
488 if (PyUnicode_Check(key) && PyModule_Check(value)) {
489 name = _PyUnicode_AsString(key);
490 if (strcmp(name, "builtins") == 0)
491 continue;
492 if (strcmp(name, "sys") == 0)
493 continue;
494 if (Py_VerboseFlag)
495 PySys_WriteStderr(
496 "# cleanup[1] %s\n", name);
497 _PyModule_Clear(value);
498 PyDict_SetItem(modules, key, Py_None);
499 ndone++;
500 }
501 }
502 } while (ndone > 0);
Guido van Rossum758eec01998-01-19 21:58:26 +0000503
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000504 /* Next, delete all modules (still skipping builtins and sys) */
505 pos = 0;
506 while (PyDict_Next(modules, &pos, &key, &value)) {
507 if (PyUnicode_Check(key) && PyModule_Check(value)) {
508 name = _PyUnicode_AsString(key);
509 if (strcmp(name, "builtins") == 0)
510 continue;
511 if (strcmp(name, "sys") == 0)
512 continue;
513 if (Py_VerboseFlag)
514 PySys_WriteStderr("# cleanup[2] %s\n", name);
515 _PyModule_Clear(value);
516 PyDict_SetItem(modules, key, Py_None);
517 }
518 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000519
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000520 /* Next, delete sys and builtins (in that order) */
521 value = PyDict_GetItemString(modules, "sys");
522 if (value != NULL && PyModule_Check(value)) {
523 if (Py_VerboseFlag)
524 PySys_WriteStderr("# cleanup sys\n");
525 _PyModule_Clear(value);
526 PyDict_SetItemString(modules, "sys", Py_None);
527 }
528 value = PyDict_GetItemString(modules, "builtins");
529 if (value != NULL && PyModule_Check(value)) {
530 if (Py_VerboseFlag)
531 PySys_WriteStderr("# cleanup builtins\n");
532 _PyModule_Clear(value);
533 PyDict_SetItemString(modules, "builtins", Py_None);
534 }
Guido van Rossum758eec01998-01-19 21:58:26 +0000535
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000536 /* Finally, clear and delete the modules directory */
537 PyDict_Clear(modules);
538 interp->modules = NULL;
539 Py_DECREF(modules);
540 Py_CLEAR(interp->modules_reloading);
Guido van Rossum8d15b5d1990-10-26 14:58:58 +0000541}
Guido van Rossum7f133ed1991-02-19 12:23:57 +0000542
543
Barry Warsaw28a691b2010-04-17 00:19:56 +0000544/* Helper for pythonrun.c -- return magic number and tag. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000545
546long
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000547PyImport_GetMagicNumber(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000548{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000549 return pyc_magic;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000550}
551
552
Barry Warsaw28a691b2010-04-17 00:19:56 +0000553const char *
554PyImport_GetMagicTag(void)
555{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000556 return pyc_tag;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000557}
558
Guido van Rossum25ce5661997-08-02 03:10:38 +0000559/* Magic for extension modules (built-in as well as dynamically
560 loaded). To prevent initializing an extension module more than
561 once, we keep a static dictionary 'extensions' keyed by module name
562 (for built-in modules) or by filename (for dynamically loaded
Barry Warsaw92883382001-08-13 23:05:44 +0000563 modules), containing these modules. A copy of the module's
Guido van Rossum25ce5661997-08-02 03:10:38 +0000564 dictionary is stored by calling _PyImport_FixupExtension()
565 immediately after the module initialization function succeeds. A
566 copy can be retrieved from there by calling
Brett Cannon9a5b25a2010-03-01 02:09:17 +0000567 _PyImport_FindExtension().
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000568
Barry Warsaw7c9627b2010-06-17 18:38:20 +0000569 Modules which do support multiple initialization set their m_size
570 field to a non-negative number (indicating the size of the
571 module-specific state). They are still recorded in the extensions
572 dictionary, to avoid loading shared libraries twice.
Martin v. Löwis1a214512008-06-11 05:26:20 +0000573*/
574
575int
576_PyImport_FixupExtension(PyObject *mod, char *name, char *filename)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000577{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000578 PyObject *modules, *dict;
579 struct PyModuleDef *def;
580 if (extensions == NULL) {
581 extensions = PyDict_New();
582 if (extensions == NULL)
583 return -1;
584 }
585 if (mod == NULL || !PyModule_Check(mod)) {
586 PyErr_BadInternalCall();
587 return -1;
588 }
589 def = PyModule_GetDef(mod);
590 if (!def) {
591 PyErr_BadInternalCall();
592 return -1;
593 }
594 modules = PyImport_GetModuleDict();
595 if (PyDict_SetItemString(modules, name, mod) < 0)
596 return -1;
597 if (_PyState_AddModule(mod, def) < 0) {
598 PyDict_DelItemString(modules, name);
599 return -1;
600 }
601 if (def->m_size == -1) {
602 if (def->m_base.m_copy) {
603 /* Somebody already imported the module,
604 likely under a different name.
605 XXX this should really not happen. */
606 Py_DECREF(def->m_base.m_copy);
607 def->m_base.m_copy = NULL;
608 }
609 dict = PyModule_GetDict(mod);
610 if (dict == NULL)
611 return -1;
612 def->m_base.m_copy = PyDict_Copy(dict);
613 if (def->m_base.m_copy == NULL)
614 return -1;
615 }
616 PyDict_SetItemString(extensions, filename, (PyObject*)def);
617 return 0;
Guido van Rossum25ce5661997-08-02 03:10:38 +0000618}
619
620PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000621_PyImport_FindExtension(char *name, char *filename)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000622{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000623 PyObject *mod, *mdict;
624 PyModuleDef* def;
625 if (extensions == NULL)
626 return NULL;
627 def = (PyModuleDef*)PyDict_GetItemString(extensions, filename);
628 if (def == NULL)
629 return NULL;
630 if (def->m_size == -1) {
631 /* Module does not support repeated initialization */
632 if (def->m_base.m_copy == NULL)
633 return NULL;
634 mod = PyImport_AddModule(name);
635 if (mod == NULL)
636 return NULL;
637 mdict = PyModule_GetDict(mod);
638 if (mdict == NULL)
639 return NULL;
640 if (PyDict_Update(mdict, def->m_base.m_copy))
641 return NULL;
642 }
643 else {
644 if (def->m_base.m_init == NULL)
645 return NULL;
646 mod = def->m_base.m_init();
647 if (mod == NULL)
648 return NULL;
649 PyDict_SetItemString(PyImport_GetModuleDict(), name, mod);
650 Py_DECREF(mod);
651 }
652 if (_PyState_AddModule(mod, def) < 0) {
653 PyDict_DelItemString(PyImport_GetModuleDict(), name);
654 Py_DECREF(mod);
655 return NULL;
656 }
657 if (Py_VerboseFlag)
658 PySys_WriteStderr("import %s # previously loaded (%s)\n",
659 name, filename);
660 return mod;
Brett Cannon9a5b25a2010-03-01 02:09:17 +0000661
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000662}
663
664
665/* Get the module object corresponding to a module name.
666 First check the modules dictionary if there's one there,
Walter Dörwaldf0dfc7a2003-10-20 14:01:56 +0000667 if not, create a new one and insert it in the modules dictionary.
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000668 Because the former action is most common, THIS DOES NOT RETURN A
669 'NEW' REFERENCE! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000670
Guido van Rossum79f25d91997-04-29 20:08:16 +0000671PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000672PyImport_AddModule(const char *name)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000673{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000674 PyObject *modules = PyImport_GetModuleDict();
675 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000676
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000677 if ((m = PyDict_GetItemString(modules, name)) != NULL &&
678 PyModule_Check(m))
679 return m;
680 m = PyModule_New(name);
681 if (m == NULL)
682 return NULL;
683 if (PyDict_SetItemString(modules, name, m) != 0) {
684 Py_DECREF(m);
685 return NULL;
686 }
687 Py_DECREF(m); /* Yes, it still exists, in modules! */
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000688
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000689 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000690}
691
Tim Peters1cd70172004-08-02 03:52:12 +0000692/* Remove name from sys.modules, if it's there. */
693static void
Benjamin Petersonfa0aeba2010-03-25 23:30:20 +0000694remove_module(const char *name)
Tim Peters1cd70172004-08-02 03:52:12 +0000695{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000696 PyObject *modules = PyImport_GetModuleDict();
697 if (PyDict_GetItemString(modules, name) == NULL)
698 return;
699 if (PyDict_DelItemString(modules, name) < 0)
700 Py_FatalError("import: deleting existing key in"
701 "sys.modules failed");
Tim Peters1cd70172004-08-02 03:52:12 +0000702}
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000703
Barry Warsaw28a691b2010-04-17 00:19:56 +0000704static PyObject * get_sourcefile(char *file);
705static char *make_source_pathname(char *pathname, char *buf);
706static char *make_compiled_pathname(char *pathname, char *buf, size_t buflen,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000707 int debug);
Christian Heimes3b06e532008-01-07 20:12:44 +0000708
Guido van Rossum7f9fa971995-01-20 16:53:12 +0000709/* Execute a code object in a module and return the module object
Tim Peters1cd70172004-08-02 03:52:12 +0000710 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is
711 * removed from sys.modules, to avoid leaving damaged module objects
712 * in sys.modules. The caller may wish to restore the original
713 * module object (if any) in this case; PyImport_ReloadModule is an
714 * example.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000715 *
716 * Note that PyImport_ExecCodeModuleWithPathnames() is the preferred, richer
717 * interface. The other two exist primarily for backward compatibility.
Tim Peters1cd70172004-08-02 03:52:12 +0000718 */
Guido van Rossum79f25d91997-04-29 20:08:16 +0000719PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000720PyImport_ExecCodeModule(char *name, PyObject *co)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000721{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000722 return PyImport_ExecCodeModuleWithPathnames(
723 name, co, (char *)NULL, (char *)NULL);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000724}
725
726PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000727PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname)
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000728{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000729 return PyImport_ExecCodeModuleWithPathnames(
730 name, co, pathname, (char *)NULL);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000731}
732
733PyObject *
734PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000735 char *cpathname)
Barry Warsaw28a691b2010-04-17 00:19:56 +0000736{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000737 PyObject *modules = PyImport_GetModuleDict();
738 PyObject *m, *d, *v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000739
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000740 m = PyImport_AddModule(name);
741 if (m == NULL)
742 return NULL;
743 /* If the module is being reloaded, we get the old module back
744 and re-use its dict to exec the new code. */
745 d = PyModule_GetDict(m);
746 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
747 if (PyDict_SetItemString(d, "__builtins__",
748 PyEval_GetBuiltins()) != 0)
749 goto error;
750 }
751 /* Remember the filename as the __file__ attribute */
752 v = NULL;
753 if (pathname != NULL) {
754 v = get_sourcefile(pathname);
755 if (v == NULL)
756 PyErr_Clear();
757 }
758 if (v == NULL) {
759 v = ((PyCodeObject *)co)->co_filename;
760 Py_INCREF(v);
761 }
762 if (PyDict_SetItemString(d, "__file__", v) != 0)
763 PyErr_Clear(); /* Not important enough to report */
764 Py_DECREF(v);
Guido van Rossume32bf6e1998-02-11 05:53:02 +0000765
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000766 /* Remember the pyc path name as the __cached__ attribute. */
767 if (cpathname == NULL) {
768 v = Py_None;
769 Py_INCREF(v);
770 }
771 else if ((v = PyUnicode_FromString(cpathname)) == NULL) {
772 PyErr_Clear(); /* Not important enough to report */
773 v = Py_None;
774 Py_INCREF(v);
775 }
776 if (PyDict_SetItemString(d, "__cached__", v) != 0)
777 PyErr_Clear(); /* Not important enough to report */
778 Py_DECREF(v);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000779
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000780 v = PyEval_EvalCode((PyCodeObject *)co, d, d);
781 if (v == NULL)
782 goto error;
783 Py_DECREF(v);
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000784
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000785 if ((m = PyDict_GetItemString(modules, name)) == NULL) {
786 PyErr_Format(PyExc_ImportError,
787 "Loaded module %.200s not found in sys.modules",
788 name);
789 return NULL;
790 }
Guido van Rossumb65e85c1997-07-10 18:00:45 +0000791
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000792 Py_INCREF(m);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000793
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000794 return m;
Tim Peters1cd70172004-08-02 03:52:12 +0000795
796 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000797 remove_module(name);
798 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000799}
800
801
Barry Warsaw28a691b2010-04-17 00:19:56 +0000802/* Like strrchr(string, '/') but searches for the rightmost of either SEP
803 or ALTSEP, if the latter is defined.
804*/
805static char *
806rightmost_sep(char *s)
807{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000808 char *found, c;
809 for (found = NULL; (c = *s); s++) {
810 if (c == SEP
Barry Warsaw28a691b2010-04-17 00:19:56 +0000811#ifdef ALTSEP
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000812 || c == ALTSEP
Barry Warsaw28a691b2010-04-17 00:19:56 +0000813#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000814 )
815 {
816 found = s;
817 }
818 }
819 return found;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000820}
821
822
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000823/* Given a pathname for a Python source file, fill a buffer with the
824 pathname for the corresponding compiled file. Return the pathname
825 for the compiled file, or NULL if there's no space in the buffer.
826 Doesn't set an exception. */
827
828static char *
Barry Warsaw28a691b2010-04-17 00:19:56 +0000829make_compiled_pathname(char *pathname, char *buf, size_t buflen, int debug)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000830{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000831 /* foo.py -> __pycache__/foo.<tag>.pyc */
832 size_t len = strlen(pathname);
833 size_t i, save;
834 char *pos;
835 int sep = SEP;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000836
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000837 /* Sanity check that the buffer has roughly enough space to hold what
838 will eventually be the full path to the compiled file. The 5 extra
839 bytes include the slash afer __pycache__, the two extra dots, the
840 extra trailing character ('c' or 'o') and null. This isn't exact
841 because the contents of the buffer can affect how many actual
842 characters of the string get into the buffer. We'll do a final
843 sanity check before writing the extension to ensure we do not
844 overflow the buffer.
845 */
846 if (len + strlen(CACHEDIR) + strlen(pyc_tag) + 5 > buflen)
847 return NULL;
Tim Petersc1731372001-08-04 08:12:36 +0000848
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000849 /* Find the last path separator and copy everything from the start of
850 the source string up to and including the separator.
851 */
852 if ((pos = rightmost_sep(pathname)) == NULL) {
853 i = 0;
854 }
855 else {
856 sep = *pos;
857 i = pos - pathname + 1;
858 strncpy(buf, pathname, i);
859 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000860
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000861 save = i;
862 buf[i++] = '\0';
863 /* Add __pycache__/ */
864 strcat(buf, CACHEDIR);
865 i += strlen(CACHEDIR) - 1;
866 buf[i++] = sep;
867 buf[i++] = '\0';
868 /* Add the base filename, but remove the .py or .pyw extension, since
869 the tag name must go before the extension.
870 */
871 strcat(buf, pathname + save);
872 if ((pos = strrchr(buf, '.')) != NULL)
873 *++pos = '\0';
874 strcat(buf, pyc_tag);
875 /* The length test above assumes that we're only adding one character
876 to the end of what would normally be the extension. What if there
877 is no extension, or the string ends in '.' or '.p', and otherwise
878 fills the buffer? By appending 4 more characters onto the string
879 here, we could overrun the buffer.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000880
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000881 As a simple example, let's say buflen=32 and the input string is
882 'xxx.py'. strlen() would be 6 and the test above would yield:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000883
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000884 (6 + 11 + 10 + 5 == 32) > 32
Barry Warsaw28a691b2010-04-17 00:19:56 +0000885
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000886 which is false and so the name mangling would continue. This would
887 be fine because we'd end up with this string in buf:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000888
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000889 __pycache__/xxx.cpython-32.pyc\0
Barry Warsaw28a691b2010-04-17 00:19:56 +0000890
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000891 strlen(of that) == 30 + the nul fits inside a 32 character buffer.
892 We can even handle an input string of say 'xxxxx' above because
893 that's (5 + 11 + 10 + 5 == 31) > 32 which is also false. Name
894 mangling that yields:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000895
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000896 __pycache__/xxxxxcpython-32.pyc\0
Barry Warsaw28a691b2010-04-17 00:19:56 +0000897
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000898 which is 32 characters including the nul, and thus fits in the
899 buffer. However, an input string of 'xxxxxx' would yield a result
900 string of:
Barry Warsaw28a691b2010-04-17 00:19:56 +0000901
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000902 __pycache__/xxxxxxcpython-32.pyc\0
Barry Warsaw28a691b2010-04-17 00:19:56 +0000903
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000904 which is 33 characters long (including the nul), thus overflowing
905 the buffer, even though the first test would fail, i.e.: the input
906 string is also 6 characters long, so 32 > 32 is false.
Barry Warsaw28a691b2010-04-17 00:19:56 +0000907
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000908 The reason the first test fails but we still overflow the buffer is
909 that the test above only expects to add one extra character to be
910 added to the extension, and here we're adding three (pyc). We
911 don't add the first dot, so that reclaims one of expected
912 positions, leaving us overflowing by 1 byte (3 extra - 1 reclaimed
913 dot - 1 expected extra == 1 overflowed).
Barry Warsaw28a691b2010-04-17 00:19:56 +0000914
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000915 The best we can do is ensure that we still have enough room in the
916 target buffer before we write the extension. Because it's always
917 only the extension that can cause the overflow, and never the other
918 path bytes we've written, it's sufficient to just do one more test
919 here. Still, the assertion that follows can't hurt.
920 */
Barry Warsaw28a691b2010-04-17 00:19:56 +0000921#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000922 printf("strlen(buf): %d; buflen: %d\n", (int)strlen(buf), (int)buflen);
Barry Warsaw28a691b2010-04-17 00:19:56 +0000923#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000924 if (strlen(buf) + 5 > buflen)
925 return NULL;
926 strcat(buf, debug ? ".pyc" : ".pyo");
927 assert(strlen(buf) < buflen);
928 return buf;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000929}
930
931
Barry Warsaw28a691b2010-04-17 00:19:56 +0000932/* Given a pathname to a Python byte compiled file, return the path to the
933 source file, if the path matches the PEP 3147 format. This does not check
934 for any file existence, however, if the pyc file name does not match PEP
935 3147 style, NULL is returned. buf must be at least as big as pathname;
936 the resulting path will always be shorter. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000937
Barry Warsaw28a691b2010-04-17 00:19:56 +0000938static char *
939make_source_pathname(char *pathname, char *buf)
940{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000941 /* __pycache__/foo.<tag>.pyc -> foo.py */
942 size_t i, j;
943 char *left, *right, *dot0, *dot1, sep;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000944
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000945 /* Look back two slashes from the end. In between these two slashes
946 must be the string __pycache__ or this is not a PEP 3147 style
947 path. It's possible for there to be only one slash.
948 */
949 if ((right = rightmost_sep(pathname)) == NULL)
950 return NULL;
951 sep = *right;
952 *right = '\0';
953 left = rightmost_sep(pathname);
954 *right = sep;
955 if (left == NULL)
956 left = pathname;
957 else
958 left++;
959 if (right-left != strlen(CACHEDIR) ||
960 strncmp(left, CACHEDIR, right-left) != 0)
961 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000962
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000963 /* Now verify that the path component to the right of the last slash
964 has two dots in it.
965 */
966 if ((dot0 = strchr(right + 1, '.')) == NULL)
967 return NULL;
968 if ((dot1 = strchr(dot0 + 1, '.')) == NULL)
969 return NULL;
970 /* Too many dots? */
971 if (strchr(dot1 + 1, '.') != NULL)
972 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000973
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000974 /* This is a PEP 3147 path. Start by copying everything from the
975 start of pathname up to and including the leftmost slash. Then
976 copy the file's basename, removing the magic tag and adding a .py
977 suffix.
978 */
979 strncpy(buf, pathname, (i=left-pathname));
980 strncpy(buf+i, right+1, (j=dot0-right));
981 strcpy(buf+i+j, "py");
982 return buf;
Barry Warsaw28a691b2010-04-17 00:19:56 +0000983}
984
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000985/* Given a pathname for a Python source file, its time of last
986 modification, and a pathname for a compiled file, check whether the
987 compiled file represents the same version of the source. If so,
988 return a FILE pointer for the compiled file, positioned just after
989 the header; if not, return NULL.
990 Doesn't set an exception. */
991
992static FILE *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000993check_compiled_module(char *pathname, time_t mtime, char *cpathname)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000994{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000995 FILE *fp;
996 long magic;
997 long pyc_mtime;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000998
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000999 fp = fopen(cpathname, "rb");
1000 if (fp == NULL)
1001 return NULL;
1002 magic = PyMarshal_ReadLongFromFile(fp);
1003 if (magic != pyc_magic) {
1004 if (Py_VerboseFlag)
1005 PySys_WriteStderr("# %s has bad magic\n", cpathname);
1006 fclose(fp);
1007 return NULL;
1008 }
1009 pyc_mtime = PyMarshal_ReadLongFromFile(fp);
1010 if (pyc_mtime != mtime) {
1011 if (Py_VerboseFlag)
1012 PySys_WriteStderr("# %s has bad mtime\n", cpathname);
1013 fclose(fp);
1014 return NULL;
1015 }
1016 if (Py_VerboseFlag)
1017 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname);
1018 return fp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001019}
1020
1021
1022/* Read a code object from a file and check it for validity */
1023
Guido van Rossum79f25d91997-04-29 20:08:16 +00001024static PyCodeObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001025read_compiled_module(char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001026{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001027 PyObject *co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001028
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001029 co = PyMarshal_ReadLastObjectFromFile(fp);
1030 if (co == NULL)
1031 return NULL;
1032 if (!PyCode_Check(co)) {
1033 PyErr_Format(PyExc_ImportError,
1034 "Non-code object in %.200s", cpathname);
1035 Py_DECREF(co);
1036 return NULL;
1037 }
1038 return (PyCodeObject *)co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001039}
1040
1041
1042/* Load a module from a compiled file, execute it, and return its
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001043 module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001044
Guido van Rossum79f25d91997-04-29 20:08:16 +00001045static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001046load_compiled_module(char *name, char *cpathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001047{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001048 long magic;
1049 PyCodeObject *co;
1050 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001051
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001052 magic = PyMarshal_ReadLongFromFile(fp);
1053 if (magic != pyc_magic) {
1054 PyErr_Format(PyExc_ImportError,
1055 "Bad magic number in %.200s", cpathname);
1056 return NULL;
1057 }
1058 (void) PyMarshal_ReadLongFromFile(fp);
1059 co = read_compiled_module(cpathname, fp);
1060 if (co == NULL)
1061 return NULL;
1062 if (Py_VerboseFlag)
1063 PySys_WriteStderr("import %s # precompiled from %s\n",
1064 name, cpathname);
1065 m = PyImport_ExecCodeModuleWithPathnames(
1066 name, (PyObject *)co, cpathname, cpathname);
1067 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001068
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001069 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001070}
1071
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001072/* Parse a source file and return the corresponding code object */
1073
Guido van Rossum79f25d91997-04-29 20:08:16 +00001074static PyCodeObject *
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00001075parse_source_module(const char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001076{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001077 PyCodeObject *co = NULL;
1078 mod_ty mod;
1079 PyCompilerFlags flags;
1080 PyArena *arena = PyArena_New();
1081 if (arena == NULL)
1082 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001083
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001084 flags.cf_flags = 0;
1085 mod = PyParser_ASTFromFile(fp, pathname, NULL,
1086 Py_file_input, 0, 0, &flags,
1087 NULL, arena);
1088 if (mod) {
1089 co = PyAST_Compile(mod, pathname, NULL, arena);
1090 }
1091 PyArena_Free(arena);
1092 return co;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001093}
1094
1095
Guido van Rossum55a83382000-09-20 20:31:38 +00001096/* Helper to open a bytecode file for writing in exclusive mode */
1097
1098static FILE *
Christian Heimes05e8be12008-02-23 18:30:17 +00001099open_exclusive(char *filename, mode_t mode)
Guido van Rossum55a83382000-09-20 20:31:38 +00001100{
1101#if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001102 /* Use O_EXCL to avoid a race condition when another process tries to
1103 write the same file. When that happens, our open() call fails,
1104 which is just fine (since it's only a cache).
1105 XXX If the file exists and is writable but the directory is not
1106 writable, the file will never be written. Oh well.
1107 */
1108 int fd;
1109 (void) unlink(filename);
1110 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC
Tim Peters42c83af2000-09-29 04:03:10 +00001111#ifdef O_BINARY
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001112 |O_BINARY /* necessary for Windows */
Tim Peters42c83af2000-09-29 04:03:10 +00001113#endif
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001114#ifdef __VMS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001115 , mode, "ctxt=bin", "shr=nil"
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001116#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001117 , mode
Martin v. Löwis79acb9e2002-12-06 12:48:53 +00001118#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001119 );
1120 if (fd < 0)
1121 return NULL;
1122 return fdopen(fd, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +00001123#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001124 /* Best we can do -- on Windows this can't happen anyway */
1125 return fopen(filename, "wb");
Guido van Rossum55a83382000-09-20 20:31:38 +00001126#endif
1127}
1128
1129
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001130/* Write a compiled module to a file, placing the time of last
1131 modification of its source into the header.
1132 Errors are ignored, if a write error occurs an attempt is made to
1133 remove the file. */
1134
1135static void
Christian Heimes05e8be12008-02-23 18:30:17 +00001136write_compiled_module(PyCodeObject *co, char *cpathname, struct stat *srcstat)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001137{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001138 FILE *fp;
1139 char *dirpath;
1140 time_t mtime = srcstat->st_mtime;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001141#ifdef MS_WINDOWS /* since Windows uses different permissions */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001142 mode_t mode = srcstat->st_mode & ~S_IEXEC;
Alexandre Vassalotti9d58e3e2009-07-17 10:55:50 +00001143#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001144 mode_t mode = srcstat->st_mode & ~S_IXUSR & ~S_IXGRP & ~S_IXOTH;
1145 mode_t dirmode = (srcstat->st_mode |
1146 S_IXUSR | S_IXGRP | S_IXOTH |
1147 S_IWUSR | S_IWGRP | S_IWOTH);
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001148#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001149 int saved;
Barry Warsaw28a691b2010-04-17 00:19:56 +00001150
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001151 /* Ensure that the __pycache__ directory exists. */
1152 dirpath = rightmost_sep(cpathname);
1153 if (dirpath == NULL) {
1154 if (Py_VerboseFlag)
1155 PySys_WriteStderr(
1156 "# no %s path found %s\n",
1157 CACHEDIR, cpathname);
1158 return;
1159 }
1160 saved = *dirpath;
1161 *dirpath = '\0';
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001162
1163#ifdef MS_WINDOWS
1164 if (_mkdir(cpathname) < 0 && errno != EEXIST) {
1165#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001166 if (mkdir(cpathname, dirmode) < 0 && errno != EEXIST) {
Daniel Stutzbachc7937792010-09-09 21:18:04 +00001167#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001168 *dirpath = saved;
1169 if (Py_VerboseFlag)
1170 PySys_WriteStderr(
1171 "# cannot create cache dir %s\n", cpathname);
1172 return;
1173 }
1174 *dirpath = saved;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001175
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001176 fp = open_exclusive(cpathname, mode);
1177 if (fp == NULL) {
1178 if (Py_VerboseFlag)
1179 PySys_WriteStderr(
1180 "# can't create %s\n", cpathname);
1181 return;
1182 }
1183 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION);
1184 /* First write a 0 for mtime */
1185 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION);
1186 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION);
1187 if (fflush(fp) != 0 || ferror(fp)) {
1188 if (Py_VerboseFlag)
1189 PySys_WriteStderr("# can't write %s\n", cpathname);
1190 /* Don't keep partial file */
1191 fclose(fp);
1192 (void) unlink(cpathname);
1193 return;
1194 }
1195 /* Now write the true mtime */
1196 fseek(fp, 4L, 0);
1197 assert(mtime < LONG_MAX);
1198 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION);
1199 fflush(fp);
1200 fclose(fp);
1201 if (Py_VerboseFlag)
1202 PySys_WriteStderr("# wrote %s\n", cpathname);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001203}
1204
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001205static void
1206update_code_filenames(PyCodeObject *co, PyObject *oldname, PyObject *newname)
1207{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001208 PyObject *constants, *tmp;
1209 Py_ssize_t i, n;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001210
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001211 if (PyUnicode_Compare(co->co_filename, oldname))
1212 return;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001213
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001214 tmp = co->co_filename;
1215 co->co_filename = newname;
1216 Py_INCREF(co->co_filename);
1217 Py_DECREF(tmp);
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001218
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001219 constants = co->co_consts;
1220 n = PyTuple_GET_SIZE(constants);
1221 for (i = 0; i < n; i++) {
1222 tmp = PyTuple_GET_ITEM(constants, i);
1223 if (PyCode_Check(tmp))
1224 update_code_filenames((PyCodeObject *)tmp,
1225 oldname, newname);
1226 }
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001227}
1228
1229static int
1230update_compiled_module(PyCodeObject *co, char *pathname)
1231{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001232 PyObject *oldname, *newname;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001233
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001234 newname = PyUnicode_DecodeFSDefault(pathname);
1235 if (newname == NULL)
1236 return -1;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001237
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001238 if (!PyUnicode_Compare(co->co_filename, newname)) {
1239 Py_DECREF(newname);
1240 return 0;
1241 }
Hirokazu Yamamoto4f447fb2009-03-04 01:52:10 +00001242
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001243 oldname = co->co_filename;
1244 Py_INCREF(oldname);
1245 update_code_filenames(co, oldname, newname);
1246 Py_DECREF(oldname);
1247 Py_DECREF(newname);
1248 return 1;
Antoine Pitroud35cbf62009-01-06 19:02:24 +00001249}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001250
1251/* Load a source module from a given file and return its module
Guido van Rossum7f9fa971995-01-20 16:53:12 +00001252 object WITH INCREMENTED REFERENCE COUNT. If there's a matching
1253 byte-compiled file, use that instead. */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001254
Guido van Rossum79f25d91997-04-29 20:08:16 +00001255static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001256load_source_module(char *name, char *pathname, FILE *fp)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001257{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001258 struct stat st;
1259 FILE *fpc;
1260 char buf[MAXPATHLEN+1];
1261 char *cpathname;
1262 PyCodeObject *co;
1263 PyObject *m;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00001264
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001265 if (fstat(fileno(fp), &st) != 0) {
1266 PyErr_Format(PyExc_RuntimeError,
1267 "unable to get file status from '%s'",
1268 pathname);
1269 return NULL;
1270 }
Fred Drake4c82b232000-06-30 16:18:57 +00001271#if SIZEOF_TIME_T > 4
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001272 /* Python's .pyc timestamp handling presumes that the timestamp fits
1273 in 4 bytes. This will be fine until sometime in the year 2038,
1274 when a 4-byte signed time_t will overflow.
1275 */
1276 if (st.st_mtime >> 32) {
1277 PyErr_SetString(PyExc_OverflowError,
1278 "modification time overflows a 4 byte field");
1279 return NULL;
1280 }
Fred Drake4c82b232000-06-30 16:18:57 +00001281#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001282 cpathname = make_compiled_pathname(
1283 pathname, buf, (size_t)MAXPATHLEN + 1, !Py_OptimizeFlag);
1284 if (cpathname != NULL &&
1285 (fpc = check_compiled_module(pathname, st.st_mtime, cpathname))) {
1286 co = read_compiled_module(cpathname, fpc);
1287 fclose(fpc);
1288 if (co == NULL)
1289 return NULL;
1290 if (update_compiled_module(co, pathname) < 0)
1291 return NULL;
1292 if (Py_VerboseFlag)
1293 PySys_WriteStderr("import %s # precompiled from %s\n",
1294 name, cpathname);
1295 pathname = cpathname;
1296 }
1297 else {
1298 co = parse_source_module(pathname, fp);
1299 if (co == NULL)
1300 return NULL;
1301 if (Py_VerboseFlag)
1302 PySys_WriteStderr("import %s # from %s\n",
1303 name, pathname);
1304 if (cpathname) {
1305 PyObject *ro = PySys_GetObject("dont_write_bytecode");
1306 if (ro == NULL || !PyObject_IsTrue(ro))
1307 write_compiled_module(co, cpathname, &st);
1308 }
1309 }
1310 m = PyImport_ExecCodeModuleWithPathnames(
1311 name, (PyObject *)co, pathname, cpathname);
1312 Py_DECREF(co);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001313
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001314 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001315}
1316
Christian Heimes3b06e532008-01-07 20:12:44 +00001317/* Get source file -> unicode or None
1318 * Returns the path to the py file if available, else the given path
1319 */
1320static PyObject *
Barry Warsaw28a691b2010-04-17 00:19:56 +00001321get_sourcefile(char *file)
Christian Heimes3b06e532008-01-07 20:12:44 +00001322{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001323 char py[MAXPATHLEN + 1];
1324 Py_ssize_t len;
1325 PyObject *u;
1326 struct stat statbuf;
Christian Heimes3b06e532008-01-07 20:12:44 +00001327
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001328 if (!file || !*file) {
1329 Py_RETURN_NONE;
1330 }
Christian Heimes3b06e532008-01-07 20:12:44 +00001331
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001332 len = strlen(file);
1333 /* match '*.py?' */
1334 if (len > MAXPATHLEN || PyOS_strnicmp(&file[len-4], ".py", 3) != 0) {
1335 return PyUnicode_DecodeFSDefault(file);
1336 }
Christian Heimes3b06e532008-01-07 20:12:44 +00001337
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001338 /* Start by trying to turn PEP 3147 path into source path. If that
1339 * fails, just chop off the trailing character, i.e. legacy pyc path
1340 * to py.
1341 */
1342 if (make_source_pathname(file, py) == NULL) {
1343 strncpy(py, file, len-1);
1344 py[len-1] = '\0';
1345 }
Barry Warsaw28a691b2010-04-17 00:19:56 +00001346
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001347 if (stat(py, &statbuf) == 0 &&
1348 S_ISREG(statbuf.st_mode)) {
1349 u = PyUnicode_DecodeFSDefault(py);
1350 }
1351 else {
1352 u = PyUnicode_DecodeFSDefault(file);
1353 }
1354 return u;
Christian Heimes3b06e532008-01-07 20:12:44 +00001355}
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001356
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001357/* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001358static PyObject *load_module(char *, FILE *, char *, int, PyObject *);
1359static struct filedescr *find_module(char *, char *, PyObject *,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001360 char *, size_t, FILE **, PyObject **);
Christian Heimes3b06e532008-01-07 20:12:44 +00001361static struct _frozen * find_frozen(char *);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001362
1363/* Load a package and return its module object WITH INCREMENTED
1364 REFERENCE COUNT */
1365
1366static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001367load_package(char *name, char *pathname)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001368{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001369 PyObject *m, *d;
1370 PyObject *file = NULL;
1371 PyObject *path = NULL;
1372 int err;
1373 char buf[MAXPATHLEN+1];
1374 FILE *fp = NULL;
1375 struct filedescr *fdp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001376
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001377 m = PyImport_AddModule(name);
1378 if (m == NULL)
1379 return NULL;
1380 if (Py_VerboseFlag)
1381 PySys_WriteStderr("import %s # directory %s\n",
1382 name, pathname);
1383 d = PyModule_GetDict(m);
1384 file = get_sourcefile(pathname);
1385 if (file == NULL)
1386 goto error;
1387 path = Py_BuildValue("[O]", file);
1388 if (path == NULL)
1389 goto error;
1390 err = PyDict_SetItemString(d, "__file__", file);
1391 if (err == 0)
1392 err = PyDict_SetItemString(d, "__path__", path);
1393 if (err != 0)
1394 goto error;
1395 buf[0] = '\0';
1396 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL);
1397 if (fdp == NULL) {
1398 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1399 PyErr_Clear();
1400 Py_INCREF(m);
1401 }
1402 else
1403 m = NULL;
1404 goto cleanup;
1405 }
1406 m = load_module(name, fp, buf, fdp->type, NULL);
1407 if (fp != NULL)
1408 fclose(fp);
1409 goto cleanup;
Tim Peters1cd70172004-08-02 03:52:12 +00001410
1411 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001412 m = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001413 cleanup:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001414 Py_XDECREF(path);
1415 Py_XDECREF(file);
1416 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001417}
1418
1419
1420/* Helper to test for built-in module */
1421
1422static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00001423is_builtin(char *name)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001424{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001425 int i;
1426 for (i = 0; PyImport_Inittab[i].name != NULL; i++) {
1427 if (strcmp(name, PyImport_Inittab[i].name) == 0) {
1428 if (PyImport_Inittab[i].initfunc == NULL)
1429 return -1;
1430 else
1431 return 1;
1432 }
1433 }
1434 return 0;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001435}
1436
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001437
Just van Rossum52e14d62002-12-30 22:08:05 +00001438/* Return an importer object for a sys.path/pkg.__path__ item 'p',
1439 possibly by fetching it from the path_importer_cache dict. If it
Thomas Wouters89f507f2006-12-13 04:49:30 +00001440 wasn't yet cached, traverse path_hooks until a hook is found
Just van Rossum52e14d62002-12-30 22:08:05 +00001441 that can handle the path item. Return None if no hook could;
1442 this tells our caller it should fall back to the builtin
1443 import mechanism. Cache the result in path_importer_cache.
1444 Returns a borrowed reference. */
1445
1446static PyObject *
1447get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001448 PyObject *p)
Just van Rossum52e14d62002-12-30 22:08:05 +00001449{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001450 PyObject *importer;
1451 Py_ssize_t j, nhooks;
Just van Rossum52e14d62002-12-30 22:08:05 +00001452
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001453 /* These conditions are the caller's responsibility: */
1454 assert(PyList_Check(path_hooks));
1455 assert(PyDict_Check(path_importer_cache));
Just van Rossum52e14d62002-12-30 22:08:05 +00001456
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001457 nhooks = PyList_Size(path_hooks);
1458 if (nhooks < 0)
1459 return NULL; /* Shouldn't happen */
Just van Rossum52e14d62002-12-30 22:08:05 +00001460
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001461 importer = PyDict_GetItem(path_importer_cache, p);
1462 if (importer != NULL)
1463 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001464
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001465 /* set path_importer_cache[p] to None to avoid recursion */
1466 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0)
1467 return NULL;
Just van Rossum52e14d62002-12-30 22:08:05 +00001468
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001469 for (j = 0; j < nhooks; j++) {
1470 PyObject *hook = PyList_GetItem(path_hooks, j);
1471 if (hook == NULL)
1472 return NULL;
1473 importer = PyObject_CallFunctionObjArgs(hook, p, NULL);
1474 if (importer != NULL)
1475 break;
Just van Rossum52e14d62002-12-30 22:08:05 +00001476
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001477 if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
1478 return NULL;
1479 }
1480 PyErr_Clear();
1481 }
1482 if (importer == NULL) {
1483 importer = PyObject_CallFunctionObjArgs(
1484 (PyObject *)&PyNullImporter_Type, p, NULL
1485 );
1486 if (importer == NULL) {
1487 if (PyErr_ExceptionMatches(PyExc_ImportError)) {
1488 PyErr_Clear();
1489 return Py_None;
1490 }
1491 }
1492 }
1493 if (importer != NULL) {
1494 int err = PyDict_SetItem(path_importer_cache, p, importer);
1495 Py_DECREF(importer);
1496 if (err != 0)
1497 return NULL;
1498 }
1499 return importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001500}
1501
Christian Heimes9cd17752007-11-18 19:35:23 +00001502PyAPI_FUNC(PyObject *)
1503PyImport_GetImporter(PyObject *path) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001504 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
Christian Heimes9cd17752007-11-18 19:35:23 +00001505
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001506 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) {
1507 if ((path_hooks = PySys_GetObject("path_hooks"))) {
1508 importer = get_path_importer(path_importer_cache,
1509 path_hooks, path);
1510 }
1511 }
1512 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
1513 return importer;
Christian Heimes9cd17752007-11-18 19:35:23 +00001514}
1515
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001516/* Search the path (default sys.path) for a module. Return the
1517 corresponding filedescr struct, and (via return arguments) the
1518 pathname and an open file. Return NULL if the module is not found. */
1519
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001520#ifdef MS_COREDLL
Thomas Woutersb4bd21c2000-07-22 23:38:01 +00001521extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001522 char *, Py_ssize_t);
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001523#endif
1524
Martin v. Löwis18e16552006-02-15 17:27:45 +00001525static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *);
Tim Petersdbd9ba62000-07-09 03:09:57 +00001526static int find_init_module(char *); /* Forward */
Just van Rossum52e14d62002-12-30 22:08:05 +00001527static struct filedescr importhookdescr = {"", "", IMP_HOOK};
Guido van Rossum197346f1997-10-31 18:38:52 +00001528
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001529static struct filedescr *
Just van Rossum52e14d62002-12-30 22:08:05 +00001530find_module(char *fullname, char *subname, PyObject *path, char *buf,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001531 size_t buflen, FILE **p_fp, PyObject **p_loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001532{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001533 Py_ssize_t i, npath;
1534 size_t len, namelen;
1535 struct filedescr *fdp = NULL;
1536 char *filemode;
1537 FILE *fp = NULL;
1538 PyObject *path_hooks, *path_importer_cache;
1539 struct stat statbuf;
1540 static struct filedescr fd_frozen = {"", "", PY_FROZEN};
1541 static struct filedescr fd_builtin = {"", "", C_BUILTIN};
1542 static struct filedescr fd_package = {"", "", PKG_DIRECTORY};
1543 char name[MAXPATHLEN+1];
Andrew MacIntyred9400542002-02-26 11:41:34 +00001544#if defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001545 size_t saved_len;
1546 size_t saved_namelen;
1547 char *saved_buf = NULL;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001548#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001549 if (p_loader != NULL)
1550 *p_loader = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001551
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001552 if (strlen(subname) > MAXPATHLEN) {
1553 PyErr_SetString(PyExc_OverflowError,
1554 "module name is too long");
1555 return NULL;
1556 }
1557 strcpy(name, subname);
Just van Rossum52e14d62002-12-30 22:08:05 +00001558
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001559 /* sys.meta_path import hook */
1560 if (p_loader != NULL) {
1561 PyObject *meta_path;
Just van Rossum52e14d62002-12-30 22:08:05 +00001562
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001563 meta_path = PySys_GetObject("meta_path");
1564 if (meta_path == NULL || !PyList_Check(meta_path)) {
1565 PyErr_SetString(PyExc_ImportError,
1566 "sys.meta_path must be a list of "
1567 "import hooks");
1568 return NULL;
1569 }
1570 Py_INCREF(meta_path); /* zap guard */
1571 npath = PyList_Size(meta_path);
1572 for (i = 0; i < npath; i++) {
1573 PyObject *loader;
1574 PyObject *hook = PyList_GetItem(meta_path, i);
1575 loader = PyObject_CallMethod(hook, "find_module",
1576 "sO", fullname,
1577 path != NULL ?
1578 path : Py_None);
1579 if (loader == NULL) {
1580 Py_DECREF(meta_path);
1581 return NULL; /* true error */
1582 }
1583 if (loader != Py_None) {
1584 /* a loader was found */
1585 *p_loader = loader;
1586 Py_DECREF(meta_path);
1587 return &importhookdescr;
1588 }
1589 Py_DECREF(loader);
1590 }
1591 Py_DECREF(meta_path);
1592 }
Guido van Rossum0506a431998-08-11 15:07:39 +00001593
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001594 if (find_frozen(fullname) != NULL) {
1595 strcpy(buf, fullname);
1596 return &fd_frozen;
1597 }
Benjamin Petersond968e272008-11-05 22:48:33 +00001598
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001599 if (path == NULL) {
1600 if (is_builtin(name)) {
1601 strcpy(buf, name);
1602 return &fd_builtin;
1603 }
Guido van Rossumac279101996-08-22 23:10:58 +00001604#ifdef MS_COREDLL
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001605 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen);
1606 if (fp != NULL) {
1607 *p_fp = fp;
1608 return fdp;
1609 }
Guido van Rossuma5a3db71996-04-09 02:39:59 +00001610#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001611 path = PySys_GetObject("path");
1612 }
Benjamin Petersond968e272008-11-05 22:48:33 +00001613
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001614 if (path == NULL || !PyList_Check(path)) {
1615 PyErr_SetString(PyExc_ImportError,
1616 "sys.path must be a list of directory names");
1617 return NULL;
1618 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001619
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001620 path_hooks = PySys_GetObject("path_hooks");
1621 if (path_hooks == NULL || !PyList_Check(path_hooks)) {
1622 PyErr_SetString(PyExc_ImportError,
1623 "sys.path_hooks must be a list of "
1624 "import hooks");
1625 return NULL;
1626 }
1627 path_importer_cache = PySys_GetObject("path_importer_cache");
1628 if (path_importer_cache == NULL ||
1629 !PyDict_Check(path_importer_cache)) {
1630 PyErr_SetString(PyExc_ImportError,
1631 "sys.path_importer_cache must be a dict");
1632 return NULL;
1633 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001634
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001635 npath = PyList_Size(path);
1636 namelen = strlen(name);
1637 for (i = 0; i < npath; i++) {
1638 PyObject *v = PyList_GetItem(path, i);
1639 PyObject *origv = v;
1640 const char *base;
1641 Py_ssize_t size;
1642 if (!v)
1643 return NULL;
1644 if (PyUnicode_Check(v)) {
Victor Stinnerae6265f2010-05-15 16:27:27 +00001645 v = PyUnicode_EncodeFSDefault(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001646 if (v == NULL)
1647 return NULL;
1648 }
1649 else if (!PyBytes_Check(v))
1650 continue;
1651 else
1652 Py_INCREF(v);
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001653
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001654 base = PyBytes_AS_STRING(v);
1655 size = PyBytes_GET_SIZE(v);
1656 len = size;
1657 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
1658 Py_DECREF(v);
1659 continue; /* Too long */
1660 }
1661 strcpy(buf, base);
1662 Py_DECREF(v);
Amaury Forgeot d'Arcf1ca0b12008-06-11 17:40:47 +00001663
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001664 if (strlen(buf) != len) {
1665 continue; /* v contains '\0' */
1666 }
Just van Rossum52e14d62002-12-30 22:08:05 +00001667
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001668 /* sys.path_hooks import hook */
1669 if (p_loader != NULL) {
1670 PyObject *importer;
Just van Rossum52e14d62002-12-30 22:08:05 +00001671
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001672 importer = get_path_importer(path_importer_cache,
1673 path_hooks, origv);
1674 if (importer == NULL) {
1675 return NULL;
1676 }
1677 /* Note: importer is a borrowed reference */
1678 if (importer != Py_None) {
1679 PyObject *loader;
1680 loader = PyObject_CallMethod(importer,
1681 "find_module",
1682 "s", fullname);
1683 if (loader == NULL)
1684 return NULL; /* error */
1685 if (loader != Py_None) {
1686 /* a loader was found */
1687 *p_loader = loader;
1688 return &importhookdescr;
1689 }
1690 Py_DECREF(loader);
1691 continue;
1692 }
1693 }
1694 /* no hook was found, use builtin import */
Just van Rossum52e14d62002-12-30 22:08:05 +00001695
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001696 if (len > 0 && buf[len-1] != SEP
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001697#ifdef ALTSEP
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001698 && buf[len-1] != ALTSEP
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001699#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001700 )
1701 buf[len++] = SEP;
1702 strcpy(buf+len, name);
1703 len += namelen;
Tim Peters50d8d372001-02-28 05:34:27 +00001704
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001705 /* Check for package import (buf holds a directory name,
1706 and there's an __init__ module in that directory */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001707#ifdef HAVE_STAT
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001708 if (stat(buf, &statbuf) == 0 && /* it exists */
1709 S_ISDIR(statbuf.st_mode) && /* it's a directory */
1710 case_ok(buf, len, namelen, name)) { /* case matches */
1711 if (find_init_module(buf)) { /* and has __init__.py */
1712 return &fd_package;
1713 }
1714 else {
1715 char warnstr[MAXPATHLEN+80];
1716 sprintf(warnstr, "Not importing directory "
1717 "'%.*s': missing __init__.py",
1718 MAXPATHLEN, buf);
1719 if (PyErr_WarnEx(PyExc_ImportWarning,
1720 warnstr, 1)) {
1721 return NULL;
1722 }
1723 }
1724 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001725#endif
Andrew MacIntyred9400542002-02-26 11:41:34 +00001726#if defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001727 /* take a snapshot of the module spec for restoration
1728 * after the 8 character DLL hackery
1729 */
1730 saved_buf = strdup(buf);
1731 saved_len = len;
1732 saved_namelen = namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001733#endif /* PYOS_OS2 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001734 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
Guido van Rossum04110fb2007-08-24 16:32:05 +00001735#if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001736 /* OS/2 limits DLLs to 8 character names (w/o
1737 extension)
1738 * so if the name is longer than that and its a
1739 * dynamically loaded module we're going to try,
1740 * truncate the name before trying
1741 */
1742 if (strlen(subname) > 8) {
1743 /* is this an attempt to load a C extension? */
1744 const struct filedescr *scan;
1745 scan = _PyImport_DynLoadFiletab;
1746 while (scan->suffix != NULL) {
1747 if (!strcmp(scan->suffix, fdp->suffix))
1748 break;
1749 else
1750 scan++;
1751 }
1752 if (scan->suffix != NULL) {
1753 /* yes, so truncate the name */
1754 namelen = 8;
1755 len -= strlen(subname) - namelen;
1756 buf[len] = '\0';
1757 }
1758 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001759#endif /* PYOS_OS2 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001760 strcpy(buf+len, fdp->suffix);
1761 if (Py_VerboseFlag > 1)
1762 PySys_WriteStderr("# trying %s\n", buf);
1763 filemode = fdp->mode;
1764 if (filemode[0] == 'U')
1765 filemode = "r" PY_STDIOTEXTMODE;
1766 fp = fopen(buf, filemode);
1767 if (fp != NULL) {
1768 if (case_ok(buf, len, namelen, name))
1769 break;
1770 else { /* continue search */
1771 fclose(fp);
1772 fp = NULL;
1773 }
1774 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001775#if defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001776 /* restore the saved snapshot */
1777 strcpy(buf, saved_buf);
1778 len = saved_len;
1779 namelen = saved_namelen;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001780#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001781 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001782#if defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001783 /* don't need/want the module name snapshot anymore */
1784 if (saved_buf)
1785 {
1786 free(saved_buf);
1787 saved_buf = NULL;
1788 }
Andrew MacIntyred9400542002-02-26 11:41:34 +00001789#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001790 if (fp != NULL)
1791 break;
1792 }
1793 if (fp == NULL) {
1794 PyErr_Format(PyExc_ImportError,
1795 "No module named %.200s", name);
1796 return NULL;
1797 }
1798 *p_fp = fp;
1799 return fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001800}
1801
Martin v. Löwis18e16552006-02-15 17:27:45 +00001802/* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name)
Tim Petersd1e87a82001-03-01 18:12:00 +00001803 * The arguments here are tricky, best shown by example:
1804 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
1805 * ^ ^ ^ ^
1806 * |--------------------- buf ---------------------|
1807 * |------------------- len ------------------|
1808 * |------ name -------|
1809 * |----- namelen -----|
1810 * buf is the full path, but len only counts up to (& exclusive of) the
1811 * extension. name is the module name, also exclusive of extension.
1812 *
1813 * We've already done a successful stat() or fopen() on buf, so know that
1814 * there's some match, possibly case-insensitive.
1815 *
Tim Peters50d8d372001-02-28 05:34:27 +00001816 * case_ok() is to return 1 if there's a case-sensitive match for
1817 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK
1818 * exists.
Tim Petersd1e87a82001-03-01 18:12:00 +00001819 *
Tim Peters50d8d372001-02-28 05:34:27 +00001820 * case_ok() is used to implement case-sensitive import semantics even
1821 * on platforms with case-insensitive filesystems. It's trivial to implement
1822 * for case-sensitive filesystems. It's pretty much a cross-platform
1823 * nightmare for systems with case-insensitive filesystems.
1824 */
Guido van Rossum0980bd91998-02-13 17:18:36 +00001825
Tim Peters50d8d372001-02-28 05:34:27 +00001826/* First we may need a pile of platform-specific header files; the sequence
1827 * of #if's here should match the sequence in the body of case_ok().
1828 */
Jason Tishler7961aa62005-05-20 00:56:54 +00001829#if defined(MS_WINDOWS)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001830#include <windows.h>
Guido van Rossum4c3f57c2001-01-10 20:40:46 +00001831
Tim Peters50d8d372001-02-28 05:34:27 +00001832#elif defined(DJGPP)
1833#include <dir.h>
1834
Jason Tishler7961aa62005-05-20 00:56:54 +00001835#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Tim Peters430f5d42001-03-01 01:30:56 +00001836#include <sys/types.h>
1837#include <dirent.h>
1838
Andrew MacIntyred9400542002-02-26 11:41:34 +00001839#elif defined(PYOS_OS2)
1840#define INCL_DOS
1841#define INCL_DOSERRORS
1842#define INCL_NOPMAPI
1843#include <os2.h>
Tim Peters50d8d372001-02-28 05:34:27 +00001844#endif
1845
Guido van Rossum0980bd91998-02-13 17:18:36 +00001846static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00001847case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name)
Guido van Rossum0980bd91998-02-13 17:18:36 +00001848{
Tim Peters50d8d372001-02-28 05:34:27 +00001849/* Pick a platform-specific implementation; the sequence of #if's here should
1850 * match the sequence just above.
1851 */
1852
Jason Tishler7961aa62005-05-20 00:56:54 +00001853/* MS_WINDOWS */
1854#if defined(MS_WINDOWS)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001855 WIN32_FIND_DATA data;
1856 HANDLE h;
Tim Peters50d8d372001-02-28 05:34:27 +00001857
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001858 if (Py_GETENV("PYTHONCASEOK") != NULL)
1859 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001860
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001861 h = FindFirstFile(buf, &data);
1862 if (h == INVALID_HANDLE_VALUE) {
1863 PyErr_Format(PyExc_NameError,
1864 "Can't find file for module %.100s\n(filename %.300s)",
1865 name, buf);
1866 return 0;
1867 }
1868 FindClose(h);
1869 return strncmp(data.cFileName, name, namelen) == 0;
Tim Peters50d8d372001-02-28 05:34:27 +00001870
1871/* DJGPP */
1872#elif defined(DJGPP)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001873 struct ffblk ffblk;
1874 int done;
Tim Peters50d8d372001-02-28 05:34:27 +00001875
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001876 if (Py_GETENV("PYTHONCASEOK") != NULL)
1877 return 1;
Tim Peters50d8d372001-02-28 05:34:27 +00001878
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001879 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC);
1880 if (done) {
1881 PyErr_Format(PyExc_NameError,
1882 "Can't find file for module %.100s\n(filename %.300s)",
1883 name, buf);
1884 return 0;
1885 }
1886 return strncmp(ffblk.ff_name, name, namelen) == 0;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001887
Jason Tishler7961aa62005-05-20 00:56:54 +00001888/* new-fangled macintosh (macosx) or Cygwin */
1889#elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001890 DIR *dirp;
1891 struct dirent *dp;
1892 char dirname[MAXPATHLEN + 1];
1893 const int dirlen = len - namelen - 1; /* don't want trailing SEP */
Tim Peters430f5d42001-03-01 01:30:56 +00001894
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001895 if (Py_GETENV("PYTHONCASEOK") != NULL)
1896 return 1;
Tim Petersdbe6ebb2001-03-01 08:47:29 +00001897
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001898 /* Copy the dir component into dirname; substitute "." if empty */
1899 if (dirlen <= 0) {
1900 dirname[0] = '.';
1901 dirname[1] = '\0';
1902 }
1903 else {
1904 assert(dirlen <= MAXPATHLEN);
1905 memcpy(dirname, buf, dirlen);
1906 dirname[dirlen] = '\0';
1907 }
1908 /* Open the directory and search the entries for an exact match. */
1909 dirp = opendir(dirname);
1910 if (dirp) {
1911 char *nameWithExt = buf + len - namelen;
1912 while ((dp = readdir(dirp)) != NULL) {
1913 const int thislen =
Tim Peters430f5d42001-03-01 01:30:56 +00001914#ifdef _DIRENT_HAVE_D_NAMELEN
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001915 dp->d_namlen;
Tim Peters430f5d42001-03-01 01:30:56 +00001916#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001917 strlen(dp->d_name);
Tim Peters430f5d42001-03-01 01:30:56 +00001918#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001919 if (thislen >= namelen &&
1920 strcmp(dp->d_name, nameWithExt) == 0) {
1921 (void)closedir(dirp);
1922 return 1; /* Found */
1923 }
1924 }
1925 (void)closedir(dirp);
1926 }
1927 return 0 ; /* Not found */
Tim Peters430f5d42001-03-01 01:30:56 +00001928
Andrew MacIntyred9400542002-02-26 11:41:34 +00001929/* OS/2 */
1930#elif defined(PYOS_OS2)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001931 HDIR hdir = 1;
1932 ULONG srchcnt = 1;
1933 FILEFINDBUF3 ffbuf;
1934 APIRET rc;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001935
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001936 if (Py_GETENV("PYTHONCASEOK") != NULL)
1937 return 1;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001938
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001939 rc = DosFindFirst(buf,
1940 &hdir,
1941 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY,
1942 &ffbuf, sizeof(ffbuf),
1943 &srchcnt,
1944 FIL_STANDARD);
1945 if (rc != NO_ERROR)
1946 return 0;
1947 return strncmp(ffbuf.achName, name, namelen) == 0;
Andrew MacIntyred9400542002-02-26 11:41:34 +00001948
Tim Peters50d8d372001-02-28 05:34:27 +00001949/* assuming it's a case-sensitive filesystem, so there's nothing to do! */
1950#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001951 return 1;
Guido van Rossum0980bd91998-02-13 17:18:36 +00001952
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001953#endif
Tim Peters50d8d372001-02-28 05:34:27 +00001954}
Guido van Rossum4d1b3b91998-02-13 23:27:59 +00001955
Victor Stinnerf52b7052010-08-14 17:06:04 +00001956/* Call _wfopen() on Windows, or fopen() otherwise. Return the new file
1957 object on success, or NULL if the file cannot be open or (if
1958 PyErr_Occurred()) on unicode error */
1959
1960FILE*
1961_Py_fopen(PyObject *unicode, const char *mode)
1962{
1963#ifdef MS_WINDOWS
Victor Stinner255dfdb2010-09-29 10:28:51 +00001964 wchar_t *path;
Victor Stinnerf52b7052010-08-14 17:06:04 +00001965 wchar_t wmode[10];
Victor Stinnerf52b7052010-08-14 17:06:04 +00001966 int usize;
Victor Stinner255dfdb2010-09-29 10:28:51 +00001967 FILE *f;
Victor Stinnerf52b7052010-08-14 17:06:04 +00001968
1969 usize = MultiByteToWideChar(CP_ACP, 0, mode, -1, wmode, sizeof(wmode));
1970 if (usize == 0)
1971 return NULL;
1972
Victor Stinnerbeb4135b2010-10-07 01:02:42 +00001973 path = PyUnicode_AsWideCharString(unicode, NULL);
Victor Stinner255dfdb2010-09-29 10:28:51 +00001974 if (path == NULL)
1975 return NULL;
1976 f = _wfopen(path, wmode);
1977 PyMem_Free(path);
1978 return f;
Victor Stinnerf52b7052010-08-14 17:06:04 +00001979#else
1980 FILE *f;
1981 PyObject *bytes = PyUnicode_EncodeFSDefault(unicode);
1982 if (bytes == NULL)
1983 return NULL;
1984 f = fopen(PyBytes_AS_STRING(bytes), mode);
1985 Py_DECREF(bytes);
1986 return f;
1987#endif
1988}
Guido van Rossum0980bd91998-02-13 17:18:36 +00001989
Guido van Rossum197346f1997-10-31 18:38:52 +00001990#ifdef HAVE_STAT
Victor Stinner4f4402c2010-08-14 14:50:26 +00001991
1992/* Call _wstat() on Windows, or stat() otherwise. Only fill st_mode
1993 attribute on Windows. Return 0 on success, -1 on stat error or (if
1994 PyErr_Occurred()) unicode error. */
1995
1996int
1997_Py_stat(PyObject *unicode, struct stat *statbuf)
1998{
1999#ifdef MS_WINDOWS
Victor Stinner255dfdb2010-09-29 10:28:51 +00002000 wchar_t *path;
Victor Stinner4f4402c2010-08-14 14:50:26 +00002001 int err;
2002 struct _stat wstatbuf;
2003
Victor Stinnerbeb4135b2010-10-07 01:02:42 +00002004 path = PyUnicode_AsWideCharString(unicode, NULL);
Victor Stinner255dfdb2010-09-29 10:28:51 +00002005 if (path == NULL)
Victor Stinner4f4402c2010-08-14 14:50:26 +00002006 return -1;
2007 err = _wstat(path, &wstatbuf);
Victor Stinner255dfdb2010-09-29 10:28:51 +00002008 PyMem_Free(path);
Victor Stinner4f4402c2010-08-14 14:50:26 +00002009 if (!err)
2010 statbuf->st_mode = wstatbuf.st_mode;
2011 return err;
2012#else
2013 int ret;
2014 PyObject *bytes = PyUnicode_EncodeFSDefault(unicode);
2015 if (bytes == NULL)
2016 return -1;
2017 ret = stat(PyBytes_AS_STRING(bytes), statbuf);
2018 Py_DECREF(bytes);
2019 return ret;
2020#endif
2021}
2022
Guido van Rossum197346f1997-10-31 18:38:52 +00002023/* Helper to look for __init__.py or __init__.py[co] in potential package */
2024static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002025find_init_module(char *buf)
Guido van Rossum197346f1997-10-31 18:38:52 +00002026{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002027 const size_t save_len = strlen(buf);
2028 size_t i = save_len;
2029 char *pname; /* pointer to start of __init__ */
2030 struct stat statbuf;
Guido van Rossum197346f1997-10-31 18:38:52 +00002031
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002032/* For calling case_ok(buf, len, namelen, name):
2033 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0
2034 * ^ ^ ^ ^
2035 * |--------------------- buf ---------------------|
2036 * |------------------- len ------------------|
2037 * |------ name -------|
2038 * |----- namelen -----|
Tim Peters0f9431f2001-07-05 03:47:53 +00002039 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002040 if (save_len + 13 >= MAXPATHLEN)
2041 return 0;
2042 buf[i++] = SEP;
2043 pname = buf + i;
2044 strcpy(pname, "__init__.py");
2045 if (stat(buf, &statbuf) == 0) {
2046 if (case_ok(buf,
2047 save_len + 9, /* len("/__init__") */
2048 8, /* len("__init__") */
2049 pname)) {
2050 buf[save_len] = '\0';
2051 return 1;
2052 }
2053 }
2054 i += strlen(pname);
2055 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c");
2056 if (stat(buf, &statbuf) == 0) {
2057 if (case_ok(buf,
2058 save_len + 9, /* len("/__init__") */
2059 8, /* len("__init__") */
2060 pname)) {
2061 buf[save_len] = '\0';
2062 return 1;
2063 }
2064 }
2065 buf[save_len] = '\0';
2066 return 0;
Guido van Rossum197346f1997-10-31 18:38:52 +00002067}
Guido van Rossum48a680c2001-03-02 06:34:14 +00002068
Guido van Rossum197346f1997-10-31 18:38:52 +00002069#endif /* HAVE_STAT */
2070
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002071
Tim Petersdbd9ba62000-07-09 03:09:57 +00002072static int init_builtin(char *); /* Forward */
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002073
Victor Stinner44c6c152010-08-09 00:59:10 +00002074static PyObject*
2075load_builtin(char *name, char *pathname, int type)
2076{
2077 PyObject *m, *modules;
2078 int err;
2079
2080 if (pathname != NULL && pathname[0] != '\0')
2081 name = pathname;
2082
2083 if (type == C_BUILTIN)
2084 err = init_builtin(name);
2085 else
2086 err = PyImport_ImportFrozenModule(name);
2087 if (err < 0)
2088 return NULL;
2089 if (err == 0) {
2090 PyErr_Format(PyExc_ImportError,
2091 "Purported %s module %.200s not found",
2092 type == C_BUILTIN ?
2093 "builtin" : "frozen",
2094 name);
2095 return NULL;
2096 }
2097
2098 modules = PyImport_GetModuleDict();
2099 m = PyDict_GetItemString(modules, name);
2100 if (m == NULL) {
2101 PyErr_Format(
2102 PyExc_ImportError,
2103 "%s module %.200s not properly initialized",
2104 type == C_BUILTIN ?
2105 "builtin" : "frozen",
2106 name);
2107 return NULL;
2108 }
2109 Py_INCREF(m);
2110 return m;
2111}
2112
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002113/* Load an external module using the default search path and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002114 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002115
Guido van Rossum79f25d91997-04-29 20:08:16 +00002116static PyObject *
Alexandre Vassalottie223eb82009-07-29 20:12:15 +00002117load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002118{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002119 PyObject *m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002120
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002121 /* First check that there's an open file (if we need one) */
2122 switch (type) {
2123 case PY_SOURCE:
2124 case PY_COMPILED:
2125 if (fp == NULL) {
2126 PyErr_Format(PyExc_ValueError,
2127 "file object required for import (type code %d)",
2128 type);
2129 return NULL;
2130 }
2131 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002132
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002133 switch (type) {
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002134
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002135 case PY_SOURCE:
2136 m = load_source_module(name, pathname, fp);
2137 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002138
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002139 case PY_COMPILED:
2140 m = load_compiled_module(name, pathname, fp);
2141 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002142
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002143#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002144 case C_EXTENSION:
2145 m = _PyImport_LoadDynamicModule(name, pathname, fp);
2146 break;
Guido van Rossum96a8fb71999-12-22 14:09:35 +00002147#endif
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002148
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002149 case PKG_DIRECTORY:
2150 m = load_package(name, pathname);
2151 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002152
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002153 case C_BUILTIN:
2154 case PY_FROZEN:
Victor Stinner44c6c152010-08-09 00:59:10 +00002155 m = load_builtin(name, pathname, type);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002156 break;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002157
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002158 case IMP_HOOK: {
2159 if (loader == NULL) {
2160 PyErr_SetString(PyExc_ImportError,
2161 "import hook without loader");
2162 return NULL;
2163 }
2164 m = PyObject_CallMethod(loader, "load_module", "s", name);
2165 break;
2166 }
Just van Rossum52e14d62002-12-30 22:08:05 +00002167
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002168 default:
2169 PyErr_Format(PyExc_ImportError,
2170 "Don't know how to import %.200s (type code %d)",
2171 name, type);
2172 m = NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002173
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002174 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002175
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002176 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002177}
2178
2179
2180/* Initialize a built-in module.
Thomas Wouters89f507f2006-12-13 04:49:30 +00002181 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002182 an exception set if the initialization failed. */
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002183
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002184static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002185init_builtin(char *name)
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002186{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002187 struct _inittab *p;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002188
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002189 if (_PyImport_FindExtension(name, name) != NULL)
2190 return 1;
Guido van Rossum25ce5661997-08-02 03:10:38 +00002191
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002192 for (p = PyImport_Inittab; p->name != NULL; p++) {
2193 PyObject *mod;
2194 if (strcmp(name, p->name) == 0) {
2195 if (p->initfunc == NULL) {
2196 PyErr_Format(PyExc_ImportError,
2197 "Cannot re-init internal module %.200s",
2198 name);
2199 return -1;
2200 }
2201 if (Py_VerboseFlag)
2202 PySys_WriteStderr("import %s # builtin\n", name);
2203 mod = (*p->initfunc)();
2204 if (mod == 0)
2205 return -1;
2206 if (_PyImport_FixupExtension(mod, name, name) < 0)
2207 return -1;
2208 /* FixupExtension has put the module into sys.modules,
2209 so we can release our own reference. */
2210 Py_DECREF(mod);
2211 return 1;
2212 }
2213 }
2214 return 0;
Guido van Rossum7f133ed1991-02-19 12:23:57 +00002215}
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002216
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002217
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002218/* Frozen modules */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002219
Guido van Rossumcfd0a221996-06-17 17:06:34 +00002220static struct _frozen *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002221find_frozen(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002222{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002223 struct _frozen *p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002224
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002225 if (!name)
2226 return NULL;
Benjamin Petersond968e272008-11-05 22:48:33 +00002227
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002228 for (p = PyImport_FrozenModules; ; p++) {
2229 if (p->name == NULL)
2230 return NULL;
2231 if (strcmp(p->name, name) == 0)
2232 break;
2233 }
2234 return p;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002235}
2236
Guido van Rossum79f25d91997-04-29 20:08:16 +00002237static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002238get_frozen_object(char *name)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002239{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002240 struct _frozen *p = find_frozen(name);
2241 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002242
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002243 if (p == NULL) {
2244 PyErr_Format(PyExc_ImportError,
2245 "No such frozen object named %.200s",
2246 name);
2247 return NULL;
2248 }
2249 if (p->code == NULL) {
2250 PyErr_Format(PyExc_ImportError,
2251 "Excluded frozen object named %.200s",
2252 name);
2253 return NULL;
2254 }
2255 size = p->size;
2256 if (size < 0)
2257 size = -size;
2258 return PyMarshal_ReadObjectFromString((char *)p->code, size);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002259}
2260
Brett Cannon8d110132009-03-15 02:20:16 +00002261static PyObject *
2262is_frozen_package(char *name)
2263{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002264 struct _frozen *p = find_frozen(name);
2265 int size;
Brett Cannon8d110132009-03-15 02:20:16 +00002266
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002267 if (p == NULL) {
2268 PyErr_Format(PyExc_ImportError,
2269 "No such frozen object named %.200s",
2270 name);
2271 return NULL;
2272 }
Brett Cannon8d110132009-03-15 02:20:16 +00002273
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002274 size = p->size;
Brett Cannon8d110132009-03-15 02:20:16 +00002275
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002276 if (size < 0)
2277 Py_RETURN_TRUE;
2278 else
2279 Py_RETURN_FALSE;
Brett Cannon8d110132009-03-15 02:20:16 +00002280}
2281
2282
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002283/* Initialize a frozen module.
Brett Cannon3c2ac442009-03-08 20:49:47 +00002284 Return 1 for success, 0 if the module is not found, and -1 with
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002285 an exception set if the initialization failed.
2286 This function is also used from frozenmain.c */
Guido van Rossum0b344901995-02-07 15:35:27 +00002287
2288int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002289PyImport_ImportFrozenModule(char *name)
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002290{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002291 struct _frozen *p = find_frozen(name);
2292 PyObject *co;
2293 PyObject *m;
2294 int ispackage;
2295 int size;
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00002296
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002297 if (p == NULL)
2298 return 0;
2299 if (p->code == NULL) {
2300 PyErr_Format(PyExc_ImportError,
2301 "Excluded frozen object named %.200s",
2302 name);
2303 return -1;
2304 }
2305 size = p->size;
2306 ispackage = (size < 0);
2307 if (ispackage)
2308 size = -size;
2309 if (Py_VerboseFlag)
2310 PySys_WriteStderr("import %s # frozen%s\n",
2311 name, ispackage ? " package" : "");
2312 co = PyMarshal_ReadObjectFromString((char *)p->code, size);
2313 if (co == NULL)
2314 return -1;
2315 if (!PyCode_Check(co)) {
2316 PyErr_Format(PyExc_TypeError,
2317 "frozen object %.200s is not a code object",
2318 name);
2319 goto err_return;
2320 }
2321 if (ispackage) {
2322 /* Set __path__ to the package name */
2323 PyObject *d, *s, *l;
2324 int err;
2325 m = PyImport_AddModule(name);
2326 if (m == NULL)
2327 goto err_return;
2328 d = PyModule_GetDict(m);
2329 s = PyUnicode_InternFromString(name);
2330 if (s == NULL)
2331 goto err_return;
2332 l = PyList_New(1);
2333 if (l == NULL) {
2334 Py_DECREF(s);
2335 goto err_return;
2336 }
2337 PyList_SET_ITEM(l, 0, s);
2338 err = PyDict_SetItemString(d, "__path__", l);
2339 Py_DECREF(l);
2340 if (err != 0)
2341 goto err_return;
2342 }
2343 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>");
2344 if (m == NULL)
2345 goto err_return;
2346 Py_DECREF(co);
2347 Py_DECREF(m);
2348 return 1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002349err_return:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002350 Py_DECREF(co);
2351 return -1;
Guido van Rossumf56e3db1993-04-01 20:59:32 +00002352}
Guido van Rossum74e6a111994-08-29 12:54:38 +00002353
2354
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002355/* Import a module, either built-in, frozen, or external, and return
Guido van Rossum7f9fa971995-01-20 16:53:12 +00002356 its module object WITH INCREMENTED REFERENCE COUNT */
Guido van Rossum74e6a111994-08-29 12:54:38 +00002357
Guido van Rossum79f25d91997-04-29 20:08:16 +00002358PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00002359PyImport_ImportModule(const char *name)
Guido van Rossum74e6a111994-08-29 12:54:38 +00002360{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002361 PyObject *pname;
2362 PyObject *result;
Marc-André Lemburg3c61c352001-02-09 19:40:15 +00002363
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002364 pname = PyUnicode_FromString(name);
2365 if (pname == NULL)
2366 return NULL;
2367 result = PyImport_Import(pname);
2368 Py_DECREF(pname);
2369 return result;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002370}
2371
Christian Heimes072c0f12008-01-03 23:01:04 +00002372/* Import a module without blocking
2373 *
2374 * At first it tries to fetch the module from sys.modules. If the module was
2375 * never loaded before it loads it with PyImport_ImportModule() unless another
2376 * thread holds the import lock. In the latter case the function raises an
2377 * ImportError instead of blocking.
2378 *
2379 * Returns the module object with incremented ref count.
2380 */
2381PyObject *
2382PyImport_ImportModuleNoBlock(const char *name)
2383{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002384 PyObject *result;
2385 PyObject *modules;
2386 long me;
Christian Heimes072c0f12008-01-03 23:01:04 +00002387
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002388 /* Try to get the module from sys.modules[name] */
2389 modules = PyImport_GetModuleDict();
2390 if (modules == NULL)
2391 return NULL;
Christian Heimes072c0f12008-01-03 23:01:04 +00002392
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002393 result = PyDict_GetItemString(modules, name);
2394 if (result != NULL) {
2395 Py_INCREF(result);
2396 return result;
2397 }
2398 else {
2399 PyErr_Clear();
2400 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002401#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002402 /* check the import lock
2403 * me might be -1 but I ignore the error here, the lock function
2404 * takes care of the problem */
2405 me = PyThread_get_thread_ident();
2406 if (import_lock_thread == -1 || import_lock_thread == me) {
2407 /* no thread or me is holding the lock */
2408 return PyImport_ImportModule(name);
2409 }
2410 else {
2411 PyErr_Format(PyExc_ImportError,
2412 "Failed to import %.200s because the import lock"
2413 "is held by another thread.",
2414 name);
2415 return NULL;
2416 }
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002417#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002418 return PyImport_ImportModule(name);
Benjamin Peterson3e4f0552008-09-02 00:31:15 +00002419#endif
Christian Heimes072c0f12008-01-03 23:01:04 +00002420}
2421
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002422/* Forward declarations for helper routines */
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002423static PyObject *get_parent(PyObject *globals, char *buf,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002424 Py_ssize_t *p_buflen, int level);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002425static PyObject *load_next(PyObject *mod, PyObject *altmod,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002426 char **p_name, char *buf, Py_ssize_t *p_buflen);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002427static int mark_miss(char *name);
2428static int ensure_fromlist(PyObject *mod, PyObject *fromlist,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002429 char *buf, Py_ssize_t buflen, int recursive);
Tim Petersdbd9ba62000-07-09 03:09:57 +00002430static PyObject * import_submodule(PyObject *mod, char *name, char *fullname);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002431
2432/* The Magnum Opus of dotted-name import :-) */
2433
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002434static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002435import_module_level(char *name, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002436 PyObject *fromlist, int level)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002437{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002438 char buf[MAXPATHLEN+1];
2439 Py_ssize_t buflen = 0;
2440 PyObject *parent, *head, *next, *tail;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002441
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002442 if (strchr(name, '/') != NULL
Christian Heimes454f37b2008-01-10 00:10:02 +00002443#ifdef MS_WINDOWS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002444 || strchr(name, '\\') != NULL
Christian Heimes454f37b2008-01-10 00:10:02 +00002445#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002446 ) {
2447 PyErr_SetString(PyExc_ImportError,
2448 "Import by filename is not supported.");
2449 return NULL;
2450 }
Christian Heimes454f37b2008-01-10 00:10:02 +00002451
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002452 parent = get_parent(globals, buf, &buflen, level);
2453 if (parent == NULL)
2454 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002455
Benjamin Peterson556d8002010-06-27 22:37:28 +00002456 head = load_next(parent, level < 0 ? Py_None : parent, &name, buf,
2457 &buflen);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002458 if (head == NULL)
2459 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002460
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002461 tail = head;
2462 Py_INCREF(tail);
2463 while (name) {
2464 next = load_next(tail, tail, &name, buf, &buflen);
2465 Py_DECREF(tail);
2466 if (next == NULL) {
2467 Py_DECREF(head);
2468 return NULL;
2469 }
2470 tail = next;
2471 }
2472 if (tail == Py_None) {
2473 /* If tail is Py_None, both get_parent and load_next found
2474 an empty module name: someone called __import__("") or
2475 doctored faulty bytecode */
2476 Py_DECREF(tail);
2477 Py_DECREF(head);
2478 PyErr_SetString(PyExc_ValueError,
2479 "Empty module name");
2480 return NULL;
2481 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002482
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002483 if (fromlist != NULL) {
2484 if (fromlist == Py_None || !PyObject_IsTrue(fromlist))
2485 fromlist = NULL;
2486 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002487
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002488 if (fromlist == NULL) {
2489 Py_DECREF(tail);
2490 return head;
2491 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002492
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002493 Py_DECREF(head);
2494 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) {
2495 Py_DECREF(tail);
2496 return NULL;
2497 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002498
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002499 return tail;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002500}
2501
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002502PyObject *
2503PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002504 PyObject *fromlist, int level)
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002505{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002506 PyObject *result;
2507 _PyImport_AcquireLock();
2508 result = import_module_level(name, globals, locals, fromlist, level);
2509 if (_PyImport_ReleaseLock() < 0) {
2510 Py_XDECREF(result);
2511 PyErr_SetString(PyExc_RuntimeError,
2512 "not holding the import lock");
2513 return NULL;
2514 }
2515 return result;
Guido van Rossum75acc9c1998-03-03 22:26:50 +00002516}
2517
Fred Drake87590902004-05-28 20:21:36 +00002518/* Return the package that an import is being performed in. If globals comes
2519 from the module foo.bar.bat (not itself a package), this returns the
2520 sys.modules entry for foo.bar. If globals is from a package's __init__.py,
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002521 the package's entry in sys.modules is returned, as a borrowed reference.
Fred Drake87590902004-05-28 20:21:36 +00002522
2523 The *name* of the returned package is returned in buf, with the length of
2524 the name in *p_buflen.
2525
2526 If globals doesn't come from a package or a module in a package, or a
2527 corresponding entry is not found in sys.modules, Py_None is returned.
2528*/
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002529static PyObject *
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002530get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002531{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002532 static PyObject *namestr = NULL;
2533 static PyObject *pathstr = NULL;
2534 static PyObject *pkgstr = NULL;
2535 PyObject *pkgname, *modname, *modpath, *modules, *parent;
2536 int orig_level = level;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002537
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002538 if (globals == NULL || !PyDict_Check(globals) || !level)
2539 return Py_None;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002540
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002541 if (namestr == NULL) {
2542 namestr = PyUnicode_InternFromString("__name__");
2543 if (namestr == NULL)
2544 return NULL;
2545 }
2546 if (pathstr == NULL) {
2547 pathstr = PyUnicode_InternFromString("__path__");
2548 if (pathstr == NULL)
2549 return NULL;
2550 }
2551 if (pkgstr == NULL) {
2552 pkgstr = PyUnicode_InternFromString("__package__");
2553 if (pkgstr == NULL)
2554 return NULL;
2555 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002556
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002557 *buf = '\0';
2558 *p_buflen = 0;
2559 pkgname = PyDict_GetItem(globals, pkgstr);
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002560
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002561 if ((pkgname != NULL) && (pkgname != Py_None)) {
2562 /* __package__ is set, so use it */
2563 char *pkgname_str;
2564 Py_ssize_t len;
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002565
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002566 if (!PyUnicode_Check(pkgname)) {
2567 PyErr_SetString(PyExc_ValueError,
2568 "__package__ set to non-string");
2569 return NULL;
2570 }
2571 pkgname_str = _PyUnicode_AsStringAndSize(pkgname, &len);
2572 if (len == 0) {
2573 if (level > 0) {
2574 PyErr_SetString(PyExc_ValueError,
2575 "Attempted relative import in non-package");
2576 return NULL;
2577 }
2578 return Py_None;
2579 }
2580 if (len > MAXPATHLEN) {
2581 PyErr_SetString(PyExc_ValueError,
2582 "Package name too long");
2583 return NULL;
2584 }
2585 strcpy(buf, pkgname_str);
2586 } else {
2587 /* __package__ not set, so figure it out and set it */
2588 modname = PyDict_GetItem(globals, namestr);
2589 if (modname == NULL || !PyUnicode_Check(modname))
2590 return Py_None;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00002591
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002592 modpath = PyDict_GetItem(globals, pathstr);
2593 if (modpath != NULL) {
2594 /* __path__ is set, so modname is already the package name */
2595 char *modname_str;
2596 Py_ssize_t len;
2597 int error;
Alexandre Vassalottia85998a2008-05-03 18:24:43 +00002598
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002599 modname_str = _PyUnicode_AsStringAndSize(modname, &len);
2600 if (len > MAXPATHLEN) {
2601 PyErr_SetString(PyExc_ValueError,
2602 "Module name too long");
2603 return NULL;
2604 }
2605 strcpy(buf, modname_str);
2606 error = PyDict_SetItem(globals, pkgstr, modname);
2607 if (error) {
2608 PyErr_SetString(PyExc_ValueError,
2609 "Could not set __package__");
2610 return NULL;
2611 }
2612 } else {
2613 /* Normal module, so work out the package name if any */
2614 char *start = _PyUnicode_AsString(modname);
2615 char *lastdot = strrchr(start, '.');
2616 size_t len;
2617 int error;
2618 if (lastdot == NULL && level > 0) {
2619 PyErr_SetString(PyExc_ValueError,
2620 "Attempted relative import in non-package");
2621 return NULL;
2622 }
2623 if (lastdot == NULL) {
2624 error = PyDict_SetItem(globals, pkgstr, Py_None);
2625 if (error) {
2626 PyErr_SetString(PyExc_ValueError,
2627 "Could not set __package__");
2628 return NULL;
2629 }
2630 return Py_None;
2631 }
2632 len = lastdot - start;
2633 if (len >= MAXPATHLEN) {
2634 PyErr_SetString(PyExc_ValueError,
2635 "Module name too long");
2636 return NULL;
2637 }
2638 strncpy(buf, start, len);
2639 buf[len] = '\0';
2640 pkgname = PyUnicode_FromString(buf);
2641 if (pkgname == NULL) {
2642 return NULL;
2643 }
2644 error = PyDict_SetItem(globals, pkgstr, pkgname);
2645 Py_DECREF(pkgname);
2646 if (error) {
2647 PyErr_SetString(PyExc_ValueError,
2648 "Could not set __package__");
2649 return NULL;
2650 }
2651 }
2652 }
2653 while (--level > 0) {
2654 char *dot = strrchr(buf, '.');
2655 if (dot == NULL) {
2656 PyErr_SetString(PyExc_ValueError,
2657 "Attempted relative import beyond "
2658 "toplevel package");
2659 return NULL;
2660 }
2661 *dot = '\0';
2662 }
2663 *p_buflen = strlen(buf);
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002664
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002665 modules = PyImport_GetModuleDict();
2666 parent = PyDict_GetItemString(modules, buf);
2667 if (parent == NULL) {
2668 if (orig_level < 1) {
2669 PyObject *err_msg = PyBytes_FromFormat(
2670 "Parent module '%.200s' not found "
2671 "while handling absolute import", buf);
2672 if (err_msg == NULL) {
2673 return NULL;
2674 }
2675 if (!PyErr_WarnEx(PyExc_RuntimeWarning,
2676 PyBytes_AsString(err_msg), 1)) {
2677 *buf = '\0';
2678 *p_buflen = 0;
2679 parent = Py_None;
2680 }
2681 Py_DECREF(err_msg);
2682 } else {
2683 PyErr_Format(PyExc_SystemError,
2684 "Parent module '%.200s' not loaded, "
2685 "cannot perform relative import", buf);
2686 }
2687 }
2688 return parent;
2689 /* We expect, but can't guarantee, if parent != None, that:
2690 - parent.__name__ == buf
2691 - parent.__dict__ is globals
2692 If this is violated... Who cares? */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002693}
2694
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002695/* altmod is either None or same as mod */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002696static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002697load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002698 Py_ssize_t *p_buflen)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002699{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002700 char *name = *p_name;
2701 char *dot = strchr(name, '.');
2702 size_t len;
2703 char *p;
2704 PyObject *result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002705
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002706 if (strlen(name) == 0) {
2707 /* completely empty module name should only happen in
2708 'from . import' (or '__import__("")')*/
2709 Py_INCREF(mod);
2710 *p_name = NULL;
2711 return mod;
2712 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00002713
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002714 if (dot == NULL) {
2715 *p_name = NULL;
2716 len = strlen(name);
2717 }
2718 else {
2719 *p_name = dot+1;
2720 len = dot-name;
2721 }
2722 if (len == 0) {
2723 PyErr_SetString(PyExc_ValueError,
2724 "Empty module name");
2725 return NULL;
2726 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002727
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002728 p = buf + *p_buflen;
2729 if (p != buf)
2730 *p++ = '.';
2731 if (p+len-buf >= MAXPATHLEN) {
2732 PyErr_SetString(PyExc_ValueError,
2733 "Module name too long");
2734 return NULL;
2735 }
2736 strncpy(p, name, len);
2737 p[len] = '\0';
2738 *p_buflen = p+len-buf;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002739
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002740 result = import_submodule(mod, p, buf);
2741 if (result == Py_None && altmod != mod) {
2742 Py_DECREF(result);
2743 /* Here, altmod must be None and mod must not be None */
2744 result = import_submodule(altmod, p, p);
2745 if (result != NULL && result != Py_None) {
2746 if (mark_miss(buf) != 0) {
2747 Py_DECREF(result);
2748 return NULL;
2749 }
2750 strncpy(buf, name, len);
2751 buf[len] = '\0';
2752 *p_buflen = len;
2753 }
2754 }
2755 if (result == NULL)
2756 return NULL;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002757
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002758 if (result == Py_None) {
2759 Py_DECREF(result);
2760 PyErr_Format(PyExc_ImportError,
2761 "No module named %.200s", name);
2762 return NULL;
2763 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002764
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002765 return result;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002766}
2767
2768static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002769mark_miss(char *name)
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002770{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002771 PyObject *modules = PyImport_GetModuleDict();
2772 return PyDict_SetItemString(modules, name, Py_None);
Guido van Rossumf5f5fdb1997-09-06 20:29:52 +00002773}
2774
2775static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002776ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002777 int recursive)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002778{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002779 int i;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002780
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002781 if (!PyObject_HasAttrString(mod, "__path__"))
2782 return 1;
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002783
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002784 for (i = 0; ; i++) {
2785 PyObject *item = PySequence_GetItem(fromlist, i);
2786 int hasit;
2787 if (item == NULL) {
2788 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2789 PyErr_Clear();
2790 return 1;
2791 }
2792 return 0;
2793 }
2794 if (!PyUnicode_Check(item)) {
2795 PyErr_SetString(PyExc_TypeError,
2796 "Item in ``from list'' not a string");
2797 Py_DECREF(item);
2798 return 0;
2799 }
2800 if (PyUnicode_AS_UNICODE(item)[0] == '*') {
2801 PyObject *all;
2802 Py_DECREF(item);
2803 /* See if the package defines __all__ */
2804 if (recursive)
2805 continue; /* Avoid endless recursion */
2806 all = PyObject_GetAttrString(mod, "__all__");
2807 if (all == NULL)
2808 PyErr_Clear();
2809 else {
2810 int ret = ensure_fromlist(mod, all, buf, buflen, 1);
2811 Py_DECREF(all);
2812 if (!ret)
2813 return 0;
2814 }
2815 continue;
2816 }
2817 hasit = PyObject_HasAttr(mod, item);
2818 if (!hasit) {
2819 PyObject *item8;
2820 char *subname;
2821 PyObject *submod;
2822 char *p;
Victor Stinnerae6265f2010-05-15 16:27:27 +00002823 item8 = PyUnicode_EncodeFSDefault(item);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002824 if (!item8) {
2825 PyErr_SetString(PyExc_ValueError, "Cannot encode path item");
2826 return 0;
2827 }
2828 subname = PyBytes_AS_STRING(item8);
2829 if (buflen + strlen(subname) >= MAXPATHLEN) {
2830 PyErr_SetString(PyExc_ValueError,
2831 "Module name too long");
2832 Py_DECREF(item);
2833 return 0;
2834 }
2835 p = buf + buflen;
2836 *p++ = '.';
2837 strcpy(p, subname);
2838 submod = import_submodule(mod, subname, buf);
2839 Py_DECREF(item8);
2840 Py_XDECREF(submod);
2841 if (submod == NULL) {
2842 Py_DECREF(item);
2843 return 0;
2844 }
2845 }
2846 Py_DECREF(item);
2847 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002848
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002849 /* NOTREACHED */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002850}
2851
Neil Schemenauer00b09662003-06-16 21:03:07 +00002852static int
2853add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002854 PyObject *modules)
Neil Schemenauer00b09662003-06-16 21:03:07 +00002855{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002856 if (mod == Py_None)
2857 return 1;
2858 /* Irrespective of the success of this load, make a
2859 reference to it in the parent package module. A copy gets
2860 saved in the modules dictionary under the full name, so get a
2861 reference from there, if need be. (The exception is when the
2862 load failed with a SyntaxError -- then there's no trace in
2863 sys.modules. In that case, of course, do nothing extra.) */
2864 if (submod == NULL) {
2865 submod = PyDict_GetItemString(modules, fullname);
2866 if (submod == NULL)
2867 return 1;
2868 }
2869 if (PyModule_Check(mod)) {
2870 /* We can't use setattr here since it can give a
2871 * spurious warning if the submodule name shadows a
2872 * builtin name */
2873 PyObject *dict = PyModule_GetDict(mod);
2874 if (!dict)
2875 return 0;
2876 if (PyDict_SetItemString(dict, subname, submod) < 0)
2877 return 0;
2878 }
2879 else {
2880 if (PyObject_SetAttrString(mod, subname, submod) < 0)
2881 return 0;
2882 }
2883 return 1;
Neil Schemenauer00b09662003-06-16 21:03:07 +00002884}
2885
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002886static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002887import_submodule(PyObject *mod, char *subname, char *fullname)
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002888{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002889 PyObject *modules = PyImport_GetModuleDict();
2890 PyObject *m = NULL;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002891
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002892 /* Require:
2893 if mod == None: subname == fullname
2894 else: mod.__name__ + "." + subname == fullname
2895 */
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002896
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002897 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) {
2898 Py_INCREF(m);
2899 }
2900 else {
2901 PyObject *path, *loader = NULL;
2902 char buf[MAXPATHLEN+1];
2903 struct filedescr *fdp;
2904 FILE *fp = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00002905
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002906 if (mod == Py_None)
2907 path = NULL;
2908 else {
2909 path = PyObject_GetAttrString(mod, "__path__");
2910 if (path == NULL) {
2911 PyErr_Clear();
2912 Py_INCREF(Py_None);
2913 return Py_None;
2914 }
2915 }
Guido van Rossum17fc85f1997-09-06 18:52:03 +00002916
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002917 buf[0] = '\0';
2918 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1,
2919 &fp, &loader);
2920 Py_XDECREF(path);
2921 if (fdp == NULL) {
2922 if (!PyErr_ExceptionMatches(PyExc_ImportError))
2923 return NULL;
2924 PyErr_Clear();
2925 Py_INCREF(Py_None);
2926 return Py_None;
2927 }
2928 m = load_module(fullname, fp, buf, fdp->type, loader);
2929 Py_XDECREF(loader);
2930 if (fp)
2931 fclose(fp);
2932 if (!add_submodule(mod, m, fullname, subname, modules)) {
2933 Py_XDECREF(m);
2934 m = NULL;
2935 }
2936 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002937
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002938 return m;
Guido van Rossum74e6a111994-08-29 12:54:38 +00002939}
2940
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002941
2942/* Re-import a module of any kind and return its module object, WITH
2943 INCREMENTED REFERENCE COUNT */
2944
Guido van Rossum79f25d91997-04-29 20:08:16 +00002945PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002946PyImport_ReloadModule(PyObject *m)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002947{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002948 PyInterpreterState *interp = PyThreadState_Get()->interp;
2949 PyObject *modules_reloading = interp->modules_reloading;
2950 PyObject *modules = PyImport_GetModuleDict();
2951 PyObject *path = NULL, *loader = NULL, *existing_m = NULL;
2952 char *name, *subname;
2953 char buf[MAXPATHLEN+1];
2954 struct filedescr *fdp;
2955 FILE *fp = NULL;
2956 PyObject *newm;
Brett Cannon9a5b25a2010-03-01 02:09:17 +00002957
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002958 if (modules_reloading == NULL) {
2959 Py_FatalError("PyImport_ReloadModule: "
2960 "no modules_reloading dictionary!");
2961 return NULL;
2962 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002963
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002964 if (m == NULL || !PyModule_Check(m)) {
2965 PyErr_SetString(PyExc_TypeError,
2966 "reload() argument must be module");
2967 return NULL;
2968 }
2969 name = (char*)PyModule_GetName(m);
2970 if (name == NULL)
2971 return NULL;
2972 if (m != PyDict_GetItemString(modules, name)) {
2973 PyErr_Format(PyExc_ImportError,
2974 "reload(): module %.200s not in sys.modules",
2975 name);
2976 return NULL;
2977 }
2978 existing_m = PyDict_GetItemString(modules_reloading, name);
2979 if (existing_m != NULL) {
2980 /* Due to a recursive reload, this module is already
2981 being reloaded. */
2982 Py_INCREF(existing_m);
2983 return existing_m;
2984 }
2985 if (PyDict_SetItemString(modules_reloading, name, m) < 0)
2986 return NULL;
Guido van Rossumd8faa362007-04-27 19:54:29 +00002987
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002988 subname = strrchr(name, '.');
2989 if (subname == NULL)
2990 subname = name;
2991 else {
2992 PyObject *parentname, *parent;
2993 parentname = PyUnicode_FromStringAndSize(name, (subname-name));
2994 if (parentname == NULL) {
2995 imp_modules_reloading_clear();
2996 return NULL;
2997 }
2998 parent = PyDict_GetItem(modules, parentname);
2999 if (parent == NULL) {
3000 PyErr_Format(PyExc_ImportError,
3001 "reload(): parent %U not in sys.modules",
3002 parentname);
3003 Py_DECREF(parentname);
3004 imp_modules_reloading_clear();
3005 return NULL;
3006 }
3007 Py_DECREF(parentname);
3008 subname++;
3009 path = PyObject_GetAttrString(parent, "__path__");
3010 if (path == NULL)
3011 PyErr_Clear();
3012 }
3013 buf[0] = '\0';
3014 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader);
3015 Py_XDECREF(path);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003016
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003017 if (fdp == NULL) {
3018 Py_XDECREF(loader);
3019 imp_modules_reloading_clear();
3020 return NULL;
3021 }
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003022
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003023 newm = load_module(name, fp, buf, fdp->type, loader);
3024 Py_XDECREF(loader);
Phillip J. Eby7ec642a2004-09-23 04:37:36 +00003025
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003026 if (fp)
3027 fclose(fp);
3028 if (newm == NULL) {
3029 /* load_module probably removed name from modules because of
3030 * the error. Put back the original module object. We're
3031 * going to return NULL in this case regardless of whether
3032 * replacing name succeeds, so the return value is ignored.
3033 */
3034 PyDict_SetItemString(modules, name, m);
3035 }
3036 imp_modules_reloading_clear();
3037 return newm;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003038}
3039
3040
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003041/* Higher-level import emulator which emulates the "import" statement
3042 more accurately -- it invokes the __import__() function from the
3043 builtins of the current globals. This means that the import is
3044 done using whatever import hooks are installed in the current
Brett Cannonbc2eff32010-09-19 21:39:02 +00003045 environment.
Guido van Rossum6058eb41998-12-21 19:51:00 +00003046 A dummy list ["__doc__"] is passed as the 4th argument so that
Neal Norwitz80e7f272007-08-26 06:45:23 +00003047 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
Guido van Rossum6058eb41998-12-21 19:51:00 +00003048 will return <module "gencache"> instead of <module "win32com">. */
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003049
3050PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003051PyImport_Import(PyObject *module_name)
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003052{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003053 static PyObject *silly_list = NULL;
3054 static PyObject *builtins_str = NULL;
3055 static PyObject *import_str = NULL;
3056 PyObject *globals = NULL;
3057 PyObject *import = NULL;
3058 PyObject *builtins = NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003059 PyObject *modules = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003060 PyObject *r = NULL;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003061
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003062 /* Initialize constant string objects */
3063 if (silly_list == NULL) {
3064 import_str = PyUnicode_InternFromString("__import__");
3065 if (import_str == NULL)
3066 return NULL;
3067 builtins_str = PyUnicode_InternFromString("__builtins__");
3068 if (builtins_str == NULL)
3069 return NULL;
Brett Cannonbc2eff32010-09-19 21:39:02 +00003070 silly_list = PyList_New(0);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003071 if (silly_list == NULL)
3072 return NULL;
3073 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003074
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003075 /* Get the builtins from current globals */
3076 globals = PyEval_GetGlobals();
3077 if (globals != NULL) {
3078 Py_INCREF(globals);
3079 builtins = PyObject_GetItem(globals, builtins_str);
3080 if (builtins == NULL)
3081 goto err;
3082 }
3083 else {
3084 /* No globals -- use standard builtins, and fake globals */
3085 builtins = PyImport_ImportModuleLevel("builtins",
3086 NULL, NULL, NULL, 0);
3087 if (builtins == NULL)
3088 return NULL;
3089 globals = Py_BuildValue("{OO}", builtins_str, builtins);
3090 if (globals == NULL)
3091 goto err;
3092 }
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003093
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003094 /* Get the __import__ function from the builtins */
3095 if (PyDict_Check(builtins)) {
3096 import = PyObject_GetItem(builtins, import_str);
3097 if (import == NULL)
3098 PyErr_SetObject(PyExc_KeyError, import_str);
3099 }
3100 else
3101 import = PyObject_GetAttr(builtins, import_str);
3102 if (import == NULL)
3103 goto err;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003104
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003105 /* Call the __import__ function with the proper argument list
Brett Cannonbc2eff32010-09-19 21:39:02 +00003106 Always use absolute import here.
3107 Calling for side-effect of import. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003108 r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
3109 globals, silly_list, 0, NULL);
Brett Cannonbc2eff32010-09-19 21:39:02 +00003110 if (r == NULL)
3111 goto err;
3112 Py_DECREF(r);
3113
3114 modules = PyImport_GetModuleDict();
3115 r = PyDict_GetItem(modules, module_name);
3116 if (r != NULL)
3117 Py_INCREF(r);
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003118
3119 err:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003120 Py_XDECREF(globals);
3121 Py_XDECREF(builtins);
3122 Py_XDECREF(import);
Tim Peters50d8d372001-02-28 05:34:27 +00003123
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003124 return r;
Guido van Rossumd47a0a81997-08-14 20:11:26 +00003125}
3126
3127
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003128/* Module 'imp' provides Python access to the primitives used for
3129 importing modules.
3130*/
3131
Guido van Rossum79f25d91997-04-29 20:08:16 +00003132static PyObject *
Barry Warsaw28a691b2010-04-17 00:19:56 +00003133imp_make_magic(long magic)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003134{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003135 char buf[4];
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003136
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003137 buf[0] = (char) ((magic >> 0) & 0xff);
3138 buf[1] = (char) ((magic >> 8) & 0xff);
3139 buf[2] = (char) ((magic >> 16) & 0xff);
3140 buf[3] = (char) ((magic >> 24) & 0xff);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003141
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003142 return PyBytes_FromStringAndSize(buf, 4);
3143};
Barry Warsaw28a691b2010-04-17 00:19:56 +00003144
3145static PyObject *
3146imp_get_magic(PyObject *self, PyObject *noargs)
3147{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003148 return imp_make_magic(pyc_magic);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003149}
3150
3151static PyObject *
3152imp_get_tag(PyObject *self, PyObject *noargs)
3153{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003154 return PyUnicode_FromString(pyc_tag);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003155}
3156
Guido van Rossum79f25d91997-04-29 20:08:16 +00003157static PyObject *
Neal Norwitz08ea61a2003-02-17 18:18:00 +00003158imp_get_suffixes(PyObject *self, PyObject *noargs)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003159{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003160 PyObject *list;
3161 struct filedescr *fdp;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003162
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003163 list = PyList_New(0);
3164 if (list == NULL)
3165 return NULL;
3166 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
3167 PyObject *item = Py_BuildValue("ssi",
3168 fdp->suffix, fdp->mode, fdp->type);
3169 if (item == NULL) {
3170 Py_DECREF(list);
3171 return NULL;
3172 }
3173 if (PyList_Append(list, item) < 0) {
3174 Py_DECREF(list);
3175 Py_DECREF(item);
3176 return NULL;
3177 }
3178 Py_DECREF(item);
3179 }
3180 return list;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003181}
3182
Guido van Rossum79f25d91997-04-29 20:08:16 +00003183static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003184call_find_module(char *name, PyObject *path)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003185{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003186 extern int fclose(FILE *);
3187 PyObject *fob, *ret;
3188 PyObject *pathobj;
3189 struct filedescr *fdp;
3190 char pathname[MAXPATHLEN+1];
3191 FILE *fp = NULL;
3192 int fd = -1;
3193 char *found_encoding = NULL;
3194 char *encoding = NULL;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003195
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003196 pathname[0] = '\0';
3197 if (path == Py_None)
3198 path = NULL;
3199 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL);
3200 if (fdp == NULL)
3201 return NULL;
3202 if (fp != NULL) {
3203 fd = fileno(fp);
3204 if (fd != -1)
3205 fd = dup(fd);
3206 fclose(fp);
3207 fp = NULL;
3208 }
3209 if (fd != -1) {
3210 if (strchr(fdp->mode, 'b') == NULL) {
3211 /* PyTokenizer_FindEncoding() returns PyMem_MALLOC'ed
3212 memory. */
3213 found_encoding = PyTokenizer_FindEncoding(fd);
3214 lseek(fd, 0, 0); /* Reset position */
3215 if (found_encoding == NULL && PyErr_Occurred())
3216 return NULL;
3217 encoding = (found_encoding != NULL) ? found_encoding :
3218 (char*)PyUnicode_GetDefaultEncoding();
3219 }
3220 fob = PyFile_FromFd(fd, pathname, fdp->mode, -1,
3221 (char*)encoding, NULL, NULL, 1);
3222 if (fob == NULL) {
3223 close(fd);
3224 PyMem_FREE(found_encoding);
3225 return NULL;
3226 }
3227 }
3228 else {
3229 fob = Py_None;
3230 Py_INCREF(fob);
3231 }
3232 pathobj = PyUnicode_DecodeFSDefault(pathname);
3233 ret = Py_BuildValue("NN(ssi)",
3234 fob, pathobj, fdp->suffix, fdp->mode, fdp->type);
3235 PyMem_FREE(found_encoding);
Brett Cannon3bb42d92007-10-20 03:43:15 +00003236
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003237 return ret;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003238}
3239
Guido van Rossum79f25d91997-04-29 20:08:16 +00003240static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003241imp_find_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003242{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003243 char *name;
3244 PyObject *ret, *path = NULL;
3245 if (!PyArg_ParseTuple(args, "es|O:find_module",
3246 Py_FileSystemDefaultEncoding, &name,
3247 &path))
3248 return NULL;
3249 ret = call_find_module(name, path);
3250 PyMem_Free(name);
3251 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003252}
3253
3254static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003255imp_init_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003256{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003257 char *name;
3258 int ret;
3259 PyObject *m;
3260 if (!PyArg_ParseTuple(args, "s:init_builtin", &name))
3261 return NULL;
3262 ret = init_builtin(name);
3263 if (ret < 0)
3264 return NULL;
3265 if (ret == 0) {
3266 Py_INCREF(Py_None);
3267 return Py_None;
3268 }
3269 m = PyImport_AddModule(name);
3270 Py_XINCREF(m);
3271 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003272}
3273
Guido van Rossum79f25d91997-04-29 20:08:16 +00003274static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003275imp_init_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003276{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003277 char *name;
3278 int ret;
3279 PyObject *m;
3280 if (!PyArg_ParseTuple(args, "s:init_frozen", &name))
3281 return NULL;
3282 ret = PyImport_ImportFrozenModule(name);
3283 if (ret < 0)
3284 return NULL;
3285 if (ret == 0) {
3286 Py_INCREF(Py_None);
3287 return Py_None;
3288 }
3289 m = PyImport_AddModule(name);
3290 Py_XINCREF(m);
3291 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003292}
3293
Guido van Rossum79f25d91997-04-29 20:08:16 +00003294static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003295imp_get_frozen_object(PyObject *self, PyObject *args)
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003296{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003297 char *name;
Jack Jansen95ffa231995-10-03 14:38:41 +00003298
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003299 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name))
3300 return NULL;
3301 return get_frozen_object(name);
Guido van Rossum6ec1efb1995-08-04 04:08:57 +00003302}
3303
Guido van Rossum79f25d91997-04-29 20:08:16 +00003304static PyObject *
Brett Cannon8d110132009-03-15 02:20:16 +00003305imp_is_frozen_package(PyObject *self, PyObject *args)
3306{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003307 char *name;
Brett Cannon8d110132009-03-15 02:20:16 +00003308
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003309 if (!PyArg_ParseTuple(args, "s:is_frozen_package", &name))
3310 return NULL;
3311 return is_frozen_package(name);
Brett Cannon8d110132009-03-15 02:20:16 +00003312}
3313
3314static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003315imp_is_builtin(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003316{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003317 char *name;
3318 if (!PyArg_ParseTuple(args, "s:is_builtin", &name))
3319 return NULL;
3320 return PyLong_FromLong(is_builtin(name));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003321}
3322
Guido van Rossum79f25d91997-04-29 20:08:16 +00003323static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003324imp_is_frozen(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003325{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003326 char *name;
3327 struct _frozen *p;
3328 if (!PyArg_ParseTuple(args, "s:is_frozen", &name))
3329 return NULL;
3330 p = find_frozen(name);
3331 return PyBool_FromLong((long) (p == NULL ? 0 : p->size));
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003332}
3333
3334static FILE *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003335get_file(char *pathname, PyObject *fob, char *mode)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003336{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003337 FILE *fp;
3338 if (mode[0] == 'U')
3339 mode = "r" PY_STDIOTEXTMODE;
3340 if (fob == NULL) {
3341 fp = fopen(pathname, mode);
3342 }
3343 else {
3344 int fd = PyObject_AsFileDescriptor(fob);
3345 if (fd == -1)
3346 return NULL;
3347 if (!_PyVerify_fd(fd))
3348 goto error;
3349 /* the FILE struct gets a new fd, so that it can be closed
3350 * independently of the file descriptor given
3351 */
3352 fd = dup(fd);
3353 if (fd == -1)
3354 goto error;
3355 fp = fdopen(fd, mode);
3356 }
3357 if (fp)
3358 return fp;
Kristján Valur Jónssone1b04452009-03-31 17:43:39 +00003359error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003360 PyErr_SetFromErrno(PyExc_IOError);
3361 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003362}
3363
Guido van Rossum79f25d91997-04-29 20:08:16 +00003364static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003365imp_load_compiled(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003366{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003367 char *name;
3368 char *pathname;
3369 PyObject *fob = NULL;
3370 PyObject *m;
3371 FILE *fp;
3372 if (!PyArg_ParseTuple(args, "ses|O:load_compiled",
3373 &name,
3374 Py_FileSystemDefaultEncoding, &pathname,
3375 &fob))
3376 return NULL;
3377 fp = get_file(pathname, fob, "rb");
3378 if (fp == NULL) {
3379 PyMem_Free(pathname);
3380 return NULL;
3381 }
3382 m = load_compiled_module(name, pathname, fp);
3383 fclose(fp);
3384 PyMem_Free(pathname);
3385 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003386}
3387
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003388#ifdef HAVE_DYNAMIC_LOADING
3389
Guido van Rossum79f25d91997-04-29 20:08:16 +00003390static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003391imp_load_dynamic(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003392{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003393 char *name;
3394 char *pathname;
3395 PyObject *fob = NULL;
3396 PyObject *m;
3397 FILE *fp = NULL;
3398 if (!PyArg_ParseTuple(args, "ses|O:load_dynamic",
3399 &name,
3400 Py_FileSystemDefaultEncoding, &pathname,
3401 &fob))
3402 return NULL;
3403 if (fob) {
3404 fp = get_file(pathname, fob, "r");
3405 if (fp == NULL) {
3406 PyMem_Free(pathname);
3407 return NULL;
3408 }
3409 }
3410 m = _PyImport_LoadDynamicModule(name, pathname, fp);
3411 PyMem_Free(pathname);
3412 if (fp)
3413 fclose(fp);
3414 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003415}
3416
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003417#endif /* HAVE_DYNAMIC_LOADING */
3418
Guido van Rossum79f25d91997-04-29 20:08:16 +00003419static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003420imp_load_source(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003421{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003422 char *name;
3423 char *pathname;
3424 PyObject *fob = NULL;
3425 PyObject *m;
3426 FILE *fp;
3427 if (!PyArg_ParseTuple(args, "ses|O:load_source",
3428 &name,
3429 Py_FileSystemDefaultEncoding, &pathname,
3430 &fob))
3431 return NULL;
3432 fp = get_file(pathname, fob, "r");
3433 if (fp == NULL) {
3434 PyMem_Free(pathname);
3435 return NULL;
3436 }
3437 m = load_source_module(name, pathname, fp);
3438 PyMem_Free(pathname);
3439 fclose(fp);
3440 return m;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003441}
3442
Guido van Rossum79f25d91997-04-29 20:08:16 +00003443static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003444imp_load_module(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003445{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003446 char *name;
3447 PyObject *fob;
3448 char *pathname;
3449 PyObject * ret;
3450 char *suffix; /* Unused */
3451 char *mode;
3452 int type;
3453 FILE *fp;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003454
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003455 if (!PyArg_ParseTuple(args, "sOes(ssi):load_module",
3456 &name, &fob,
3457 Py_FileSystemDefaultEncoding, &pathname,
3458 &suffix, &mode, &type))
3459 return NULL;
3460 if (*mode) {
3461 /* Mode must start with 'r' or 'U' and must not contain '+'.
3462 Implicit in this test is the assumption that the mode
3463 may contain other modifiers like 'b' or 't'. */
Guido van Rossum5e2c5fa2002-05-30 17:33:07 +00003464
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003465 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) {
3466 PyErr_Format(PyExc_ValueError,
3467 "invalid file open mode %.200s", mode);
3468 PyMem_Free(pathname);
3469 return NULL;
3470 }
3471 }
3472 if (fob == Py_None)
3473 fp = NULL;
3474 else {
3475 fp = get_file(NULL, fob, mode);
3476 if (fp == NULL) {
3477 PyMem_Free(pathname);
3478 return NULL;
3479 }
3480 }
3481 ret = load_module(name, fp, pathname, type, NULL);
3482 PyMem_Free(pathname);
3483 if (fp)
3484 fclose(fp);
3485 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003486}
3487
3488static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003489imp_load_package(PyObject *self, PyObject *args)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003490{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003491 char *name;
3492 char *pathname;
3493 PyObject * ret;
3494 if (!PyArg_ParseTuple(args, "ses:load_package",
3495 &name, Py_FileSystemDefaultEncoding, &pathname))
3496 return NULL;
3497 ret = load_package(name, pathname);
3498 PyMem_Free(pathname);
3499 return ret;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003500}
3501
3502static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003503imp_new_module(PyObject *self, PyObject *args)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003504{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003505 char *name;
3506 if (!PyArg_ParseTuple(args, "s:new_module", &name))
3507 return NULL;
3508 return PyModule_New(name);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003509}
3510
Christian Heimes13a7a212008-01-07 17:13:09 +00003511static PyObject *
3512imp_reload(PyObject *self, PyObject *v)
3513{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003514 return PyImport_ReloadModule(v);
Christian Heimes13a7a212008-01-07 17:13:09 +00003515}
3516
3517PyDoc_STRVAR(doc_reload,
3518"reload(module) -> module\n\
3519\n\
3520Reload the module. The module must have been successfully imported before.");
3521
Barry Warsaw28a691b2010-04-17 00:19:56 +00003522static PyObject *
3523imp_cache_from_source(PyObject *self, PyObject *args, PyObject *kws)
3524{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003525 static char *kwlist[] = {"path", "debug_override", NULL};
Barry Warsaw28a691b2010-04-17 00:19:56 +00003526
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003527 char buf[MAXPATHLEN+1];
3528 char *pathname, *cpathname;
3529 PyObject *debug_override = Py_None;
3530 int debug = !Py_OptimizeFlag;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003531
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003532 if (!PyArg_ParseTupleAndKeywords(
3533 args, kws, "es|O", kwlist,
3534 Py_FileSystemDefaultEncoding, &pathname, &debug_override))
3535 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003536
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003537 if (debug_override != Py_None)
3538 if ((debug = PyObject_IsTrue(debug_override)) < 0)
3539 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003540
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003541 cpathname = make_compiled_pathname(pathname, buf, MAXPATHLEN+1, debug);
3542 PyMem_Free(pathname);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003543
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003544 if (cpathname == NULL) {
3545 PyErr_Format(PyExc_SystemError, "path buffer too short");
3546 return NULL;
3547 }
3548 return PyUnicode_FromString(buf);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003549}
3550
3551PyDoc_STRVAR(doc_cache_from_source,
3552"Given the path to a .py file, return the path to its .pyc/.pyo file.\n\
3553\n\
3554The .py file does not need to exist; this simply returns the path to the\n\
3555.pyc/.pyo file calculated as if the .py file were imported. The extension\n\
3556will be .pyc unless __debug__ is not defined, then it will be .pyo.\n\
3557\n\
3558If debug_override is not None, then it must be a boolean and is taken as\n\
3559the value of __debug__ instead.");
3560
3561static PyObject *
3562imp_source_from_cache(PyObject *self, PyObject *args, PyObject *kws)
3563{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003564 static char *kwlist[] = {"path", NULL};
Barry Warsaw28a691b2010-04-17 00:19:56 +00003565
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003566 char *pathname;
3567 char buf[MAXPATHLEN+1];
Barry Warsaw28a691b2010-04-17 00:19:56 +00003568
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003569 if (!PyArg_ParseTupleAndKeywords(
3570 args, kws, "es", kwlist,
3571 Py_FileSystemDefaultEncoding, &pathname))
3572 return NULL;
Barry Warsaw28a691b2010-04-17 00:19:56 +00003573
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003574 if (make_source_pathname(pathname, buf) == NULL) {
3575 PyErr_Format(PyExc_ValueError, "Not a PEP 3147 pyc path: %s",
3576 pathname);
3577 PyMem_Free(pathname);
3578 return NULL;
3579 }
3580 PyMem_Free(pathname);
3581 return PyUnicode_FromString(buf);
Barry Warsaw28a691b2010-04-17 00:19:56 +00003582}
3583
3584PyDoc_STRVAR(doc_source_from_cache,
3585"Given the path to a .pyc./.pyo file, return the path to its .py file.\n\
3586\n\
3587The .pyc/.pyo file does not need to exist; this simply returns the path to\n\
3588the .py file calculated to correspond to the .pyc/.pyo file. If path\n\
3589does not conform to PEP 3147 format, ValueError will be raised.");
3590
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003591/* Doc strings */
3592
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003593PyDoc_STRVAR(doc_imp,
3594"This module provides the components needed to build your own\n\
3595__import__ function. Undocumented functions are obsolete.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003596
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003597PyDoc_STRVAR(doc_find_module,
3598"find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003599Search for a module. If path is omitted or None, search for a\n\
3600built-in, frozen or special module and continue search in sys.path.\n\
3601The module name cannot contain '.'; to search for a submodule of a\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003602package, pass the submodule name and the package's __path__.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003603
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003604PyDoc_STRVAR(doc_load_module,
3605"load_module(name, file, filename, (suffix, mode, type)) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003606Load a module, given information returned by find_module().\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003607The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003608
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003609PyDoc_STRVAR(doc_get_magic,
3610"get_magic() -> string\n\
3611Return the magic number for .pyc or .pyo files.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003612
Barry Warsaw28a691b2010-04-17 00:19:56 +00003613PyDoc_STRVAR(doc_get_tag,
3614"get_tag() -> string\n\
3615Return the magic tag for .pyc or .pyo files.");
3616
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003617PyDoc_STRVAR(doc_get_suffixes,
3618"get_suffixes() -> [(suffix, mode, type), ...]\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003619Return a list of (suffix, mode, type) tuples describing the files\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003620that find_module() looks for.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003621
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003622PyDoc_STRVAR(doc_new_module,
3623"new_module(name) -> module\n\
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003624Create a new module. Do not enter it in sys.modules.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003625The module name must include the full package name, if any.");
Guido van Rossum0207e6d1997-09-09 22:04:42 +00003626
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00003627PyDoc_STRVAR(doc_lock_held,
Tim Petersa7c65092004-08-01 23:26:05 +00003628"lock_held() -> boolean\n\
3629Return True if the import lock is currently held, else False.\n\
3630On platforms without threads, return False.");
Tim Peters69232342001-08-30 05:16:13 +00003631
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003632PyDoc_STRVAR(doc_acquire_lock,
3633"acquire_lock() -> None\n\
Neal Norwitz2294c0d2003-02-12 23:02:21 +00003634Acquires the interpreter's import lock for the current thread.\n\
3635This lock should be used by import hooks to ensure thread-safety\n\
3636when importing modules.\n\
Guido van Rossumc4f4ca92003-02-12 21:46:11 +00003637On platforms without threads, this function does nothing.");
3638
3639PyDoc_STRVAR(doc_release_lock,
3640"release_lock() -> None\n\
3641Release the interpreter's import lock.\n\
3642On platforms without threads, this function does nothing.");
3643
Guido van Rossum79f25d91997-04-29 20:08:16 +00003644static PyMethodDef imp_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003645 {"find_module", imp_find_module, METH_VARARGS, doc_find_module},
3646 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
3647 {"get_tag", imp_get_tag, METH_NOARGS, doc_get_tag},
3648 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes},
3649 {"load_module", imp_load_module, METH_VARARGS, doc_load_module},
3650 {"new_module", imp_new_module, METH_VARARGS, doc_new_module},
3651 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
3652 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock},
3653 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock},
3654 {"reload", imp_reload, METH_O, doc_reload},
3655 {"cache_from_source", (PyCFunction)imp_cache_from_source,
3656 METH_VARARGS | METH_KEYWORDS, doc_cache_from_source},
3657 {"source_from_cache", (PyCFunction)imp_source_from_cache,
3658 METH_VARARGS | METH_KEYWORDS, doc_source_from_cache},
3659 /* The rest are obsolete */
3660 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS},
3661 {"is_frozen_package", imp_is_frozen_package, METH_VARARGS},
3662 {"init_builtin", imp_init_builtin, METH_VARARGS},
3663 {"init_frozen", imp_init_frozen, METH_VARARGS},
3664 {"is_builtin", imp_is_builtin, METH_VARARGS},
3665 {"is_frozen", imp_is_frozen, METH_VARARGS},
3666 {"load_compiled", imp_load_compiled, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003667#ifdef HAVE_DYNAMIC_LOADING
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003668 {"load_dynamic", imp_load_dynamic, METH_VARARGS},
Guido van Rossum96a8fb71999-12-22 14:09:35 +00003669#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003670 {"load_package", imp_load_package, METH_VARARGS},
3671 {"load_source", imp_load_source, METH_VARARGS},
3672 {NULL, NULL} /* sentinel */
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003673};
3674
Guido van Rossum1a8791e1998-08-04 22:46:29 +00003675static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003676setint(PyObject *d, char *name, int value)
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003677{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003678 PyObject *v;
3679 int err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003680
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003681 v = PyLong_FromLong((long)value);
3682 err = PyDict_SetItemString(d, name, v);
3683 Py_XDECREF(v);
3684 return err;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003685}
3686
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003687typedef struct {
3688 PyObject_HEAD
3689} NullImporter;
3690
3691static int
3692NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
3693{
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003694#ifndef MS_WINDOWS
3695 PyObject *path;
3696 struct stat statbuf;
3697 int rv;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003698
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003699 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3700 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003701
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003702 if (!PyArg_ParseTuple(args, "O&:NullImporter",
3703 PyUnicode_FSConverter, &path))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003704 return -1;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003705
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003706 if (PyBytes_GET_SIZE(path) == 0) {
3707 Py_DECREF(path);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003708 PyErr_SetString(PyExc_ImportError, "empty pathname");
3709 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003710 }
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003711
3712 rv = stat(PyBytes_AS_STRING(path), &statbuf);
3713 Py_DECREF(path);
3714 if (rv == 0) {
3715 /* it exists */
3716 if (S_ISDIR(statbuf.st_mode)) {
3717 /* it's a directory */
3718 PyErr_SetString(PyExc_ImportError, "existing directory");
3719 return -1;
3720 }
3721 }
3722#else /* MS_WINDOWS */
3723 PyObject *pathobj;
3724 DWORD rv;
Victor Stinner255dfdb2010-09-29 10:28:51 +00003725 wchar_t *path;
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003726
3727 if (!_PyArg_NoKeywords("NullImporter()", kwds))
3728 return -1;
3729
3730 if (!PyArg_ParseTuple(args, "U:NullImporter",
3731 &pathobj))
3732 return -1;
3733
3734 if (PyUnicode_GET_SIZE(pathobj) == 0) {
3735 PyErr_SetString(PyExc_ImportError, "empty pathname");
3736 return -1;
3737 }
3738
Victor Stinnerbeb4135b2010-10-07 01:02:42 +00003739 path = PyUnicode_AsWideCharString(pathobj, NULL);
Victor Stinner255dfdb2010-09-29 10:28:51 +00003740 if (path == NULL)
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003741 return -1;
3742 /* see issue1293 and issue3677:
3743 * stat() on Windows doesn't recognise paths like
3744 * "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
3745 */
3746 rv = GetFileAttributesW(path);
Victor Stinner255dfdb2010-09-29 10:28:51 +00003747 PyMem_Free(path);
Victor Stinner1a4d12d2010-08-13 13:07:29 +00003748 if (rv != INVALID_FILE_ATTRIBUTES) {
3749 /* it exists */
3750 if (rv & FILE_ATTRIBUTE_DIRECTORY) {
3751 /* it's a directory */
3752 PyErr_SetString(PyExc_ImportError, "existing directory");
3753 return -1;
3754 }
3755 }
3756#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003757 return 0;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003758}
3759
3760static PyObject *
3761NullImporter_find_module(NullImporter *self, PyObject *args)
3762{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003763 Py_RETURN_NONE;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003764}
3765
3766static PyMethodDef NullImporter_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003767 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS,
3768 "Always return None"
3769 },
3770 {NULL} /* Sentinel */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003771};
3772
3773
Christian Heimes9cd17752007-11-18 19:35:23 +00003774PyTypeObject PyNullImporter_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003775 PyVarObject_HEAD_INIT(NULL, 0)
3776 "imp.NullImporter", /*tp_name*/
3777 sizeof(NullImporter), /*tp_basicsize*/
3778 0, /*tp_itemsize*/
3779 0, /*tp_dealloc*/
3780 0, /*tp_print*/
3781 0, /*tp_getattr*/
3782 0, /*tp_setattr*/
3783 0, /*tp_reserved*/
3784 0, /*tp_repr*/
3785 0, /*tp_as_number*/
3786 0, /*tp_as_sequence*/
3787 0, /*tp_as_mapping*/
3788 0, /*tp_hash */
3789 0, /*tp_call*/
3790 0, /*tp_str*/
3791 0, /*tp_getattro*/
3792 0, /*tp_setattro*/
3793 0, /*tp_as_buffer*/
3794 Py_TPFLAGS_DEFAULT, /*tp_flags*/
3795 "Null importer object", /* tp_doc */
3796 0, /* tp_traverse */
3797 0, /* tp_clear */
3798 0, /* tp_richcompare */
3799 0, /* tp_weaklistoffset */
3800 0, /* tp_iter */
3801 0, /* tp_iternext */
3802 NullImporter_methods, /* tp_methods */
3803 0, /* tp_members */
3804 0, /* tp_getset */
3805 0, /* tp_base */
3806 0, /* tp_dict */
3807 0, /* tp_descr_get */
3808 0, /* tp_descr_set */
3809 0, /* tp_dictoffset */
3810 (initproc)NullImporter_init, /* tp_init */
3811 0, /* tp_alloc */
3812 PyType_GenericNew /* tp_new */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003813};
3814
Martin v. Löwis1a214512008-06-11 05:26:20 +00003815static struct PyModuleDef impmodule = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003816 PyModuleDef_HEAD_INIT,
3817 "imp",
3818 doc_imp,
3819 0,
3820 imp_methods,
3821 NULL,
3822 NULL,
3823 NULL,
3824 NULL
Martin v. Löwis1a214512008-06-11 05:26:20 +00003825};
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003826
Jason Tishler6bc06ec2003-09-04 11:59:50 +00003827PyMODINIT_FUNC
Martin v. Löwis1a214512008-06-11 05:26:20 +00003828PyInit_imp(void)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003829{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003830 PyObject *m, *d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003831
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003832 if (PyType_Ready(&PyNullImporter_Type) < 0)
3833 return NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003834
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003835 m = PyModule_Create(&impmodule);
3836 if (m == NULL)
3837 goto failure;
3838 d = PyModule_GetDict(m);
3839 if (d == NULL)
3840 goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003841
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003842 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure;
3843 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure;
3844 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure;
3845 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure;
3846 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure;
3847 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure;
3848 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure;
3849 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure;
3850 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure;
3851 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003852
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003853 Py_INCREF(&PyNullImporter_Type);
3854 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type);
3855 return m;
Guido van Rossumaee0bad1997-09-05 07:33:22 +00003856 failure:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003857 Py_XDECREF(m);
3858 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003859}
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003860
3861
Guido van Rossumb18618d2000-05-03 23:44:39 +00003862/* API for embedding applications that want to add their own entries
3863 to the table of built-in modules. This should normally be called
3864 *before* Py_Initialize(). When the table resize fails, -1 is
3865 returned and the existing table is unchanged.
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003866
3867 After a similar function by Just van Rossum. */
3868
3869int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003870PyImport_ExtendInittab(struct _inittab *newtab)
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003871{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003872 static struct _inittab *our_copy = NULL;
3873 struct _inittab *p;
3874 int i, n;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003875
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003876 /* Count the number of entries in both tables */
3877 for (n = 0; newtab[n].name != NULL; n++)
3878 ;
3879 if (n == 0)
3880 return 0; /* Nothing to do */
3881 for (i = 0; PyImport_Inittab[i].name != NULL; i++)
3882 ;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003883
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003884 /* Allocate new memory for the combined table */
3885 p = our_copy;
3886 PyMem_RESIZE(p, struct _inittab, i+n+1);
3887 if (p == NULL)
3888 return -1;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003889
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003890 /* Copy the tables into the new memory */
3891 if (our_copy != PyImport_Inittab)
3892 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab));
3893 PyImport_Inittab = our_copy = p;
3894 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab));
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003895
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003896 return 0;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003897}
3898
3899/* Shorthand to add a single entry given a name and a function */
3900
3901int
Brett Cannona826f322009-04-02 03:41:46 +00003902PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003903{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003904 struct _inittab newtab[2];
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003905
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003906 memset(newtab, '\0', sizeof newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003907
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003908 newtab[0].name = (char *)name;
3909 newtab[0].initfunc = initfunc;
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003910
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003911 return PyImport_ExtendInittab(newtab);
Guido van Rossum09cae1f1998-05-14 02:32:54 +00003912}
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003913
3914#ifdef __cplusplus
3915}
3916#endif