@@ -1012,8 +1012,6 @@ bytearray_richcompare(PyObject *self, PyObject *other, int op)
10121012{
10131013 Py_ssize_t self_size , other_size ;
10141014 Py_buffer self_bytes , other_bytes ;
1015- PyObject * res ;
1016- Py_ssize_t minsize ;
10171015 int cmp , rc ;
10181016
10191017 /* Bytes can be compared to anything that supports the (binary)
@@ -1049,38 +1047,25 @@ bytearray_richcompare(PyObject *self, PyObject *other, int op)
10491047
10501048 if (self_size != other_size && (op == Py_EQ || op == Py_NE )) {
10511049 /* Shortcut: if the lengths differ, the objects differ */
1052- cmp = (op == Py_NE );
1050+ PyBuffer_Release (& self_bytes );
1051+ PyBuffer_Release (& other_bytes );
1052+ return PyBool_FromLong ((op == Py_NE ));
10531053 }
10541054 else {
1055- minsize = self_size ;
1056- if (other_size < minsize )
1057- minsize = other_size ;
1058-
1059- cmp = memcmp (self_bytes .buf , other_bytes .buf , minsize );
1055+ cmp = memcmp (self_bytes .buf , other_bytes .buf ,
1056+ Py_MIN (self_size , other_size ));
10601057 /* In ISO C, memcmp() guarantees to use unsigned bytes! */
10611058
1062- if (cmp == 0 ) {
1063- if (self_size < other_size )
1064- cmp = -1 ;
1065- else if (self_size > other_size )
1066- cmp = 1 ;
1067- }
1059+ PyBuffer_Release (& self_bytes );
1060+ PyBuffer_Release (& other_bytes );
10681061
1069- switch (op ) {
1070- case Py_LT : cmp = cmp < 0 ; break ;
1071- case Py_LE : cmp = cmp <= 0 ; break ;
1072- case Py_EQ : cmp = cmp == 0 ; break ;
1073- case Py_NE : cmp = cmp != 0 ; break ;
1074- case Py_GT : cmp = cmp > 0 ; break ;
1075- case Py_GE : cmp = cmp >= 0 ; break ;
1062+ if (cmp != 0 ) {
1063+ Py_RETURN_RICHCOMPARE (cmp , 0 , op );
10761064 }
1065+
1066+ Py_RETURN_RICHCOMPARE (self_size , other_size , op );
10771067 }
10781068
1079- res = cmp ? Py_True : Py_False ;
1080- PyBuffer_Release (& self_bytes );
1081- PyBuffer_Release (& other_bytes );
1082- Py_INCREF (res );
1083- return res ;
10841069}
10851070
10861071static void
0 commit comments