Mercurial > cpython-lru_cache-weakref
annotate Python/import.c @ 45495:48488fa50729
Merged revisions 61003-61033 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r61004 | georg.brandl | 2008-02-23 19:47:04 +0100 (Sat, 23 Feb 2008) | 2 lines
Documentation coverage builder, part 1.
........
r61006 | andrew.kuchling | 2008-02-23 20:02:33 +0100 (Sat, 23 Feb 2008) | 1 line
#1389051: IMAP module tries to read entire message in one chunk. Patch by Fredrik Lundh.
........
r61008 | andrew.kuchling | 2008-02-23 20:28:58 +0100 (Sat, 23 Feb 2008) | 1 line
#1389051, #1092502: fix excessively large allocations when using read() on a socket
........
r61011 | jeffrey.yasskin | 2008-02-23 20:40:54 +0100 (Sat, 23 Feb 2008) | 13 lines
Prevent classes like:
class RunSelfFunction(object):
def __init__(self):
self.thread = threading.Thread(target=self._run)
self.thread.start()
def _run(self):
pass
from creating a permanent cycle between the object and the thread by having the
Thread delete its references to the object when it completes.
As an example of the effect of this bug, paramiko.Transport inherits from
Thread to avoid it.
........
r61013 | jeffrey.yasskin | 2008-02-23 21:40:35 +0100 (Sat, 23 Feb 2008) | 3 lines
Followup to r61011: Also avoid the reference cycle when the Thread's target
raises an exception.
........
r61017 | georg.brandl | 2008-02-23 22:59:11 +0100 (Sat, 23 Feb 2008) | 2 lines
#2101: fix removeAttribute docs.
........
r61018 | georg.brandl | 2008-02-23 23:05:38 +0100 (Sat, 23 Feb 2008) | 2 lines
Add examples to modulefinder docs. Written for GHOP by Josip Dzolonga.
........
r61019 | georg.brandl | 2008-02-23 23:09:24 +0100 (Sat, 23 Feb 2008) | 2 lines
Use os.closerange() in popen2.
........
r61020 | georg.brandl | 2008-02-23 23:14:02 +0100 (Sat, 23 Feb 2008) | 2 lines
Use os.closerange().
........
r61021 | georg.brandl | 2008-02-23 23:35:33 +0100 (Sat, 23 Feb 2008) | 3 lines
In test_heapq and test_bisect, test both the Python and the C implementation.
Originally written for GHOP by Josip Dzolonga, heavily patched by me.
........
r61024 | facundo.batista | 2008-02-23 23:54:12 +0100 (Sat, 23 Feb 2008) | 3 lines
Added simple test case. Thanks Benjamin Peterson.
........
r61025 | georg.brandl | 2008-02-23 23:55:18 +0100 (Sat, 23 Feb 2008) | 2 lines
#1825: correctly document msilib.add_data.
........
r61027 | georg.brandl | 2008-02-24 00:02:23 +0100 (Sun, 24 Feb 2008) | 2 lines
#1826: allow dotted attribute paths in operator.attrgetter.
........
r61028 | georg.brandl | 2008-02-24 00:04:35 +0100 (Sun, 24 Feb 2008) | 2 lines
#1506171: added operator.methodcaller().
........
r61029 | georg.brandl | 2008-02-24 00:25:26 +0100 (Sun, 24 Feb 2008) | 2 lines
Document import ./. threading issues. #1720705.
........
r61032 | georg.brandl | 2008-02-24 00:43:01 +0100 (Sun, 24 Feb 2008) | 2 lines
Specify what kind of warning -3 emits.
........
r61033 | christian.heimes | 2008-02-24 00:59:45 +0100 (Sun, 24 Feb 2008) | 1 line
MS Windows doesn't have mode_t but stat.st_mode is defined as unsigned short.
........
| author | Christian Heimes <christian@cheimes.de> |
|---|---|
| date | Sun, 24 Feb 2008 00:38:49 +0000 |
| parents | 7dd2c1746267 |
| children | 832c820e9d14 |
| rev | line source |
|---|---|
|
145
853b736a6a9e
Added copyright notice.
Guido van Rossum <guido@python.org>
parents:
141
diff
changeset
|
1 |
| 6 | 2 /* Module definition and import implementation */ |
| 3 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
4 #include "Python.h" |
| 6 | 5 |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35678
diff
changeset
|
6 #include "Python-ast.h" |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
7 #undef Yield /* undefine macro conflicting with winbase.h */ |
|
36065
ea083efdc96c
Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents:
35999
diff
changeset
|
8 #include "pyarena.h" |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35678
diff
changeset
|
9 #include "pythonrun.h" |
| 6 | 10 #include "errcode.h" |
|
263
28f0ffd9facf
Support ".pyc" files: cached compilation results.
Guido van Rossum <guido@python.org>
parents:
228
diff
changeset
|
11 #include "marshal.h" |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35678
diff
changeset
|
12 #include "code.h" |
|
263
28f0ffd9facf
Support ".pyc" files: cached compilation results.
Guido van Rossum <guido@python.org>
parents:
228
diff
changeset
|
13 #include "compile.h" |
| 926 | 14 #include "eval.h" |
|
675
5aff9f8fd299
Move SEP to osdefs.h. Use MAXPATHLEN from osdefs.h.
Guido van Rossum <guido@python.org>
parents:
630
diff
changeset
|
15 #include "osdefs.h" |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
16 #include "importdl.h" |
|
263
28f0ffd9facf
Support ".pyc" files: cached compilation results.
Guido van Rossum <guido@python.org>
parents:
228
diff
changeset
|
17 |
|
14708
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
18 #ifdef HAVE_FCNTL_H |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
19 #include <fcntl.h> |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
20 #endif |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
21 #ifdef __cplusplus |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
22 extern "C" { |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
23 #endif |
|
14708
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
24 |
|
45495
48488fa50729
Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
25 #ifdef MS_WINDOWS |
|
48488fa50729
Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
26 /* for stat.st_mode */ |
|
48488fa50729
Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
27 typedef unsigned short mode_t; |
|
48488fa50729
Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
28 #endif |
|
48488fa50729
Merged revisions 61003-61033 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
29 |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
30 extern time_t PyOS_GetLastModificationTime(char *, FILE *); |
|
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
31 /* In getmtime.c */ |
|
1351
e149c77d173c
Makefile, import.c: Lance's alternative module search (allow .pyc file
Guido van Rossum <guido@python.org>
parents:
1293
diff
changeset
|
32 |
|
31851
adb42a711696
Bump the magic number to avoid sharing bytecode between 2.3 and 2.4.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
31824
diff
changeset
|
33 /* Magic word to reject .pyc files generated by other Python versions. |
|
adb42a711696
Bump the magic number to avoid sharing bytecode between 2.3 and 2.4.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
31824
diff
changeset
|
34 It should change for each incompatible change to the bytecode. |
|
adb42a711696
Bump the magic number to avoid sharing bytecode between 2.3 and 2.4.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
31824
diff
changeset
|
35 |
|
adb42a711696
Bump the magic number to avoid sharing bytecode between 2.3 and 2.4.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
31824
diff
changeset
|
36 The value of CR and LF is incorporated so if you ever read or write |
|
2812
fb3daf9b2456
new MAGIC; some changes to default files for imp.load_... functions
Guido van Rossum <guido@python.org>
parents:
2749
diff
changeset
|
37 a .pyc file in text mode the magic number will be wrong; also, the |
|
21010
4a9a9cc041de
Since the MAGIC number scheme is going to break on January 1st, document
Tim Peters <tim.peters@gmail.com>
parents:
20768
diff
changeset
|
38 Apple MPW compiler swaps their values, botching string constants. |
|
21886
abedb2418f62
Fix to the UTF-8 encoder: it failed on 0-length input strings.
Marc-André Lemburg <mal@egenix.com>
parents:
21712
diff
changeset
|
39 |
|
36988
49c6eb688906
Checkpoint. 218 tests are okay; 53 are failing. Done so far:
Guido van Rossum <guido@python.org>
parents:
36926
diff
changeset
|
40 The magic numbers must be spaced apart at least 2 values, as the |
|
32422
3df36e2e5ddc
Patch #923098: Share interned strings in marshal.
Martin v. Löwis <martin@v.loewis.de>
parents:
32294
diff
changeset
|
41 -U interpeter flag will cause MAGIC+1 being used. They have been |
|
3df36e2e5ddc
Patch #923098: Share interned strings in marshal.
Martin v. Löwis <martin@v.loewis.de>
parents:
32294
diff
changeset
|
42 odd numbers for some time now. |
|
21886
abedb2418f62
Fix to the UTF-8 encoder: it failed on 0-length input strings.
Marc-André Lemburg <mal@egenix.com>
parents:
21712
diff
changeset
|
43 |
|
31851
adb42a711696
Bump the magic number to avoid sharing bytecode between 2.3 and 2.4.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
31824
diff
changeset
|
44 There were a variety of old schemes for setting the magic number. |
|
adb42a711696
Bump the magic number to avoid sharing bytecode between 2.3 and 2.4.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
31824
diff
changeset
|
45 The current working scheme is to increment the previous value by |
|
adb42a711696
Bump the magic number to avoid sharing bytecode between 2.3 and 2.4.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
31824
diff
changeset
|
46 10. |
|
25085
5fe4d93df429
Because MWH changed the bytecode again, moved the magic number *back*
Guido van Rossum <guido@python.org>
parents:
24844
diff
changeset
|
47 |
|
21886
abedb2418f62
Fix to the UTF-8 encoder: it failed on 0-length input strings.
Marc-André Lemburg <mal@egenix.com>
parents:
21712
diff
changeset
|
48 Known values: |
|
abedb2418f62
Fix to the UTF-8 encoder: it failed on 0-length input strings.
Marc-André Lemburg <mal@egenix.com>
parents:
21712
diff
changeset
|
49 Python 1.5: 20121 |
|
abedb2418f62
Fix to the UTF-8 encoder: it failed on 0-length input strings.
Marc-André Lemburg <mal@egenix.com>
parents:
21712
diff
changeset
|
50 Python 1.5.1: 20121 |
|
abedb2418f62
Fix to the UTF-8 encoder: it failed on 0-length input strings.
Marc-André Lemburg <mal@egenix.com>
parents:
21712
diff
changeset
|
51 Python 1.5.2: 20121 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
52 Python 1.6: 50428 |
|
21886
abedb2418f62
Fix to the UTF-8 encoder: it failed on 0-length input strings.
Marc-André Lemburg <mal@egenix.com>
parents:
21712
diff
changeset
|
53 Python 2.0: 50823 |
|
abedb2418f62
Fix to the UTF-8 encoder: it failed on 0-length input strings.
Marc-André Lemburg <mal@egenix.com>
parents:
21712
diff
changeset
|
54 Python 2.0.1: 50823 |
|
abedb2418f62
Fix to the UTF-8 encoder: it failed on 0-length input strings.
Marc-André Lemburg <mal@egenix.com>
parents:
21712
diff
changeset
|
55 Python 2.1: 60202 |
|
abedb2418f62
Fix to the UTF-8 encoder: it failed on 0-length input strings.
Marc-André Lemburg <mal@egenix.com>
parents:
21712
diff
changeset
|
56 Python 2.1.1: 60202 |
|
abedb2418f62
Fix to the UTF-8 encoder: it failed on 0-length input strings.
Marc-André Lemburg <mal@egenix.com>
parents:
21712
diff
changeset
|
57 Python 2.1.2: 60202 |
|
abedb2418f62
Fix to the UTF-8 encoder: it failed on 0-length input strings.
Marc-André Lemburg <mal@egenix.com>
parents:
21712
diff
changeset
|
58 Python 2.2: 60717 |
|
23851
d6ae544acd24
Fix SF bug # 561858 Assertion with very long lists
Neal Norwitz <nnorwitz@gmail.com>
parents:
23832
diff
changeset
|
59 Python 2.3a0: 62011 |
| 24844 | 60 Python 2.3a0: 62021 |
|
25085
5fe4d93df429
Because MWH changed the bytecode again, moved the magic number *back*
Guido van Rossum <guido@python.org>
parents:
24844
diff
changeset
|
61 Python 2.3a0: 62011 (!) |
|
32422
3df36e2e5ddc
Patch #923098: Share interned strings in marshal.
Martin v. Löwis <martin@v.loewis.de>
parents:
32294
diff
changeset
|
62 Python 2.4a0: 62041 |
|
33248
1f9b9c226b43
SF Patch #1013667: Cleanup Peepholer Output
Raymond Hettinger <python@rcn.com>
parents:
32882
diff
changeset
|
63 Python 2.4a3: 62051 |
|
33539
2b49b4a85d9e
SF patch #1031667: Fold tuples of constants into a single constant
Raymond Hettinger <python@rcn.com>
parents:
33248
diff
changeset
|
64 Python 2.4b1: 62061 |
| 35008 | 65 Python 2.5a0: 62071 |
|
35757
eb15cdd4a2f1
the ast-branch changed the stack discipline of MAKE_CLOSURE, so we need to
Michael W. Hudson <mwh@python.net>
parents:
35742
diff
changeset
|
66 Python 2.5a0: 62081 (ast-branch) |
|
36695
b6d2f6fd3e11
PEP 343 -- the with-statement.
Guido van Rossum <guido@python.org>
parents:
36501
diff
changeset
|
67 Python 2.5a0: 62091 (with) |
|
36926
fc10ff322df1
Um, I thought I'd already checked this in.
Guido van Rossum <guido@python.org>
parents:
36866
diff
changeset
|
68 Python 2.5a0: 62092 (changed WITH_CLEANUP opcode) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
69 Python 2.5b3: 62101 (fix wrong code: for x, in ...) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
70 Python 2.5b3: 62111 (fix wrong code: x += yield) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
71 Python 2.5c1: 62121 (fix wrong lnotab with for loops and |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
72 storing constants that should have been removed) |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
73 Python 2.5c2: 62131 (fix wrong code: for x, in ... in listcomp/genexp) |
|
44349
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44142
diff
changeset
|
74 Python 2.6a0: 62151 (peephole optimizations and STORE_MAP opcode) |
|
36988
49c6eb688906
Checkpoint. 218 tests are okay; 53 are failing. Done so far:
Guido van Rossum <guido@python.org>
parents:
36926
diff
changeset
|
75 Python 3000: 3000 |
|
39678
f87a3e61853d
Remove the UNARY_CONVERT opcode (was used for backticks). Also bumped up the
Brett Cannon <bcannon@gmail.com>
parents:
39610
diff
changeset
|
76 3010 (removed UNARY_CONVERT) |
|
39693
d0b83c4630c0
SF patch 1547796 by Georg Brandl -- set literals.
Guido van Rossum <guido@python.org>
parents:
39678
diff
changeset
|
77 3020 (added BUILD_SET) |
|
40215
1cce0526d9b0
Jiwon Seo's PEP 3102 implementation.
Guido van Rossum <guido@python.org>
parents:
39693
diff
changeset
|
78 3030 (added keyword-only parameters) |
|
40530
7a35d3d1ac5a
Update the magic number now that signature annotations were added.
Guido van Rossum <guido@python.org>
parents:
40450
diff
changeset
|
79 3040 (added signature annotations) |
|
40774
793e0323d4d6
Essential changes for print function changes.
Guido van Rossum <guido@python.org>
parents:
40530
diff
changeset
|
80 3050 (print becomes a function) |
|
41226
19f7ff443718
Implement PEP 3115 -- new metaclass syntax and semantics.
Guido van Rossum <guido@python.org>
parents:
40774
diff
changeset
|
81 3060 (PEP 3115 metaclass syntax) |
|
43569
19319e70fc3e
Patch #1272, by Christian Heimes and Alexandre Vassalotti.
Guido van Rossum <guido@python.org>
parents:
43225
diff
changeset
|
82 3070 (PEP 3109 raise changes) |
|
19319e70fc3e
Patch #1272, by Christian Heimes and Alexandre Vassalotti.
Guido van Rossum <guido@python.org>
parents:
43225
diff
changeset
|
83 3080 (PEP 3137 make __file__ and __name__ unicode) |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43762
diff
changeset
|
84 3090 (kill str8 interning) |
|
44349
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44142
diff
changeset
|
85 3100 (merge from 2.6a0, see 62151) |
|
44583
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
86 3102 (__file__ points to source file) |
|
35757
eb15cdd4a2f1
the ast-branch changed the stack discipline of MAKE_CLOSURE, so we need to
Michael W. Hudson <mwh@python.net>
parents:
35742
diff
changeset
|
87 . |
|
21010
4a9a9cc041de
Since the MAGIC number scheme is going to break on January 1st, document
Tim Peters <tim.peters@gmail.com>
parents:
20768
diff
changeset
|
88 */ |
|
44583
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
89 #define MAGIC (3102 | ((long)'\r'<<16) | ((long)'\n'<<24)) |
|
487
77b80a91d357
New magic word; and check it.
Guido van Rossum <guido@python.org>
parents:
340
diff
changeset
|
90 |
| 12543 | 91 /* Magic word as global; note that _PyImport_Init() can change the |
|
13181
6f4669814884
another typo caught by Rob Hooft
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12576
diff
changeset
|
92 value of this global to accommodate for alterations of how the |
| 12543 | 93 compiler works which are enabled by command line switches. */ |
| 94 static long pyc_magic = MAGIC; | |
| 95 | |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
96 /* See _PyImport_FixupExtension() below */ |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
97 static PyObject *extensions = NULL; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
98 |
|
6541
b2dfff06789c
Instead of using _PyImport_Inittab[] directly, use the new "official"
Guido van Rossum <guido@python.org>
parents:
6454
diff
changeset
|
99 /* This table is defined in config.c: */ |
|
b2dfff06789c
Instead of using _PyImport_Inittab[] directly, use the new "official"
Guido van Rossum <guido@python.org>
parents:
6454
diff
changeset
|
100 extern struct _inittab _PyImport_Inittab[]; |
|
b2dfff06789c
Instead of using _PyImport_Inittab[] directly, use the new "official"
Guido van Rossum <guido@python.org>
parents:
6454
diff
changeset
|
101 |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
102 /* Method from Parser/tokenizer.c */ |
|
43632
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
103 extern char * PyTokenizer_FindEncoding(int); |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
104 |
|
6541
b2dfff06789c
Instead of using _PyImport_Inittab[] directly, use the new "official"
Guido van Rossum <guido@python.org>
parents:
6454
diff
changeset
|
105 struct _inittab *PyImport_Inittab = _PyImport_Inittab; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
106 |
|
11602
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
107 /* these tables define the module suffixes that Python recognizes */ |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
108 struct filedescr * _PyImport_Filetab = NULL; |
|
16947
b25131bc6ec7
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16932
diff
changeset
|
109 |
|
11602
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
110 static const struct filedescr _PyImport_StandardFiletab[] = { |
|
23554
e5242f58a5b6
File modes in filedescr entries are also passed to Python, so we now put "U"
Jack Jansen <jack.jansen@cwi.nl>
parents:
23029
diff
changeset
|
111 {".py", "U", PY_SOURCE}, |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
23879
diff
changeset
|
112 #ifdef MS_WINDOWS |
|
23554
e5242f58a5b6
File modes in filedescr entries are also passed to Python, so we now put "U"
Jack Jansen <jack.jansen@cwi.nl>
parents:
23029
diff
changeset
|
113 {".pyw", "U", PY_SOURCE}, |
|
21010
4a9a9cc041de
Since the MAGIC number scheme is going to break on January 1st, document
Tim Peters <tim.peters@gmail.com>
parents:
20768
diff
changeset
|
114 #endif |
|
11602
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
115 {".pyc", "rb", PY_COMPILED}, |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
116 {0, 0} |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
117 }; |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
118 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
119 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
120 /* Initialize things */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
121 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
122 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
123 _PyImport_Init(void) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
124 { |
|
11602
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
125 const struct filedescr *scan; |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
126 struct filedescr *filetab; |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
127 int countD = 0; |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
128 int countS = 0; |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
129 |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
130 /* prepare _PyImport_Filetab: copy entries from |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
131 _PyImport_DynLoadFiletab and _PyImport_StandardFiletab. |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
132 */ |
|
42775
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42622
diff
changeset
|
133 #ifdef HAVE_DYNAMIC_LOADING |
|
11602
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
134 for (scan = _PyImport_DynLoadFiletab; scan->suffix != NULL; ++scan) |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
135 ++countD; |
|
42775
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42622
diff
changeset
|
136 #endif |
|
11602
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
137 for (scan = _PyImport_StandardFiletab; scan->suffix != NULL; ++scan) |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
138 ++countS; |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12543
diff
changeset
|
139 filetab = PyMem_NEW(struct filedescr, countD + countS + 1); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
140 if (filetab == NULL) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
141 Py_FatalError("Can't initialize import file table."); |
|
42775
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42622
diff
changeset
|
142 #ifdef HAVE_DYNAMIC_LOADING |
|
11602
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
143 memcpy(filetab, _PyImport_DynLoadFiletab, |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
144 countD * sizeof(struct filedescr)); |
|
42775
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42622
diff
changeset
|
145 #endif |
|
11602
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
146 memcpy(filetab + countD, _PyImport_StandardFiletab, |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
147 countS * sizeof(struct filedescr)); |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
148 filetab[countD + countS].suffix = NULL; |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
149 |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
150 _PyImport_Filetab = filetab; |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
151 |
|
5180
6bc56259cc4c
When -O is given, use ".pyo" instead of ".pyc".
Guido van Rossum <guido@python.org>
parents:
5043
diff
changeset
|
152 if (Py_OptimizeFlag) { |
|
11602
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
153 /* Replace ".pyc" with ".pyo" in _PyImport_Filetab */ |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
154 for (; filetab->suffix != NULL; filetab++) { |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
155 if (strcmp(filetab->suffix, ".pyc") == 0) |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
156 filetab->suffix = ".pyo"; |
|
5180
6bc56259cc4c
When -O is given, use ".pyo" instead of ".pyc".
Guido van Rossum <guido@python.org>
parents:
5043
diff
changeset
|
157 } |
|
6bc56259cc4c
When -O is given, use ".pyo" instead of ".pyc".
Guido van Rossum <guido@python.org>
parents:
5043
diff
changeset
|
158 } |
| 12543 | 159 |
|
41558
29ae667f3239
Checkpoint. Manipulated things so that string literals are always
Guido van Rossum <guido@python.org>
parents:
41554
diff
changeset
|
160 { |
| 12543 | 161 /* Fix the pyc_magic so that byte compiled code created |
| 162 using the all-Unicode method doesn't interfere with | |
| 163 code created in normal operation mode. */ | |
| 164 pyc_magic = MAGIC + 1; | |
| 165 } | |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
166 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
167 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
168 void |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
169 _PyImportHooks_Init(void) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
170 { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
171 PyObject *v, *path_hooks = NULL, *zimpimport; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
172 int err = 0; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
173 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
174 /* adding sys.path_hooks and sys.path_importer_cache, setting up |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
175 zipimport */ |
|
43897
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
176 if (PyType_Ready(&PyNullImporter_Type) < 0) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
177 goto error; |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
178 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
179 if (Py_VerboseFlag) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
180 PySys_WriteStderr("# installing zipimport hook\n"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
181 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
182 v = PyList_New(0); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
183 if (v == NULL) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
184 goto error; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
185 err = PySys_SetObject("meta_path", v); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
186 Py_DECREF(v); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
187 if (err) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
188 goto error; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
189 v = PyDict_New(); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
190 if (v == NULL) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
191 goto error; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
192 err = PySys_SetObject("path_importer_cache", v); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
193 Py_DECREF(v); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
194 if (err) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
195 goto error; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
196 path_hooks = PyList_New(0); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
197 if (path_hooks == NULL) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
198 goto error; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
199 err = PySys_SetObject("path_hooks", path_hooks); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
200 if (err) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
201 error: |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
202 PyErr_Print(); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
203 Py_FatalError("initializing sys.meta_path, sys.path_hooks, " |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
204 "path_importer_cache, or NullImporter failed" |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
205 ); |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
206 } |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
207 |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
208 zimpimport = PyImport_ImportModule("zipimport"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
209 if (zimpimport == NULL) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
210 PyErr_Clear(); /* No zip import module -- okay */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
211 if (Py_VerboseFlag) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
212 PySys_WriteStderr("# can't import zipimport\n"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
213 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
214 else { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
215 PyObject *zipimporter = PyObject_GetAttrString(zimpimport, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
216 "zipimporter"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
217 Py_DECREF(zimpimport); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
218 if (zipimporter == NULL) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
219 PyErr_Clear(); /* No zipimporter object -- okay */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
220 if (Py_VerboseFlag) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
221 PySys_WriteStderr( |
| 29812 | 222 "# can't import zipimport.zipimporter\n"); |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
223 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
224 else { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
225 /* sys.path_hooks.append(zipimporter) */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
226 err = PyList_Append(path_hooks, zipimporter); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
227 Py_DECREF(zipimporter); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
228 if (err) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
229 goto error; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
230 if (Py_VerboseFlag) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
231 PySys_WriteStderr( |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
232 "# installed zipimport hook\n"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
233 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
234 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
235 Py_DECREF(path_hooks); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
236 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
237 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
238 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
239 _PyImport_Fini(void) |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
240 { |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
241 Py_XDECREF(extensions); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
242 extensions = NULL; |
|
14991
5d41ca49a10a
_PyImport_Fini(): Closed small memory leak when an embedded app calls
Barry Warsaw <barry@python.org>
parents:
14921
diff
changeset
|
243 PyMem_DEL(_PyImport_Filetab); |
|
5d41ca49a10a
_PyImport_Fini(): Closed small memory leak when an embedded app calls
Barry Warsaw <barry@python.org>
parents:
14921
diff
changeset
|
244 _PyImport_Filetab = NULL; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
245 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
246 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
247 |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
248 /* Locking primitives to prevent parallel imports of the same module |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
249 in different threads to return with a partially loaded module. |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
250 These calls are serialized by the global interpreter lock. */ |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
251 |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
252 #ifdef WITH_THREAD |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
253 |
|
9203
07dae6fdae79
Renamed thread.h to pythread.h.
Guido van Rossum <guido@python.org>
parents:
9187
diff
changeset
|
254 #include "pythread.h" |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
255 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9431
diff
changeset
|
256 static PyThread_type_lock import_lock = 0; |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
257 static long import_lock_thread = -1; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
258 static int import_lock_level = 0; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
259 |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
260 static void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
261 lock_import(void) |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
262 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9431
diff
changeset
|
263 long me = PyThread_get_thread_ident(); |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
264 if (me == -1) |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
265 return; /* Too bad */ |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
266 if (import_lock == NULL) { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9431
diff
changeset
|
267 import_lock = PyThread_allocate_lock(); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
268 if (import_lock == NULL) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
269 return; /* Nothing much we can do. */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
270 } |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
271 if (import_lock_thread == me) { |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
272 import_lock_level++; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
273 return; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
274 } |
|
27852
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
275 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0)) |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
276 { |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
277 PyThreadState *tstate = PyEval_SaveThread(); |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9431
diff
changeset
|
278 PyThread_acquire_lock(import_lock, 1); |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
279 PyEval_RestoreThread(tstate); |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
280 } |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
281 import_lock_thread = me; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
282 import_lock_level = 1; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
283 } |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
284 |
|
27852
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
285 static int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
286 unlock_import(void) |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
287 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9431
diff
changeset
|
288 long me = PyThread_get_thread_ident(); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
289 if (me == -1 || import_lock == NULL) |
|
27852
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
290 return 0; /* Too bad */ |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
291 if (import_lock_thread != me) |
|
27852
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
292 return -1; |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
293 import_lock_level--; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
294 if (import_lock_level == 0) { |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
295 import_lock_thread = -1; |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9431
diff
changeset
|
296 PyThread_release_lock(import_lock); |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
297 } |
|
27852
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
298 return 1; |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
299 } |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
300 |
|
35550
724bbd489ad4
- Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents:
35542
diff
changeset
|
301 /* This function is called from PyOS_AfterFork to ensure that newly |
|
724bbd489ad4
- Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents:
35542
diff
changeset
|
302 created child processes do not share locks with the parent. */ |
|
724bbd489ad4
- Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents:
35542
diff
changeset
|
303 |
|
724bbd489ad4
- Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents:
35542
diff
changeset
|
304 void |
|
724bbd489ad4
- Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents:
35542
diff
changeset
|
305 _PyImport_ReInitLock(void) |
|
724bbd489ad4
- Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents:
35542
diff
changeset
|
306 { |
|
724bbd489ad4
- Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents:
35542
diff
changeset
|
307 #ifdef _AIX |
|
724bbd489ad4
- Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents:
35542
diff
changeset
|
308 if (import_lock != NULL) |
|
724bbd489ad4
- Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents:
35542
diff
changeset
|
309 import_lock = PyThread_allocate_lock(); |
|
724bbd489ad4
- Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents:
35542
diff
changeset
|
310 #endif |
|
724bbd489ad4
- Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents:
35542
diff
changeset
|
311 } |
|
724bbd489ad4
- Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents:
35542
diff
changeset
|
312 |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
313 #else |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
314 |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
315 #define lock_import() |
|
27852
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
316 #define unlock_import() 0 |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
317 |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
318 #endif |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
319 |
|
19596
1be18ef869a4
Add a new function imp.lock_held(), and use it to skip test_threaded_import
Tim Peters <tim.peters@gmail.com>
parents:
19238
diff
changeset
|
320 static PyObject * |
|
27917
c346d095791d
Remove PyArg_ParseTuple() for methods which take no args,
Neal Norwitz <nnorwitz@gmail.com>
parents:
27853
diff
changeset
|
321 imp_lock_held(PyObject *self, PyObject *noargs) |
|
19596
1be18ef869a4
Add a new function imp.lock_held(), and use it to skip test_threaded_import
Tim Peters <tim.peters@gmail.com>
parents:
19238
diff
changeset
|
322 { |
|
1be18ef869a4
Add a new function imp.lock_held(), and use it to skip test_threaded_import
Tim Peters <tim.peters@gmail.com>
parents:
19238
diff
changeset
|
323 #ifdef WITH_THREAD |
|
22866
a561ff1b4ffa
Return bools from functions named is_<whatever>().
Guido van Rossum <guido@python.org>
parents:
22705
diff
changeset
|
324 return PyBool_FromLong(import_lock_thread != -1); |
|
19596
1be18ef869a4
Add a new function imp.lock_held(), and use it to skip test_threaded_import
Tim Peters <tim.peters@gmail.com>
parents:
19238
diff
changeset
|
325 #else |
|
22866
a561ff1b4ffa
Return bools from functions named is_<whatever>().
Guido van Rossum <guido@python.org>
parents:
22705
diff
changeset
|
326 return PyBool_FromLong(0); |
|
19596
1be18ef869a4
Add a new function imp.lock_held(), and use it to skip test_threaded_import
Tim Peters <tim.peters@gmail.com>
parents:
19238
diff
changeset
|
327 #endif |
|
1be18ef869a4
Add a new function imp.lock_held(), and use it to skip test_threaded_import
Tim Peters <tim.peters@gmail.com>
parents:
19238
diff
changeset
|
328 } |
|
1be18ef869a4
Add a new function imp.lock_held(), and use it to skip test_threaded_import
Tim Peters <tim.peters@gmail.com>
parents:
19238
diff
changeset
|
329 |
|
27852
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
330 static PyObject * |
|
27917
c346d095791d
Remove PyArg_ParseTuple() for methods which take no args,
Neal Norwitz <nnorwitz@gmail.com>
parents:
27853
diff
changeset
|
331 imp_acquire_lock(PyObject *self, PyObject *noargs) |
|
27852
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
332 { |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
333 #ifdef WITH_THREAD |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
334 lock_import(); |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
335 #endif |
|
27853
5620b0786271
Cleanup from patch #683257:
Neal Norwitz <nnorwitz@gmail.com>
parents:
27852
diff
changeset
|
336 Py_INCREF(Py_None); |
|
5620b0786271
Cleanup from patch #683257:
Neal Norwitz <nnorwitz@gmail.com>
parents:
27852
diff
changeset
|
337 return Py_None; |
|
27852
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
338 } |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
339 |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
340 static PyObject * |
|
27917
c346d095791d
Remove PyArg_ParseTuple() for methods which take no args,
Neal Norwitz <nnorwitz@gmail.com>
parents:
27853
diff
changeset
|
341 imp_release_lock(PyObject *self, PyObject *noargs) |
|
27852
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
342 { |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
343 #ifdef WITH_THREAD |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
344 if (unlock_import() < 0) { |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
345 PyErr_SetString(PyExc_RuntimeError, |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
346 "not holding the import lock"); |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
347 return NULL; |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
348 } |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
349 #endif |
|
27853
5620b0786271
Cleanup from patch #683257:
Neal Norwitz <nnorwitz@gmail.com>
parents:
27852
diff
changeset
|
350 Py_INCREF(Py_None); |
|
5620b0786271
Cleanup from patch #683257:
Neal Norwitz <nnorwitz@gmail.com>
parents:
27852
diff
changeset
|
351 return Py_None; |
|
27852
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
352 } |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
353 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
354 static void |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
355 imp_modules_reloading_clear(void) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
356 { |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
357 PyInterpreterState *interp = PyThreadState_Get()->interp; |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
358 if (interp->modules_reloading != NULL) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
359 PyDict_Clear(interp->modules_reloading); |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
360 } |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
361 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
362 /* Helper for sys */ |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
363 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
364 PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
365 PyImport_GetModuleDict(void) |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
366 { |
|
31797
846b3ee7e106
Changed random calls to PyThreadState_Get() to use the macro
Nicholas Bastin <nick.bastin@gmail.com>
parents:
31778
diff
changeset
|
367 PyInterpreterState *interp = PyThreadState_GET()->interp; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
368 if (interp->modules == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
369 Py_FatalError("PyImport_GetModuleDict: no module dictionary!"); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
370 return interp->modules; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
371 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
372 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
373 |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
374 /* List of names to clear in sys */ |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
375 static char* sys_deletes[] = { |
|
41253
f29f1a8b7869
Patch #1680961: remove sys.exitfunc and replace it with a private C API. Also, reimplement atexit in C so it can take advantage of this private API.
Collin Winter <collinw@gmail.com>
parents:
41226
diff
changeset
|
376 "path", "argv", "ps1", "ps2", |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
377 "last_type", "last_value", "last_traceback", |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
378 "path_hooks", "path_importer_cache", "meta_path", |
|
45071
f380d991390e
Merged revisions 60441-60474 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44634
diff
changeset
|
379 /* misc stuff */ |
|
f380d991390e
Merged revisions 60441-60474 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44634
diff
changeset
|
380 "flags", "float_info", |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
381 NULL |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
382 }; |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
383 |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
384 static char* sys_files[] = { |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
385 "stdin", "__stdin__", |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
386 "stdout", "__stdout__", |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
387 "stderr", "__stderr__", |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
388 NULL |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
389 }; |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
390 |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
391 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
392 /* Un-initialize things, as good as we can */ |
| 86 | 393 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
394 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
395 PyImport_Cleanup(void) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
396 { |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
397 Py_ssize_t pos, ndone; |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
398 char *name; |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
399 PyObject *key, *value, *dict; |
|
31797
846b3ee7e106
Changed random calls to PyThreadState_Get() to use the macro
Nicholas Bastin <nick.bastin@gmail.com>
parents:
31778
diff
changeset
|
400 PyInterpreterState *interp = PyThreadState_GET()->interp; |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
401 PyObject *modules = interp->modules; |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
402 |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
403 if (modules == NULL) |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
404 return; /* Already done */ |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
405 |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
406 /* Delete some special variables first. These are common |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
407 places where user values hide and people complain when their |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
408 destructors fail. Since the modules containing them are |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
409 deleted *last* of all, they would come too late in the normal |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
410 destruction order. Sigh. */ |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
411 |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
412 value = PyDict_GetItemString(modules, "builtins"); |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
413 if (value != NULL && PyModule_Check(value)) { |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
414 dict = PyModule_GetDict(value); |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
415 if (Py_VerboseFlag) |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
416 PySys_WriteStderr("# clear builtins._\n"); |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
417 PyDict_SetItemString(dict, "_", Py_None); |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
418 } |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
419 value = PyDict_GetItemString(modules, "sys"); |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
420 if (value != NULL && PyModule_Check(value)) { |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
421 char **p; |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
422 PyObject *v; |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
423 dict = PyModule_GetDict(value); |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
424 for (p = sys_deletes; *p != NULL; p++) { |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
425 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
426 PySys_WriteStderr("# clear sys.%s\n", *p); |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
427 PyDict_SetItemString(dict, *p, Py_None); |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
428 } |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
429 for (p = sys_files; *p != NULL; p+=2) { |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
430 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
431 PySys_WriteStderr("# restore sys.%s\n", *p); |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
432 v = PyDict_GetItemString(dict, *(p+1)); |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
433 if (v == NULL) |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
434 v = Py_None; |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
435 PyDict_SetItemString(dict, *p, v); |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
436 } |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
437 } |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
438 |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
439 /* First, delete __main__ */ |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
440 value = PyDict_GetItemString(modules, "__main__"); |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
441 if (value != NULL && PyModule_Check(value)) { |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
442 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
443 PySys_WriteStderr("# cleanup __main__\n"); |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
444 _PyModule_Clear(value); |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
445 PyDict_SetItemString(modules, "__main__", Py_None); |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
446 } |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
447 |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
448 /* The special treatment of "builtins" here is because even |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
449 when it's not referenced as a module, its dictionary is |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
450 referenced by almost every module's __builtins__. Since |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
451 deleting a module clears its dictionary (even if there are |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
452 references left to it), we need to delete the "builtins" |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
453 module last. Likewise, we don't delete sys until the very |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
454 end because it is implicitly referenced (e.g. by print). |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
455 |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
456 Also note that we 'delete' modules by replacing their entry |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
457 in the modules dict with None, rather than really deleting |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
458 them; this avoids a rehash of the modules dictionary and |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
459 also marks them as "non existent" so they won't be |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
460 re-imported. */ |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
461 |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
462 /* Next, repeatedly delete modules with a reference count of |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
463 one (skipping builtins and sys) and delete them */ |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
464 do { |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
465 ndone = 0; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
466 pos = 0; |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
467 while (PyDict_Next(modules, &pos, &key, &value)) { |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
468 if (value->ob_refcnt != 1) |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
469 continue; |
|
42862
ed1594a16bdb
Use unicode and remove support for some uses of str8.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42859
diff
changeset
|
470 if (PyUnicode_Check(key) && PyModule_Check(value)) { |
|
ed1594a16bdb
Use unicode and remove support for some uses of str8.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42859
diff
changeset
|
471 name = PyUnicode_AsString(key); |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
472 if (strcmp(name, "builtins") == 0) |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
473 continue; |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
474 if (strcmp(name, "sys") == 0) |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
475 continue; |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
476 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
477 PySys_WriteStderr( |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
478 "# cleanup[1] %s\n", name); |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
479 _PyModule_Clear(value); |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
480 PyDict_SetItem(modules, key, Py_None); |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
481 ndone++; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
482 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
483 } |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
484 } while (ndone > 0); |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
485 |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
486 /* Next, delete all modules (still skipping builtins and sys) */ |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
487 pos = 0; |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
488 while (PyDict_Next(modules, &pos, &key, &value)) { |
|
42862
ed1594a16bdb
Use unicode and remove support for some uses of str8.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42859
diff
changeset
|
489 if (PyUnicode_Check(key) && PyModule_Check(value)) { |
|
ed1594a16bdb
Use unicode and remove support for some uses of str8.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42859
diff
changeset
|
490 name = PyUnicode_AsString(key); |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
491 if (strcmp(name, "builtins") == 0) |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
492 continue; |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
493 if (strcmp(name, "sys") == 0) |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
494 continue; |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
495 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
496 PySys_WriteStderr("# cleanup[2] %s\n", name); |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
497 _PyModule_Clear(value); |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
498 PyDict_SetItem(modules, key, Py_None); |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
499 } |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
500 } |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
501 |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
502 /* Next, delete sys and builtins (in that order) */ |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
503 value = PyDict_GetItemString(modules, "sys"); |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
504 if (value != NULL && PyModule_Check(value)) { |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
505 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
506 PySys_WriteStderr("# cleanup sys\n"); |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
507 _PyModule_Clear(value); |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
508 PyDict_SetItemString(modules, "sys", Py_None); |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
509 } |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
510 value = PyDict_GetItemString(modules, "builtins"); |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
511 if (value != NULL && PyModule_Check(value)) { |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
512 if (Py_VerboseFlag) |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
513 PySys_WriteStderr("# cleanup builtins\n"); |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
514 _PyModule_Clear(value); |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
515 PyDict_SetItemString(modules, "builtins", Py_None); |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
516 } |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
517 |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
518 /* Finally, clear and delete the modules directory */ |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
519 PyDict_Clear(modules); |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
520 interp->modules = NULL; |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
521 Py_DECREF(modules); |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
522 Py_CLEAR(interp->modules_reloading); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
523 } |
|
166
28923e44254c
Added forward declaration (to satisfy Standard C).
Guido van Rossum <guido@python.org>
parents:
145
diff
changeset
|
524 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
525 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
526 /* Helper for pythonrun.c -- return magic number */ |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1877
diff
changeset
|
527 |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1877
diff
changeset
|
528 long |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
529 PyImport_GetMagicNumber(void) |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1877
diff
changeset
|
530 { |
| 12543 | 531 return pyc_magic; |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1877
diff
changeset
|
532 } |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1877
diff
changeset
|
533 |
| 6 | 534 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
535 /* Magic for extension modules (built-in as well as dynamically |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
536 loaded). To prevent initializing an extension module more than |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
537 once, we keep a static dictionary 'extensions' keyed by module name |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
538 (for built-in modules) or by filename (for dynamically loaded |
|
19238
5b87ee44000b
Fixed typo in comment leading up to _PyImport_FixupExtension().
Barry Warsaw <barry@python.org>
parents:
19063
diff
changeset
|
539 modules), containing these modules. A copy of the module's |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
540 dictionary is stored by calling _PyImport_FixupExtension() |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
541 immediately after the module initialization function succeeds. A |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
542 copy can be retrieved from there by calling |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
543 _PyImport_FindExtension(). */ |
| 6 | 544 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
545 PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
546 _PyImport_FixupExtension(char *name, char *filename) |
| 6 | 547 { |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
548 PyObject *modules, *mod, *dict, *copy; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
549 if (extensions == NULL) { |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
550 extensions = PyDict_New(); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
551 if (extensions == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
552 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
553 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
554 modules = PyImport_GetModuleDict(); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
555 mod = PyDict_GetItemString(modules, name); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
556 if (mod == NULL || !PyModule_Check(mod)) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
557 PyErr_Format(PyExc_SystemError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
558 "_PyImport_FixupExtension: module %.200s not loaded", name); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
559 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
560 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
561 dict = PyModule_GetDict(mod); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
562 if (dict == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
563 return NULL; |
|
20671
3fb403eaede1
Use PyDict_Copy() and PyDict_Update() instead of using PyObject_CallMethod()
Fred Drake <fdrake@acm.org>
parents:
20654
diff
changeset
|
564 copy = PyDict_Copy(dict); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
565 if (copy == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
566 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
567 PyDict_SetItemString(extensions, filename, copy); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
568 Py_DECREF(copy); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
569 return copy; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
570 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
571 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
572 PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
573 _PyImport_FindExtension(char *name, char *filename) |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
574 { |
|
20671
3fb403eaede1
Use PyDict_Copy() and PyDict_Update() instead of using PyObject_CallMethod()
Fred Drake <fdrake@acm.org>
parents:
20654
diff
changeset
|
575 PyObject *dict, *mod, *mdict; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
576 if (extensions == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
577 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
578 dict = PyDict_GetItemString(extensions, filename); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
579 if (dict == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
580 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
581 mod = PyImport_AddModule(name); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
582 if (mod == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
583 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
584 mdict = PyModule_GetDict(mod); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
585 if (mdict == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
586 return NULL; |
|
20671
3fb403eaede1
Use PyDict_Copy() and PyDict_Update() instead of using PyObject_CallMethod()
Fred Drake <fdrake@acm.org>
parents:
20654
diff
changeset
|
587 if (PyDict_Update(mdict, dict)) |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
588 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
589 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
590 PySys_WriteStderr("import %s # previously loaded (%s)\n", |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
591 name, filename); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
592 return mod; |
| 6 | 593 } |
| 594 | |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
595 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
596 /* Get the module object corresponding to a module name. |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
597 First check the modules dictionary if there's one there, |
|
30722
651fc8d98d99
Fix a bunch of typos in documentation, docstrings and comments.
Walter Dörwald <walter@livinglogic.de>
parents:
30311
diff
changeset
|
598 if not, create a new one and insert it in the modules dictionary. |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
599 Because the former action is most common, THIS DOES NOT RETURN A |
|
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
600 'NEW' REFERENCE! */ |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
601 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
602 PyObject * |
|
35999
9541369b0dca
Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35757
diff
changeset
|
603 PyImport_AddModule(const char *name) |
|
40
f28ac7f621c7
Added reload() functionality.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
604 { |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
605 PyObject *modules = PyImport_GetModuleDict(); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
606 PyObject *m; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
607 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
608 if ((m = PyDict_GetItemString(modules, name)) != NULL && |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
609 PyModule_Check(m)) |
| 86 | 610 return m; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
611 m = PyModule_New(name); |
| 86 | 612 if (m == NULL) |
| 6 | 613 return NULL; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
614 if (PyDict_SetItemString(modules, name, m) != 0) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
615 Py_DECREF(m); |
| 86 | 616 return NULL; |
| 6 | 617 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
618 Py_DECREF(m); /* Yes, it still exists, in modules! */ |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
619 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
620 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
621 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
622 |
|
32882
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
623 /* Remove name from sys.modules, if it's there. */ |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
624 static void |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
625 _RemoveModule(const char *name) |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
626 { |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
627 PyObject *modules = PyImport_GetModuleDict(); |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
628 if (PyDict_GetItemString(modules, name) == NULL) |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
629 return; |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
630 if (PyDict_DelItemString(modules, name) < 0) |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
631 Py_FatalError("import: deleting existing key in" |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
632 "sys.modules failed"); |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
633 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
634 |
|
44583
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
635 static PyObject * get_sourcefile(const char *file); |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
636 |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
637 /* Execute a code object in a module and return the module object |
|
32882
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
638 * WITH INCREMENTED REFERENCE COUNT. If an error occurs, name is |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
639 * removed from sys.modules, to avoid leaving damaged module objects |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
640 * in sys.modules. The caller may wish to restore the original |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
641 * module object (if any) in this case; PyImport_ReloadModule is an |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
642 * example. |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
643 */ |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
644 PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
645 PyImport_ExecCodeModule(char *name, PyObject *co) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
646 { |
|
7232
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
647 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL); |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
648 } |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
649 |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
650 PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
651 PyImport_ExecCodeModuleEx(char *name, PyObject *co, char *pathname) |
|
7232
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
652 { |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
653 PyObject *modules = PyImport_GetModuleDict(); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
654 PyObject *m, *d, *v; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
655 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
656 m = PyImport_AddModule(name); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
657 if (m == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
658 return NULL; |
|
31320
ca4374662632
Add comment to mollify Tim.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30979
diff
changeset
|
659 /* If the module is being reloaded, we get the old module back |
|
ca4374662632
Add comment to mollify Tim.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30979
diff
changeset
|
660 and re-use its dict to exec the new code. */ |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
661 d = PyModule_GetDict(m); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
662 if (PyDict_GetItemString(d, "__builtins__") == NULL) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
663 if (PyDict_SetItemString(d, "__builtins__", |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
664 PyEval_GetBuiltins()) != 0) |
|
32882
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
665 goto error; |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
666 } |
|
3557
cee4a6d8415e
Remember source filename as <module>.__file__.
Guido van Rossum <guido@python.org>
parents:
3492
diff
changeset
|
667 /* Remember the filename as the __file__ attribute */ |
|
7232
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
668 v = NULL; |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
669 if (pathname != NULL) { |
|
44583
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
670 v = get_sourcefile(pathname); |
|
7232
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
671 if (v == NULL) |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
672 PyErr_Clear(); |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
673 } |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
674 if (v == NULL) { |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
675 v = ((PyCodeObject *)co)->co_filename; |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
676 Py_INCREF(v); |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
677 } |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
678 if (PyDict_SetItemString(d, "__file__", v) != 0) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
679 PyErr_Clear(); /* Not important enough to report */ |
|
7232
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
680 Py_DECREF(v); |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
681 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
682 v = PyEval_EvalCode((PyCodeObject *)co, d, d); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
683 if (v == NULL) |
|
32882
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
684 goto error; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
685 Py_DECREF(v); |
|
5758
bfe9ba74c19e
Fix problem discovered by Greg McFarlane: when an imported module
Guido van Rossum <guido@python.org>
parents:
5511
diff
changeset
|
686 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
687 if ((m = PyDict_GetItemString(modules, name)) == NULL) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
688 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
689 "Loaded module %.200s not found in sys.modules", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
690 name); |
|
5758
bfe9ba74c19e
Fix problem discovered by Greg McFarlane: when an imported module
Guido van Rossum <guido@python.org>
parents:
5511
diff
changeset
|
691 return NULL; |
|
bfe9ba74c19e
Fix problem discovered by Greg McFarlane: when an imported module
Guido van Rossum <guido@python.org>
parents:
5511
diff
changeset
|
692 } |
|
bfe9ba74c19e
Fix problem discovered by Greg McFarlane: when an imported module
Guido van Rossum <guido@python.org>
parents:
5511
diff
changeset
|
693 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
694 Py_INCREF(m); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
695 |
| 86 | 696 return m; |
|
32882
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
697 |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
698 error: |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
699 _RemoveModule(name); |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
700 return NULL; |
| 6 | 701 } |
| 702 | |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
703 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
704 /* Given a pathname for a Python source file, fill a buffer with the |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
705 pathname for the corresponding compiled file. Return the pathname |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
706 for the compiled file, or NULL if there's no space in the buffer. |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
707 Doesn't set an exception. */ |
|
609
0ad5b35e3ad8
Support for dynamic loading added.
Guido van Rossum <guido@python.org>
parents:
510
diff
changeset
|
708 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
709 static char * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
710 make_compiled_pathname(char *pathname, char *buf, size_t buflen) |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
711 { |
|
18992
7fa1f87ca6b2
Derived from SF patch #446899 Permit import of .pyw under Windows, from
Tim Peters <tim.peters@gmail.com>
parents:
18933
diff
changeset
|
712 size_t len = strlen(pathname); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
713 if (len+2 > buflen) |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
714 return NULL; |
|
18992
7fa1f87ca6b2
Derived from SF patch #446899 Permit import of .pyw under Windows, from
Tim Peters <tim.peters@gmail.com>
parents:
18933
diff
changeset
|
715 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
23879
diff
changeset
|
716 #ifdef MS_WINDOWS |
|
18992
7fa1f87ca6b2
Derived from SF patch #446899 Permit import of .pyw under Windows, from
Tim Peters <tim.peters@gmail.com>
parents:
18933
diff
changeset
|
717 /* Treat .pyw as if it were .py. The case of ".pyw" must match |
|
7fa1f87ca6b2
Derived from SF patch #446899 Permit import of .pyw under Windows, from
Tim Peters <tim.peters@gmail.com>
parents:
18933
diff
changeset
|
718 that used in _PyImport_StandardFiletab. */ |
|
7fa1f87ca6b2
Derived from SF patch #446899 Permit import of .pyw under Windows, from
Tim Peters <tim.peters@gmail.com>
parents:
18933
diff
changeset
|
719 if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0) |
|
7fa1f87ca6b2
Derived from SF patch #446899 Permit import of .pyw under Windows, from
Tim Peters <tim.peters@gmail.com>
parents:
18933
diff
changeset
|
720 --len; /* pretend 'w' isn't there */ |
|
7fa1f87ca6b2
Derived from SF patch #446899 Permit import of .pyw under Windows, from
Tim Peters <tim.peters@gmail.com>
parents:
18933
diff
changeset
|
721 #endif |
|
7fa1f87ca6b2
Derived from SF patch #446899 Permit import of .pyw under Windows, from
Tim Peters <tim.peters@gmail.com>
parents:
18933
diff
changeset
|
722 memcpy(buf, pathname, len); |
|
7fa1f87ca6b2
Derived from SF patch #446899 Permit import of .pyw under Windows, from
Tim Peters <tim.peters@gmail.com>
parents:
18933
diff
changeset
|
723 buf[len] = Py_OptimizeFlag ? 'o' : 'c'; |
|
7fa1f87ca6b2
Derived from SF patch #446899 Permit import of .pyw under Windows, from
Tim Peters <tim.peters@gmail.com>
parents:
18933
diff
changeset
|
724 buf[len+1] = '\0'; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
725 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
726 return buf; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
727 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
728 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
729 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
730 /* Given a pathname for a Python source file, its time of last |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
731 modification, and a pathname for a compiled file, check whether the |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
732 compiled file represents the same version of the source. If so, |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
733 return a FILE pointer for the compiled file, positioned just after |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
734 the header; if not, return NULL. |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
735 Doesn't set an exception. */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
736 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
737 static FILE * |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
738 check_compiled_module(char *pathname, time_t mtime, char *cpathname) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
739 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
740 FILE *fp; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
741 long magic; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
742 long pyc_mtime; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
743 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
744 fp = fopen(cpathname, "rb"); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
745 if (fp == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
746 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
747 magic = PyMarshal_ReadLongFromFile(fp); |
| 12543 | 748 if (magic != pyc_magic) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
749 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
750 PySys_WriteStderr("# %s has bad magic\n", cpathname); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
751 fclose(fp); |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
752 return NULL; |
|
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
753 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
754 pyc_mtime = PyMarshal_ReadLongFromFile(fp); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
755 if (pyc_mtime != mtime) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
756 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
757 PySys_WriteStderr("# %s has bad mtime\n", cpathname); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
758 fclose(fp); |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
759 return NULL; |
|
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
760 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
761 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
762 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
763 return fp; |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
764 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
765 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
766 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
767 /* Read a code object from a file and check it for validity */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
768 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
769 static PyCodeObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
770 read_compiled_module(char *cpathname, FILE *fp) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
771 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
772 PyObject *co; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
773 |
|
16311
8c41f3861aad
It's unclear whether PyMarshal_XXX() are part of the public or private API.
Tim Peters <tim.peters@gmail.com>
parents:
16257
diff
changeset
|
774 co = PyMarshal_ReadLastObjectFromFile(fp); |
|
31824
331de8b9d1ed
Marshal clean-up (SF patch #873224)
Armin Rigo <arigo@tunes.org>
parents:
31797
diff
changeset
|
775 if (co == NULL) |
|
331de8b9d1ed
Marshal clean-up (SF patch #873224)
Armin Rigo <arigo@tunes.org>
parents:
31797
diff
changeset
|
776 return NULL; |
|
331de8b9d1ed
Marshal clean-up (SF patch #873224)
Armin Rigo <arigo@tunes.org>
parents:
31797
diff
changeset
|
777 if (!PyCode_Check(co)) { |
|
331de8b9d1ed
Marshal clean-up (SF patch #873224)
Armin Rigo <arigo@tunes.org>
parents:
31797
diff
changeset
|
778 PyErr_Format(PyExc_ImportError, |
|
331de8b9d1ed
Marshal clean-up (SF patch #873224)
Armin Rigo <arigo@tunes.org>
parents:
31797
diff
changeset
|
779 "Non-code object in %.200s", cpathname); |
|
331de8b9d1ed
Marshal clean-up (SF patch #873224)
Armin Rigo <arigo@tunes.org>
parents:
31797
diff
changeset
|
780 Py_DECREF(co); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
781 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
782 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
783 return (PyCodeObject *)co; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
784 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
785 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
786 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
787 /* Load a module from a compiled file, execute it, and return its |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
788 module object WITH INCREMENTED REFERENCE COUNT */ |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
789 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
790 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
791 load_compiled_module(char *name, char *cpathname, FILE *fp) |
| 6 | 792 { |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
793 long magic; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
794 PyCodeObject *co; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
795 PyObject *m; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
796 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
797 magic = PyMarshal_ReadLongFromFile(fp); |
| 12543 | 798 if (magic != pyc_magic) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
799 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
800 "Bad magic number in %.200s", cpathname); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
801 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
802 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
803 (void) PyMarshal_ReadLongFromFile(fp); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
804 co = read_compiled_module(cpathname, fp); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
805 if (co == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
806 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
807 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
808 PySys_WriteStderr("import %s # precompiled from %s\n", |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
809 name, cpathname); |
|
7232
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
810 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
811 Py_DECREF(co); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
812 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
813 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
814 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
815 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
816 /* Parse a source file and return the corresponding code object */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
817 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
818 static PyCodeObject * |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35678
diff
changeset
|
819 parse_source_module(const char *pathname, FILE *fp) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
820 { |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35678
diff
changeset
|
821 PyCodeObject *co = NULL; |
|
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35678
diff
changeset
|
822 mod_ty mod; |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
823 PyArena *arena = PyArena_New(); |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
824 if (arena == NULL) |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
825 return NULL; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
826 |
|
43225
38f3f9ef193d
Convert code from sys.stdin.encoding to UTF-8 in
Martin v. Löwis <martin@v.loewis.de>
parents:
43107
diff
changeset
|
827 mod = PyParser_ASTFromFile(fp, pathname, NULL, |
|
38f3f9ef193d
Convert code from sys.stdin.encoding to UTF-8 in
Martin v. Löwis <martin@v.loewis.de>
parents:
43107
diff
changeset
|
828 Py_file_input, 0, 0, 0, |
|
36065
ea083efdc96c
Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents:
35999
diff
changeset
|
829 NULL, arena); |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35678
diff
changeset
|
830 if (mod) { |
|
36065
ea083efdc96c
Merge from ast-arena. This reduces the code in Python/ast.c by ~300 lines,
Neal Norwitz <nnorwitz@gmail.com>
parents:
35999
diff
changeset
|
831 co = PyAST_Compile(mod, pathname, NULL, arena); |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35678
diff
changeset
|
832 } |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
833 PyArena_Free(arena); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
834 return co; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
835 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
836 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
837 |
|
14708
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
838 /* Helper to open a bytecode file for writing in exclusive mode */ |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
839 |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
840 static FILE * |
|
45471
7dd2c1746267
Merged revisions 60990-61002 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45071
diff
changeset
|
841 open_exclusive(char *filename, mode_t mode) |
|
14708
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
842 { |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
843 #if defined(O_EXCL)&&defined(O_CREAT)&&defined(O_WRONLY)&&defined(O_TRUNC) |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
844 /* Use O_EXCL to avoid a race condition when another process tries to |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
845 write the same file. When that happens, our open() call fails, |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
846 which is just fine (since it's only a cache). |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
847 XXX If the file exists and is writable but the directory is not |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
848 writable, the file will never be written. Oh well. |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
849 */ |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
850 int fd; |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
851 (void) unlink(filename); |
|
14921
3db8b8031a6a
The 2.0b2 change to write .pyc files in exclusive mode (if possible)
Tim Peters <tim.peters@gmail.com>
parents:
14708
diff
changeset
|
852 fd = open(filename, O_EXCL|O_CREAT|O_WRONLY|O_TRUNC |
|
3db8b8031a6a
The 2.0b2 change to write .pyc files in exclusive mode (if possible)
Tim Peters <tim.peters@gmail.com>
parents:
14708
diff
changeset
|
853 #ifdef O_BINARY |
|
3db8b8031a6a
The 2.0b2 change to write .pyc files in exclusive mode (if possible)
Tim Peters <tim.peters@gmail.com>
parents:
14708
diff
changeset
|
854 |O_BINARY /* necessary for Windows */ |
|
3db8b8031a6a
The 2.0b2 change to write .pyc files in exclusive mode (if possible)
Tim Peters <tim.peters@gmail.com>
parents:
14708
diff
changeset
|
855 #endif |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
26461
diff
changeset
|
856 #ifdef __VMS |
|
45471
7dd2c1746267
Merged revisions 60990-61002 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45071
diff
changeset
|
857 , mode, "ctxt=bin", "shr=nil" |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
26461
diff
changeset
|
858 #else |
|
45471
7dd2c1746267
Merged revisions 60990-61002 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45071
diff
changeset
|
859 , mode |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
26461
diff
changeset
|
860 #endif |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
861 ); |
|
14708
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
862 if (fd < 0) |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
863 return NULL; |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
864 return fdopen(fd, "wb"); |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
865 #else |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
866 /* Best we can do -- on Windows this can't happen anyway */ |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
867 return fopen(filename, "wb"); |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
868 #endif |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
869 } |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
870 |
|
89b2aee43e0b
On Unix, use O_EXCL when creating the .pyc/.pyo files, to avoid a race condition
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
871 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
872 /* Write a compiled module to a file, placing the time of last |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
873 modification of its source into the header. |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
874 Errors are ignored, if a write error occurs an attempt is made to |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
875 remove the file. */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
876 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
877 static void |
|
45471
7dd2c1746267
Merged revisions 60990-61002 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45071
diff
changeset
|
878 write_compiled_module(PyCodeObject *co, char *cpathname, struct stat *srcstat) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
879 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
880 FILE *fp; |
|
45471
7dd2c1746267
Merged revisions 60990-61002 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45071
diff
changeset
|
881 time_t mtime = srcstat->st_mtime; |
|
7dd2c1746267
Merged revisions 60990-61002 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45071
diff
changeset
|
882 mode_t mode = srcstat->st_mode; |
|
7dd2c1746267
Merged revisions 60990-61002 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45071
diff
changeset
|
883 |
|
7dd2c1746267
Merged revisions 60990-61002 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45071
diff
changeset
|
884 fp = open_exclusive(cpathname, mode); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
885 if (fp == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
886 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
887 PySys_WriteStderr( |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
888 "# can't create %s\n", cpathname); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
889 return; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
890 } |
|
32422
3df36e2e5ddc
Patch #923098: Share interned strings in marshal.
Martin v. Löwis <martin@v.loewis.de>
parents:
32294
diff
changeset
|
891 PyMarshal_WriteLongToFile(pyc_magic, fp, Py_MARSHAL_VERSION); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
892 /* First write a 0 for mtime */ |
|
32422
3df36e2e5ddc
Patch #923098: Share interned strings in marshal.
Martin v. Löwis <martin@v.loewis.de>
parents:
32294
diff
changeset
|
893 PyMarshal_WriteLongToFile(0L, fp, Py_MARSHAL_VERSION); |
|
3df36e2e5ddc
Patch #923098: Share interned strings in marshal.
Martin v. Löwis <martin@v.loewis.de>
parents:
32294
diff
changeset
|
894 PyMarshal_WriteObjectToFile((PyObject *)co, fp, Py_MARSHAL_VERSION); |
|
31824
331de8b9d1ed
Marshal clean-up (SF patch #873224)
Armin Rigo <arigo@tunes.org>
parents:
31797
diff
changeset
|
895 if (fflush(fp) != 0 || ferror(fp)) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
896 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
897 PySys_WriteStderr("# can't write %s\n", cpathname); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
898 /* Don't keep partial file */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
899 fclose(fp); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
900 (void) unlink(cpathname); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
901 return; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
902 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
903 /* Now write the true mtime */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
904 fseek(fp, 4L, 0); |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
905 assert(mtime < LONG_MAX); |
|
36866
9eb24f92a784
Change int to Py_ssize_t in several places.
Martin v. Löwis <martin@v.loewis.de>
parents:
36712
diff
changeset
|
906 PyMarshal_WriteLongToFile((long)mtime, fp, Py_MARSHAL_VERSION); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
907 fflush(fp); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
908 fclose(fp); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
909 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
910 PySys_WriteStderr("# wrote %s\n", cpathname); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
911 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
912 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
913 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
914 /* Load a source module from a given file and return its module |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
915 object WITH INCREMENTED REFERENCE COUNT. If there's a matching |
|
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
916 byte-compiled file, use that instead. */ |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
917 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
918 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
919 load_source_module(char *name, char *pathname, FILE *fp) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
920 { |
|
45471
7dd2c1746267
Merged revisions 60990-61002 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45071
diff
changeset
|
921 struct stat st; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
922 FILE *fpc; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
923 char buf[MAXPATHLEN+1]; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
924 char *cpathname; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
925 PyCodeObject *co; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
926 PyObject *m; |
|
45471
7dd2c1746267
Merged revisions 60990-61002 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45071
diff
changeset
|
927 |
|
7dd2c1746267
Merged revisions 60990-61002 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45071
diff
changeset
|
928 if (fstat(fileno(fp), &st) != 0) { |
|
35678
f0951fdaed37
Fix SF bug #976608, Unhelpful error message when mtime of a module is -1
Neal Norwitz <nnorwitz@gmail.com>
parents:
35550
diff
changeset
|
929 PyErr_Format(PyExc_RuntimeError, |
|
45471
7dd2c1746267
Merged revisions 60990-61002 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45071
diff
changeset
|
930 "unable to get file status from '%s'", |
|
35678
f0951fdaed37
Fix SF bug #976608, Unhelpful error message when mtime of a module is -1
Neal Norwitz <nnorwitz@gmail.com>
parents:
35550
diff
changeset
|
931 pathname); |
|
13226
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
932 return NULL; |
|
35678
f0951fdaed37
Fix SF bug #976608, Unhelpful error message when mtime of a module is -1
Neal Norwitz <nnorwitz@gmail.com>
parents:
35550
diff
changeset
|
933 } |
|
13226
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
934 #if SIZEOF_TIME_T > 4 |
|
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
935 /* Python's .pyc timestamp handling presumes that the timestamp fits |
|
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
936 in 4 bytes. This will be fine until sometime in the year 2038, |
|
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
937 when a 4-byte signed time_t will overflow. |
|
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
938 */ |
|
45471
7dd2c1746267
Merged revisions 60990-61002 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45071
diff
changeset
|
939 if (st.st_mtime >> 32) { |
|
13226
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
940 PyErr_SetString(PyExc_OverflowError, |
|
16893
f1c8ea92ee85
Suppress a compiler warning under OpenVMS; time_t is unsigned on (at least)
Fred Drake <fdrake@acm.org>
parents:
16881
diff
changeset
|
941 "modification time overflows a 4 byte field"); |
|
13226
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
942 return NULL; |
|
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
943 } |
|
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
944 #endif |
|
21010
4a9a9cc041de
Since the MAGIC number scheme is going to break on January 1st, document
Tim Peters <tim.peters@gmail.com>
parents:
20768
diff
changeset
|
945 cpathname = make_compiled_pathname(pathname, buf, |
| 17502 | 946 (size_t)MAXPATHLEN + 1); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
947 if (cpathname != NULL && |
|
45471
7dd2c1746267
Merged revisions 60990-61002 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45071
diff
changeset
|
948 (fpc = check_compiled_module(pathname, st.st_mtime, cpathname))) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
949 co = read_compiled_module(cpathname, fpc); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
950 fclose(fpc); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
951 if (co == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
952 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
953 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
954 PySys_WriteStderr("import %s # precompiled from %s\n", |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
955 name, cpathname); |
|
9050
f3ebdb2274e4
__file__ used to be always set to the .pyc (or .pyo) file, even if
Guido van Rossum <guido@python.org>
parents:
8934
diff
changeset
|
956 pathname = cpathname; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
957 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
958 else { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
959 co = parse_source_module(pathname, fp); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
960 if (co == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
961 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
962 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
963 PySys_WriteStderr("import %s # from %s\n", |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
964 name, pathname); |
|
44587
fb5a6330f71b
Merged revisions 59822-59841 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44583
diff
changeset
|
965 if (cpathname) { |
|
fb5a6330f71b
Merged revisions 59822-59841 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44583
diff
changeset
|
966 PyObject *ro = PySys_GetObject("dont_write_bytecode"); |
|
fb5a6330f71b
Merged revisions 59822-59841 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44583
diff
changeset
|
967 if (ro == NULL || !PyObject_IsTrue(ro)) |
|
45471
7dd2c1746267
Merged revisions 60990-61002 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45071
diff
changeset
|
968 write_compiled_module(co, cpathname, &st); |
|
44587
fb5a6330f71b
Merged revisions 59822-59841 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44583
diff
changeset
|
969 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
970 } |
|
9050
f3ebdb2274e4
__file__ used to be always set to the .pyc (or .pyo) file, even if
Guido van Rossum <guido@python.org>
parents:
8934
diff
changeset
|
971 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
972 Py_DECREF(co); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
973 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
974 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
975 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
976 |
|
44583
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
977 /* Get source file -> unicode or None |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
978 * Returns the path to the py file if available, else the given path |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
979 */ |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
980 static PyObject * |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
981 get_sourcefile(const char *file) |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
982 { |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
983 char py[MAXPATHLEN + 1]; |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
984 Py_ssize_t len; |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
985 PyObject *u; |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
986 struct stat statbuf; |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
987 |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
988 if (!file || !*file) { |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
989 Py_RETURN_NONE; |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
990 } |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
991 |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
992 len = strlen(file); |
| 44634 | 993 /* match '*.py?' */ |
| 994 if (len > MAXPATHLEN || PyOS_strnicmp(&file[len-4], ".py", 3) != 0) { | |
|
44583
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
995 return PyUnicode_DecodeFSDefault(file); |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
996 } |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
997 |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
998 strncpy(py, file, len-1); |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
999 py[len] = '\0'; |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
1000 if (stat(py, &statbuf) == 0 && |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
1001 S_ISREG(statbuf.st_mode)) { |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
1002 u = PyUnicode_DecodeFSDefault(py); |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
1003 } |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
1004 else { |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
1005 u = PyUnicode_DecodeFSDefault(file); |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
1006 } |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
1007 return u; |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
1008 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1009 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1010 /* Forward */ |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1011 static PyObject *load_module(char *, FILE *, char *, int, PyObject *); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1012 static struct filedescr *find_module(char *, char *, PyObject *, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1013 char *, size_t, FILE **, PyObject **); |
|
44583
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
1014 static struct _frozen * find_frozen(char *); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1015 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1016 /* Load a package and return its module object WITH INCREMENTED |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1017 REFERENCE COUNT */ |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1018 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1019 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
1020 load_package(char *name, char *pathname) |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1021 { |
|
32882
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
1022 PyObject *m, *d; |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
1023 PyObject *file = NULL; |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
1024 PyObject *path = NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1025 int err; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1026 char buf[MAXPATHLEN+1]; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1027 FILE *fp = NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1028 struct filedescr *fdp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1029 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1030 m = PyImport_AddModule(name); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1031 if (m == NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1032 return NULL; |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1033 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
1034 PySys_WriteStderr("import %s # directory %s\n", |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1035 name, pathname); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1036 d = PyModule_GetDict(m); |
|
44583
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
1037 file = get_sourcefile(pathname); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1038 if (file == NULL) |
|
32882
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
1039 goto error; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1040 path = Py_BuildValue("[O]", file); |
|
32882
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
1041 if (path == NULL) |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
1042 goto error; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1043 err = PyDict_SetItemString(d, "__file__", file); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1044 if (err == 0) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1045 err = PyDict_SetItemString(d, "__path__", path); |
|
32882
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
1046 if (err != 0) |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
1047 goto error; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1048 buf[0] = '\0'; |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1049 fdp = find_module(name, "__init__", path, buf, sizeof(buf), &fp, NULL); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1050 if (fdp == NULL) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1051 if (PyErr_ExceptionMatches(PyExc_ImportError)) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1052 PyErr_Clear(); |
|
32294
82fe6832e505
Fix a refcount bug in an obscure code corner.
Thomas Heller <theller@ctypes.org>
parents:
32156
diff
changeset
|
1053 Py_INCREF(m); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1054 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1055 else |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1056 m = NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1057 goto cleanup; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1058 } |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1059 m = load_module(name, fp, buf, fdp->type, NULL); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1060 if (fp != NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1061 fclose(fp); |
|
32882
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
1062 goto cleanup; |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
1063 |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
1064 error: |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
1065 m = NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1066 cleanup: |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1067 Py_XDECREF(path); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1068 Py_XDECREF(file); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1069 return m; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1070 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1071 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1072 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1073 /* Helper to test for built-in module */ |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1074 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1075 static int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
1076 is_builtin(char *name) |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1077 { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1078 int i; |
|
6541
b2dfff06789c
Instead of using _PyImport_Inittab[] directly, use the new "official"
Guido van Rossum <guido@python.org>
parents:
6454
diff
changeset
|
1079 for (i = 0; PyImport_Inittab[i].name != NULL; i++) { |
|
b2dfff06789c
Instead of using _PyImport_Inittab[] directly, use the new "official"
Guido van Rossum <guido@python.org>
parents:
6454
diff
changeset
|
1080 if (strcmp(name, PyImport_Inittab[i].name) == 0) { |
|
b2dfff06789c
Instead of using _PyImport_Inittab[] directly, use the new "official"
Guido van Rossum <guido@python.org>
parents:
6454
diff
changeset
|
1081 if (PyImport_Inittab[i].initfunc == NULL) |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1082 return -1; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1083 else |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1084 return 1; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1085 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1086 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1087 return 0; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1088 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1089 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1090 |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1091 /* Return an importer object for a sys.path/pkg.__path__ item 'p', |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1092 possibly by fetching it from the path_importer_cache dict. If it |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
1093 wasn't yet cached, traverse path_hooks until a hook is found |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1094 that can handle the path item. Return None if no hook could; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1095 this tells our caller it should fall back to the builtin |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1096 import mechanism. Cache the result in path_importer_cache. |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1097 Returns a borrowed reference. */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1098 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1099 static PyObject * |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1100 get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1101 PyObject *p) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1102 { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1103 PyObject *importer; |
|
36866
9eb24f92a784
Change int to Py_ssize_t in several places.
Martin v. Löwis <martin@v.loewis.de>
parents:
36712
diff
changeset
|
1104 Py_ssize_t j, nhooks; |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1105 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1106 /* These conditions are the caller's responsibility: */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1107 assert(PyList_Check(path_hooks)); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1108 assert(PyDict_Check(path_importer_cache)); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1109 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1110 nhooks = PyList_Size(path_hooks); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1111 if (nhooks < 0) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1112 return NULL; /* Shouldn't happen */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1113 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1114 importer = PyDict_GetItem(path_importer_cache, p); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1115 if (importer != NULL) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1116 return importer; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1117 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1118 /* set path_importer_cache[p] to None to avoid recursion */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1119 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1120 return NULL; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1121 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1122 for (j = 0; j < nhooks; j++) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1123 PyObject *hook = PyList_GetItem(path_hooks, j); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1124 if (hook == NULL) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1125 return NULL; |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1126 importer = PyObject_CallFunctionObjArgs(hook, p, NULL); |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1127 if (importer != NULL) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1128 break; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1129 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1130 if (!PyErr_ExceptionMatches(PyExc_ImportError)) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1131 return NULL; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1132 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1133 PyErr_Clear(); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1134 } |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1135 if (importer == NULL) { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1136 importer = PyObject_CallFunctionObjArgs( |
|
43897
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1137 (PyObject *)&PyNullImporter_Type, p, NULL |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1138 ); |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1139 if (importer == NULL) { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1140 if (PyErr_ExceptionMatches(PyExc_ImportError)) { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1141 PyErr_Clear(); |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1142 return Py_None; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1143 } |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1144 } |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1145 } |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1146 if (importer != NULL) { |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1147 int err = PyDict_SetItem(path_importer_cache, p, importer); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1148 Py_DECREF(importer); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1149 if (err != 0) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1150 return NULL; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1151 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1152 return importer; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1153 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1154 |
|
43897
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1155 PyAPI_FUNC(PyObject *) |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1156 PyImport_GetImporter(PyObject *path) { |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1157 PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL; |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1158 |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1159 if ((path_importer_cache = PySys_GetObject("path_importer_cache"))) { |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1160 if ((path_hooks = PySys_GetObject("path_hooks"))) { |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1161 importer = get_path_importer(path_importer_cache, |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1162 path_hooks, path); |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1163 } |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1164 } |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1165 Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */ |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1166 return importer; |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1167 } |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1168 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1169 /* Search the path (default sys.path) for a module. Return the |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1170 corresponding filedescr struct, and (via return arguments) the |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1171 pathname and an open file. Return NULL if the module is not found. */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1172 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1173 #ifdef MS_COREDLL |
|
13663
29da35543833
ANSIfy as many declarations as possible.
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
1174 extern FILE *PyWin_FindRegisteredModule(const char *, struct filedescr **, |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
1175 char *, Py_ssize_t); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1176 #endif |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1177 |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
1178 static int case_ok(char *, Py_ssize_t, Py_ssize_t, char *); |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13266
diff
changeset
|
1179 static int find_init_module(char *); /* Forward */ |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1180 static struct filedescr importhookdescr = {"", "", IMP_HOOK}; |
|
6542
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1181 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1182 static struct filedescr * |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1183 find_module(char *fullname, char *subname, PyObject *path, char *buf, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1184 size_t buflen, FILE **p_fp, PyObject **p_loader) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1185 { |
|
36866
9eb24f92a784
Change int to Py_ssize_t in several places.
Martin v. Löwis <martin@v.loewis.de>
parents:
36712
diff
changeset
|
1186 Py_ssize_t i, npath; |
|
13226
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
1187 size_t len, namelen; |
| 4596 | 1188 struct filedescr *fdp = NULL; |
|
23554
e5242f58a5b6
File modes in filedescr entries are also passed to Python, so we now put "U"
Jack Jansen <jack.jansen@cwi.nl>
parents:
23029
diff
changeset
|
1189 char *filemode; |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1190 FILE *fp = NULL; |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1191 PyObject *path_hooks, *path_importer_cache; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1192 struct stat statbuf; |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1193 static struct filedescr fd_frozen = {"", "", PY_FROZEN}; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1194 static struct filedescr fd_builtin = {"", "", C_BUILTIN}; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1195 static struct filedescr fd_package = {"", "", PKG_DIRECTORY}; |
|
8934
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
1196 char name[MAXPATHLEN+1]; |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1197 #if defined(PYOS_OS2) |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1198 size_t saved_len; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1199 size_t saved_namelen; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1200 char *saved_buf = NULL; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1201 #endif |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1202 if (p_loader != NULL) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1203 *p_loader = NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1204 |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1205 if (strlen(subname) > MAXPATHLEN) { |
|
20527
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1206 PyErr_SetString(PyExc_OverflowError, |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1207 "module name is too long"); |
|
13226
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
1208 return NULL; |
|
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
1209 } |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1210 strcpy(name, subname); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1211 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1212 /* sys.meta_path import hook */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1213 if (p_loader != NULL) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1214 PyObject *meta_path; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1215 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1216 meta_path = PySys_GetObject("meta_path"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1217 if (meta_path == NULL || !PyList_Check(meta_path)) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1218 PyErr_SetString(PyExc_ImportError, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1219 "sys.meta_path must be a list of " |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1220 "import hooks"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1221 return NULL; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1222 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1223 Py_INCREF(meta_path); /* zap guard */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1224 npath = PyList_Size(meta_path); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1225 for (i = 0; i < npath; i++) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1226 PyObject *loader; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1227 PyObject *hook = PyList_GetItem(meta_path, i); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1228 loader = PyObject_CallMethod(hook, "find_module", |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1229 "sO", fullname, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1230 path != NULL ? |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1231 path : Py_None); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1232 if (loader == NULL) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1233 Py_DECREF(meta_path); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1234 return NULL; /* true error */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1235 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1236 if (loader != Py_None) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1237 /* a loader was found */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1238 *p_loader = loader; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1239 Py_DECREF(meta_path); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1240 return &importhookdescr; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1241 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1242 Py_DECREF(loader); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1243 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1244 Py_DECREF(meta_path); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1245 } |
|
8934
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
1246 |
|
42347
5e66bb69c1e3
Fix import of frozen package submodules to use Unicode. Fixes test_frozen.
Guido van Rossum <guido@python.org>
parents:
42334
diff
changeset
|
1247 if (path != NULL && PyUnicode_Check(path)) { |
|
20527
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1248 /* The only type of submodule allowed inside a "frozen" |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1249 package are other frozen modules or packages. */ |
|
42347
5e66bb69c1e3
Fix import of frozen package submodules to use Unicode. Fixes test_frozen.
Guido van Rossum <guido@python.org>
parents:
42334
diff
changeset
|
1250 char *p = PyUnicode_AsString(path); |
|
5e66bb69c1e3
Fix import of frozen package submodules to use Unicode. Fixes test_frozen.
Guido van Rossum <guido@python.org>
parents:
42334
diff
changeset
|
1251 if (strlen(p) + 1 + strlen(name) >= (size_t)buflen) { |
|
8934
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
1252 PyErr_SetString(PyExc_ImportError, |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
1253 "full frozen module name too long"); |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
1254 return NULL; |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
1255 } |
|
42347
5e66bb69c1e3
Fix import of frozen package submodules to use Unicode. Fixes test_frozen.
Guido van Rossum <guido@python.org>
parents:
42334
diff
changeset
|
1256 strcpy(buf, p); |
|
8934
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
1257 strcat(buf, "."); |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
1258 strcat(buf, name); |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
1259 strcpy(name, buf); |
|
20527
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1260 if (find_frozen(name) != NULL) { |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1261 strcpy(buf, name); |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1262 return &fd_frozen; |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1263 } |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1264 PyErr_Format(PyExc_ImportError, |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1265 "No frozen submodule named %.200s", name); |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1266 return NULL; |
|
8934
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
1267 } |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1268 if (path == NULL) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1269 if (is_builtin(name)) { |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1270 strcpy(buf, name); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1271 return &fd_builtin; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1272 } |
|
20249
1acecc908ee8
Remove a couple of unused local variables (bug #445960, compiler warnings
Greg Ward <gward@python.net>
parents:
19596
diff
changeset
|
1273 if ((find_frozen(name)) != NULL) { |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1274 strcpy(buf, name); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1275 return &fd_frozen; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1276 } |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
1277 |
|
4111
90216e907345
PYTHONWIN -> MS_COREDLL
Guido van Rossum <guido@python.org>
parents:
3964
diff
changeset
|
1278 #ifdef MS_COREDLL |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1279 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1280 if (fp != NULL) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1281 *p_fp = fp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1282 return fdp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1283 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1284 #endif |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1285 path = PySys_GetObject("path"); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1286 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1287 if (path == NULL || !PyList_Check(path)) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1288 PyErr_SetString(PyExc_ImportError, |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1289 "sys.path must be a list of directory names"); |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
1290 return NULL; |
|
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
1291 } |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1292 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1293 path_hooks = PySys_GetObject("path_hooks"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1294 if (path_hooks == NULL || !PyList_Check(path_hooks)) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1295 PyErr_SetString(PyExc_ImportError, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1296 "sys.path_hooks must be a list of " |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1297 "import hooks"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1298 return NULL; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1299 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1300 path_importer_cache = PySys_GetObject("path_importer_cache"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1301 if (path_importer_cache == NULL || |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1302 !PyDict_Check(path_importer_cache)) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1303 PyErr_SetString(PyExc_ImportError, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1304 "sys.path_importer_cache must be a dict"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1305 return NULL; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1306 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1307 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1308 npath = PyList_Size(path); |
|
1905
61c3c1a2fdb4
Fix various potential buffer overrun problems.
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
1309 namelen = strlen(name); |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
1310 for (i = 0; i < npath; i++) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1311 PyObject *v = PyList_GetItem(path, i); |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
1312 PyObject *origv = v; |
|
41666
85d51cb8ae5e
More uniform approach to getting (UTF8) bytes out of a string.
Guido van Rossum <guido@python.org>
parents:
41595
diff
changeset
|
1313 const char *base; |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
1314 Py_ssize_t size; |
|
39610
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
1315 if (!v) |
|
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
1316 return NULL; |
|
42898
0020bc784c76
Some changes in preparation of stricter rules about mixing str and bytes.
Guido van Rossum <guido@python.org>
parents:
42862
diff
changeset
|
1317 if (PyUnicode_Check(v)) { |
|
0020bc784c76
Some changes in preparation of stricter rules about mixing str and bytes.
Guido van Rossum <guido@python.org>
parents:
42862
diff
changeset
|
1318 v = _PyUnicode_AsDefaultEncodedString(v, NULL); |
|
0020bc784c76
Some changes in preparation of stricter rules about mixing str and bytes.
Guido van Rossum <guido@python.org>
parents:
42862
diff
changeset
|
1319 if (v == NULL) |
|
0020bc784c76
Some changes in preparation of stricter rules about mixing str and bytes.
Guido van Rossum <guido@python.org>
parents:
42862
diff
changeset
|
1320 return NULL; |
|
0020bc784c76
Some changes in preparation of stricter rules about mixing str and bytes.
Guido van Rossum <guido@python.org>
parents:
42862
diff
changeset
|
1321 } |
|
0020bc784c76
Some changes in preparation of stricter rules about mixing str and bytes.
Guido van Rossum <guido@python.org>
parents:
42862
diff
changeset
|
1322 if (!PyString_Check(v)) |
|
0020bc784c76
Some changes in preparation of stricter rules about mixing str and bytes.
Guido van Rossum <guido@python.org>
parents:
42862
diff
changeset
|
1323 continue; |
|
0020bc784c76
Some changes in preparation of stricter rules about mixing str and bytes.
Guido van Rossum <guido@python.org>
parents:
42862
diff
changeset
|
1324 base = PyString_AS_STRING(v); |
|
0020bc784c76
Some changes in preparation of stricter rules about mixing str and bytes.
Guido van Rossum <guido@python.org>
parents:
42862
diff
changeset
|
1325 size = PyString_GET_SIZE(v); |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
1326 len = size; |
|
23879
08475c87d24f
Apply diff2.txt from SF patch http://www.python.org/sf/566999
Walter Dörwald <walter@livinglogic.de>
parents:
23851
diff
changeset
|
1327 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) { |
|
1905
61c3c1a2fdb4
Fix various potential buffer overrun problems.
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
1328 continue; /* Too long */ |
|
23879
08475c87d24f
Apply diff2.txt from SF patch http://www.python.org/sf/566999
Walter Dörwald <walter@livinglogic.de>
parents:
23851
diff
changeset
|
1329 } |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
1330 strcpy(buf, base); |
|
23879
08475c87d24f
Apply diff2.txt from SF patch http://www.python.org/sf/566999
Walter Dörwald <walter@livinglogic.de>
parents:
23851
diff
changeset
|
1331 if (strlen(buf) != len) { |
|
1905
61c3c1a2fdb4
Fix various potential buffer overrun problems.
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
1332 continue; /* v contains '\0' */ |
|
23879
08475c87d24f
Apply diff2.txt from SF patch http://www.python.org/sf/566999
Walter Dörwald <walter@livinglogic.de>
parents:
23851
diff
changeset
|
1333 } |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1334 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1335 /* sys.path_hooks import hook */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1336 if (p_loader != NULL) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1337 PyObject *importer; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1338 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1339 importer = get_path_importer(path_importer_cache, |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
1340 path_hooks, origv); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1341 if (importer == NULL) { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1342 return NULL; |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1343 } |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1344 /* Note: importer is a borrowed reference */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1345 if (importer != Py_None) { |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1346 PyObject *loader; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1347 loader = PyObject_CallMethod(importer, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1348 "find_module", |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1349 "s", fullname); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1350 if (loader == NULL) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1351 return NULL; /* error */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1352 if (loader != Py_None) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1353 /* a loader was found */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1354 *p_loader = loader; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1355 return &importhookdescr; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1356 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1357 Py_DECREF(loader); |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1358 continue; |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1359 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1360 } |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1361 /* no hook was found, use builtin import */ |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1362 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1363 if (len > 0 && buf[len-1] != SEP |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1364 #ifdef ALTSEP |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1365 && buf[len-1] != ALTSEP |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1366 #endif |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1367 ) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1368 buf[len++] = SEP; |
|
15401
c45c5080c844
Rip out DOS-8x3 support.
Guido van Rossum <guido@python.org>
parents:
14991
diff
changeset
|
1369 strcpy(buf+len, name); |
|
c45c5080c844
Rip out DOS-8x3 support.
Guido van Rossum <guido@python.org>
parents:
14991
diff
changeset
|
1370 len += namelen; |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1371 |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1372 /* Check for package import (buf holds a directory name, |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1373 and there's an __init__ module in that directory */ |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1374 #ifdef HAVE_STAT |
|
23879
08475c87d24f
Apply diff2.txt from SF patch http://www.python.org/sf/566999
Walter Dörwald <walter@livinglogic.de>
parents:
23851
diff
changeset
|
1375 if (stat(buf, &statbuf) == 0 && /* it exists */ |
|
08475c87d24f
Apply diff2.txt from SF patch http://www.python.org/sf/566999
Walter Dörwald <walter@livinglogic.de>
parents:
23851
diff
changeset
|
1376 S_ISDIR(statbuf.st_mode) && /* it's a directory */ |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1377 case_ok(buf, len, namelen, name)) { /* case matches */ |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1378 if (find_init_module(buf)) { /* and has __init__.py */ |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1379 return &fd_package; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1380 } |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1381 else { |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1382 char warnstr[MAXPATHLEN+80]; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1383 sprintf(warnstr, "Not importing directory " |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1384 "'%.*s': missing __init__.py", |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1385 MAXPATHLEN, buf); |
|
42560
0fcc18aba385
PyErr_Warn is deprecated in 2.5 - goes away for 3.0
Skip Montanaro <skip@pobox.com>
parents:
42428
diff
changeset
|
1386 if (PyErr_WarnEx(PyExc_ImportWarning, |
|
0fcc18aba385
PyErr_Warn is deprecated in 2.5 - goes away for 3.0
Skip Montanaro <skip@pobox.com>
parents:
42428
diff
changeset
|
1387 warnstr, 1)) { |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1388 return NULL; |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1389 } |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1390 } |
|
23879
08475c87d24f
Apply diff2.txt from SF patch http://www.python.org/sf/566999
Walter Dörwald <walter@livinglogic.de>
parents:
23851
diff
changeset
|
1391 } |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1392 #endif |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1393 #if defined(PYOS_OS2) |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1394 /* take a snapshot of the module spec for restoration |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1395 * after the 8 character DLL hackery |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1396 */ |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1397 saved_buf = strdup(buf); |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1398 saved_len = len; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1399 saved_namelen = namelen; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1400 #endif /* PYOS_OS2 */ |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1401 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) { |
|
42775
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42622
diff
changeset
|
1402 #if defined(PYOS_OS2) && defined(HAVE_DYNAMIC_LOADING) |
|
23585
0e8370e70888
Cover a few corners in the 'U' mode integration to make imp work.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23554
diff
changeset
|
1403 /* OS/2 limits DLLs to 8 character names (w/o |
|
0e8370e70888
Cover a few corners in the 'U' mode integration to make imp work.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23554
diff
changeset
|
1404 extension) |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1405 * so if the name is longer than that and its a |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1406 * dynamically loaded module we're going to try, |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1407 * truncate the name before trying |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1408 */ |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1409 if (strlen(subname) > 8) { |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1410 /* is this an attempt to load a C extension? */ |
|
23585
0e8370e70888
Cover a few corners in the 'U' mode integration to make imp work.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23554
diff
changeset
|
1411 const struct filedescr *scan; |
|
0e8370e70888
Cover a few corners in the 'U' mode integration to make imp work.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23554
diff
changeset
|
1412 scan = _PyImport_DynLoadFiletab; |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1413 while (scan->suffix != NULL) { |
|
23585
0e8370e70888
Cover a few corners in the 'U' mode integration to make imp work.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23554
diff
changeset
|
1414 if (!strcmp(scan->suffix, fdp->suffix)) |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1415 break; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1416 else |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1417 scan++; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1418 } |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1419 if (scan->suffix != NULL) { |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1420 /* yes, so truncate the name */ |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1421 namelen = 8; |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1422 len -= strlen(subname) - namelen; |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1423 buf[len] = '\0'; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1424 } |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1425 } |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1426 #endif /* PYOS_OS2 */ |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1427 strcpy(buf+len, fdp->suffix); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1428 if (Py_VerboseFlag > 1) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
1429 PySys_WriteStderr("# trying %s\n", buf); |
|
23554
e5242f58a5b6
File modes in filedescr entries are also passed to Python, so we now put "U"
Jack Jansen <jack.jansen@cwi.nl>
parents:
23029
diff
changeset
|
1430 filemode = fdp->mode; |
|
32878
ca1aeb8ab380
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
32422
diff
changeset
|
1431 if (filemode[0] == 'U') |
|
23585
0e8370e70888
Cover a few corners in the 'U' mode integration to make imp work.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23554
diff
changeset
|
1432 filemode = "r" PY_STDIOTEXTMODE; |
|
23554
e5242f58a5b6
File modes in filedescr entries are also passed to Python, so we now put "U"
Jack Jansen <jack.jansen@cwi.nl>
parents:
23029
diff
changeset
|
1433 fp = fopen(buf, filemode); |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1434 if (fp != NULL) { |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1435 if (case_ok(buf, len, namelen, name)) |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1436 break; |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1437 else { /* continue search */ |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1438 fclose(fp); |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1439 fp = NULL; |
|
16423
5c40113409c3
Steve Majewski's patch #103495, MatchFilename() and find_module()
Barry Warsaw <barry@python.org>
parents:
16311
diff
changeset
|
1440 } |
|
5c40113409c3
Steve Majewski's patch #103495, MatchFilename() and find_module()
Barry Warsaw <barry@python.org>
parents:
16311
diff
changeset
|
1441 } |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1442 #if defined(PYOS_OS2) |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1443 /* restore the saved snapshot */ |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1444 strcpy(buf, saved_buf); |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1445 len = saved_len; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1446 namelen = saved_namelen; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1447 #endif |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
1448 } |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1449 #if defined(PYOS_OS2) |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1450 /* don't need/want the module name snapshot anymore */ |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1451 if (saved_buf) |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1452 { |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1453 free(saved_buf); |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1454 saved_buf = NULL; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1455 } |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1456 #endif |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
1457 if (fp != NULL) |
|
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
1458 break; |
|
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
1459 } |
|
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
1460 if (fp == NULL) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1461 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1462 "No module named %.200s", name); |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
1463 return NULL; |
|
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
1464 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1465 *p_fp = fp; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1466 return fdp; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1467 } |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
1468 |
|
33680
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1469 /* Helpers for main.c |
|
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1470 * Find the source file corresponding to a named module |
|
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1471 */ |
|
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1472 struct filedescr * |
|
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1473 _PyImport_FindModule(const char *name, PyObject *path, char *buf, |
|
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1474 size_t buflen, FILE **p_fp, PyObject **p_loader) |
|
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1475 { |
|
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1476 return find_module((char *) name, (char *) name, path, |
|
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1477 buf, buflen, p_fp, p_loader); |
|
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1478 } |
|
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1479 |
|
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1480 PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr * fd) |
|
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1481 { |
|
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1482 return fd->type == PY_SOURCE || fd->type == PY_COMPILED; |
|
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1483 } |
|
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1484 |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
1485 /* case_ok(char* buf, Py_ssize_t len, Py_ssize_t namelen, char* name) |
|
16902
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1486 * The arguments here are tricky, best shown by example: |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1487 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0 |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1488 * ^ ^ ^ ^ |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1489 * |--------------------- buf ---------------------| |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1490 * |------------------- len ------------------| |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1491 * |------ name -------| |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1492 * |----- namelen -----| |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1493 * buf is the full path, but len only counts up to (& exclusive of) the |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1494 * extension. name is the module name, also exclusive of extension. |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1495 * |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1496 * We've already done a successful stat() or fopen() on buf, so know that |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1497 * there's some match, possibly case-insensitive. |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1498 * |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1499 * case_ok() is to return 1 if there's a case-sensitive match for |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1500 * name, else 0. case_ok() is also to return 1 if envar PYTHONCASEOK |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1501 * exists. |
|
16902
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1502 * |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1503 * case_ok() is used to implement case-sensitive import semantics even |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1504 * on platforms with case-insensitive filesystems. It's trivial to implement |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1505 * for case-sensitive filesystems. It's pretty much a cross-platform |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1506 * nightmare for systems with case-insensitive filesystems. |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1507 */ |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1508 |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1509 /* First we may need a pile of platform-specific header files; the sequence |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1510 * of #if's here should match the sequence in the body of case_ok(). |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1511 */ |
|
34961
4a33c58c319c
Patch #1197318: Cygwin case-sensitive import patch
Jason Tishler <jason@tishler.net>
parents:
33680
diff
changeset
|
1512 #if defined(MS_WINDOWS) |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1513 #include <windows.h> |
|
15802
eb1767b068fe
SF Patch #103154 by jlt63: Cygwin Check Import Case Patch.
Guido van Rossum <guido@python.org>
parents:
15401
diff
changeset
|
1514 |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1515 #elif defined(DJGPP) |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1516 #include <dir.h> |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1517 |
|
34961
4a33c58c319c
Patch #1197318: Cygwin case-sensitive import patch
Jason Tishler <jason@tishler.net>
parents:
33680
diff
changeset
|
1518 #elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H) |
|
16880
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1519 #include <sys/types.h> |
|
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1520 #include <dirent.h> |
|
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1521 |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1522 #elif defined(PYOS_OS2) |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1523 #define INCL_DOS |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1524 #define INCL_DOSERRORS |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1525 #define INCL_NOPMAPI |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1526 #include <os2.h> |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1527 #endif |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1528 |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1529 static int |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
1530 case_ok(char *buf, Py_ssize_t len, Py_ssize_t namelen, char *name) |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1531 { |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1532 /* Pick a platform-specific implementation; the sequence of #if's here should |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1533 * match the sequence just above. |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1534 */ |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1535 |
|
34961
4a33c58c319c
Patch #1197318: Cygwin case-sensitive import patch
Jason Tishler <jason@tishler.net>
parents:
33680
diff
changeset
|
1536 /* MS_WINDOWS */ |
|
4a33c58c319c
Patch #1197318: Cygwin case-sensitive import patch
Jason Tishler <jason@tishler.net>
parents:
33680
diff
changeset
|
1537 #if defined(MS_WINDOWS) |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1538 WIN32_FIND_DATA data; |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1539 HANDLE h; |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1540 |
|
18808
a8b1acc7a21f
Add -E command line switch (ignore environment variables like PYTHONHOME
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
18803
diff
changeset
|
1541 if (Py_GETENV("PYTHONCASEOK") != NULL) |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1542 return 1; |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1543 |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1544 h = FindFirstFile(buf, &data); |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1545 if (h == INVALID_HANDLE_VALUE) { |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1546 PyErr_Format(PyExc_NameError, |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1547 "Can't find file for module %.100s\n(filename %.300s)", |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1548 name, buf); |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1549 return 0; |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1550 } |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1551 FindClose(h); |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1552 return strncmp(data.cFileName, name, namelen) == 0; |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1553 |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1554 /* DJGPP */ |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1555 #elif defined(DJGPP) |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1556 struct ffblk ffblk; |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1557 int done; |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1558 |
|
18808
a8b1acc7a21f
Add -E command line switch (ignore environment variables like PYTHONHOME
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
18803
diff
changeset
|
1559 if (Py_GETENV("PYTHONCASEOK") != NULL) |
|
8544
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1560 return 1; |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1561 |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1562 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC); |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1563 if (done) { |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1564 PyErr_Format(PyExc_NameError, |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1565 "Can't find file for module %.100s\n(filename %.300s)", |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1566 name, buf); |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1567 return 0; |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1568 } |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1569 return strncmp(ffblk.ff_name, name, namelen) == 0; |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1570 |
|
34961
4a33c58c319c
Patch #1197318: Cygwin case-sensitive import patch
Jason Tishler <jason@tishler.net>
parents:
33680
diff
changeset
|
1571 /* new-fangled macintosh (macosx) or Cygwin */ |
|
4a33c58c319c
Patch #1197318: Cygwin case-sensitive import patch
Jason Tishler <jason@tishler.net>
parents:
33680
diff
changeset
|
1572 #elif (defined(__MACH__) && defined(__APPLE__) || defined(__CYGWIN__)) && defined(HAVE_DIRENT_H) |
|
16880
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1573 DIR *dirp; |
|
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1574 struct dirent *dp; |
|
16902
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1575 char dirname[MAXPATHLEN + 1]; |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1576 const int dirlen = len - namelen - 1; /* don't want trailing SEP */ |
|
16880
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1577 |
|
18808
a8b1acc7a21f
Add -E command line switch (ignore environment variables like PYTHONHOME
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
18803
diff
changeset
|
1578 if (Py_GETENV("PYTHONCASEOK") != NULL) |
|
16896
fa84f9f41092
More fiddling w/ the new-fangled Mac import code.
Tim Peters <tim.peters@gmail.com>
parents:
16893
diff
changeset
|
1579 return 1; |
|
fa84f9f41092
More fiddling w/ the new-fangled Mac import code.
Tim Peters <tim.peters@gmail.com>
parents:
16893
diff
changeset
|
1580 |
|
16902
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1581 /* Copy the dir component into dirname; substitute "." if empty */ |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1582 if (dirlen <= 0) { |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1583 dirname[0] = '.'; |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1584 dirname[1] = '\0'; |
|
16880
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1585 } |
|
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1586 else { |
|
16902
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1587 assert(dirlen <= MAXPATHLEN); |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1588 memcpy(dirname, buf, dirlen); |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1589 dirname[dirlen] = '\0'; |
|
16880
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1590 } |
|
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1591 /* Open the directory and search the entries for an exact match. */ |
|
16902
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1592 dirp = opendir(dirname); |
|
16880
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1593 if (dirp) { |
|
16932
abc8c6c025ce
Thanks to Steven Majewski, finally putting MacOS X imports to bed for 2.1b1.
Tim Peters <tim.peters@gmail.com>
parents:
16902
diff
changeset
|
1594 char *nameWithExt = buf + len - namelen; |
|
16880
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1595 while ((dp = readdir(dirp)) != NULL) { |
|
16896
fa84f9f41092
More fiddling w/ the new-fangled Mac import code.
Tim Peters <tim.peters@gmail.com>
parents:
16893
diff
changeset
|
1596 const int thislen = |
|
16880
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1597 #ifdef _DIRENT_HAVE_D_NAMELEN |
|
16896
fa84f9f41092
More fiddling w/ the new-fangled Mac import code.
Tim Peters <tim.peters@gmail.com>
parents:
16893
diff
changeset
|
1598 dp->d_namlen; |
|
16880
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1599 #else |
|
16896
fa84f9f41092
More fiddling w/ the new-fangled Mac import code.
Tim Peters <tim.peters@gmail.com>
parents:
16893
diff
changeset
|
1600 strlen(dp->d_name); |
|
16880
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1601 #endif |
|
16902
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1602 if (thislen >= namelen && |
|
16932
abc8c6c025ce
Thanks to Steven Majewski, finally putting MacOS X imports to bed for 2.1b1.
Tim Peters <tim.peters@gmail.com>
parents:
16902
diff
changeset
|
1603 strcmp(dp->d_name, nameWithExt) == 0) { |
|
16880
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1604 (void)closedir(dirp); |
|
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1605 return 1; /* Found */ |
|
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1606 } |
|
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1607 } |
|
16896
fa84f9f41092
More fiddling w/ the new-fangled Mac import code.
Tim Peters <tim.peters@gmail.com>
parents:
16893
diff
changeset
|
1608 (void)closedir(dirp); |
|
16880
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1609 } |
|
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1610 return 0 ; /* Not found */ |
|
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1611 |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1612 /* OS/2 */ |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1613 #elif defined(PYOS_OS2) |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1614 HDIR hdir = 1; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1615 ULONG srchcnt = 1; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1616 FILEFINDBUF3 ffbuf; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1617 APIRET rc; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1618 |
|
44587
fb5a6330f71b
Merged revisions 59822-59841 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44583
diff
changeset
|
1619 if (Py_GETENV("PYTHONCASEOK") != NULL) |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1620 return 1; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1621 |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1622 rc = DosFindFirst(buf, |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1623 &hdir, |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1624 FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM | FILE_DIRECTORY, |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1625 &ffbuf, sizeof(ffbuf), |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1626 &srchcnt, |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1627 FIL_STANDARD); |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1628 if (rc != NO_ERROR) |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1629 return 0; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1630 return strncmp(ffbuf.achName, name, namelen) == 0; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1631 |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1632 /* assuming it's a case-sensitive filesystem, so there's nothing to do! */ |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1633 #else |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1634 return 1; |
|
7305
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1635 |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1636 #endif |
|
7305
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1637 } |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1638 |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1639 |
|
6542
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1640 #ifdef HAVE_STAT |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1641 /* Helper to look for __init__.py or __init__.py[co] in potential package */ |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1642 static int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
1643 find_init_module(char *buf) |
|
6542
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1644 { |
|
18388
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1645 const size_t save_len = strlen(buf); |
|
13226
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
1646 size_t i = save_len; |
|
18388
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1647 char *pname; /* pointer to start of __init__ */ |
|
6542
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1648 struct stat statbuf; |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1649 |
|
18388
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1650 /* For calling case_ok(buf, len, namelen, name): |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1651 * /a/b/c/d/e/f/g/h/i/j/k/some_long_module_name.py\0 |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1652 * ^ ^ ^ ^ |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1653 * |--------------------- buf ---------------------| |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1654 * |------------------- len ------------------| |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1655 * |------ name -------| |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1656 * |----- namelen -----| |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1657 */ |
|
6542
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1658 if (save_len + 13 >= MAXPATHLEN) |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1659 return 0; |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1660 buf[i++] = SEP; |
|
18388
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1661 pname = buf + i; |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1662 strcpy(pname, "__init__.py"); |
|
6542
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1663 if (stat(buf, &statbuf) == 0) { |
|
18388
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1664 if (case_ok(buf, |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1665 save_len + 9, /* len("/__init__") */ |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1666 8, /* len("__init__") */ |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1667 pname)) { |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1668 buf[save_len] = '\0'; |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1669 return 1; |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1670 } |
|
6542
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1671 } |
|
18388
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1672 i += strlen(pname); |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1673 strcpy(buf+i, Py_OptimizeFlag ? "o" : "c"); |
|
6542
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1674 if (stat(buf, &statbuf) == 0) { |
|
18388
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1675 if (case_ok(buf, |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1676 save_len + 9, /* len("/__init__") */ |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1677 8, /* len("__init__") */ |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1678 pname)) { |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1679 buf[save_len] = '\0'; |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1680 return 1; |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1681 } |
|
6542
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1682 } |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1683 buf[save_len] = '\0'; |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1684 return 0; |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1685 } |
|
16947
b25131bc6ec7
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16932
diff
changeset
|
1686 |
|
6542
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1687 #endif /* HAVE_STAT */ |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1688 |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
1689 |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13266
diff
changeset
|
1690 static int init_builtin(char *); /* Forward */ |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1691 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1692 /* Load an external module using the default search path and return |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
1693 its module object WITH INCREMENTED REFERENCE COUNT */ |
| 86 | 1694 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1695 static PyObject * |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1696 load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader) |
| 86 | 1697 { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1698 PyObject *modules; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1699 PyObject *m; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1700 int err; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1701 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1702 /* First check that there's an open file (if we need one) */ |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1703 switch (type) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1704 case PY_SOURCE: |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1705 case PY_COMPILED: |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1706 if (fp == NULL) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1707 PyErr_Format(PyExc_ValueError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1708 "file object required for import (type code %d)", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1709 type); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1710 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1711 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1712 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1713 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1714 switch (type) { |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1715 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1716 case PY_SOURCE: |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1717 m = load_source_module(name, buf, fp); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1718 break; |
| 6 | 1719 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1720 case PY_COMPILED: |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1721 m = load_compiled_module(name, buf, fp); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1722 break; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1723 |
|
11618
528559a0b2f2
Cleanup patches from Greg Stein:
Guido van Rossum <guido@python.org>
parents:
11602
diff
changeset
|
1724 #ifdef HAVE_DYNAMIC_LOADING |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1725 case C_EXTENSION: |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1726 m = _PyImport_LoadDynamicModule(name, buf, fp); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1727 break; |
|
11618
528559a0b2f2
Cleanup patches from Greg Stein:
Guido van Rossum <guido@python.org>
parents:
11602
diff
changeset
|
1728 #endif |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1729 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1730 case PKG_DIRECTORY: |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1731 m = load_package(name, buf); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1732 break; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1733 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1734 case C_BUILTIN: |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1735 case PY_FROZEN: |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1736 if (buf != NULL && buf[0] != '\0') |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1737 name = buf; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1738 if (type == C_BUILTIN) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1739 err = init_builtin(name); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1740 else |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1741 err = PyImport_ImportFrozenModule(name); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1742 if (err < 0) |
|
6299
0054a3840a75
Crrected a flow control error that caused the wrong error message when
Guido van Rossum <guido@python.org>
parents:
6285
diff
changeset
|
1743 return NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1744 if (err == 0) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1745 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1746 "Purported %s module %.200s not found", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1747 type == C_BUILTIN ? |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1748 "builtin" : "frozen", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1749 name); |
|
6299
0054a3840a75
Crrected a flow control error that caused the wrong error message when
Guido van Rossum <guido@python.org>
parents:
6285
diff
changeset
|
1750 return NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1751 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1752 modules = PyImport_GetModuleDict(); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1753 m = PyDict_GetItemString(modules, name); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1754 if (m == NULL) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1755 PyErr_Format( |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1756 PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1757 "%s module %.200s not properly initialized", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1758 type == C_BUILTIN ? |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1759 "builtin" : "frozen", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1760 name); |
|
6299
0054a3840a75
Crrected a flow control error that caused the wrong error message when
Guido van Rossum <guido@python.org>
parents:
6285
diff
changeset
|
1761 return NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1762 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1763 Py_INCREF(m); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1764 break; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1765 |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1766 case IMP_HOOK: { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1767 if (loader == NULL) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1768 PyErr_SetString(PyExc_ImportError, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1769 "import hook without loader"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1770 return NULL; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1771 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1772 m = PyObject_CallMethod(loader, "load_module", "s", name); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1773 break; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1774 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1775 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1776 default: |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1777 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1778 "Don't know how to import %.200s (type code %d)", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1779 name, type); |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
1780 m = NULL; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1781 |
|
141
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1782 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1783 |
| 6 | 1784 return m; |
| 1785 } | |
|
40
f28ac7f621c7
Added reload() functionality.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
1786 |
| 86 | 1787 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1788 /* Initialize a built-in module. |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
1789 Return 1 for success, 0 if the module is not found, and -1 with |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1790 an exception set if the initialization failed. */ |
|
141
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1791 |
|
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1792 static int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
1793 init_builtin(char *name) |
|
141
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1794 { |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1795 struct _inittab *p; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1796 |
|
20249
1acecc908ee8
Remove a couple of unused local variables (bug #445960, compiler warnings
Greg Ward <gward@python.net>
parents:
19596
diff
changeset
|
1797 if (_PyImport_FindExtension(name, name) != NULL) |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1798 return 1; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1799 |
|
6541
b2dfff06789c
Instead of using _PyImport_Inittab[] directly, use the new "official"
Guido van Rossum <guido@python.org>
parents:
6454
diff
changeset
|
1800 for (p = PyImport_Inittab; p->name != NULL; p++) { |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1801 if (strcmp(name, p->name) == 0) { |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1802 if (p->initfunc == NULL) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1803 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1804 "Cannot re-init internal module %.200s", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1805 name); |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
1806 return -1; |
|
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
1807 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1808 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
1809 PySys_WriteStderr("import %s # builtin\n", name); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1810 (*p->initfunc)(); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1811 if (PyErr_Occurred()) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1812 return -1; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1813 if (_PyImport_FixupExtension(name, name) == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1814 return -1; |
|
141
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1815 return 1; |
|
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1816 } |
|
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1817 } |
|
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1818 return 0; |
|
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1819 } |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
1820 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1821 |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1822 /* Frozen modules */ |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1823 |
|
3683
ec39264311ff
struct frozen is now struct _frozen and comes from import.h.
Guido van Rossum <guido@python.org>
parents:
3590
diff
changeset
|
1824 static struct _frozen * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
1825 find_frozen(char *name) |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1826 { |
|
3683
ec39264311ff
struct frozen is now struct _frozen and comes from import.h.
Guido van Rossum <guido@python.org>
parents:
3590
diff
changeset
|
1827 struct _frozen *p; |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1828 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1829 for (p = PyImport_FrozenModules; ; p++) { |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1830 if (p->name == NULL) |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1831 return NULL; |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1832 if (strcmp(p->name, name) == 0) |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1833 break; |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1834 } |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1835 return p; |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1836 } |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1837 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1838 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
1839 get_frozen_object(char *name) |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1840 { |
|
3683
ec39264311ff
struct frozen is now struct _frozen and comes from import.h.
Guido van Rossum <guido@python.org>
parents:
3590
diff
changeset
|
1841 struct _frozen *p = find_frozen(name); |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1842 int size; |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1843 |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1844 if (p == NULL) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1845 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1846 "No such frozen object named %.200s", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1847 name); |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1848 return NULL; |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1849 } |
|
20527
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1850 if (p->code == NULL) { |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1851 PyErr_Format(PyExc_ImportError, |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1852 "Excluded frozen object named %.200s", |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1853 name); |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1854 return NULL; |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1855 } |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1856 size = p->size; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1857 if (size < 0) |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1858 size = -size; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1859 return PyMarshal_ReadObjectFromString((char *)p->code, size); |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1860 } |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1861 |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1862 /* Initialize a frozen module. |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1863 Return 1 for succes, 0 if the module is not found, and -1 with |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1864 an exception set if the initialization failed. |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1865 This function is also used from frozenmain.c */ |
|
2294
6263e2fd9398
init_frozen non-static, frozenmain.c not in Makefile any more
Guido van Rossum <guido@python.org>
parents:
2270
diff
changeset
|
1866 |
|
6263e2fd9398
init_frozen non-static, frozenmain.c not in Makefile any more
Guido van Rossum <guido@python.org>
parents:
2270
diff
changeset
|
1867 int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
1868 PyImport_ImportFrozenModule(char *name) |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
1869 { |
|
3683
ec39264311ff
struct frozen is now struct _frozen and comes from import.h.
Guido van Rossum <guido@python.org>
parents:
3590
diff
changeset
|
1870 struct _frozen *p = find_frozen(name); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1871 PyObject *co; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1872 PyObject *m; |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1873 int ispackage; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1874 int size; |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1875 |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1876 if (p == NULL) |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1877 return 0; |
|
20527
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1878 if (p->code == NULL) { |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1879 PyErr_Format(PyExc_ImportError, |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1880 "Excluded frozen object named %.200s", |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1881 name); |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1882 return -1; |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1883 } |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1884 size = p->size; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1885 ispackage = (size < 0); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1886 if (ispackage) |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1887 size = -size; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1888 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
1889 PySys_WriteStderr("import %s # frozen%s\n", |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1890 name, ispackage ? " package" : ""); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1891 co = PyMarshal_ReadObjectFromString((char *)p->code, size); |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
1892 if (co == NULL) |
|
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
1893 return -1; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1894 if (!PyCode_Check(co)) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1895 PyErr_Format(PyExc_TypeError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1896 "frozen object %.200s is not a code object", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1897 name); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1898 goto err_return; |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
1899 } |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1900 if (ispackage) { |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1901 /* Set __path__ to the package name */ |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1902 PyObject *d, *s; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1903 int err; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1904 m = PyImport_AddModule(name); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1905 if (m == NULL) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1906 goto err_return; |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1907 d = PyModule_GetDict(m); |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
1908 s = PyUnicode_InternFromString(name); |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1909 if (s == NULL) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1910 goto err_return; |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1911 err = PyDict_SetItemString(d, "__path__", s); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1912 Py_DECREF(s); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1913 if (err != 0) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1914 goto err_return; |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1915 } |
|
7232
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
1916 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>"); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1917 if (m == NULL) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1918 goto err_return; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1919 Py_DECREF(co); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1920 Py_DECREF(m); |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
1921 return 1; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1922 err_return: |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1923 Py_DECREF(co); |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1924 return -1; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1925 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1926 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1927 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1928 /* Import a module, either built-in, frozen, or external, and return |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
1929 its module object WITH INCREMENTED REFERENCE COUNT */ |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1930 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1931 PyObject * |
|
35999
9541369b0dca
Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35757
diff
changeset
|
1932 PyImport_ImportModule(const char *name) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1933 { |
|
16534
b59f3a1eb123
This modified version of a patch by Thomas Heller allows __import__
Marc-André Lemburg <mal@egenix.com>
parents:
16433
diff
changeset
|
1934 PyObject *pname; |
|
b59f3a1eb123
This modified version of a patch by Thomas Heller allows __import__
Marc-André Lemburg <mal@egenix.com>
parents:
16433
diff
changeset
|
1935 PyObject *result; |
|
b59f3a1eb123
This modified version of a patch by Thomas Heller allows __import__
Marc-André Lemburg <mal@egenix.com>
parents:
16433
diff
changeset
|
1936 |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
1937 pname = PyUnicode_FromString(name); |
|
28392
5ee29f1364f3
SF patch #708201, unchecked return value in import.c by Jason Harper
Neal Norwitz <nnorwitz@gmail.com>
parents:
27917
diff
changeset
|
1938 if (pname == NULL) |
|
5ee29f1364f3
SF patch #708201, unchecked return value in import.c by Jason Harper
Neal Norwitz <nnorwitz@gmail.com>
parents:
27917
diff
changeset
|
1939 return NULL; |
|
16534
b59f3a1eb123
This modified version of a patch by Thomas Heller allows __import__
Marc-André Lemburg <mal@egenix.com>
parents:
16433
diff
changeset
|
1940 result = PyImport_Import(pname); |
|
b59f3a1eb123
This modified version of a patch by Thomas Heller allows __import__
Marc-André Lemburg <mal@egenix.com>
parents:
16433
diff
changeset
|
1941 Py_DECREF(pname); |
|
b59f3a1eb123
This modified version of a patch by Thomas Heller allows __import__
Marc-André Lemburg <mal@egenix.com>
parents:
16433
diff
changeset
|
1942 return result; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1943 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1944 |
|
44441
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1945 /* Import a module without blocking |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1946 * |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1947 * At first it tries to fetch the module from sys.modules. If the module was |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1948 * never loaded before it loads it with PyImport_ImportModule() unless another |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1949 * thread holds the import lock. In the latter case the function raises an |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1950 * ImportError instead of blocking. |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1951 * |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1952 * Returns the module object with incremented ref count. |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1953 */ |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1954 PyObject * |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1955 PyImport_ImportModuleNoBlock(const char *name) |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1956 { |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1957 PyObject *result; |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1958 PyObject *modules; |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1959 long me; |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1960 |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1961 /* Try to get the module from sys.modules[name] */ |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1962 modules = PyImport_GetModuleDict(); |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1963 if (modules == NULL) |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1964 return NULL; |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1965 |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1966 result = PyDict_GetItemString(modules, name); |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1967 if (result != NULL) { |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1968 Py_INCREF(result); |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1969 return result; |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1970 } |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1971 else { |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1972 PyErr_Clear(); |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1973 } |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1974 |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1975 /* check the import lock |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1976 * me might be -1 but I ignore the error here, the lock function |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1977 * takes care of the problem */ |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1978 me = PyThread_get_thread_ident(); |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1979 if (import_lock_thread == -1 || import_lock_thread == me) { |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1980 /* no thread or me is holding the lock */ |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1981 return PyImport_ImportModule(name); |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1982 } |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1983 else { |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1984 PyErr_Format(PyExc_ImportError, |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1985 "Failed to import %.200s because the import lock" |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1986 "is held by another thread.", |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1987 name); |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1988 return NULL; |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1989 } |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1990 } |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1991 |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1992 /* Forward declarations for helper routines */ |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
1993 static PyObject *get_parent(PyObject *globals, char *buf, |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
1994 Py_ssize_t *p_buflen, int level); |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13266
diff
changeset
|
1995 static PyObject *load_next(PyObject *mod, PyObject *altmod, |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
1996 char **p_name, char *buf, Py_ssize_t *p_buflen); |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13266
diff
changeset
|
1997 static int mark_miss(char *name); |
|
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13266
diff
changeset
|
1998 static int ensure_fromlist(PyObject *mod, PyObject *fromlist, |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
1999 char *buf, Py_ssize_t buflen, int recursive); |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13266
diff
changeset
|
2000 static PyObject * import_submodule(PyObject *mod, char *name, char *fullname); |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2001 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2002 /* The Magnum Opus of dotted-name import :-) */ |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2003 |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
2004 static PyObject * |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2005 import_module_level(char *name, PyObject *globals, PyObject *locals, |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2006 PyObject *fromlist, int level) |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2007 { |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2008 char buf[MAXPATHLEN+1]; |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
2009 Py_ssize_t buflen = 0; |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2010 PyObject *parent, *head, *next, *tail; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2011 |
|
44617
a29adc3b0f26
Merged revisions 59864-59882 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44587
diff
changeset
|
2012 if (strchr(name, '/') != NULL |
|
a29adc3b0f26
Merged revisions 59864-59882 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44587
diff
changeset
|
2013 #ifdef MS_WINDOWS |
|
a29adc3b0f26
Merged revisions 59864-59882 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44587
diff
changeset
|
2014 || strchr(name, '\\') != NULL |
|
a29adc3b0f26
Merged revisions 59864-59882 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44587
diff
changeset
|
2015 #endif |
|
a29adc3b0f26
Merged revisions 59864-59882 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44587
diff
changeset
|
2016 ) { |
|
a29adc3b0f26
Merged revisions 59864-59882 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44587
diff
changeset
|
2017 PyErr_SetString(PyExc_ImportError, |
|
a29adc3b0f26
Merged revisions 59864-59882 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44587
diff
changeset
|
2018 "Import by filename is not supported."); |
|
a29adc3b0f26
Merged revisions 59864-59882 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44587
diff
changeset
|
2019 return NULL; |
|
a29adc3b0f26
Merged revisions 59864-59882 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44587
diff
changeset
|
2020 } |
|
a29adc3b0f26
Merged revisions 59864-59882 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44587
diff
changeset
|
2021 |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2022 parent = get_parent(globals, buf, &buflen, level); |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2023 if (parent == NULL) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2024 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2025 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2026 head = load_next(parent, Py_None, &name, buf, &buflen); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2027 if (head == NULL) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2028 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2029 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2030 tail = head; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2031 Py_INCREF(tail); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2032 while (name) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2033 next = load_next(tail, tail, &name, buf, &buflen); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2034 Py_DECREF(tail); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2035 if (next == NULL) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2036 Py_DECREF(head); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2037 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2038 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2039 tail = next; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2040 } |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
2041 if (tail == Py_None) { |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
2042 /* If tail is Py_None, both get_parent and load_next found |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
2043 an empty module name: someone called __import__("") or |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
2044 doctored faulty bytecode */ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
2045 Py_DECREF(tail); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
2046 Py_DECREF(head); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
2047 PyErr_SetString(PyExc_ValueError, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
2048 "Empty module name"); |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
2049 return NULL; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
2050 } |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2051 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2052 if (fromlist != NULL) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2053 if (fromlist == Py_None || !PyObject_IsTrue(fromlist)) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2054 fromlist = NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2055 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2056 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2057 if (fromlist == NULL) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2058 Py_DECREF(tail); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2059 return head; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2060 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2061 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2062 Py_DECREF(head); |
|
6285
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
2063 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) { |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2064 Py_DECREF(tail); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2065 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2066 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2067 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2068 return tail; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2069 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2070 |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2071 PyObject * |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2072 PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals, |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2073 PyObject *fromlist, int level) |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2074 { |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2075 PyObject *result; |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2076 lock_import(); |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2077 result = import_module_level(name, globals, locals, fromlist, level); |
|
27852
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
2078 if (unlock_import() < 0) { |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
2079 Py_XDECREF(result); |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
2080 PyErr_SetString(PyExc_RuntimeError, |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
2081 "not holding the import lock"); |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
2082 return NULL; |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
2083 } |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
2084 return result; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
2085 } |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
2086 |
|
32156
56a4ec066621
starting to add comments to explain what's here
Fred Drake <fdrake@acm.org>
parents:
31851
diff
changeset
|
2087 /* Return the package that an import is being performed in. If globals comes |
|
56a4ec066621
starting to add comments to explain what's here
Fred Drake <fdrake@acm.org>
parents:
31851
diff
changeset
|
2088 from the module foo.bar.bat (not itself a package), this returns the |
|
56a4ec066621
starting to add comments to explain what's here
Fred Drake <fdrake@acm.org>
parents:
31851
diff
changeset
|
2089 sys.modules entry for foo.bar. If globals is from a package's __init__.py, |
|
38669
19fd6141940d
Partially merge trunk into p3yk. The removal of Mac/Tools is confusing svn
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
2090 the package's entry in sys.modules is returned, as a borrowed reference. |
|
32156
56a4ec066621
starting to add comments to explain what's here
Fred Drake <fdrake@acm.org>
parents:
31851
diff
changeset
|
2091 |
|
56a4ec066621
starting to add comments to explain what's here
Fred Drake <fdrake@acm.org>
parents:
31851
diff
changeset
|
2092 The *name* of the returned package is returned in buf, with the length of |
|
56a4ec066621
starting to add comments to explain what's here
Fred Drake <fdrake@acm.org>
parents:
31851
diff
changeset
|
2093 the name in *p_buflen. |
|
56a4ec066621
starting to add comments to explain what's here
Fred Drake <fdrake@acm.org>
parents:
31851
diff
changeset
|
2094 |
|
56a4ec066621
starting to add comments to explain what's here
Fred Drake <fdrake@acm.org>
parents:
31851
diff
changeset
|
2095 If globals doesn't come from a package or a module in a package, or a |
|
56a4ec066621
starting to add comments to explain what's here
Fred Drake <fdrake@acm.org>
parents:
31851
diff
changeset
|
2096 corresponding entry is not found in sys.modules, Py_None is returned. |
|
56a4ec066621
starting to add comments to explain what's here
Fred Drake <fdrake@acm.org>
parents:
31851
diff
changeset
|
2097 */ |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2098 static PyObject * |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2099 get_parent(PyObject *globals, char *buf, Py_ssize_t *p_buflen, int level) |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2100 { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2101 static PyObject *namestr = NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2102 static PyObject *pathstr = NULL; |
|
44142
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2103 static PyObject *pkgstr = NULL; |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2104 PyObject *pkgname, *modname, *modpath, *modules, *parent; |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2105 |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2106 if (globals == NULL || !PyDict_Check(globals) || !level) |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2107 return Py_None; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2108 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2109 if (namestr == NULL) { |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2110 namestr = PyUnicode_InternFromString("__name__"); |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2111 if (namestr == NULL) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2112 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2113 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2114 if (pathstr == NULL) { |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2115 pathstr = PyUnicode_InternFromString("__path__"); |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2116 if (pathstr == NULL) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2117 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2118 } |
|
44142
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2119 if (pkgstr == NULL) { |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2120 pkgstr = PyUnicode_InternFromString("__package__"); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2121 if (pkgstr == NULL) |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2122 return NULL; |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2123 } |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2124 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2125 *buf = '\0'; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2126 *p_buflen = 0; |
|
44142
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2127 pkgname = PyDict_GetItem(globals, pkgstr); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2128 |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2129 if ((pkgname != NULL) && (pkgname != Py_None)) { |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2130 /* __package__ is set, so use it */ |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2131 Py_ssize_t len; |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2132 if (!PyUnicode_Check(pkgname)) { |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2133 PyErr_SetString(PyExc_ValueError, |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2134 "__package__ set to non-string"); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2135 return NULL; |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2136 } |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2137 len = PyUnicode_GET_SIZE(pkgname); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2138 if (len == 0) { |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2139 if (level > 0) { |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2140 PyErr_SetString(PyExc_ValueError, |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2141 "Attempted relative import in non-package"); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2142 return NULL; |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2143 } |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2144 return Py_None; |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2145 } |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2146 if (len > MAXPATHLEN) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2147 PyErr_SetString(PyExc_ValueError, |
|
44142
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2148 "Package name too long"); |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2149 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2150 } |
|
44142
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2151 strcpy(buf, PyUnicode_AsString(pkgname)); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2152 } else { |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2153 /* __package__ not set, so figure it out and set it */ |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2154 modname = PyDict_GetItem(globals, namestr); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2155 if (modname == NULL || !PyUnicode_Check(modname)) |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2156 return Py_None; |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2157 |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2158 modpath = PyDict_GetItem(globals, pathstr); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2159 if (modpath != NULL) { |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2160 /* __path__ is set, so modname is already the package name */ |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2161 Py_ssize_t len = PyUnicode_GET_SIZE(modname); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2162 int error; |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2163 if (len > MAXPATHLEN) { |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2164 PyErr_SetString(PyExc_ValueError, |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2165 "Module name too long"); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2166 return NULL; |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2167 } |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2168 strcpy(buf, PyUnicode_AsString(modname)); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2169 error = PyDict_SetItem(globals, pkgstr, modname); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2170 if (error) { |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2171 PyErr_SetString(PyExc_ValueError, |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2172 "Could not set __package__"); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2173 return NULL; |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2174 } |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2175 } else { |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2176 /* Normal module, so work out the package name if any */ |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2177 char *start = PyUnicode_AsString(modname); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2178 char *lastdot = strrchr(start, '.'); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2179 size_t len; |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2180 int error; |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2181 if (lastdot == NULL && level > 0) { |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2182 PyErr_SetString(PyExc_ValueError, |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2183 "Attempted relative import in non-package"); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2184 return NULL; |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2185 } |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2186 if (lastdot == NULL) { |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2187 error = PyDict_SetItem(globals, pkgstr, Py_None); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2188 if (error) { |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2189 PyErr_SetString(PyExc_ValueError, |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2190 "Could not set __package__"); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2191 return NULL; |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2192 } |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2193 return Py_None; |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2194 } |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2195 len = lastdot - start; |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2196 if (len >= MAXPATHLEN) { |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2197 PyErr_SetString(PyExc_ValueError, |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2198 "Module name too long"); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2199 return NULL; |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2200 } |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2201 strncpy(buf, start, len); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2202 buf[len] = '\0'; |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2203 pkgname = PyUnicode_FromString(buf); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2204 if (pkgname == NULL) { |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2205 return NULL; |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2206 } |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2207 error = PyDict_SetItem(globals, pkgstr, pkgname); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2208 Py_DECREF(pkgname); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2209 if (error) { |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2210 PyErr_SetString(PyExc_ValueError, |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2211 "Could not set __package__"); |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2212 return NULL; |
|
c8b339cfef1f
Manual merge of PEP 366 implementation from trunk (the automatic merge choked on the PyString->PyUnicode changes)
Nick Coghlan <ncoghlan@gmail.com>
parents:
44134
diff
changeset
|
2213 } |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2214 } |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2215 } |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2216 while (--level > 0) { |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2217 char *dot = strrchr(buf, '.'); |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2218 if (dot == NULL) { |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2219 PyErr_SetString(PyExc_ValueError, |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
2220 "Attempted relative import beyond " |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
2221 "toplevel package"); |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2222 return NULL; |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2223 } |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2224 *dot = '\0'; |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2225 } |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2226 *p_buflen = strlen(buf); |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2227 |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2228 modules = PyImport_GetModuleDict(); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2229 parent = PyDict_GetItemString(modules, buf); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2230 if (parent == NULL) |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2231 PyErr_Format(PyExc_SystemError, |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2232 "Parent module '%.200s' not loaded", buf); |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2233 return parent; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2234 /* We expect, but can't guarantee, if parent != None, that: |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2235 - parent.__name__ == buf |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2236 - parent.__dict__ is globals |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2237 If this is violated... Who cares? */ |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2238 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2239 |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2240 /* altmod is either None or same as mod */ |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2241 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2242 load_next(PyObject *mod, PyObject *altmod, char **p_name, char *buf, |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
2243 Py_ssize_t *p_buflen) |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2244 { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2245 char *name = *p_name; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2246 char *dot = strchr(name, '.'); |
|
13226
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
2247 size_t len; |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2248 char *p; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2249 PyObject *result; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2250 |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2251 if (strlen(name) == 0) { |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
2252 /* completely empty module name should only happen in |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
2253 'from . import' (or '__import__("")')*/ |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2254 Py_INCREF(mod); |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2255 *p_name = NULL; |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2256 return mod; |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2257 } |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2258 |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2259 if (dot == NULL) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2260 *p_name = NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2261 len = strlen(name); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2262 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2263 else { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2264 *p_name = dot+1; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2265 len = dot-name; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2266 } |
|
8012
2b09a5d26368
Reject empty module names -- otherwise __import__("") does something
Guido van Rossum <guido@python.org>
parents:
7987
diff
changeset
|
2267 if (len == 0) { |
|
2b09a5d26368
Reject empty module names -- otherwise __import__("") does something
Guido van Rossum <guido@python.org>
parents:
7987
diff
changeset
|
2268 PyErr_SetString(PyExc_ValueError, |
|
2b09a5d26368
Reject empty module names -- otherwise __import__("") does something
Guido van Rossum <guido@python.org>
parents:
7987
diff
changeset
|
2269 "Empty module name"); |
|
2b09a5d26368
Reject empty module names -- otherwise __import__("") does something
Guido van Rossum <guido@python.org>
parents:
7987
diff
changeset
|
2270 return NULL; |
|
2b09a5d26368
Reject empty module names -- otherwise __import__("") does something
Guido van Rossum <guido@python.org>
parents:
7987
diff
changeset
|
2271 } |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2272 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2273 p = buf + *p_buflen; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2274 if (p != buf) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2275 *p++ = '.'; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2276 if (p+len-buf >= MAXPATHLEN) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2277 PyErr_SetString(PyExc_ValueError, |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2278 "Module name too long"); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2279 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2280 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2281 strncpy(p, name, len); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2282 p[len] = '\0'; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2283 *p_buflen = p+len-buf; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2284 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2285 result = import_submodule(mod, p, buf); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2286 if (result == Py_None && altmod != mod) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2287 Py_DECREF(result); |
|
6252
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2288 /* Here, altmod must be None and mod must not be None */ |
|
6256
ce2092714484
Bugfix: import A.B from inside package was busted by mark_miss optimization.
Guido van Rossum <guido@python.org>
parents:
6252
diff
changeset
|
2289 result = import_submodule(altmod, p, p); |
|
6252
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2290 if (result != NULL && result != Py_None) { |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2291 if (mark_miss(buf) != 0) { |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2292 Py_DECREF(result); |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2293 return NULL; |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2294 } |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2295 strncpy(buf, name, len); |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2296 buf[len] = '\0'; |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2297 *p_buflen = len; |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2298 } |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2299 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2300 if (result == NULL) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2301 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2302 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2303 if (result == Py_None) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2304 Py_DECREF(result); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2305 PyErr_Format(PyExc_ImportError, |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2306 "No module named %.200s", name); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2307 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2308 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2309 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2310 return result; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2311 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2312 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2313 static int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2314 mark_miss(char *name) |
|
6252
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2315 { |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2316 PyObject *modules = PyImport_GetModuleDict(); |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2317 return PyDict_SetItemString(modules, name, Py_None); |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2318 } |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2319 |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2320 static int |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
2321 ensure_fromlist(PyObject *mod, PyObject *fromlist, char *buf, Py_ssize_t buflen, |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2322 int recursive) |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2323 { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2324 int i; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2325 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2326 if (!PyObject_HasAttrString(mod, "__path__")) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2327 return 1; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2328 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2329 for (i = 0; ; i++) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2330 PyObject *item = PySequence_GetItem(fromlist, i); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2331 int hasit; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2332 if (item == NULL) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2333 if (PyErr_ExceptionMatches(PyExc_IndexError)) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2334 PyErr_Clear(); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2335 return 1; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2336 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2337 return 0; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2338 } |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2339 if (!PyUnicode_Check(item)) { |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2340 PyErr_SetString(PyExc_TypeError, |
|
42862
ed1594a16bdb
Use unicode and remove support for some uses of str8.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42859
diff
changeset
|
2341 "Item in ``from list'' not a string"); |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2342 Py_DECREF(item); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2343 return 0; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2344 } |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2345 if (PyUnicode_AS_UNICODE(item)[0] == '*') { |
|
6285
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
2346 PyObject *all; |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2347 Py_DECREF(item); |
|
6285
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
2348 /* See if the package defines __all__ */ |
|
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
2349 if (recursive) |
|
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
2350 continue; /* Avoid endless recursion */ |
|
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
2351 all = PyObject_GetAttrString(mod, "__all__"); |
|
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
2352 if (all == NULL) |
|
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
2353 PyErr_Clear(); |
|
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
2354 else { |
|
31778
c4bae089bfc8
Decref all if ensure_fromlist fails. Fixes #876533.
Martin v. Löwis <martin@v.loewis.de>
parents:
31320
diff
changeset
|
2355 int ret = ensure_fromlist(mod, all, buf, buflen, 1); |
|
c4bae089bfc8
Decref all if ensure_fromlist fails. Fixes #876533.
Martin v. Löwis <martin@v.loewis.de>
parents:
31320
diff
changeset
|
2356 Py_DECREF(all); |
|
c4bae089bfc8
Decref all if ensure_fromlist fails. Fixes #876533.
Martin v. Löwis <martin@v.loewis.de>
parents:
31320
diff
changeset
|
2357 if (!ret) |
|
6285
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
2358 return 0; |
|
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
2359 } |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2360 continue; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2361 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2362 hasit = PyObject_HasAttr(mod, item); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2363 if (!hasit) { |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2364 PyObject *item8; |
|
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2365 char *subname; |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2366 PyObject *submod; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2367 char *p; |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2368 if (!Py_FileSystemDefaultEncoding) { |
|
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2369 item8 = PyUnicode_EncodeASCII(PyUnicode_AsUnicode(item), |
|
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2370 PyUnicode_GetSize(item), |
|
42057
3473a685e5e7
Revert 55876. Use PyUnicode_AsEncodedString instead.
Martin v. Löwis <martin@v.loewis.de>
parents:
42013
diff
changeset
|
2371 NULL); |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2372 } else { |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43762
diff
changeset
|
2373 item8 = PyUnicode_AsEncodedString(item, |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43762
diff
changeset
|
2374 Py_FileSystemDefaultEncoding, NULL); |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2375 } |
|
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2376 if (!item8) { |
|
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2377 PyErr_SetString(PyExc_ValueError, "Cannot encode path item"); |
|
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2378 return 0; |
|
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2379 } |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43762
diff
changeset
|
2380 subname = PyString_AS_STRING(item8); |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2381 if (buflen + strlen(subname) >= MAXPATHLEN) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2382 PyErr_SetString(PyExc_ValueError, |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2383 "Module name too long"); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2384 Py_DECREF(item); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2385 return 0; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2386 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2387 p = buf + buflen; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2388 *p++ = '.'; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2389 strcpy(p, subname); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2390 submod = import_submodule(mod, subname, buf); |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2391 Py_DECREF(item8); |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2392 Py_XDECREF(submod); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2393 if (submod == NULL) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2394 Py_DECREF(item); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2395 return 0; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2396 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2397 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2398 Py_DECREF(item); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2399 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2400 |
|
6375
b68185d94777
Remove unreachable "return 1" at end of ensure_fromlist().
Guido van Rossum <guido@python.org>
parents:
6305
diff
changeset
|
2401 /* NOTREACHED */ |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2402 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2403 |
|
29501
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2404 static int |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2405 add_submodule(PyObject *mod, PyObject *submod, char *fullname, char *subname, |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2406 PyObject *modules) |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2407 { |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2408 if (mod == Py_None) |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2409 return 1; |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2410 /* Irrespective of the success of this load, make a |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2411 reference to it in the parent package module. A copy gets |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2412 saved in the modules dictionary under the full name, so get a |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2413 reference from there, if need be. (The exception is when the |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2414 load failed with a SyntaxError -- then there's no trace in |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2415 sys.modules. In that case, of course, do nothing extra.) */ |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2416 if (submod == NULL) { |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2417 submod = PyDict_GetItemString(modules, fullname); |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2418 if (submod == NULL) |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2419 return 1; |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2420 } |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2421 if (PyModule_Check(mod)) { |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2422 /* We can't use setattr here since it can give a |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2423 * spurious warning if the submodule name shadows a |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2424 * builtin name */ |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2425 PyObject *dict = PyModule_GetDict(mod); |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2426 if (!dict) |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2427 return 0; |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2428 if (PyDict_SetItemString(dict, subname, submod) < 0) |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2429 return 0; |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2430 } |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2431 else { |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2432 if (PyObject_SetAttrString(mod, subname, submod) < 0) |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2433 return 0; |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2434 } |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2435 return 1; |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2436 } |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2437 |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2438 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2439 import_submodule(PyObject *mod, char *subname, char *fullname) |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2440 { |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
2441 PyObject *modules = PyImport_GetModuleDict(); |
|
29501
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2442 PyObject *m = NULL; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2443 |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2444 /* Require: |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2445 if mod == None: subname == fullname |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2446 else: mod.__name__ + "." + subname == fullname |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2447 */ |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2448 |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
2449 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2450 Py_INCREF(m); |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
2451 } |
|
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
2452 else { |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
2453 PyObject *path, *loader = NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2454 char buf[MAXPATHLEN+1]; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2455 struct filedescr *fdp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2456 FILE *fp = NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2457 |
|
8374
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
2458 if (mod == Py_None) |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
2459 path = NULL; |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
2460 else { |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
2461 path = PyObject_GetAttrString(mod, "__path__"); |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
2462 if (path == NULL) { |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
2463 PyErr_Clear(); |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
2464 Py_INCREF(Py_None); |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
2465 return Py_None; |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
2466 } |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
2467 } |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2468 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2469 buf[0] = '\0'; |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
2470 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
2471 &fp, &loader); |
|
8613
e3d3bbbd93f3
Fix two smal memory leaks discovered by Vadim Chugunov.
Guido van Rossum <guido@python.org>
parents:
8544
diff
changeset
|
2472 Py_XDECREF(path); |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2473 if (fdp == NULL) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2474 if (!PyErr_ExceptionMatches(PyExc_ImportError)) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2475 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2476 PyErr_Clear(); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2477 Py_INCREF(Py_None); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2478 return Py_None; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2479 } |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
2480 m = load_module(fullname, fp, buf, fdp->type, loader); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
2481 Py_XDECREF(loader); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2482 if (fp) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2483 fclose(fp); |
|
29501
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2484 if (!add_submodule(mod, m, fullname, subname, modules)) { |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2485 Py_XDECREF(m); |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2486 m = NULL; |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2487 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2488 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2489 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2490 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2491 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2492 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2493 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2494 /* Re-import a module of any kind and return its module object, WITH |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2495 INCREMENTED REFERENCE COUNT */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2496 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2497 PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2498 PyImport_ReloadModule(PyObject *m) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2499 { |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2500 PyInterpreterState *interp = PyThreadState_Get()->interp; |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2501 PyObject *modules_reloading = interp->modules_reloading; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
2502 PyObject *modules = PyImport_GetModuleDict(); |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2503 PyObject *path = NULL, *loader = NULL, *existing_m = NULL; |
|
6250
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2504 char *name, *subname; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2505 char buf[MAXPATHLEN+1]; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2506 struct filedescr *fdp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2507 FILE *fp = NULL; |
|
32882
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
2508 PyObject *newm; |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2509 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2510 if (modules_reloading == NULL) { |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2511 Py_FatalError("PyImport_ReloadModule: " |
|
41969
9d02a4adf574
Merged revisions 55631-55794 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41666
diff
changeset
|
2512 "no modules_reloading dictionary!"); |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2513 return NULL; |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2514 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2515 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2516 if (m == NULL || !PyModule_Check(m)) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2517 PyErr_SetString(PyExc_TypeError, |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2518 "reload() argument must be module"); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2519 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2520 } |
|
42859
036598de4660
Fix a couple of warnings
Neal Norwitz <nnorwitz@gmail.com>
parents:
42775
diff
changeset
|
2521 name = (char*)PyModule_GetName(m); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2522 if (name == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2523 return NULL; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
2524 if (m != PyDict_GetItemString(modules, name)) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2525 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2526 "reload(): module %.200s not in sys.modules", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2527 name); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2528 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2529 } |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2530 existing_m = PyDict_GetItemString(modules_reloading, name); |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2531 if (existing_m != NULL) { |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2532 /* Due to a recursive reload, this module is already |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2533 being reloaded. */ |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2534 Py_INCREF(existing_m); |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2535 return existing_m; |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2536 } |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2537 if (PyDict_SetItemString(modules_reloading, name, m) < 0) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2538 return NULL; |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2539 |
|
6250
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2540 subname = strrchr(name, '.'); |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2541 if (subname == NULL) |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2542 subname = name; |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2543 else { |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2544 PyObject *parentname, *parent; |
|
43762
de3b63f8b17b
Applied patch #1379 with a minor tweak.
Christian Heimes <christian@cheimes.de>
parents:
43712
diff
changeset
|
2545 parentname = PyUnicode_FromStringAndSize(name, (subname-name)); |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2546 if (parentname == NULL) { |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2547 imp_modules_reloading_clear(); |
|
6250
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2548 return NULL; |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2549 } |
|
6250
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2550 parent = PyDict_GetItem(modules, parentname); |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2551 if (parent == NULL) { |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2552 PyErr_Format(PyExc_ImportError, |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2553 "reload(): parent %.200s not in sys.modules", |
|
43762
de3b63f8b17b
Applied patch #1379 with a minor tweak.
Christian Heimes <christian@cheimes.de>
parents:
43712
diff
changeset
|
2554 PyUnicode_AsString(parentname)); |
|
35542
81259009ba2c
Patch #1290454: Fix reload() error message when parent module is not in
Georg Brandl <georg@python.org>
parents:
35008
diff
changeset
|
2555 Py_DECREF(parentname); |
|
41969
9d02a4adf574
Merged revisions 55631-55794 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41666
diff
changeset
|
2556 imp_modules_reloading_clear(); |
|
6250
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2557 return NULL; |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2558 } |
|
35542
81259009ba2c
Patch #1290454: Fix reload() error message when parent module is not in
Georg Brandl <georg@python.org>
parents:
35008
diff
changeset
|
2559 Py_DECREF(parentname); |
|
6250
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2560 subname++; |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2561 path = PyObject_GetAttrString(parent, "__path__"); |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2562 if (path == NULL) |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2563 PyErr_Clear(); |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2564 } |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2565 buf[0] = '\0'; |
|
33542
d74ddcff0724
Fix for SF bug #1029475 : reload() doesn't work with PEP 302 loaders.
Phillip J. Eby <pje@telecommunity.com>
parents:
33539
diff
changeset
|
2566 fdp = find_module(name, subname, path, buf, MAXPATHLEN+1, &fp, &loader); |
|
6250
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2567 Py_XDECREF(path); |
|
33542
d74ddcff0724
Fix for SF bug #1029475 : reload() doesn't work with PEP 302 loaders.
Phillip J. Eby <pje@telecommunity.com>
parents:
33539
diff
changeset
|
2568 |
|
d74ddcff0724
Fix for SF bug #1029475 : reload() doesn't work with PEP 302 loaders.
Phillip J. Eby <pje@telecommunity.com>
parents:
33539
diff
changeset
|
2569 if (fdp == NULL) { |
|
d74ddcff0724
Fix for SF bug #1029475 : reload() doesn't work with PEP 302 loaders.
Phillip J. Eby <pje@telecommunity.com>
parents:
33539
diff
changeset
|
2570 Py_XDECREF(loader); |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2571 imp_modules_reloading_clear(); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2572 return NULL; |
|
33542
d74ddcff0724
Fix for SF bug #1029475 : reload() doesn't work with PEP 302 loaders.
Phillip J. Eby <pje@telecommunity.com>
parents:
33539
diff
changeset
|
2573 } |
|
d74ddcff0724
Fix for SF bug #1029475 : reload() doesn't work with PEP 302 loaders.
Phillip J. Eby <pje@telecommunity.com>
parents:
33539
diff
changeset
|
2574 |
|
d74ddcff0724
Fix for SF bug #1029475 : reload() doesn't work with PEP 302 loaders.
Phillip J. Eby <pje@telecommunity.com>
parents:
33539
diff
changeset
|
2575 newm = load_module(name, fp, buf, fdp->type, loader); |
|
d74ddcff0724
Fix for SF bug #1029475 : reload() doesn't work with PEP 302 loaders.
Phillip J. Eby <pje@telecommunity.com>
parents:
33539
diff
changeset
|
2576 Py_XDECREF(loader); |
|
d74ddcff0724
Fix for SF bug #1029475 : reload() doesn't work with PEP 302 loaders.
Phillip J. Eby <pje@telecommunity.com>
parents:
33539
diff
changeset
|
2577 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2578 if (fp) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2579 fclose(fp); |
|
32882
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
2580 if (newm == NULL) { |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
2581 /* load_module probably removed name from modules because of |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
2582 * the error. Put back the original module object. We're |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
2583 * going to return NULL in this case regardless of whether |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
2584 * replacing name succeeds, so the return value is ignored. |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
2585 */ |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
2586 PyDict_SetItemString(modules, name, m); |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
2587 } |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2588 imp_modules_reloading_clear(); |
|
32882
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
2589 return newm; |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
2590 } |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2591 |
|
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2592 |
|
6028
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2593 /* Higher-level import emulator which emulates the "import" statement |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2594 more accurately -- it invokes the __import__() function from the |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2595 builtins of the current globals. This means that the import is |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2596 done using whatever import hooks are installed in the current |
|
9680
8b61e1273b4b
Improve comment for PyImport_Import() as suggested by Bill Tutt.
Guido van Rossum <guido@python.org>
parents:
9679
diff
changeset
|
2597 environment, e.g. by "rexec". |
|
8b61e1273b4b
Improve comment for PyImport_Import() as suggested by Bill Tutt.
Guido van Rossum <guido@python.org>
parents:
9679
diff
changeset
|
2598 A dummy list ["__doc__"] is passed as the 4th argument so that |
|
42862
ed1594a16bdb
Use unicode and remove support for some uses of str8.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42859
diff
changeset
|
2599 e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache")) |
|
9680
8b61e1273b4b
Improve comment for PyImport_Import() as suggested by Bill Tutt.
Guido van Rossum <guido@python.org>
parents:
9679
diff
changeset
|
2600 will return <module "gencache"> instead of <module "win32com">. */ |
|
6028
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2601 |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2602 PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2603 PyImport_Import(PyObject *module_name) |
|
6028
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2604 { |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2605 static PyObject *silly_list = NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2606 static PyObject *builtins_str = NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2607 static PyObject *import_str = NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2608 PyObject *globals = NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2609 PyObject *import = NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2610 PyObject *builtins = NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2611 PyObject *r = NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2612 |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2613 /* Initialize constant string objects */ |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2614 if (silly_list == NULL) { |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2615 import_str = PyUnicode_InternFromString("__import__"); |
|
6028
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2616 if (import_str == NULL) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2617 return NULL; |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2618 builtins_str = PyUnicode_InternFromString("__builtins__"); |
|
6028
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2619 if (builtins_str == NULL) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2620 return NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2621 silly_list = Py_BuildValue("[s]", "__doc__"); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2622 if (silly_list == NULL) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2623 return NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2624 } |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2625 |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2626 /* Get the builtins from current globals */ |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2627 globals = PyEval_GetGlobals(); |
|
16712
6341f8d909ac
The code in PyImport_Import() tried to save itself a bit of work and
Guido van Rossum <guido@python.org>
parents:
16534
diff
changeset
|
2628 if (globals != NULL) { |
| 9431 | 2629 Py_INCREF(globals); |
|
6028
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2630 builtins = PyObject_GetItem(globals, builtins_str); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2631 if (builtins == NULL) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2632 goto err; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2633 } |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2634 else { |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2635 /* No globals -- use standard builtins, and fake globals */ |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2636 PyErr_Clear(); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2637 |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
2638 builtins = PyImport_ImportModuleLevel("builtins", |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2639 NULL, NULL, NULL, 0); |
|
16712
6341f8d909ac
The code in PyImport_Import() tried to save itself a bit of work and
Guido van Rossum <guido@python.org>
parents:
16534
diff
changeset
|
2640 if (builtins == NULL) |
|
6341f8d909ac
The code in PyImport_Import() tried to save itself a bit of work and
Guido van Rossum <guido@python.org>
parents:
16534
diff
changeset
|
2641 return NULL; |
|
6028
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2642 globals = Py_BuildValue("{OO}", builtins_str, builtins); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2643 if (globals == NULL) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2644 goto err; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2645 } |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2646 |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2647 /* Get the __import__ function from the builtins */ |
|
18933
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
18808
diff
changeset
|
2648 if (PyDict_Check(builtins)) { |
|
16986
c5a417e8d84c
Add some spaces around the "=" in assignments.
Fred Drake <fdrake@acm.org>
parents:
16947
diff
changeset
|
2649 import = PyObject_GetItem(builtins, import_str); |
|
18933
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
18808
diff
changeset
|
2650 if (import == NULL) |
|
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
18808
diff
changeset
|
2651 PyErr_SetObject(PyExc_KeyError, import_str); |
|
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
18808
diff
changeset
|
2652 } |
|
6028
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2653 else |
|
16986
c5a417e8d84c
Add some spaces around the "=" in assignments.
Fred Drake <fdrake@acm.org>
parents:
16947
diff
changeset
|
2654 import = PyObject_GetAttr(builtins, import_str); |
|
6028
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2655 if (import == NULL) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2656 goto err; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2657 |
|
44441
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
2658 /* Call the __import__ function with the proper argument list |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
2659 * Always use absolute import here. */ |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
2660 r = PyObject_CallFunction(import, "OOOOi", module_name, globals, |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
2661 globals, silly_list, 0, NULL); |
|
6028
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2662 |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2663 err: |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2664 Py_XDECREF(globals); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2665 Py_XDECREF(builtins); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2666 Py_XDECREF(import); |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
2667 |
|
6028
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2668 return r; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2669 } |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2670 |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2671 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2672 /* Module 'imp' provides Python access to the primitives used for |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2673 importing modules. |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2674 */ |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2675 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2676 static PyObject * |
|
27917
c346d095791d
Remove PyArg_ParseTuple() for methods which take no args,
Neal Norwitz <nnorwitz@gmail.com>
parents:
27853
diff
changeset
|
2677 imp_get_magic(PyObject *self, PyObject *noargs) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2678 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2679 char buf[4]; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2680 |
| 12543 | 2681 buf[0] = (char) ((pyc_magic >> 0) & 0xff); |
| 2682 buf[1] = (char) ((pyc_magic >> 8) & 0xff); | |
| 2683 buf[2] = (char) ((pyc_magic >> 16) & 0xff); | |
| 2684 buf[3] = (char) ((pyc_magic >> 24) & 0xff); | |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2685 |
|
42428
81ade0144247
SF patch# 1766592 by Paul Colomiets.
Guido van Rossum <guido@python.org>
parents:
42347
diff
changeset
|
2686 return PyBytes_FromStringAndSize(buf, 4); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2687 } |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2688 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2689 static PyObject * |
|
27917
c346d095791d
Remove PyArg_ParseTuple() for methods which take no args,
Neal Norwitz <nnorwitz@gmail.com>
parents:
27853
diff
changeset
|
2690 imp_get_suffixes(PyObject *self, PyObject *noargs) |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2691 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2692 PyObject *list; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2693 struct filedescr *fdp; |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2694 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2695 list = PyList_New(0); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2696 if (list == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2697 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2698 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2699 PyObject *item = Py_BuildValue("ssi", |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2700 fdp->suffix, fdp->mode, fdp->type); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2701 if (item == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2702 Py_DECREF(list); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2703 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2704 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2705 if (PyList_Append(list, item) < 0) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2706 Py_DECREF(list); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2707 Py_DECREF(item); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2708 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2709 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2710 Py_DECREF(item); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2711 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2712 return list; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2713 } |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2714 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2715 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2716 call_find_module(char *name, PyObject *path) |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2717 { |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13266
diff
changeset
|
2718 extern int fclose(FILE *); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2719 PyObject *fob, *ret; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2720 struct filedescr *fdp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2721 char pathname[MAXPATHLEN+1]; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2722 FILE *fp = NULL; |
|
43632
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2723 int fd = -1; |
|
43608
f0bcc11ca965
Fix a memory leak caused by PyTokenizer_FindEncoding() returning a char * that
Brett Cannon <bcannon@gmail.com>
parents:
43605
diff
changeset
|
2724 char *found_encoding = NULL; |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
2725 char *encoding = NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2726 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2727 pathname[0] = '\0'; |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2728 if (path == Py_None) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2729 path = NULL; |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
2730 fdp = find_module(NULL, name, path, pathname, MAXPATHLEN+1, &fp, NULL); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2731 if (fdp == NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2732 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2733 if (fp != NULL) { |
|
43632
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2734 fd = fileno(fp); |
|
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2735 if (fd != -1) |
|
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2736 fd = dup(fd); |
|
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2737 fclose(fp); |
|
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2738 fp = NULL; |
|
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2739 } |
|
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2740 if (fd != -1) { |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
2741 if (strchr(fdp->mode, 'b') == NULL) { |
|
43608
f0bcc11ca965
Fix a memory leak caused by PyTokenizer_FindEncoding() returning a char * that
Brett Cannon <bcannon@gmail.com>
parents:
43605
diff
changeset
|
2742 /* PyTokenizer_FindEncoding() returns PyMem_MALLOC'ed |
|
f0bcc11ca965
Fix a memory leak caused by PyTokenizer_FindEncoding() returning a char * that
Brett Cannon <bcannon@gmail.com>
parents:
43605
diff
changeset
|
2743 memory. */ |
|
43632
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2744 found_encoding = PyTokenizer_FindEncoding(fd); |
|
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2745 lseek(fd, 0, 0); /* Reset position */ |
|
43608
f0bcc11ca965
Fix a memory leak caused by PyTokenizer_FindEncoding() returning a char * that
Brett Cannon <bcannon@gmail.com>
parents:
43605
diff
changeset
|
2746 encoding = (found_encoding != NULL) ? found_encoding : |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
2747 (char*)PyUnicode_GetDefaultEncoding(); |
|
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
2748 } |
|
43632
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2749 fob = PyFile_FromFd(fd, pathname, fdp->mode, -1, |
|
44134
e08b12c3b913
Add an errors parameter to open() and TextIOWrapper() to specify error handling.
Guido van Rossum <guido@python.org>
parents:
44099
diff
changeset
|
2750 (char*)encoding, NULL, NULL, 1); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2751 if (fob == NULL) { |
|
43632
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2752 close(fd); |
|
43608
f0bcc11ca965
Fix a memory leak caused by PyTokenizer_FindEncoding() returning a char * that
Brett Cannon <bcannon@gmail.com>
parents:
43605
diff
changeset
|
2753 PyMem_FREE(found_encoding); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2754 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2755 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2756 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2757 else { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2758 fob = Py_None; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2759 Py_INCREF(fob); |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
2760 } |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2761 ret = Py_BuildValue("Os(ssi)", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2762 fob, pathname, fdp->suffix, fdp->mode, fdp->type); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2763 Py_DECREF(fob); |
|
43608
f0bcc11ca965
Fix a memory leak caused by PyTokenizer_FindEncoding() returning a char * that
Brett Cannon <bcannon@gmail.com>
parents:
43605
diff
changeset
|
2764 PyMem_FREE(found_encoding); |
|
f0bcc11ca965
Fix a memory leak caused by PyTokenizer_FindEncoding() returning a char * that
Brett Cannon <bcannon@gmail.com>
parents:
43605
diff
changeset
|
2765 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2766 return ret; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2767 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2768 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2769 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2770 imp_find_module(PyObject *self, PyObject *args) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2771 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2772 char *name; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2773 PyObject *path = NULL; |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11618
diff
changeset
|
2774 if (!PyArg_ParseTuple(args, "s|O:find_module", &name, &path)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2775 return NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2776 return call_find_module(name, path); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2777 } |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2778 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2779 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2780 imp_init_builtin(PyObject *self, PyObject *args) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2781 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2782 char *name; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2783 int ret; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2784 PyObject *m; |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11618
diff
changeset
|
2785 if (!PyArg_ParseTuple(args, "s:init_builtin", &name)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2786 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2787 ret = init_builtin(name); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2788 if (ret < 0) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2789 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2790 if (ret == 0) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2791 Py_INCREF(Py_None); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2792 return Py_None; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2793 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2794 m = PyImport_AddModule(name); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2795 Py_XINCREF(m); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2796 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2797 } |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2798 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2799 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2800 imp_init_frozen(PyObject *self, PyObject *args) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2801 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2802 char *name; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2803 int ret; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2804 PyObject *m; |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11618
diff
changeset
|
2805 if (!PyArg_ParseTuple(args, "s:init_frozen", &name)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2806 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2807 ret = PyImport_ImportFrozenModule(name); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2808 if (ret < 0) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2809 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2810 if (ret == 0) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2811 Py_INCREF(Py_None); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2812 return Py_None; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2813 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2814 m = PyImport_AddModule(name); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2815 Py_XINCREF(m); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2816 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2817 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2818 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2819 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2820 imp_get_frozen_object(PyObject *self, PyObject *args) |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
2821 { |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
2822 char *name; |
| 3139 | 2823 |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11618
diff
changeset
|
2824 if (!PyArg_ParseTuple(args, "s:get_frozen_object", &name)) |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
2825 return NULL; |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
2826 return get_frozen_object(name); |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
2827 } |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
2828 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2829 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2830 imp_is_builtin(PyObject *self, PyObject *args) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2831 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2832 char *name; |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11618
diff
changeset
|
2833 if (!PyArg_ParseTuple(args, "s:is_builtin", &name)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2834 return NULL; |
|
44099
f324631462a2
Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
2835 return PyLong_FromLong(is_builtin(name)); |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2836 } |
|
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2837 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2838 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2839 imp_is_frozen(PyObject *self, PyObject *args) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2840 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2841 char *name; |
|
8544
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
2842 struct _frozen *p; |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11618
diff
changeset
|
2843 if (!PyArg_ParseTuple(args, "s:is_frozen", &name)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2844 return NULL; |
|
8544
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
2845 p = find_frozen(name); |
|
22866
a561ff1b4ffa
Return bools from functions named is_<whatever>().
Guido van Rossum <guido@python.org>
parents:
22705
diff
changeset
|
2846 return PyBool_FromLong((long) (p == NULL ? 0 : p->size)); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2847 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2848 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2849 static FILE * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2850 get_file(char *pathname, PyObject *fob, char *mode) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2851 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2852 FILE *fp; |
|
42071
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2853 if (mode[0] == 'U') |
|
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2854 mode = "r" PY_STDIOTEXTMODE; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2855 if (fob == NULL) { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2856 fp = fopen(pathname, mode); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2857 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2858 else { |
|
42071
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2859 int fd = PyObject_AsFileDescriptor(fob); |
|
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2860 if (fd == -1) |
|
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2861 return NULL; |
|
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2862 /* XXX This will leak a FILE struct. Fix this!!!! |
|
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2863 (But it doesn't leak a file descrioptor!) */ |
|
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2864 fp = fdopen(fd, mode); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2865 } |
|
42071
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2866 if (fp == NULL) |
|
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2867 PyErr_SetFromErrno(PyExc_IOError); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2868 return fp; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2869 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2870 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2871 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2872 imp_load_compiled(PyObject *self, PyObject *args) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2873 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2874 char *name; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2875 char *pathname; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2876 PyObject *fob = NULL; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2877 PyObject *m; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2878 FILE *fp; |
|
42071
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2879 if (!PyArg_ParseTuple(args, "ss|O:load_compiled", |
|
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2880 &name, &pathname, &fob)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2881 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2882 fp = get_file(pathname, fob, "rb"); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2883 if (fp == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2884 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2885 m = load_compiled_module(name, pathname, fp); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2886 if (fob == NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2887 fclose(fp); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2888 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2889 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2890 |
|
11618
528559a0b2f2
Cleanup patches from Greg Stein:
Guido van Rossum <guido@python.org>
parents:
11602
diff
changeset
|
2891 #ifdef HAVE_DYNAMIC_LOADING |
|
528559a0b2f2
Cleanup patches from Greg Stein:
Guido van Rossum <guido@python.org>
parents:
11602
diff
changeset
|
2892 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2893 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2894 imp_load_dynamic(PyObject *self, PyObject *args) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2895 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2896 char *name; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2897 char *pathname; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2898 PyObject *fob = NULL; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2899 PyObject *m; |
|
2812
fb3daf9b2456
new MAGIC; some changes to default files for imp.load_... functions
Guido van Rossum <guido@python.org>
parents:
2749
diff
changeset
|
2900 FILE *fp = NULL; |
|
42071
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2901 if (!PyArg_ParseTuple(args, "ss|O:load_dynamic", |
|
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2902 &name, &pathname, &fob)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2903 return NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2904 if (fob) { |
|
2812
fb3daf9b2456
new MAGIC; some changes to default files for imp.load_... functions
Guido van Rossum <guido@python.org>
parents:
2749
diff
changeset
|
2905 fp = get_file(pathname, fob, "r"); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2906 if (fp == NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2907 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2908 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2909 m = _PyImport_LoadDynamicModule(name, pathname, fp); |
|
2812
fb3daf9b2456
new MAGIC; some changes to default files for imp.load_... functions
Guido van Rossum <guido@python.org>
parents:
2749
diff
changeset
|
2910 return m; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2911 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2912 |
|
11618
528559a0b2f2
Cleanup patches from Greg Stein:
Guido van Rossum <guido@python.org>
parents:
11602
diff
changeset
|
2913 #endif /* HAVE_DYNAMIC_LOADING */ |
|
528559a0b2f2
Cleanup patches from Greg Stein:
Guido van Rossum <guido@python.org>
parents:
11602
diff
changeset
|
2914 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2915 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2916 imp_load_source(PyObject *self, PyObject *args) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2917 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2918 char *name; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2919 char *pathname; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2920 PyObject *fob = NULL; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2921 PyObject *m; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2922 FILE *fp; |
|
42071
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2923 if (!PyArg_ParseTuple(args, "ss|O:load_source", |
|
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2924 &name, &pathname, &fob)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2925 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2926 fp = get_file(pathname, fob, "r"); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2927 if (fp == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2928 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2929 m = load_source_module(name, pathname, fp); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2930 if (fob == NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2931 fclose(fp); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2932 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2933 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2934 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2935 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2936 imp_load_module(PyObject *self, PyObject *args) |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2937 { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2938 char *name; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2939 PyObject *fob; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2940 char *pathname; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2941 char *suffix; /* Unused */ |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2942 char *mode; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2943 int type; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2944 FILE *fp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2945 |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11618
diff
changeset
|
2946 if (!PyArg_ParseTuple(args, "sOs(ssi):load_module", |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2947 &name, &fob, &pathname, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2948 &suffix, &mode, &type)) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2949 return NULL; |
|
23586
fba57e40f547
imp_load_module(): correct and comment the sense of the test for '+'
Guido van Rossum <guido@python.org>
parents:
23585
diff
changeset
|
2950 if (*mode) { |
|
fba57e40f547
imp_load_module(): correct and comment the sense of the test for '+'
Guido van Rossum <guido@python.org>
parents:
23585
diff
changeset
|
2951 /* Mode must start with 'r' or 'U' and must not contain '+'. |
|
fba57e40f547
imp_load_module(): correct and comment the sense of the test for '+'
Guido van Rossum <guido@python.org>
parents:
23585
diff
changeset
|
2952 Implicit in this test is the assumption that the mode |
|
fba57e40f547
imp_load_module(): correct and comment the sense of the test for '+'
Guido van Rossum <guido@python.org>
parents:
23585
diff
changeset
|
2953 may contain other modifiers like 'b' or 't'. */ |
|
fba57e40f547
imp_load_module(): correct and comment the sense of the test for '+'
Guido van Rossum <guido@python.org>
parents:
23585
diff
changeset
|
2954 |
|
fba57e40f547
imp_load_module(): correct and comment the sense of the test for '+'
Guido van Rossum <guido@python.org>
parents:
23585
diff
changeset
|
2955 if (!(*mode == 'r' || *mode == 'U') || strchr(mode, '+')) { |
|
23585
0e8370e70888
Cover a few corners in the 'U' mode integration to make imp work.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23554
diff
changeset
|
2956 PyErr_Format(PyExc_ValueError, |
|
0e8370e70888
Cover a few corners in the 'U' mode integration to make imp work.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23554
diff
changeset
|
2957 "invalid file open mode %.200s", mode); |
|
0e8370e70888
Cover a few corners in the 'U' mode integration to make imp work.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
23554
diff
changeset
|
2958 return NULL; |
|
23586
fba57e40f547
imp_load_module(): correct and comment the sense of the test for '+'
Guido van Rossum <guido@python.org>
parents:
23585
diff
changeset
|
2959 } |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2960 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2961 if (fob == Py_None) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2962 fp = NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2963 else { |
|
42071
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2964 fp = get_file(NULL, fob, mode); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2965 if (fp == NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2966 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2967 } |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
2968 return load_module(name, fp, pathname, type, NULL); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2969 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2970 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2971 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2972 imp_load_package(PyObject *self, PyObject *args) |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2973 { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2974 char *name; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2975 char *pathname; |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11618
diff
changeset
|
2976 if (!PyArg_ParseTuple(args, "ss:load_package", &name, &pathname)) |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2977 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2978 return load_package(name, pathname); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2979 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2980 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2981 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2982 imp_new_module(PyObject *self, PyObject *args) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2983 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2984 char *name; |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11618
diff
changeset
|
2985 if (!PyArg_ParseTuple(args, "s:new_module", &name)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2986 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2987 return PyModule_New(name); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2988 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2989 |
|
44567
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
2990 static PyObject * |
|
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
2991 imp_reload(PyObject *self, PyObject *v) |
|
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
2992 { |
|
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
2993 return PyImport_ReloadModule(v); |
|
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
2994 } |
|
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
2995 |
|
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
2996 PyDoc_STRVAR(doc_reload, |
|
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
2997 "reload(module) -> module\n\ |
|
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
2998 \n\ |
|
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
2999 Reload the module. The module must have been successfully imported before."); |
|
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
3000 |
|
6305
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
3001 /* Doc strings */ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
3002 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3003 PyDoc_STRVAR(doc_imp, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3004 "This module provides the components needed to build your own\n\ |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3005 __import__ function. Undocumented functions are obsolete."); |
|
6305
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
3006 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3007 PyDoc_STRVAR(doc_find_module, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3008 "find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\ |
|
6305
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
3009 Search for a module. If path is omitted or None, search for a\n\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
3010 built-in, frozen or special module and continue search in sys.path.\n\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
3011 The module name cannot contain '.'; to search for a submodule of a\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3012 package, pass the submodule name and the package's __path__."); |
|
6305
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
3013 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3014 PyDoc_STRVAR(doc_load_module, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3015 "load_module(name, file, filename, (suffix, mode, type)) -> module\n\ |
|
6305
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
3016 Load a module, given information returned by find_module().\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3017 The module name must include the full package name, if any."); |
|
6305
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
3018 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3019 PyDoc_STRVAR(doc_get_magic, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3020 "get_magic() -> string\n\ |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3021 Return the magic number for .pyc or .pyo files."); |
|
6305
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
3022 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3023 PyDoc_STRVAR(doc_get_suffixes, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3024 "get_suffixes() -> [(suffix, mode, type), ...]\n\ |
|
6305
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
3025 Return a list of (suffix, mode, type) tuples describing the files\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3026 that find_module() looks for."); |
|
6305
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
3027 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3028 PyDoc_STRVAR(doc_new_module, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3029 "new_module(name) -> module\n\ |
|
6305
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
3030 Create a new module. Do not enter it in sys.modules.\n\ |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3031 The module name must include the full package name, if any."); |
|
6305
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
3032 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3033 PyDoc_STRVAR(doc_lock_held, |
|
32879
d3d609d657fd
lock_held() docs: Use True/False instead of 1/0. The LaTeX docs were
Tim Peters <tim.peters@gmail.com>
parents:
32878
diff
changeset
|
3034 "lock_held() -> boolean\n\ |
|
d3d609d657fd
lock_held() docs: Use True/False instead of 1/0. The LaTeX docs were
Tim Peters <tim.peters@gmail.com>
parents:
32878
diff
changeset
|
3035 Return True if the import lock is currently held, else False.\n\ |
|
d3d609d657fd
lock_held() docs: Use True/False instead of 1/0. The LaTeX docs were
Tim Peters <tim.peters@gmail.com>
parents:
32878
diff
changeset
|
3036 On platforms without threads, return False."); |
|
19596
1be18ef869a4
Add a new function imp.lock_held(), and use it to skip test_threaded_import
Tim Peters <tim.peters@gmail.com>
parents:
19238
diff
changeset
|
3037 |
|
27852
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
3038 PyDoc_STRVAR(doc_acquire_lock, |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
3039 "acquire_lock() -> None\n\ |
|
27853
5620b0786271
Cleanup from patch #683257:
Neal Norwitz <nnorwitz@gmail.com>
parents:
27852
diff
changeset
|
3040 Acquires the interpreter's import lock for the current thread.\n\ |
|
5620b0786271
Cleanup from patch #683257:
Neal Norwitz <nnorwitz@gmail.com>
parents:
27852
diff
changeset
|
3041 This lock should be used by import hooks to ensure thread-safety\n\ |
|
5620b0786271
Cleanup from patch #683257:
Neal Norwitz <nnorwitz@gmail.com>
parents:
27852
diff
changeset
|
3042 when importing modules.\n\ |
|
27852
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
3043 On platforms without threads, this function does nothing."); |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
3044 |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
3045 PyDoc_STRVAR(doc_release_lock, |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
3046 "release_lock() -> None\n\ |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
3047 Release the interpreter's import lock.\n\ |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
3048 On platforms without threads, this function does nothing."); |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
3049 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
3050 static PyMethodDef imp_methods[] = { |
|
27917
c346d095791d
Remove PyArg_ParseTuple() for methods which take no args,
Neal Norwitz <nnorwitz@gmail.com>
parents:
27853
diff
changeset
|
3051 {"find_module", imp_find_module, METH_VARARGS, doc_find_module}, |
|
c346d095791d
Remove PyArg_ParseTuple() for methods which take no args,
Neal Norwitz <nnorwitz@gmail.com>
parents:
27853
diff
changeset
|
3052 {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic}, |
|
c346d095791d
Remove PyArg_ParseTuple() for methods which take no args,
Neal Norwitz <nnorwitz@gmail.com>
parents:
27853
diff
changeset
|
3053 {"get_suffixes", imp_get_suffixes, METH_NOARGS, doc_get_suffixes}, |
|
c346d095791d
Remove PyArg_ParseTuple() for methods which take no args,
Neal Norwitz <nnorwitz@gmail.com>
parents:
27853
diff
changeset
|
3054 {"load_module", imp_load_module, METH_VARARGS, doc_load_module}, |
|
c346d095791d
Remove PyArg_ParseTuple() for methods which take no args,
Neal Norwitz <nnorwitz@gmail.com>
parents:
27853
diff
changeset
|
3055 {"new_module", imp_new_module, METH_VARARGS, doc_new_module}, |
|
c346d095791d
Remove PyArg_ParseTuple() for methods which take no args,
Neal Norwitz <nnorwitz@gmail.com>
parents:
27853
diff
changeset
|
3056 {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held}, |
|
c346d095791d
Remove PyArg_ParseTuple() for methods which take no args,
Neal Norwitz <nnorwitz@gmail.com>
parents:
27853
diff
changeset
|
3057 {"acquire_lock", imp_acquire_lock, METH_NOARGS, doc_acquire_lock}, |
|
c346d095791d
Remove PyArg_ParseTuple() for methods which take no args,
Neal Norwitz <nnorwitz@gmail.com>
parents:
27853
diff
changeset
|
3058 {"release_lock", imp_release_lock, METH_NOARGS, doc_release_lock}, |
|
44567
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
3059 {"reload", imp_reload, METH_O, doc_reload}, |
|
6305
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
3060 /* The rest are obsolete */ |
|
22705
8703d2052339
Use symbolic METH_VARARGS instead of 1 for ml_flags
Neal Norwitz <nnorwitz@gmail.com>
parents:
22651
diff
changeset
|
3061 {"get_frozen_object", imp_get_frozen_object, METH_VARARGS}, |
|
8703d2052339
Use symbolic METH_VARARGS instead of 1 for ml_flags
Neal Norwitz <nnorwitz@gmail.com>
parents:
22651
diff
changeset
|
3062 {"init_builtin", imp_init_builtin, METH_VARARGS}, |
|
8703d2052339
Use symbolic METH_VARARGS instead of 1 for ml_flags
Neal Norwitz <nnorwitz@gmail.com>
parents:
22651
diff
changeset
|
3063 {"init_frozen", imp_init_frozen, METH_VARARGS}, |
|
8703d2052339
Use symbolic METH_VARARGS instead of 1 for ml_flags
Neal Norwitz <nnorwitz@gmail.com>
parents:
22651
diff
changeset
|
3064 {"is_builtin", imp_is_builtin, METH_VARARGS}, |
|
8703d2052339
Use symbolic METH_VARARGS instead of 1 for ml_flags
Neal Norwitz <nnorwitz@gmail.com>
parents:
22651
diff
changeset
|
3065 {"is_frozen", imp_is_frozen, METH_VARARGS}, |
|
8703d2052339
Use symbolic METH_VARARGS instead of 1 for ml_flags
Neal Norwitz <nnorwitz@gmail.com>
parents:
22651
diff
changeset
|
3066 {"load_compiled", imp_load_compiled, METH_VARARGS}, |
|
11618
528559a0b2f2
Cleanup patches from Greg Stein:
Guido van Rossum <guido@python.org>
parents:
11602
diff
changeset
|
3067 #ifdef HAVE_DYNAMIC_LOADING |
|
22705
8703d2052339
Use symbolic METH_VARARGS instead of 1 for ml_flags
Neal Norwitz <nnorwitz@gmail.com>
parents:
22651
diff
changeset
|
3068 {"load_dynamic", imp_load_dynamic, METH_VARARGS}, |
|
11618
528559a0b2f2
Cleanup patches from Greg Stein:
Guido van Rossum <guido@python.org>
parents:
11602
diff
changeset
|
3069 #endif |
|
22705
8703d2052339
Use symbolic METH_VARARGS instead of 1 for ml_flags
Neal Norwitz <nnorwitz@gmail.com>
parents:
22651
diff
changeset
|
3070 {"load_package", imp_load_package, METH_VARARGS}, |
|
8703d2052339
Use symbolic METH_VARARGS instead of 1 for ml_flags
Neal Norwitz <nnorwitz@gmail.com>
parents:
22651
diff
changeset
|
3071 {"load_source", imp_load_source, METH_VARARGS}, |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
3072 {NULL, NULL} /* sentinel */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
3073 }; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
3074 |
|
8822
bd47ee068b83
Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
8613
diff
changeset
|
3075 static int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
3076 setint(PyObject *d, char *name, int value) |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3077 { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3078 PyObject *v; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3079 int err; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3080 |
|
44099
f324631462a2
Cleanup: Replaced most PyInt_ aliases with PyLong_ and disabled the aliases in intobject.h
Christian Heimes <christian@cheimes.de>
parents:
44098
diff
changeset
|
3081 v = PyLong_FromLong((long)value); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3082 err = PyDict_SetItemString(d, name, v); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3083 Py_XDECREF(v); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3084 return err; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3085 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3086 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3087 typedef struct { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3088 PyObject_HEAD |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3089 } NullImporter; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3090 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3091 static int |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3092 NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3093 { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3094 char *path; |
|
43789
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3095 Py_ssize_t pathlen; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3096 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3097 if (!_PyArg_NoKeywords("NullImporter()", kwds)) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3098 return -1; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3099 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3100 if (!PyArg_ParseTuple(args, "s:NullImporter", |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3101 &path)) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3102 return -1; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3103 |
|
43789
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3104 pathlen = strlen(path); |
|
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3105 if (pathlen == 0) { |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3106 PyErr_SetString(PyExc_ImportError, "empty pathname"); |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3107 return -1; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3108 } else { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3109 struct stat statbuf; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3110 int rv; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3111 |
|
43790
dba2491cf717
Cosmetic changes to Christian's patch r58903.
Guido van Rossum <guido@python.org>
parents:
43789
diff
changeset
|
3112 rv = stat(path, &statbuf); |
|
43789
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3113 #ifdef MS_WINDOWS |
|
43790
dba2491cf717
Cosmetic changes to Christian's patch r58903.
Guido van Rossum <guido@python.org>
parents:
43789
diff
changeset
|
3114 /* MS Windows stat() chokes on paths like C:\path\. Try to |
|
dba2491cf717
Cosmetic changes to Christian's patch r58903.
Guido van Rossum <guido@python.org>
parents:
43789
diff
changeset
|
3115 * recover *one* time by stripping off a trailing slash or |
|
dba2491cf717
Cosmetic changes to Christian's patch r58903.
Guido van Rossum <guido@python.org>
parents:
43789
diff
changeset
|
3116 * backslash. http://bugs.python.org/issue1293 |
|
43789
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3117 */ |
|
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3118 if (rv != 0 && pathlen <= MAXPATHLEN && |
|
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3119 (path[pathlen-1] == '/' || path[pathlen-1] == '\\')) { |
|
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3120 char mangled[MAXPATHLEN+1]; |
|
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3121 |
|
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3122 strcpy(mangled, path); |
|
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3123 mangled[pathlen-1] = '\0'; |
|
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3124 rv = stat(mangled, &statbuf); |
|
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3125 } |
|
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3126 #endif |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3127 if (rv == 0) { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3128 /* it exists */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3129 if (S_ISDIR(statbuf.st_mode)) { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3130 /* it's a directory */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3131 PyErr_SetString(PyExc_ImportError, |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3132 "existing directory"); |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3133 return -1; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3134 } |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3135 } |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3136 } |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3137 return 0; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3138 } |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3139 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3140 static PyObject * |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3141 NullImporter_find_module(NullImporter *self, PyObject *args) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3142 { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3143 Py_RETURN_NONE; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3144 } |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3145 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3146 static PyMethodDef NullImporter_methods[] = { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3147 {"find_module", (PyCFunction)NullImporter_find_module, METH_VARARGS, |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3148 "Always return None" |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3149 }, |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3150 {NULL} /* Sentinel */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3151 }; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3152 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3153 |
|
43897
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
3154 PyTypeObject PyNullImporter_Type = { |
|
42334
e70cdce0e8b2
Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
42071
diff
changeset
|
3155 PyVarObject_HEAD_INIT(NULL, 0) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3156 "imp.NullImporter", /*tp_name*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3157 sizeof(NullImporter), /*tp_basicsize*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3158 0, /*tp_itemsize*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3159 0, /*tp_dealloc*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3160 0, /*tp_print*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3161 0, /*tp_getattr*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3162 0, /*tp_setattr*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3163 0, /*tp_compare*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3164 0, /*tp_repr*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3165 0, /*tp_as_number*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3166 0, /*tp_as_sequence*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3167 0, /*tp_as_mapping*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3168 0, /*tp_hash */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3169 0, /*tp_call*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3170 0, /*tp_str*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3171 0, /*tp_getattro*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3172 0, /*tp_setattro*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3173 0, /*tp_as_buffer*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3174 Py_TPFLAGS_DEFAULT, /*tp_flags*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3175 "Null importer object", /* tp_doc */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3176 0, /* tp_traverse */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3177 0, /* tp_clear */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3178 0, /* tp_richcompare */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3179 0, /* tp_weaklistoffset */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3180 0, /* tp_iter */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3181 0, /* tp_iternext */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3182 NullImporter_methods, /* tp_methods */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3183 0, /* tp_members */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3184 0, /* tp_getset */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3185 0, /* tp_base */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3186 0, /* tp_dict */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3187 0, /* tp_descr_get */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3188 0, /* tp_descr_set */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3189 0, /* tp_dictoffset */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3190 (initproc)NullImporter_init, /* tp_init */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3191 0, /* tp_alloc */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3192 PyType_GenericNew /* tp_new */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3193 }; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3194 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3195 |
|
30311
f003e48f562d
Bug #794140: cygwin builds do not embed
Jason Tishler <jason@tishler.net>
parents:
29812
diff
changeset
|
3196 PyMODINIT_FUNC |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
3197 initimp(void) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
3198 { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3199 PyObject *m, *d; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
3200 |
|
43897
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
3201 if (PyType_Ready(&PyNullImporter_Type) < 0) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3202 goto failure; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3203 |
|
6305
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
3204 m = Py_InitModule4("imp", imp_methods, doc_imp, |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
3205 NULL, PYTHON_API_VERSION); |
|
36324
1af7f719ed28
Check return result from Py_InitModule*(). This API can fail.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36065
diff
changeset
|
3206 if (m == NULL) |
|
1af7f719ed28
Check return result from Py_InitModule*(). This API can fail.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36065
diff
changeset
|
3207 goto failure; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
3208 d = PyModule_GetDict(m); |
|
39610
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
3209 if (d == NULL) |
|
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
3210 goto failure; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
3211 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3212 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3213 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3214 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3215 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3216 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3217 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3218 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3219 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure; |
|
8845
b933f584a26d
Added handling for Mac code resource modules (Jack Jansen).
Guido van Rossum <guido@python.org>
parents:
8822
diff
changeset
|
3220 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure; |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
3221 if (setint(d, "IMP_HOOK", IMP_HOOK) < 0) goto failure; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
3222 |
|
43897
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
3223 Py_INCREF(&PyNullImporter_Type); |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
3224 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3225 failure: |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3226 ; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
3227 } |
|
8330
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3228 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3229 |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12543
diff
changeset
|
3230 /* API for embedding applications that want to add their own entries |
|
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12543
diff
changeset
|
3231 to the table of built-in modules. This should normally be called |
|
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12543
diff
changeset
|
3232 *before* Py_Initialize(). When the table resize fails, -1 is |
|
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12543
diff
changeset
|
3233 returned and the existing table is unchanged. |
|
8330
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3234 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3235 After a similar function by Just van Rossum. */ |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3236 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3237 int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
3238 PyImport_ExtendInittab(struct _inittab *newtab) |
|
8330
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3239 { |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3240 static struct _inittab *our_copy = NULL; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3241 struct _inittab *p; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3242 int i, n; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3243 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3244 /* Count the number of entries in both tables */ |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3245 for (n = 0; newtab[n].name != NULL; n++) |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3246 ; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3247 if (n == 0) |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3248 return 0; /* Nothing to do */ |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3249 for (i = 0; PyImport_Inittab[i].name != NULL; i++) |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3250 ; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3251 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3252 /* Allocate new memory for the combined table */ |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12543
diff
changeset
|
3253 p = our_copy; |
|
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12543
diff
changeset
|
3254 PyMem_RESIZE(p, struct _inittab, i+n+1); |
|
8330
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3255 if (p == NULL) |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3256 return -1; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3257 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3258 /* Copy the tables into the new memory */ |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3259 if (our_copy != PyImport_Inittab) |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3260 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab)); |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3261 PyImport_Inittab = our_copy = p; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3262 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab)); |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3263 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3264 return 0; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3265 } |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3266 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3267 /* Shorthand to add a single entry given a name and a function */ |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3268 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3269 int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
3270 PyImport_AppendInittab(char *name, void (*initfunc)(void)) |
|
8330
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3271 { |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3272 struct _inittab newtab[2]; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3273 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3274 memset(newtab, '\0', sizeof newtab); |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3275 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3276 newtab[0].name = name; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3277 newtab[0].initfunc = initfunc; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3278 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3279 return PyImport_ExtendInittab(newtab); |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3280 } |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
3281 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
3282 #ifdef __cplusplus |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
3283 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
3284 #endif |
