durusmail: quixote-users: htmltext formatted long int inconsistency
htmltext formatted long int inconsistency
2004-06-03
htmltext formatted long int inconsistency
Neil Schemenauer
2004-06-03
On Wed, Jun 02, 2004 at 11:26:30PM -0400, Adam Preble wrote:
> It seems to me that in 1.0b2 there's an inconsistency between
> _c_htmltext and _py_htmltext when using the mod (%) operator to format
> in a long integer.  Namely, the _py_htmltext version handles it, while
> _c_htmltext does not.

Good catch.  The fix is attached.

  Neil


--- src/_c_htmltext.c   (revision 24361)
+++ src/_c_htmltext.c   (working copy)
@@ -130,6 +130,14 @@
 quote_wrapper_new(PyObject *o)
 {
        QuoteWrapperObject *self;
+       if (htmltextObject_Check(o) ||
+           PyInt_Check(o) ||
+           PyFloat_Check(o) ||
+           PyLong_Check(o)) {
+               /* no need for wrapper */
+               Py_INCREF(o);
+               return o;
+       }
        self = PyObject_New(QuoteWrapperObject, &QuoteWrapper_Type);
        if (self == NULL)
                return NULL;
@@ -148,48 +156,28 @@
 static PyObject *
 quote_wrapper_repr(QuoteWrapperObject *self)
 {
+       PyObject *qs;
        PyObject *s = PyObject_Repr(self->obj);
        if (s == NULL)
                return NULL;
-       if (htmltextObject_Check(self->obj)) {
-               return s;
-       }
-       else {
-               PyObject *qs = escape_string(s);
-               Py_DECREF(s);
-               return qs;
-       }
+       qs = escape_string(s);
+       Py_DECREF(s);
+       return qs;
 }

 static PyObject *
 quote_wrapper_str(QuoteWrapperObject *self)
 {
+       PyObject *qs;
        PyObject *s = PyObject_Str(self->obj);
        if (s == NULL)
                return NULL;
-       if (htmltextObject_Check(self->obj)) {
-               return s;
-       }
-       else {
-               PyObject *qs = escape_string(s);
-               Py_DECREF(s);
-               return qs;
-       }
+       qs = escape_string(s);
+       Py_DECREF(s);
+       return qs;
 }

 static PyObject *
-quote_wrapper_int(QuoteWrapperObject *self)
-{
-       return PyNumber_Int(self->obj);
-}
-
-static PyObject *
-quote_wrapper_float(QuoteWrapperObject *self)
-{
-       return PyNumber_Float(self->obj);
-}
-
-static PyObject *
 dict_wrapper_new(PyObject *o)
 {
        DictWrapperObject *self;
@@ -813,9 +801,9 @@
        0, /*nb_xor*/
        0, /*nb_or*/
        0, /*nb_coerce*/
-       (unaryfunc)quote_wrapper_int, /*nb_int*/
+       0, /*nb_int*/
        0, /*nb_long*/
-       (unaryfunc)quote_wrapper_float, /*nb_float*/
+       0, /*nb_float*/
 };

 static PyTypeObject QuoteWrapper_Type = {


reply