Mercurial > cpython-lru_cache-weakref
annotate Modules/dlmodule.c @ 6719:faebc1940432 legacy-trunk
Understand -Xlinker option.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Tue, 02 Dec 1997 20:38:11 +0000 |
| parents | 2c29b8982643 |
| children | c7bab73e63c6 |
| rev | line source |
|---|---|
| 1650 | 1 /*********************************************************** |
|
2061
172ba04a5191
Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents:
1650
diff
changeset
|
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, |
|
172ba04a5191
Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents:
1650
diff
changeset
|
3 The Netherlands. |
| 1650 | 4 |
| 5 All Rights Reserved | |
| 6 | |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2061
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:
2061
diff
changeset
|
8 documentation for any purpose and without fee is hereby granted, |
| 1650 | 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:
2061
diff
changeset
|
10 both that copyright notice and this permission notice appear in |
| 1650 | 11 supporting documentation, and that the names of Stichting Mathematisch |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2061
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:
2061
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:
2061
diff
changeset
|
14 distribution of the software without specific, written prior |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2061
diff
changeset
|
15 permission. |
| 1650 | 16 |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2061
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:
2061
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:
2061
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:
2061
diff
changeset
|
20 |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
2061
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:
2061
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:
2061
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:
2061
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:
2061
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:
2061
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:
2061
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:
2061
diff
changeset
|
28 PERFORMANCE OF THIS SOFTWARE. |
| 1650 | 29 |
| 30 ******************************************************************/ | |
| 31 | |
| 32 /* dl module */ | |
| 33 | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
34 #include "Python.h" |
| 1650 | 35 |
| 36 #include <dlfcn.h> | |
| 37 | |
| 38 #ifndef RTLD_LAZY | |
| 39 #define RTLD_LAZY 1 | |
| 40 #endif | |
| 41 | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
42 typedef ANY *PyUnivPtr; |
| 1650 | 43 typedef struct { |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
44 PyObject_HEAD |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
45 PyUnivPtr *dl_handle; |
| 1650 | 46 } dlobject; |
| 47 | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
48 staticforward PyTypeObject Dltype; |
| 1650 | 49 |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
50 static PyObject *Dlerror; |
| 1650 | 51 |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
52 static PyObject * |
| 1650 | 53 newdlobject(handle) |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
54 PyUnivPtr *handle; |
| 1650 | 55 { |
| 56 dlobject *xp; | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
57 xp = PyObject_NEW(dlobject, &Dltype); |
| 1650 | 58 if (xp == NULL) |
| 59 return NULL; | |
| 60 xp->dl_handle = handle; | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
61 return (PyObject *)xp; |
| 1650 | 62 } |
| 63 | |
| 64 static void | |
| 65 dl_dealloc(xp) | |
| 66 dlobject *xp; | |
| 67 { | |
| 68 if (xp->dl_handle != NULL) | |
| 69 dlclose(xp->dl_handle); | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
70 PyMem_DEL(xp); |
| 1650 | 71 } |
| 72 | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
73 static PyObject * |
| 1650 | 74 dl_close(xp, args) |
| 75 dlobject *xp; | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
76 PyObject *args; |
| 1650 | 77 { |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
78 if (!PyArg_Parse(args, "")) |
| 1650 | 79 return NULL; |
| 80 if (xp->dl_handle != NULL) { | |
| 81 dlclose(xp->dl_handle); | |
| 82 xp->dl_handle = NULL; | |
| 83 } | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
84 Py_INCREF(Py_None); |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
85 return Py_None; |
| 1650 | 86 } |
| 87 | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
88 static PyObject * |
| 1650 | 89 dl_sym(xp, args) |
| 90 dlobject *xp; | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
91 PyObject *args; |
| 1650 | 92 { |
| 93 char *name; | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
94 PyUnivPtr *func; |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
95 if (!PyArg_Parse(args, "s", &name)) |
| 1650 | 96 return NULL; |
| 97 func = dlsym(xp->dl_handle, name); | |
| 98 if (func == NULL) { | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
99 Py_INCREF(Py_None); |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
100 return Py_None; |
| 1650 | 101 } |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
102 return PyInt_FromLong((long)func); |
| 1650 | 103 } |
| 104 | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
105 static PyObject * |
| 1650 | 106 dl_call(xp, args) |
| 107 dlobject *xp; | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
108 PyObject *args; /* (varargs) */ |
| 1650 | 109 { |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
110 PyObject *name; |
| 1650 | 111 long (*func)(); |
| 112 long alist[10]; | |
| 113 long res; | |
| 114 int i; | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
115 int n = PyTuple_Size(args); |
| 1650 | 116 if (n < 1) { |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
117 PyErr_SetString(PyExc_TypeError, "at least a name is needed"); |
| 1650 | 118 return NULL; |
| 119 } | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
120 name = PyTuple_GetItem(args, 0); |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
121 if (!PyString_Check(name)) { |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
122 PyErr_SetString(PyExc_TypeError, |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
123 "function name must be a string"); |
| 1650 | 124 return NULL; |
| 125 } | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
126 func = dlsym(xp->dl_handle, PyString_AsString(name)); |
| 1650 | 127 if (func == NULL) { |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
128 PyErr_SetString(PyExc_ValueError, dlerror()); |
| 1650 | 129 return NULL; |
| 130 } | |
| 131 if (n-1 > 10) { | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
132 PyErr_SetString(PyExc_TypeError, |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
133 "too many arguments (max 10)"); |
| 1650 | 134 return NULL; |
| 135 } | |
| 136 for (i = 1; i < n; i++) { | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
137 PyObject *v = PyTuple_GetItem(args, i); |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
138 if (PyInt_Check(v)) |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
139 alist[i-1] = PyInt_AsLong(v); |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
140 else if (PyString_Check(v)) |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
141 alist[i-1] = (long)PyString_AsString(v); |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
142 else if (v == Py_None) |
| 1650 | 143 alist[i-1] = (long) ((char *)NULL); |
| 144 else { | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
145 PyErr_SetString(PyExc_TypeError, |
| 1650 | 146 "arguments must be int, string or None"); |
| 147 return NULL; | |
| 148 } | |
| 149 } | |
| 150 for (; i <= 10; i++) | |
| 151 alist[i-1] = 0; | |
| 152 res = (*func)(alist[0], alist[1], alist[2], alist[3], alist[4], | |
| 153 alist[5], alist[6], alist[7], alist[8], alist[9]); | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
154 return PyInt_FromLong(res); |
| 1650 | 155 } |
| 156 | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
157 static PyMethodDef dlobject_methods[] = { |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
158 {"call", (PyCFunction)dl_call, 1 /* varargs */}, |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
159 {"sym", (PyCFunction)dl_sym}, |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
160 {"close", (PyCFunction)dl_close}, |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
161 {NULL, NULL} /* Sentinel */ |
| 1650 | 162 }; |
| 163 | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
164 static PyObject * |
| 1650 | 165 dl_getattr(xp, name) |
| 166 dlobject *xp; | |
| 167 char *name; | |
| 168 { | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
169 return Py_FindMethod(dlobject_methods, (PyObject *)xp, name); |
| 1650 | 170 } |
| 171 | |
| 172 | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
173 static PyTypeObject Dltype = { |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
174 PyObject_HEAD_INIT(&PyType_Type) |
| 1650 | 175 0, /*ob_size*/ |
| 176 "dl", /*tp_name*/ | |
| 177 sizeof(dlobject), /*tp_basicsize*/ | |
| 178 0, /*tp_itemsize*/ | |
| 179 /* methods */ | |
| 180 (destructor)dl_dealloc, /*tp_dealloc*/ | |
| 181 0, /*tp_print*/ | |
| 182 (getattrfunc)dl_getattr,/*tp_getattr*/ | |
| 183 0, /*tp_setattr*/ | |
| 184 0, /*tp_compare*/ | |
| 185 0, /*tp_repr*/ | |
| 186 0, /*tp_as_number*/ | |
| 187 0, /*tp_as_sequence*/ | |
| 188 0, /*tp_as_mapping*/ | |
| 189 0, /*tp_hash*/ | |
| 190 }; | |
| 191 | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
192 static PyObject * |
| 1650 | 193 dl_open(self, args) |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
194 PyObject *self; |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
195 PyObject *args; |
| 1650 | 196 { |
| 197 char *name; | |
| 198 int mode; | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
199 PyUnivPtr *handle; |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
200 if (PyArg_Parse(args, "z", &name)) |
| 1650 | 201 mode = RTLD_LAZY; |
| 202 else { | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
203 PyErr_Clear(); |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
204 if (!PyArg_Parse(args, "(zi)", &name, &mode)) |
| 1650 | 205 return NULL; |
| 206 #ifndef RTLD_NOW | |
| 207 if (mode != RTLD_LAZY) { | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
208 PyErr_SetString(PyExc_ValueError, "mode must be 1"); |
| 1650 | 209 return NULL; |
| 210 } | |
| 211 #endif | |
| 212 } | |
| 213 handle = dlopen(name, mode); | |
| 214 if (handle == NULL) { | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
215 PyErr_SetString(Dlerror, dlerror()); |
| 1650 | 216 return NULL; |
| 217 } | |
| 218 return newdlobject(handle); | |
| 219 } | |
| 220 | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
221 static PyMethodDef dl_methods[] = { |
| 1650 | 222 {"open", dl_open}, |
| 223 {NULL, NULL} /* sentinel */ | |
| 224 }; | |
| 225 | |
| 226 void | |
| 227 initdl() | |
| 228 { | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
229 PyObject *m, *d, *x; |
| 1650 | 230 |
| 231 if (sizeof(int) != sizeof(long) || | |
|
6367
2c29b8982643
Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents:
4725
diff
changeset
|
232 sizeof(long) != sizeof(char *)) { |
|
2c29b8982643
Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents:
4725
diff
changeset
|
233 Py_Err_SetStr( |
| 1650 | 234 "module dl requires sizeof(int) == sizeof(long) == sizeof(char*)"); |
|
6367
2c29b8982643
Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents:
4725
diff
changeset
|
235 return; |
|
2c29b8982643
Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents:
4725
diff
changeset
|
236 } |
| 1650 | 237 |
| 238 /* Create the module and add the functions */ | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
239 m = Py_InitModule("dl", dl_methods); |
| 1650 | 240 |
| 241 /* Add some symbolic constants to the module */ | |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
242 d = PyModule_GetDict(m); |
|
6367
2c29b8982643
Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents:
4725
diff
changeset
|
243 Dlerror = x = PyErr_NewException("dl.error", NULL, NULL); |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
244 PyDict_SetItemString(d, "error", x); |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
245 x = PyInt_FromLong((long)RTLD_LAZY); |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
246 PyDict_SetItemString(d, "RTLD_LAZY", x); |
| 1650 | 247 #ifdef RTLD_NOW |
|
4725
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
248 x = PyInt_FromLong((long)RTLD_NOW); |
|
8669edb1d9c5
Renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4503
diff
changeset
|
249 PyDict_SetItemString(d, "RTLD_NOW", x); |
| 1650 | 250 #endif |
| 251 } |
