Mercurial > cpython-lru_cache-weakref
annotate Python/modsupport.c @ 56959:032d9749047d 2.6
Merged revisions 75931 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r75931 | benjamin.peterson | 2009-10-28 20:49:07 -0500 (Wed, 28 Oct 2009) | 5 lines
do a backport of r75928
The added test does not fail without the patch, but we still fix the issue of
surrogates being used in wide builds where they should not be.
........
| author | Benjamin Peterson <benjamin@python.org> |
|---|---|
| date | Thu, 29 Oct 2009 02:02:47 +0000 |
| parents | 52294af4b663 |
| children | fd25030223b0 |
| rev | line source |
|---|---|
| 145 | 1 |
| 6 | 2 /* Module support implementation */ |
| 3 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
4 #include "Python.h" |
| 6 | 5 |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
6 #define FLAG_SIZE_T 1 |
|
1848
b724599401ff
Merge back to main trunk
Guido van Rossum <guido@python.org>
parents:
1319
diff
changeset
|
7 typedef double va_double; |
|
b724599401ff
Merge back to main trunk
Guido van Rossum <guido@python.org>
parents:
1319
diff
changeset
|
8 |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
9 static PyObject *va_build_value(const char *, va_list, int); |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
10 |
|
6602
4514a5ea3ec4
Fix importing of shared libraries from inside packages.
Guido van Rossum <guido@python.org>
parents:
5925
diff
changeset
|
11 /* Package context -- the full module name for package imports */ |
|
4514a5ea3ec4
Fix importing of shared libraries from inside packages.
Guido van Rossum <guido@python.org>
parents:
5925
diff
changeset
|
12 char *_Py_PackageContext = NULL; |
|
4514a5ea3ec4
Fix importing of shared libraries from inside packages.
Guido van Rossum <guido@python.org>
parents:
5925
diff
changeset
|
13 |
|
5925
93304b2e14cb
Removed fatal errors from Py_Initmodule4() (and thus from
Guido van Rossum <guido@python.org>
parents:
5373
diff
changeset
|
14 /* Py_InitModule4() parameters: |
| 2095 | 15 - name is the module name |
| 16 - methods is the list of top-level functions | |
| 17 - doc is the documentation string | |
| 18 - passthrough is passed as self to functions defined in the module | |
| 19 - api_version is the value of PYTHON_API_VERSION at the time the | |
| 20 module was compiled | |
|
5925
93304b2e14cb
Removed fatal errors from Py_Initmodule4() (and thus from
Guido van Rossum <guido@python.org>
parents:
5373
diff
changeset
|
21 |
|
93304b2e14cb
Removed fatal errors from Py_Initmodule4() (and thus from
Guido van Rossum <guido@python.org>
parents:
5373
diff
changeset
|
22 Return value is a borrowed reference to the module object; or NULL |
|
93304b2e14cb
Removed fatal errors from Py_Initmodule4() (and thus from
Guido van Rossum <guido@python.org>
parents:
5373
diff
changeset
|
23 if an error occurred (in Python 1.4 and before, errors were fatal). |
|
93304b2e14cb
Removed fatal errors from Py_Initmodule4() (and thus from
Guido van Rossum <guido@python.org>
parents:
5373
diff
changeset
|
24 Errors may still leak memory. |
|
2090
f78b387b54e0
New newmethodobject() interface takes struct methodlist pointer
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
25 */ |
|
1848
b724599401ff
Merge back to main trunk
Guido van Rossum <guido@python.org>
parents:
1319
diff
changeset
|
26 |
| 2095 | 27 static char api_version_warning[] = |
|
18908
79c676f9b34a
This patch turns the Python API mismatch notice into a standard
Marc-André Lemburg <mal@egenix.com>
parents:
17032
diff
changeset
|
28 "Python C API version mismatch for module %.100s:\ |
|
79c676f9b34a
This patch turns the Python API mismatch notice into a standard
Marc-André Lemburg <mal@egenix.com>
parents:
17032
diff
changeset
|
29 This Python has API version %d, module %.100s has version %d."; |
| 2095 | 30 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
31 PyObject * |
|
35999
9541369b0dca
Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35935
diff
changeset
|
32 Py_InitModule4(const char *name, PyMethodDef *methods, const char *doc, |
|
13658
f79434ee41fa
Mass ANSIfication of function definitions. Doesn't cover all 'extern'
Thomas Wouters <thomas@python.org>
parents:
13447
diff
changeset
|
33 PyObject *passthrough, int module_api_version) |
| 6 | 34 { |
|
27559
faabd9867fb8
Provide __module__ attributes for functions defined in C and Python.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
27533
diff
changeset
|
35 PyObject *m, *d, *v, *n; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
36 PyMethodDef *ml; |
|
13859
94f6ec87930a
Add a test that Py_IsInitialized() in Py_InitModule4(). See
Guido van Rossum <guido@python.org>
parents:
13658
diff
changeset
|
37 if (!Py_IsInitialized()) |
|
94f6ec87930a
Add a test that Py_IsInitialized() in Py_InitModule4(). See
Guido van Rossum <guido@python.org>
parents:
13658
diff
changeset
|
38 Py_FatalError("Interpreter not initialized (version mismatch?)"); |
|
18908
79c676f9b34a
This patch turns the Python API mismatch notice into a standard
Marc-André Lemburg <mal@egenix.com>
parents:
17032
diff
changeset
|
39 if (module_api_version != PYTHON_API_VERSION) { |
|
79c676f9b34a
This patch turns the Python API mismatch notice into a standard
Marc-André Lemburg <mal@egenix.com>
parents:
17032
diff
changeset
|
40 char message[512]; |
|
79c676f9b34a
This patch turns the Python API mismatch notice into a standard
Marc-André Lemburg <mal@egenix.com>
parents:
17032
diff
changeset
|
41 PyOS_snprintf(message, sizeof(message), |
|
79c676f9b34a
This patch turns the Python API mismatch notice into a standard
Marc-André Lemburg <mal@egenix.com>
parents:
17032
diff
changeset
|
42 api_version_warning, name, |
|
79c676f9b34a
This patch turns the Python API mismatch notice into a standard
Marc-André Lemburg <mal@egenix.com>
parents:
17032
diff
changeset
|
43 PYTHON_API_VERSION, name, |
|
79c676f9b34a
This patch turns the Python API mismatch notice into a standard
Marc-André Lemburg <mal@egenix.com>
parents:
17032
diff
changeset
|
44 module_api_version); |
|
79c676f9b34a
This patch turns the Python API mismatch notice into a standard
Marc-André Lemburg <mal@egenix.com>
parents:
17032
diff
changeset
|
45 if (PyErr_Warn(PyExc_RuntimeWarning, message)) |
|
79c676f9b34a
This patch turns the Python API mismatch notice into a standard
Marc-André Lemburg <mal@egenix.com>
parents:
17032
diff
changeset
|
46 return NULL; |
|
79c676f9b34a
This patch turns the Python API mismatch notice into a standard
Marc-André Lemburg <mal@egenix.com>
parents:
17032
diff
changeset
|
47 } |
|
27559
faabd9867fb8
Provide __module__ attributes for functions defined in C and Python.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
27533
diff
changeset
|
48 /* Make sure name is fully qualified. |
|
faabd9867fb8
Provide __module__ attributes for functions defined in C and Python.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
27533
diff
changeset
|
49 |
|
faabd9867fb8
Provide __module__ attributes for functions defined in C and Python.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
27533
diff
changeset
|
50 This is a bit of a hack: when the shared library is loaded, |
|
faabd9867fb8
Provide __module__ attributes for functions defined in C and Python.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
27533
diff
changeset
|
51 the module name is "package.module", but the module calls |
|
faabd9867fb8
Provide __module__ attributes for functions defined in C and Python.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
27533
diff
changeset
|
52 Py_InitModule*() with just "module" for the name. The shared |
|
faabd9867fb8
Provide __module__ attributes for functions defined in C and Python.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
27533
diff
changeset
|
53 library loader squirrels away the true name of the module in |
|
faabd9867fb8
Provide __module__ attributes for functions defined in C and Python.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
27533
diff
changeset
|
54 _Py_PackageContext, and Py_InitModule*() will substitute this |
|
faabd9867fb8
Provide __module__ attributes for functions defined in C and Python.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
27533
diff
changeset
|
55 (if the name actually matches). |
|
faabd9867fb8
Provide __module__ attributes for functions defined in C and Python.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
27533
diff
changeset
|
56 */ |
|
6602
4514a5ea3ec4
Fix importing of shared libraries from inside packages.
Guido van Rossum <guido@python.org>
parents:
5925
diff
changeset
|
57 if (_Py_PackageContext != NULL) { |
|
4514a5ea3ec4
Fix importing of shared libraries from inside packages.
Guido van Rossum <guido@python.org>
parents:
5925
diff
changeset
|
58 char *p = strrchr(_Py_PackageContext, '.'); |
|
4514a5ea3ec4
Fix importing of shared libraries from inside packages.
Guido van Rossum <guido@python.org>
parents:
5925
diff
changeset
|
59 if (p != NULL && strcmp(name, p+1) == 0) { |
|
4514a5ea3ec4
Fix importing of shared libraries from inside packages.
Guido van Rossum <guido@python.org>
parents:
5925
diff
changeset
|
60 name = _Py_PackageContext; |
|
4514a5ea3ec4
Fix importing of shared libraries from inside packages.
Guido van Rossum <guido@python.org>
parents:
5925
diff
changeset
|
61 _Py_PackageContext = NULL; |
|
4514a5ea3ec4
Fix importing of shared libraries from inside packages.
Guido van Rossum <guido@python.org>
parents:
5925
diff
changeset
|
62 } |
|
4514a5ea3ec4
Fix importing of shared libraries from inside packages.
Guido van Rossum <guido@python.org>
parents:
5925
diff
changeset
|
63 } |
|
5925
93304b2e14cb
Removed fatal errors from Py_Initmodule4() (and thus from
Guido van Rossum <guido@python.org>
parents:
5373
diff
changeset
|
64 if ((m = PyImport_AddModule(name)) == NULL) |
|
93304b2e14cb
Removed fatal errors from Py_Initmodule4() (and thus from
Guido van Rossum <guido@python.org>
parents:
5373
diff
changeset
|
65 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
66 d = PyModule_GetDict(m); |
|
24834
64f4dd770c67
Py_InitModule4(): Accept NULL for the 'methods' argument. This makes
Fred Drake <fdrake@acm.org>
parents:
24400
diff
changeset
|
67 if (methods != NULL) { |
|
47527
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
68 n = PyString_FromString(name); |
|
27559
faabd9867fb8
Provide __module__ attributes for functions defined in C and Python.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
27533
diff
changeset
|
69 if (n == NULL) |
|
faabd9867fb8
Provide __module__ attributes for functions defined in C and Python.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
27533
diff
changeset
|
70 return NULL; |
|
24834
64f4dd770c67
Py_InitModule4(): Accept NULL for the 'methods' argument. This makes
Fred Drake <fdrake@acm.org>
parents:
24400
diff
changeset
|
71 for (ml = methods; ml->ml_name != NULL; ml++) { |
|
64f4dd770c67
Py_InitModule4(): Accept NULL for the 'methods' argument. This makes
Fred Drake <fdrake@acm.org>
parents:
24400
diff
changeset
|
72 if ((ml->ml_flags & METH_CLASS) || |
|
64f4dd770c67
Py_InitModule4(): Accept NULL for the 'methods' argument. This makes
Fred Drake <fdrake@acm.org>
parents:
24400
diff
changeset
|
73 (ml->ml_flags & METH_STATIC)) { |
|
64f4dd770c67
Py_InitModule4(): Accept NULL for the 'methods' argument. This makes
Fred Drake <fdrake@acm.org>
parents:
24400
diff
changeset
|
74 PyErr_SetString(PyExc_ValueError, |
|
64f4dd770c67
Py_InitModule4(): Accept NULL for the 'methods' argument. This makes
Fred Drake <fdrake@acm.org>
parents:
24400
diff
changeset
|
75 "module functions cannot set" |
|
64f4dd770c67
Py_InitModule4(): Accept NULL for the 'methods' argument. This makes
Fred Drake <fdrake@acm.org>
parents:
24400
diff
changeset
|
76 " METH_CLASS or METH_STATIC"); |
|
36774
35612a131ac6
Fix more memory leaks. Will backport to 2.4.
Martin v. Löwis <martin@v.loewis.de>
parents:
36521
diff
changeset
|
77 Py_DECREF(n); |
|
24834
64f4dd770c67
Py_InitModule4(): Accept NULL for the 'methods' argument. This makes
Fred Drake <fdrake@acm.org>
parents:
24400
diff
changeset
|
78 return NULL; |
|
64f4dd770c67
Py_InitModule4(): Accept NULL for the 'methods' argument. This makes
Fred Drake <fdrake@acm.org>
parents:
24400
diff
changeset
|
79 } |
|
27559
faabd9867fb8
Provide __module__ attributes for functions defined in C and Python.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
27533
diff
changeset
|
80 v = PyCFunction_NewEx(ml, passthrough, n); |
|
36774
35612a131ac6
Fix more memory leaks. Will backport to 2.4.
Martin v. Löwis <martin@v.loewis.de>
parents:
36521
diff
changeset
|
81 if (v == NULL) { |
|
35612a131ac6
Fix more memory leaks. Will backport to 2.4.
Martin v. Löwis <martin@v.loewis.de>
parents:
36521
diff
changeset
|
82 Py_DECREF(n); |
|
24834
64f4dd770c67
Py_InitModule4(): Accept NULL for the 'methods' argument. This makes
Fred Drake <fdrake@acm.org>
parents:
24400
diff
changeset
|
83 return NULL; |
|
36774
35612a131ac6
Fix more memory leaks. Will backport to 2.4.
Martin v. Löwis <martin@v.loewis.de>
parents:
36521
diff
changeset
|
84 } |
|
24834
64f4dd770c67
Py_InitModule4(): Accept NULL for the 'methods' argument. This makes
Fred Drake <fdrake@acm.org>
parents:
24400
diff
changeset
|
85 if (PyDict_SetItemString(d, ml->ml_name, v) != 0) { |
|
64f4dd770c67
Py_InitModule4(): Accept NULL for the 'methods' argument. This makes
Fred Drake <fdrake@acm.org>
parents:
24400
diff
changeset
|
86 Py_DECREF(v); |
|
36774
35612a131ac6
Fix more memory leaks. Will backport to 2.4.
Martin v. Löwis <martin@v.loewis.de>
parents:
36521
diff
changeset
|
87 Py_DECREF(n); |
|
24834
64f4dd770c67
Py_InitModule4(): Accept NULL for the 'methods' argument. This makes
Fred Drake <fdrake@acm.org>
parents:
24400
diff
changeset
|
88 return NULL; |
|
64f4dd770c67
Py_InitModule4(): Accept NULL for the 'methods' argument. This makes
Fred Drake <fdrake@acm.org>
parents:
24400
diff
changeset
|
89 } |
|
64f4dd770c67
Py_InitModule4(): Accept NULL for the 'methods' argument. This makes
Fred Drake <fdrake@acm.org>
parents:
24400
diff
changeset
|
90 Py_DECREF(v); |
|
22613
ddc9543c76a0
Introduce two new flag bits that can be set in a PyMethodDef method
Fred Drake <fdrake@acm.org>
parents:
19343
diff
changeset
|
91 } |
|
35895
fe4c627b2096
Fix a few more memory leaks
Neal Norwitz <nnorwitz@gmail.com>
parents:
32656
diff
changeset
|
92 Py_DECREF(n); |
| 6 | 93 } |
|
2090
f78b387b54e0
New newmethodobject() interface takes struct methodlist pointer
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
94 if (doc != NULL) { |
|
47527
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
95 v = PyString_FromString(doc); |
|
18991
360cece76123
Plug a memory leak in Py_InitModule4(): when PyDict_SetItemString() failed,
Fred Drake <fdrake@acm.org>
parents:
18908
diff
changeset
|
96 if (v == NULL || PyDict_SetItemString(d, "__doc__", v) != 0) { |
|
26664
fe2d422385b1
Fixed potential crash: v can be NULL here, so use Py_XDECREF rather than Py_DECREF
Just van Rossum <just@letterror.com>
parents:
24834
diff
changeset
|
97 Py_XDECREF(v); |
|
5925
93304b2e14cb
Removed fatal errors from Py_Initmodule4() (and thus from
Guido van Rossum <guido@python.org>
parents:
5373
diff
changeset
|
98 return NULL; |
|
18991
360cece76123
Plug a memory leak in Py_InitModule4(): when PyDict_SetItemString() failed,
Fred Drake <fdrake@acm.org>
parents:
18908
diff
changeset
|
99 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
100 Py_DECREF(v); |
|
2090
f78b387b54e0
New newmethodobject() interface takes struct methodlist pointer
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
101 } |
| 86 | 102 return m; |
| 6 | 103 } |
| 104 | |
| 105 | |
|
1211
406860dfaac7
* stdwinmodule.c: various new commands: setwin{pos,size},
Guido van Rossum <guido@python.org>
parents:
1198
diff
changeset
|
106 /* Helper for mkvalue() to scan the length of a format */ |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
107 |
|
27533
842d6a24497a
Style consistency, so "grep ^function ..." works as expected.
Fred Drake <fdrake@acm.org>
parents:
26664
diff
changeset
|
108 static int |
|
35999
9541369b0dca
Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35935
diff
changeset
|
109 countformat(const char *format, int endchar) |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
110 { |
|
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
111 int count = 0; |
|
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
112 int level = 0; |
|
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
113 while (level > 0 || *format != endchar) { |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
114 switch (*format) { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
115 case '\0': |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
116 /* Premature end */ |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
117 PyErr_SetString(PyExc_SystemError, |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
118 "unmatched paren in format"); |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
119 return -1; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
120 case '(': |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
121 case '[': |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
122 case '{': |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
123 if (level == 0) |
|
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
124 count++; |
|
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
125 level++; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
126 break; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
127 case ')': |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
128 case ']': |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
129 case '}': |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
130 level--; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
131 break; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
132 case '#': |
|
2202
9894e55468ec
support "O&" taking an object constructor a void*
Guido van Rossum <guido@python.org>
parents:
2154
diff
changeset
|
133 case '&': |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
134 case ',': |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
135 case ':': |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
136 case ' ': |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
137 case '\t': |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
138 break; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
139 default: |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
140 if (level == 0) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
141 count++; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
142 } |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
143 format++; |
|
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
144 } |
|
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
145 return count; |
|
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
146 } |
|
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
147 |
|
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
148 |
|
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
149 /* Generic function to create a value -- the inverse of getargs() */ |
|
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
150 /* After an original idea and first implementation by Steven Miale */ |
|
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
151 |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
152 static PyObject *do_mktuple(const char**, va_list *, int, int, int); |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
153 static PyObject *do_mklist(const char**, va_list *, int, int, int); |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
154 static PyObject *do_mkdict(const char**, va_list *, int, int, int); |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
155 static PyObject *do_mkvalue(const char**, va_list *, int); |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
156 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
157 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
158 static PyObject * |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
159 do_mkdict(const char **p_format, va_list *p_va, int endchar, int n, int flags) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
160 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
161 PyObject *d; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
162 int i; |
|
32656
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
163 int itemfailed = 0; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
164 if (n < 0) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
165 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
166 if ((d = PyDict_New()) == NULL) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
167 return NULL; |
|
32656
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
168 /* Note that we can't bail immediately on error as this will leak |
|
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
169 refcounts on any 'N' arguments. */ |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
170 for (i = 0; i < n; i+= 2) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
171 PyObject *k, *v; |
|
6613
2e874a5a912f
Plug memory leak in Py_BuildValue when using {...} to construct dictionaries.
Guido van Rossum <guido@python.org>
parents:
6602
diff
changeset
|
172 int err; |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
173 k = do_mkvalue(p_format, p_va, flags); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
174 if (k == NULL) { |
|
32656
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
175 itemfailed = 1; |
|
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
176 Py_INCREF(Py_None); |
|
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
177 k = Py_None; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
178 } |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
179 v = do_mkvalue(p_format, p_va, flags); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
180 if (v == NULL) { |
|
32656
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
181 itemfailed = 1; |
|
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
182 Py_INCREF(Py_None); |
|
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
183 v = Py_None; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
184 } |
|
6613
2e874a5a912f
Plug memory leak in Py_BuildValue when using {...} to construct dictionaries.
Guido van Rossum <guido@python.org>
parents:
6602
diff
changeset
|
185 err = PyDict_SetItem(d, k, v); |
|
2e874a5a912f
Plug memory leak in Py_BuildValue when using {...} to construct dictionaries.
Guido van Rossum <guido@python.org>
parents:
6602
diff
changeset
|
186 Py_DECREF(k); |
|
2e874a5a912f
Plug memory leak in Py_BuildValue when using {...} to construct dictionaries.
Guido van Rossum <guido@python.org>
parents:
6602
diff
changeset
|
187 Py_DECREF(v); |
|
32656
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
188 if (err < 0 || itemfailed) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
189 Py_DECREF(d); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
190 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
191 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
192 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
193 if (d != NULL && **p_format != endchar) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
194 Py_DECREF(d); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
195 d = NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
196 PyErr_SetString(PyExc_SystemError, |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
197 "Unmatched paren in format"); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
198 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
199 else if (endchar) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
200 ++*p_format; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
201 return d; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
202 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
203 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
204 static PyObject * |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
205 do_mklist(const char **p_format, va_list *p_va, int endchar, int n, int flags) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
206 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
207 PyObject *v; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
208 int i; |
|
32656
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
209 int itemfailed = 0; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
210 if (n < 0) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
211 return NULL; |
|
36858
7fac5d79d043
Try to cleanup the error handling a bit so there aren't false positives
Neal Norwitz <nnorwitz@gmail.com>
parents:
36774
diff
changeset
|
212 v = PyList_New(n); |
|
7fac5d79d043
Try to cleanup the error handling a bit so there aren't false positives
Neal Norwitz <nnorwitz@gmail.com>
parents:
36774
diff
changeset
|
213 if (v == NULL) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
214 return NULL; |
|
32656
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
215 /* Note that we can't bail immediately on error as this will leak |
|
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
216 refcounts on any 'N' arguments. */ |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
217 for (i = 0; i < n; i++) { |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
218 PyObject *w = do_mkvalue(p_format, p_va, flags); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
219 if (w == NULL) { |
|
32656
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
220 itemfailed = 1; |
|
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
221 Py_INCREF(Py_None); |
|
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
222 w = Py_None; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
223 } |
|
37025
03894a7a32ec
Make mktuple consistent with mklist to get rid of Coverity warnings. Also use macro version of SetItem since we know everything is setup.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36858
diff
changeset
|
224 PyList_SET_ITEM(v, i, w); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
225 } |
|
36858
7fac5d79d043
Try to cleanup the error handling a bit so there aren't false positives
Neal Norwitz <nnorwitz@gmail.com>
parents:
36774
diff
changeset
|
226 |
|
7fac5d79d043
Try to cleanup the error handling a bit so there aren't false positives
Neal Norwitz <nnorwitz@gmail.com>
parents:
36774
diff
changeset
|
227 if (itemfailed) { |
|
7fac5d79d043
Try to cleanup the error handling a bit so there aren't false positives
Neal Norwitz <nnorwitz@gmail.com>
parents:
36774
diff
changeset
|
228 /* do_mkvalue() should have already set an error */ |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
229 Py_DECREF(v); |
|
36858
7fac5d79d043
Try to cleanup the error handling a bit so there aren't false positives
Neal Norwitz <nnorwitz@gmail.com>
parents:
36774
diff
changeset
|
230 return NULL; |
|
7fac5d79d043
Try to cleanup the error handling a bit so there aren't false positives
Neal Norwitz <nnorwitz@gmail.com>
parents:
36774
diff
changeset
|
231 } |
|
7fac5d79d043
Try to cleanup the error handling a bit so there aren't false positives
Neal Norwitz <nnorwitz@gmail.com>
parents:
36774
diff
changeset
|
232 if (**p_format != endchar) { |
|
7fac5d79d043
Try to cleanup the error handling a bit so there aren't false positives
Neal Norwitz <nnorwitz@gmail.com>
parents:
36774
diff
changeset
|
233 Py_DECREF(v); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
234 PyErr_SetString(PyExc_SystemError, |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
235 "Unmatched paren in format"); |
|
36858
7fac5d79d043
Try to cleanup the error handling a bit so there aren't false positives
Neal Norwitz <nnorwitz@gmail.com>
parents:
36774
diff
changeset
|
236 return NULL; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
237 } |
|
36858
7fac5d79d043
Try to cleanup the error handling a bit so there aren't false positives
Neal Norwitz <nnorwitz@gmail.com>
parents:
36774
diff
changeset
|
238 if (endchar) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
239 ++*p_format; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
240 return v; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
241 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
242 |
|
19343
7257e87e0720
Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents:
18991
diff
changeset
|
243 #ifdef Py_USING_UNICODE |
|
12520
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
244 static int |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
245 _ustrlen(Py_UNICODE *u) |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
246 { |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
247 int i = 0; |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
248 Py_UNICODE *v = u; |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
249 while (*v != 0) { i++; v++; } |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
250 return i; |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
251 } |
|
19343
7257e87e0720
Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents:
18991
diff
changeset
|
252 #endif |
|
12520
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
253 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
254 static PyObject * |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
255 do_mktuple(const char **p_format, va_list *p_va, int endchar, int n, int flags) |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
256 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
257 PyObject *v; |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
258 int i; |
|
32656
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
259 int itemfailed = 0; |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
260 if (n < 0) |
|
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
261 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
262 if ((v = PyTuple_New(n)) == NULL) |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
263 return NULL; |
|
32656
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
264 /* Note that we can't bail immediately on error as this will leak |
|
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
265 refcounts on any 'N' arguments. */ |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
266 for (i = 0; i < n; i++) { |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
267 PyObject *w = do_mkvalue(p_format, p_va, flags); |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
268 if (w == NULL) { |
|
32656
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
269 itemfailed = 1; |
|
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
270 Py_INCREF(Py_None); |
|
391937571065
This is Pete Shinners' patch from his bug report
Michael W. Hudson <mwh@python.net>
parents:
30968
diff
changeset
|
271 w = Py_None; |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
272 } |
|
37025
03894a7a32ec
Make mktuple consistent with mklist to get rid of Coverity warnings. Also use macro version of SetItem since we know everything is setup.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36858
diff
changeset
|
273 PyTuple_SET_ITEM(v, i, w); |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
274 } |
|
37025
03894a7a32ec
Make mktuple consistent with mklist to get rid of Coverity warnings. Also use macro version of SetItem since we know everything is setup.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36858
diff
changeset
|
275 if (itemfailed) { |
|
03894a7a32ec
Make mktuple consistent with mklist to get rid of Coverity warnings. Also use macro version of SetItem since we know everything is setup.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36858
diff
changeset
|
276 /* do_mkvalue() should have already set an error */ |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
277 Py_DECREF(v); |
|
37025
03894a7a32ec
Make mktuple consistent with mklist to get rid of Coverity warnings. Also use macro version of SetItem since we know everything is setup.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36858
diff
changeset
|
278 return NULL; |
|
03894a7a32ec
Make mktuple consistent with mklist to get rid of Coverity warnings. Also use macro version of SetItem since we know everything is setup.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36858
diff
changeset
|
279 } |
|
03894a7a32ec
Make mktuple consistent with mklist to get rid of Coverity warnings. Also use macro version of SetItem since we know everything is setup.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36858
diff
changeset
|
280 if (**p_format != endchar) { |
|
03894a7a32ec
Make mktuple consistent with mklist to get rid of Coverity warnings. Also use macro version of SetItem since we know everything is setup.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36858
diff
changeset
|
281 Py_DECREF(v); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
282 PyErr_SetString(PyExc_SystemError, |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
283 "Unmatched paren in format"); |
|
37025
03894a7a32ec
Make mktuple consistent with mklist to get rid of Coverity warnings. Also use macro version of SetItem since we know everything is setup.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36858
diff
changeset
|
284 return NULL; |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
285 } |
|
37025
03894a7a32ec
Make mktuple consistent with mklist to get rid of Coverity warnings. Also use macro version of SetItem since we know everything is setup.
Neal Norwitz <nnorwitz@gmail.com>
parents:
36858
diff
changeset
|
286 if (endchar) |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
287 ++*p_format; |
|
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
288 return v; |
|
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
289 } |
|
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
290 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
291 static PyObject * |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
292 do_mkvalue(const char **p_format, va_list *p_va, int flags) |
|
860
39134c99c923
Added parameter decls to do_mkvalue for non-template machines
Guido van Rossum <guido@python.org>
parents:
817
diff
changeset
|
293 { |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
294 for (;;) { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
295 switch (*(*p_format)++) { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
296 case '(': |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
297 return do_mktuple(p_format, p_va, ')', |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
298 countformat(*p_format, ')'), flags); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
299 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
300 case '[': |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
301 return do_mklist(p_format, p_va, ']', |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
302 countformat(*p_format, ']'), flags); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
303 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
304 case '{': |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
305 return do_mkdict(p_format, p_va, '}', |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
306 countformat(*p_format, '}'), flags); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
307 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
308 case 'b': |
|
14588
dcbc084d046e
Cast UCHAR_MAX to int before doing the comparison for overflow of the
Jack Jansen <jack.jansen@cwi.nl>
parents:
14375
diff
changeset
|
309 case 'B': |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
310 case 'h': |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
311 case 'i': |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
312 return PyInt_FromLong((long)va_arg(*p_va, int)); |
|
13378
113d833eea7e
Added support for H (unsigned short) specifier in PyArg_ParseTuple and
Jack Jansen <jack.jansen@cwi.nl>
parents:
13330
diff
changeset
|
313 |
|
113d833eea7e
Added support for H (unsigned short) specifier in PyArg_ParseTuple and
Jack Jansen <jack.jansen@cwi.nl>
parents:
13330
diff
changeset
|
314 case 'H': |
|
113d833eea7e
Added support for H (unsigned short) specifier in PyArg_ParseTuple and
Jack Jansen <jack.jansen@cwi.nl>
parents:
13330
diff
changeset
|
315 return PyInt_FromLong((long)va_arg(*p_va, unsigned int)); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
316 |
|
35935
7c8800b81c50
bug #1281408: make Py_BuildValue work with unsigned longs and long longs
Georg Brandl <georg@python.org>
parents:
35895
diff
changeset
|
317 case 'I': |
|
7c8800b81c50
bug #1281408: make Py_BuildValue work with unsigned longs and long longs
Georg Brandl <georg@python.org>
parents:
35895
diff
changeset
|
318 { |
|
7c8800b81c50
bug #1281408: make Py_BuildValue work with unsigned longs and long longs
Georg Brandl <georg@python.org>
parents:
35895
diff
changeset
|
319 unsigned int n; |
|
7c8800b81c50
bug #1281408: make Py_BuildValue work with unsigned longs and long longs
Georg Brandl <georg@python.org>
parents:
35895
diff
changeset
|
320 n = va_arg(*p_va, unsigned int); |
|
36115
03dbec0d9504
do_mkvalue(), 'I' and 'k' cases: squash legitimate
Tim Peters <tim.peters@gmail.com>
parents:
35999
diff
changeset
|
321 if (n > (unsigned long)PyInt_GetMax()) |
|
35935
7c8800b81c50
bug #1281408: make Py_BuildValue work with unsigned longs and long longs
Georg Brandl <georg@python.org>
parents:
35895
diff
changeset
|
322 return PyLong_FromUnsignedLong((unsigned long)n); |
|
7c8800b81c50
bug #1281408: make Py_BuildValue work with unsigned longs and long longs
Georg Brandl <georg@python.org>
parents:
35895
diff
changeset
|
323 else |
|
7c8800b81c50
bug #1281408: make Py_BuildValue work with unsigned longs and long longs
Georg Brandl <georg@python.org>
parents:
35895
diff
changeset
|
324 return PyInt_FromLong(n); |
|
7c8800b81c50
bug #1281408: make Py_BuildValue work with unsigned longs and long longs
Georg Brandl <georg@python.org>
parents:
35895
diff
changeset
|
325 } |
|
7c8800b81c50
bug #1281408: make Py_BuildValue work with unsigned longs and long longs
Georg Brandl <georg@python.org>
parents:
35895
diff
changeset
|
326 |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36115
diff
changeset
|
327 case 'n': |
|
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36115
diff
changeset
|
328 #if SIZEOF_SIZE_T!=SIZEOF_LONG |
|
36521
30aef3ce2b26
Use Py_ssize_t to count the
Martin v. Löwis <martin@v.loewis.de>
parents:
36501
diff
changeset
|
329 return PyInt_FromSsize_t(va_arg(*p_va, Py_ssize_t)); |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36115
diff
changeset
|
330 #endif |
|
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36115
diff
changeset
|
331 /* Fall through from 'n' to 'l' if Py_ssize_t is long */ |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
332 case 'l': |
|
35935
7c8800b81c50
bug #1281408: make Py_BuildValue work with unsigned longs and long longs
Georg Brandl <georg@python.org>
parents:
35895
diff
changeset
|
333 return PyInt_FromLong(va_arg(*p_va, long)); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
334 |
|
28658
8836529e9e66
dded missing k and K format specifiers to Py_BuildValue and friends.
Jack Jansen <jack.jansen@cwi.nl>
parents:
28437
diff
changeset
|
335 case 'k': |
|
35935
7c8800b81c50
bug #1281408: make Py_BuildValue work with unsigned longs and long longs
Georg Brandl <georg@python.org>
parents:
35895
diff
changeset
|
336 { |
|
7c8800b81c50
bug #1281408: make Py_BuildValue work with unsigned longs and long longs
Georg Brandl <georg@python.org>
parents:
35895
diff
changeset
|
337 unsigned long n; |
|
7c8800b81c50
bug #1281408: make Py_BuildValue work with unsigned longs and long longs
Georg Brandl <georg@python.org>
parents:
35895
diff
changeset
|
338 n = va_arg(*p_va, unsigned long); |
|
36115
03dbec0d9504
do_mkvalue(), 'I' and 'k' cases: squash legitimate
Tim Peters <tim.peters@gmail.com>
parents:
35999
diff
changeset
|
339 if (n > (unsigned long)PyInt_GetMax()) |
|
35935
7c8800b81c50
bug #1281408: make Py_BuildValue work with unsigned longs and long longs
Georg Brandl <georg@python.org>
parents:
35895
diff
changeset
|
340 return PyLong_FromUnsignedLong(n); |
|
7c8800b81c50
bug #1281408: make Py_BuildValue work with unsigned longs and long longs
Georg Brandl <georg@python.org>
parents:
35895
diff
changeset
|
341 else |
|
7c8800b81c50
bug #1281408: make Py_BuildValue work with unsigned longs and long longs
Georg Brandl <georg@python.org>
parents:
35895
diff
changeset
|
342 return PyInt_FromLong(n); |
|
7c8800b81c50
bug #1281408: make Py_BuildValue work with unsigned longs and long longs
Georg Brandl <georg@python.org>
parents:
35895
diff
changeset
|
343 } |
|
28658
8836529e9e66
dded missing k and K format specifiers to Py_BuildValue and friends.
Jack Jansen <jack.jansen@cwi.nl>
parents:
28437
diff
changeset
|
344 |
|
9949
98e37347378b
Change rare occurrences of #if HAVE_LONG_LONG to #ifdef.
Guido van Rossum <guido@python.org>
parents:
9722
diff
changeset
|
345 #ifdef HAVE_LONG_LONG |
|
8822
bd47ee068b83
Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
8640
diff
changeset
|
346 case 'L': |
|
28437
871da703e4c0
Rename LONG_LONG to PY_LONG_LONG. Fixes #710285.
Martin v. Löwis <martin@v.loewis.de>
parents:
27559
diff
changeset
|
347 return PyLong_FromLongLong((PY_LONG_LONG)va_arg(*p_va, PY_LONG_LONG)); |
|
28658
8836529e9e66
dded missing k and K format specifiers to Py_BuildValue and friends.
Jack Jansen <jack.jansen@cwi.nl>
parents:
28437
diff
changeset
|
348 |
|
8836529e9e66
dded missing k and K format specifiers to Py_BuildValue and friends.
Jack Jansen <jack.jansen@cwi.nl>
parents:
28437
diff
changeset
|
349 case 'K': |
|
35935
7c8800b81c50
bug #1281408: make Py_BuildValue work with unsigned longs and long longs
Georg Brandl <georg@python.org>
parents:
35895
diff
changeset
|
350 return PyLong_FromUnsignedLongLong((PY_LONG_LONG)va_arg(*p_va, unsigned PY_LONG_LONG)); |
|
8822
bd47ee068b83
Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
8640
diff
changeset
|
351 #endif |
|
19343
7257e87e0720
Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents:
18991
diff
changeset
|
352 #ifdef Py_USING_UNICODE |
|
12520
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
353 case 'u': |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
354 { |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
355 PyObject *v; |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
356 Py_UNICODE *u = va_arg(*p_va, Py_UNICODE *); |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
357 Py_ssize_t n; |
|
12520
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
358 if (**p_format == '#') { |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
359 ++*p_format; |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
360 if (flags & FLAG_SIZE_T) |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
361 n = va_arg(*p_va, Py_ssize_t); |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
362 else |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
363 n = va_arg(*p_va, int); |
|
12520
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
364 } |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
365 else |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
366 n = -1; |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
367 if (u == NULL) { |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
368 v = Py_None; |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
369 Py_INCREF(v); |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
370 } |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
371 else { |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
372 if (n < 0) |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
373 n = _ustrlen(u); |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
374 v = PyUnicode_FromUnicode(u, n); |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
375 } |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
376 return v; |
|
b6b7bd20c845
Brian Hooper <brian_takashi@hotmail.com>:
Fred Drake <fdrake@acm.org>
parents:
9949
diff
changeset
|
377 } |
|
19343
7257e87e0720
Patch #445762: Support --disable-unicode
Martin v. Löwis <martin@v.loewis.de>
parents:
18991
diff
changeset
|
378 #endif |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
379 case 'f': |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
380 case 'd': |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
381 return PyFloat_FromDouble( |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
382 (double)va_arg(*p_va, va_double)); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
383 |
|
17032
d5811af8acf3
Py_BuildValue(): Add "D" conversion to create a Python complex value from
Fred Drake <fdrake@acm.org>
parents:
14869
diff
changeset
|
384 #ifndef WITHOUT_COMPLEX |
|
d5811af8acf3
Py_BuildValue(): Add "D" conversion to create a Python complex value from
Fred Drake <fdrake@acm.org>
parents:
14869
diff
changeset
|
385 case 'D': |
|
d5811af8acf3
Py_BuildValue(): Add "D" conversion to create a Python complex value from
Fred Drake <fdrake@acm.org>
parents:
14869
diff
changeset
|
386 return PyComplex_FromCComplex( |
|
d5811af8acf3
Py_BuildValue(): Add "D" conversion to create a Python complex value from
Fred Drake <fdrake@acm.org>
parents:
14869
diff
changeset
|
387 *((Py_complex *)va_arg(*p_va, Py_complex *))); |
|
d5811af8acf3
Py_BuildValue(): Add "D" conversion to create a Python complex value from
Fred Drake <fdrake@acm.org>
parents:
14869
diff
changeset
|
388 #endif /* WITHOUT_COMPLEX */ |
|
d5811af8acf3
Py_BuildValue(): Add "D" conversion to create a Python complex value from
Fred Drake <fdrake@acm.org>
parents:
14869
diff
changeset
|
389 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
390 case 'c': |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
391 { |
|
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
392 char p[1]; |
|
36501
7fdc639bc5b4
Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents:
36115
diff
changeset
|
393 p[0] = (char)va_arg(*p_va, int); |
|
47527
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
394 return PyString_FromStringAndSize(p, 1); |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
395 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
396 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
397 case 's': |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
398 case 'z': |
|
816
e4a27d84ea36
Added mkvalue() function
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
399 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
400 PyObject *v; |
|
816
e4a27d84ea36
Added mkvalue() function
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
401 char *str = va_arg(*p_va, char *); |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
402 Py_ssize_t n; |
|
816
e4a27d84ea36
Added mkvalue() function
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
403 if (**p_format == '#') { |
|
e4a27d84ea36
Added mkvalue() function
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
404 ++*p_format; |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
405 if (flags & FLAG_SIZE_T) |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
406 n = va_arg(*p_va, Py_ssize_t); |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
407 else |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
408 n = va_arg(*p_va, int); |
|
816
e4a27d84ea36
Added mkvalue() function
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
409 } |
|
e4a27d84ea36
Added mkvalue() function
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
410 else |
|
e4a27d84ea36
Added mkvalue() function
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
411 n = -1; |
|
e4a27d84ea36
Added mkvalue() function
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
412 if (str == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
413 v = Py_None; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
414 Py_INCREF(v); |
|
816
e4a27d84ea36
Added mkvalue() function
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
415 } |
|
e4a27d84ea36
Added mkvalue() function
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
416 else { |
|
13096
8c8de5b736dc
Trent Mick's Win64 changes: size_t vs. int or long; also some overflow
Guido van Rossum <guido@python.org>
parents:
12520
diff
changeset
|
417 if (n < 0) { |
|
8c8de5b736dc
Trent Mick's Win64 changes: size_t vs. int or long; also some overflow
Guido van Rossum <guido@python.org>
parents:
12520
diff
changeset
|
418 size_t m = strlen(str); |
|
37673
606818c33e50
Replace INT_MAX with PY_SSIZE_T_MAX.
Martin v. Löwis <martin@v.loewis.de>
parents:
37025
diff
changeset
|
419 if (m > PY_SSIZE_T_MAX) { |
|
13096
8c8de5b736dc
Trent Mick's Win64 changes: size_t vs. int or long; also some overflow
Guido van Rossum <guido@python.org>
parents:
12520
diff
changeset
|
420 PyErr_SetString(PyExc_OverflowError, |
|
8c8de5b736dc
Trent Mick's Win64 changes: size_t vs. int or long; also some overflow
Guido van Rossum <guido@python.org>
parents:
12520
diff
changeset
|
421 "string too long for Python string"); |
|
8c8de5b736dc
Trent Mick's Win64 changes: size_t vs. int or long; also some overflow
Guido van Rossum <guido@python.org>
parents:
12520
diff
changeset
|
422 return NULL; |
|
8c8de5b736dc
Trent Mick's Win64 changes: size_t vs. int or long; also some overflow
Guido van Rossum <guido@python.org>
parents:
12520
diff
changeset
|
423 } |
|
39995
6ba402b60041
Forward-port of r52136,52138: a review of overflow-detecting code.
Armin Rigo <arigo@tunes.org>
parents:
37818
diff
changeset
|
424 n = (Py_ssize_t)m; |
|
13096
8c8de5b736dc
Trent Mick's Win64 changes: size_t vs. int or long; also some overflow
Guido van Rossum <guido@python.org>
parents:
12520
diff
changeset
|
425 } |
|
47527
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
426 v = PyString_FromStringAndSize(str, n); |
|
816
e4a27d84ea36
Added mkvalue() function
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
427 } |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
428 return v; |
|
816
e4a27d84ea36
Added mkvalue() function
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
429 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
430 |
|
9720
24ca64134594
Add 'N' format character to Py_BuildValue -- like 'O' but doesn't INCREF.
Guido van Rossum <guido@python.org>
parents:
9044
diff
changeset
|
431 case 'N': |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
432 case 'S': |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
433 case 'O': |
|
2202
9894e55468ec
support "O&" taking an object constructor a void*
Guido van Rossum <guido@python.org>
parents:
2154
diff
changeset
|
434 if (**p_format == '&') { |
|
13447
a89f7f268de4
Nuke all remaining occurrences of Py_PROTO and Py_FPROTO.
Tim Peters <tim.peters@gmail.com>
parents:
13378
diff
changeset
|
435 typedef PyObject *(*converter)(void *); |
|
2202
9894e55468ec
support "O&" taking an object constructor a void*
Guido van Rossum <guido@python.org>
parents:
2154
diff
changeset
|
436 converter func = va_arg(*p_va, converter); |
|
9894e55468ec
support "O&" taking an object constructor a void*
Guido van Rossum <guido@python.org>
parents:
2154
diff
changeset
|
437 void *arg = va_arg(*p_va, void *); |
|
9894e55468ec
support "O&" taking an object constructor a void*
Guido van Rossum <guido@python.org>
parents:
2154
diff
changeset
|
438 ++*p_format; |
|
9894e55468ec
support "O&" taking an object constructor a void*
Guido van Rossum <guido@python.org>
parents:
2154
diff
changeset
|
439 return (*func)(arg); |
|
9894e55468ec
support "O&" taking an object constructor a void*
Guido van Rossum <guido@python.org>
parents:
2154
diff
changeset
|
440 } |
|
9894e55468ec
support "O&" taking an object constructor a void*
Guido van Rossum <guido@python.org>
parents:
2154
diff
changeset
|
441 else { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
442 PyObject *v; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
443 v = va_arg(*p_va, PyObject *); |
|
9722
3955f787e9a1
Oops, forgot a pair of {}'s. (Greg Couch)
Guido van Rossum <guido@python.org>
parents:
9720
diff
changeset
|
444 if (v != NULL) { |
|
9720
24ca64134594
Add 'N' format character to Py_BuildValue -- like 'O' but doesn't INCREF.
Guido van Rossum <guido@python.org>
parents:
9044
diff
changeset
|
445 if (*(*p_format - 1) != 'N') |
|
24ca64134594
Add 'N' format character to Py_BuildValue -- like 'O' but doesn't INCREF.
Guido van Rossum <guido@python.org>
parents:
9044
diff
changeset
|
446 Py_INCREF(v); |
|
9722
3955f787e9a1
Oops, forgot a pair of {}'s. (Greg Couch)
Guido van Rossum <guido@python.org>
parents:
9720
diff
changeset
|
447 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
448 else if (!PyErr_Occurred()) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
449 /* If a NULL was passed |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
450 * because a call that should |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
451 * have constructed a value |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
452 * failed, that's OK, and we |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
453 * pass the error on; but if |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
454 * no error occurred it's not |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
455 * clear that the caller knew |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
456 * what she was doing. */ |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
457 PyErr_SetString(PyExc_SystemError, |
|
8640
8e86a797e596
Two error messages still used the old name of the functio mkvalue() --
Guido van Rossum <guido@python.org>
parents:
6613
diff
changeset
|
458 "NULL object passed to Py_BuildValue"); |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
459 return v; |
|
816
e4a27d84ea36
Added mkvalue() function
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
460 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
461 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
462 case ':': |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
463 case ',': |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
464 case ' ': |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
465 case '\t': |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
466 break; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
467 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
468 default: |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
469 PyErr_SetString(PyExc_SystemError, |
|
8640
8e86a797e596
Two error messages still used the old name of the functio mkvalue() --
Guido van Rossum <guido@python.org>
parents:
6613
diff
changeset
|
470 "bad format char passed to Py_BuildValue"); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
471 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
472 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
473 } |
|
816
e4a27d84ea36
Added mkvalue() function
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
474 } |
|
e4a27d84ea36
Added mkvalue() function
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
475 } |
|
e4a27d84ea36
Added mkvalue() function
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
476 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
477 |
|
27533
842d6a24497a
Style consistency, so "grep ^function ..." works as expected.
Fred Drake <fdrake@acm.org>
parents:
26664
diff
changeset
|
478 PyObject * |
|
35999
9541369b0dca
Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35935
diff
changeset
|
479 Py_BuildValue(const char *format, ...) |
|
816
e4a27d84ea36
Added mkvalue() function
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
480 { |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
481 va_list va; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
482 PyObject* retval; |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
483 va_start(va, format); |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
484 retval = va_build_value(format, va, 0); |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
485 va_end(va); |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
486 return retval; |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
487 } |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
488 |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
489 PyObject * |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
490 _Py_BuildValue_SizeT(const char *format, ...) |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
491 { |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
492 va_list va; |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
493 PyObject* retval; |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
494 va_start(va, format); |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
495 retval = va_build_value(format, va, FLAG_SIZE_T); |
|
817
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
496 va_end(va); |
|
aa633f0defa6
Merged with Steve Miale's version
Guido van Rossum <guido@python.org>
parents:
816
diff
changeset
|
497 return retval; |
|
816
e4a27d84ea36
Added mkvalue() function
Guido van Rossum <guido@python.org>
parents:
795
diff
changeset
|
498 } |
|
1252
c4cd0d9d8281
* Changed many files to use mkvalue() instead of newtupleobject().
Guido van Rossum <guido@python.org>
parents:
1211
diff
changeset
|
499 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
500 PyObject * |
|
35999
9541369b0dca
Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35935
diff
changeset
|
501 Py_VaBuildValue(const char *format, va_list va) |
|
1252
c4cd0d9d8281
* Changed many files to use mkvalue() instead of newtupleobject().
Guido van Rossum <guido@python.org>
parents:
1211
diff
changeset
|
502 { |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
503 return va_build_value(format, va, 0); |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
504 } |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
505 |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
506 PyObject * |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
507 _Py_VaBuildValue_SizeT(const char *format, va_list va) |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
508 { |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
509 return va_build_value(format, va, FLAG_SIZE_T); |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
510 } |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
511 |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
512 static PyObject * |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
513 va_build_value(const char *format, va_list va, int flags) |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
514 { |
|
35999
9541369b0dca
Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35935
diff
changeset
|
515 const char *f = format; |
|
1252
c4cd0d9d8281
* Changed many files to use mkvalue() instead of newtupleobject().
Guido van Rossum <guido@python.org>
parents:
1211
diff
changeset
|
516 int n = countformat(f, '\0'); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
517 va_list lva; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
518 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
519 #ifdef VA_LIST_IS_ARRAY |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
520 memcpy(lva, va, sizeof(va_list)); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
521 #else |
|
24400
81ca6ca5c307
Patch #554716: Use __va_copy where available.
Martin v. Löwis <martin@v.loewis.de>
parents:
23888
diff
changeset
|
522 #ifdef __va_copy |
|
81ca6ca5c307
Patch #554716: Use __va_copy where available.
Martin v. Löwis <martin@v.loewis.de>
parents:
23888
diff
changeset
|
523 __va_copy(lva, va); |
|
81ca6ca5c307
Patch #554716: Use __va_copy where available.
Martin v. Löwis <martin@v.loewis.de>
parents:
23888
diff
changeset
|
524 #else |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
525 lva = va; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
526 #endif |
|
24400
81ca6ca5c307
Patch #554716: Use __va_copy where available.
Martin v. Löwis <martin@v.loewis.de>
parents:
23888
diff
changeset
|
527 #endif |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
528 |
|
1252
c4cd0d9d8281
* Changed many files to use mkvalue() instead of newtupleobject().
Guido van Rossum <guido@python.org>
parents:
1211
diff
changeset
|
529 if (n < 0) |
|
c4cd0d9d8281
* Changed many files to use mkvalue() instead of newtupleobject().
Guido van Rossum <guido@python.org>
parents:
1211
diff
changeset
|
530 return NULL; |
|
c4cd0d9d8281
* Changed many files to use mkvalue() instead of newtupleobject().
Guido van Rossum <guido@python.org>
parents:
1211
diff
changeset
|
531 if (n == 0) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
532 Py_INCREF(Py_None); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
533 return Py_None; |
|
1252
c4cd0d9d8281
* Changed many files to use mkvalue() instead of newtupleobject().
Guido van Rossum <guido@python.org>
parents:
1211
diff
changeset
|
534 } |
|
c4cd0d9d8281
* Changed many files to use mkvalue() instead of newtupleobject().
Guido van Rossum <guido@python.org>
parents:
1211
diff
changeset
|
535 if (n == 1) |
|
37702
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
536 return do_mkvalue(&f, &lva, flags); |
|
9b22d8b7bcaa
Make Py_BuildValue, PyObject_CallFunction and
Martin v. Löwis <martin@v.loewis.de>
parents:
37673
diff
changeset
|
537 return do_mktuple(&f, &lva, '\0', n, flags); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
538 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
539 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
540 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
541 PyObject * |
|
35999
9541369b0dca
Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35935
diff
changeset
|
542 PyEval_CallFunction(PyObject *obj, const char *format, ...) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
543 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
544 va_list vargs; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
545 PyObject *args; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
546 PyObject *res; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
547 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
548 va_start(vargs, format); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
549 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
550 args = Py_VaBuildValue(format, vargs); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
551 va_end(vargs); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
552 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
553 if (args == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
554 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
555 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
556 res = PyEval_CallObject(obj, args); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
557 Py_DECREF(args); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
558 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
559 return res; |
|
1252
c4cd0d9d8281
* Changed many files to use mkvalue() instead of newtupleobject().
Guido van Rossum <guido@python.org>
parents:
1211
diff
changeset
|
560 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
561 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
562 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
563 PyObject * |
|
35999
9541369b0dca
Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35935
diff
changeset
|
564 PyEval_CallMethod(PyObject *obj, const char *methodname, const char *format, ...) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
565 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
566 va_list vargs; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
567 PyObject *meth; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
568 PyObject *args; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
569 PyObject *res; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
570 |
|
8898
492363d6bc94
# Fix strange type (methonname instead of methodname).
Guido van Rossum <guido@python.org>
parents:
8822
diff
changeset
|
571 meth = PyObject_GetAttrString(obj, methodname); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
572 if (meth == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
573 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
574 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
575 va_start(vargs, format); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
576 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
577 args = Py_VaBuildValue(format, vargs); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
578 va_end(vargs); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
579 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
580 if (args == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
581 Py_DECREF(meth); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
582 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
583 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
584 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
585 res = PyEval_CallObject(meth, args); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
586 Py_DECREF(meth); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
4503
diff
changeset
|
587 Py_DECREF(args); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
588 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
589 return res; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
1913
diff
changeset
|
590 } |
|
14781
081671cef7c1
Andrew Kuchling <akuchlin@mems-exchange.org>:
Fred Drake <fdrake@acm.org>
parents:
14588
diff
changeset
|
591 |
|
081671cef7c1
Andrew Kuchling <akuchlin@mems-exchange.org>:
Fred Drake <fdrake@acm.org>
parents:
14588
diff
changeset
|
592 int |
|
35999
9541369b0dca
Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35935
diff
changeset
|
593 PyModule_AddObject(PyObject *m, const char *name, PyObject *o) |
|
14781
081671cef7c1
Andrew Kuchling <akuchlin@mems-exchange.org>:
Fred Drake <fdrake@acm.org>
parents:
14588
diff
changeset
|
594 { |
|
081671cef7c1
Andrew Kuchling <akuchlin@mems-exchange.org>:
Fred Drake <fdrake@acm.org>
parents:
14588
diff
changeset
|
595 PyObject *dict; |
| 29579 | 596 if (!PyModule_Check(m)) { |
|
23888
7b66f0034233
PyModule_AddObject(): Added missing exceptions.
Fred Drake <fdrake@acm.org>
parents:
22613
diff
changeset
|
597 PyErr_SetString(PyExc_TypeError, |
|
7b66f0034233
PyModule_AddObject(): Added missing exceptions.
Fred Drake <fdrake@acm.org>
parents:
22613
diff
changeset
|
598 "PyModule_AddObject() needs module as first arg"); |
|
14781
081671cef7c1
Andrew Kuchling <akuchlin@mems-exchange.org>:
Fred Drake <fdrake@acm.org>
parents:
14588
diff
changeset
|
599 return -1; |
|
23888
7b66f0034233
PyModule_AddObject(): Added missing exceptions.
Fred Drake <fdrake@acm.org>
parents:
22613
diff
changeset
|
600 } |
| 29579 | 601 if (!o) { |
|
30771
a6879d1733d7
Patch #828384: Don't discard nested exception in AddObject.
Martin v. Löwis <martin@v.loewis.de>
parents:
29579
diff
changeset
|
602 if (!PyErr_Occurred()) |
|
a6879d1733d7
Patch #828384: Don't discard nested exception in AddObject.
Martin v. Löwis <martin@v.loewis.de>
parents:
29579
diff
changeset
|
603 PyErr_SetString(PyExc_TypeError, |
|
a6879d1733d7
Patch #828384: Don't discard nested exception in AddObject.
Martin v. Löwis <martin@v.loewis.de>
parents:
29579
diff
changeset
|
604 "PyModule_AddObject() needs non-NULL value"); |
| 29579 | 605 return -1; |
| 606 } | |
| 607 | |
|
23888
7b66f0034233
PyModule_AddObject(): Added missing exceptions.
Fred Drake <fdrake@acm.org>
parents:
22613
diff
changeset
|
608 dict = PyModule_GetDict(m); |
|
7b66f0034233
PyModule_AddObject(): Added missing exceptions.
Fred Drake <fdrake@acm.org>
parents:
22613
diff
changeset
|
609 if (dict == NULL) { |
|
7b66f0034233
PyModule_AddObject(): Added missing exceptions.
Fred Drake <fdrake@acm.org>
parents:
22613
diff
changeset
|
610 /* Internal error -- modules must have a dict! */ |
|
7b66f0034233
PyModule_AddObject(): Added missing exceptions.
Fred Drake <fdrake@acm.org>
parents:
22613
diff
changeset
|
611 PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__", |
|
7b66f0034233
PyModule_AddObject(): Added missing exceptions.
Fred Drake <fdrake@acm.org>
parents:
22613
diff
changeset
|
612 PyModule_GetName(m)); |
|
7b66f0034233
PyModule_AddObject(): Added missing exceptions.
Fred Drake <fdrake@acm.org>
parents:
22613
diff
changeset
|
613 return -1; |
|
7b66f0034233
PyModule_AddObject(): Added missing exceptions.
Fred Drake <fdrake@acm.org>
parents:
22613
diff
changeset
|
614 } |
|
7b66f0034233
PyModule_AddObject(): Added missing exceptions.
Fred Drake <fdrake@acm.org>
parents:
22613
diff
changeset
|
615 if (PyDict_SetItemString(dict, name, o)) |
|
7b66f0034233
PyModule_AddObject(): Added missing exceptions.
Fred Drake <fdrake@acm.org>
parents:
22613
diff
changeset
|
616 return -1; |
|
7b66f0034233
PyModule_AddObject(): Added missing exceptions.
Fred Drake <fdrake@acm.org>
parents:
22613
diff
changeset
|
617 Py_DECREF(o); |
|
7b66f0034233
PyModule_AddObject(): Added missing exceptions.
Fred Drake <fdrake@acm.org>
parents:
22613
diff
changeset
|
618 return 0; |
|
14781
081671cef7c1
Andrew Kuchling <akuchlin@mems-exchange.org>:
Fred Drake <fdrake@acm.org>
parents:
14588
diff
changeset
|
619 } |
|
081671cef7c1
Andrew Kuchling <akuchlin@mems-exchange.org>:
Fred Drake <fdrake@acm.org>
parents:
14588
diff
changeset
|
620 |
|
081671cef7c1
Andrew Kuchling <akuchlin@mems-exchange.org>:
Fred Drake <fdrake@acm.org>
parents:
14588
diff
changeset
|
621 int |
|
35999
9541369b0dca
Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35935
diff
changeset
|
622 PyModule_AddIntConstant(PyObject *m, const char *name, long value) |
|
14781
081671cef7c1
Andrew Kuchling <akuchlin@mems-exchange.org>:
Fred Drake <fdrake@acm.org>
parents:
14588
diff
changeset
|
623 { |
|
44772
afa0ef379186
#1782: don't leak in error case in PyModule_AddXxxConstant. Patch by Hrvoje Nikšić.
Georg Brandl <georg@python.org>
parents:
39995
diff
changeset
|
624 PyObject *o = PyInt_FromLong(value); |
|
afa0ef379186
#1782: don't leak in error case in PyModule_AddXxxConstant. Patch by Hrvoje Nikšić.
Georg Brandl <georg@python.org>
parents:
39995
diff
changeset
|
625 if (!o) |
|
afa0ef379186
#1782: don't leak in error case in PyModule_AddXxxConstant. Patch by Hrvoje Nikšić.
Georg Brandl <georg@python.org>
parents:
39995
diff
changeset
|
626 return -1; |
|
afa0ef379186
#1782: don't leak in error case in PyModule_AddXxxConstant. Patch by Hrvoje Nikšić.
Georg Brandl <georg@python.org>
parents:
39995
diff
changeset
|
627 if (PyModule_AddObject(m, name, o) == 0) |
|
afa0ef379186
#1782: don't leak in error case in PyModule_AddXxxConstant. Patch by Hrvoje Nikšić.
Georg Brandl <georg@python.org>
parents:
39995
diff
changeset
|
628 return 0; |
|
afa0ef379186
#1782: don't leak in error case in PyModule_AddXxxConstant. Patch by Hrvoje Nikšić.
Georg Brandl <georg@python.org>
parents:
39995
diff
changeset
|
629 Py_DECREF(o); |
|
afa0ef379186
#1782: don't leak in error case in PyModule_AddXxxConstant. Patch by Hrvoje Nikšić.
Georg Brandl <georg@python.org>
parents:
39995
diff
changeset
|
630 return -1; |
|
14781
081671cef7c1
Andrew Kuchling <akuchlin@mems-exchange.org>:
Fred Drake <fdrake@acm.org>
parents:
14588
diff
changeset
|
631 } |
|
081671cef7c1
Andrew Kuchling <akuchlin@mems-exchange.org>:
Fred Drake <fdrake@acm.org>
parents:
14588
diff
changeset
|
632 |
|
081671cef7c1
Andrew Kuchling <akuchlin@mems-exchange.org>:
Fred Drake <fdrake@acm.org>
parents:
14588
diff
changeset
|
633 int |
|
35999
9541369b0dca
Add const to several API functions that take char *.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35935
diff
changeset
|
634 PyModule_AddStringConstant(PyObject *m, const char *name, const char *value) |
|
14781
081671cef7c1
Andrew Kuchling <akuchlin@mems-exchange.org>:
Fred Drake <fdrake@acm.org>
parents:
14588
diff
changeset
|
635 { |
|
47527
52294af4b663
This reverts r63675 based on the discussion in this thread:
Gregory P. Smith <greg@mad-scientist.com>
parents:
47294
diff
changeset
|
636 PyObject *o = PyString_FromString(value); |
|
44772
afa0ef379186
#1782: don't leak in error case in PyModule_AddXxxConstant. Patch by Hrvoje Nikšić.
Georg Brandl <georg@python.org>
parents:
39995
diff
changeset
|
637 if (!o) |
|
afa0ef379186
#1782: don't leak in error case in PyModule_AddXxxConstant. Patch by Hrvoje Nikšić.
Georg Brandl <georg@python.org>
parents:
39995
diff
changeset
|
638 return -1; |
|
afa0ef379186
#1782: don't leak in error case in PyModule_AddXxxConstant. Patch by Hrvoje Nikšić.
Georg Brandl <georg@python.org>
parents:
39995
diff
changeset
|
639 if (PyModule_AddObject(m, name, o) == 0) |
|
afa0ef379186
#1782: don't leak in error case in PyModule_AddXxxConstant. Patch by Hrvoje Nikšić.
Georg Brandl <georg@python.org>
parents:
39995
diff
changeset
|
640 return 0; |
|
afa0ef379186
#1782: don't leak in error case in PyModule_AddXxxConstant. Patch by Hrvoje Nikšić.
Georg Brandl <georg@python.org>
parents:
39995
diff
changeset
|
641 Py_DECREF(o); |
|
afa0ef379186
#1782: don't leak in error case in PyModule_AddXxxConstant. Patch by Hrvoje Nikšić.
Georg Brandl <georg@python.org>
parents:
39995
diff
changeset
|
642 return -1; |
|
14781
081671cef7c1
Andrew Kuchling <akuchlin@mems-exchange.org>:
Fred Drake <fdrake@acm.org>
parents:
14588
diff
changeset
|
643 } |
