chiark / gitweb /
key: Fixing of expiry and deletion time properties.
authorMark Wooding <mdw@distorted.org.uk>
Tue, 7 Mar 2006 14:38:43 +0000 (14:38 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Tue, 7 Mar 2006 14:38:43 +0000 (14:38 +0000)
Allow them to be modified.  Return the correct value for keys which
never expire or are deleted.

key.c

diff --git a/key.c b/key.c
index c9accd3fd996b87f794874af9f4b355b84e4c58a..57d01f98f93d557d2f6153a3aedd28a13c85e82d 100644 (file)
--- a/key.c
+++ b/key.c
@@ -1469,14 +1469,48 @@ static PyObject *kget_file(PyObject *me, void *hunoz)
 static PyObject *kget_type(PyObject *me, void *hunoz)
   { return (PyString_FromString(KEY_K(me)->type)); }
 static PyObject *kget_exptime(PyObject *me, void *hunoz)
-  { return (PyInt_FromLong(KEY_K(me)->exp)); }
+  { return (getulong(KEY_K(me)->exp)); }
 static PyObject *kget_deltime(PyObject *me, void *hunoz)
-  { return (PyInt_FromLong(KEY_K(me)->del)); }
+  { return (getulong(KEY_K(me)->del)); }
 static PyObject *kget_expiredp(PyObject *me, void *hunoz)
   { return (getbool(key_expired(KEY_K(me)))); }
 static PyObject *kget_attr(PyObject *me, void *hunoz)
   { return (keyattrs_make(me)); }
 
+static int kset_exptime(PyObject *me, PyObject *x, void *hunoz)
+{
+  key *k = KEY_K(me);
+  unsigned long et;
+
+  if ((et = PyLong_AsUnsignedLong(x)) == (unsigned long)-1 && PyErr_Occurred())
+    goto end;
+  if (!(KEY_KF(me)->f & KF_WRITE))
+    KEYERR(KERR_READONLY);
+  k->exp = et;
+  KEY_KF(me)->f |= KF_MODIFIED;
+  return (0);
+end:
+  return (-1);
+}
+
+static int kset_deltime(PyObject *me, PyObject *x, void *hunoz)
+{
+  key *k = KEY_K(me);
+  unsigned long dt;
+
+  if ((dt = PyLong_AsUnsignedLong(x)) == (unsigned long)-1 && PyErr_Occurred())
+    goto end;
+  if (dt == KEXP_FOREVER && k->exp != KEXP_FOREVER)
+    VALERR("key will eventually expire");
+  if (!(KEY_KF(me)->f & KF_WRITE))
+    KEYERR(KERR_READONLY);
+  k->del = dt;
+  KEY_KF(me)->f |= KF_MODIFIED;
+  return (0);
+end:
+  return (-1);
+}
+
 static PyObject *kget_data(PyObject *me, void *hunoz)
 {
   key_data *kd = KEY_K(me)->k;
@@ -1560,8 +1594,8 @@ static PyGetSetDef key_pygetset[] = {
   GET  (id,            "KEY.id -> ID")
   GETSET(tag,          "KEY.tag -> TAG")
   GET  (type,          "KEY.type -> TYPE")
-  GET  (exptime,       "KEY.exptime -> TIME")
-  GET  (deltime,       "KEY.deltime -> TIME")
+  GETSET(exptime,      "KEY.exptime -> TIME")
+  GETSET(deltime,      "KEY.deltime -> TIME")
   GET  (expiredp,      "KEY.expiredp -> BOOL")
   GET  (attr,          "KEY.attr -> ATTRIBUTES")
   GETSET(data,         "KEY.data -> KD")