diff options
Diffstat (limited to 'Objects/stringlib/eq.h')
| -rw-r--r-- | Objects/stringlib/eq.h | 16 |
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; } |
