@@ -991,8 +991,6 @@ bytearray_richcompare(PyObject *self, PyObject *other, int op)
991991{
992992 Py_ssize_t self_size , other_size ;
993993 Py_buffer self_bytes , other_bytes ;
994- PyObject * res ;
995- Py_ssize_t minsize ;
996994 int cmp , rc ;
997995
998996 /* Bytes can be compared to anything that supports the (binary)
@@ -1028,38 +1026,25 @@ bytearray_richcompare(PyObject *self, PyObject *other, int op)
10281026
10291027 if (self_size != other_size && (op == Py_EQ || op == Py_NE )) {
10301028 /* Shortcut: if the lengths differ, the objects differ */
1031- cmp = (op == Py_NE );
1029+ PyBuffer_Release (& self_bytes );
1030+ PyBuffer_Release (& other_bytes );
1031+ return PyBool_FromLong ((op == Py_NE ));
10321032 }
10331033 else {
1034- minsize = self_size ;
1035- if (other_size < minsize )
1036- minsize = other_size ;
1037-
1038- cmp = memcmp (self_bytes .buf , other_bytes .buf , minsize );
1034+ cmp = memcmp (self_bytes .buf , other_bytes .buf ,
1035+ Py_MIN (self_size , other_size ));
10391036 /* In ISO C, memcmp() guarantees to use unsigned bytes! */
10401037
1041- if (cmp == 0 ) {
1042- if (self_size < other_size )
1043- cmp = -1 ;
1044- else if (self_size > other_size )
1045- cmp = 1 ;
1046- }
1038+ PyBuffer_Release (& self_bytes );
1039+ PyBuffer_Release (& other_bytes );
10471040
1048- switch (op ) {
1049- case Py_LT : cmp = cmp < 0 ; break ;
1050- case Py_LE : cmp = cmp <= 0 ; break ;
1051- case Py_EQ : cmp = cmp == 0 ; break ;
1052- case Py_NE : cmp = cmp != 0 ; break ;
1053- case Py_GT : cmp = cmp > 0 ; break ;
1054- case Py_GE : cmp = cmp >= 0 ; break ;
1041+ if (cmp != 0 ) {
1042+ Py_RETURN_RICHCOMPARE (cmp , 0 , op );
10551043 }
1044+
1045+ Py_RETURN_RICHCOMPARE (self_size , other_size , op );
10561046 }
10571047
1058- res = cmp ? Py_True : Py_False ;
1059- PyBuffer_Release (& self_bytes );
1060- PyBuffer_Release (& other_bytes );
1061- Py_INCREF (res );
1062- return res ;
10631048}
10641049
10651050static void
0 commit comments