annotate Python/importdl.c @ 5389:5a9706965a4e legacy-trunk

Avoid some potential (though unlikely) sprintf buffer overflows.
author Guido van Rossum <guido@python.org>
date Wed, 30 Apr 1997 19:07:54 +0000
parents 5880384d7c71
children 487ad0327ae1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 /***********************************************************
2062
d0d0a69b5ca3 Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents: 2052
diff changeset
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
d0d0a69b5ca3 Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents: 2052
diff changeset
3 The Netherlands.
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 All Rights Reserved
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4291
diff changeset
7 Permission to use, copy, modify, and distribute this software and its
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4291
diff changeset
8 documentation for any purpose and without fee is hereby granted,
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
9 provided that the above copyright notice appear in all copies and that
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4291
diff changeset
10 both that copyright notice and this permission notice appear in
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 supporting documentation, and that the names of Stichting Mathematisch
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4291
diff changeset
12 Centrum or CWI or Corporation for National Research Initiatives or
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4291
diff changeset
13 CNRI not be used in advertising or publicity pertaining to
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4291
diff changeset
14 distribution of the software without specific, written prior
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4291
diff changeset
15 permission.
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
16
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4291
diff changeset
17 While CWI is the initial source for this software, a modified version
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4291
diff changeset
18 is made available by the Corporation for National Research Initiatives
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4291
diff changeset
19 (CNRI) at the Internet address ftp://ftp.python.org.
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4291
diff changeset
20
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4291
diff changeset
21 STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4291
diff changeset
22 REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4291
diff changeset
23 MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4291
diff changeset
24 CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4291
diff changeset
25 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4291
diff changeset
26 PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4291
diff changeset
27 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 4291
diff changeset
28 PERFORMANCE OF THIS SOFTWARE.
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
29
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 ******************************************************************/
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
31
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 /* Support for dynamic loading of extension modules */
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 /* If no dynamic linking is supported, this file still generates some code! */
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
34
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
35 #include "Python.h"
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 #include "osdefs.h"
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 #include "importdl.h"
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
38
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 /* Explanation of some of the the various #defines used by dynamic linking...
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
40
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 symbol -- defined for:
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
42
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 DYNAMIC_LINK -- any kind of dynamic linking
2733
dc64df7f1ad6 re-enabled NeXT dynamic linking (#ifdef NeXT)
Guido van Rossum <guido@python.org>
parents: 2729
diff changeset
44 USE_RLD -- NeXT dynamic linking
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 USE_DL -- Jack's dl for IRIX 4 or GNU dld with emulation for Jack's dl
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
46 USE_SHLIB -- SunOS or IRIX 5 (SVR4?) shared libraries
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 _AIX -- AIX style dynamic linking
4291
1427d61f1307 Rationalized MS ifdefs
Guido van Rossum <guido@python.org>
parents: 4068
diff changeset
48 MS_WIN32 -- Windows NT style dynamic linking (using DLLs)
1427d61f1307 Rationalized MS ifdefs
Guido van Rossum <guido@python.org>
parents: 4068
diff changeset
49 MS_WIN16 -- Windows 16-bit dynamic linking (using DLLs)
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 _DL_FUNCPTR_DEFINED -- if the typedef dl_funcptr has been defined
2729
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
51 USE_MAC_DYNAMIC_LOADING -- Mac CFM shared libraries
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 SHORT_EXT -- short extension for dynamic module, e.g. ".so"
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 LONG_EXT -- long extension, e.g. "module.so"
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 hpux -- HP-UX Dynamic Linking - defined by the compiler
2199
f4671b681ab9 added changes for NetBSD dynamic linking; removed shared linking for NeXT
Guido van Rossum <guido@python.org>
parents: 2094
diff changeset
55 __NetBSD__ -- NetBSD shared libraries (not quite SVR4 compatible)
3420
013bbe4ef943 __FreeBSD__ shared libraries
Guido van Rossum <guido@python.org>
parents: 3327
diff changeset
56 __FreeBSD__ -- FreeBSD shared libraries
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
57
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 (The other WITH_* symbols are used only once, to set the
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 appropriate symbols.)
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 */
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
61
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 /* Configure dynamic linking */
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
63
3327
49f7a4a1f0f6 __hpux -> hpux equivalence
Guido van Rossum <guido@python.org>
parents: 3224
diff changeset
64 #ifdef __hpux
4042
6b4d0f1a0ae9 Many little fixes:
Guido van Rossum <guido@python.org>
parents: 3988
diff changeset
65 #ifndef hpux
3327
49f7a4a1f0f6 __hpux -> hpux equivalence
Guido van Rossum <guido@python.org>
parents: 3224
diff changeset
66 #define hpux
49f7a4a1f0f6 __hpux -> hpux equivalence
Guido van Rossum <guido@python.org>
parents: 3224
diff changeset
67 #endif
4042
6b4d0f1a0ae9 Many little fixes:
Guido van Rossum <guido@python.org>
parents: 3988
diff changeset
68 #endif
3327
49f7a4a1f0f6 __hpux -> hpux equivalence
Guido van Rossum <guido@python.org>
parents: 3224
diff changeset
69
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 #ifdef hpux
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
71 #define DYNAMIC_LINK
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 #include <errno.h>
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 typedef void (*dl_funcptr)();
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
74 #define _DL_FUNCPTR_DEFINED 1
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 #define SHORT_EXT ".sl"
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 #define LONG_EXT "module.sl"
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 #endif
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
78
3420
013bbe4ef943 __FreeBSD__ shared libraries
Guido van Rossum <guido@python.org>
parents: 3327
diff changeset
79 #if defined(__NetBSD__) || defined(__FreeBSD__)
2199
f4671b681ab9 added changes for NetBSD dynamic linking; removed shared linking for NeXT
Guido van Rossum <guido@python.org>
parents: 2094
diff changeset
80 #define DYNAMIC_LINK
f4671b681ab9 added changes for NetBSD dynamic linking; removed shared linking for NeXT
Guido van Rossum <guido@python.org>
parents: 2094
diff changeset
81 #define USE_SHLIB
f4671b681ab9 added changes for NetBSD dynamic linking; removed shared linking for NeXT
Guido van Rossum <guido@python.org>
parents: 2094
diff changeset
82
f4671b681ab9 added changes for NetBSD dynamic linking; removed shared linking for NeXT
Guido van Rossum <guido@python.org>
parents: 2094
diff changeset
83 #define dlerror() "error in dynamic linking"
f4671b681ab9 added changes for NetBSD dynamic linking; removed shared linking for NeXT
Guido van Rossum <guido@python.org>
parents: 2094
diff changeset
84 #endif
f4671b681ab9 added changes for NetBSD dynamic linking; removed shared linking for NeXT
Guido van Rossum <guido@python.org>
parents: 2094
diff changeset
85
4291
1427d61f1307 Rationalized MS ifdefs
Guido van Rossum <guido@python.org>
parents: 4068
diff changeset
86 #ifdef MS_WINDOWS /* i.e. MS_WIN32 or MS_WIN16 */
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 #define DYNAMIC_LINK
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 #include <windows.h>
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 typedef FARPROC dl_funcptr;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
90 #define _DL_FUNCPTR_DEFINED
2085
8921a2881fc7 NT dlls have .pyd extension instead of .dll
Guido van Rossum <guido@python.org>
parents: 2062
diff changeset
91 #define SHORT_EXT ".pyd"
3491
16a5f6048461 Under NT, change "long" sharedlib extension to ".dll". (Mark H.)
Guido van Rossum <guido@python.org>
parents: 3420
diff changeset
92 #define LONG_EXT ".dll"
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
93 #endif
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
94
2733
dc64df7f1ad6 re-enabled NeXT dynamic linking (#ifdef NeXT)
Guido van Rossum <guido@python.org>
parents: 2729
diff changeset
95 #ifdef NeXT
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 #define DYNAMIC_LINK
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
97 #define USE_RLD
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
98 #endif
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
99
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
100 #ifdef WITH_SGI_DL
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
101 #define DYNAMIC_LINK
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
102 #define USE_DL
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
103 #endif
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
104
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
105 #ifdef WITH_DL_DLD
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
106 #define DYNAMIC_LINK
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
107 #define USE_DL
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
108 #endif
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
109
2729
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
110 #ifdef USE_MAC_DYNAMIC_LOADING
2331
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
111 #define DYNAMIC_LINK
2374
397478bca0c4 ported to 68K Mac; changed suffix to .slb
Guido van Rossum <guido@python.org>
parents: 2331
diff changeset
112 #define SHORT_EXT ".slb"
4042
6b4d0f1a0ae9 Many little fixes:
Guido van Rossum <guido@python.org>
parents: 3988
diff changeset
113 #ifdef __CFM68K__
6b4d0f1a0ae9 Many little fixes:
Guido van Rossum <guido@python.org>
parents: 3988
diff changeset
114 #define LONG_EXT ".CFM68K.slb"
6b4d0f1a0ae9 Many little fixes:
Guido van Rossum <guido@python.org>
parents: 3988
diff changeset
115 #else
6b4d0f1a0ae9 Many little fixes:
Guido van Rossum <guido@python.org>
parents: 3988
diff changeset
116 #define LONG_EXT ".ppc.slb"
6b4d0f1a0ae9 Many little fixes:
Guido van Rossum <guido@python.org>
parents: 3988
diff changeset
117 #endif
2331
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
118 #ifndef _DL_FUNCPTR_DEFINED
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
119 typedef void (*dl_funcptr)();
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
120 #endif
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
121 #endif
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
122
4068
4c54ecfadce5 Don't require <dlfcn.h> -- rely on existence of dlopen().
Guido van Rossum <guido@python.org>
parents: 4042
diff changeset
123 #if !defined(DYNAMIC_LINK) && (defined(HAVE_DLOPEN) || defined(M_UNIX))
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 #define DYNAMIC_LINK
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 #define USE_SHLIB
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 #endif
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
127
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 #ifdef _AIX
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
129 #define DYNAMIC_LINK
3907
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
130 #define SHORT_EXT ".so"
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
131 #define LONG_EXT "module.so"
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
132 #include <sys/ldr.h>
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
133 typedef void (*dl_funcptr)();
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
134 #define _DL_FUNCPTR_DEFINED
3907
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
135 static int aix_getoldmodules(void **);
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
136 static int aix_bindnewmodule(void *, void *);
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
137 static void aix_loaderror(char *);
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
138 #endif
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
139
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
140 #ifdef DYNAMIC_LINK
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
141
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
142 #ifdef USE_SHLIB
2724
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
143 #include <sys/types.h>
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
144 #include <sys/stat.h>
3420
013bbe4ef943 __FreeBSD__ shared libraries
Guido van Rossum <guido@python.org>
parents: 3327
diff changeset
145 #if defined(__NetBSD__) || defined(__FreeBSD__)
2199
f4671b681ab9 added changes for NetBSD dynamic linking; removed shared linking for NeXT
Guido van Rossum <guido@python.org>
parents: 2094
diff changeset
146 #include <nlist.h>
f4671b681ab9 added changes for NetBSD dynamic linking; removed shared linking for NeXT
Guido van Rossum <guido@python.org>
parents: 2094
diff changeset
147 #include <link.h>
f4671b681ab9 added changes for NetBSD dynamic linking; removed shared linking for NeXT
Guido van Rossum <guido@python.org>
parents: 2094
diff changeset
148 #else
4068
4c54ecfadce5 Don't require <dlfcn.h> -- rely on existence of dlopen().
Guido van Rossum <guido@python.org>
parents: 4042
diff changeset
149 #ifdef HAVE_DLFCN_H
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
150 #include <dlfcn.h>
2199
f4671b681ab9 added changes for NetBSD dynamic linking; removed shared linking for NeXT
Guido van Rossum <guido@python.org>
parents: 2094
diff changeset
151 #endif
4068
4c54ecfadce5 Don't require <dlfcn.h> -- rely on existence of dlopen().
Guido van Rossum <guido@python.org>
parents: 4042
diff changeset
152 #endif
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
153 #ifndef _DL_FUNCPTR_DEFINED
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
154 typedef void (*dl_funcptr)();
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
155 #endif
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
156 #ifndef RTLD_LAZY
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
157 #define RTLD_LAZY 1
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
158 #endif
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
159 #define SHORT_EXT ".so"
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
160 #define LONG_EXT "module.so"
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
161 #endif /* USE_SHLIB */
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
162
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
163 #if defined(USE_DL) || defined(hpux)
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
164 #include "dl.h"
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
165 #endif
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
166
2729
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
167 #ifdef USE_MAC_DYNAMIC_LOADING
3224
2fb398ab3e6a Added missing include for <Aliases.h>
Jack Jansen <jack.jansen@cwi.nl>
parents: 2843
diff changeset
168 #include <Aliases.h>
2331
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
169 #include <CodeFragments.h>
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
170 #ifdef SYMANTEC__CFM68K__ /* Really an older version of Universal Headers */
2374
397478bca0c4 ported to 68K Mac; changed suffix to .slb
Guido van Rossum <guido@python.org>
parents: 2331
diff changeset
171 #define CFragConnectionID ConnectionID
397478bca0c4 ported to 68K Mac; changed suffix to .slb
Guido van Rossum <guido@python.org>
parents: 2331
diff changeset
172 #define kLoadCFrag 0x01
397478bca0c4 ported to 68K Mac; changed suffix to .slb
Guido van Rossum <guido@python.org>
parents: 2331
diff changeset
173 #endif
2331
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
174 #include <Files.h>
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
175 #include "macdefs.h"
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
176 #include "macglue.h"
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
177 #endif
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
178
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
179 #ifdef USE_RLD
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
180 #include <mach-o/rld.h>
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
181 #define FUNCNAME_PATTERN "_init%.200s"
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
182 #ifndef _DL_FUNCPTR_DEFINED
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
183 typedef void (*dl_funcptr)();
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
184 #endif
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
185 #endif /* USE_RLD */
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
186
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
187 extern char *Py_GetProgramName();
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
188
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
189 #ifndef FUNCNAME_PATTERN
3420
013bbe4ef943 __FreeBSD__ shared libraries
Guido van Rossum <guido@python.org>
parents: 3327
diff changeset
190 #if defined(__hp9000s300) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__BORLANDC__)
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
191 #define FUNCNAME_PATTERN "_init%.200s"
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
192 #else
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
193 #define FUNCNAME_PATTERN "init%.200s"
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
194 #endif
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
195 #endif
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
196
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
197 #if !defined(SHORT_EXT) && !defined(LONG_EXT)
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
198 #define SHORT_EXT ".o"
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
199 #define LONG_EXT "module.o"
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
200 #endif /* !SHORT_EXT && !LONG_EXT */
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
201
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
202 #endif /* DYNAMIC_LINK */
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
203
2374
397478bca0c4 ported to 68K Mac; changed suffix to .slb
Guido van Rossum <guido@python.org>
parents: 2331
diff changeset
204 /* Max length of module suffix searched for -- accommodates "module.slb" */
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
205 #ifndef MAXSUFFIXSIZE
2331
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
206 #define MAXSUFFIXSIZE 12
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
207 #endif
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
208
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
209 /* Pass it on to import.c */
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
210 int _PyImport_MaxSuffixSize = MAXSUFFIXSIZE;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
211
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
212 struct filedescr _PyImport_Filetab[] = {
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
213 #ifdef SHORT_EXT
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
214 {SHORT_EXT, "rb", C_EXTENSION},
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
215 #endif /* !SHORT_EXT */
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
216 #ifdef LONG_EXT
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
217 {LONG_EXT, "rb", C_EXTENSION},
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
218 #endif /* !LONG_EXT */
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
219 {".py", "r", PY_SOURCE},
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
220 {".pyc", "rb", PY_COMPILED},
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
221 {0, 0}
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
222 };
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
223
3898
94c6bf6fd7f4 If NO_DYNAMIC_LINK is defined, load_dynamic_module() will always fail.
Guido van Rossum <guido@python.org>
parents: 3732
diff changeset
224 #ifdef NO_DYNAMIC_LINK
94c6bf6fd7f4 If NO_DYNAMIC_LINK is defined, load_dynamic_module() will always fail.
Guido van Rossum <guido@python.org>
parents: 3732
diff changeset
225 #undef DYNAMIC_LINK
94c6bf6fd7f4 If NO_DYNAMIC_LINK is defined, load_dynamic_module() will always fail.
Guido van Rossum <guido@python.org>
parents: 3732
diff changeset
226 #endif
94c6bf6fd7f4 If NO_DYNAMIC_LINK is defined, load_dynamic_module() will always fail.
Guido van Rossum <guido@python.org>
parents: 3732
diff changeset
227
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
228 PyObject *
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
229 _PyImport_LoadDynamicModule(name, pathname, fp)
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
230 char *name;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
231 char *pathname;
2724
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
232 FILE *fp;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
233 {
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
234 #ifndef DYNAMIC_LINK
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
235 PyErr_SetString(PyExc_ImportError,
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
236 "dynamically linked modules not supported");
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
237 return NULL;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
238 #else
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
239 PyObject *m, *d, *s;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
240 char funcname[258];
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
241 dl_funcptr p = NULL;
2724
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
242 #ifdef USE_SHLIB
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
243 static struct {
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
244 dev_t dev;
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
245 ino_t ino;
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
246 void *handle;
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
247 } handles[128];
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
248 static int nhandles = 0;
3988
efb3a5a2cdea Insert "./" in front of pathname when it contains no '/' (if USE_SHLIB)
Guido van Rossum <guido@python.org>
parents: 3907
diff changeset
249 char pathbuf[260];
efb3a5a2cdea Insert "./" in front of pathname when it contains no '/' (if USE_SHLIB)
Guido van Rossum <guido@python.org>
parents: 3907
diff changeset
250 if (strchr(pathname, '/') == NULL) {
efb3a5a2cdea Insert "./" in front of pathname when it contains no '/' (if USE_SHLIB)
Guido van Rossum <guido@python.org>
parents: 3907
diff changeset
251 /* Prefix bare filename with "./" */
efb3a5a2cdea Insert "./" in front of pathname when it contains no '/' (if USE_SHLIB)
Guido van Rossum <guido@python.org>
parents: 3907
diff changeset
252 sprintf(pathbuf, "./%-.255s", pathname);
efb3a5a2cdea Insert "./" in front of pathname when it contains no '/' (if USE_SHLIB)
Guido van Rossum <guido@python.org>
parents: 3907
diff changeset
253 pathname = pathbuf;
efb3a5a2cdea Insert "./" in front of pathname when it contains no '/' (if USE_SHLIB)
Guido van Rossum <guido@python.org>
parents: 3907
diff changeset
254 }
2724
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
255 #endif
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
256 sprintf(funcname, FUNCNAME_PATTERN, name);
2724
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
257 #ifdef USE_SHLIB
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
258 if (fp != NULL) {
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
259 int i;
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
260 struct stat statb;
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
261 fstat(fileno(fp), &statb);
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
262 for (i = 0; i < nhandles; i++) {
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
263 if (statb.st_dev == handles[i].dev &&
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
264 statb.st_ino == handles[i].ino) {
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
265 p = (dl_funcptr) dlsym(handles[i].handle,
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
266 funcname);
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
267 goto got_it;
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
268 }
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
269 }
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
270 if (nhandles < 128) {
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
271 handles[nhandles].dev = statb.st_dev;
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
272 handles[nhandles].ino = statb.st_ino;
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
273 }
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
274 }
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
275 #endif /* USE_SHLIB */
2729
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
276 #ifdef USE_MAC_DYNAMIC_LOADING
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
277 /*
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
278 ** Dynamic loading of CFM shared libraries on the Mac. The
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
279 ** code has become more convoluted than it was, because we
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
280 ** want to be able to put multiple modules in a single
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
281 ** file. For this reason, we have to determine the fragment
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
282 ** name, and we cannot use the library entry point but we have
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
283 ** to locate the correct init routine "by hand".
2729
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
284 */
2331
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
285 {
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
286 FSSpec libspec;
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
287 CFragConnectionID connID;
2374
397478bca0c4 ported to 68K Mac; changed suffix to .slb
Guido van Rossum <guido@python.org>
parents: 2331
diff changeset
288 Ptr mainAddr;
397478bca0c4 ported to 68K Mac; changed suffix to .slb
Guido van Rossum <guido@python.org>
parents: 2331
diff changeset
289 Str255 errMessage;
397478bca0c4 ported to 68K Mac; changed suffix to .slb
Guido van Rossum <guido@python.org>
parents: 2331
diff changeset
290 OSErr err;
2729
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
291 Boolean isfolder, didsomething;
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
292 char buf[512];
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
293 Str63 fragname;
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
294 Ptr symAddr;
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
295 CFragSymbolClass class;
2331
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
296
2729
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
297 /* First resolve any aliases to find the real file */
2331
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
298 (void)FSMakeFSSpec(0, 0, Pstring(pathname), &libspec);
2729
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
299 err = ResolveAliasFile(&libspec, 1, &isfolder, &didsomething);
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
300 if ( err ) {
5389
5a9706965a4e Avoid some potential (though unlikely) sprintf buffer overflows.
Guido van Rossum <guido@python.org>
parents: 5373
diff changeset
301 sprintf(buf, "%.255s: %.200s",
5a9706965a4e Avoid some potential (though unlikely) sprintf buffer overflows.
Guido van Rossum <guido@python.org>
parents: 5373
diff changeset
302 pathname, PyMac_StrError(err));
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
303 PyErr_SetString(PyExc_ImportError, buf);
2729
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
304 return NULL;
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
305 }
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
306 /* Next, determine the fragment name,
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
307 by stripping '.slb' and 'module' */
2729
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
308 memcpy(fragname+1, libspec.name+1, libspec.name[0]);
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
309 fragname[0] = libspec.name[0];
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
310 if( strncmp((char *)(fragname+1+fragname[0]-4),
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
311 ".slb", 4) == 0 )
2729
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
312 fragname[0] -= 4;
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
313 if ( strncmp((char *)(fragname+1+fragname[0]-6),
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
314 "module", 6) == 0 )
2729
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
315 fragname[0] -= 6;
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
316 /* Load the fragment
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
317 (or return the connID if it is already loaded */
2729
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
318 err = GetDiskFragment(&libspec, 0, 0, fragname,
2374
397478bca0c4 ported to 68K Mac; changed suffix to .slb
Guido van Rossum <guido@python.org>
parents: 2331
diff changeset
319 kLoadCFrag, &connID, &mainAddr,
397478bca0c4 ported to 68K Mac; changed suffix to .slb
Guido van Rossum <guido@python.org>
parents: 2331
diff changeset
320 errMessage);
2331
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
321 if ( err ) {
5389
5a9706965a4e Avoid some potential (though unlikely) sprintf buffer overflows.
Guido van Rossum <guido@python.org>
parents: 5373
diff changeset
322 sprintf(buf, "%.*s: %.200s",
5a9706965a4e Avoid some potential (though unlikely) sprintf buffer overflows.
Guido van Rossum <guido@python.org>
parents: 5373
diff changeset
323 errMessage[0], errMessage+1,
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
324 PyMac_StrError(err));
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
325 PyErr_SetString(PyExc_ImportError, buf);
2331
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
326 return NULL;
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
327 }
2729
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
328 /* Locate the address of the correct init function */
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
329 err = FindSymbol(connID, Pstring(funcname), &symAddr, &class);
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
330 if ( err ) {
5389
5a9706965a4e Avoid some potential (though unlikely) sprintf buffer overflows.
Guido van Rossum <guido@python.org>
parents: 5373
diff changeset
331 sprintf(buf, "%s: %.200s",
5a9706965a4e Avoid some potential (though unlikely) sprintf buffer overflows.
Guido van Rossum <guido@python.org>
parents: 5373
diff changeset
332 funcname, PyMac_StrError(err));
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
333 PyErr_SetString(PyExc_ImportError, buf);
2729
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
334 return NULL;
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
335 }
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
336 p = (dl_funcptr)symAddr;
2331
242dd5ed3b08 Added code to import dynamic modules using mac CFM.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2199
diff changeset
337 }
2729
5af6db1f6c0c Mac dynloading is now enabled by USE_MAC_DYNAMIC_LOADING.
Jack Jansen <jack.jansen@cwi.nl>
parents: 2724
diff changeset
338 #endif /* USE_MAC_DYNAMIC_LOADING */
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
339 #ifdef USE_SHLIB
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
340 {
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
341 #ifdef RTLD_NOW
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
342 /* RTLD_NOW: resolve externals now
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
343 (i.e. core dump now if some are missing) */
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
344 void *handle = dlopen(pathname, RTLD_NOW);
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
345 #else
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
346 void *handle;
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
347 if (Py_VerboseFlag)
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
348 printf("dlopen(\"%s\", %d);\n", pathname, RTLD_LAZY);
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
349 handle = dlopen(pathname, RTLD_LAZY);
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
350 #endif /* RTLD_NOW */
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
351 if (handle == NULL) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
352 PyErr_SetString(PyExc_ImportError, dlerror());
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
353 return NULL;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
354 }
2724
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
355 if (fp != NULL && nhandles < 128)
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
356 handles[nhandles++].handle = handle;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
357 p = (dl_funcptr) dlsym(handle, funcname);
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
358 }
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
359 #endif /* USE_SHLIB */
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
360 #ifdef _AIX
3907
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
361 /*
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
362 -- Invoke load() with L_NOAUTODEFER leaving the imported symbols
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
363 -- of the shared module unresolved. Thus we have to resolve them
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
364 -- explicitely with loadbind. The new module is loaded, then we
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
365 -- resolve its symbols using the list of already loaded modules
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
366 -- (only those that belong to the python executable). Get these
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
367 -- with loadquery(L_GETINFO).
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
368 */
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
369 {
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
370 static void *staticmodlistptr = NULL;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
371
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
372 if (!staticmodlistptr)
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
373 if (aix_getoldmodules(&staticmodlistptr) == -1)
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
374 return NULL;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
375 p = (dl_funcptr) load(pathname, L_NOAUTODEFER, 0);
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
376 if (p == NULL) {
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
377 aix_loaderror(pathname);
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
378 return NULL;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
379 }
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
380 if (aix_bindnewmodule((void *)p, staticmodlistptr) == -1) {
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
381 aix_loaderror(pathname);
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
382 return NULL;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
383 }
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
384 }
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
385 #endif /* _AIX */
4291
1427d61f1307 Rationalized MS ifdefs
Guido van Rossum <guido@python.org>
parents: 4068
diff changeset
386 #ifdef MS_WIN32
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
387 {
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
388 HINSTANCE hDLL;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
389 hDLL = LoadLibrary(pathname);
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
390 if (hDLL==NULL){
2843
8d92a3bb9c1f NT specific change for nicer error message (Mark H)
Guido van Rossum <guido@python.org>
parents: 2793
diff changeset
391 char errBuf[256];
8d92a3bb9c1f NT specific change for nicer error message (Mark H)
Guido van Rossum <guido@python.org>
parents: 2793
diff changeset
392 unsigned int errorCode;
8d92a3bb9c1f NT specific change for nicer error message (Mark H)
Guido van Rossum <guido@python.org>
parents: 2793
diff changeset
393
8d92a3bb9c1f NT specific change for nicer error message (Mark H)
Guido van Rossum <guido@python.org>
parents: 2793
diff changeset
394 /* Get an error string from Win32 error code */
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
395 char theInfo[256]; /* Pointer to error text
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
396 from system */
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
397 int theLength; /* Length of error text */
2843
8d92a3bb9c1f NT specific change for nicer error message (Mark H)
Guido van Rossum <guido@python.org>
parents: 2793
diff changeset
398
8d92a3bb9c1f NT specific change for nicer error message (Mark H)
Guido van Rossum <guido@python.org>
parents: 2793
diff changeset
399 errorCode = GetLastError();
8d92a3bb9c1f NT specific change for nicer error message (Mark H)
Guido van Rossum <guido@python.org>
parents: 2793
diff changeset
400
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
401 theLength = FormatMessage(
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
402 FORMAT_MESSAGE_FROM_SYSTEM, /* flags */
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
403 NULL, /* message source */
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
404 errorCode, /* the message (error) ID */
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
405 0, /* default language environment */
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
406 (LPTSTR) theInfo, /* the buffer */
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
407 sizeof(theInfo), /* the buffer size */
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
408 NULL); /* no additional format args. */
2843
8d92a3bb9c1f NT specific change for nicer error message (Mark H)
Guido van Rossum <guido@python.org>
parents: 2793
diff changeset
409
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
410 /* Problem: could not get the error message.
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
411 This should not happen if called correctly. */
2843
8d92a3bb9c1f NT specific change for nicer error message (Mark H)
Guido van Rossum <guido@python.org>
parents: 2793
diff changeset
412 if (theLength == 0) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
413 sprintf(errBuf,
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
414 "DLL load failed with error code %d",
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
415 errorCode);
2843
8d92a3bb9c1f NT specific change for nicer error message (Mark H)
Guido van Rossum <guido@python.org>
parents: 2793
diff changeset
416 } else {
8d92a3bb9c1f NT specific change for nicer error message (Mark H)
Guido van Rossum <guido@python.org>
parents: 2793
diff changeset
417 int len;
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
418 /* For some reason a \r\n
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
419 is appended to the text */
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
420 if (theLength >= 2 &&
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
421 theInfo[theLength-2] == '\r' &&
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
422 theInfo[theLength-1] == '\n') {
2843
8d92a3bb9c1f NT specific change for nicer error message (Mark H)
Guido van Rossum <guido@python.org>
parents: 2793
diff changeset
423 theLength -= 2;
8d92a3bb9c1f NT specific change for nicer error message (Mark H)
Guido van Rossum <guido@python.org>
parents: 2793
diff changeset
424 theInfo[theLength] = '\0';
8d92a3bb9c1f NT specific change for nicer error message (Mark H)
Guido van Rossum <guido@python.org>
parents: 2793
diff changeset
425 }
8d92a3bb9c1f NT specific change for nicer error message (Mark H)
Guido van Rossum <guido@python.org>
parents: 2793
diff changeset
426 strcpy(errBuf, "DLL load failed: ");
8d92a3bb9c1f NT specific change for nicer error message (Mark H)
Guido van Rossum <guido@python.org>
parents: 2793
diff changeset
427 len = strlen(errBuf);
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
428 strncpy(errBuf+len, theInfo,
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
429 sizeof(errBuf)-len);
2843
8d92a3bb9c1f NT specific change for nicer error message (Mark H)
Guido van Rossum <guido@python.org>
parents: 2793
diff changeset
430 errBuf[sizeof(errBuf)-1] = '\0';
8d92a3bb9c1f NT specific change for nicer error message (Mark H)
Guido van Rossum <guido@python.org>
parents: 2793
diff changeset
431 }
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
432 PyErr_SetString(PyExc_ImportError, errBuf);
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
433 return NULL;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
434 }
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
435 p = GetProcAddress(hDLL, funcname);
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
436 }
4291
1427d61f1307 Rationalized MS ifdefs
Guido van Rossum <guido@python.org>
parents: 4068
diff changeset
437 #endif /* MS_WIN32 */
1427d61f1307 Rationalized MS ifdefs
Guido van Rossum <guido@python.org>
parents: 4068
diff changeset
438 #ifdef MS_WIN16
3591
1c18f90636fb removed verbose decl; added win3.1 dynamic linking.
Guido van Rossum <guido@python.org>
parents: 3491
diff changeset
439 {
1c18f90636fb removed verbose decl; added win3.1 dynamic linking.
Guido van Rossum <guido@python.org>
parents: 3491
diff changeset
440 HINSTANCE hDLL;
1c18f90636fb removed verbose decl; added win3.1 dynamic linking.
Guido van Rossum <guido@python.org>
parents: 3491
diff changeset
441 hDLL = LoadLibrary(pathname);
1c18f90636fb removed verbose decl; added win3.1 dynamic linking.
Guido van Rossum <guido@python.org>
parents: 3491
diff changeset
442 if (hDLL < HINSTANCE_ERROR){
1c18f90636fb removed verbose decl; added win3.1 dynamic linking.
Guido van Rossum <guido@python.org>
parents: 3491
diff changeset
443 char errBuf[256];
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
444 sprintf(errBuf,
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
445 "DLL load failed with error code %d", hDLL);
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
446 PyErr_SetString(PyExc_ImportError, errBuf);
3591
1c18f90636fb removed verbose decl; added win3.1 dynamic linking.
Guido van Rossum <guido@python.org>
parents: 3491
diff changeset
447 return NULL;
1c18f90636fb removed verbose decl; added win3.1 dynamic linking.
Guido van Rossum <guido@python.org>
parents: 3491
diff changeset
448 }
1c18f90636fb removed verbose decl; added win3.1 dynamic linking.
Guido van Rossum <guido@python.org>
parents: 3491
diff changeset
449 p = GetProcAddress(hDLL, funcname);
1c18f90636fb removed verbose decl; added win3.1 dynamic linking.
Guido van Rossum <guido@python.org>
parents: 3491
diff changeset
450 }
4291
1427d61f1307 Rationalized MS ifdefs
Guido van Rossum <guido@python.org>
parents: 4068
diff changeset
451 #endif /* MS_WIN16 */
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
452 #ifdef USE_DL
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
453 p = dl_loadmod(Py_GetProgramName(), pathname, funcname);
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
454 #endif /* USE_DL */
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
455 #ifdef USE_RLD
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
456 {
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
457 NXStream *errorStream;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
458 struct mach_header *new_header;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
459 const char *filenames[2];
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
460 long ret;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
461 unsigned long ptr;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
462
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
463 errorStream = NXOpenMemory(NULL, 0, NX_WRITEONLY);
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
464 filenames[0] = pathname;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
465 filenames[1] = NULL;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
466 ret = rld_load(errorStream, &new_header,
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
467 filenames, NULL);
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
468
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
469 /* extract the error messages for the exception */
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
470 if(!ret) {
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
471 char *streamBuf;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
472 int len, maxLen;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
473
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
474 NXPutc(errorStream, (char)0);
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
475
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
476 NXGetMemoryBuffer(errorStream,
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
477 &streamBuf, &len, &maxLen);
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
478 PyErr_SetString(PyExc_ImportError, streamBuf);
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
479 }
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
480
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
481 if(ret && rld_lookup(errorStream, funcname, &ptr))
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
482 p = (dl_funcptr) ptr;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
483
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
484 NXCloseMemory(errorStream, NX_FREEBUFFER);
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
485
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
486 if(!ret)
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
487 return NULL;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
488 }
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
489 #endif /* USE_RLD */
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
490 #ifdef hpux
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
491 {
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
492 shl_t lib;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
493 int flags;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
494
4593
72d0dfb919fe Some extra flags that an HPUX user wants me to add.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
495 flags = BIND_FIRST | BIND_DEFERRED;
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
496 if (Py_VerboseFlag)
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
497 {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
498 flags = DYNAMIC_PATH | BIND_FIRST | BIND_IMMEDIATE |
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
499 BIND_NONFATAL | BIND_VERBOSE;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
500 printf("shl_load %s\n",pathname);
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
501 }
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
502 lib = shl_load(pathname, flags, 0);
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
503 if (lib == NULL)
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
504 {
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
505 char buf[256];
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
506 if (Py_VerboseFlag)
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
507 perror(pathname);
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
508 sprintf(buf, "Failed to load %.200s", pathname);
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
509 PyErr_SetString(PyExc_ImportError, buf);
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
510 return NULL;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
511 }
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
512 if (Py_VerboseFlag)
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
513 printf("shl_findsym %s\n", funcname);
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
514 shl_findsym(&lib, funcname, TYPE_UNDEFINED, (void *) &p);
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
515 if (p == NULL && Py_VerboseFlag)
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
516 perror(funcname);
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
517 }
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
518 #endif /* hpux */
5287
5af766a1b531 Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents: 4593
diff changeset
519 #ifdef USE_SHLIB
2724
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
520 got_it:
5287
5af766a1b531 Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents: 4593
diff changeset
521 #endif
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
522 if (p == NULL) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
523 PyErr_SetString(PyExc_ImportError,
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
524 "dynamic module does not define init function");
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
525 return NULL;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
526 }
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
527 (*p)();
5287
5af766a1b531 Tweaks to keep the Microsoft compiler quier.
Guido van Rossum <guido@python.org>
parents: 4593
diff changeset
528 /* XXX Need check for err_occurred() here */
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
529
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
530 m = PyDict_GetItemString(import_modules, name);
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
531 if (m == NULL) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
532 if (PyErr_Occurred() == NULL)
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
533 PyErr_SetString(PyExc_SystemError,
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
534 "dynamic module not initialized properly");
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
535 return NULL;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
536 }
4042
6b4d0f1a0ae9 Many little fixes:
Guido van Rossum <guido@python.org>
parents: 3988
diff changeset
537 /* Remember the filename as the __file__ attribute */
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
538 d = PyModule_GetDict(m);
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
539 s = PyString_FromString(pathname);
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
540 if (s == NULL || PyDict_SetItemString(d, "__file__", s) != 0)
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
541 PyErr_Clear(); /* Not important enough to report */
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
542 Py_XDECREF(s);
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
543 if (Py_VerboseFlag)
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
544 fprintf(stderr,
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
545 "import %s # dynamically loaded from %s\n",
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
546 name, pathname);
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
547 Py_INCREF(m);
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
548 return m;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
549 #endif /* DYNAMIC_LINK */
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
550 }
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
551
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
552
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
553 #ifdef _AIX
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
554
3907
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
555 #include <ctype.h> /* for isdigit() */
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
556 #include <errno.h> /* for global errno */
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
557 #include <string.h> /* for strerror() */
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
558 #include <stdlib.h> /* for malloc(), free() */
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
559
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
560 typedef struct Module {
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
561 struct Module *next;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
562 void *entry;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
563 } Module, *ModulePtr;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
564
3907
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
565 static int
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
566 aix_getoldmodules(modlistptr)
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
567 void **modlistptr;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
568 {
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
569 register ModulePtr modptr, prevmodptr;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
570 register struct ld_info *ldiptr;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
571 register char *ldibuf;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
572 register int errflag, bufsize = 1024;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
573 register unsigned int offset;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
574
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
575 /*
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
576 -- Get the list of loaded modules into ld_info structures.
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
577 */
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
578 if ((ldibuf = malloc(bufsize)) == NULL) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
579 PyErr_SetString(PyExc_ImportError, strerror(errno));
3907
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
580 return -1;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
581 }
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
582 while ((errflag = loadquery(L_GETINFO, ldibuf, bufsize)) == -1
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
583 && errno == ENOMEM) {
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
584 free(ldibuf);
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
585 bufsize += 1024;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
586 if ((ldibuf = malloc(bufsize)) == NULL) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
587 PyErr_SetString(PyExc_ImportError, strerror(errno));
3907
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
588 return -1;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
589 }
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
590 }
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
591 if (errflag == -1) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
592 PyErr_SetString(PyExc_ImportError, strerror(errno));
3907
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
593 return -1;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
594 }
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
595 /*
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
596 -- Make the modules list from the ld_info structures.
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
597 */
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
598 ldiptr = (struct ld_info *)ldibuf;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
599 prevmodptr = NULL;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
600 do {
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
601 if ((modptr = (ModulePtr)malloc(sizeof(Module))) == NULL) {
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
602 PyErr_SetString(PyExc_ImportError, strerror(errno));
3907
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
603 while (*modlistptr) {
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
604 modptr = (ModulePtr)*modlistptr;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
605 *modlistptr = (void *)modptr->next;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
606 free(modptr);
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
607 }
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
608 return -1;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
609 }
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
610 modptr->entry = ldiptr->ldinfo_dataorg;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
611 modptr->next = NULL;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
612 if (prevmodptr == NULL)
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
613 *modlistptr = (void *)modptr;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
614 else
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
615 prevmodptr->next = modptr;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
616 prevmodptr = modptr;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
617 offset = (unsigned int)ldiptr->ldinfo_next;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
618 ldiptr = (struct ld_info *)((unsigned int)ldiptr + offset);
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
619 } while (offset);
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
620 free(ldibuf);
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
621 return 0;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
622 }
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
623
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
624 static int
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
625 aix_bindnewmodule(newmoduleptr, modlistptr)
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
626 void *newmoduleptr;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
627 void *modlistptr;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
628 {
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
629 register ModulePtr modptr;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
630
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
631 /*
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
632 -- Bind the new module with the list of loaded modules.
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
633 */
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
634 for (modptr = (ModulePtr)modlistptr; modptr; modptr = modptr->next)
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
635 if (loadbind(0, modptr->entry, newmoduleptr) != 0)
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
636 return -1;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
637 return 0;
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
638 }
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
639
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
640 static void
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
641 aix_loaderror(pathname)
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
642 char *pathname;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
643 {
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
644
3732
523f49a1e42a Corrections to aix_loaderror(), by Manus Hand.
Guido van Rossum <guido@python.org>
parents: 3591
diff changeset
645 char *message[1024], errbuf[1024];
3907
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
646 register int i,j;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
647
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
648 struct errtab {
3907
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
649 int errNo;
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
650 char *errstr;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
651 } load_errtab[] = {
2724
6a9ecb05c679 Check if we've already loaded a dynamic module under a different name.
Sjoerd Mullender <sjoerd@acm.org>
parents: 2435
diff changeset
652 {L_ERROR_TOOMANY, "too many errors, rest skipped."},
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
653 {L_ERROR_NOLIB, "can't load library:"},
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
654 {L_ERROR_UNDEF, "can't find symbol in library:"},
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
655 {L_ERROR_RLDBAD,
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
656 "RLD index out of range or bad relocation type:"},
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
657 {L_ERROR_FORMAT, "not a valid, executable xcoff file:"},
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
658 {L_ERROR_MEMBER,
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
659 "file not an archive or does not contain requested member:"},
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
660 {L_ERROR_TYPE, "symbol table mismatch:"},
3732
523f49a1e42a Corrections to aix_loaderror(), by Manus Hand.
Guido van Rossum <guido@python.org>
parents: 3591
diff changeset
661 {L_ERROR_ALIGN, "text alignment in file is wrong."},
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
662 {L_ERROR_SYSTEM, "System error:"},
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
663 {L_ERROR_ERRNO, NULL}
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
664 };
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
665
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
666 #define LOAD_ERRTAB_LEN (sizeof(load_errtab)/sizeof(load_errtab[0]))
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
667 #define ERRBUF_APPEND(s) strncat(errbuf, s, sizeof(errbuf)-strlen(errbuf)-1)
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
668
3907
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
669 sprintf(errbuf, "from module %.200s ", pathname);
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
670
3907
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
671 if (!loadquery(L_GETMESSAGES, &message[0], sizeof(message))) {
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
672 ERRBUF_APPEND(strerror(errno));
3732
523f49a1e42a Corrections to aix_loaderror(), by Manus Hand.
Guido van Rossum <guido@python.org>
parents: 3591
diff changeset
673 ERRBUF_APPEND("\n");
523f49a1e42a Corrections to aix_loaderror(), by Manus Hand.
Guido van Rossum <guido@python.org>
parents: 3591
diff changeset
674 }
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
675 for(i = 0; message[i] && *message[i]; i++) {
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
676 int nerr = atoi(message[i]);
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
677 for (j=0; j<LOAD_ERRTAB_LEN ; j++) {
3907
ac1d5abfd78e Changes for AIX sharedlibs.
Guido van Rossum <guido@python.org>
parents: 3898
diff changeset
678 if (nerr == load_errtab[j].errNo && load_errtab[j].errstr)
3732
523f49a1e42a Corrections to aix_loaderror(), by Manus Hand.
Guido van Rossum <guido@python.org>
parents: 3591
diff changeset
679 ERRBUF_APPEND(load_errtab[j].errstr);
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
680 }
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
681 while (isdigit(*message[i])) message[i]++ ;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
682 ERRBUF_APPEND(message[i]);
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
683 ERRBUF_APPEND("\n");
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
684 }
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
685 errbuf[strlen(errbuf)-1] = '\0'; /* trim off last newline */
5373
5880384d7c71 Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents: 5314
diff changeset
686 PyErr_SetString(PyExc_ImportError, errbuf);
2052
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
687 return;
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
688 }
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
689
d7e91437f0a2 Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
diff changeset
690 #endif /* _AIX */