]> granicus.if.org Git - python/commitdiff
Issue #9425: Create Py_UNICODE_strncmp() function
authorVictor Stinner <victor.stinner@haypocalc.com>
Mon, 16 Aug 2010 22:03:11 +0000 (22:03 +0000)
committerVictor Stinner <victor.stinner@haypocalc.com>
Mon, 16 Aug 2010 22:03:11 +0000 (22:03 +0000)
The code is based on strncmp() of the libiberty library,
function in the public domain.

Include/unicodeobject.h
Objects/unicodeobject.c

index cee75cc8a1f398841251a980d74c93523ec161b9..7ae6506ed160dc0443248bfd7ee82634c868d83e 100644 (file)
@@ -1613,23 +1613,38 @@ PyAPI_FUNC(int) _PyUnicode_IsAlpha(
     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
index 676c6930401fd2e060798a8ac363a04f789e6664..9fd342bf0dec8329a575a6b40cf56f863adc3b1f 100644 (file)
@@ -9986,6 +9986,23 @@ Py_UNICODE_strcmp(const Py_UNICODE *s1, const Py_UNICODE *s2)
     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)
 {