summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_bsddb.c8
-rw-r--r--Modules/_codecsmodule.c66
-rw-r--r--Modules/_ctypes/_ctypes.c2
-rw-r--r--Modules/_functoolsmodule.c (renamed from Modules/functionalmodule.c)12
-rw-r--r--Modules/_hashopenssl.c21
-rw-r--r--Modules/_hotshot.c25
-rw-r--r--Modules/_localemodule.c2
-rw-r--r--Modules/_sqlite/module.c4
-rw-r--r--Modules/_sre.c62
-rw-r--r--Modules/_struct.c288
-rw-r--r--Modules/audioop.c126
-rw-r--r--Modules/binascii.c2
-rw-r--r--Modules/cPickle.c31
-rw-r--r--Modules/cjkcodecs/multibytecodec.c24
-rw-r--r--Modules/dbmmodule.c12
-rw-r--r--Modules/flmodule.c17
-rw-r--r--Modules/fmmodule.c22
-rw-r--r--Modules/gdbmmodule.c31
-rw-r--r--Modules/linuxaudiodev.c50
-rw-r--r--Modules/mmapmodule.c36
-rw-r--r--Modules/ossaudiodev.c65
-rw-r--r--Modules/posixmodule.c7
-rw-r--r--Modules/pyexpat.c53
-rw-r--r--Modules/resource.c7
-rw-r--r--Modules/selectmodule.c27
-rw-r--r--Modules/sha256module.c22
-rw-r--r--Modules/sha512module.c24
-rw-r--r--Modules/shamodule.c21
-rw-r--r--Modules/socketmodule.c14
-rw-r--r--Modules/syslogmodule.c6
-rw-r--r--Modules/threadmodule.c3
-rw-r--r--Modules/timemodule.c35
32 files changed, 529 insertions, 596 deletions
diff --git a/Modules/_bsddb.c b/Modules/_bsddb.c
index 1641e20..e18e072 100644
--- a/Modules/_bsddb.c
+++ b/Modules/_bsddb.c
@@ -1041,7 +1041,7 @@ DB_append(DBObject* self, PyObject* args)
DBT key, data;
DB_TXN *txn = NULL;
- if (!PyArg_ParseTuple(args, "O|O:append", &dataobj, &txnobj))
+ if (!PyArg_UnpackTuple(args, "append", 1, 2, &dataobj, &txnobj))
return NULL;
CHECK_DB_NOT_CLOSED(self);
@@ -2895,7 +2895,7 @@ DB_keys(DBObject* self, PyObject* args)
PyObject* txnobj = NULL;
DB_TXN *txn = NULL;
- if (!PyArg_ParseTuple(args,"|O:keys", &txnobj))
+ if (!PyArg_UnpackTuple(args, "keys", 0, 1, &txnobj))
return NULL;
if (!checkTxnObj(txnobj, &txn))
return NULL;
@@ -2909,7 +2909,7 @@ DB_items(DBObject* self, PyObject* args)
PyObject* txnobj = NULL;
DB_TXN *txn = NULL;
- if (!PyArg_ParseTuple(args,"|O:items", &txnobj))
+ if (!PyArg_UnpackTuple(args, "items", 0, 1, &txnobj))
return NULL;
if (!checkTxnObj(txnobj, &txn))
return NULL;
@@ -2923,7 +2923,7 @@ DB_values(DBObject* self, PyObject* args)
PyObject* txnobj = NULL;
DB_TXN *txn = NULL;
- if (!PyArg_ParseTuple(args,"|O:values", &txnobj))
+ if (!PyArg_UnpackTuple(args, "values", 0, 1, &txnobj))
return NULL;
if (!checkTxnObj(txnobj, &txn))
return NULL;
diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c
index d8d23c4..080fa74 100644
--- a/Modules/_codecsmodule.c
+++ b/Modules/_codecsmodule.c
@@ -48,21 +48,12 @@ one argument, the encoding name in all lower case letters, and return\n\
a tuple of functions (encoder, decoder, stream_reader, stream_writer).");
static
-PyObject *codec_register(PyObject *self, PyObject *args)
+PyObject *codec_register(PyObject *self, PyObject *search_function)
{
- PyObject *search_function;
-
- if (!PyArg_ParseTuple(args, "O:register", &search_function))
- goto onError;
-
if (PyCodec_Register(search_function))
- goto onError;
-
- Py_INCREF(Py_None);
- return Py_None;
+ return NULL;
- onError:
- return NULL;
+ Py_RETURN_NONE;
}
PyDoc_STRVAR(lookup__doc__,
@@ -77,12 +68,9 @@ PyObject *codec_lookup(PyObject *self, PyObject *args)
char *encoding;
if (!PyArg_ParseTuple(args, "s:lookup", &encoding))
- goto onError;
+ return NULL;
return _PyCodec_Lookup(encoding);
-
- onError:
- return NULL;
}
PyDoc_STRVAR(encode__doc__,
@@ -116,13 +104,7 @@ codec_encode(PyObject *self, PyObject *args)
#endif
/* Encode via the codec registry */
- v = PyCodec_Encode(v, encoding, errors);
- if (v == NULL)
- goto onError;
- return v;
-
- onError:
- return NULL;
+ return PyCodec_Encode(v, encoding, errors);
}
PyDoc_STRVAR(decode__doc__,
@@ -156,13 +138,7 @@ codec_decode(PyObject *self, PyObject *args)
#endif
/* Decode via the codec registry */
- v = PyCodec_Decode(v, encoding, errors);
- if (v == NULL)
- goto onError;
- return v;
-
- onError:
- return NULL;
+ return PyCodec_Decode(v, encoding, errors);
}
/* --- Helpers ------------------------------------------------------------ */
@@ -171,22 +147,11 @@ static
PyObject *codec_tuple(PyObject *unicode,
Py_ssize_t len)
{
- PyObject *v,*w;
-
+ PyObject *v;
if (unicode == NULL)
- return NULL;
- v = PyTuple_New(2);
- if (v == NULL) {
- Py_DECREF(unicode);
- return NULL;
- }
- PyTuple_SET_ITEM(v,0,unicode);
- w = PyInt_FromSsize_t(len);
- if (w == NULL) {
- Py_DECREF(v);
- return NULL;
- }
- PyTuple_SET_ITEM(v,1,w);
+ return NULL;
+ v = Py_BuildValue("On", unicode, len);
+ Py_DECREF(unicode);
return v;
}
@@ -419,7 +384,7 @@ utf_16_ex_decode(PyObject *self,
final ? NULL : &consumed);
if (unicode == NULL)
return NULL;
- tuple = Py_BuildValue("Oii", unicode, consumed, byteorder);
+ tuple = Py_BuildValue("Oni", unicode, consumed, byteorder);
Py_DECREF(unicode);
return tuple;
}
@@ -604,8 +569,8 @@ utf_7_encode(PyObject *self,
return NULL;
v = codec_tuple(PyUnicode_EncodeUTF7(PyUnicode_AS_UNICODE(str),
PyUnicode_GET_SIZE(str),
- 0,
- 0,
+ 0,
+ 0,
errors),
PyUnicode_GET_SIZE(str));
Py_DECREF(str);
@@ -876,8 +841,7 @@ static PyObject *register_error(PyObject *self, PyObject *args)
return NULL;
if (PyCodec_RegisterError(name, handler))
return NULL;
- Py_INCREF(Py_None);
- return Py_None;
+ Py_RETURN_NONE;
}
PyDoc_STRVAR(lookup_error__doc__,
@@ -899,7 +863,7 @@ static PyObject *lookup_error(PyObject *self, PyObject *args)
/* --- Module API --------------------------------------------------------- */
static PyMethodDef _codecs_functions[] = {
- {"register", codec_register, METH_VARARGS,
+ {"register", codec_register, METH_O,
register__doc__},
{"lookup", codec_lookup, METH_VARARGS,
lookup__doc__},
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index eaa3ced..a0744ff 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -2185,7 +2185,7 @@ _CData_set(CDataObject *dst, PyObject *type, SETFUNC setfunc, PyObject *value,
only it's object list. So we create a tuple, containing
b_objects list PLUS the array itself, and return that!
*/
- return PyTuple_Pack(2, keep, value);
+ return Py_BuildValue("(OO)", keep, value);
}
PyErr_Format(PyExc_TypeError,
"incompatible types, %s instance instead of %s instance",
diff --git a/Modules/functionalmodule.c b/Modules/_functoolsmodule.c
index 38ef43a..54abb89 100644
--- a/Modules/functionalmodule.c
+++ b/Modules/_functoolsmodule.c
@@ -2,10 +2,10 @@
#include "Python.h"
#include "structmember.h"
-/* Functional module written and maintained
+/* _functools module written and maintained
by Hye-Shik Chang <perky@FreeBSD.org>
with adaptations by Raymond Hettinger <python@rcn.com>
- Copyright (c) 2004, 2005 Python Software Foundation.
+ Copyright (c) 2004, 2005, 2006 Python Software Foundation.
All rights reserved.
*/
@@ -199,7 +199,7 @@ static PyGetSetDef partial_getsetlist[] = {
static PyTypeObject partial_type = {
PyObject_HEAD_INIT(NULL)
0, /* ob_size */
- "functional.partial", /* tp_name */
+ "functools.partial", /* tp_name */
sizeof(partialobject), /* tp_basicsize */
0, /* tp_itemsize */
/* methods */
@@ -245,14 +245,14 @@ static PyTypeObject partial_type = {
/* module level code ********************************************************/
PyDoc_STRVAR(module_doc,
-"Tools for functional programming.");
+"Tools that operate on functions.");
static PyMethodDef module_methods[] = {
{NULL, NULL} /* sentinel */
};
PyMODINIT_FUNC
-initfunctional(void)
+init_functools(void)
{
int i;
PyObject *m;
@@ -262,7 +262,7 @@ initfunctional(void)
NULL
};
- m = Py_InitModule3("functional", module_methods, module_doc);
+ m = Py_InitModule3("_functools", module_methods, module_doc);
if (m == NULL)
return;
diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c
index a7d627b..859644f 100644
--- a/Modules/_hashopenssl.c
+++ b/Modules/_hashopenssl.c
@@ -77,13 +77,10 @@ EVP_dealloc(PyObject *ptr)
PyDoc_STRVAR(EVP_copy__doc__, "Return a copy of the hash object.");
static PyObject *
-EVP_copy(EVPobject *self, PyObject *args)
+EVP_copy(EVPobject *self, PyObject *unused)
{
EVPobject *newobj;
- if (!PyArg_ParseTuple(args, ":copy"))
- return NULL;
-
if ( (newobj = newEVPobject(self->name))==NULL)
return NULL;
@@ -95,16 +92,13 @@ PyDoc_STRVAR(EVP_digest__doc__,
"Return the digest value as a string of binary data.");
static PyObject *
-EVP_digest(EVPobject *self, PyObject *args)
+EVP_digest(EVPobject *self, PyObject *unused)
{
unsigned char digest[EVP_MAX_MD_SIZE];
EVP_MD_CTX temp_ctx;
PyObject *retval;
unsigned int digest_size;
- if (!PyArg_ParseTuple(args, ":digest"))
- return NULL;
-
EVP_MD_CTX_copy(&temp_ctx, &self->ctx);
digest_size = EVP_MD_CTX_size(&temp_ctx);
EVP_DigestFinal(&temp_ctx, digest, NULL);
@@ -118,7 +112,7 @@ PyDoc_STRVAR(EVP_hexdigest__doc__,
"Return the digest value as a string of hexadecimal digits.");
static PyObject *
-EVP_hexdigest(EVPobject *self, PyObject *args)
+EVP_hexdigest(EVPobject *self, PyObject *unused)
{
unsigned char digest[EVP_MAX_MD_SIZE];
EVP_MD_CTX temp_ctx;
@@ -126,9 +120,6 @@ EVP_hexdigest(EVPobject *self, PyObject *args)
char *hex_digest;
unsigned int i, j, digest_size;
- if (!PyArg_ParseTuple(args, ":hexdigest"))
- return NULL;
-
/* Get the raw (binary) digest value */
EVP_MD_CTX_copy(&temp_ctx, &self->ctx);
digest_size = EVP_MD_CTX_size(&temp_ctx);
@@ -182,9 +173,9 @@ EVP_update(EVPobject *self, PyObject *args)
static PyMethodDef EVP_methods[] = {
{"update", (PyCFunction)EVP_update, METH_VARARGS, EVP_update__doc__},
- {"digest", (PyCFunction)EVP_digest, METH_VARARGS, EVP_digest__doc__},
- {"hexdigest", (PyCFunction)EVP_hexdigest, METH_VARARGS, EVP_hexdigest__doc__},
- {"copy", (PyCFunction)EVP_copy, METH_VARARGS, EVP_copy__doc__},
+ {"digest", (PyCFunction)EVP_digest, METH_NOARGS, EVP_digest__doc__},
+ {"hexdigest", (PyCFunction)EVP_hexdigest, METH_NOARGS, EVP_hexdigest__doc__},
+ {"copy", (PyCFunction)EVP_copy, METH_NOARGS, EVP_copy__doc__},
{NULL, NULL} /* sentinel */
};
diff --git a/Modules/_hotshot.c b/Modules/_hotshot.c
index 3ad0a9e..5a81bfb 100644
--- a/Modules/_hotshot.c
+++ b/Modules/_hotshot.c
@@ -1058,7 +1058,7 @@ profiler_runcall(ProfilerObject *self, PyObject *args)
PyObject *callkw = NULL;
PyObject *callable;
- if (PyArg_ParseTuple(args, "O|OO:runcall",
+ if (PyArg_UnpackTuple(args, "runcall", 1, 3,
&callable, &callargs, &callkw)) {
if (is_available(self)) {
do_start(self);
@@ -1575,23 +1575,18 @@ PyDoc_STR(
;
static PyObject *
-hotshot_resolution(PyObject *unused, PyObject *args)
+hotshot_resolution(PyObject *self, PyObject *unused)
{
- PyObject *result = NULL;
-
- if (PyArg_ParseTuple(args, ":resolution")) {
- if (timeofday_diff == 0) {
- calibrate();
- calibrate();
- calibrate();
- }
+ if (timeofday_diff == 0) {
+ calibrate();
+ calibrate();
+ calibrate();
+ }
#ifdef MS_WINDOWS
- result = Py_BuildValue("ii", timeofday_diff, frequency.LowPart);
+ return Py_BuildValue("ii", timeofday_diff, frequency.LowPart);
#else
- result = Py_BuildValue("ii", timeofday_diff, rusage_diff);
+ return Py_BuildValue("ii", timeofday_diff, rusage_diff);
#endif
- }
- return result;
}
@@ -1599,7 +1594,7 @@ static PyMethodDef functions[] = {
{"coverage", hotshot_coverage, METH_VARARGS, coverage__doc__},
{"profiler", hotshot_profiler, METH_VARARGS, profiler__doc__},
{"logreader", hotshot_logreader, METH_VARARGS, logreader__doc__},
- {"resolution", hotshot_resolution, METH_VARARGS, resolution__doc__},
+ {"resolution", hotshot_resolution, METH_NOARGS, resolution__doc__},
{NULL, NULL}
};
diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c
index 58beb5c..c016cd7 100644
--- a/Modules/_localemodule.c
+++ b/Modules/_localemodule.c
@@ -281,7 +281,7 @@ PyLocale_strcoll(PyObject* self, PyObject* args)
wchar_t *ws1 = NULL, *ws2 = NULL;
int rel1 = 0, rel2 = 0, len1, len2;
- if (!PyArg_ParseTuple(args, "OO:strcoll", &os1, &os2))
+ if (!PyArg_UnpackTuple(args, "strcoll", 2, 2, &os1, &os2))
return NULL;
/* If both arguments are byte strings, use strcoll. */
if (PyString_Check(os1) && PyString_Check(os2))
diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c
index fb6eb06..71d0aaa 100644
--- a/Modules/_sqlite/module.c
+++ b/Modules/_sqlite/module.c
@@ -280,21 +280,25 @@ PyMODINIT_FUNC init_sqlite3(void)
goto error;
}
PyDict_SetItemString(dict, "PARSE_DECLTYPES", tmp_obj);
+ Py_DECREF(tmp_obj);
if (!(tmp_obj = PyInt_FromLong(PARSE_COLNAMES))) {
goto error;
}
PyDict_SetItemString(dict, "PARSE_COLNAMES", tmp_obj);
+ Py_DECREF(tmp_obj);
if (!(tmp_obj = PyString_FromString(PYSQLITE_VERSION))) {
goto error;
}
PyDict_SetItemString(dict, "version", tmp_obj);
+ Py_DECREF(tmp_obj);
if (!(tmp_obj = PyString_FromString(sqlite3_libversion()))) {
goto error;
}
PyDict_SetItemString(dict, "sqlite_version", tmp_obj);
+ Py_DECREF(tmp_obj);
/* initialize microprotocols layer */
microprotocols_init(dict);
diff --git a/Modules/_sre.c b/Modules/_sre.c
index 06acb68..42e0c20 100644
--- a/Modules/_sre.c
+++ b/Modules/_sre.c
@@ -1623,7 +1623,7 @@ static PyObject*pattern_new_match(PatternObject*, SRE_STATE*, int);
static PyObject*pattern_scanner(PatternObject*, PyObject*);
static PyObject *
-sre_codesize(PyObject* self, PyObject* args)
+sre_codesize(PyObject* self, PyObject *unused)
{
return Py_BuildValue("i", sizeof(SRE_CODE));
}
@@ -2467,15 +2467,12 @@ pattern_subn(PatternObject* self, PyObject* args, PyObject* kw)
}
static PyObject*
-pattern_copy(PatternObject* self, PyObject* args)
+pattern_copy(PatternObject* self, PyObject *unused)
{
#ifdef USE_BUILTIN_COPY
PatternObject* copy;
int offset;
- if (args != Py_None && !PyArg_ParseTuple(args, ":__copy__"))
- return NULL;
-
copy = PyObject_NEW_VAR(PatternObject, &Pattern_Type, self->codesize);
if (!copy)
return NULL;
@@ -2498,16 +2495,12 @@ pattern_copy(PatternObject* self, PyObject* args)
}
static PyObject*
-pattern_deepcopy(PatternObject* self, PyObject* args)
+pattern_deepcopy(PatternObject* self, PyObject* memo)
{
#ifdef USE_BUILTIN_COPY
PatternObject* copy;
- PyObject* memo;
- if (!PyArg_ParseTuple(args, "O:__deepcopy__", &memo))
- return NULL;
-
- copy = (PatternObject*) pattern_copy(self, Py_None);
+ copy = (PatternObject*) pattern_copy(self);
if (!copy)
return NULL;
@@ -2578,8 +2571,8 @@ static PyMethodDef pattern_methods[] = {
pattern_finditer_doc},
#endif
{"scanner", (PyCFunction) pattern_scanner, METH_VARARGS},
- {"__copy__", (PyCFunction) pattern_copy, METH_VARARGS},
- {"__deepcopy__", (PyCFunction) pattern_deepcopy, METH_VARARGS},
+ {"__copy__", (PyCFunction) pattern_copy, METH_NOARGS},
+ {"__deepcopy__", (PyCFunction) pattern_deepcopy, METH_O},
{NULL, NULL}
};
@@ -2772,12 +2765,8 @@ match_getslice(MatchObject* self, PyObject* index, PyObject* def)
}
static PyObject*
-match_expand(MatchObject* self, PyObject* args)
+match_expand(MatchObject* self, PyObject* ptemplate)
{
- PyObject* ptemplate;
- if (!PyArg_ParseTuple(args, "O:expand", &ptemplate))
- return NULL;
-
/* delegate to Python code */
return call(
SRE_PY_MODULE, "_expand",
@@ -2902,7 +2891,7 @@ match_start(MatchObject* self, PyObject* args)
int index;
PyObject* index_ = Py_False; /* zero */
- if (!PyArg_ParseTuple(args, "|O:start", &index_))
+ if (!PyArg_UnpackTuple(args, "start", 0, 1, &index_))
return NULL;
index = match_getindex(self, index_);
@@ -2925,7 +2914,7 @@ match_end(MatchObject* self, PyObject* args)
int index;
PyObject* index_ = Py_False; /* zero */
- if (!PyArg_ParseTuple(args, "|O:end", &index_))
+ if (!PyArg_UnpackTuple(args, "end", 0, 1, &index_))
return NULL;
index = match_getindex(self, index_);
@@ -2975,7 +2964,7 @@ match_span(MatchObject* self, PyObject* args)
int index;
PyObject* index_ = Py_False; /* zero */
- if (!PyArg_ParseTuple(args, "|O:span", &index_))
+ if (!PyArg_UnpackTuple(args, "span", 0, 1, &index_))
return NULL;
index = match_getindex(self, index_);
@@ -3019,15 +3008,12 @@ match_regs(MatchObject* self)
}
static PyObject*
-match_copy(MatchObject* self, PyObject* args)
+match_copy(MatchObject* self, PyObject *unused)
{
#ifdef USE_BUILTIN_COPY
MatchObject* copy;
int slots, offset;
- if (args != Py_None && !PyArg_ParseTuple(args, ":__copy__"))
- return NULL;
-
slots = 2 * (self->pattern->groups+1);
copy = PyObject_NEW_VAR(MatchObject, &Match_Type, slots);
@@ -3053,16 +3039,12 @@ match_copy(MatchObject* self, PyObject* args)
}
static PyObject*
-match_deepcopy(MatchObject* self, PyObject* args)
+match_deepcopy(MatchObject* self, PyObject* memo)
{
#ifdef USE_BUILTIN_COPY
MatchObject* copy;
- PyObject* memo;
- if (!PyArg_ParseTuple(args, "O:__deepcopy__", &memo))
- return NULL;
-
- copy = (MatchObject*) match_copy(self, Py_None);
+ copy = (MatchObject*) match_copy(self);
if (!copy)
return NULL;
@@ -3086,9 +3068,9 @@ static PyMethodDef match_methods[] = {
{"span", (PyCFunction) match_span, METH_VARARGS},
{"groups", (PyCFunction) match_groups, METH_VARARGS|METH_KEYWORDS},
{"groupdict", (PyCFunction) match_groupdict, METH_VARARGS|METH_KEYWORDS},
- {"expand", (PyCFunction) match_expand, METH_VARARGS},
- {"__copy__", (PyCFunction) match_copy, METH_VARARGS},
- {"__deepcopy__", (PyCFunction) match_deepcopy, METH_VARARGS},
+ {"expand", (PyCFunction) match_expand, METH_O},
+ {"__copy__", (PyCFunction) match_copy, METH_NOARGS},
+ {"__deepcopy__", (PyCFunction) match_deepcopy, METH_O},
{NULL, NULL}
};
@@ -3243,7 +3225,7 @@ scanner_dealloc(ScannerObject* self)
}
static PyObject*
-scanner_match(ScannerObject* self, PyObject* args)
+scanner_match(ScannerObject* self, PyObject *unused)
{
SRE_STATE* state = &self->state;
PyObject* match;
@@ -3274,7 +3256,7 @@ scanner_match(ScannerObject* self, PyObject* args)
static PyObject*
-scanner_search(ScannerObject* self, PyObject* args)
+scanner_search(ScannerObject* self, PyObject *unused)
{
SRE_STATE* state = &self->state;
PyObject* match;
@@ -3304,10 +3286,8 @@ scanner_search(ScannerObject* self, PyObject* args)
}
static PyMethodDef scanner_methods[] = {
- /* FIXME: use METH_OLDARGS instead of 0 or fix to use METH_VARARGS */
- /* METH_OLDARGS is not in Python 1.5.2 */
- {"match", (PyCFunction) scanner_match, 0},
- {"search", (PyCFunction) scanner_search, 0},
+ {"match", (PyCFunction) scanner_match, METH_NOARGS},
+ {"search", (PyCFunction) scanner_search, METH_NOARGS},
{NULL, NULL}
};
@@ -3373,7 +3353,7 @@ pattern_scanner(PatternObject* pattern, PyObject* args)
static PyMethodDef _functions[] = {
{"compile", _compile, METH_VARARGS},
- {"getcodesize", sre_codesize, METH_VARARGS},
+ {"getcodesize", sre_codesize, METH_NOARGS},
{"getlower", sre_getlower, METH_VARARGS},
{NULL, NULL}
};
diff --git a/Modules/_struct.c b/Modules/_struct.c
index cb2e538..fd550c9 100644
--- a/Modules/_struct.c
+++ b/Modules/_struct.c
@@ -17,6 +17,20 @@ static PyTypeObject PyStructType;
typedef int Py_ssize_t;
#endif
+/* If PY_STRUCT_OVERFLOW_MASKING is defined, the struct module will wrap all input
+ numbers for explicit endians such that they fit in the given type, much
+ like explicit casting in C. A warning will be raised if the number did
+ not originally fit within the range of the requested type. If it is
+ not defined, then all range errors and overflow will be struct.error
+ exceptions. */
+
+#define PY_STRUCT_OVERFLOW_MASKING 1
+
+#ifdef PY_STRUCT_OVERFLOW_MASKING
+static PyObject *pylong_ulong_mask = NULL;
+static PyObject *pyint_zero = NULL;
+#endif
+
/* The translation function for each format character is table driven */
typedef struct _formatdef {
char format;
@@ -195,6 +209,75 @@ get_ulonglong(PyObject *v, unsigned PY_LONG_LONG *p)
#endif
+#ifdef PY_STRUCT_OVERFLOW_MASKING
+
+/* Helper routine to get a Python integer and raise the appropriate error
+ if it isn't one */
+
+static int
+get_wrapped_long(PyObject *v, long *p)
+{
+ if (get_long(v, p) < 0) {
+ if (PyLong_Check(v) && PyErr_ExceptionMatches(PyExc_OverflowError)) {
+ PyObject *wrapped;
+ long x;
+ PyErr_Clear();
+ if (PyErr_Warn(PyExc_DeprecationWarning, "struct integer overflow masking is deprecated") < 0)
+ return -1;
+ wrapped = PyNumber_And(v, pylong_ulong_mask);
+ if (wrapped == NULL)
+ return -1;
+ x = (long)PyLong_AsUnsignedLong(wrapped);
+ Py_DECREF(wrapped);
+ if (x == -1 && PyErr_Occurred())
+ return -1;
+ *p = x;
+ } else {
+ return -1;
+ }
+ }
+ return 0;
+}
+
+static int
+get_wrapped_ulong(PyObject *v, unsigned long *p)
+{
+ long x = (long)PyLong_AsUnsignedLong(v);
+ if (x == -1 && PyErr_Occurred()) {
+ PyObject *wrapped;
+ PyErr_Clear();
+ wrapped = PyNumber_And(v, pylong_ulong_mask);
+ if (wrapped == NULL)
+ return -1;
+ if (PyErr_Warn(PyExc_DeprecationWarning, "struct integer overflow masking is deprecated") < 0) {
+ Py_DECREF(wrapped);
+ return -1;
+ }
+ x = (long)PyLong_AsUnsignedLong(wrapped);
+ Py_DECREF(wrapped);
+ if (x == -1 && PyErr_Occurred())
+ return -1;
+ }
+ *p = (unsigned long)x;
+ return 0;
+}
+
+#define RANGE_ERROR(x, f, flag, mask) \
+ do { \
+ if (_range_error(f, flag) < 0) \
+ return -1; \
+ else \
+ (x) &= (mask); \
+ } while (0)
+
+#else
+
+#define get_wrapped_long get_long
+#define get_wrapped_ulong get_ulong
+#define RANGE_ERROR(x, f, flag, mask) return _range_error(f, flag)
+
+#endif
+
/* Floating point helpers */
static PyObject *
@@ -223,30 +306,51 @@ unpack_double(const char *p, /* start of 8-byte string */
/* Helper to format the range error exceptions */
static int
-_range_error(char format, Py_ssize_t size, int is_unsigned)
-{
- if (is_unsigned == 0) {
- long smallest = 0, largest = 0;
- Py_ssize_t i = size * 8;
- while (--i > 0) {
- smallest = (smallest * 2) - 1;
- largest = (largest * 2) + 1;
- }
+_range_error(const formatdef *f, int is_unsigned)
+{
+ /* ulargest is the largest unsigned value with f->size bytes.
+ * Note that the simpler:
+ * ((size_t)1 << (f->size * 8)) - 1
+ * doesn't work when f->size == sizeof(size_t) because C doesn't
+ * define what happens when a left shift count is >= the number of
+ * bits in the integer being shifted; e.g., on some boxes it doesn't
+ * shift at all when they're equal.
+ */
+ const size_t ulargest = (size_t)-1 >> ((SIZEOF_SIZE_T - f->size)*8);
+ assert(f->size >= 1 && f->size <= SIZEOF_SIZE_T);
+ if (is_unsigned)
PyErr_Format(StructError,
- "'%c' format requires %ld <= number <= %ld",
- format,
- smallest,
- largest);
- } else {
- unsigned long largest = 0;
- Py_ssize_t i = size * 8;
- while (--i >= 0)
- largest = (largest * 2) + 1;
+ "'%c' format requires 0 <= number <= %zu",
+ f->format,
+ ulargest);
+ else {
+ const Py_ssize_t largest = (Py_ssize_t)(ulargest >> 1);
PyErr_Format(StructError,
- "'%c' format requires 0 <= number <= %lu",
- format,
+ "'%c' format requires %zd <= number <= %zd",
+ f->format,
+ ~ largest,
largest);
}
+#ifdef PY_STRUCT_OVERFLOW_MASKING
+ {
+ PyObject *ptype, *pvalue, *ptraceback;
+ PyObject *msg;
+ int rval;
+ PyErr_Fetch(&ptype, &pvalue, &ptraceback);
+ assert(pvalue != NULL);
+ msg = PyObject_Str(pvalue);
+ Py_XDECREF(ptype);
+ Py_XDECREF(pvalue);
+ Py_XDECREF(ptraceback);
+ if (msg == NULL)
+ return -1;
+ rval = PyErr_Warn(PyExc_DeprecationWarning,
+ PyString_AS_STRING(msg));
+ Py_DECREF(msg);
+ if (rval == 0)
+ return 0;
+ }
+#endif
return -1;
}
@@ -482,7 +586,7 @@ np_int(char *p, PyObject *v, const formatdef *f)
return -1;
#if (SIZEOF_LONG > SIZEOF_INT)
if ((x < ((long)INT_MIN)) || (x > ((long)INT_MAX)))
- return _range_error(f->format, sizeof(y), 0);
+ return _range_error(f, 0);
#endif
y = (int)x;
memcpy(p, (char *)&y, sizeof y);
@@ -495,11 +599,11 @@ np_uint(char *p, PyObject *v, const formatdef *f)
unsigned long x;
unsigned int y;
if (get_ulong(v, &x) < 0)
- return _range_error(f->format, sizeof(y), 1);
+ return _range_error(f, 1);
y = (unsigned int)x;
#if (SIZEOF_LONG > SIZEOF_INT)
if (x > ((unsigned long)UINT_MAX))
- return _range_error(f->format, sizeof(y), 1);
+ return _range_error(f, 1);
#endif
memcpy(p, (char *)&y, sizeof y);
return 0;
@@ -520,7 +624,7 @@ np_ulong(char *p, PyObject *v, const formatdef *f)
{
unsigned long x;
if (get_ulong(v, &x) < 0)
- return _range_error(f->format, sizeof(x), 1);
+ return _range_error(f, 1);
memcpy(p, (char *)&x, sizeof x);
return 0;
}
@@ -621,8 +725,9 @@ bu_int(const char *p, const formatdef *f)
{
long x = 0;
Py_ssize_t i = f->size;
+ const unsigned char *bytes = (const unsigned char *)p;
do {
- x = (x<<8) | (*p++ & 0xFF);
+ x = (x<<8) | *bytes++;
} while (--i > 0);
/* Extend the sign bit. */
if (SIZEOF_LONG > f->size)
@@ -635,8 +740,9 @@ bu_uint(const char *p, const formatdef *f)
{
unsigned long x = 0;
Py_ssize_t i = f->size;
+ const unsigned char *bytes = (const unsigned char *)p;
do {
- x = (x<<8) | (*p++ & 0xFF);
+ x = (x<<8) | *bytes++;
} while (--i > 0);
if (x <= LONG_MAX)
return PyInt_FromLong((long)x);
@@ -649,8 +755,9 @@ bu_longlong(const char *p, const formatdef *f)
#ifdef HAVE_LONG_LONG
PY_LONG_LONG x = 0;
Py_ssize_t i = f->size;
+ const unsigned char *bytes = (const unsigned char *)p;
do {
- x = (x<<8) | (*p++ & 0xFF);
+ x = (x<<8) | *bytes++;
} while (--i > 0);
/* Extend the sign bit. */
if (SIZEOF_LONG_LONG > f->size)
@@ -672,8 +779,9 @@ bu_ulonglong(const char *p, const formatdef *f)
#ifdef HAVE_LONG_LONG
unsigned PY_LONG_LONG x = 0;
Py_ssize_t i = f->size;
+ const unsigned char *bytes = (const unsigned char *)p;
do {
- x = (x<<8) | (*p++ & 0xFF);
+ x = (x<<8) | *bytes++;
} while (--i > 0);
if (x <= LONG_MAX)
return PyInt_FromLong(Py_SAFE_DOWNCAST(x, unsigned PY_LONG_LONG, long));
@@ -703,15 +811,19 @@ bp_int(char *p, PyObject *v, const formatdef *f)
{
long x;
Py_ssize_t i;
- if (get_long(v, &x) < 0)
+ if (get_wrapped_long(v, &x) < 0)
return -1;
i = f->size;
if (i != SIZEOF_LONG) {
if ((i == 2) && (x < -32768 || x > 32767))
- return _range_error(f->format, i, 0);
+ RANGE_ERROR(x, f, 0, 0xffffL);
#if (SIZEOF_LONG != 4)
else if ((i == 4) && (x < -2147483648L || x > 2147483647L))
- return _range_error(f->format, i, 0);
+ RANGE_ERROR(x, f, 0, 0xffffffffL);
+#endif
+#ifdef PY_STRUCT_OVERFLOW_MASKING
+ else if ((i == 1) && (x < -128 || x > 127))
+ RANGE_ERROR(x, f, 0, 0xffL);
#endif
}
do {
@@ -726,14 +838,14 @@ bp_uint(char *p, PyObject *v, const formatdef *f)
{
unsigned long x;
Py_ssize_t i;
- if (get_ulong(v, &x) < 0)
+ if (get_wrapped_ulong(v, &x) < 0)
return -1;
i = f->size;
if (i != SIZEOF_LONG) {
unsigned long maxint = 1;
maxint <<= (unsigned long)(i * 8);
if (x >= maxint)
- return _range_error(f->format, f->size, 1);
+ RANGE_ERROR(x, f, 1, maxint - 1);
}
do {
p[--i] = (char)x;
@@ -800,8 +912,14 @@ bp_double(char *p, PyObject *v, const formatdef *f)
static formatdef bigendian_table[] = {
{'x', 1, 0, NULL},
+#ifdef PY_STRUCT_OVERFLOW_MASKING
+ /* Native packers do range checking without overflow masking. */
+ {'b', 1, 0, nu_byte, bp_int},
+ {'B', 1, 0, nu_ubyte, bp_uint},
+#else
{'b', 1, 0, nu_byte, np_byte},
{'B', 1, 0, nu_ubyte, np_ubyte},
+#endif
{'c', 1, 0, nu_char, np_char},
{'s', 1, 0, NULL},
{'p', 1, 0, NULL},
@@ -825,8 +943,9 @@ lu_int(const char *p, const formatdef *f)
{
long x = 0;
Py_ssize_t i = f->size;
+ const unsigned char *bytes = (const unsigned char *)p;
do {
- x = (x<<8) | (p[--i] & 0xFF);
+ x = (x<<8) | bytes[--i];
} while (i > 0);
/* Extend the sign bit. */
if (SIZEOF_LONG > f->size)
@@ -839,8 +958,9 @@ lu_uint(const char *p, const formatdef *f)
{
unsigned long x = 0;
Py_ssize_t i = f->size;
+ const unsigned char *bytes = (const unsigned char *)p;
do {
- x = (x<<8) | (p[--i] & 0xFF);
+ x = (x<<8) | bytes[--i];
} while (i > 0);
if (x <= LONG_MAX)
return PyInt_FromLong((long)x);
@@ -853,8 +973,9 @@ lu_longlong(const char *p, const formatdef *f)
#ifdef HAVE_LONG_LONG
PY_LONG_LONG x = 0;
Py_ssize_t i = f->size;
+ const unsigned char *bytes = (const unsigned char *)p;
do {
- x = (x<<8) | (p[--i] & 0xFF);
+ x = (x<<8) | bytes[--i];
} while (i > 0);
/* Extend the sign bit. */
if (SIZEOF_LONG_LONG > f->size)
@@ -876,8 +997,9 @@ lu_ulonglong(const char *p, const formatdef *f)
#ifdef HAVE_LONG_LONG
unsigned PY_LONG_LONG x = 0;
Py_ssize_t i = f->size;
+ const unsigned char *bytes = (const unsigned char *)p;
do {
- x = (x<<8) | (p[--i] & 0xFF);
+ x = (x<<8) | bytes[--i];
} while (i > 0);
if (x <= LONG_MAX)
return PyInt_FromLong(Py_SAFE_DOWNCAST(x, unsigned PY_LONG_LONG, long));
@@ -907,15 +1029,19 @@ lp_int(char *p, PyObject *v, const formatdef *f)
{
long x;
Py_ssize_t i;
- if (get_long(v, &x) < 0)
+ if (get_wrapped_long(v, &x) < 0)
return -1;
i = f->size;
if (i != SIZEOF_LONG) {
if ((i == 2) && (x < -32768 || x > 32767))
- return _range_error(f->format, i, 0);
+ RANGE_ERROR(x, f, 0, 0xffffL);
#if (SIZEOF_LONG != 4)
else if ((i == 4) && (x < -2147483648L || x > 2147483647L))
- return _range_error(f->format, i, 0);
+ RANGE_ERROR(x, f, 0, 0xffffffffL);
+#endif
+#ifdef PY_STRUCT_OVERFLOW_MASKING
+ else if ((i == 1) && (x < -128 || x > 127))
+ RANGE_ERROR(x, f, 0, 0xffL);
#endif
}
do {
@@ -930,14 +1056,14 @@ lp_uint(char *p, PyObject *v, const formatdef *f)
{
unsigned long x;
Py_ssize_t i;
- if (get_ulong(v, &x) < 0)
+ if (get_wrapped_ulong(v, &x) < 0)
return -1;
i = f->size;
if (i != SIZEOF_LONG) {
unsigned long maxint = 1;
maxint <<= (unsigned long)(i * 8);
if (x >= maxint)
- return _range_error(f->format, f->size, 1);
+ RANGE_ERROR(x, f, 1, maxint - 1);
}
do {
*p++ = (char)x;
@@ -1004,8 +1130,14 @@ lp_double(char *p, PyObject *v, const formatdef *f)
static formatdef lilendian_table[] = {
{'x', 1, 0, NULL},
+#ifdef PY_STRUCT_OVERFLOW_MASKING
+ /* Native packers do range checking without overflow masking. */
+ {'b', 1, 0, nu_byte, lp_int},
+ {'B', 1, 0, nu_ubyte, lp_uint},
+#else
{'b', 1, 0, nu_byte, np_byte},
{'B', 1, 0, nu_ubyte, np_ubyte},
+#endif
{'c', 1, 0, nu_char, np_char},
{'s', 1, 0, NULL},
{'p', 1, 0, NULL},
@@ -1089,7 +1221,7 @@ prepare_s(PyStructObject *self)
const formatdef *f;
const formatdef *e;
formatcode *codes;
-
+
const char *s;
const char *fmt;
char c;
@@ -1098,7 +1230,7 @@ prepare_s(PyStructObject *self)
fmt = PyString_AS_STRING(self->s_format);
f = whichtable((char **)&fmt);
-
+
s = fmt;
size = 0;
len = 0;
@@ -1126,7 +1258,7 @@ prepare_s(PyStructObject *self)
e = getentry(c, f);
if (e == NULL)
return -1;
-
+
switch (c) {
case 's': /* fall through */
case 'p': len++; break;
@@ -1153,7 +1285,7 @@ prepare_s(PyStructObject *self)
return -1;
}
self->s_codes = codes;
-
+
s = fmt;
size = 0;
while ((c = *s++) != '\0') {
@@ -1170,7 +1302,7 @@ prepare_s(PyStructObject *self)
num = 1;
e = getentry(c, f);
-
+
size = align(size, c, e);
if (c == 's' || c == 'p') {
codes->offset = size;
@@ -1193,7 +1325,7 @@ prepare_s(PyStructObject *self)
codes->fmtdef = NULL;
codes->offset = size;
codes->size = 0;
-
+
return 0;
}
@@ -1233,7 +1365,7 @@ s_init(PyObject *self, PyObject *args, PyObject *kwds)
Py_INCREF(o_format);
Py_XDECREF(soself->s_format);
soself->s_format = o_format;
-
+
ret = prepare_s(soself);
return ret;
}
@@ -1302,7 +1434,7 @@ s_unpack(PyObject *self, PyObject *inputstr)
{
PyStructObject *soself = (PyStructObject *)self;
assert(PyStruct_Check(self));
- assert(soself->s_codes != NULL);
+ assert(soself->s_codes != NULL);
if (inputstr == NULL || !PyString_Check(inputstr) ||
PyString_GET_SIZE(inputstr) != soself->s_size) {
PyErr_Format(StructError,
@@ -1344,7 +1476,7 @@ s_unpack_from(PyObject *self, PyObject *args, PyObject *kwds)
"unpack_from requires a buffer argument");
return NULL;
}
-
+
if (offset < 0)
offset += buffer_len;
@@ -1410,11 +1542,15 @@ s_pack_internal(PyStructObject *soself, PyObject *args, int offset, char* buf)
*res = Py_SAFE_DOWNCAST(n, Py_ssize_t, unsigned char);
} else {
v = PyTuple_GET_ITEM(args, i++);
- if (e->pack(res, v, e) < 0)
+ if (e->pack(res, v, e) < 0) {
+ if (PyLong_Check(v) && PyErr_ExceptionMatches(PyExc_OverflowError))
+ PyErr_SetString(StructError,
+ "long too large to convert to int");
return -1;
+ }
}
}
-
+
/* Success */
return 0;
}
@@ -1443,12 +1579,12 @@ s_pack(PyObject *self, PyObject *args)
"pack requires exactly %zd arguments", soself->s_len);
return NULL;
}
-
+
/* Allocate a new string */
result = PyString_FromStringAndSize((char *)NULL, soself->s_size);
if (result == NULL)
return NULL;
-
+
/* Call the guts */
if ( s_pack_internal(soself, args, 0, PyString_AS_STRING(result)) != 0 ) {
Py_DECREF(result);
@@ -1481,14 +1617,14 @@ s_pack_to(PyObject *self, PyObject *args)
PyTuple_GET_SIZE(args) != (soself->s_len + 2))
{
PyErr_Format(StructError,
- "pack_to requires exactly %zd arguments",
+ "pack_to requires exactly %zd arguments",
(soself->s_len + 2));
return NULL;
}
/* Extract a writable memory buffer from the first argument */
- if ( PyObject_AsWriteBuffer(PyTuple_GET_ITEM(args, 0),
- (void**)&buffer, &buffer_len) == -1 ) {
+ if ( PyObject_AsWriteBuffer(PyTuple_GET_ITEM(args, 0),
+ (void**)&buffer, &buffer_len) == -1 ) {
return NULL;
}
assert( buffer_len >= 0 );
@@ -1507,13 +1643,13 @@ s_pack_to(PyObject *self, PyObject *args)
soself->s_size);
return NULL;
}
-
+
/* Call the guts */
if ( s_pack_internal(soself, args, 2, buffer + offset) != 0 ) {
return NULL;
}
- return Py_None;
+ Py_RETURN_NONE;
}
static PyObject *
@@ -1533,7 +1669,7 @@ s_get_size(PyStructObject *self, void *unused)
static struct PyMethodDef s_methods[] = {
{"pack", (PyCFunction)s_pack, METH_VARARGS, s_pack__doc__},
- {"pack_to", (PyCFunction)s_pack_to, METH_VARARGS, s_pack_to__doc__},
+ {"pack_to", (PyCFunction)s_pack_to, METH_VARARGS, s_pack_to__doc__},
{"unpack", (PyCFunction)s_unpack, METH_O, s_unpack__doc__},
{"unpack_from", (PyCFunction)s_unpack_from, METH_KEYWORDS, s_unpack_from__doc__},
{NULL, NULL} /* sentinel */
@@ -1606,6 +1742,26 @@ init_struct(void)
if (PyType_Ready(&PyStructType) < 0)
return;
+#ifdef PY_STRUCT_OVERFLOW_MASKING
+ if (pyint_zero == NULL) {
+ pyint_zero = PyInt_FromLong(0);
+ if (pyint_zero == NULL)
+ return;
+ }
+ if (pylong_ulong_mask == NULL) {
+#if (SIZEOF_LONG == 4)
+ pylong_ulong_mask = PyLong_FromString("FFFFFFFF", NULL, 16);
+#else
+ pylong_ulong_mask = PyLong_FromString("FFFFFFFFFFFFFFFF", NULL, 16);
+#endif
+ if (pylong_ulong_mask == NULL)
+ return;
+ }
+
+#else
+ /* This speed trick can't be used until overflow masking goes away, because
+ native endian always raises exceptions instead of overflow masking. */
+
/* Check endian and swap in faster functions */
{
int one = 1;
@@ -1627,7 +1783,7 @@ init_struct(void)
listed in the same order */
if (ptr == other)
other++;
- /* Only use the trick if the
+ /* Only use the trick if the
size matches */
if (ptr->size != native->size)
break;
@@ -1644,7 +1800,8 @@ init_struct(void)
native++;
}
}
-
+#endif
+
/* Add some symbolic constants to the module */
if (StructError == NULL) {
StructError = PyErr_NewException("struct.error", NULL, NULL);
@@ -1657,4 +1814,9 @@ init_struct(void)
Py_INCREF((PyObject*)&PyStructType);
PyModule_AddObject(m, "Struct", (PyObject*)&PyStructType);
+
+ PyModule_AddIntConstant(m, "_PY_STRUCT_RANGE_CHECKING", 1);
+#ifdef PY_STRUCT_OVERFLOW_MASKING
+ PyModule_AddIntConstant(m, "_PY_STRUCT_OVERFLOW_MASKING", 1);
+#endif
}
diff --git a/Modules/audioop.c b/Modules/audioop.c
index ed70cdf..8f5d30c 100644
--- a/Modules/audioop.c
+++ b/Modules/audioop.c
@@ -302,7 +302,7 @@ audioop_getsample(PyObject *self, PyObject *args)
int len, size, val = 0;
int i;
- if ( !PyArg_Parse(args, "(s#ii)", &cp, &len, &size, &i) )
+ if ( !PyArg_ParseTuple(args, "s#ii:getsample", &cp, &len, &size, &i) )
return 0;
if ( size != 1 && size != 2 && size != 4 ) {
PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
@@ -326,7 +326,7 @@ audioop_max(PyObject *self, PyObject *args)
int i;
int max = 0;
- if ( !PyArg_Parse(args, "(s#i)", &cp, &len, &size) )
+ if ( !PyArg_ParseTuple(args, "s#i:max", &cp, &len, &size) )
return 0;
if ( size != 1 && size != 2 && size != 4 ) {
PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
@@ -350,7 +350,7 @@ audioop_minmax(PyObject *self, PyObject *args)
int i;
int min = 0x7fffffff, max = -0x7fffffff;
- if (!PyArg_Parse(args, "(s#i)", &cp, &len, &size))
+ if (!PyArg_ParseTuple(args, "s#i:minmax", &cp, &len, &size))
return NULL;
if (size != 1 && size != 2 && size != 4) {
PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
@@ -374,7 +374,7 @@ audioop_avg(PyObject *self, PyObject *args)
int i;
double avg = 0.0;
- if ( !PyArg_Parse(args, "(s#i)", &cp, &len, &size) )
+ if ( !PyArg_ParseTuple(args, "s#i:avg", &cp, &len, &size) )
return 0;
if ( size != 1 && size != 2 && size != 4 ) {
PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
@@ -401,7 +401,7 @@ audioop_rms(PyObject *self, PyObject *args)
int i;
double sum_squares = 0.0;
- if ( !PyArg_Parse(args, "(s#i)", &cp, &len, &size) )
+ if ( !PyArg_ParseTuple(args, "s#i:rms", &cp, &len, &size) )
return 0;
if ( size != 1 && size != 2 && size != 4 ) {
PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
@@ -472,7 +472,8 @@ audioop_findfit(PyObject *self, PyObject *args)
double aj_m1, aj_lm1;
double sum_ri_2, sum_aij_2, sum_aij_ri, result, best_result, factor;
- if ( !PyArg_Parse(args, "(s#s#)", &cp1, &len1, &cp2, &len2) )
+ if ( !PyArg_ParseTuple(args, "s#s#:findfit",
+ &cp1, &len1, &cp2, &len2) )
return 0;
if ( len1 & 1 || len2 & 1 ) {
PyErr_SetString(AudioopError, "Strings should be even-sized");
@@ -528,7 +529,8 @@ audioop_findfactor(PyObject *self, PyObject *args)
int len1, len2;
double sum_ri_2, sum_aij_ri, result;
- if ( !PyArg_Parse(args, "(s#s#)", &cp1, &len1, &cp2, &len2) )
+ if ( !PyArg_ParseTuple(args, "s#s#:findfactor",
+ &cp1, &len1, &cp2, &len2) )
return 0;
if ( len1 & 1 || len2 & 1 ) {
PyErr_SetString(AudioopError, "Strings should be even-sized");
@@ -560,7 +562,7 @@ audioop_findmax(PyObject *self, PyObject *args)
double aj_m1, aj_lm1;
double result, best_result;
- if ( !PyArg_Parse(args, "(s#i)", &cp1, &len1, &len2) )
+ if ( !PyArg_ParseTuple(args, "s#i:findmax", &cp1, &len1, &len2) )
return 0;
if ( len1 & 1 ) {
PyErr_SetString(AudioopError, "Strings should be even-sized");
@@ -605,7 +607,7 @@ audioop_avgpp(PyObject *self, PyObject *args)
double avg = 0.0;
int diff, prevdiff, extremediff, nextreme = 0;
- if ( !PyArg_Parse(args, "(s#i)", &cp, &len, &size) )
+ if ( !PyArg_ParseTuple(args, "s#i:avgpp", &cp, &len, &size) )
return 0;
if ( size != 1 && size != 2 && size != 4 ) {
PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
@@ -662,7 +664,7 @@ audioop_maxpp(PyObject *self, PyObject *args)
int max = 0;
int diff, prevdiff, extremediff;
- if ( !PyArg_Parse(args, "(s#i)", &cp, &len, &size) )
+ if ( !PyArg_ParseTuple(args, "s#i:maxpp", &cp, &len, &size) )
return 0;
if ( size != 1 && size != 2 && size != 4 ) {
PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
@@ -713,7 +715,7 @@ audioop_cross(PyObject *self, PyObject *args)
int i;
int prevval, ncross;
- if ( !PyArg_Parse(args, "(s#i)", &cp, &len, &size) )
+ if ( !PyArg_ParseTuple(args, "s#i:cross", &cp, &len, &size) )
return 0;
if ( size != 1 && size != 2 && size != 4 ) {
PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
@@ -741,7 +743,7 @@ audioop_mul(PyObject *self, PyObject *args)
PyObject *rv;
int i;
- if ( !PyArg_Parse(args, "(s#id)", &cp, &len, &size, &factor ) )
+ if ( !PyArg_ParseTuple(args, "s#id:mul", &cp, &len, &size, &factor ) )
return 0;
if ( size == 1 ) maxval = (double) 0x7f;
@@ -782,7 +784,8 @@ audioop_tomono(PyObject *self, PyObject *args)
PyObject *rv;
int i;
- if ( !PyArg_Parse(args, "(s#idd)", &cp, &len, &size, &fac1, &fac2 ) )
+ if ( !PyArg_ParseTuple(args, "s#idd:tomono",
+ &cp, &len, &size, &fac1, &fac2 ) )
return 0;
if ( size == 1 ) maxval = (double) 0x7f;
@@ -826,7 +829,8 @@ audioop_tostereo(PyObject *self, PyObject *args)
PyObject *rv;
int i;
- if ( !PyArg_Parse(args, "(s#idd)", &cp, &len, &size, &fac1, &fac2 ) )
+ if ( !PyArg_ParseTuple(args, "s#idd:tostereo",
+ &cp, &len, &size, &fac1, &fac2 ) )
return 0;
if ( size == 1 ) maxval = (double) 0x7f;
@@ -877,7 +881,7 @@ audioop_add(PyObject *self, PyObject *args)
PyObject *rv;
int i;
- if ( !PyArg_Parse(args, "(s#s#i)",
+ if ( !PyArg_ParseTuple(args, "s#s#i:add",
&cp1, &len1, &cp2, &len2, &size ) )
return 0;
@@ -931,7 +935,7 @@ audioop_bias(PyObject *self, PyObject *args)
int i;
int bias;
- if ( !PyArg_Parse(args, "(s#ii)",
+ if ( !PyArg_ParseTuple(args, "s#ii:bias",
&cp, &len, &size , &bias) )
return 0;
@@ -967,7 +971,7 @@ audioop_reverse(PyObject *self, PyObject *args)
PyObject *rv;
int i, j;
- if ( !PyArg_Parse(args, "(s#i)",
+ if ( !PyArg_ParseTuple(args, "s#i:reverse",
&cp, &len, &size) )
return 0;
@@ -1004,7 +1008,7 @@ audioop_lin2lin(PyObject *self, PyObject *args)
PyObject *rv;
int i, j;
- if ( !PyArg_Parse(args, "(s#ii)",
+ if ( !PyArg_ParseTuple(args, "s#ii:lin2lin",
&cp, &len, &size, &size2) )
return 0;
@@ -1053,8 +1057,9 @@ audioop_ratecv(PyObject *self, PyObject *args)
weightA = 1;
weightB = 0;
- if (!PyArg_ParseTuple(args, "s#iiiiO|ii:ratecv", &cp, &len, &size, &nchannels,
- &inrate, &outrate, &state, &weightA, &weightB))
+ if (!PyArg_ParseTuple(args, "s#iiiiO|ii:ratecv", &cp, &len, &size,
+ &nchannels, &inrate, &outrate, &state,
+ &weightA, &weightB))
return NULL;
if (size != 1 && size != 2 && size != 4) {
PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
@@ -1117,7 +1122,8 @@ audioop_ratecv(PyObject *self, PyObject *args)
}
for (chan = 0; chan < nchannels; chan++) {
if (!PyArg_ParseTuple(PyTuple_GetItem(samps, chan),
- "ii:ratecv",&prev_i[chan],&cur_i[chan]))
+ "ii:ratecv", &prev_i[chan],
+ &cur_i[chan]))
goto exit;
}
}
@@ -1235,9 +1241,9 @@ audioop_lin2ulaw(PyObject *self, PyObject *args)
PyObject *rv;
int i;
- if ( !PyArg_Parse(args, "(s#i)",
- &cp, &len, &size) )
- return 0;
+ if ( !PyArg_ParseTuple(args, "s#i:lin2ulaw",
+ &cp, &len, &size) )
+ return 0 ;
if ( size != 1 && size != 2 && size != 4) {
PyErr_SetString(AudioopError, "Size should be 1, 2 or 4");
@@ -1269,8 +1275,8 @@ audioop_ulaw2lin(PyObject *self, PyObject *args)
PyObject *rv;
int i;
- if ( !PyArg_Parse(args, "(s#i)",
- &cp, &len, &size) )
+ if ( !PyArg_ParseTuple(args, "s#i:ulaw2lin",
+ &cp, &len, &size) )
return 0;
if ( size != 1 && size != 2 && size != 4) {
@@ -1303,8 +1309,8 @@ audioop_lin2alaw(PyObject *self, PyObject *args)
PyObject *rv;
int i;
- if ( !PyArg_Parse(args, "(s#i)",
- &cp, &len, &size) )
+ if ( !PyArg_ParseTuple(args, "s#i:lin2alaw",
+ &cp, &len, &size) )
return 0;
if ( size != 1 && size != 2 && size != 4) {
@@ -1337,8 +1343,8 @@ audioop_alaw2lin(PyObject *self, PyObject *args)
PyObject *rv;
int i;
- if ( !PyArg_Parse(args, "(s#i)",
- &cp, &len, &size) )
+ if ( !PyArg_ParseTuple(args, "s#i:alaw2lin",
+ &cp, &len, &size) )
return 0;
if ( size != 1 && size != 2 && size != 4) {
@@ -1372,8 +1378,8 @@ audioop_lin2adpcm(PyObject *self, PyObject *args)
PyObject *rv, *state, *str;
int i, outputbuffer = 0, bufferstep;
- if ( !PyArg_Parse(args, "(s#iO)",
- &cp, &len, &size, &state) )
+ if ( !PyArg_ParseTuple(args, "s#iO:lin2adpcm",
+ &cp, &len, &size, &state) )
return 0;
@@ -1393,7 +1399,7 @@ audioop_lin2adpcm(PyObject *self, PyObject *args)
valpred = 0;
step = 7;
index = 0;
- } else if ( !PyArg_Parse(state, "(ii)", &valpred, &index) )
+ } else if ( !PyArg_ParseTuple(state, "ii", &valpred, &index) )
return 0;
step = stepsizeTable[index];
@@ -1480,8 +1486,8 @@ audioop_adpcm2lin(PyObject *self, PyObject *args)
PyObject *rv, *str, *state;
int i, inputbuffer = 0, bufferstep;
- if ( !PyArg_Parse(args, "(s#iO)",
- &cp, &len, &size, &state) )
+ if ( !PyArg_ParseTuple(args, "s#iO:adpcm2lin",
+ &cp, &len, &size, &state) )
return 0;
if ( size != 1 && size != 2 && size != 4) {
@@ -1495,7 +1501,7 @@ audioop_adpcm2lin(PyObject *self, PyObject *args)
valpred = 0;
step = 7;
index = 0;
- } else if ( !PyArg_Parse(state, "(ii)", &valpred, &index) )
+ } else if ( !PyArg_ParseTuple(state, "ii", &valpred, &index) )
return 0;
str = PyString_FromStringAndSize(NULL, len*size*2);
@@ -1562,30 +1568,30 @@ audioop_adpcm2lin(PyObject *self, PyObject *args)
}
static PyMethodDef audioop_methods[] = {
- { "max", audioop_max, METH_OLDARGS },
- { "minmax", audioop_minmax, METH_OLDARGS },
- { "avg", audioop_avg, METH_OLDARGS },
- { "maxpp", audioop_maxpp, METH_OLDARGS },
- { "avgpp", audioop_avgpp, METH_OLDARGS },
- { "rms", audioop_rms, METH_OLDARGS },
- { "findfit", audioop_findfit, METH_OLDARGS },
- { "findmax", audioop_findmax, METH_OLDARGS },
- { "findfactor", audioop_findfactor, METH_OLDARGS },
- { "cross", audioop_cross, METH_OLDARGS },
- { "mul", audioop_mul, METH_OLDARGS },
- { "add", audioop_add, METH_OLDARGS },
- { "bias", audioop_bias, METH_OLDARGS },
- { "ulaw2lin", audioop_ulaw2lin, METH_OLDARGS },
- { "lin2ulaw", audioop_lin2ulaw, METH_OLDARGS },
- { "alaw2lin", audioop_alaw2lin, METH_OLDARGS },
- { "lin2alaw", audioop_lin2alaw, METH_OLDARGS },
- { "lin2lin", audioop_lin2lin, METH_OLDARGS },
- { "adpcm2lin", audioop_adpcm2lin, METH_OLDARGS },
- { "lin2adpcm", audioop_lin2adpcm, METH_OLDARGS },
- { "tomono", audioop_tomono, METH_OLDARGS },
- { "tostereo", audioop_tostereo, METH_OLDARGS },
- { "getsample", audioop_getsample, METH_OLDARGS },
- { "reverse", audioop_reverse, METH_OLDARGS },
+ { "max", audioop_max, METH_VARARGS },
+ { "minmax", audioop_minmax, METH_VARARGS },
+ { "avg", audioop_avg, METH_VARARGS },
+ { "maxpp", audioop_maxpp, METH_VARARGS },
+ { "avgpp", audioop_avgpp, METH_VARARGS },
+ { "rms", audioop_rms, METH_VARARGS },
+ { "findfit", audioop_findfit, METH_VARARGS },
+ { "findmax", audioop_findmax, METH_VARARGS },
+ { "findfactor", audioop_findfactor, METH_VARARGS },
+ { "cross", audioop_cross, METH_VARARGS },
+ { "mul", audioop_mul, METH_VARARGS },
+ { "add", audioop_add, METH_VARARGS },
+ { "bias", audioop_bias, METH_VARARGS },
+ { "ulaw2lin", audioop_ulaw2lin, METH_VARARGS },
+ { "lin2ulaw", audioop_lin2ulaw, METH_VARARGS },
+ { "alaw2lin", audioop_alaw2lin, METH_VARARGS },
+ { "lin2alaw", audioop_lin2alaw, METH_VARARGS },
+ { "lin2lin", audioop_lin2lin, METH_VARARGS },
+ { "adpcm2lin", audioop_adpcm2lin, METH_VARARGS },
+ { "lin2adpcm", audioop_lin2adpcm, METH_VARARGS },
+ { "tomono", audioop_tomono, METH_VARARGS },
+ { "tostereo", audioop_tostereo, METH_VARARGS },
+ { "getsample", audioop_getsample, METH_VARARGS },
+ { "reverse", audioop_reverse, METH_VARARGS },
{ "ratecv", audioop_ratecv, METH_VARARGS },
{ 0, 0 }
};
diff --git a/Modules/binascii.c b/Modules/binascii.c
index 4623b7c..71a9624 100644
--- a/Modules/binascii.c
+++ b/Modules/binascii.c
@@ -644,7 +644,7 @@ binascii_rledecode_hqx(PyObject *self, PyObject *args)
/* Empty string is a special case */
if ( in_len == 0 )
- return Py_BuildValue("s", "");
+ return PyString_FromString("");
/* Allocate a buffer of reasonable size. Resized when needed */
out_len = in_len*2;
diff --git a/Modules/cPickle.c b/Modules/cPickle.c
index 85fd459..0d29362 100644
--- a/Modules/cPickle.c
+++ b/Modules/cPickle.c
@@ -5110,29 +5110,23 @@ noload(Unpicklerobject *self)
static PyObject *
-Unpickler_load(Unpicklerobject *self, PyObject *args)
+Unpickler_load(Unpicklerobject *self, PyObject *unused)
{
- if (!( PyArg_ParseTuple(args, ":load")))
- return NULL;
-
return load(self);
}
static PyObject *
-Unpickler_noload(Unpicklerobject *self, PyObject *args)
+Unpickler_noload(Unpicklerobject *self, PyObject *unused)
{
- if (!( PyArg_ParseTuple(args, ":noload")))
- return NULL;
-
return noload(self);
}
static struct PyMethodDef Unpickler_methods[] = {
- {"load", (PyCFunction)Unpickler_load, METH_VARARGS,
+ {"load", (PyCFunction)Unpickler_load, METH_NOARGS,
PyDoc_STR("load() -- Load a pickle")
},
- {"noload", (PyCFunction)Unpickler_noload, METH_VARARGS,
+ {"noload", (PyCFunction)Unpickler_noload, METH_NOARGS,
PyDoc_STR(
"noload() -- not load a pickle, but go through most of the motions\n"
"\n"
@@ -5214,12 +5208,8 @@ newUnpicklerobject(PyObject *f)
static PyObject *
-get_Unpickler(PyObject *self, PyObject *args)
+get_Unpickler(PyObject *self, PyObject *file)
{
- PyObject *file;
-
- if (!( PyArg_ParseTuple(args, "O:Unpickler", &file)))
- return NULL;
return (PyObject *)newUnpicklerobject(file);
}
@@ -5428,13 +5418,10 @@ cpm_dumps(PyObject *self, PyObject *args, PyObject *kwds)
/* load(fileobj). */
static PyObject *
-cpm_load(PyObject *self, PyObject *args)
+cpm_load(PyObject *self, PyObject *ob)
{
Unpicklerobject *unpickler = 0;
- PyObject *ob, *res = NULL;
-
- if (!( PyArg_ParseTuple(args, "O:load", &ob)))
- goto finally;
+ PyObject *res = NULL;
if (!( unpickler = newUnpicklerobject(ob)))
goto finally;
@@ -5519,7 +5506,7 @@ static struct PyMethodDef cPickle_methods[] = {
"See the Pickler docstring for the meaning of optional argument proto.")
},
- {"load", (PyCFunction)cpm_load, METH_VARARGS,
+ {"load", (PyCFunction)cpm_load, METH_O,
PyDoc_STR("load(file) -- Load a pickle from the given file")},
{"loads", (PyCFunction)cpm_loads, METH_VARARGS,
@@ -5550,7 +5537,7 @@ static struct PyMethodDef cPickle_methods[] = {
"object, or any other custom object that meets this interface.\n")
},
- {"Unpickler", (PyCFunction)get_Unpickler, METH_VARARGS,
+ {"Unpickler", (PyCFunction)get_Unpickler, METH_O,
PyDoc_STR("Unpickler(file) -- Create an unpickler.")},
{ NULL, NULL }
diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c
index 7e6aedc..7c6b989 100644
--- a/Modules/cjkcodecs/multibytecodec.c
+++ b/Modules/cjkcodecs/multibytecodec.c
@@ -1302,7 +1302,7 @@ mbstreamreader_read(MultibyteStreamReaderObject *self, PyObject *args)
PyObject *sizeobj = NULL;
Py_ssize_t size;
- if (!PyArg_ParseTuple(args, "|O:read", &sizeobj))
+ if (!PyArg_UnpackTuple(args, "read", 0, 1, &sizeobj))
return NULL;
if (sizeobj == Py_None || sizeobj == NULL)
@@ -1323,7 +1323,7 @@ mbstreamreader_readline(MultibyteStreamReaderObject *self, PyObject *args)
PyObject *sizeobj = NULL;
Py_ssize_t size;
- if (!PyArg_ParseTuple(args, "|O:readline", &sizeobj))
+ if (!PyArg_UnpackTuple(args, "readline", 0, 1, &sizeobj))
return NULL;
if (sizeobj == Py_None || sizeobj == NULL)
@@ -1344,7 +1344,7 @@ mbstreamreader_readlines(MultibyteStreamReaderObject *self, PyObject *args)
PyObject *sizehintobj = NULL, *r, *sr;
Py_ssize_t sizehint;
- if (!PyArg_ParseTuple(args, "|O:readlines", &sizehintobj))
+ if (!PyArg_UnpackTuple(args, "readlines", 0, 1, &sizehintobj))
return NULL;
if (sizehintobj == Py_None || sizehintobj == NULL)
@@ -1532,13 +1532,8 @@ mbstreamwriter_iwrite(MultibyteStreamWriterObject *self,
}
static PyObject *
-mbstreamwriter_write(MultibyteStreamWriterObject *self, PyObject *args)
+mbstreamwriter_write(MultibyteStreamWriterObject *self, PyObject *strobj)
{
- PyObject *strobj;
-
- if (!PyArg_ParseTuple(args, "O:write", &strobj))
- return NULL;
-
if (mbstreamwriter_iwrite(self, strobj))
return NULL;
else
@@ -1546,14 +1541,11 @@ mbstreamwriter_write(MultibyteStreamWriterObject *self, PyObject *args)
}
static PyObject *
-mbstreamwriter_writelines(MultibyteStreamWriterObject *self, PyObject *args)
+mbstreamwriter_writelines(MultibyteStreamWriterObject *self, PyObject *lines)
{
- PyObject *lines, *strobj;
+ PyObject *strobj;
int i, r;
- if (!PyArg_ParseTuple(args, "O:writelines", &lines))
- return NULL;
-
if (!PySequence_Check(lines)) {
PyErr_SetString(PyExc_TypeError,
"arg must be a sequence object");
@@ -1676,9 +1668,9 @@ mbstreamwriter_dealloc(MultibyteStreamWriterObject *self)
static struct PyMethodDef mbstreamwriter_methods[] = {
{"write", (PyCFunction)mbstreamwriter_write,
- METH_VARARGS, NULL},
+ METH_O, NULL},
{"writelines", (PyCFunction)mbstreamwriter_writelines,
- METH_VARARGS, NULL},
+ METH_O, NULL},
{"reset", (PyCFunction)mbstreamwriter_reset,
METH_NOARGS, NULL},
{NULL, NULL},
diff --git a/Modules/dbmmodule.c b/Modules/dbmmodule.c
index 8bfbbcd..9086c84 100644
--- a/Modules/dbmmodule.c
+++ b/Modules/dbmmodule.c
@@ -168,10 +168,8 @@ static PyMappingMethods dbm_as_mapping = {
};
static PyObject *
-dbm__close(register dbmobject *dp, PyObject *args)
+dbm__close(register dbmobject *dp, PyObject *unused)
{
- if (!PyArg_ParseTuple(args, ":close"))
- return NULL;
if (dp->di_dbm)
dbm_close(dp->di_dbm);
dp->di_dbm = NULL;
@@ -180,14 +178,12 @@ dbm__close(register dbmobject *dp, PyObject *args)
}
static PyObject *
-dbm_keys(register dbmobject *dp, PyObject *args)
+dbm_keys(register dbmobject *dp, PyObject *unused)
{
register PyObject *v, *item;
datum key;
int err;
- if (!PyArg_ParseTuple(args, ":keys"))
- return NULL;
check_dbmobject_open(dp);
v = PyList_New(0);
if (v == NULL)
@@ -277,9 +273,9 @@ dbm_setdefault(register dbmobject *dp, PyObject *args)
}
static PyMethodDef dbm_methods[] = {
- {"close", (PyCFunction)dbm__close, METH_VARARGS,
+ {"close", (PyCFunction)dbm__close, METH_NOARGS,
"close()\nClose the database."},
- {"keys", (PyCFunction)dbm_keys, METH_VARARGS,
+ {"keys", (PyCFunction)dbm_keys, METH_NOARGS,
"keys() -> list\nReturn a list of all keys in the database."},
{"has_key", (PyCFunction)dbm_has_key, METH_VARARGS,
"has_key(key} -> boolean\nReturn true iff key is in the database."},
diff --git a/Modules/flmodule.c b/Modules/flmodule.c
index aa0d04e..e507c9f 100644
--- a/Modules/flmodule.c
+++ b/Modules/flmodule.c
@@ -148,22 +148,21 @@ releaseobjects(FL_FORM *form)
static PyObject *
generic_set_call_back(genericobject *g, PyObject *args)
{
- if (args == NULL) {
+ if (PyTuple_GET_SIZE(args) == 0) {
Py_XDECREF(g->ob_callback);
Py_XDECREF(g->ob_callback_arg);
g->ob_callback = NULL;
g->ob_callback_arg = NULL;
}
else {
- if (!PyTuple_Check(args) || PyTuple_Size(args) != 2) {
- PyErr_BadArgument();
- return NULL;
- }
+ PyObject *a, *b;
+ if (!PyArg_UnpackTuple(args, "set_call_back", 2, 2, &a, &b)
+ return NULL;
Py_XDECREF(g->ob_callback);
Py_XDECREF(g->ob_callback_arg);
- g->ob_callback = PyTuple_GetItem(args, 0);
+ g->ob_callback = a;
Py_INCREF(g->ob_callback);
- g->ob_callback_arg = PyTuple_GetItem(args, 1);
+ g->ob_callback_arg = b;
Py_INCREF(g->ob_callback_arg);
}
Py_INCREF(Py_None);
@@ -250,7 +249,7 @@ generic_set_object_shortcut(genericobject *g, PyObject *args)
}
static PyMethodDef generic_methods[] = {
- {"set_call_back", (PyCFunction)generic_set_call_back, METH_OLDARGS},
+ {"set_call_back", (PyCFunction)generic_set_call_back, METH_VARARGS},
{"delete_object", (PyCFunction)generic_delete_object, METH_NOARGS},
{"show_object", (PyCFunction)generic_show_object, METH_NOARGS},
{"hide_object", (PyCFunction)generic_hide_object, METH_NOARGS},
@@ -261,7 +260,7 @@ static PyMethodDef generic_methods[] = {
#endif
{"activate_object", (PyCFunction)generic_activate_object, METH_NOARGS},
{"deactivate_object", (PyCFunction)generic_deactivate_object, METH_NOARGS},
- {"set_object_shortcut", (PyCFunction)generic_set_object_shortcut, METH_OLDARGS},
+ {"set_object_shortcut", (PyCFunction)generic_set_object_shortcut, METH_VARARGS},
{NULL, NULL} /* sentinel */
};
diff --git a/Modules/fmmodule.c b/Modules/fmmodule.c
index 0175390..1f7edb6 100644
--- a/Modules/fmmodule.c
+++ b/Modules/fmmodule.c
@@ -41,7 +41,7 @@ static PyObject *
fh_scalefont(fhobject *self, PyObject *args)
{
double size;
- if (!PyArg_Parse(args, "d", &size))
+ if (!PyArg_ParseTuple(args, "d", &size))
return NULL;
return newfhobject(fmscalefont(self->fh_fh, size));
}
@@ -112,21 +112,21 @@ static PyObject *
fh_getstrwidth(fhobject *self, PyObject *args)
{
char *str;
- if (!PyArg_Parse(args, "s", &str))
+ if (!PyArg_ParseTuple(args, "s", &str))
return NULL;
return PyInt_FromLong(fmgetstrwidth(self->fh_fh, str));
}
static PyMethodDef fh_methods[] = {
- {"scalefont", (PyCFunction)fh_scalefont, METH_OLDARGS},
+ {"scalefont", (PyCFunction)fh_scalefont, METH_VARARGS},
{"setfont", (PyCFunction)fh_setfont, METH_NOARGS},
{"getfontname", (PyCFunction)fh_getfontname, METH_NOARGS},
{"getcomment", (PyCFunction)fh_getcomment, METH_NOARGS},
{"getfontinfo", (PyCFunction)fh_getfontinfo, METH_NOARGS},
#if 0
- {"getwholemetrics", (PyCFunction)fh_getwholemetrics, METH_OLDARGS},
+ {"getwholemetrics", (PyCFunction)fh_getwholemetrics, METH_VARARGS},
#endif
- {"getstrwidth", (PyCFunction)fh_getstrwidth, METH_OLDARGS},
+ {"getstrwidth", (PyCFunction)fh_getstrwidth, METH_VARARGS},
{NULL, NULL} /* sentinel */
};
@@ -173,7 +173,7 @@ static PyObject *
fm_findfont(PyObject *self, PyObject *args)
{
char *str;
- if (!PyArg_Parse(args, "s", &str))
+ if (!PyArg_ParseTuple(args, "s", &str))
return NULL;
return newfhobject(fmfindfont(str));
}
@@ -182,7 +182,7 @@ static PyObject *
fm_prstr(PyObject *self, PyObject *args)
{
char *str;
- if (!PyArg_Parse(args, "s", &str))
+ if (!PyArg_ParseTuple(args, "s", &str))
return NULL;
fmprstr(str);
Py_INCREF(Py_None);
@@ -230,7 +230,7 @@ static PyObject *
fm_setpath(PyObject *self, PyObject *args)
{
char *str;
- if (!PyArg_Parse(args, "s", &str))
+ if (!PyArg_ParseTuple(args, "s", &str))
return NULL;
fmsetpath(str);
Py_INCREF(Py_None);
@@ -245,10 +245,10 @@ fm_fontpath(PyObject *self)
static PyMethodDef fm_methods[] = {
{"init", fm_init, METH_NOARGS},
- {"findfont", fm_findfont, METH_OLDARGS},
+ {"findfont", fm_findfont, METH_VARARGS},
{"enumerate", fm_enumerate, METH_NOARGS},
- {"prstr", fm_prstr, METH_OLDARGS},
- {"setpath", fm_setpath, METH_OLDARGS},
+ {"prstr", fm_prstr, METH_VARARGS},
+ {"setpath", fm_setpath, METH_VARARGS},
{"fontpath", fm_fontpath, METH_NOARGS},
{NULL, NULL} /* sentinel */
};
diff --git a/Modules/gdbmmodule.c b/Modules/gdbmmodule.c
index 76d54f8..cfc6abc 100644
--- a/Modules/gdbmmodule.c
+++ b/Modules/gdbmmodule.c
@@ -189,10 +189,8 @@ PyDoc_STRVAR(dbm_close__doc__,
Closes the database.");
static PyObject *
-dbm_close(register dbmobject *dp, PyObject *args)
+dbm_close(register dbmobject *dp, PyObject *unused)
{
- if (!PyArg_ParseTuple(args, ":close"))
- return NULL;
if (dp->di_dbm)
gdbm_close(dp->di_dbm);
dp->di_dbm = NULL;
@@ -205,7 +203,7 @@ PyDoc_STRVAR(dbm_keys__doc__,
Get a list of all keys in the database.");
static PyObject *
-dbm_keys(register dbmobject *dp, PyObject *args)
+dbm_keys(register dbmobject *dp, PyObject *unused)
{
register PyObject *v, *item;
datum key, nextkey;
@@ -215,9 +213,6 @@ dbm_keys(register dbmobject *dp, PyObject *args)
PyErr_BadInternalCall();
return NULL;
}
- if (!PyArg_ParseTuple(args, ":keys"))
- return NULL;
-
check_dbmobject_open(dp);
v = PyList_New(0);
@@ -269,13 +264,11 @@ hash values, and won't be sorted by the key values. This method\n\
returns the starting key.");
static PyObject *
-dbm_firstkey(register dbmobject *dp, PyObject *args)
+dbm_firstkey(register dbmobject *dp, PyObject *unused)
{
register PyObject *v;
datum key;
- if (!PyArg_ParseTuple(args, ":firstkey"))
- return NULL;
check_dbmobject_open(dp);
key = gdbm_firstkey(dp->di_dbm);
if (key.dptr) {
@@ -330,10 +323,8 @@ by using this reorganization; otherwise, deleted file space will be\n\
kept and reused as new (key,value) pairs are added.");
static PyObject *
-dbm_reorganize(register dbmobject *dp, PyObject *args)
+dbm_reorganize(register dbmobject *dp, PyObject *unused)
{
- if (!PyArg_ParseTuple(args, ":reorganize"))
- return NULL;
check_dbmobject_open(dp);
errno = 0;
if (gdbm_reorganize(dp->di_dbm) < 0) {
@@ -353,10 +344,8 @@ When the database has been opened in fast mode, this method forces\n\
any unwritten data to be written to the disk.");
static PyObject *
-dbm_sync(register dbmobject *dp, PyObject *args)
+dbm_sync(register dbmobject *dp, PyObject *unused)
{
- if (!PyArg_ParseTuple(args, ":sync"))
- return NULL;
check_dbmobject_open(dp);
gdbm_sync(dp->di_dbm);
Py_INCREF(Py_None);
@@ -364,13 +353,13 @@ dbm_sync(register dbmobject *dp, PyObject *args)
}
static PyMethodDef dbm_methods[] = {
- {"close", (PyCFunction)dbm_close, METH_VARARGS, dbm_close__doc__},
- {"keys", (PyCFunction)dbm_keys, METH_VARARGS, dbm_keys__doc__},
+ {"close", (PyCFunction)dbm_close, METH_NOARGS, dbm_close__doc__},
+ {"keys", (PyCFunction)dbm_keys, METH_NOARGS, dbm_keys__doc__},
{"has_key", (PyCFunction)dbm_has_key, METH_VARARGS, dbm_has_key__doc__},
- {"firstkey", (PyCFunction)dbm_firstkey,METH_VARARGS, dbm_firstkey__doc__},
+ {"firstkey", (PyCFunction)dbm_firstkey,METH_NOARGS, dbm_firstkey__doc__},
{"nextkey", (PyCFunction)dbm_nextkey, METH_VARARGS, dbm_nextkey__doc__},
- {"reorganize",(PyCFunction)dbm_reorganize,METH_VARARGS, dbm_reorganize__doc__},
- {"sync", (PyCFunction)dbm_sync, METH_VARARGS, dbm_sync__doc__},
+ {"reorganize",(PyCFunction)dbm_reorganize,METH_NOARGS, dbm_reorganize__doc__},
+ {"sync", (PyCFunction)dbm_sync, METH_NOARGS, dbm_sync__doc__},
{NULL, NULL} /* sentinel */
};
diff --git a/Modules/linuxaudiodev.c b/Modules/linuxaudiodev.c
index 769451a..c1c7363 100644
--- a/Modules/linuxaudiodev.c
+++ b/Modules/linuxaudiodev.c
@@ -219,24 +219,18 @@ lad_write(lad_t *self, PyObject *args)
}
static PyObject *
-lad_close(lad_t *self, PyObject *args)
+lad_close(lad_t *self, PyObject *unused)
{
- if (!PyArg_ParseTuple(args, ":close"))
- return NULL;
-
if (self->x_fd >= 0) {
close(self->x_fd);
self->x_fd = -1;
}
- Py_INCREF(Py_None);
- return Py_None;
+ Py_RETURN_NONE;
}
static PyObject *
-lad_fileno(lad_t *self, PyObject *args)
+lad_fileno(lad_t *self, PyObject *unused)
{
- if (!PyArg_ParseTuple(args, ":fileno"))
- return NULL;
return PyInt_FromLong(self->x_fd);
}
@@ -341,13 +335,11 @@ _ssize(lad_t *self, int *nchannels, int *ssize)
/* bufsize returns the size of the hardware audio buffer in number
of samples */
static PyObject *
-lad_bufsize(lad_t *self, PyObject *args)
+lad_bufsize(lad_t *self, PyObject *unused)
{
audio_buf_info ai;
int nchannels=0, ssize=0;
- if (!PyArg_ParseTuple(args, ":bufsize")) return NULL;
-
if (_ssize(self, &nchannels, &ssize) < 0 || !ssize || !nchannels) {
PyErr_SetFromErrno(LinuxAudioError);
return NULL;
@@ -362,14 +354,11 @@ lad_bufsize(lad_t *self, PyObject *args)
/* obufcount returns the number of samples that are available in the
hardware for playing */
static PyObject *
-lad_obufcount(lad_t *self, PyObject *args)
+lad_obufcount(lad_t *self, PyObject *unused)
{
audio_buf_info ai;
int nchannels=0, ssize=0;
- if (!PyArg_ParseTuple(args, ":obufcount"))
- return NULL;
-
if (_ssize(self, &nchannels, &ssize) < 0 || !ssize || !nchannels) {
PyErr_SetFromErrno(LinuxAudioError);
return NULL;
@@ -385,14 +374,11 @@ lad_obufcount(lad_t *self, PyObject *args)
/* obufcount returns the number of samples that can be played without
blocking */
static PyObject *
-lad_obuffree(lad_t *self, PyObject *args)
+lad_obuffree(lad_t *self, PyObject *unused)
{
audio_buf_info ai;
int nchannels=0, ssize=0;
- if (!PyArg_ParseTuple(args, ":obuffree"))
- return NULL;
-
if (_ssize(self, &nchannels, &ssize) < 0 || !ssize || !nchannels) {
PyErr_SetFromErrno(LinuxAudioError);
return NULL;
@@ -406,27 +392,21 @@ lad_obuffree(lad_t *self, PyObject *args)
/* Flush the device */
static PyObject *
-lad_flush(lad_t *self, PyObject *args)
+lad_flush(lad_t *self, PyObject *unused)
{
- if (!PyArg_ParseTuple(args, ":flush")) return NULL;
-
if (ioctl(self->x_fd, SNDCTL_DSP_SYNC, NULL) == -1) {
PyErr_SetFromErrno(LinuxAudioError);
return NULL;
}
- Py_INCREF(Py_None);
- return Py_None;
+ Py_RETURN_NONE;
}
static PyObject *
-lad_getptr(lad_t *self, PyObject *args)
+lad_getptr(lad_t *self, PyObject *unused)
{
count_info info;
int req;
- if (!PyArg_ParseTuple(args, ":getptr"))
- return NULL;
-
if (self->x_mode == O_RDONLY)
req = SNDCTL_DSP_GETIPTR;
else
@@ -443,12 +423,12 @@ static PyMethodDef lad_methods[] = {
{ "write", (PyCFunction)lad_write, METH_VARARGS },
{ "setparameters", (PyCFunction)lad_setparameters, METH_VARARGS },
{ "bufsize", (PyCFunction)lad_bufsize, METH_VARARGS },
- { "obufcount", (PyCFunction)lad_obufcount, METH_VARARGS },
- { "obuffree", (PyCFunction)lad_obuffree, METH_VARARGS },
- { "flush", (PyCFunction)lad_flush, METH_VARARGS },
- { "close", (PyCFunction)lad_close, METH_VARARGS },
- { "fileno", (PyCFunction)lad_fileno, METH_VARARGS },
- { "getptr", (PyCFunction)lad_getptr, METH_VARARGS },
+ { "obufcount", (PyCFunction)lad_obufcount, METH_NOARGS },
+ { "obuffree", (PyCFunction)lad_obuffree, METH_NOARGS },
+ { "flush", (PyCFunction)lad_flush, METH_NOARGS },
+ { "close", (PyCFunction)lad_close, METH_NOARGS },
+ { "fileno", (PyCFunction)lad_fileno, METH_NOARGS },
+ { "getptr", (PyCFunction)lad_getptr, METH_NOARGS },
{ NULL, NULL} /* sentinel */
};
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c
index 2e34a9f..19970c9 100644
--- a/Modules/mmapmodule.c
+++ b/Modules/mmapmodule.c
@@ -114,10 +114,8 @@ mmap_object_dealloc(mmap_object *m_obj)
}
static PyObject *
-mmap_close_method(mmap_object *self, PyObject *args)
+mmap_close_method(mmap_object *self, PyObject *unused)
{
- if (!PyArg_ParseTuple(args, ":close"))
- return NULL;
#ifdef MS_WINDOWS
/* For each resource we maintain, we need to check
the value is valid, and if so, free the resource
@@ -175,11 +173,9 @@ do { \
static PyObject *
mmap_read_byte_method(mmap_object *self,
- PyObject *args)
+ PyObject *unused)
{
CHECK_VALID(NULL);
- if (!PyArg_ParseTuple(args, ":read_byte"))
- return NULL;
if (self->pos < self->size) {
char value = self->data[self->pos];
self->pos += 1;
@@ -192,7 +188,7 @@ mmap_read_byte_method(mmap_object *self,
static PyObject *
mmap_read_line_method(mmap_object *self,
- PyObject *args)
+ PyObject *unused)
{
char *start = self->data+self->pos;
char *eof = self->data+self->size;
@@ -200,8 +196,6 @@ mmap_read_line_method(mmap_object *self,
PyObject *result;
CHECK_VALID(NULL);
- if (!PyArg_ParseTuple(args, ":readline"))
- return NULL;
eol = memchr(start, '\n', self->size - self->pos);
if (!eol)
@@ -332,11 +326,9 @@ mmap_write_byte_method(mmap_object *self,
static PyObject *
mmap_size_method(mmap_object *self,
- PyObject *args)
+ PyObject *unused)
{
CHECK_VALID(NULL);
- if (!PyArg_ParseTuple(args, ":size"))
- return NULL;
#ifdef MS_WINDOWS
if (self->file_handle != INVALID_HANDLE_VALUE) {
@@ -472,12 +464,10 @@ mmap_resize_method(mmap_object *self,
}
static PyObject *
-mmap_tell_method(mmap_object *self, PyObject *args)
+mmap_tell_method(mmap_object *self, PyObject *unused)
{
CHECK_VALID(NULL);
- if (!PyArg_ParseTuple(args, ":tell"))
- return NULL;
- return Py_BuildValue("l", (long) self->pos);
+ return PyInt_FromLong((long) self->pos);
}
static PyObject *
@@ -493,7 +483,7 @@ mmap_flush_method(mmap_object *self, PyObject *args)
return NULL;
} else {
#ifdef MS_WINDOWS
- return Py_BuildValue("l", (long)
+ return PyInt_FromLong((long)
FlushViewOfFile(self->data+offset, size));
#endif /* MS_WINDOWS */
#ifdef UNIX
@@ -505,7 +495,7 @@ mmap_flush_method(mmap_object *self, PyObject *args)
PyErr_SetFromErrno(mmap_module_error);
return NULL;
}
- return Py_BuildValue("l", (long) 0);
+ return PyInt_FromLong(0);
#endif /* UNIX */
}
}
@@ -578,17 +568,17 @@ mmap_move_method(mmap_object *self, PyObject *args)
}
static struct PyMethodDef mmap_object_methods[] = {
- {"close", (PyCFunction) mmap_close_method, METH_VARARGS},
+ {"close", (PyCFunction) mmap_close_method, METH_NOARGS},
{"find", (PyCFunction) mmap_find_method, METH_VARARGS},
{"flush", (PyCFunction) mmap_flush_method, METH_VARARGS},
{"move", (PyCFunction) mmap_move_method, METH_VARARGS},
{"read", (PyCFunction) mmap_read_method, METH_VARARGS},
- {"read_byte", (PyCFunction) mmap_read_byte_method, METH_VARARGS},
- {"readline", (PyCFunction) mmap_read_line_method, METH_VARARGS},
+ {"read_byte", (PyCFunction) mmap_read_byte_method, METH_NOARGS},
+ {"readline", (PyCFunction) mmap_read_line_method, METH_NOARGS},
{"resize", (PyCFunction) mmap_resize_method, METH_VARARGS},
{"seek", (PyCFunction) mmap_seek_method, METH_VARARGS},
- {"size", (PyCFunction) mmap_size_method, METH_VARARGS},
- {"tell", (PyCFunction) mmap_tell_method, METH_VARARGS},
+ {"size", (PyCFunction) mmap_size_method, METH_NOARGS},
+ {"tell", (PyCFunction) mmap_tell_method, METH_NOARGS},
{"write", (PyCFunction) mmap_write_method, METH_VARARGS},
{"write_byte", (PyCFunction) mmap_write_byte_method, METH_VARARGS},
{NULL, NULL} /* sentinel */
diff --git a/Modules/ossaudiodev.c b/Modules/ossaudiodev.c
index 563620c..9716838 100644
--- a/Modules/ossaudiodev.c
+++ b/Modules/ossaudiodev.c
@@ -296,12 +296,10 @@ _do_ioctl_0(int fd, PyObject *args, char *fname, int cmd)
*/
static PyObject *
-oss_nonblock(oss_audio_t *self, PyObject *args)
+oss_nonblock(oss_audio_t *self, PyObject *unused)
{
/* Hmmm: it doesn't appear to be possible to return to blocking
mode once we're in non-blocking mode! */
- if (!PyArg_ParseTuple(args, ":nonblock"))
- return NULL;
if (ioctl(self->fd, SNDCTL_DSP_NONBLOCK, NULL) == -1)
return PyErr_SetFromErrno(PyExc_IOError);
Py_INCREF(Py_None);
@@ -315,11 +313,9 @@ oss_setfmt(oss_audio_t *self, PyObject *args)
}
static PyObject *
-oss_getfmts(oss_audio_t *self, PyObject *args)
+oss_getfmts(oss_audio_t *self, PyObject *unused)
{
int mask;
- if (!PyArg_ParseTuple(args, ":getfmts"))
- return NULL;
if (ioctl(self->fd, SNDCTL_DSP_GETFMTS, &mask) == -1)
return PyErr_SetFromErrno(PyExc_IOError);
return PyInt_FromLong(mask);
@@ -459,11 +455,8 @@ oss_writeall(oss_audio_t *self, PyObject *args)
}
static PyObject *
-oss_close(oss_audio_t *self, PyObject *args)
+oss_close(oss_audio_t *self, PyObject *unused)
{
- if (!PyArg_ParseTuple(args, ":close"))
- return NULL;
-
if (self->fd >= 0) {
Py_BEGIN_ALLOW_THREADS
close(self->fd);
@@ -475,10 +468,8 @@ oss_close(oss_audio_t *self, PyObject *args)
}
static PyObject *
-oss_fileno(oss_audio_t *self, PyObject *args)
+oss_fileno(oss_audio_t *self, PyObject *unused)
{
- if (!PyArg_ParseTuple(args, ":fileno"))
- return NULL;
return PyInt_FromLong(self->fd);
}
@@ -578,13 +569,11 @@ _ssize(oss_audio_t *self, int *nchannels, int *ssize)
/* bufsize returns the size of the hardware audio buffer in number
of samples */
static PyObject *
-oss_bufsize(oss_audio_t *self, PyObject *args)
+oss_bufsize(oss_audio_t *self, PyObject *unused)
{
audio_buf_info ai;
int nchannels=0, ssize=0;
- if (!PyArg_ParseTuple(args, ":bufsize")) return NULL;
-
if (_ssize(self, &nchannels, &ssize) < 0 || !nchannels || !ssize) {
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
@@ -599,14 +588,11 @@ oss_bufsize(oss_audio_t *self, PyObject *args)
/* obufcount returns the number of samples that are available in the
hardware for playing */
static PyObject *
-oss_obufcount(oss_audio_t *self, PyObject *args)
+oss_obufcount(oss_audio_t *self, PyObject *unused)
{
audio_buf_info ai;
int nchannels=0, ssize=0;
- if (!PyArg_ParseTuple(args, ":obufcount"))
- return NULL;
-
if (_ssize(self, &nchannels, &ssize) < 0 || !nchannels || !ssize) {
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
@@ -622,14 +608,11 @@ oss_obufcount(oss_audio_t *self, PyObject *args)
/* obufcount returns the number of samples that can be played without
blocking */
static PyObject *
-oss_obuffree(oss_audio_t *self, PyObject *args)
+oss_obuffree(oss_audio_t *self, PyObject *unused)
{
audio_buf_info ai;
int nchannels=0, ssize=0;
- if (!PyArg_ParseTuple(args, ":obuffree"))
- return NULL;
-
if (_ssize(self, &nchannels, &ssize) < 0 || !nchannels || !ssize) {
PyErr_SetFromErrno(PyExc_IOError);
return NULL;
@@ -642,14 +625,11 @@ oss_obuffree(oss_audio_t *self, PyObject *args)
}
static PyObject *
-oss_getptr(oss_audio_t *self, PyObject *args)
+oss_getptr(oss_audio_t *self, PyObject *unused)
{
count_info info;
int req;
- if (!PyArg_ParseTuple(args, ":getptr"))
- return NULL;
-
if (self->mode == O_RDONLY)
req = SNDCTL_DSP_GETIPTR;
else
@@ -667,11 +647,8 @@ oss_getptr(oss_audio_t *self, PyObject *args)
*/
static PyObject *
-oss_mixer_close(oss_mixer_t *self, PyObject *args)
+oss_mixer_close(oss_mixer_t *self, PyObject *unused)
{
- if (!PyArg_ParseTuple(args, ":close"))
- return NULL;
-
if (self->fd >= 0) {
close(self->fd);
self->fd = -1;
@@ -681,10 +658,8 @@ oss_mixer_close(oss_mixer_t *self, PyObject *args)
}
static PyObject *
-oss_mixer_fileno(oss_mixer_t *self, PyObject *args)
+oss_mixer_fileno(oss_mixer_t *self, PyObject *unused)
{
- if (!PyArg_ParseTuple(args, ":fileno"))
- return NULL;
return PyInt_FromLong(self->fd);
}
@@ -782,13 +757,13 @@ static PyMethodDef oss_methods[] = {
{ "read", (PyCFunction)oss_read, METH_VARARGS },
{ "write", (PyCFunction)oss_write, METH_VARARGS },
{ "writeall", (PyCFunction)oss_writeall, METH_VARARGS },
- { "close", (PyCFunction)oss_close, METH_VARARGS },
- { "fileno", (PyCFunction)oss_fileno, METH_VARARGS },
+ { "close", (PyCFunction)oss_close, METH_NOARGS },
+ { "fileno", (PyCFunction)oss_fileno, METH_NOARGS },
/* Simple ioctl wrappers */
- { "nonblock", (PyCFunction)oss_nonblock, METH_VARARGS },
+ { "nonblock", (PyCFunction)oss_nonblock, METH_NOARGS },
{ "setfmt", (PyCFunction)oss_setfmt, METH_VARARGS },
- { "getfmts", (PyCFunction)oss_getfmts, METH_VARARGS },
+ { "getfmts", (PyCFunction)oss_getfmts, METH_NOARGS },
{ "channels", (PyCFunction)oss_channels, METH_VARARGS },
{ "speed", (PyCFunction)oss_speed, METH_VARARGS },
{ "sync", (PyCFunction)oss_sync, METH_VARARGS },
@@ -797,10 +772,10 @@ static PyMethodDef oss_methods[] = {
/* Convenience methods -- wrap a couple of ioctls together */
{ "setparameters", (PyCFunction)oss_setparameters, METH_VARARGS },
- { "bufsize", (PyCFunction)oss_bufsize, METH_VARARGS },
- { "obufcount", (PyCFunction)oss_obufcount, METH_VARARGS },
- { "obuffree", (PyCFunction)oss_obuffree, METH_VARARGS },
- { "getptr", (PyCFunction)oss_getptr, METH_VARARGS },
+ { "bufsize", (PyCFunction)oss_bufsize, METH_NOARGS },
+ { "obufcount", (PyCFunction)oss_obufcount, METH_NOARGS },
+ { "obuffree", (PyCFunction)oss_obuffree, METH_NOARGS },
+ { "getptr", (PyCFunction)oss_getptr, METH_NOARGS },
/* Aliases for backwards compatibility */
{ "flush", (PyCFunction)oss_sync, METH_VARARGS },
@@ -810,8 +785,8 @@ static PyMethodDef oss_methods[] = {
static PyMethodDef oss_mixer_methods[] = {
/* Regular file method - OSS mixers are ioctl-only interface */
- { "close", (PyCFunction)oss_mixer_close, METH_VARARGS },
- { "fileno", (PyCFunction)oss_mixer_fileno, METH_VARARGS },
+ { "close", (PyCFunction)oss_mixer_close, METH_NOARGS },
+ { "fileno", (PyCFunction)oss_mixer_fileno, METH_NOARGS },
/* Simple ioctl wrappers */
{ "controls", (PyCFunction)oss_mixer_controls, METH_VARARGS },
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 7f0a261..c0280de 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -5282,14 +5282,11 @@ PyDoc_STRVAR(posix_setgroups__doc__,
Set the groups of the current process to list.");
static PyObject *
-posix_setgroups(PyObject *self, PyObject *args)
+posix_setgroups(PyObject *self, PyObject *groups)
{
- PyObject *groups;
int i, len;
gid_t grouplist[MAX_GROUPS];
- if (!PyArg_ParseTuple(args, "O:setgid", &groups))
- return NULL;
if (!PySequence_Check(groups)) {
PyErr_SetString(PyExc_TypeError, "setgroups argument must be a sequence");
return NULL;
@@ -8020,7 +8017,7 @@ static PyMethodDef posix_methods[] = {
{"setgid", posix_setgid, METH_VARARGS, posix_setgid__doc__},
#endif /* HAVE_SETGID */
#ifdef HAVE_SETGROUPS
- {"setgroups", posix_setgroups, METH_VARARGS, posix_setgroups__doc__},
+ {"setgroups", posix_setgroups, METH_O, posix_setgroups__doc__},
#endif /* HAVE_SETGROUPS */
#ifdef HAVE_GETPGID
{"getpgid", posix_getpgid, METH_VARARGS, posix_getpgid__doc__},
diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c
index fe50e36..8a10bab 100644
--- a/Modules/pyexpat.c
+++ b/Modules/pyexpat.c
@@ -981,16 +981,12 @@ PyDoc_STRVAR(xmlparse_ParseFile__doc__,
Parse XML data from file-like object.");
static PyObject *
-xmlparse_ParseFile(xmlparseobject *self, PyObject *args)
+xmlparse_ParseFile(xmlparseobject *self, PyObject *f)
{
int rv = 1;
- PyObject *f;
FILE *fp;
PyObject *readmethod = NULL;
- if (!PyArg_ParseTuple(args, "O:ParseFile", &f))
- return NULL;
-
if (PyFile_Check(f)) {
fp = PyFile_AsFile(f);
}
@@ -1062,11 +1058,8 @@ PyDoc_STRVAR(xmlparse_GetBase__doc__,
Return base URL string for the parser.");
static PyObject *
-xmlparse_GetBase(xmlparseobject *self, PyObject *args)
+xmlparse_GetBase(xmlparseobject *self, PyObject *unused)
{
- if (!PyArg_ParseTuple(args, ":GetBase"))
- return NULL;
-
return Py_BuildValue("z", XML_GetBase(self->itself));
}
@@ -1077,29 +1070,21 @@ If the event was generated by a large amount of text (such as a start tag\n\
for an element with many attributes), not all of the text may be available.");
static PyObject *
-xmlparse_GetInputContext(xmlparseobject *self, PyObject *args)
+xmlparse_GetInputContext(xmlparseobject *self, PyObject *unused)
{
- PyObject *result = NULL;
-
- if (PyArg_ParseTuple(args, ":GetInputContext")) {
- if (self->in_callback) {
- int offset, size;
- const char *buffer
- = XML_GetInputContext(self->itself, &offset, &size);
-
- if (buffer != NULL)
- result = PyString_FromStringAndSize(buffer + offset, size - offset);
- else {
- result = Py_None;
- Py_INCREF(result);
- }
- }
- else {
- result = Py_None;
- Py_INCREF(result);
- }
+ if (self->in_callback) {
+ int offset, size;
+ const char *buffer
+ = XML_GetInputContext(self->itself, &offset, &size);
+
+ if (buffer != NULL)
+ return PyString_FromStringAndSize(buffer + offset,
+ size - offset);
+ else
+ Py_RETURN_NONE;
}
- return result;
+ else
+ Py_RETURN_NONE;
}
PyDoc_STRVAR(xmlparse_ExternalEntityParserCreate__doc__,
@@ -1228,7 +1213,7 @@ xmlparse_UseForeignDTD(xmlparseobject *self, PyObject *args)
PyObject *flagobj = NULL;
XML_Bool flag = XML_TRUE;
enum XML_Error rc;
- if (!PyArg_ParseTuple(args, "|O:UseForeignDTD", &flagobj))
+ if (!PyArg_UnpackTuple(args, "UseForeignDTD", 0, 1, &flagobj))
return NULL;
if (flagobj != NULL)
flag = PyObject_IsTrue(flagobj) ? XML_TRUE : XML_FALSE;
@@ -1245,17 +1230,17 @@ static struct PyMethodDef xmlparse_methods[] = {
{"Parse", (PyCFunction)xmlparse_Parse,
METH_VARARGS, xmlparse_Parse__doc__},
{"ParseFile", (PyCFunction)xmlparse_ParseFile,
- METH_VARARGS, xmlparse_ParseFile__doc__},
+ METH_O, xmlparse_ParseFile__doc__},
{"SetBase", (PyCFunction)xmlparse_SetBase,
METH_VARARGS, xmlparse_SetBase__doc__},
{"GetBase", (PyCFunction)xmlparse_GetBase,
- METH_VARARGS, xmlparse_GetBase__doc__},
+ METH_NOARGS, xmlparse_GetBase__doc__},
{"ExternalEntityParserCreate", (PyCFunction)xmlparse_ExternalEntityParserCreate,
METH_VARARGS, xmlparse_ExternalEntityParserCreate__doc__},
{"SetParamEntityParsing", (PyCFunction)xmlparse_SetParamEntityParsing,
METH_VARARGS, xmlparse_SetParamEntityParsing__doc__},
{"GetInputContext", (PyCFunction)xmlparse_GetInputContext,
- METH_VARARGS, xmlparse_GetInputContext__doc__},
+ METH_NOARGS, xmlparse_GetInputContext__doc__},
#if XML_COMBINED_VERSION >= 19505
{"UseForeignDTD", (PyCFunction)xmlparse_UseForeignDTD,
METH_VARARGS, xmlparse_UseForeignDTD__doc__},
diff --git a/Modules/resource.c b/Modules/resource.c
index e73c878..fe6f3b6 100644
--- a/Modules/resource.c
+++ b/Modules/resource.c
@@ -194,12 +194,9 @@ resource_setrlimit(PyObject *self, PyObject *args)
}
static PyObject *
-resource_getpagesize(PyObject *self, PyObject *args)
+resource_getpagesize(PyObject *self, PyObject *unused)
{
long pagesize = 0;
- if (!PyArg_ParseTuple(args, ":getpagesize"))
- return NULL;
-
#if defined(HAVE_GETPAGESIZE)
pagesize = getpagesize();
#elif defined(HAVE_SYSCONF)
@@ -221,7 +218,7 @@ resource_methods[] = {
{"getrusage", resource_getrusage, METH_VARARGS},
{"getrlimit", resource_getrlimit, METH_VARARGS},
{"setrlimit", resource_setrlimit, METH_VARARGS},
- {"getpagesize", resource_getpagesize, METH_VARARGS},
+ {"getpagesize", resource_getpagesize, METH_NOARGS},
{NULL, NULL} /* sentinel */
};
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index 4a04af1..dfa4e85 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -218,7 +218,7 @@ select_select(PyObject *self, PyObject *args)
int n;
/* convert arguments */
- if (!PyArg_ParseTuple(args, "OOO|O:select",
+ if (!PyArg_UnpackTuple(args, "select", 3, 4,
&ifdlist, &ofdlist, &efdlist, &tout))
return NULL;
@@ -415,15 +415,11 @@ PyDoc_STRVAR(poll_unregister_doc,
Remove a file descriptor being tracked by the polling object.");
static PyObject *
-poll_unregister(pollObject *self, PyObject *args)
+poll_unregister(pollObject *self, PyObject *o)
{
- PyObject *o, *key;
+ PyObject *key;
int fd;
- if (!PyArg_ParseTuple(args, "O:unregister", &o)) {
- return NULL;
- }
-
fd = PyObject_AsFileDescriptor( o );
if (fd == -1)
return NULL;
@@ -459,7 +455,7 @@ poll_poll(pollObject *self, PyObject *args)
int timeout = 0, poll_result, i, j;
PyObject *value = NULL, *num = NULL;
- if (!PyArg_ParseTuple(args, "|O:poll", &tout)) {
+ if (!PyArg_UnpackTuple(args, "poll", 0, 1, &tout)) {
return NULL;
}
@@ -548,7 +544,7 @@ static PyMethodDef poll_methods[] = {
{"register", (PyCFunction)poll_register,
METH_VARARGS, poll_register_doc},
{"unregister", (PyCFunction)poll_unregister,
- METH_VARARGS, poll_unregister_doc},
+ METH_O, poll_unregister_doc},
{"poll", (PyCFunction)poll_poll,
METH_VARARGS, poll_poll_doc},
{NULL, NULL} /* sentinel */
@@ -614,16 +610,9 @@ PyDoc_STRVAR(poll_doc,
unregistering file descriptors, and then polling them for I/O events.");
static PyObject *
-select_poll(PyObject *self, PyObject *args)
+select_poll(PyObject *self, PyObject *unused)
{
- pollObject *rv;
-
- if (!PyArg_ParseTuple(args, ":poll"))
- return NULL;
- rv = newPollObject();
- if ( rv == NULL )
- return NULL;
- return (PyObject *)rv;
+ return (PyObject *)newPollObject();
}
#ifdef __APPLE__
@@ -684,7 +673,7 @@ On Windows, only sockets are supported; on Unix, all file descriptors.");
static PyMethodDef select_methods[] = {
{"select", select_select, METH_VARARGS, select_doc},
#if defined(HAVE_POLL)
- {"poll", select_poll, METH_VARARGS, poll_doc},
+ {"poll", select_poll, METH_NOARGS, poll_doc},
#endif /* HAVE_POLL */
{0, 0}, /* sentinel */
};
diff --git a/Modules/sha256module.c b/Modules/sha256module.c
index 7037ca0..0effb07 100644
--- a/Modules/sha256module.c
+++ b/Modules/sha256module.c
@@ -405,14 +405,10 @@ SHA_dealloc(PyObject *ptr)
PyDoc_STRVAR(SHA256_copy__doc__, "Return a copy of the hash object.");
static PyObject *
-SHA256_copy(SHAobject *self, PyObject *args)
+SHA256_copy(SHAobject *self, PyObject *unused)
{
SHAobject *newobj;
- if (!PyArg_ParseTuple(args, ":copy")) {
- return NULL;
- }
-
if (((PyObject*)self)->ob_type == &SHA256type) {
if ( (newobj = newSHA256object())==NULL)
return NULL;
@@ -429,14 +425,11 @@ PyDoc_STRVAR(SHA256_digest__doc__,
"Return the digest value as a string of binary data.");
static PyObject *
-SHA256_digest(SHAobject *self, PyObject *args)
+SHA256_digest(SHAobject *self, PyObject *unused)
{
unsigned char digest[SHA_DIGESTSIZE];
SHAobject temp;
- if (!PyArg_ParseTuple(args, ":digest"))
- return NULL;
-
SHAcopy(self, &temp);
sha_final(digest, &temp);
return PyString_FromStringAndSize((const char *)digest, self->digestsize);
@@ -446,7 +439,7 @@ PyDoc_STRVAR(SHA256_hexdigest__doc__,
"Return the digest value as a string of hexadecimal digits.");
static PyObject *
-SHA256_hexdigest(SHAobject *self, PyObject *args)
+SHA256_hexdigest(SHAobject *self, PyObject *unused)
{
unsigned char digest[SHA_DIGESTSIZE];
SHAobject temp;
@@ -454,9 +447,6 @@ SHA256_hexdigest(SHAobject *self, PyObject *args)
char *hex_digest;
int i, j;
- if (!PyArg_ParseTuple(args, ":hexdigest"))
- return NULL;
-
/* Get the raw (binary) digest value */
SHAcopy(self, &temp);
sha_final(digest, &temp);
@@ -503,9 +493,9 @@ SHA256_update(SHAobject *self, PyObject *args)
}
static PyMethodDef SHA_methods[] = {
- {"copy", (PyCFunction)SHA256_copy, METH_VARARGS, SHA256_copy__doc__},
- {"digest", (PyCFunction)SHA256_digest, METH_VARARGS, SHA256_digest__doc__},
- {"hexdigest", (PyCFunction)SHA256_hexdigest, METH_VARARGS, SHA256_hexdigest__doc__},
+ {"copy", (PyCFunction)SHA256_copy, METH_NOARGS, SHA256_copy__doc__},
+ {"digest", (PyCFunction)SHA256_digest, METH_NOARGS, SHA256_digest__doc__},
+ {"hexdigest", (PyCFunction)SHA256_hexdigest, METH_NOARGS, SHA256_hexdigest__doc__},
{"update", (PyCFunction)SHA256_update, METH_VARARGS, SHA256_update__doc__},
{NULL, NULL} /* sentinel */
};
diff --git a/Modules/sha512module.c b/Modules/sha512module.c
index c5a85ff..9f47b61 100644
--- a/Modules/sha512module.c
+++ b/Modules/sha512module.c
@@ -471,14 +471,10 @@ SHA512_dealloc(PyObject *ptr)
PyDoc_STRVAR(SHA512_copy__doc__, "Return a copy of the hash object.");
static PyObject *
-SHA512_copy(SHAobject *self, PyObject *args)
+SHA512_copy(SHAobject *self, PyObject *unused)
{
SHAobject *newobj;
- if (!PyArg_ParseTuple(args, ":copy")) {
- return NULL;
- }
-
if (((PyObject*)self)->ob_type == &SHA512type) {
if ( (newobj = newSHA512object())==NULL)
return NULL;
@@ -495,14 +491,11 @@ PyDoc_STRVAR(SHA512_digest__doc__,
"Return the digest value as a string of binary data.");
static PyObject *
-SHA512_digest(SHAobject *self, PyObject *args)
+SHA512_digest(SHAobject *self, PyObject *unused)
{
unsigned char digest[SHA_DIGESTSIZE];
SHAobject temp;
- if (!PyArg_ParseTuple(args, ":digest"))
- return NULL;
-
SHAcopy(self, &temp);
sha512_final(digest, &temp);
return PyString_FromStringAndSize((const char *)digest, self->digestsize);
@@ -512,7 +505,7 @@ PyDoc_STRVAR(SHA512_hexdigest__doc__,
"Return the digest value as a string of hexadecimal digits.");
static PyObject *
-SHA512_hexdigest(SHAobject *self, PyObject *args)
+SHA512_hexdigest(SHAobject *self, PyObject *unused)
{
unsigned char digest[SHA_DIGESTSIZE];
SHAobject temp;
@@ -520,9 +513,6 @@ SHA512_hexdigest(SHAobject *self, PyObject *args)
char *hex_digest;
int i, j;
- if (!PyArg_ParseTuple(args, ":hexdigest"))
- return NULL;
-
/* Get the raw (binary) digest value */
SHAcopy(self, &temp);
sha512_final(digest, &temp);
@@ -538,7 +528,7 @@ SHA512_hexdigest(SHAobject *self, PyObject *args)
}
/* Make hex version of the digest */
- for(i=j=0; i<self->digestsize; i++) {
+ for (i=j=0; i<self->digestsize; i++) {
char c;
c = (digest[i] >> 4) & 0xf;
c = (c>9) ? c+'a'-10 : c + '0';
@@ -569,9 +559,9 @@ SHA512_update(SHAobject *self, PyObject *args)
}
static PyMethodDef SHA_methods[] = {
- {"copy", (PyCFunction)SHA512_copy, METH_VARARGS, SHA512_copy__doc__},
- {"digest", (PyCFunction)SHA512_digest, METH_VARARGS, SHA512_digest__doc__},
- {"hexdigest", (PyCFunction)SHA512_hexdigest, METH_VARARGS, SHA512_hexdigest__doc__},
+ {"copy", (PyCFunction)SHA512_copy, METH_NOARGS, SHA512_copy__doc__},
+ {"digest", (PyCFunction)SHA512_digest, METH_NOARGS, SHA512_digest__doc__},
+ {"hexdigest", (PyCFunction)SHA512_hexdigest, METH_NOARGS, SHA512_hexdigest__doc__},
{"update", (PyCFunction)SHA512_update, METH_VARARGS, SHA512_update__doc__},
{NULL, NULL} /* sentinel */
};
diff --git a/Modules/shamodule.c b/Modules/shamodule.c
index 058391d..8d68d16 100644
--- a/Modules/shamodule.c
+++ b/Modules/shamodule.c
@@ -358,13 +358,10 @@ SHA_dealloc(PyObject *ptr)
PyDoc_STRVAR(SHA_copy__doc__, "Return a copy of the hashing object.");
static PyObject *
-SHA_copy(SHAobject *self, PyObject *args)
+SHA_copy(SHAobject *self, PyObject *unused)
{
SHAobject *newobj;
- if (!PyArg_ParseTuple(args, ":copy")) {
- return NULL;
- }
if ( (newobj = newSHAobject())==NULL)
return NULL;
@@ -376,14 +373,11 @@ PyDoc_STRVAR(SHA_digest__doc__,
"Return the digest value as a string of binary data.");
static PyObject *
-SHA_digest(SHAobject *self, PyObject *args)
+SHA_digest(SHAobject *self, PyObject *unused)
{
unsigned char digest[SHA_DIGESTSIZE];
SHAobject temp;
- if (!PyArg_ParseTuple(args, ":digest"))
- return NULL;
-
SHAcopy(self, &temp);
sha_final(digest, &temp);
return PyString_FromStringAndSize((const char *)digest, sizeof(digest));
@@ -393,7 +387,7 @@ PyDoc_STRVAR(SHA_hexdigest__doc__,
"Return the digest value as a string of hexadecimal digits.");
static PyObject *
-SHA_hexdigest(SHAobject *self, PyObject *args)
+SHA_hexdigest(SHAobject *self, PyObject *unused)
{
unsigned char digest[SHA_DIGESTSIZE];
SHAobject temp;
@@ -401,9 +395,6 @@ SHA_hexdigest(SHAobject *self, PyObject *args)
char *hex_digest;
int i, j;
- if (!PyArg_ParseTuple(args, ":hexdigest"))
- return NULL;
-
/* Get the raw (binary) digest value */
SHAcopy(self, &temp);
sha_final(digest, &temp);
@@ -450,9 +441,9 @@ SHA_update(SHAobject *self, PyObject *args)
}
static PyMethodDef SHA_methods[] = {
- {"copy", (PyCFunction)SHA_copy, METH_VARARGS, SHA_copy__doc__},
- {"digest", (PyCFunction)SHA_digest, METH_VARARGS, SHA_digest__doc__},
- {"hexdigest", (PyCFunction)SHA_hexdigest, METH_VARARGS, SHA_hexdigest__doc__},
+ {"copy", (PyCFunction)SHA_copy, METH_NOARGS, SHA_copy__doc__},
+ {"digest", (PyCFunction)SHA_digest, METH_NOARGS, SHA_digest__doc__},
+ {"hexdigest", (PyCFunction)SHA_hexdigest, METH_NOARGS, SHA_hexdigest__doc__},
{"update", (PyCFunction)SHA_update, METH_VARARGS, SHA_update__doc__},
{NULL, NULL} /* sentinel */
};
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 164a5d1..847a194 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -2472,7 +2472,7 @@ sock_recvfrom_buf(PySocketSockObject *s, PyObject *args, PyObject* kwds)
/* Return the number of bytes read and the address. Note that we do
not do anything special here in the case that readlen < recvlen. */
- ret = PyTuple_Pack(2, PyInt_FromLong(readlen), addr);
+ ret = Py_BuildValue("lO", readlen, addr);
finally:
Py_XDECREF(addr);
@@ -2889,12 +2889,10 @@ static PyTypeObject sock_type = {
/*ARGSUSED*/
static PyObject *
-socket_gethostname(PyObject *self, PyObject *args)
+socket_gethostname(PyObject *self, PyObject *unused)
{
char buf[1024];
int res;
- if (!PyArg_ParseTuple(args, ":gethostname"))
- return NULL;
Py_BEGIN_ALLOW_THREADS
res = gethostname(buf, (int) sizeof buf - 1);
Py_END_ALLOW_THREADS
@@ -3986,13 +3984,13 @@ static PyMethodDef socket_methods[] = {
{"gethostbyaddr", socket_gethostbyaddr,
METH_VARARGS, gethostbyaddr_doc},
{"gethostname", socket_gethostname,
- METH_VARARGS, gethostname_doc},
+ METH_NOARGS, gethostname_doc},
{"getservbyname", socket_getservbyname,
METH_VARARGS, getservbyname_doc},
{"getservbyport", socket_getservbyport,
METH_VARARGS, getservbyport_doc},
{"getprotobyname", socket_getprotobyname,
- METH_VARARGS,getprotobyname_doc},
+ METH_VARARGS, getprotobyname_doc},
#ifndef NO_DUP
{"fromfd", socket_fromfd,
METH_VARARGS, fromfd_doc},
@@ -4364,8 +4362,8 @@ init_socket(void)
PyModule_AddIntConstant(m, "BTPROTO_SCO", BTPROTO_SCO);
#endif
PyModule_AddIntConstant(m, "BTPROTO_RFCOMM", BTPROTO_RFCOMM);
- PyModule_AddObject(m, "BDADDR_ANY", Py_BuildValue("s", "00:00:00:00:00:00"));
- PyModule_AddObject(m, "BDADDR_LOCAL", Py_BuildValue("s", "00:00:00:FF:FF:FF"));
+ PyModule_AddStringConstant(m, "BDADDR_ANY", "00:00:00:00:00:00");
+ PyModule_AddStringConstant(m, "BDADDR_LOCAL", "00:00:00:FF:FF:FF");
#endif
#ifdef HAVE_NETPACKET_PACKET_H
diff --git a/Modules/syslogmodule.c b/Modules/syslogmodule.c
index dd35923..4a77916 100644
--- a/Modules/syslogmodule.c
+++ b/Modules/syslogmodule.c
@@ -98,10 +98,8 @@ syslog_syslog(PyObject * self, PyObject * args)
}
static PyObject *
-syslog_closelog(PyObject *self, PyObject *args)
+syslog_closelog(PyObject *self, PyObject *unused)
{
- if (!PyArg_ParseTuple(args, ":closelog"))
- return NULL;
closelog();
Py_XDECREF(S_ident_o);
S_ident_o = NULL;
@@ -146,7 +144,7 @@ syslog_log_upto(PyObject *self, PyObject *args)
static PyMethodDef syslog_methods[] = {
{"openlog", syslog_openlog, METH_VARARGS},
- {"closelog", syslog_closelog, METH_VARARGS},
+ {"closelog", syslog_closelog, METH_NOARGS},
{"syslog", syslog_syslog, METH_VARARGS},
{"setlogmask", syslog_setlogmask, METH_VARARGS},
{"LOG_MASK", syslog_log_mask, METH_VARARGS},
diff --git a/Modules/threadmodule.c b/Modules/threadmodule.c
index 9ac9881..6169658 100644
--- a/Modules/threadmodule.c
+++ b/Modules/threadmodule.c
@@ -456,7 +456,8 @@ thread_PyThread_start_new_thread(PyObject *self, PyObject *fargs)
struct bootstate *boot;
long ident;
- if (!PyArg_ParseTuple(fargs, "OO|O:start_new_thread", &func, &args, &keyw))
+ if (!PyArg_UnpackTuple(fargs, "start_new_thread", 2, 3,
+ &func, &args, &keyw))
return NULL;
if (!PyCallable_Check(func)) {
PyErr_SetString(PyExc_TypeError,
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index e03b7e1..87e543f 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -123,11 +123,9 @@ _PyTime_DoubleToTimet(double x)
}
static PyObject *
-time_time(PyObject *self, PyObject *args)
+time_time(PyObject *self, PyObject *unused)
{
double secs;
- if (!PyArg_ParseTuple(args, ":time"))
- return NULL;
secs = floattime();
if (secs == 0.0) {
PyErr_SetFromErrno(PyExc_IOError);
@@ -153,10 +151,8 @@ Fractions of a second may be present if the system clock provides them.");
#endif
static PyObject *
-time_clock(PyObject *self, PyObject *args)
+time_clock(PyObject *self, PyObject *unused)
{
- if (!PyArg_ParseTuple(args, ":clock"))
- return NULL;
return PyFloat_FromDouble(((double)clock()) / CLOCKS_PER_SEC);
}
#endif /* HAVE_CLOCK */
@@ -164,16 +160,13 @@ time_clock(PyObject *self, PyObject *args)
#if defined(MS_WINDOWS) && !defined(__BORLANDC__)
/* Due to Mark Hammond and Tim Peters */
static PyObject *
-time_clock(PyObject *self, PyObject *args)
+time_clock(PyObject *self, PyObject *unused)
{
static LARGE_INTEGER ctrStart;
static double divisor = 0.0;
LARGE_INTEGER now;
double diff;
- if (!PyArg_ParseTuple(args, ":clock"))
- return NULL;
-
if (divisor == 0.0) {
LARGE_INTEGER freq;
QueryPerformanceCounter(&ctrStart);
@@ -509,7 +502,7 @@ time_asctime(PyObject *self, PyObject *args)
PyObject *tup = NULL;
struct tm buf;
char *p;
- if (!PyArg_ParseTuple(args, "|O:asctime", &tup))
+ if (!PyArg_UnpackTuple(args, "asctime", 0, 1, &tup))
return NULL;
if (tup == NULL) {
time_t tt = time(NULL);
@@ -536,7 +529,7 @@ time_ctime(PyObject *self, PyObject *args)
time_t tt;
char *p;
- if (!PyArg_ParseTuple(args, "|O:ctime", &ot))
+ if (!PyArg_UnpackTuple(args, "ctime", 0, 1, &ot))
return NULL;
if (ot == NULL || ot == Py_None)
tt = time(NULL);
@@ -567,13 +560,10 @@ not present, current time as returned by localtime() is used.");
#ifdef HAVE_MKTIME
static PyObject *
-time_mktime(PyObject *self, PyObject *args)
+time_mktime(PyObject *self, PyObject *tup)
{
- PyObject *tup;
struct tm buf;
time_t tt;
- if (!PyArg_ParseTuple(args, "O:mktime", &tup))
- return NULL;
tt = time(&tt);
buf = *localtime(&tt);
if (!gettmarg(tup, &buf))
@@ -597,13 +587,10 @@ Convert a time tuple in local time to seconds since the Epoch.");
void inittimezone(PyObject *module);
static PyObject *
-time_tzset(PyObject *self, PyObject *args)
+time_tzset(PyObject *self, PyObject *unused)
{
PyObject* m;
- if (!PyArg_ParseTuple(args, ":tzset"))
- return NULL;
-
m = PyImport_ImportModule("time");
if (m == NULL) {
return NULL;
@@ -722,9 +709,9 @@ void inittimezone(PyObject *m) {
static PyMethodDef time_methods[] = {
- {"time", time_time, METH_VARARGS, time_doc},
+ {"time", time_time, METH_NOARGS, time_doc},
#ifdef HAVE_CLOCK
- {"clock", time_clock, METH_VARARGS, clock_doc},
+ {"clock", time_clock, METH_NOARGS, clock_doc},
#endif
{"sleep", time_sleep, METH_VARARGS, sleep_doc},
{"gmtime", time_gmtime, METH_VARARGS, gmtime_doc},
@@ -732,14 +719,14 @@ static PyMethodDef time_methods[] = {
{"asctime", time_asctime, METH_VARARGS, asctime_doc},
{"ctime", time_ctime, METH_VARARGS, ctime_doc},
#ifdef HAVE_MKTIME
- {"mktime", time_mktime, METH_VARARGS, mktime_doc},
+ {"mktime", time_mktime, METH_O, mktime_doc},
#endif
#ifdef HAVE_STRFTIME
{"strftime", time_strftime, METH_VARARGS, strftime_doc},
#endif
{"strptime", time_strptime, METH_VARARGS, strptime_doc},
#ifdef HAVE_WORKING_TZSET
- {"tzset", time_tzset, METH_VARARGS, tzset_doc},
+ {"tzset", time_tzset, METH_NOARGS, tzset_doc},
#endif
{NULL, NULL} /* sentinel */
};