[PATCH] Fix inline strncat/strncmp on x86
Andreas Schwab
schwab@redhat.com
Mon Jul 25 12:48:00 GMT 2011
2011-07-25 Andreas Schwab <schwab@redhat.com>
* sysdeps/i386/i486/bits/string.h (__strncat_g): Correctly handle
__n bigger than INT_MAX+1.
(__strncmp_g): Likewise.
---
sysdeps/i386/i486/bits/string.h | 12 ++++++------
1 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/sysdeps/i386/i486/bits/string.h b/sysdeps/i386/i486/bits/string.h
index 9f05c7e..1f4d837 100644
--- a/sysdeps/i386/i486/bits/string.h
+++ b/sysdeps/i386/i486/bits/string.h
@@ -1058,8 +1058,8 @@ __strncat_g (char *__dest, __const char __src[], size_t __n)
"movl %4, %3\n\t"
"decl %1\n\t"
"1:\n\t"
- "decl %3\n\t"
- "js 2f\n\t"
+ "subl $1,%3\n\t"
+ "jc 2f\n\t"
"movb (%2),%b0\n\t"
"movsb\n\t"
"testb %b0,%b0\n\t"
@@ -1078,8 +1078,8 @@ __strncat_g (char *__dest, __const char __src[], size_t __n)
"leal 1(%1),%1\n\t"
"jne 1b\n"
"2:\n\t"
- "decl %3\n\t"
- "js 3f\n\t"
+ "subl $1,%3\n\t"
+ "jc 3f\n\t"
"movb (%2),%b0\n\t"
"leal 1(%2),%2\n\t"
"movb %b0,(%1)\n\t"
@@ -1219,8 +1219,8 @@ __strncmp_g (__const char *__s1, __const char *__s2, size_t __n)
register int __res;
__asm__ __volatile__
("1:\n\t"
- "decl %3\n\t"
- "js 2f\n\t"
+ "subl $1,%3\n\t"
+ "jc 2f\n\t"
"movb (%1),%b0\n\t"
"incl %1\n\t"
"cmpb %b0,(%2)\n\t"
--
1.7.6
--
Andreas Schwab, schwab@redhat.com
GPG Key fingerprint = D4E8 DBE3 3813 BB5D FA84 5EC7 45C6 250E 6F00 984E
"And now for something completely different."
More information about the Libc-hacker
mailing list