Mercurial > cpython-lru_cache-weakref
annotate Python/import.c @ 45026:ebfbaa1051e2
Merged revisions 60364-60378 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r60364 | neal.norwitz | 2008-01-27 19:09:48 +0100 (Sun, 27 Jan 2008) | 4 lines
Update the comment and remove the close. If we close we can't flush anymore.
We might still need to close after the for loop if flushing 6! times still
doesn't cause the signal/exception.
........
r60365 | georg.brandl | 2008-01-27 19:14:43 +0100 (Sun, 27 Jan 2008) | 2 lines
Remove effectless expression statement.
........
r60367 | neal.norwitz | 2008-01-27 19:19:04 +0100 (Sun, 27 Jan 2008) | 1 line
Try to handle socket.errors properly in is_unavailable
........
r60370 | christian.heimes | 2008-01-27 20:01:45 +0100 (Sun, 27 Jan 2008) | 1 line
Change isbasestring function as discussed on the cvs list a while ago
........
r60372 | neal.norwitz | 2008-01-27 21:03:13 +0100 (Sun, 27 Jan 2008) | 3 lines
socket.error doesn't have a headers attribute like ProtocolError.
Handle that situation where we catch socket.errors.
........
r60375 | georg.brandl | 2008-01-27 21:25:12 +0100 (Sun, 27 Jan 2008) | 2 lines
Add refcounting extension to build config.
........
r60377 | jeffrey.yasskin | 2008-01-28 00:08:46 +0100 (Mon, 28 Jan 2008) | 6 lines
Moved Rational._binary_float_to_ratio() to float.as_integer_ratio() because
it's useful outside of rational numbers.
This is my first C code that had to do anything significant. Please be more
careful when looking over it.
........
r60378 | christian.heimes | 2008-01-28 00:34:59 +0100 (Mon, 28 Jan 2008) | 1 line
Added clear cache methods to clear the internal type lookup cache for ref leak test runs.
........
| author | Christian Heimes <christian@cheimes.de> |
|---|---|
| date | Sun, 27 Jan 2008 23:50:43 +0000 |
| parents | 06f9f51ab8c0 |
| children | f380d991390e |
| 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 |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
25 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
|
26 /* 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
|
27 |
|
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
|
28 /* 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
|
29 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
|
30 |
|
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
|
31 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
|
32 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
|
33 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
|
34 |
|
36988
49c6eb688906
Checkpoint. 218 tests are okay; 53 are failing. Done so far:
Guido van Rossum <guido@python.org>
parents:
36926
diff
changeset
|
35 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
|
36 -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
|
37 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
|
38 |
|
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
|
39 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
|
40 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
|
41 10. |
|
25085
5fe4d93df429
Because MWH changed the bytecode again, moved the magic number *back*
Guido van Rossum <guido@python.org>
parents:
24844
diff
changeset
|
42 |
|
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 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
|
44 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
|
45 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
|
46 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
|
47 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
|
48 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
|
49 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
|
50 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
|
51 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
|
52 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
|
53 Python 2.2: 60717 |
|
23851
d6ae544acd24
Fix SF bug # 561858 Assertion with very long lists
Neal Norwitz <nnorwitz@gmail.com>
parents:
23832
diff
changeset
|
54 Python 2.3a0: 62011 |
| 24844 | 55 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
|
56 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
|
57 Python 2.4a0: 62041 |
|
33248
1f9b9c226b43
SF Patch #1013667: Cleanup Peepholer Output
Raymond Hettinger <python@rcn.com>
parents:
32882
diff
changeset
|
58 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
|
59 Python 2.4b1: 62061 |
| 35008 | 60 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
|
61 Python 2.5a0: 62081 (ast-branch) |
|
36695
b6d2f6fd3e11
PEP 343 -- the with-statement.
Guido van Rossum <guido@python.org>
parents:
36501
diff
changeset
|
62 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
|
63 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
|
64 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
|
65 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
|
66 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
|
67 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
|
68 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
|
69 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
|
70 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
|
71 3010 (removed UNARY_CONVERT) |
|
39693
d0b83c4630c0
SF patch 1547796 by Georg Brandl -- set literals.
Guido van Rossum <guido@python.org>
parents:
39678
diff
changeset
|
72 3020 (added BUILD_SET) |
|
40215
1cce0526d9b0
Jiwon Seo's PEP 3102 implementation.
Guido van Rossum <guido@python.org>
parents:
39693
diff
changeset
|
73 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
|
74 3040 (added signature annotations) |
|
40774
793e0323d4d6
Essential changes for print function changes.
Guido van Rossum <guido@python.org>
parents:
40530
diff
changeset
|
75 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
|
76 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
|
77 3070 (PEP 3109 raise changes) |
|
19319e70fc3e
Patch #1272, by Christian Heimes and Alexandre Vassalotti.
Guido van Rossum <guido@python.org>
parents:
43225
diff
changeset
|
78 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
|
79 3090 (kill str8 interning) |
|
44349
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44142
diff
changeset
|
80 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
|
81 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
|
82 . |
|
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
|
83 */ |
|
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
|
84 #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
|
85 |
| 12543 | 86 /* 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
|
87 value of this global to accommodate for alterations of how the |
| 12543 | 88 compiler works which are enabled by command line switches. */ |
| 89 static long pyc_magic = MAGIC; | |
| 90 | |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
91 /* 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
|
92 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
|
93 |
|
6541
b2dfff06789c
Instead of using _PyImport_Inittab[] directly, use the new "official"
Guido van Rossum <guido@python.org>
parents:
6454
diff
changeset
|
94 /* 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
|
95 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
|
96 |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
97 /* Method from Parser/tokenizer.c */ |
|
43632
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
98 extern char * PyTokenizer_FindEncoding(int); |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
99 |
|
6541
b2dfff06789c
Instead of using _PyImport_Inittab[] directly, use the new "official"
Guido van Rossum <guido@python.org>
parents:
6454
diff
changeset
|
100 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
|
101 |
|
11602
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
102 /* 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
|
103 struct filedescr * _PyImport_Filetab = NULL; |
|
16947
b25131bc6ec7
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16932
diff
changeset
|
104 |
|
11602
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
105 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
|
106 {".py", "U", PY_SOURCE}, |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
23879
diff
changeset
|
107 #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
|
108 {".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
|
109 #endif |
|
11602
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
110 {".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
|
111 {0, 0} |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
112 }; |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
113 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
114 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
115 /* Initialize things */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
116 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
117 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
118 _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
|
119 { |
|
11602
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
120 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
|
121 struct filedescr *filetab; |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
122 int countD = 0; |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
123 int countS = 0; |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
124 |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
125 /* 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
|
126 _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
|
127 */ |
|
42775
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42622
diff
changeset
|
128 #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
|
129 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
|
130 ++countD; |
|
42775
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42622
diff
changeset
|
131 #endif |
|
11602
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
132 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
|
133 ++countS; |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12543
diff
changeset
|
134 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
|
135 if (filetab == NULL) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
136 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
|
137 #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
|
138 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
|
139 countD * sizeof(struct filedescr)); |
|
42775
d7517c306791
Merged revisions 57221-57391 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
42622
diff
changeset
|
140 #endif |
|
11602
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
141 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
|
142 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
|
143 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
|
144 |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
145 _PyImport_Filetab = filetab; |
|
5738ad737114
In _PyImport_Init(), dynamically construct the table of legal suffixes
Guido van Rossum <guido@python.org>
parents:
10530
diff
changeset
|
146 |
|
5180
6bc56259cc4c
When -O is given, use ".pyo" instead of ".pyc".
Guido van Rossum <guido@python.org>
parents:
5043
diff
changeset
|
147 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
|
148 /* 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
|
149 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
|
150 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
|
151 filetab->suffix = ".pyo"; |
|
5180
6bc56259cc4c
When -O is given, use ".pyo" instead of ".pyc".
Guido van Rossum <guido@python.org>
parents:
5043
diff
changeset
|
152 } |
|
6bc56259cc4c
When -O is given, use ".pyo" instead of ".pyc".
Guido van Rossum <guido@python.org>
parents:
5043
diff
changeset
|
153 } |
| 12543 | 154 |
|
41558
29ae667f3239
Checkpoint. Manipulated things so that string literals are always
Guido van Rossum <guido@python.org>
parents:
41554
diff
changeset
|
155 { |
| 12543 | 156 /* Fix the pyc_magic so that byte compiled code created |
| 157 using the all-Unicode method doesn't interfere with | |
| 158 code created in normal operation mode. */ | |
| 159 pyc_magic = MAGIC + 1; | |
| 160 } | |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
161 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
162 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
163 void |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
164 _PyImportHooks_Init(void) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
165 { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
166 PyObject *v, *path_hooks = NULL, *zimpimport; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
167 int err = 0; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
168 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
169 /* 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
|
170 zipimport */ |
|
43897
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
171 if (PyType_Ready(&PyNullImporter_Type) < 0) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
172 goto error; |
|
26885
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 if (Py_VerboseFlag) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
175 PySys_WriteStderr("# installing zipimport hook\n"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
176 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
177 v = PyList_New(0); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
178 if (v == NULL) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
179 goto error; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
180 err = PySys_SetObject("meta_path", v); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
181 Py_DECREF(v); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
182 if (err) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
183 goto error; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
184 v = PyDict_New(); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
185 if (v == NULL) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
186 goto error; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
187 err = PySys_SetObject("path_importer_cache", v); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
188 Py_DECREF(v); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
189 if (err) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
190 goto error; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
191 path_hooks = PyList_New(0); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
192 if (path_hooks == NULL) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
193 goto error; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
194 err = PySys_SetObject("path_hooks", path_hooks); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
195 if (err) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
196 error: |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
197 PyErr_Print(); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
198 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
|
199 "path_importer_cache, or NullImporter failed" |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
200 ); |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
201 } |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
202 |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
203 zimpimport = PyImport_ImportModule("zipimport"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
204 if (zimpimport == NULL) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
205 PyErr_Clear(); /* No zip import module -- okay */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
206 if (Py_VerboseFlag) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
207 PySys_WriteStderr("# can't import zipimport\n"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
208 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
209 else { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
210 PyObject *zipimporter = PyObject_GetAttrString(zimpimport, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
211 "zipimporter"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
212 Py_DECREF(zimpimport); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
213 if (zipimporter == NULL) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
214 PyErr_Clear(); /* No zipimporter object -- okay */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
215 if (Py_VerboseFlag) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
216 PySys_WriteStderr( |
| 29812 | 217 "# can't import zipimport.zipimporter\n"); |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
218 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
219 else { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
220 /* sys.path_hooks.append(zipimporter) */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
221 err = PyList_Append(path_hooks, zipimporter); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
222 Py_DECREF(zipimporter); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
223 if (err) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
224 goto error; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
225 if (Py_VerboseFlag) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
226 PySys_WriteStderr( |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
227 "# installed zipimport hook\n"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
228 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
229 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
230 Py_DECREF(path_hooks); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
231 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
232 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
233 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
234 _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
|
235 { |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
236 Py_XDECREF(extensions); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
237 extensions = NULL; |
|
14991
5d41ca49a10a
_PyImport_Fini(): Closed small memory leak when an embedded app calls
Barry Warsaw <barry@python.org>
parents:
14921
diff
changeset
|
238 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
|
239 _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
|
240 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
241 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
242 |
|
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
|
243 /* 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
|
244 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
|
245 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
|
246 |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
247 #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
|
248 |
|
9203
07dae6fdae79
Renamed thread.h to pythread.h.
Guido van Rossum <guido@python.org>
parents:
9187
diff
changeset
|
249 #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
|
250 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9431
diff
changeset
|
251 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
|
252 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
|
253 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
|
254 |
|
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 static void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
256 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
|
257 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9431
diff
changeset
|
258 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
|
259 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
|
260 return; /* Too bad */ |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
261 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
|
262 import_lock = PyThread_allocate_lock(); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
263 if (import_lock == NULL) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
264 return; /* Nothing much we can do. */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
265 } |
|
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
|
266 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
|
267 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
|
268 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
|
269 } |
|
27852
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
270 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
|
271 { |
|
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
|
272 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
|
273 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
|
274 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
|
275 } |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
276 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
|
277 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
|
278 } |
|
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 |
|
27852
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
280 static int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
281 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
|
282 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9431
diff
changeset
|
283 long me = PyThread_get_thread_ident(); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
284 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
|
285 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
|
286 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
|
287 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
|
288 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
|
289 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
|
290 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
|
291 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
|
292 } |
|
27852
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
293 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
|
294 } |
|
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 |
|
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
|
296 /* 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
|
297 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
|
298 |
|
724bbd489ad4
- Changes donated by Elemental Security to make it work on AIX 5.3
Guido van Rossum <guido@python.org>
parents:
35542
diff
changeset
|
299 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
|
300 _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
|
301 { |
|
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 #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
|
303 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
|
304 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
|
305 #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
|
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 |
|
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
|
308 #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
|
309 |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
310 #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
|
311 #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
|
312 |
|
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 #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
|
314 |
|
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
|
315 static PyObject * |
|
27917
c346d095791d
Remove PyArg_ParseTuple() for methods which take no args,
Neal Norwitz <nnorwitz@gmail.com>
parents:
27853
diff
changeset
|
316 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
|
317 { |
|
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
|
318 #ifdef WITH_THREAD |
|
22866
a561ff1b4ffa
Return bools from functions named is_<whatever>().
Guido van Rossum <guido@python.org>
parents:
22705
diff
changeset
|
319 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
|
320 #else |
|
22866
a561ff1b4ffa
Return bools from functions named is_<whatever>().
Guido van Rossum <guido@python.org>
parents:
22705
diff
changeset
|
321 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
|
322 #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
|
323 } |
|
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
|
324 |
|
27852
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
325 static PyObject * |
|
27917
c346d095791d
Remove PyArg_ParseTuple() for methods which take no args,
Neal Norwitz <nnorwitz@gmail.com>
parents:
27853
diff
changeset
|
326 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
|
327 { |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
328 #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
|
329 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
|
330 #endif |
|
27853
5620b0786271
Cleanup from patch #683257:
Neal Norwitz <nnorwitz@gmail.com>
parents:
27852
diff
changeset
|
331 Py_INCREF(Py_None); |
|
5620b0786271
Cleanup from patch #683257:
Neal Norwitz <nnorwitz@gmail.com>
parents:
27852
diff
changeset
|
332 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
|
333 } |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
334 |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
335 static PyObject * |
|
27917
c346d095791d
Remove PyArg_ParseTuple() for methods which take no args,
Neal Norwitz <nnorwitz@gmail.com>
parents:
27853
diff
changeset
|
336 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
|
337 { |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
338 #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
|
339 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
|
340 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
|
341 "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
|
342 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
|
343 } |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
344 #endif |
|
27853
5620b0786271
Cleanup from patch #683257:
Neal Norwitz <nnorwitz@gmail.com>
parents:
27852
diff
changeset
|
345 Py_INCREF(Py_None); |
|
5620b0786271
Cleanup from patch #683257:
Neal Norwitz <nnorwitz@gmail.com>
parents:
27852
diff
changeset
|
346 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
|
347 } |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
348 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
349 static void |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
350 imp_modules_reloading_clear(void) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
351 { |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
352 PyInterpreterState *interp = PyThreadState_Get()->interp; |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
353 if (interp->modules_reloading != NULL) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
354 PyDict_Clear(interp->modules_reloading); |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
355 } |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
356 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
357 /* Helper for sys */ |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
358 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
359 PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
360 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
|
361 { |
|
31797
846b3ee7e106
Changed random calls to PyThreadState_Get() to use the macro
Nicholas Bastin <nick.bastin@gmail.com>
parents:
31778
diff
changeset
|
362 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
|
363 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
|
364 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
|
365 return interp->modules; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
366 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
367 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
368 |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
369 /* 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
|
370 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
|
371 "path", "argv", "ps1", "ps2", |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
372 "last_type", "last_value", "last_traceback", |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
373 "path_hooks", "path_importer_cache", "meta_path", |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
374 NULL |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
375 }; |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
376 |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
377 static char* sys_files[] = { |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
378 "stdin", "__stdin__", |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
379 "stdout", "__stdout__", |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
380 "stderr", "__stderr__", |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
381 NULL |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
382 }; |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
383 |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
384 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
385 /* Un-initialize things, as good as we can */ |
| 86 | 386 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
387 void |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
388 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
|
389 { |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
390 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
|
391 char *name; |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
392 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
|
393 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
|
394 PyObject *modules = interp->modules; |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
395 |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
396 if (modules == NULL) |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
397 return; /* Already done */ |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
398 |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
399 /* 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
|
400 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
|
401 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
|
402 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
|
403 destruction order. Sigh. */ |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
404 |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
405 value = PyDict_GetItemString(modules, "builtins"); |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
406 if (value != NULL && PyModule_Check(value)) { |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
407 dict = PyModule_GetDict(value); |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
408 if (Py_VerboseFlag) |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
409 PySys_WriteStderr("# clear builtins._\n"); |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
410 PyDict_SetItemString(dict, "_", Py_None); |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
411 } |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
412 value = PyDict_GetItemString(modules, "sys"); |
|
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 char **p; |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
415 PyObject *v; |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
416 dict = PyModule_GetDict(value); |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
417 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
|
418 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
419 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
|
420 PyDict_SetItemString(dict, *p, Py_None); |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
421 } |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
422 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
|
423 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
424 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
|
425 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
|
426 if (v == NULL) |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
427 v = Py_None; |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
428 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
|
429 } |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
430 } |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
431 |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
432 /* First, delete __main__ */ |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
433 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
|
434 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
|
435 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
436 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
|
437 _PyModule_Clear(value); |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
438 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
|
439 } |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
440 |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
441 /* 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
|
442 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
|
443 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
|
444 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
|
445 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
|
446 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
|
447 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
|
448 |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
449 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
|
450 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
|
451 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
|
452 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
|
453 re-imported. */ |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
454 |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
455 /* 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
|
456 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
|
457 do { |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
458 ndone = 0; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
459 pos = 0; |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
460 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
|
461 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
|
462 continue; |
|
42862
ed1594a16bdb
Use unicode and remove support for some uses of str8.
Neal Norwitz <nnorwitz@gmail.com>
parents:
42859
diff
changeset
|
463 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
|
464 name = PyUnicode_AsString(key); |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
465 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
|
466 continue; |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
467 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
|
468 continue; |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
469 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
470 PySys_WriteStderr( |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
471 "# 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
|
472 _PyModule_Clear(value); |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
473 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
|
474 ndone++; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
475 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
476 } |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
477 } while (ndone > 0); |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
478 |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
479 /* 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
|
480 pos = 0; |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
481 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
|
482 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
|
483 name = PyUnicode_AsString(key); |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
484 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
|
485 continue; |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
486 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
|
487 continue; |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
488 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
489 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
|
490 _PyModule_Clear(value); |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
491 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
|
492 } |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
493 } |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
494 |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
495 /* 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
|
496 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
|
497 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
|
498 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
499 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
|
500 _PyModule_Clear(value); |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
501 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
|
502 } |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
503 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
|
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) |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
506 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
|
507 _PyModule_Clear(value); |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
508 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
|
509 } |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
510 |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
511 /* 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
|
512 PyDict_Clear(modules); |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
513 interp->modules = NULL; |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
514 Py_DECREF(modules); |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
515 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
|
516 } |
|
166
28923e44254c
Added forward declaration (to satisfy Standard C).
Guido van Rossum <guido@python.org>
parents:
145
diff
changeset
|
517 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
518 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
519 /* 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
|
520 |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1877
diff
changeset
|
521 long |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
522 PyImport_GetMagicNumber(void) |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1877
diff
changeset
|
523 { |
| 12543 | 524 return pyc_magic; |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1877
diff
changeset
|
525 } |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1877
diff
changeset
|
526 |
| 6 | 527 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
528 /* 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
|
529 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
|
530 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
|
531 (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
|
532 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
|
533 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
|
534 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
|
535 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
|
536 _PyImport_FindExtension(). */ |
| 6 | 537 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
538 PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
539 _PyImport_FixupExtension(char *name, char *filename) |
| 6 | 540 { |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
541 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
|
542 if (extensions == NULL) { |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
543 extensions = PyDict_New(); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
544 if (extensions == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
545 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
546 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
547 modules = PyImport_GetModuleDict(); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
548 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
|
549 if (mod == NULL || !PyModule_Check(mod)) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
550 PyErr_Format(PyExc_SystemError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
551 "_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
|
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 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
|
555 if (dict == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
556 return NULL; |
|
20671
3fb403eaede1
Use PyDict_Copy() and PyDict_Update() instead of using PyObject_CallMethod()
Fred Drake <fdrake@acm.org>
parents:
20654
diff
changeset
|
557 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
|
558 if (copy == NULL) |
|
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 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
|
561 Py_DECREF(copy); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
562 return copy; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
563 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
564 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
565 PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
566 _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
|
567 { |
|
20671
3fb403eaede1
Use PyDict_Copy() and PyDict_Update() instead of using PyObject_CallMethod()
Fred Drake <fdrake@acm.org>
parents:
20654
diff
changeset
|
568 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
|
569 if (extensions == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
570 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
571 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
|
572 if (dict == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
573 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
574 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
|
575 if (mod == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
576 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
577 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
|
578 if (mdict == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
579 return NULL; |
|
20671
3fb403eaede1
Use PyDict_Copy() and PyDict_Update() instead of using PyObject_CallMethod()
Fred Drake <fdrake@acm.org>
parents:
20654
diff
changeset
|
580 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
|
581 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
582 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
583 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
|
584 name, filename); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
585 return mod; |
| 6 | 586 } |
| 587 | |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
588 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
589 /* 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
|
590 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
|
591 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
|
592 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
|
593 '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
|
594 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
595 PyObject * |
|
35999
9541369b0dca
Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35757
diff
changeset
|
596 PyImport_AddModule(const char *name) |
|
40
f28ac7f621c7
Added reload() functionality.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
597 { |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
598 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
|
599 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
|
600 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
601 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
|
602 PyModule_Check(m)) |
| 86 | 603 return m; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
604 m = PyModule_New(name); |
| 86 | 605 if (m == NULL) |
| 6 | 606 return NULL; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
607 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
|
608 Py_DECREF(m); |
| 86 | 609 return NULL; |
| 6 | 610 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
611 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
|
612 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
613 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
614 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
615 |
|
32882
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
616 /* 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
|
617 static void |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
618 _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
|
619 { |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
620 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
|
621 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
|
622 return; |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
623 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
|
624 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
|
625 "sys.modules failed"); |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
626 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
627 |
|
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
|
628 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
|
629 |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
630 /* 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
|
631 * 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
|
632 * 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
|
633 * 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
|
634 * 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
|
635 * example. |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
636 */ |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
637 PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
638 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
|
639 { |
|
7232
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
640 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
|
641 } |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
642 |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
643 PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
644 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
|
645 { |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
646 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
|
647 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
|
648 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
649 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
|
650 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
|
651 return NULL; |
|
31320
ca4374662632
Add comment to mollify Tim.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
30979
diff
changeset
|
652 /* 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
|
653 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
|
654 d = PyModule_GetDict(m); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
655 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
|
656 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
|
657 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
|
658 goto error; |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
659 } |
|
3557
cee4a6d8415e
Remember source filename as <module>.__file__.
Guido van Rossum <guido@python.org>
parents:
3492
diff
changeset
|
660 /* 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
|
661 v = NULL; |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
662 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
|
663 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
|
664 if (v == NULL) |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
665 PyErr_Clear(); |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
666 } |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
667 if (v == NULL) { |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
668 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
|
669 Py_INCREF(v); |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
670 } |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
671 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
|
672 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
|
673 Py_DECREF(v); |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
674 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
675 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
|
676 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
|
677 goto error; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
678 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
|
679 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
680 if ((m = PyDict_GetItemString(modules, name)) == NULL) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
681 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
682 "Loaded module %.200s not found in sys.modules", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
683 name); |
|
5758
bfe9ba74c19e
Fix problem discovered by Greg McFarlane: when an imported module
Guido van Rossum <guido@python.org>
parents:
5511
diff
changeset
|
684 return NULL; |
|
bfe9ba74c19e
Fix problem discovered by Greg McFarlane: when an imported module
Guido van Rossum <guido@python.org>
parents:
5511
diff
changeset
|
685 } |
|
bfe9ba74c19e
Fix problem discovered by Greg McFarlane: when an imported module
Guido van Rossum <guido@python.org>
parents:
5511
diff
changeset
|
686 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
687 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
|
688 |
| 86 | 689 return m; |
|
32882
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
690 |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
691 error: |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
692 _RemoveModule(name); |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
693 return NULL; |
| 6 | 694 } |
| 695 | |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
696 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
697 /* 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
|
698 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
|
699 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
|
700 Doesn't set an exception. */ |
|
609
0ad5b35e3ad8
Support for dynamic loading added.
Guido van Rossum <guido@python.org>
parents:
510
diff
changeset
|
701 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
702 static char * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
703 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
|
704 { |
|
18992
7fa1f87ca6b2
Derived from SF patch #446899 Permit import of .pyw under Windows, from
Tim Peters <tim.peters@gmail.com>
parents:
18933
diff
changeset
|
705 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
|
706 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
|
707 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
|
708 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
23879
diff
changeset
|
709 #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
|
710 /* 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
|
711 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
|
712 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
|
713 --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
|
714 #endif |
|
7fa1f87ca6b2
Derived from SF patch #446899 Permit import of .pyw under Windows, from
Tim Peters <tim.peters@gmail.com>
parents:
18933
diff
changeset
|
715 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
|
716 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
|
717 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
|
718 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
719 return buf; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
720 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
721 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
722 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
723 /* 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
|
724 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
|
725 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
|
726 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
|
727 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
|
728 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
|
729 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
730 static FILE * |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
731 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
|
732 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
733 FILE *fp; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
734 long magic; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
735 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
|
736 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
737 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
|
738 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
|
739 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
740 magic = PyMarshal_ReadLongFromFile(fp); |
| 12543 | 741 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
|
742 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
743 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
|
744 fclose(fp); |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
745 return NULL; |
|
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
746 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
747 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
|
748 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
|
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 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
|
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 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
755 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
|
756 return fp; |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
757 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
758 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
759 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
760 /* 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
|
761 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
762 static PyCodeObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
763 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
|
764 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
765 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
|
766 |
|
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
|
767 co = PyMarshal_ReadLastObjectFromFile(fp); |
|
31824
331de8b9d1ed
Marshal clean-up (SF patch #873224)
Armin Rigo <arigo@tunes.org>
parents:
31797
diff
changeset
|
768 if (co == NULL) |
|
331de8b9d1ed
Marshal clean-up (SF patch #873224)
Armin Rigo <arigo@tunes.org>
parents:
31797
diff
changeset
|
769 return NULL; |
|
331de8b9d1ed
Marshal clean-up (SF patch #873224)
Armin Rigo <arigo@tunes.org>
parents:
31797
diff
changeset
|
770 if (!PyCode_Check(co)) { |
|
331de8b9d1ed
Marshal clean-up (SF patch #873224)
Armin Rigo <arigo@tunes.org>
parents:
31797
diff
changeset
|
771 PyErr_Format(PyExc_ImportError, |
|
331de8b9d1ed
Marshal clean-up (SF patch #873224)
Armin Rigo <arigo@tunes.org>
parents:
31797
diff
changeset
|
772 "Non-code object in %.200s", cpathname); |
|
331de8b9d1ed
Marshal clean-up (SF patch #873224)
Armin Rigo <arigo@tunes.org>
parents:
31797
diff
changeset
|
773 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
|
774 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
775 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
776 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
|
777 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
778 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
779 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
780 /* 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
|
781 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
|
782 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
783 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
784 load_compiled_module(char *name, char *cpathname, FILE *fp) |
| 6 | 785 { |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
786 long magic; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
787 PyCodeObject *co; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
788 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
|
789 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
790 magic = PyMarshal_ReadLongFromFile(fp); |
| 12543 | 791 if (magic != pyc_magic) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
792 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
793 "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
|
794 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
795 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
796 (void) PyMarshal_ReadLongFromFile(fp); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
797 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
|
798 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
|
799 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
800 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
801 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
|
802 name, cpathname); |
|
7232
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
803 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
|
804 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
|
805 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
806 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
807 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
808 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
809 /* 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
|
810 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
811 static PyCodeObject * |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35678
diff
changeset
|
812 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
|
813 { |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35678
diff
changeset
|
814 PyCodeObject *co = NULL; |
|
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35678
diff
changeset
|
815 mod_ty mod; |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
816 PyArena *arena = PyArena_New(); |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
817 if (arena == NULL) |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
818 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
|
819 |
|
43225
38f3f9ef193d
Convert code from sys.stdin.encoding to UTF-8 in
Martin v. Löwis <martin@v.loewis.de>
parents:
43107
diff
changeset
|
820 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
|
821 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
|
822 NULL, arena); |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35678
diff
changeset
|
823 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
|
824 co = PyAST_Compile(mod, pathname, NULL, arena); |
|
35742
1c4d192f1568
Merge ast-branch to head
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35678
diff
changeset
|
825 } |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
826 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
|
827 return co; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
828 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
829 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
830 |
|
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
|
831 /* 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
|
832 |
|
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
|
833 static FILE * |
|
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
|
834 open_exclusive(char *filename) |
|
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
|
835 { |
|
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
|
836 #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
|
837 /* 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
|
838 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
|
839 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
|
840 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
|
841 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
|
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 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
|
844 (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
|
845 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
|
846 #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
|
847 |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
|
848 #endif |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
26461
diff
changeset
|
849 #ifdef __VMS |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
850 , 0666, "ctxt=bin", "shr=nil" |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
26461
diff
changeset
|
851 #else |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
852 , 0666 |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
26461
diff
changeset
|
853 #endif |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
854 ); |
|
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
|
855 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
|
856 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
|
857 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
|
858 #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
|
859 /* 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
|
860 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
|
861 #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
|
862 } |
|
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 |
|
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 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
865 /* 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
|
866 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
|
867 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
|
868 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
|
869 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
870 static void |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
871 write_compiled_module(PyCodeObject *co, char *cpathname, time_t mtime) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
872 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
873 FILE *fp; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
874 |
|
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
|
875 fp = open_exclusive(cpathname); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
876 if (fp == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
877 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
878 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
|
879 "# 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
|
880 return; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
881 } |
|
32422
3df36e2e5ddc
Patch #923098: Share interned strings in marshal.
Martin v. Löwis <martin@v.loewis.de>
parents:
32294
diff
changeset
|
882 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
|
883 /* 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
|
884 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
|
885 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
|
886 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
|
887 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
888 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
|
889 /* 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
|
890 fclose(fp); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
891 (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
|
892 return; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
893 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
894 /* 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
|
895 fseek(fp, 4L, 0); |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
896 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
|
897 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
|
898 fflush(fp); |
|
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); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
900 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
901 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
|
902 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
903 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
904 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
905 /* 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
|
906 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
|
907 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
|
908 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
909 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
910 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
|
911 { |
|
13226
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
912 time_t mtime; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
913 FILE *fpc; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
914 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
|
915 char *cpathname; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
916 PyCodeObject *co; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
917 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
|
918 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
919 mtime = PyOS_GetLastModificationTime(pathname, fp); |
|
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
|
920 if (mtime == (time_t)(-1)) { |
|
f0951fdaed37
Fix SF bug #976608, Unhelpful error message when mtime of a module is -1
Neal Norwitz <nnorwitz@gmail.com>
parents:
35550
diff
changeset
|
921 PyErr_Format(PyExc_RuntimeError, |
|
f0951fdaed37
Fix SF bug #976608, Unhelpful error message when mtime of a module is -1
Neal Norwitz <nnorwitz@gmail.com>
parents:
35550
diff
changeset
|
922 "unable to get modification time from '%s'", |
|
f0951fdaed37
Fix SF bug #976608, Unhelpful error message when mtime of a module is -1
Neal Norwitz <nnorwitz@gmail.com>
parents:
35550
diff
changeset
|
923 pathname); |
|
13226
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
924 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
|
925 } |
|
13226
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
926 #if SIZEOF_TIME_T > 4 |
|
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
927 /* 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
|
928 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
|
929 when a 4-byte signed time_t will overflow. |
|
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
930 */ |
|
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
931 if (mtime >> 32) { |
|
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
932 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
|
933 "modification time overflows a 4 byte field"); |
|
13226
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
934 return NULL; |
|
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
935 } |
|
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
936 #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
|
937 cpathname = make_compiled_pathname(pathname, buf, |
| 17502 | 938 (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
|
939 if (cpathname != NULL && |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
940 (fpc = check_compiled_module(pathname, mtime, cpathname))) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
941 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
|
942 fclose(fpc); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
943 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
|
944 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
945 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
946 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
|
947 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
|
948 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
|
949 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
950 else { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
951 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
|
952 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
|
953 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
954 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
955 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
|
956 name, pathname); |
|
44587
fb5a6330f71b
Merged revisions 59822-59841 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44583
diff
changeset
|
957 if (cpathname) { |
|
fb5a6330f71b
Merged revisions 59822-59841 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44583
diff
changeset
|
958 PyObject *ro = PySys_GetObject("dont_write_bytecode"); |
|
fb5a6330f71b
Merged revisions 59822-59841 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44583
diff
changeset
|
959 if (ro == NULL || !PyObject_IsTrue(ro)) |
|
fb5a6330f71b
Merged revisions 59822-59841 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44583
diff
changeset
|
960 write_compiled_module(co, cpathname, mtime); |
|
fb5a6330f71b
Merged revisions 59822-59841 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44583
diff
changeset
|
961 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
962 } |
|
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
|
963 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
|
964 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
|
965 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
966 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
967 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
968 |
|
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
|
969 /* 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
|
970 * 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
|
971 */ |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
972 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
|
973 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
|
974 { |
|
73e1bf179a01
Another patch for #1762972: __file__ points to the py file instead pyo/pyc file
Christian Heimes <christian@cheimes.de>
parents:
44567
diff
changeset
|
975 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
|
976 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
|
977 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
|
978 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
|
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 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
|
981 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
|
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 |
|
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 len = strlen(file); |
| 44634 | 985 /* match '*.py?' */ |
| 986 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
|
987 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
|
988 } |
|
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 |
|
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 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
|
991 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
|
992 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
|
993 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
|
994 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
|
995 } |
|
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 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
|
997 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
|
998 } |
|
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 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
|
1000 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1001 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1002 /* Forward */ |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1003 static PyObject *load_module(char *, FILE *, char *, int, PyObject *); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1004 static struct filedescr *find_module(char *, char *, PyObject *, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1005 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
|
1006 static struct _frozen * find_frozen(char *); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1007 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1008 /* 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
|
1009 REFERENCE COUNT */ |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1010 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1011 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
1012 load_package(char *name, char *pathname) |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1013 { |
|
32882
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
1014 PyObject *m, *d; |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
1015 PyObject *file = NULL; |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
1016 PyObject *path = NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1017 int err; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1018 char buf[MAXPATHLEN+1]; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1019 FILE *fp = NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1020 struct filedescr *fdp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1021 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1022 m = PyImport_AddModule(name); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1023 if (m == NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1024 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
|
1025 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
1026 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
|
1027 name, pathname); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1028 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
|
1029 file = get_sourcefile(pathname); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1030 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
|
1031 goto error; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1032 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
|
1033 if (path == NULL) |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
1034 goto error; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1035 err = PyDict_SetItemString(d, "__file__", file); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1036 if (err == 0) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1037 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
|
1038 if (err != 0) |
|
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 buf[0] = '\0'; |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1041 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
|
1042 if (fdp == NULL) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1043 if (PyErr_ExceptionMatches(PyExc_ImportError)) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1044 PyErr_Clear(); |
|
32294
82fe6832e505
Fix a refcount bug in an obscure code corner.
Thomas Heller <theller@ctypes.org>
parents:
32156
diff
changeset
|
1045 Py_INCREF(m); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1046 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1047 else |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1048 m = NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1049 goto cleanup; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1050 } |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1051 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
|
1052 if (fp != NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1053 fclose(fp); |
|
32882
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
1054 goto cleanup; |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
1055 |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
1056 error: |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
1057 m = NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1058 cleanup: |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1059 Py_XDECREF(path); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1060 Py_XDECREF(file); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1061 return m; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1062 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1063 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1064 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1065 /* Helper to test for built-in module */ |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1066 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1067 static int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
1068 is_builtin(char *name) |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1069 { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1070 int i; |
|
6541
b2dfff06789c
Instead of using _PyImport_Inittab[] directly, use the new "official"
Guido van Rossum <guido@python.org>
parents:
6454
diff
changeset
|
1071 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
|
1072 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
|
1073 if (PyImport_Inittab[i].initfunc == NULL) |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1074 return -1; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1075 else |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1076 return 1; |
|
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 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1079 return 0; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1080 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1081 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1082 |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1083 /* 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
|
1084 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
|
1085 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
|
1086 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
|
1087 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
|
1088 import mechanism. Cache the result in path_importer_cache. |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1089 Returns a borrowed reference. */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1090 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1091 static PyObject * |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1092 get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1093 PyObject *p) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1094 { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1095 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
|
1096 Py_ssize_t j, nhooks; |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1097 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1098 /* These conditions are the caller's responsibility: */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1099 assert(PyList_Check(path_hooks)); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1100 assert(PyDict_Check(path_importer_cache)); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1101 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1102 nhooks = PyList_Size(path_hooks); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1103 if (nhooks < 0) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1104 return NULL; /* Shouldn't happen */ |
|
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 importer = PyDict_GetItem(path_importer_cache, p); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1107 if (importer != NULL) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1108 return importer; |
|
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 /* set path_importer_cache[p] to None to avoid recursion */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1111 if (PyDict_SetItem(path_importer_cache, p, Py_None) != 0) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1112 return NULL; |
|
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 for (j = 0; j < nhooks; j++) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1115 PyObject *hook = PyList_GetItem(path_hooks, j); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1116 if (hook == NULL) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1117 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
|
1118 importer = PyObject_CallFunctionObjArgs(hook, p, NULL); |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1119 if (importer != NULL) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1120 break; |
|
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 if (!PyErr_ExceptionMatches(PyExc_ImportError)) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1123 return NULL; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1124 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1125 PyErr_Clear(); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1126 } |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1127 if (importer == NULL) { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1128 importer = PyObject_CallFunctionObjArgs( |
|
43897
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1129 (PyObject *)&PyNullImporter_Type, p, NULL |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1130 ); |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1131 if (importer == NULL) { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1132 if (PyErr_ExceptionMatches(PyExc_ImportError)) { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1133 PyErr_Clear(); |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1134 return Py_None; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1135 } |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1136 } |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1137 } |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1138 if (importer != NULL) { |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1139 int err = PyDict_SetItem(path_importer_cache, p, importer); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1140 Py_DECREF(importer); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1141 if (err != 0) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1142 return NULL; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1143 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1144 return importer; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1145 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1146 |
|
43897
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1147 PyAPI_FUNC(PyObject *) |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1148 PyImport_GetImporter(PyObject *path) { |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1149 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
|
1150 |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1151 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
|
1152 if ((path_hooks = PySys_GetObject("path_hooks"))) { |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1153 importer = get_path_importer(path_importer_cache, |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1154 path_hooks, path); |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1155 } |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1156 } |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1157 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
|
1158 return importer; |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1159 } |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
1160 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1161 /* 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
|
1162 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
|
1163 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
|
1164 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1165 #ifdef MS_COREDLL |
|
13663
29da35543833
ANSIfy as many declarations as possible.
Thomas Wouters <thomas@python.org>
parents:
13658
diff
changeset
|
1166 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
|
1167 char *, Py_ssize_t); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1168 #endif |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1169 |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
1170 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
|
1171 static int find_init_module(char *); /* Forward */ |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1172 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
|
1173 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1174 static struct filedescr * |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1175 find_module(char *fullname, char *subname, PyObject *path, char *buf, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1176 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
|
1177 { |
|
36866
9eb24f92a784
Change int to Py_ssize_t in several places.
Martin v. Löwis <martin@v.loewis.de>
parents:
36712
diff
changeset
|
1178 Py_ssize_t i, npath; |
|
13226
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
1179 size_t len, namelen; |
| 4596 | 1180 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
|
1181 char *filemode; |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1182 FILE *fp = NULL; |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1183 PyObject *path_hooks, *path_importer_cache; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1184 struct stat statbuf; |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1185 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
|
1186 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
|
1187 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
|
1188 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
|
1189 #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
|
1190 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
|
1191 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
|
1192 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
|
1193 #endif |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1194 if (p_loader != NULL) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1195 *p_loader = NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1196 |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1197 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
|
1198 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
|
1199 "module name is too long"); |
|
13226
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
1200 return NULL; |
|
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
1201 } |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1202 strcpy(name, subname); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1203 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1204 /* sys.meta_path import hook */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1205 if (p_loader != NULL) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1206 PyObject *meta_path; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1207 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1208 meta_path = PySys_GetObject("meta_path"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1209 if (meta_path == NULL || !PyList_Check(meta_path)) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1210 PyErr_SetString(PyExc_ImportError, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1211 "sys.meta_path must be a list of " |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1212 "import hooks"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1213 return NULL; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1214 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1215 Py_INCREF(meta_path); /* zap guard */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1216 npath = PyList_Size(meta_path); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1217 for (i = 0; i < npath; i++) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1218 PyObject *loader; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1219 PyObject *hook = PyList_GetItem(meta_path, i); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1220 loader = PyObject_CallMethod(hook, "find_module", |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1221 "sO", fullname, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1222 path != NULL ? |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1223 path : Py_None); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1224 if (loader == NULL) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1225 Py_DECREF(meta_path); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1226 return NULL; /* true error */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1227 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1228 if (loader != Py_None) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1229 /* a loader was found */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1230 *p_loader = loader; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1231 Py_DECREF(meta_path); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1232 return &importhookdescr; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1233 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1234 Py_DECREF(loader); |
|
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 Py_DECREF(meta_path); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1237 } |
|
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
|
1238 |
|
42347
5e66bb69c1e3
Fix import of frozen package submodules to use Unicode. Fixes test_frozen.
Guido van Rossum <guido@python.org>
parents:
42334
diff
changeset
|
1239 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
|
1240 /* 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
|
1241 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
|
1242 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
|
1243 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
|
1244 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
|
1245 "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
|
1246 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
|
1247 } |
|
42347
5e66bb69c1e3
Fix import of frozen package submodules to use Unicode. Fixes test_frozen.
Guido van Rossum <guido@python.org>
parents:
42334
diff
changeset
|
1248 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
|
1249 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
|
1250 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
|
1251 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
|
1252 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
|
1253 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
|
1254 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
|
1255 } |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1256 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
|
1257 "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
|
1258 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
|
1259 } |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1260 if (path == NULL) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1261 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
|
1262 strcpy(buf, name); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1263 return &fd_builtin; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1264 } |
|
20249
1acecc908ee8
Remove a couple of unused local variables (bug #445960, compiler warnings
Greg Ward <gward@python.net>
parents:
19596
diff
changeset
|
1265 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
|
1266 strcpy(buf, name); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1267 return &fd_frozen; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1268 } |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
1269 |
|
4111
90216e907345
PYTHONWIN -> MS_COREDLL
Guido van Rossum <guido@python.org>
parents:
3964
diff
changeset
|
1270 #ifdef MS_COREDLL |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1271 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1272 if (fp != NULL) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1273 *p_fp = fp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1274 return fdp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1275 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1276 #endif |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1277 path = PySys_GetObject("path"); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1278 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1279 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
|
1280 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
|
1281 "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
|
1282 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
|
1283 } |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1284 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1285 path_hooks = PySys_GetObject("path_hooks"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1286 if (path_hooks == NULL || !PyList_Check(path_hooks)) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1287 PyErr_SetString(PyExc_ImportError, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1288 "sys.path_hooks must be a list of " |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1289 "import hooks"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1290 return NULL; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1291 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1292 path_importer_cache = PySys_GetObject("path_importer_cache"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1293 if (path_importer_cache == NULL || |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1294 !PyDict_Check(path_importer_cache)) { |
|
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_importer_cache must be a dict"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1297 return NULL; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1298 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1299 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1300 npath = PyList_Size(path); |
|
1905
61c3c1a2fdb4
Fix various potential buffer overrun problems.
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
1301 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
|
1302 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
|
1303 PyObject *v = PyList_GetItem(path, i); |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
1304 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
|
1305 const char *base; |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
1306 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
|
1307 if (!v) |
|
3674f20ac781
Merge current trunk into p3yk. This includes the PyNumber_Index API change,
Thomas Wouters <thomas@python.org>
parents:
39442
diff
changeset
|
1308 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
|
1309 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
|
1310 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
|
1311 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
|
1312 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
|
1313 } |
|
0020bc784c76
Some changes in preparation of stricter rules about mixing str and bytes.
Guido van Rossum <guido@python.org>
parents:
42862
diff
changeset
|
1314 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
|
1315 continue; |
|
0020bc784c76
Some changes in preparation of stricter rules about mixing str and bytes.
Guido van Rossum <guido@python.org>
parents:
42862
diff
changeset
|
1316 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
|
1317 size = PyString_GET_SIZE(v); |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
1318 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
|
1319 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) { |
|
1905
61c3c1a2fdb4
Fix various potential buffer overrun problems.
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
1320 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
|
1321 } |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
1322 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
|
1323 if (strlen(buf) != len) { |
|
1905
61c3c1a2fdb4
Fix various potential buffer overrun problems.
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
1324 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
|
1325 } |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1326 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1327 /* sys.path_hooks import hook */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1328 if (p_loader != NULL) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1329 PyObject *importer; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1330 |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1331 importer = get_path_importer(path_importer_cache, |
|
41595
2c54763c4504
More coding by random modification.
Guido van Rossum <guido@python.org>
parents:
41587
diff
changeset
|
1332 path_hooks, origv); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1333 if (importer == NULL) { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1334 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
|
1335 } |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1336 /* Note: importer is a borrowed reference */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1337 if (importer != Py_None) { |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1338 PyObject *loader; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1339 loader = PyObject_CallMethod(importer, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1340 "find_module", |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1341 "s", fullname); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1342 if (loader == NULL) |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1343 return NULL; /* error */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1344 if (loader != Py_None) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1345 /* a loader was found */ |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1346 *p_loader = loader; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1347 return &importhookdescr; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1348 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1349 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
|
1350 continue; |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1351 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1352 } |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1353 /* no hook was found, use builtin import */ |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1354 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1355 if (len > 0 && buf[len-1] != SEP |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1356 #ifdef ALTSEP |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1357 && buf[len-1] != ALTSEP |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1358 #endif |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1359 ) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1360 buf[len++] = SEP; |
|
15401
c45c5080c844
Rip out DOS-8x3 support.
Guido van Rossum <guido@python.org>
parents:
14991
diff
changeset
|
1361 strcpy(buf+len, name); |
|
c45c5080c844
Rip out DOS-8x3 support.
Guido van Rossum <guido@python.org>
parents:
14991
diff
changeset
|
1362 len += namelen; |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1363 |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1364 /* 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
|
1365 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
|
1366 #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
|
1367 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
|
1368 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
|
1369 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
|
1370 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
|
1371 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
|
1372 } |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1373 else { |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1374 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
|
1375 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
|
1376 "'%.*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
|
1377 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
|
1378 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
|
1379 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
|
1380 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
|
1381 } |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
37879
diff
changeset
|
1382 } |
|
23879
08475c87d24f
Apply diff2.txt from SF patch http://www.python.org/sf/566999
Walter Dörwald <walter@livinglogic.de>
parents:
23851
diff
changeset
|
1383 } |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1384 #endif |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1385 #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
|
1386 /* 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
|
1387 * 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
|
1388 */ |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1389 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
|
1390 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
|
1391 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
|
1392 #endif /* PYOS_OS2 */ |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1393 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
|
1394 #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
|
1395 /* 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
|
1396 extension) |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1397 * 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
|
1398 * 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
|
1399 * 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
|
1400 */ |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1401 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
|
1402 /* 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
|
1403 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
|
1404 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
|
1405 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
|
1406 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
|
1407 break; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1408 else |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1409 scan++; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1410 } |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1411 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
|
1412 /* 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
|
1413 namelen = 8; |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1414 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
|
1415 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
|
1416 } |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1417 } |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1418 #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
|
1419 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
|
1420 if (Py_VerboseFlag > 1) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
1421 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
|
1422 filemode = fdp->mode; |
|
32878
ca1aeb8ab380
Trimmed trailing whitespace.
Tim Peters <tim.peters@gmail.com>
parents:
32422
diff
changeset
|
1423 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
|
1424 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
|
1425 fp = fopen(buf, filemode); |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1426 if (fp != NULL) { |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1427 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
|
1428 break; |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1429 else { /* continue search */ |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1430 fclose(fp); |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1431 fp = NULL; |
|
16423
5c40113409c3
Steve Majewski's patch #103495, MatchFilename() and find_module()
Barry Warsaw <barry@python.org>
parents:
16311
diff
changeset
|
1432 } |
|
5c40113409c3
Steve Majewski's patch #103495, MatchFilename() and find_module()
Barry Warsaw <barry@python.org>
parents:
16311
diff
changeset
|
1433 } |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1434 #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
|
1435 /* 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
|
1436 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
|
1437 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
|
1438 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
|
1439 #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
|
1440 } |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1441 #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
|
1442 /* 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
|
1443 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
|
1444 { |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1445 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
|
1446 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
|
1447 } |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1448 #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
|
1449 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
|
1450 break; |
|
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
1451 } |
|
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
1452 if (fp == NULL) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1453 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1454 "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
|
1455 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
|
1456 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1457 *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
|
1458 return fdp; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1459 } |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
1460 |
|
33680
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1461 /* 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
|
1462 * 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
|
1463 */ |
|
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1464 struct filedescr * |
|
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1465 _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
|
1466 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
|
1467 { |
|
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1468 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
|
1469 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
|
1470 } |
|
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 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
|
1473 { |
|
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1474 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
|
1475 } |
|
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33542
diff
changeset
|
1476 |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
1477 /* 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
|
1478 * 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
|
1479 * /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
|
1480 * ^ ^ ^ ^ |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1481 * |--------------------- buf ---------------------| |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1482 * |------------------- len ------------------| |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1483 * |------ name -------| |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1484 * |----- namelen -----| |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1485 * 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
|
1486 * 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
|
1487 * |
|
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1488 * 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
|
1489 * 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
|
1490 * |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1491 * 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
|
1492 * 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
|
1493 * 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
|
1494 * |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1495 * 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
|
1496 * 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
|
1497 * 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
|
1498 * 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
|
1499 */ |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1500 |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1501 /* 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
|
1502 * 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
|
1503 */ |
|
34961
4a33c58c319c
Patch #1197318: Cygwin case-sensitive import patch
Jason Tishler <jason@tishler.net>
parents:
33680
diff
changeset
|
1504 #if defined(MS_WINDOWS) |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1505 #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
|
1506 |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1507 #elif defined(DJGPP) |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1508 #include <dir.h> |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1509 |
|
34961
4a33c58c319c
Patch #1197318: Cygwin case-sensitive import patch
Jason Tishler <jason@tishler.net>
parents:
33680
diff
changeset
|
1510 #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
|
1511 #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
|
1512 #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
|
1513 |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1514 #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
|
1515 #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
|
1516 #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
|
1517 #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
|
1518 #include <os2.h> |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1519 #endif |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1520 |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1521 static int |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
1522 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
|
1523 { |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1524 /* 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
|
1525 * match the sequence just above. |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1526 */ |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1527 |
|
34961
4a33c58c319c
Patch #1197318: Cygwin case-sensitive import patch
Jason Tishler <jason@tishler.net>
parents:
33680
diff
changeset
|
1528 /* MS_WINDOWS */ |
|
4a33c58c319c
Patch #1197318: Cygwin case-sensitive import patch
Jason Tishler <jason@tishler.net>
parents:
33680
diff
changeset
|
1529 #if defined(MS_WINDOWS) |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1530 WIN32_FIND_DATA data; |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1531 HANDLE h; |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1532 |
|
18808
a8b1acc7a21f
Add -E command line switch (ignore environment variables like PYTHONHOME
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
18803
diff
changeset
|
1533 if (Py_GETENV("PYTHONCASEOK") != NULL) |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1534 return 1; |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1535 |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1536 h = FindFirstFile(buf, &data); |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1537 if (h == INVALID_HANDLE_VALUE) { |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1538 PyErr_Format(PyExc_NameError, |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1539 "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
|
1540 name, buf); |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1541 return 0; |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1542 } |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1543 FindClose(h); |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1544 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
|
1545 |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1546 /* DJGPP */ |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1547 #elif defined(DJGPP) |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1548 struct ffblk ffblk; |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1549 int done; |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1550 |
|
18808
a8b1acc7a21f
Add -E command line switch (ignore environment variables like PYTHONHOME
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
18803
diff
changeset
|
1551 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
|
1552 return 1; |
|
16828
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 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
|
1555 if (done) { |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1556 PyErr_Format(PyExc_NameError, |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1557 "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
|
1558 name, buf); |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1559 return 0; |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1560 } |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1561 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
|
1562 |
|
34961
4a33c58c319c
Patch #1197318: Cygwin case-sensitive import patch
Jason Tishler <jason@tishler.net>
parents:
33680
diff
changeset
|
1563 /* new-fangled macintosh (macosx) or Cygwin */ |
|
4a33c58c319c
Patch #1197318: Cygwin case-sensitive import patch
Jason Tishler <jason@tishler.net>
parents:
33680
diff
changeset
|
1564 #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
|
1565 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
|
1566 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
|
1567 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
|
1568 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
|
1569 |
|
18808
a8b1acc7a21f
Add -E command line switch (ignore environment variables like PYTHONHOME
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
18803
diff
changeset
|
1570 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
|
1571 return 1; |
|
fa84f9f41092
More fiddling w/ the new-fangled Mac import code.
Tim Peters <tim.peters@gmail.com>
parents:
16893
diff
changeset
|
1572 |
|
16902
f55f35dc5320
More MacOSX fiddling. As noted in a comment, I believe all variations
Tim Peters <tim.peters@gmail.com>
parents:
16896
diff
changeset
|
1573 /* 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
|
1574 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
|
1575 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
|
1576 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
|
1577 } |
|
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1578 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
|
1579 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
|
1580 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
|
1581 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
|
1582 } |
|
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1583 /* 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
|
1584 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
|
1585 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
|
1586 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
|
1587 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
|
1588 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
|
1589 #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
|
1590 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
|
1591 #else |
|
16896
fa84f9f41092
More fiddling w/ the new-fangled Mac import code.
Tim Peters <tim.peters@gmail.com>
parents:
16893
diff
changeset
|
1592 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
|
1593 #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
|
1594 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
|
1595 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
|
1596 (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
|
1597 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
|
1598 } |
|
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 } |
|
16896
fa84f9f41092
More fiddling w/ the new-fangled Mac import code.
Tim Peters <tim.peters@gmail.com>
parents:
16893
diff
changeset
|
1600 (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
|
1601 } |
|
bdcd79873924
In Steven's apparent absence, check in *something* with a non-zero chance
Tim Peters <tim.peters@gmail.com>
parents:
16830
diff
changeset
|
1602 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
|
1603 |
|
22054
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1604 /* OS/2 */ |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1605 #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
|
1606 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
|
1607 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
|
1608 FILEFINDBUF3 ffbuf; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1609 APIRET rc; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1610 |
|
44587
fb5a6330f71b
Merged revisions 59822-59841 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44583
diff
changeset
|
1611 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
|
1612 return 1; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1613 |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1614 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
|
1615 &hdir, |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1616 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
|
1617 &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
|
1618 &srchcnt, |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1619 FIL_STANDARD); |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1620 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
|
1621 return 0; |
|
5cbcfde3ad55
OS/2 EMX port changes (Python part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21886
diff
changeset
|
1622 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
|
1623 |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1624 /* 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
|
1625 #else |
|
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1626 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
|
1627 |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
1628 #endif |
|
7305
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1629 } |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1630 |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1631 |
|
6542
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1632 #ifdef HAVE_STAT |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1633 /* 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
|
1634 static int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
1635 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
|
1636 { |
|
18388
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1637 const size_t save_len = strlen(buf); |
|
13226
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
1638 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
|
1639 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
|
1640 struct stat statbuf; |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1641 |
|
18388
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1642 /* 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
|
1643 * /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
|
1644 * ^ ^ ^ ^ |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1645 * |--------------------- buf ---------------------| |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1646 * |------------------- len ------------------| |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1647 * |------ name -------| |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1648 * |----- namelen -----| |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1649 */ |
|
6542
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1650 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
|
1651 return 0; |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1652 buf[i++] = SEP; |
|
18388
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1653 pname = buf + i; |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1654 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
|
1655 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
|
1656 if (case_ok(buf, |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1657 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
|
1658 8, /* len("__init__") */ |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1659 pname)) { |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1660 buf[save_len] = '\0'; |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1661 return 1; |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1662 } |
|
6542
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1663 } |
|
18388
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1664 i += strlen(pname); |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1665 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
|
1666 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
|
1667 if (case_ok(buf, |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1668 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
|
1669 8, /* len("__init__") */ |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1670 pname)) { |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1671 buf[save_len] = '\0'; |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1672 return 1; |
|
06332b3c4335
SF bug #438295: [Windows] __init__.py cause strange behavior
Tim Peters <tim.peters@gmail.com>
parents:
17642
diff
changeset
|
1673 } |
|
6542
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1674 } |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1675 buf[save_len] = '\0'; |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1676 return 0; |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1677 } |
|
16947
b25131bc6ec7
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16932
diff
changeset
|
1678 |
|
6542
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1679 #endif /* HAVE_STAT */ |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1680 |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
1681 |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13266
diff
changeset
|
1682 static int init_builtin(char *); /* Forward */ |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1683 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1684 /* 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
|
1685 its module object WITH INCREMENTED REFERENCE COUNT */ |
| 86 | 1686 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1687 static PyObject * |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1688 load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader) |
| 86 | 1689 { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1690 PyObject *modules; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1691 PyObject *m; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1692 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
|
1693 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1694 /* 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
|
1695 switch (type) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1696 case PY_SOURCE: |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1697 case PY_COMPILED: |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1698 if (fp == NULL) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1699 PyErr_Format(PyExc_ValueError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1700 "file object required for import (type code %d)", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1701 type); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1702 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1703 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1704 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1705 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1706 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
|
1707 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1708 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
|
1709 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
|
1710 break; |
| 6 | 1711 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1712 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
|
1713 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
|
1714 break; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1715 |
|
11618
528559a0b2f2
Cleanup patches from Greg Stein:
Guido van Rossum <guido@python.org>
parents:
11602
diff
changeset
|
1716 #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
|
1717 case C_EXTENSION: |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1718 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
|
1719 break; |
|
11618
528559a0b2f2
Cleanup patches from Greg Stein:
Guido van Rossum <guido@python.org>
parents:
11602
diff
changeset
|
1720 #endif |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1721 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1722 case PKG_DIRECTORY: |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1723 m = load_package(name, buf); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1724 break; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1725 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1726 case C_BUILTIN: |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1727 case PY_FROZEN: |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1728 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
|
1729 name = buf; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1730 if (type == C_BUILTIN) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1731 err = init_builtin(name); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1732 else |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1733 err = PyImport_ImportFrozenModule(name); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1734 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
|
1735 return NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1736 if (err == 0) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1737 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1738 "Purported %s module %.200s not found", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1739 type == C_BUILTIN ? |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1740 "builtin" : "frozen", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1741 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
|
1742 return NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1743 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1744 modules = PyImport_GetModuleDict(); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1745 m = PyDict_GetItemString(modules, name); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1746 if (m == NULL) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1747 PyErr_Format( |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1748 PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1749 "%s module %.200s not properly initialized", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1750 type == C_BUILTIN ? |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1751 "builtin" : "frozen", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1752 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
|
1753 return NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1754 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1755 Py_INCREF(m); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1756 break; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1757 |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1758 case IMP_HOOK: { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1759 if (loader == NULL) { |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1760 PyErr_SetString(PyExc_ImportError, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1761 "import hook without loader"); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1762 return NULL; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1763 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1764 m = PyObject_CallMethod(loader, "load_module", "s", name); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1765 break; |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1766 } |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
1767 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1768 default: |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1769 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1770 "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
|
1771 name, type); |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
1772 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
|
1773 |
|
141
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1774 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1775 |
| 6 | 1776 return m; |
| 1777 } | |
|
40
f28ac7f621c7
Added reload() functionality.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
1778 |
| 86 | 1779 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1780 /* 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
|
1781 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
|
1782 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
|
1783 |
|
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1784 static int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
1785 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
|
1786 { |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1787 struct _inittab *p; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1788 |
|
20249
1acecc908ee8
Remove a couple of unused local variables (bug #445960, compiler warnings
Greg Ward <gward@python.net>
parents:
19596
diff
changeset
|
1789 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
|
1790 return 1; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1791 |
|
6541
b2dfff06789c
Instead of using _PyImport_Inittab[] directly, use the new "official"
Guido van Rossum <guido@python.org>
parents:
6454
diff
changeset
|
1792 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
|
1793 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
|
1794 if (p->initfunc == NULL) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1795 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1796 "Cannot re-init internal module %.200s", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1797 name); |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
1798 return -1; |
|
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
1799 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1800 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
1801 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
|
1802 (*p->initfunc)(); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1803 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
|
1804 return -1; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1805 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
|
1806 return -1; |
|
141
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1807 return 1; |
|
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1808 } |
|
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1809 } |
|
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1810 return 0; |
|
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1811 } |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
1812 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1813 |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1814 /* 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
|
1815 |
|
3683
ec39264311ff
struct frozen is now struct _frozen and comes from import.h.
Guido van Rossum <guido@python.org>
parents:
3590
diff
changeset
|
1816 static struct _frozen * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
1817 find_frozen(char *name) |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1818 { |
|
3683
ec39264311ff
struct frozen is now struct _frozen and comes from import.h.
Guido van Rossum <guido@python.org>
parents:
3590
diff
changeset
|
1819 struct _frozen *p; |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1820 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1821 for (p = PyImport_FrozenModules; ; p++) { |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1822 if (p->name == NULL) |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1823 return NULL; |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1824 if (strcmp(p->name, name) == 0) |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1825 break; |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1826 } |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1827 return p; |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1828 } |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1829 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1830 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
1831 get_frozen_object(char *name) |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1832 { |
|
3683
ec39264311ff
struct frozen is now struct _frozen and comes from import.h.
Guido van Rossum <guido@python.org>
parents:
3590
diff
changeset
|
1833 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
|
1834 int size; |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1835 |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1836 if (p == NULL) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1837 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1838 "No such frozen object named %.200s", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1839 name); |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1840 return NULL; |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1841 } |
|
20527
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1842 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
|
1843 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
|
1844 "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
|
1845 name); |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1846 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
|
1847 } |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1848 size = p->size; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1849 if (size < 0) |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1850 size = -size; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1851 return PyMarshal_ReadObjectFromString((char *)p->code, size); |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1852 } |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1853 |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1854 /* Initialize a frozen module. |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1855 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
|
1856 an exception set if the initialization failed. |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1857 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
|
1858 |
|
6263e2fd9398
init_frozen non-static, frozenmain.c not in Makefile any more
Guido van Rossum <guido@python.org>
parents:
2270
diff
changeset
|
1859 int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
1860 PyImport_ImportFrozenModule(char *name) |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
1861 { |
|
3683
ec39264311ff
struct frozen is now struct _frozen and comes from import.h.
Guido van Rossum <guido@python.org>
parents:
3590
diff
changeset
|
1862 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
|
1863 PyObject *co; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1864 PyObject *m; |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1865 int ispackage; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1866 int size; |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1867 |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1868 if (p == NULL) |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1869 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
|
1870 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
|
1871 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
|
1872 "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
|
1873 name); |
|
3d3b6b4cb79f
First part of SF patch #416704: More robust freeze, by Toby Dickenson.
Guido van Rossum <guido@python.org>
parents:
20249
diff
changeset
|
1874 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
|
1875 } |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1876 size = p->size; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1877 ispackage = (size < 0); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1878 if (ispackage) |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1879 size = -size; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1880 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
1881 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
|
1882 name, ispackage ? " package" : ""); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1883 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
|
1884 if (co == NULL) |
|
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
1885 return -1; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1886 if (!PyCode_Check(co)) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1887 PyErr_Format(PyExc_TypeError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1888 "frozen object %.200s is not a code object", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1889 name); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1890 goto err_return; |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
1891 } |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1892 if (ispackage) { |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1893 /* 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
|
1894 PyObject *d, *s; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1895 int err; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1896 m = PyImport_AddModule(name); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1897 if (m == NULL) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1898 goto err_return; |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1899 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
|
1900 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
|
1901 if (s == NULL) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1902 goto err_return; |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1903 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
|
1904 Py_DECREF(s); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1905 if (err != 0) |
|
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 } |
|
7232
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
1908 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>"); |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1909 if (m == NULL) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1910 goto err_return; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1911 Py_DECREF(co); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1912 Py_DECREF(m); |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
1913 return 1; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1914 err_return: |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1915 Py_DECREF(co); |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
1916 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
|
1917 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1918 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1919 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1920 /* 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
|
1921 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
|
1922 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1923 PyObject * |
|
35999
9541369b0dca
Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35757
diff
changeset
|
1924 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
|
1925 { |
|
16534
b59f3a1eb123
This modified version of a patch by Thomas Heller allows __import__
Marc-André Lemburg <mal@egenix.com>
parents:
16433
diff
changeset
|
1926 PyObject *pname; |
|
b59f3a1eb123
This modified version of a patch by Thomas Heller allows __import__
Marc-André Lemburg <mal@egenix.com>
parents:
16433
diff
changeset
|
1927 PyObject *result; |
|
b59f3a1eb123
This modified version of a patch by Thomas Heller allows __import__
Marc-André Lemburg <mal@egenix.com>
parents:
16433
diff
changeset
|
1928 |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
1929 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
|
1930 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
|
1931 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
|
1932 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
|
1933 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
|
1934 return result; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1935 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1936 |
|
44441
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1937 /* Import a module without blocking |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1938 * |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1939 * 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
|
1940 * 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
|
1941 * 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
|
1942 * ImportError instead of blocking. |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1943 * |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1944 * 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
|
1945 */ |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1946 PyObject * |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1947 PyImport_ImportModuleNoBlock(const char *name) |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1948 { |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1949 PyObject *result; |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1950 PyObject *modules; |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1951 long me; |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1952 |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1953 /* 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
|
1954 modules = PyImport_GetModuleDict(); |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1955 if (modules == NULL) |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1956 return NULL; |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1957 |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1958 result = PyDict_GetItemString(modules, name); |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1959 if (result != NULL) { |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1960 Py_INCREF(result); |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1961 return result; |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1962 } |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1963 else { |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1964 PyErr_Clear(); |
|
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 |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1967 /* check the import lock |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1968 * 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
|
1969 * takes care of the problem */ |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1970 me = PyThread_get_thread_ident(); |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1971 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
|
1972 /* 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
|
1973 return PyImport_ImportModule(name); |
|
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 else { |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1976 PyErr_Format(PyExc_ImportError, |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1977 "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
|
1978 "is held by another thread.", |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1979 name); |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1980 return NULL; |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
1981 } |
|
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 |
|
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
|
1984 /* 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
|
1985 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
|
1986 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
|
1987 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
|
1988 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
|
1989 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
|
1990 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
|
1991 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
|
1992 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
|
1993 |
|
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
|
1994 /* 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
|
1995 |
|
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
|
1996 static PyObject * |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
1997 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
|
1998 PyObject *fromlist, int level) |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1999 { |
|
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
|
2000 char buf[MAXPATHLEN+1]; |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
2001 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
|
2002 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
|
2003 |
|
44617
a29adc3b0f26
Merged revisions 59864-59882 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44587
diff
changeset
|
2004 if (strchr(name, '/') != NULL |
|
a29adc3b0f26
Merged revisions 59864-59882 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44587
diff
changeset
|
2005 #ifdef MS_WINDOWS |
|
a29adc3b0f26
Merged revisions 59864-59882 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44587
diff
changeset
|
2006 || strchr(name, '\\') != NULL |
|
a29adc3b0f26
Merged revisions 59864-59882 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44587
diff
changeset
|
2007 #endif |
|
a29adc3b0f26
Merged revisions 59864-59882 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44587
diff
changeset
|
2008 ) { |
|
a29adc3b0f26
Merged revisions 59864-59882 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44587
diff
changeset
|
2009 PyErr_SetString(PyExc_ImportError, |
|
a29adc3b0f26
Merged revisions 59864-59882 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44587
diff
changeset
|
2010 "Import by filename is not supported."); |
|
a29adc3b0f26
Merged revisions 59864-59882 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44587
diff
changeset
|
2011 return NULL; |
|
a29adc3b0f26
Merged revisions 59864-59882 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44587
diff
changeset
|
2012 } |
|
a29adc3b0f26
Merged revisions 59864-59882 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44587
diff
changeset
|
2013 |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2014 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
|
2015 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
|
2016 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
|
2017 |
|
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
|
2018 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
|
2019 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
|
2020 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
|
2021 |
|
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
|
2022 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
|
2023 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
|
2024 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
|
2025 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
|
2026 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
|
2027 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
|
2028 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
|
2029 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
|
2030 } |
|
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 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
|
2032 } |
|
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
|
2033 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
|
2034 /* 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
|
2035 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
|
2036 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
|
2037 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
|
2038 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
|
2039 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
|
2040 "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
|
2041 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
|
2042 } |
|
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
|
2043 |
|
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
|
2044 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
|
2045 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
|
2046 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
|
2047 } |
|
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
|
2048 |
|
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
|
2049 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
|
2050 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
|
2051 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
|
2052 } |
|
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 |
|
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 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
|
2055 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
|
2056 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
|
2057 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
|
2058 } |
|
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 |
|
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 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
|
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 |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2063 PyObject * |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2064 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
|
2065 PyObject *fromlist, int level) |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2066 { |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2067 PyObject *result; |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2068 lock_import(); |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2069 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
|
2070 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
|
2071 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
|
2072 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
|
2073 "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
|
2074 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
|
2075 } |
|
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
|
2076 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
|
2077 } |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
2078 |
|
32156
56a4ec066621
starting to add comments to explain what's here
Fred Drake <fdrake@acm.org>
parents:
31851
diff
changeset
|
2079 /* 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
|
2080 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
|
2081 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
|
2082 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
|
2083 |
|
56a4ec066621
starting to add comments to explain what's here
Fred Drake <fdrake@acm.org>
parents:
31851
diff
changeset
|
2084 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
|
2085 the name in *p_buflen. |
|
56a4ec066621
starting to add comments to explain what's here
Fred Drake <fdrake@acm.org>
parents:
31851
diff
changeset
|
2086 |
|
56a4ec066621
starting to add comments to explain what's here
Fred Drake <fdrake@acm.org>
parents:
31851
diff
changeset
|
2087 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
|
2088 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
|
2089 */ |
|
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
|
2090 static PyObject * |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2091 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
|
2092 { |
|
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
|
2093 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
|
2094 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
|
2095 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
|
2096 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
|
2097 |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2098 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
|
2099 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
|
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 if (namestr == NULL) { |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2102 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
|
2103 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
|
2104 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
|
2105 } |
|
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
|
2106 if (pathstr == NULL) { |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2107 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
|
2108 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
|
2109 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
|
2110 } |
|
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
|
2111 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
|
2112 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
|
2113 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
|
2114 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
|
2115 } |
|
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 |
|
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 *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
|
2118 *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
|
2119 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
|
2120 |
|
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 ((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
|
2122 /* __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
|
2123 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
|
2124 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
|
2125 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
|
2126 "__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
|
2127 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
|
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 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
|
2130 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
|
2131 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
|
2132 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
|
2133 "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
|
2134 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
|
2135 } |
|
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 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
|
2137 } |
|
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
|
2138 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
|
2139 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
|
2140 "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
|
2141 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
|
2142 } |
|
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
|
2143 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
|
2144 } 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
|
2145 /* __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
|
2146 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
|
2147 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
|
2148 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
|
2149 |
|
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
|
2150 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
|
2151 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
|
2152 /* __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
|
2153 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
|
2154 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
|
2155 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
|
2156 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
|
2157 "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
|
2158 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
|
2159 } |
|
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 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
|
2161 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
|
2162 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
|
2163 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
|
2164 "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
|
2165 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
|
2166 } |
|
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 } 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
|
2168 /* 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
|
2169 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
|
2170 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
|
2171 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
|
2172 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
|
2173 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
|
2174 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
|
2175 "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
|
2176 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
|
2177 } |
|
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 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
|
2179 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
|
2180 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
|
2181 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
|
2182 "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
|
2183 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
|
2184 } |
|
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 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
|
2186 } |
|
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 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
|
2188 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
|
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 "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
|
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 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
|
2194 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
|
2195 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
|
2196 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
|
2197 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
|
2198 } |
|
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 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
|
2200 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
|
2201 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
|
2202 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
|
2203 "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
|
2204 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
|
2205 } |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2206 } |
|
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
|
2207 } |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2208 while (--level > 0) { |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2209 char *dot = strrchr(buf, '.'); |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2210 if (dot == NULL) { |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2211 PyErr_SetString(PyExc_ValueError, |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
2212 "Attempted relative import beyond " |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
40215
diff
changeset
|
2213 "toplevel package"); |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2214 return NULL; |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2215 } |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2216 *dot = '\0'; |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2217 } |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2218 *p_buflen = strlen(buf); |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2219 |
|
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
|
2220 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
|
2221 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
|
2222 if (parent == NULL) |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2223 PyErr_Format(PyExc_SystemError, |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2224 "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
|
2225 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
|
2226 /* 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
|
2227 - 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
|
2228 - 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
|
2229 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
|
2230 } |
|
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
|
2231 |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2232 /* 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
|
2233 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2234 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
|
2235 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
|
2236 { |
|
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 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
|
2238 char *dot = strchr(name, '.'); |
|
13226
12437deb0680
Trent Mick <trentm@activestate.com>:
Fred Drake <fdrake@acm.org>
parents:
13181
diff
changeset
|
2239 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
|
2240 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
|
2241 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
|
2242 |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2243 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
|
2244 /* 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
|
2245 'from . import' (or '__import__("")')*/ |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2246 Py_INCREF(mod); |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2247 *p_name = NULL; |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2248 return mod; |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2249 } |
|
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2250 |
|
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
|
2251 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
|
2252 *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
|
2253 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
|
2254 } |
|
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
|
2255 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
|
2256 *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
|
2257 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
|
2258 } |
|
8012
2b09a5d26368
Reject empty module names -- otherwise __import__("") does something
Guido van Rossum <guido@python.org>
parents:
7987
diff
changeset
|
2259 if (len == 0) { |
|
2b09a5d26368
Reject empty module names -- otherwise __import__("") does something
Guido van Rossum <guido@python.org>
parents:
7987
diff
changeset
|
2260 PyErr_SetString(PyExc_ValueError, |
|
2b09a5d26368
Reject empty module names -- otherwise __import__("") does something
Guido van Rossum <guido@python.org>
parents:
7987
diff
changeset
|
2261 "Empty module name"); |
|
2b09a5d26368
Reject empty module names -- otherwise __import__("") does something
Guido van Rossum <guido@python.org>
parents:
7987
diff
changeset
|
2262 return NULL; |
|
2b09a5d26368
Reject empty module names -- otherwise __import__("") does something
Guido van Rossum <guido@python.org>
parents:
7987
diff
changeset
|
2263 } |
|
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
|
2264 |
|
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 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
|
2266 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
|
2267 *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
|
2268 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
|
2269 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
|
2270 "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
|
2271 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
|
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 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
|
2274 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
|
2275 *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
|
2276 |
|
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 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
|
2278 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
|
2279 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
|
2280 /* 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
|
2281 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
|
2282 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
|
2283 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
|
2284 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
|
2285 return NULL; |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2286 } |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2287 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
|
2288 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
|
2289 *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
|
2290 } |
|
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
|
2291 } |
|
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
|
2292 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
|
2293 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
|
2294 |
|
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
|
2295 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
|
2296 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
|
2297 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
|
2298 "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
|
2299 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
|
2300 } |
|
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 |
|
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 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
|
2303 } |
|
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 |
|
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 static int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2306 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
|
2307 { |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2308 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
|
2309 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
|
2310 } |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2311 |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
2312 static int |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
2313 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
|
2314 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
|
2315 { |
|
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
|
2316 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
|
2317 |
|
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
|
2318 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
|
2319 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
|
2320 |
|
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
|
2321 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
|
2322 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
|
2323 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
|
2324 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
|
2325 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
|
2326 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
|
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 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
|
2330 } |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2331 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
|
2332 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
|
2333 "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
|
2334 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
|
2335 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
|
2336 } |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2337 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
|
2338 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
|
2339 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
|
2340 /* 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
|
2341 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
|
2342 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
|
2343 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
|
2344 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
|
2345 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
|
2346 else { |
|
31778
c4bae089bfc8
Decref all if ensure_fromlist fails. Fixes #876533.
Martin v. Löwis <martin@v.loewis.de>
parents:
31320
diff
changeset
|
2347 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
|
2348 Py_DECREF(all); |
|
c4bae089bfc8
Decref all if ensure_fromlist fails. Fixes #876533.
Martin v. Löwis <martin@v.loewis.de>
parents:
31320
diff
changeset
|
2349 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
|
2350 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
|
2351 } |
|
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
|
2352 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
|
2353 } |
|
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
|
2354 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
|
2355 if (!hasit) { |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2356 PyObject *item8; |
|
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2357 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
|
2358 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
|
2359 char *p; |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2360 if (!Py_FileSystemDefaultEncoding) { |
|
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2361 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
|
2362 PyUnicode_GetSize(item), |
|
42057
3473a685e5e7
Revert 55876. Use PyUnicode_AsEncodedString instead.
Martin v. Löwis <martin@v.loewis.de>
parents:
42013
diff
changeset
|
2363 NULL); |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2364 } else { |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43762
diff
changeset
|
2365 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
|
2366 Py_FileSystemDefaultEncoding, NULL); |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2367 } |
|
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2368 if (!item8) { |
|
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2369 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
|
2370 return 0; |
|
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2371 } |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43762
diff
changeset
|
2372 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
|
2373 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
|
2374 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
|
2375 "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
|
2376 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
|
2377 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
|
2378 } |
|
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
|
2379 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
|
2380 *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
|
2381 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
|
2382 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
|
2383 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
|
2384 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
|
2385 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
|
2386 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
|
2387 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
|
2388 } |
|
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 } |
|
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 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
|
2391 } |
|
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 |
|
6375
b68185d94777
Remove unreachable "return 1" at end of ensure_fromlist().
Guido van Rossum <guido@python.org>
parents:
6305
diff
changeset
|
2393 /* 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
|
2394 } |
|
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 |
|
29501
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2396 static int |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2397 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
|
2398 PyObject *modules) |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2399 { |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2400 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
|
2401 return 1; |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2402 /* 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
|
2403 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
|
2404 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
|
2405 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
|
2406 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
|
2407 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
|
2408 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
|
2409 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
|
2410 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
|
2411 return 1; |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2412 } |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2413 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
|
2414 /* 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
|
2415 * 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
|
2416 * builtin name */ |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2417 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
|
2418 if (!dict) |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2419 return 0; |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2420 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
|
2421 return 0; |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2422 } |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2423 else { |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2424 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
|
2425 return 0; |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2426 } |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2427 return 1; |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2428 } |
|
6c6b321d1d10
Don't use the module object setattr when importing submodules. Instead,
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
28392
diff
changeset
|
2429 |
|
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
|
2430 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2431 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
|
2432 { |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
2433 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
|
2434 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
|
2435 |
|
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
|
2436 /* 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
|
2437 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
|
2438 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
|
2439 */ |
|
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 |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
2441 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
|
2442 Py_INCREF(m); |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
2443 } |
|
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
2444 else { |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
2445 PyObject *path, *loader = NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2446 char buf[MAXPATHLEN+1]; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2447 struct filedescr *fdp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2448 FILE *fp = NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2449 |
|
8374
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
2450 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
|
2451 path = NULL; |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
2452 else { |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
2453 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
|
2454 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
|
2455 PyErr_Clear(); |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
2456 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
|
2457 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
|
2458 } |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
2459 } |
|
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
|
2460 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2461 buf[0] = '\0'; |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
2462 fdp = find_module(fullname, subname, path, buf, MAXPATHLEN+1, |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
2463 &fp, &loader); |
|
8613
e3d3bbbd93f3
Fix two smal memory leaks discovered by Vadim Chugunov.
Guido van Rossum <guido@python.org>
parents:
8544
diff
changeset
|
2464 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
|
2465 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
|
2466 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
|
2467 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
|
2468 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
|
2469 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
|
2470 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
|
2471 } |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
2472 m = load_module(fullname, fp, buf, fdp->type, loader); |
|
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
2473 Py_XDECREF(loader); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2474 if (fp) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2475 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
|
2476 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
|
2477 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
|
2478 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
|
2479 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2480 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2481 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2482 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2483 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2484 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2485 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2486 /* 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
|
2487 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
|
2488 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2489 PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2490 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
|
2491 { |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2492 PyInterpreterState *interp = PyThreadState_Get()->interp; |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2493 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
|
2494 PyObject *modules = PyImport_GetModuleDict(); |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2495 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
|
2496 char *name, *subname; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2497 char buf[MAXPATHLEN+1]; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2498 struct filedescr *fdp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2499 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
|
2500 PyObject *newm; |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2501 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2502 if (modules_reloading == NULL) { |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2503 Py_FatalError("PyImport_ReloadModule: " |
|
41969
9d02a4adf574
Merged revisions 55631-55794 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41666
diff
changeset
|
2504 "no modules_reloading dictionary!"); |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2505 return NULL; |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2506 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2507 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2508 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
|
2509 PyErr_SetString(PyExc_TypeError, |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2510 "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
|
2511 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2512 } |
|
42859
036598de4660
Fix a couple of warnings
Neal Norwitz <nnorwitz@gmail.com>
parents:
42775
diff
changeset
|
2513 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
|
2514 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
|
2515 return NULL; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
2516 if (m != PyDict_GetItemString(modules, name)) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2517 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2518 "reload(): module %.200s not in sys.modules", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2519 name); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2520 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2521 } |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2522 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
|
2523 if (existing_m != NULL) { |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2524 /* 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
|
2525 being reloaded. */ |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2526 Py_INCREF(existing_m); |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2527 return existing_m; |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2528 } |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2529 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
|
2530 return NULL; |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2531 |
|
6250
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2532 subname = strrchr(name, '.'); |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2533 if (subname == NULL) |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2534 subname = name; |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2535 else { |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2536 PyObject *parentname, *parent; |
|
43762
de3b63f8b17b
Applied patch #1379 with a minor tweak.
Christian Heimes <christian@cheimes.de>
parents:
43712
diff
changeset
|
2537 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
|
2538 if (parentname == NULL) { |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2539 imp_modules_reloading_clear(); |
|
6250
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2540 return NULL; |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2541 } |
|
6250
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2542 parent = PyDict_GetItem(modules, parentname); |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2543 if (parent == NULL) { |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2544 PyErr_Format(PyExc_ImportError, |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2545 "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
|
2546 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
|
2547 Py_DECREF(parentname); |
|
41969
9d02a4adf574
Merged revisions 55631-55794 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41666
diff
changeset
|
2548 imp_modules_reloading_clear(); |
|
6250
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2549 return NULL; |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2550 } |
|
35542
81259009ba2c
Patch #1290454: Fix reload() error message when parent module is not in
Georg Brandl <georg@python.org>
parents:
35008
diff
changeset
|
2551 Py_DECREF(parentname); |
|
6250
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2552 subname++; |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2553 path = PyObject_GetAttrString(parent, "__path__"); |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2554 if (path == NULL) |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2555 PyErr_Clear(); |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
2556 } |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2557 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
|
2558 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
|
2559 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
|
2560 |
|
d74ddcff0724
Fix for SF bug #1029475 : reload() doesn't work with PEP 302 loaders.
Phillip J. Eby <pje@telecommunity.com>
parents:
33539
diff
changeset
|
2561 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
|
2562 Py_XDECREF(loader); |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2563 imp_modules_reloading_clear(); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2564 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
|
2565 } |
|
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 |
|
d74ddcff0724
Fix for SF bug #1029475 : reload() doesn't work with PEP 302 loaders.
Phillip J. Eby <pje@telecommunity.com>
parents:
33539
diff
changeset
|
2567 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
|
2568 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
|
2569 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2570 if (fp) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2571 fclose(fp); |
|
32882
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
2572 if (newm == NULL) { |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
2573 /* 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
|
2574 * 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
|
2575 * 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
|
2576 * 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
|
2577 */ |
|
331e60d8ce6d
PyImport_ExecCodeModuleEx(): remove module from sys.modules in error cases.
Tim Peters <tim.peters@gmail.com>
parents:
32879
diff
changeset
|
2578 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
|
2579 } |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41253
diff
changeset
|
2580 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
|
2581 return newm; |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
2582 } |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2583 |
|
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2584 |
|
6028
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2585 /* 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
|
2586 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
|
2587 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
|
2588 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
|
2589 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
|
2590 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
|
2591 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
|
2592 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
|
2593 |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2594 PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2595 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
|
2596 { |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2597 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
|
2598 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
|
2599 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
|
2600 PyObject *globals = NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2601 PyObject *import = NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2602 PyObject *builtins = NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2603 PyObject *r = NULL; |
|
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 /* Initialize constant string objects */ |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2606 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
|
2607 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
|
2608 if (import_str == NULL) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2609 return NULL; |
|
42013
cd125fe83051
Make identifiers str (not str8) objects throughout.
Martin v. Löwis <martin@v.loewis.de>
parents:
41969
diff
changeset
|
2610 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
|
2611 if (builtins_str == NULL) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2612 return NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2613 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
|
2614 if (silly_list == NULL) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2615 return NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2616 } |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2617 |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2618 /* 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
|
2619 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
|
2620 if (globals != NULL) { |
| 9431 | 2621 Py_INCREF(globals); |
|
6028
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2622 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
|
2623 if (builtins == NULL) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2624 goto err; |
|
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 else { |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2627 /* 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
|
2628 PyErr_Clear(); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2629 |
|
44098
0889daf6d0d9
#1535: rename __builtin__ module to builtins.
Georg Brandl <georg@python.org>
parents:
43897
diff
changeset
|
2630 builtins = PyImport_ImportModuleLevel("builtins", |
|
36712
5c36c222e7ca
SF patch #1438387, PEP 328: relative and absolute imports.
Thomas Wouters <thomas@python.org>
parents:
36695
diff
changeset
|
2631 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
|
2632 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
|
2633 return NULL; |
|
6028
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2634 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
|
2635 if (globals == NULL) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2636 goto err; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2637 } |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2638 |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2639 /* 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
|
2640 if (PyDict_Check(builtins)) { |
|
16986
c5a417e8d84c
Add some spaces around the "=" in assignments.
Fred Drake <fdrake@acm.org>
parents:
16947
diff
changeset
|
2641 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
|
2642 if (import == NULL) |
|
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
18808
diff
changeset
|
2643 PyErr_SetObject(PyExc_KeyError, import_str); |
|
09df3254b49d
Merge of descr-branch back into trunk.
Tim Peters <tim.peters@gmail.com>
parents:
18808
diff
changeset
|
2644 } |
|
6028
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2645 else |
|
16986
c5a417e8d84c
Add some spaces around the "=" in assignments.
Fred Drake <fdrake@acm.org>
parents:
16947
diff
changeset
|
2646 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
|
2647 if (import == NULL) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2648 goto err; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2649 |
|
44441
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
2650 /* 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
|
2651 * Always use absolute import here. */ |
|
b91ca87e6f32
Merged revisions 59666-59679 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44349
diff
changeset
|
2652 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
|
2653 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
|
2654 |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2655 err: |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2656 Py_XDECREF(globals); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2657 Py_XDECREF(builtins); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2658 Py_XDECREF(import); |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
2659 |
|
6028
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2660 return r; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
2661 } |
|
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 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2664 /* 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
|
2665 importing modules. |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2666 */ |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2667 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2668 static PyObject * |
|
27917
c346d095791d
Remove PyArg_ParseTuple() for methods which take no args,
Neal Norwitz <nnorwitz@gmail.com>
parents:
27853
diff
changeset
|
2669 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
|
2670 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2671 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
|
2672 |
| 12543 | 2673 buf[0] = (char) ((pyc_magic >> 0) & 0xff); |
| 2674 buf[1] = (char) ((pyc_magic >> 8) & 0xff); | |
| 2675 buf[2] = (char) ((pyc_magic >> 16) & 0xff); | |
| 2676 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
|
2677 |
|
42428
81ade0144247
SF patch# 1766592 by Paul Colomiets.
Guido van Rossum <guido@python.org>
parents:
42347
diff
changeset
|
2678 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
|
2679 } |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2680 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2681 static PyObject * |
|
27917
c346d095791d
Remove PyArg_ParseTuple() for methods which take no args,
Neal Norwitz <nnorwitz@gmail.com>
parents:
27853
diff
changeset
|
2682 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
|
2683 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2684 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
|
2685 struct filedescr *fdp; |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2686 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2687 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
|
2688 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
|
2689 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2690 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
|
2691 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
|
2692 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
|
2693 if (item == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2694 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
|
2695 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2696 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2697 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
|
2698 Py_DECREF(list); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2699 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
|
2700 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2701 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2702 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
|
2703 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2704 return list; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2705 } |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2706 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2707 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2708 call_find_module(char *name, PyObject *path) |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2709 { |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13266
diff
changeset
|
2710 extern int fclose(FILE *); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2711 PyObject *fob, *ret; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2712 struct filedescr *fdp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2713 char pathname[MAXPATHLEN+1]; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2714 FILE *fp = NULL; |
|
43632
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2715 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
|
2716 char *found_encoding = NULL; |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
2717 char *encoding = NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2718 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2719 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
|
2720 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
|
2721 path = NULL; |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
2722 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
|
2723 if (fdp == NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2724 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2725 if (fp != NULL) { |
|
43632
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2726 fd = fileno(fp); |
|
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2727 if (fd != -1) |
|
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2728 fd = dup(fd); |
|
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2729 fclose(fp); |
|
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2730 fp = NULL; |
|
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2731 } |
|
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2732 if (fd != -1) { |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
2733 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
|
2734 /* 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
|
2735 memory. */ |
|
43632
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2736 found_encoding = PyTokenizer_FindEncoding(fd); |
|
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2737 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
|
2738 encoding = (found_encoding != NULL) ? found_encoding : |
|
43605
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
2739 (char*)PyUnicode_GetDefaultEncoding(); |
|
a2bb76d11d66
Patch 1267 by Christian Heimes.
Guido van Rossum <guido@python.org>
parents:
43569
diff
changeset
|
2740 } |
|
43632
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2741 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
|
2742 (char*)encoding, NULL, NULL, 1); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2743 if (fob == NULL) { |
|
43632
0067a6ab4854
Issue 1267, continued.
Guido van Rossum <guido@python.org>
parents:
43608
diff
changeset
|
2744 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
|
2745 PyMem_FREE(found_encoding); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2746 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2747 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2748 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2749 else { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2750 fob = Py_None; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2751 Py_INCREF(fob); |
|
16828
3b05212c1616
Implement PEP 235: Import on Case-Insensitive Platforms.
Tim Peters <tim.peters@gmail.com>
parents:
16712
diff
changeset
|
2752 } |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2753 ret = Py_BuildValue("Os(ssi)", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2754 fob, pathname, fdp->suffix, fdp->mode, fdp->type); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2755 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
|
2756 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
|
2757 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2758 return ret; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2759 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2760 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2761 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2762 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
|
2763 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2764 char *name; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2765 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
|
2766 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
|
2767 return NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2768 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
|
2769 } |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2770 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2771 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2772 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
|
2773 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2774 char *name; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2775 int ret; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2776 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
|
2777 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
|
2778 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2779 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
|
2780 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
|
2781 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2782 if (ret == 0) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2783 Py_INCREF(Py_None); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2784 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
|
2785 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2786 m = PyImport_AddModule(name); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2787 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
|
2788 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2789 } |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2790 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2791 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2792 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
|
2793 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2794 char *name; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2795 int ret; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2796 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
|
2797 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
|
2798 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2799 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
|
2800 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
|
2801 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2802 if (ret == 0) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2803 Py_INCREF(Py_None); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2804 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
|
2805 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2806 m = PyImport_AddModule(name); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2807 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
|
2808 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2809 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2810 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2811 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2812 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
|
2813 { |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
2814 char *name; |
| 3139 | 2815 |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11618
diff
changeset
|
2816 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
|
2817 return NULL; |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
2818 return get_frozen_object(name); |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
2819 } |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
2820 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2821 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2822 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
|
2823 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2824 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
|
2825 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
|
2826 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
|
2827 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
|
2828 } |
|
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2829 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2830 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2831 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
|
2832 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2833 char *name; |
|
8544
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
2834 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
|
2835 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
|
2836 return NULL; |
|
8544
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
2837 p = find_frozen(name); |
|
22866
a561ff1b4ffa
Return bools from functions named is_<whatever>().
Guido van Rossum <guido@python.org>
parents:
22705
diff
changeset
|
2838 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
|
2839 } |
|
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 static FILE * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2842 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
|
2843 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2844 FILE *fp; |
|
42071
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2845 if (mode[0] == 'U') |
|
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2846 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
|
2847 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
|
2848 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
|
2849 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2850 else { |
|
42071
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2851 int fd = PyObject_AsFileDescriptor(fob); |
|
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2852 if (fd == -1) |
|
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2853 return NULL; |
|
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2854 /* 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
|
2855 (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
|
2856 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
|
2857 } |
|
42071
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2858 if (fp == NULL) |
|
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2859 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
|
2860 return fp; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2861 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2862 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2863 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2864 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
|
2865 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2866 char *name; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2867 char *pathname; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2868 PyObject *fob = NULL; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2869 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
|
2870 FILE *fp; |
|
42071
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2871 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
|
2872 &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
|
2873 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2874 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
|
2875 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
|
2876 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2877 m = load_compiled_module(name, pathname, fp); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2878 if (fob == NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2879 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
|
2880 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2881 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2882 |
|
11618
528559a0b2f2
Cleanup patches from Greg Stein:
Guido van Rossum <guido@python.org>
parents:
11602
diff
changeset
|
2883 #ifdef HAVE_DYNAMIC_LOADING |
|
528559a0b2f2
Cleanup patches from Greg Stein:
Guido van Rossum <guido@python.org>
parents:
11602
diff
changeset
|
2884 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2885 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2886 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
|
2887 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2888 char *name; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2889 char *pathname; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2890 PyObject *fob = NULL; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2891 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
|
2892 FILE *fp = NULL; |
|
42071
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2893 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
|
2894 &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
|
2895 return NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2896 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
|
2897 fp = get_file(pathname, fob, "r"); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2898 if (fp == NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2899 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2900 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2901 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
|
2902 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
|
2903 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2904 |
|
11618
528559a0b2f2
Cleanup patches from Greg Stein:
Guido van Rossum <guido@python.org>
parents:
11602
diff
changeset
|
2905 #endif /* HAVE_DYNAMIC_LOADING */ |
|
528559a0b2f2
Cleanup patches from Greg Stein:
Guido van Rossum <guido@python.org>
parents:
11602
diff
changeset
|
2906 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2907 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2908 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
|
2909 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2910 char *name; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2911 char *pathname; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2912 PyObject *fob = NULL; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2913 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
|
2914 FILE *fp; |
|
42071
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2915 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
|
2916 &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
|
2917 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2918 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
|
2919 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
|
2920 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2921 m = load_source_module(name, pathname, fp); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2922 if (fob == NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2923 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
|
2924 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2925 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2926 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2927 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2928 imp_load_module(PyObject *self, PyObject *args) |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2929 { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2930 char *name; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2931 PyObject *fob; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2932 char *pathname; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2933 char *suffix; /* Unused */ |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2934 char *mode; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2935 int type; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2936 FILE *fp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2937 |
|
11882
dc65c5f6ad7c
Massive patch by Skip Montanaro to add ":name" to as many
Guido van Rossum <guido@python.org>
parents:
11618
diff
changeset
|
2938 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
|
2939 &name, &fob, &pathname, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2940 &suffix, &mode, &type)) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2941 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
|
2942 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
|
2943 /* 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
|
2944 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
|
2945 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
|
2946 |
|
fba57e40f547
imp_load_module(): correct and comment the sense of the test for '+'
Guido van Rossum <guido@python.org>
parents:
23585
diff
changeset
|
2947 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
|
2948 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
|
2949 "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
|
2950 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
|
2951 } |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2952 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2953 if (fob == Py_None) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2954 fp = NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2955 else { |
|
42071
825041fc8e2c
Rip out the file object's implementation.
Guido van Rossum <guido@python.org>
parents:
42057
diff
changeset
|
2956 fp = get_file(NULL, fob, mode); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2957 if (fp == NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2958 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2959 } |
|
26885
54aacb87beda
PEP 302 + zipimport:
Just van Rossum <just@letterror.com>
parents:
26796
diff
changeset
|
2960 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
|
2961 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2962 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2963 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2964 imp_load_package(PyObject *self, PyObject *args) |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2965 { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2966 char *name; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2967 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
|
2968 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
|
2969 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2970 return load_package(name, pathname); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2971 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2972 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2973 static PyObject * |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
2974 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
|
2975 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2976 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
|
2977 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
|
2978 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2979 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
|
2980 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2981 |
|
44567
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
2982 static PyObject * |
|
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
2983 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
|
2984 { |
|
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
2985 return PyImport_ReloadModule(v); |
|
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
2986 } |
|
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
2987 |
|
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
2988 PyDoc_STRVAR(doc_reload, |
|
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
2989 "reload(module) -> module\n\ |
|
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
2990 \n\ |
|
cdc285bd0efb
Issue #1762972: Readded the reload() function as imp.reload()
Christian Heimes <christian@cheimes.de>
parents:
44441
diff
changeset
|
2991 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
|
2992 |
|
6305
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2993 /* Doc strings */ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2994 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
2995 PyDoc_STRVAR(doc_imp, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
2996 "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
|
2997 __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
|
2998 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
2999 PyDoc_STRVAR(doc_find_module, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3000 "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
|
3001 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
|
3002 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
|
3003 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
|
3004 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
|
3005 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3006 PyDoc_STRVAR(doc_load_module, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3007 "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
|
3008 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
|
3009 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
|
3010 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3011 PyDoc_STRVAR(doc_get_magic, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3012 "get_magic() -> string\n\ |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3013 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
|
3014 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3015 PyDoc_STRVAR(doc_get_suffixes, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3016 "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
|
3017 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
|
3018 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
|
3019 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3020 PyDoc_STRVAR(doc_new_module, |
|
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3021 "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
|
3022 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
|
3023 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
|
3024 |
|
23832
ed1ba37a46b7
Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents:
23586
diff
changeset
|
3025 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
|
3026 "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
|
3027 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
|
3028 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
|
3029 |
|
27852
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
3030 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
|
3031 "acquire_lock() -> None\n\ |
|
27853
5620b0786271
Cleanup from patch #683257:
Neal Norwitz <nnorwitz@gmail.com>
parents:
27852
diff
changeset
|
3032 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
|
3033 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
|
3034 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
|
3035 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
|
3036 |
|
4b75a0b76857
Provide access to the import lock, fixing SF bug #580952. This is
Guido van Rossum <guido@python.org>
parents:
27357
diff
changeset
|
3037 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
|
3038 "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
|
3039 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
|
3040 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
|
3041 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
3042 static PyMethodDef imp_methods[] = { |
|
27917
c346d095791d
Remove PyArg_ParseTuple() for methods which take no args,
Neal Norwitz <nnorwitz@gmail.com>
parents:
27853
diff
changeset
|
3043 {"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
|
3044 {"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
|
3045 {"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
|
3046 {"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
|
3047 {"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
|
3048 {"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
|
3049 {"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
|
3050 {"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
|
3051 {"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
|
3052 /* 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
|
3053 {"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
|
3054 {"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
|
3055 {"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
|
3056 {"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
|
3057 {"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
|
3058 {"load_compiled", imp_load_compiled, METH_VARARGS}, |
|
11618
528559a0b2f2
Cleanup patches from Greg Stein:
Guido van Rossum <guido@python.org>
parents:
11602
diff
changeset
|
3059 #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
|
3060 {"load_dynamic", imp_load_dynamic, METH_VARARGS}, |
|
11618
528559a0b2f2
Cleanup patches from Greg Stein:
Guido van Rossum <guido@python.org>
parents:
11602
diff
changeset
|
3061 #endif |
|
22705
8703d2052339
Use symbolic METH_VARARGS instead of 1 for ml_flags
Neal Norwitz <nnorwitz@gmail.com>
parents:
22651
diff
changeset
|
3062 {"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
|
3063 {"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
|
3064 {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
|
3065 }; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
3066 |
|
8822
bd47ee068b83
Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
8613
diff
changeset
|
3067 static int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
3068 setint(PyObject *d, char *name, int value) |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3069 { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3070 PyObject *v; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3071 int err; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3072 |
|
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
|
3073 v = PyLong_FromLong((long)value); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3074 err = PyDict_SetItemString(d, name, v); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3075 Py_XDECREF(v); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3076 return err; |
|
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 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3079 typedef struct { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3080 PyObject_HEAD |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3081 } NullImporter; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3082 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3083 static int |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3084 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
|
3085 { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3086 char *path; |
|
43789
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3087 Py_ssize_t pathlen; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3088 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3089 if (!_PyArg_NoKeywords("NullImporter()", kwds)) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3090 return -1; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3091 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3092 if (!PyArg_ParseTuple(args, "s:NullImporter", |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3093 &path)) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3094 return -1; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3095 |
|
43789
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3096 pathlen = strlen(path); |
|
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3097 if (pathlen == 0) { |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3098 PyErr_SetString(PyExc_ImportError, "empty pathname"); |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3099 return -1; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3100 } else { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3101 struct stat statbuf; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3102 int rv; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3103 |
|
43790
dba2491cf717
Cosmetic changes to Christian's patch r58903.
Guido van Rossum <guido@python.org>
parents:
43789
diff
changeset
|
3104 rv = stat(path, &statbuf); |
|
43789
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3105 #ifdef MS_WINDOWS |
|
43790
dba2491cf717
Cosmetic changes to Christian's patch r58903.
Guido van Rossum <guido@python.org>
parents:
43789
diff
changeset
|
3106 /* 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
|
3107 * 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
|
3108 * 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
|
3109 */ |
|
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3110 if (rv != 0 && pathlen <= MAXPATHLEN && |
|
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3111 (path[pathlen-1] == '/' || path[pathlen-1] == '\\')) { |
|
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3112 char mangled[MAXPATHLEN+1]; |
|
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3113 |
|
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3114 strcpy(mangled, path); |
|
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3115 mangled[pathlen-1] = '\0'; |
|
1247d24b287b
Patch for bug http://bugs.python.org/issue1293
Christian Heimes <christian@cheimes.de>
parents:
43777
diff
changeset
|
3116 rv = stat(mangled, &statbuf); |
|
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 #endif |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3119 if (rv == 0) { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3120 /* it exists */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3121 if (S_ISDIR(statbuf.st_mode)) { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3122 /* it's a directory */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3123 PyErr_SetString(PyExc_ImportError, |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3124 "existing directory"); |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3125 return -1; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3126 } |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3127 } |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3128 } |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3129 return 0; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3130 } |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3131 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3132 static PyObject * |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3133 NullImporter_find_module(NullImporter *self, PyObject *args) |
|
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 Py_RETURN_NONE; |
|
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 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3138 static PyMethodDef NullImporter_methods[] = { |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3139 {"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
|
3140 "Always return None" |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3141 }, |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3142 {NULL} /* Sentinel */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3143 }; |
|
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 |
|
43897
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
3146 PyTypeObject PyNullImporter_Type = { |
|
42334
e70cdce0e8b2
Merged revisions 56467-56482 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
42071
diff
changeset
|
3147 PyVarObject_HEAD_INIT(NULL, 0) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3148 "imp.NullImporter", /*tp_name*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3149 sizeof(NullImporter), /*tp_basicsize*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3150 0, /*tp_itemsize*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3151 0, /*tp_dealloc*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3152 0, /*tp_print*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3153 0, /*tp_getattr*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3154 0, /*tp_setattr*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3155 0, /*tp_compare*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3156 0, /*tp_repr*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3157 0, /*tp_as_number*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3158 0, /*tp_as_sequence*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3159 0, /*tp_as_mapping*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3160 0, /*tp_hash */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3161 0, /*tp_call*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3162 0, /*tp_str*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3163 0, /*tp_getattro*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3164 0, /*tp_setattro*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3165 0, /*tp_as_buffer*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3166 Py_TPFLAGS_DEFAULT, /*tp_flags*/ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3167 "Null importer object", /* tp_doc */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3168 0, /* tp_traverse */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3169 0, /* tp_clear */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3170 0, /* tp_richcompare */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3171 0, /* tp_weaklistoffset */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3172 0, /* tp_iter */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3173 0, /* tp_iternext */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3174 NullImporter_methods, /* tp_methods */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3175 0, /* tp_members */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3176 0, /* tp_getset */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3177 0, /* tp_base */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3178 0, /* tp_dict */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3179 0, /* tp_descr_get */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3180 0, /* tp_descr_set */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3181 0, /* tp_dictoffset */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3182 (initproc)NullImporter_init, /* tp_init */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3183 0, /* tp_alloc */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3184 PyType_GenericNew /* tp_new */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3185 }; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3186 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3187 |
|
30311
f003e48f562d
Bug #794140: cygwin builds do not embed
Jason Tishler <jason@tishler.net>
parents:
29812
diff
changeset
|
3188 PyMODINIT_FUNC |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
3189 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
|
3190 { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3191 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
|
3192 |
|
43897
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
3193 if (PyType_Ready(&PyNullImporter_Type) < 0) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3194 goto failure; |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38669
diff
changeset
|
3195 |
|
6305
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
3196 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
|
3197 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
|
3198 if (m == NULL) |
|
1af7f719ed28
Check return result from Py_InitModule*(). This API can fail.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36065
diff
changeset
|
3199 goto failure; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
3200 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
|
3201 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
|
3202 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
|
3203 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3204 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
|
3205 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
|
3206 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
|
3207 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
|
3208 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
|
3209 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
|
3210 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
|
3211 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
|
3212 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
|
3213 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
|
3214 |
|
43897
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
3215 Py_INCREF(&PyNullImporter_Type); |
|
41f7c13ef161
Merged revisions 59005-59040 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
43790
diff
changeset
|
3216 PyModule_AddObject(m, "NullImporter", (PyObject *)&PyNullImporter_Type); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3217 failure: |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
3218 ; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
3219 } |
|
8330
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3220 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3221 |
|
12576
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12543
diff
changeset
|
3222 /* 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
|
3223 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
|
3224 *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
|
3225 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
|
3226 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3227 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
|
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 int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
3230 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
|
3231 { |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3232 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
|
3233 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
|
3234 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
|
3235 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3236 /* 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
|
3237 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
|
3238 ; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3239 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
|
3240 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
|
3241 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
|
3242 ; |
|
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 /* 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
|
3245 p = our_copy; |
|
1c7c2dd1beb1
Vladimir Marangozov's long-awaited malloc restructuring.
Guido van Rossum <guido@python.org>
parents:
12543
diff
changeset
|
3246 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
|
3247 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
|
3248 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
|
3249 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3250 /* 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
|
3251 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
|
3252 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
|
3253 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
|
3254 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
|
3255 |
|
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 0; |
|
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 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3259 /* 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
|
3260 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3261 int |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13552
diff
changeset
|
3262 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
|
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 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
|
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 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
|
3267 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3268 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
|
3269 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
|
3270 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
3271 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
|
3272 } |
|
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
|
3273 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
3274 #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
|
3275 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36988
diff
changeset
|
3276 #endif |
