chiark / gitweb /
key.c: Reformat the rest of the `KeyError' constructor.
[catacomb-python] / key.c
diff --git a/key.c b/key.c
index 499503504d47a49adbd1f5962a15f7d25c067c30..99c25aba5d1f688365c12c2065001be0372abf9a 100644 (file)
--- a/key.c
+++ b/key.c
@@ -36,23 +36,27 @@ static PyObject *keyfilebrokenexc;
 
 static PyObject *kxmeth___init__(PyObject *me, PyObject *arg)
 {
-  int err;
+  long err;
   PyObject *x = 0;
   Py_ssize_t n;
 
   n = PyTuple_GET_SIZE(arg);
-  if (!PyArg_ParseTuple(arg, "Oi:__init__", &me, &err) ||
-      (x = PyInt_FromLong(err)) == 0 ||
-      PyObject_SetAttrString(me, "err", x))
-    goto end;
+  if (n < 2) TYERR("__init__() takes at least two arguments");
+  me = PyTuple_GET_ITEM(arg, 0);
+  err = PyInt_AsLong(PyTuple_GET_ITEM(arg, 1));
+  if (err == -1 && PyErr_Occurred()) goto end;
+  if (INT_MIN > err || err > INT_MAX) OVFERR("error code out of range");
+
+  x = PyInt_FromLong(err); if (!x) goto end;
+  if (PyObject_SetAttrString(me, "err", x)) goto end;
   Py_DECREF(x); x = 0;
-  if ((x = PyString_FromString(key_strerror(err))) == 0 ||
-      PyObject_SetAttrString(me, "errstring", x))
-    goto end;
+
+  x = PyString_FromString(key_strerror(err)); if (!x) goto end;
+  if (PyObject_SetAttrString(me, "errstring", x)) goto end;
   Py_DECREF(x); x = 0;
-  if ((x = PyTuple_GetSlice(arg, 1, n)) == 0 ||
-      PyObject_SetAttrString(me, "args", x))
-    goto end;
+
+  x = PyTuple_GetSlice(arg, 1, n); if (!x) goto end;
+  if (PyObject_SetAttrString(me, "args", x)) goto end;
   Py_DECREF(x); x = 0;
   RETURN_NONE;