blob: 428914f3788a0dde223db6186016ea112d33f73b [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00002/* Module support implementation */
3
Guido van Rossum79f25d91997-04-29 20:08:16 +00004#include "Python.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00005
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006#define FLAG_SIZE_T 1
Guido van Rossum1d5735e1994-08-30 08:27:36 +00007typedef double va_double;
Guido van Rossum1d5735e1994-08-30 08:27:36 +00008
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00009static PyObject *va_build_value(const char *, va_list, int);
10
Guido van Rossum2e58ff31997-11-19 18:53:33 +000011/* Package context -- the full module name for package imports */
12char *_Py_PackageContext = NULL;
13
Guido van Rossumbf80e541993-02-08 15:49:17 +000014/* Helper for mkvalue() to scan the length of a format */
Guido van Rossumfc61adb1992-04-13 15:53:41 +000015
Fred Drakeceead6d2003-01-30 15:08:25 +000016static int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +000017countformat(const char *format, int endchar)
Guido van Rossumfc61adb1992-04-13 15:53:41 +000018{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000019 int count = 0;
20 int level = 0;
21 while (level > 0 || *format != endchar) {
22 switch (*format) {
23 case '\0':
24 /* Premature end */
25 PyErr_SetString(PyExc_SystemError,
26 "unmatched paren in format");
27 return -1;
28 case '(':
29 case '[':
30 case '{':
31 if (level == 0)
32 count++;
33 level++;
34 break;
35 case ')':
36 case ']':
37 case '}':
38 level--;
39 break;
40 case '#':
41 case '&':
42 case ',':
43 case ':':
44 case ' ':
45 case '\t':
46 break;
47 default:
48 if (level == 0)
49 count++;
50 }
51 format++;
52 }
53 return count;
Guido van Rossumfc61adb1992-04-13 15:53:41 +000054}
55
56
Guido van Rossumfc61adb1992-04-13 15:53:41 +000057/* Generic function to create a value -- the inverse of getargs() */
58/* After an original idea and first implementation by Steven Miale */
59
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000060static PyObject *do_mktuple(const char**, va_list *, int, int, int);
61static PyObject *do_mklist(const char**, va_list *, int, int, int);
62static PyObject *do_mkdict(const char**, va_list *, int, int, int);
63static PyObject *do_mkvalue(const char**, va_list *, int);
Guido van Rossumfc61adb1992-04-13 15:53:41 +000064
Guido van Rossum1ae940a1995-01-02 19:04:15 +000065
Guido van Rossum79f25d91997-04-29 20:08:16 +000066static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000067do_mkdict(const char **p_format, va_list *p_va, int endchar, int n, int flags)
Guido van Rossum1ae940a1995-01-02 19:04:15 +000068{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000069 PyObject *d;
70 int i;
71 int itemfailed = 0;
72 if (n < 0)
73 return NULL;
74 if ((d = PyDict_New()) == NULL)
75 return NULL;
76 /* Note that we can't bail immediately on error as this will leak
77 refcounts on any 'N' arguments. */
78 for (i = 0; i < n; i+= 2) {
79 PyObject *k, *v;
80 int err;
81 k = do_mkvalue(p_format, p_va, flags);
82 if (k == NULL) {
83 itemfailed = 1;
84 Py_INCREF(Py_None);
85 k = Py_None;
86 }
87 v = do_mkvalue(p_format, p_va, flags);
88 if (v == NULL) {
89 itemfailed = 1;
90 Py_INCREF(Py_None);
91 v = Py_None;
92 }
93 err = PyDict_SetItem(d, k, v);
94 Py_DECREF(k);
95 Py_DECREF(v);
96 if (err < 0 || itemfailed) {
97 Py_DECREF(d);
98 return NULL;
99 }
100 }
101 if (d != NULL && **p_format != endchar) {
102 Py_DECREF(d);
103 d = NULL;
104 PyErr_SetString(PyExc_SystemError,
105 "Unmatched paren in format");
106 }
107 else if (endchar)
108 ++*p_format;
109 return d;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000110}
111
Guido van Rossum79f25d91997-04-29 20:08:16 +0000112static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000113do_mklist(const char **p_format, va_list *p_va, int endchar, int n, int flags)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000114{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000115 PyObject *v;
116 int i;
117 int itemfailed = 0;
118 if (n < 0)
119 return NULL;
120 v = PyList_New(n);
121 if (v == NULL)
122 return NULL;
123 /* Note that we can't bail immediately on error as this will leak
124 refcounts on any 'N' arguments. */
125 for (i = 0; i < n; i++) {
126 PyObject *w = do_mkvalue(p_format, p_va, flags);
127 if (w == NULL) {
128 itemfailed = 1;
129 Py_INCREF(Py_None);
130 w = Py_None;
131 }
132 PyList_SET_ITEM(v, i, w);
133 }
Neal Norwitz3e90fa52006-03-06 23:07:34 +0000134
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000135 if (itemfailed) {
136 /* do_mkvalue() should have already set an error */
137 Py_DECREF(v);
138 return NULL;
139 }
140 if (**p_format != endchar) {
141 Py_DECREF(v);
142 PyErr_SetString(PyExc_SystemError,
143 "Unmatched paren in format");
144 return NULL;
145 }
146 if (endchar)
147 ++*p_format;
148 return v;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000149}
150
Guido van Rossum79f25d91997-04-29 20:08:16 +0000151static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000152do_mktuple(const char **p_format, va_list *p_va, int endchar, int n, int flags)
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000153{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000154 PyObject *v;
155 int i;
156 int itemfailed = 0;
157 if (n < 0)
158 return NULL;
159 if ((v = PyTuple_New(n)) == NULL)
160 return NULL;
161 /* Note that we can't bail immediately on error as this will leak
162 refcounts on any 'N' arguments. */
163 for (i = 0; i < n; i++) {
164 PyObject *w = do_mkvalue(p_format, p_va, flags);
165 if (w == NULL) {
166 itemfailed = 1;
167 Py_INCREF(Py_None);
168 w = Py_None;
169 }
170 PyTuple_SET_ITEM(v, i, w);
171 }
172 if (itemfailed) {
173 /* do_mkvalue() should have already set an error */
174 Py_DECREF(v);
175 return NULL;
176 }
177 if (**p_format != endchar) {
178 Py_DECREF(v);
179 PyErr_SetString(PyExc_SystemError,
180 "Unmatched paren in format");
181 return NULL;
182 }
183 if (endchar)
184 ++*p_format;
185 return v;
Guido van Rossumfc61adb1992-04-13 15:53:41 +0000186}
187
Guido van Rossum79f25d91997-04-29 20:08:16 +0000188static PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000189do_mkvalue(const char **p_format, va_list *p_va, int flags)
Guido van Rossum899dcf31992-05-15 11:04:59 +0000190{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000191 for (;;) {
192 switch (*(*p_format)++) {
193 case '(':
194 return do_mktuple(p_format, p_va, ')',
195 countformat(*p_format, ')'), flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000196
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000197 case '[':
198 return do_mklist(p_format, p_va, ']',
199 countformat(*p_format, ']'), flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000200
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000201 case '{':
202 return do_mkdict(p_format, p_va, '}',
203 countformat(*p_format, '}'), flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000204
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000205 case 'b':
206 case 'B':
207 case 'h':
208 case 'i':
209 return PyLong_FromLong((long)va_arg(*p_va, int));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000210
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000211 case 'H':
212 return PyLong_FromLong((long)va_arg(*p_va, unsigned int));
213
214 case 'I':
215 {
216 unsigned int n;
217 n = va_arg(*p_va, unsigned int);
218 return PyLong_FromUnsignedLong(n);
219 }
220
221 case 'n':
Martin v. Löwis18e16552006-02-15 17:27:45 +0000222#if SIZEOF_SIZE_T!=SIZEOF_LONG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000223 return PyLong_FromSsize_t(va_arg(*p_va, Py_ssize_t));
Martin v. Löwis18e16552006-02-15 17:27:45 +0000224#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000225 /* Fall through from 'n' to 'l' if Py_ssize_t is long */
226 case 'l':
227 return PyLong_FromLong(va_arg(*p_va, long));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000228
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000229 case 'k':
230 {
231 unsigned long n;
232 n = va_arg(*p_va, unsigned long);
233 return PyLong_FromUnsignedLong(n);
234 }
Jack Jansendbd65032003-04-17 22:01:10 +0000235
Guido van Rossum3dbba6e1999-01-25 21:48:56 +0000236#ifdef HAVE_LONG_LONG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000237 case 'L':
238 return PyLong_FromLongLong((PY_LONG_LONG)va_arg(*p_va, PY_LONG_LONG));
Jack Jansendbd65032003-04-17 22:01:10 +0000239
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000240 case 'K':
241 return PyLong_FromUnsignedLongLong((PY_LONG_LONG)va_arg(*p_va, unsigned PY_LONG_LONG));
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000242#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000243 case 'u':
244 {
245 PyObject *v;
246 Py_UNICODE *u = va_arg(*p_va, Py_UNICODE *);
247 Py_ssize_t n;
248 if (**p_format == '#') {
249 ++*p_format;
250 if (flags & FLAG_SIZE_T)
251 n = va_arg(*p_va, Py_ssize_t);
252 else
253 n = va_arg(*p_va, int);
254 }
255 else
256 n = -1;
257 if (u == NULL) {
258 v = Py_None;
259 Py_INCREF(v);
260 }
261 else {
262 if (n < 0)
Victor Stinnerd9c563e2011-09-29 04:01:43 +0200263 n = Py_UNICODE_strlen(u);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000264 v = PyUnicode_FromUnicode(u, n);
265 }
266 return v;
267 }
268 case 'f':
269 case 'd':
270 return PyFloat_FromDouble(
271 (double)va_arg(*p_va, va_double));
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000272
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000273 case 'D':
274 return PyComplex_FromCComplex(
275 *((Py_complex *)va_arg(*p_va, Py_complex *)));
Fred Drakeaec79242001-03-12 21:03:26 +0000276
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000277 case 'c':
278 {
279 char p[1];
280 p[0] = (char)va_arg(*p_va, int);
281 return PyBytes_FromStringAndSize(p, 1);
282 }
283 case 'C':
284 {
285 int i = va_arg(*p_va, int);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000286 return PyUnicode_FromOrdinal(i);
287 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000288
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000289 case 's':
290 case 'z':
Victor Stinner7eeb5b52010-06-07 19:57:46 +0000291 case 'U': /* XXX deprecated alias */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000292 {
293 PyObject *v;
294 char *str = va_arg(*p_va, char *);
295 Py_ssize_t n;
296 if (**p_format == '#') {
297 ++*p_format;
298 if (flags & FLAG_SIZE_T)
299 n = va_arg(*p_va, Py_ssize_t);
300 else
301 n = va_arg(*p_va, int);
302 }
303 else
304 n = -1;
305 if (str == NULL) {
306 v = Py_None;
307 Py_INCREF(v);
308 }
309 else {
310 if (n < 0) {
311 size_t m = strlen(str);
312 if (m > PY_SSIZE_T_MAX) {
313 PyErr_SetString(PyExc_OverflowError,
314 "string too long for Python string");
315 return NULL;
316 }
317 n = (Py_ssize_t)m;
318 }
319 v = PyUnicode_FromStringAndSize(str, n);
320 }
321 return v;
322 }
Walter Dörwaldd2034312007-05-18 16:29:38 +0000323
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000324 case 'y':
325 {
326 PyObject *v;
327 char *str = va_arg(*p_va, char *);
328 Py_ssize_t n;
329 if (**p_format == '#') {
330 ++*p_format;
331 if (flags & FLAG_SIZE_T)
332 n = va_arg(*p_va, Py_ssize_t);
333 else
334 n = va_arg(*p_va, int);
335 }
336 else
337 n = -1;
338 if (str == NULL) {
339 v = Py_None;
340 Py_INCREF(v);
341 }
342 else {
343 if (n < 0) {
344 size_t m = strlen(str);
345 if (m > PY_SSIZE_T_MAX) {
346 PyErr_SetString(PyExc_OverflowError,
347 "string too long for Python bytes");
348 return NULL;
349 }
350 n = (Py_ssize_t)m;
351 }
352 v = PyBytes_FromStringAndSize(str, n);
353 }
354 return v;
355 }
Walter Dörwald612344f2007-05-04 19:28:21 +0000356
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000357 case 'N':
358 case 'S':
359 case 'O':
360 if (**p_format == '&') {
361 typedef PyObject *(*converter)(void *);
362 converter func = va_arg(*p_va, converter);
363 void *arg = va_arg(*p_va, void *);
364 ++*p_format;
365 return (*func)(arg);
366 }
367 else {
368 PyObject *v;
369 v = va_arg(*p_va, PyObject *);
370 if (v != NULL) {
371 if (*(*p_format - 1) != 'N')
372 Py_INCREF(v);
373 }
374 else if (!PyErr_Occurred())
375 /* If a NULL was passed
376 * because a call that should
377 * have constructed a value
378 * failed, that's OK, and we
379 * pass the error on; but if
380 * no error occurred it's not
381 * clear that the caller knew
382 * what she was doing. */
383 PyErr_SetString(PyExc_SystemError,
384 "NULL object passed to Py_BuildValue");
385 return v;
386 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000387
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000388 case ':':
389 case ',':
390 case ' ':
391 case '\t':
392 break;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000393
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000394 default:
395 PyErr_SetString(PyExc_SystemError,
396 "bad format char passed to Py_BuildValue");
397 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000398
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000399 }
400 }
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000401}
402
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000403
Fred Drakeceead6d2003-01-30 15:08:25 +0000404PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000405Py_BuildValue(const char *format, ...)
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000406{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000407 va_list va;
408 PyObject* retval;
409 va_start(va, format);
410 retval = va_build_value(format, va, 0);
411 va_end(va);
412 return retval;
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000413}
414
415PyObject *
416_Py_BuildValue_SizeT(const char *format, ...)
417{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000418 va_list va;
419 PyObject* retval;
420 va_start(va, format);
421 retval = va_build_value(format, va, FLAG_SIZE_T);
422 va_end(va);
423 return retval;
Guido van Rossum3cfe6fa1992-04-13 10:48:55 +0000424}
Guido van Rossume5372401993-03-16 12:15:04 +0000425
Guido van Rossum79f25d91997-04-29 20:08:16 +0000426PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000427Py_VaBuildValue(const char *format, va_list va)
Guido van Rossume5372401993-03-16 12:15:04 +0000428{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000429 return va_build_value(format, va, 0);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000430}
431
432PyObject *
433_Py_VaBuildValue_SizeT(const char *format, va_list va)
434{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000435 return va_build_value(format, va, FLAG_SIZE_T);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000436}
437
438static PyObject *
439va_build_value(const char *format, va_list va, int flags)
440{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000441 const char *f = format;
442 int n = countformat(f, '\0');
443 va_list lva;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000444
Alexander Belopolskyf0f45142010-08-11 17:31:17 +0000445 Py_VA_COPY(lva, va);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000446
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000447 if (n < 0)
448 return NULL;
449 if (n == 0) {
450 Py_INCREF(Py_None);
451 return Py_None;
452 }
453 if (n == 1)
454 return do_mkvalue(&f, &lva, flags);
455 return do_mktuple(&f, &lva, '\0', n, flags);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000456}
457
458
Guido van Rossum79f25d91997-04-29 20:08:16 +0000459PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000460PyEval_CallFunction(PyObject *obj, const char *format, ...)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000461{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000462 va_list vargs;
463 PyObject *args;
464 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000465
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000466 va_start(vargs, format);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000467
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000468 args = Py_VaBuildValue(format, vargs);
469 va_end(vargs);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000470
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000471 if (args == NULL)
472 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000473
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000474 res = PyEval_CallObject(obj, args);
475 Py_DECREF(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000476
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000477 return res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000478}
479
480
Guido van Rossum79f25d91997-04-29 20:08:16 +0000481PyObject *
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000482PyEval_CallMethod(PyObject *obj, const char *methodname, const char *format, ...)
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000483{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000484 va_list vargs;
485 PyObject *meth;
486 PyObject *args;
487 PyObject *res;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000488
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000489 meth = PyObject_GetAttrString(obj, methodname);
490 if (meth == NULL)
491 return NULL;
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000492
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000493 va_start(vargs, format);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000494
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000495 args = Py_VaBuildValue(format, vargs);
496 va_end(vargs);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000497
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000498 if (args == NULL) {
499 Py_DECREF(meth);
500 return NULL;
501 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000502
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000503 res = PyEval_CallObject(meth, args);
504 Py_DECREF(meth);
505 Py_DECREF(args);
Guido van Rossum1ae940a1995-01-02 19:04:15 +0000506
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000507 return res;
Guido van Rossume5372401993-03-16 12:15:04 +0000508}
Fred Drake9e285152000-09-23 03:24:27 +0000509
510int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000511PyModule_AddObject(PyObject *m, const char *name, PyObject *o)
Fred Drake9e285152000-09-23 03:24:27 +0000512{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000513 PyObject *dict;
514 if (!PyModule_Check(m)) {
515 PyErr_SetString(PyExc_TypeError,
516 "PyModule_AddObject() needs module as first arg");
517 return -1;
518 }
519 if (!o) {
520 if (!PyErr_Occurred())
521 PyErr_SetString(PyExc_TypeError,
522 "PyModule_AddObject() needs non-NULL value");
523 return -1;
524 }
Jeremy Hyltonc44dbc42003-06-21 21:35:25 +0000525
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000526 dict = PyModule_GetDict(m);
527 if (dict == NULL) {
528 /* Internal error -- modules must have a dict! */
529 PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__",
530 PyModule_GetName(m));
531 return -1;
532 }
533 if (PyDict_SetItemString(dict, name, o))
534 return -1;
535 Py_DECREF(o);
536 return 0;
Fred Drake9e285152000-09-23 03:24:27 +0000537}
538
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000539int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000540PyModule_AddIntConstant(PyObject *m, const char *name, long value)
Fred Drake9e285152000-09-23 03:24:27 +0000541{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000542 PyObject *o = PyLong_FromLong(value);
543 if (!o)
544 return -1;
545 if (PyModule_AddObject(m, name, o) == 0)
546 return 0;
547 Py_DECREF(o);
548 return -1;
Fred Drake9e285152000-09-23 03:24:27 +0000549}
550
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000551int
Jeremy Hyltonaf68c872005-12-10 18:50:16 +0000552PyModule_AddStringConstant(PyObject *m, const char *name, const char *value)
Fred Drake9e285152000-09-23 03:24:27 +0000553{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000554 PyObject *o = PyUnicode_FromString(value);
555 if (!o)
556 return -1;
557 if (PyModule_AddObject(m, name, o) == 0)
558 return 0;
559 Py_DECREF(o);
560 return -1;
Fred Drake9e285152000-09-23 03:24:27 +0000561}