summaryrefslogtreecommitdiffstats
path: root/Objects/stringlib/eq.h
diff options
context:
space:
mode:
Diffstat (limited to 'Objects/stringlib/eq.h')
-rw-r--r--Objects/stringlib/eq.h16
1 files changed, 10 insertions, 6 deletions
diff --git a/Objects/stringlib/eq.h b/Objects/stringlib/eq.h
index 3e7f5e8..3e5f510 100644
--- a/Objects/stringlib/eq.h
+++ b/Objects/stringlib/eq.h
@@ -9,13 +9,17 @@ unicode_eq(PyObject *aa, PyObject *bb)
register PyUnicodeObject *a = (PyUnicodeObject *)aa;
register PyUnicodeObject *b = (PyUnicodeObject *)bb;
- if (a->length != b->length)
+ if (PyUnicode_READY(a) == -1 || PyUnicode_READY(b) == -1) {
+ assert(0 && "unicode_eq ready fail");
return 0;
- if (a->length == 0)
- return 1;
- if (a->str[0] != b->str[0])
+ }
+
+ if (PyUnicode_GET_LENGTH(a) != PyUnicode_GET_LENGTH(b))
return 0;
- if (a->length == 1)
+ if (PyUnicode_GET_LENGTH(a) == 0)
return 1;
- return memcmp(a->str, b->str, a->length * sizeof(Py_UNICODE)) == 0;
+ if (PyUnicode_KIND(a) != PyUnicode_KIND(b))
+ return 0;
+ return memcmp(PyUnicode_1BYTE_DATA(a), PyUnicode_1BYTE_DATA(b),
+ PyUnicode_GET_LENGTH(a) * PyUnicode_KIND(a)) == 0;
}