[Rpm-maint] [PATCH 02/15] Generalize access to ob_type so that they work with both Python 2.* and Python 3.*

David Malcolm dmalcolm at redhat.com
Thu Oct 15 19:14:56 UTC 2009


Python 2's various object structs use macros to implement common fields at the top of each
struct.

Python 3's objects instead embed a PyObject struct as the first member within the more refined
object structs.

Use the Py_TYPE() macro when accessing ob_type in order to encapsulate this difference.
---
 python/header-py.c     |    2 +-
 python/rpmds-py.c      |    4 ++--
 python/rpmfd-py.c      |    2 +-
 python/rpmfi-py.c      |    2 +-
 python/rpmkeyring-py.c |    4 ++--
 python/rpmmi-py.c      |    2 +-
 python/rpmps-py.c      |    2 +-
 python/rpmtd-py.c      |    2 +-
 python/rpmts-py.c      |    2 +-
 python/spec-py.c       |    2 +-
 10 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/python/header-py.c b/python/header-py.c
index 5ca920e..bbf698e 100644
--- a/python/header-py.c
+++ b/python/header-py.c
@@ -394,7 +394,7 @@ static PyObject *hdr_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds)
 static void hdr_dealloc(hdrObject * s)
 {
     if (s->h) headerFree(s->h);
-    s->ob_type->tp_free((PyObject *)s);
+    Py_TYPE(s)->tp_free((PyObject *)s);
 }
 
 static PyObject * hdr_iternext(hdrObject *s)
diff --git a/python/rpmds-py.c b/python/rpmds-py.c
index 71ef93f..8938cc7 100644
--- a/python/rpmds-py.c
+++ b/python/rpmds-py.c
@@ -199,7 +199,7 @@ rpmds_iternext(rpmdsObject * s)
 	rpmTag tagN = rpmdsTagN(s->ds);
 	rpmsenseFlags Flags = rpmdsFlags(s->ds);
 
-	result = rpmds_Wrap(s->ob_type, rpmdsSingle(tagN, N, EVR, Flags) );
+	result = rpmds_Wrap(Py_TYPE(s), rpmdsSingle(tagN, N, EVR, Flags) );
     } else
 	s->active = 0;
 
@@ -381,7 +381,7 @@ static void
 rpmds_dealloc(rpmdsObject * s)
 {
     s->ds = rpmdsFree(s->ds);
-    s->ob_type->tp_free((PyObject *)s);
+    Py_TYPE(s)->tp_free((PyObject *)s);
 }
 
 static Py_ssize_t rpmds_length(rpmdsObject * s)
diff --git a/python/rpmfd-py.c b/python/rpmfd-py.c
index 8b4f2b1..556357c 100644
--- a/python/rpmfd-py.c
+++ b/python/rpmfd-py.c
@@ -96,7 +96,7 @@ static void rpmfd_dealloc(rpmfdObject *s)
 {
     PyObject *res = do_close(s);
     Py_XDECREF(res);
-    s->ob_type->tp_free((PyObject *)s);
+    Py_TYPE(s)->tp_free((PyObject *)s);
 }
 
 static PyObject *rpmfd_fileno(rpmfdObject *s)
diff --git a/python/rpmfi-py.c b/python/rpmfi-py.c
index 5894ef4..5484a1b 100644
--- a/python/rpmfi-py.c
+++ b/python/rpmfi-py.c
@@ -258,7 +258,7 @@ static void
 rpmfi_dealloc(rpmfiObject * s)
 {
     s->fi = rpmfiFree(s->fi);
-    s->ob_type->tp_free((PyObject *)s);
+    Py_TYPE(s)->tp_free((PyObject *)s);
 }
 
 static int
diff --git a/python/rpmkeyring-py.c b/python/rpmkeyring-py.c
index 7b57fdb..00be981 100644
--- a/python/rpmkeyring-py.c
+++ b/python/rpmkeyring-py.c
@@ -11,7 +11,7 @@ struct rpmPubkeyObject_s {
 static void rpmPubkey_dealloc(rpmPubkeyObject * s)
 {
     s->pubkey = rpmPubkeyFree(s->pubkey);
-    s->ob_type->tp_free((PyObject *)s);
+    Py_TYPE(s)->tp_free((PyObject *)s);
 }
 
 static PyObject *rpmPubkey_new(PyTypeObject *subtype, 
@@ -103,7 +103,7 @@ struct rpmKeyringObject_s {
 static void rpmKeyring_dealloc(rpmKeyringObject * s)
 {
     rpmKeyringFree(s->keyring);
-    s->ob_type->tp_free((PyObject *)s);
+    Py_TYPE(s)->tp_free((PyObject *)s);
 }
 
 static PyObject *rpmKeyring_new(PyTypeObject *subtype, 
diff --git a/python/rpmmi-py.c b/python/rpmmi-py.c
index b3cd6d2..0a87153 100644
--- a/python/rpmmi-py.c
+++ b/python/rpmmi-py.c
@@ -129,7 +129,7 @@ static void rpmmi_dealloc(rpmmiObject * s)
 {
     s->mi = rpmdbFreeIterator(s->mi);
     Py_DECREF(s->ref);
-    s->ob_type->tp_free((PyObject *)s);
+    Py_TYPE(s)->tp_free((PyObject *)s);
 }
 
 static Py_ssize_t rpmmi_length(rpmmiObject * s)
diff --git a/python/rpmps-py.c b/python/rpmps-py.c
index dae50e6..1b08e2f 100644
--- a/python/rpmps-py.c
+++ b/python/rpmps-py.c
@@ -175,7 +175,7 @@ static void
 rpmps_dealloc(rpmpsObject * s)
 {
     s->ps = rpmpsFree(s->ps);
-    s->ob_type->tp_free((PyObject *)s);
+    Py_TYPE(s)->tp_free((PyObject *)s);
 }
 
 static int
diff --git a/python/rpmtd-py.c b/python/rpmtd-py.c
index 1911e25..aae4b27 100644
--- a/python/rpmtd-py.c
+++ b/python/rpmtd-py.c
@@ -117,7 +117,7 @@ static PyObject *rpmtd_new(PyTypeObject * subtype, PyObject *args, PyObject *kwd
 static void rpmtd_dealloc(rpmtdObject * s)
 {
     rpmtdFreeData(&(s->td));
-    s->ob_type->tp_free((PyObject *)s);
+    Py_TYPE(s)->tp_free((PyObject *)s);
 }
 
 static int rpmtd_length(rpmtdObject *s)
diff --git a/python/rpmts-py.c b/python/rpmts-py.c
index 0ac6a5c..ad70853 100644
--- a/python/rpmts-py.c
+++ b/python/rpmts-py.c
@@ -678,7 +678,7 @@ static void rpmts_dealloc(rpmtsObject * s)
     s->ts = rpmtsFree(s->ts);
 
     if (s->scriptFd) Fclose(s->scriptFd);
-    s->ob_type->tp_free((PyObject *)s);
+    Py_TYPE(s)->tp_free((PyObject *)s);
 }
 
 static PyObject * rpmts_new(PyTypeObject * subtype, PyObject *args, PyObject *kwds)
diff --git a/python/spec-py.c b/python/spec-py.c
index 409db0d..fb362f7 100644
--- a/python/spec-py.c
+++ b/python/spec-py.c
@@ -40,7 +40,7 @@ spec_dealloc(specObject * s)
     if (s->spec) {
 	s->spec=freeSpec(s->spec);
     }
-    s->ob_type->tp_free((PyObject *)s);
+    Py_TYPE(s)->tp_free((PyObject *)s);
 }
 
 /* XXX TODO return something sensible if spec exists but component (eg %clean)
-- 
1.6.2.5



More information about the Rpm-maint mailing list