Issue #9425: Create Py_UNICODE_strncmp() function
The code is based on strncmp() of the libiberty library,
function in the public domain.
diff --git a/Include/unicodeobject.h b/Include/unicodeobject.h
index cee75cc..7ae6506 100644
--- a/Include/unicodeobject.h
+++ b/Include/unicodeobject.h
@@ -1613,23 +1613,38 @@
Py_UNICODE ch /* Unicode character */
);
-PyAPI_FUNC(size_t) Py_UNICODE_strlen(const Py_UNICODE *u);
+PyAPI_FUNC(size_t) Py_UNICODE_strlen(
+ const Py_UNICODE *u
+ );
PyAPI_FUNC(Py_UNICODE*) Py_UNICODE_strcpy(
- Py_UNICODE *s1, const Py_UNICODE *s2);
+ Py_UNICODE *s1,
+ const Py_UNICODE *s2);
PyAPI_FUNC(Py_UNICODE*) Py_UNICODE_strncpy(
- Py_UNICODE *s1, const Py_UNICODE *s2, size_t n);
+ Py_UNICODE *s1,
+ const Py_UNICODE *s2,
+ size_t n);
PyAPI_FUNC(int) Py_UNICODE_strcmp(
- const Py_UNICODE *s1, const Py_UNICODE *s2);
+ const Py_UNICODE *s1,
+ const Py_UNICODE *s2
+ );
+
+PyAPI_FUNC(int) Py_UNICODE_strncmp(
+ const Py_UNICODE *s1,
+ const Py_UNICODE *s2,
+ size_t n
+ );
PyAPI_FUNC(Py_UNICODE*) Py_UNICODE_strchr(
- const Py_UNICODE *s, Py_UNICODE c
+ const Py_UNICODE *s,
+ Py_UNICODE c
);
PyAPI_FUNC(Py_UNICODE*) Py_UNICODE_strrchr(
- const Py_UNICODE *s, Py_UNICODE c
+ const Py_UNICODE *s,
+ Py_UNICODE c
);
#ifdef __cplusplus
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 676c693..9fd342b 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -9986,6 +9986,23 @@
return 0;
}
+int
+Py_UNICODE_strncmp(const Py_UNICODE *s1, const Py_UNICODE *s2, size_t n)
+{
+ register Py_UNICODE u1, u2;
+ for (; n != 0; n--) {
+ u1 = *s1;
+ u2 = *s2;
+ if (u1 != u2)
+ return (u1 < u2) ? -1 : +1;
+ if (u1 == '\0')
+ return 0;
+ s1++;
+ s2++;
+ }
+ return 0;
+}
+
Py_UNICODE*
Py_UNICODE_strchr(const Py_UNICODE *s, Py_UNICODE c)
{