Browse Source

fix string functions to not treat the size_t as ssize_t

Mike Frysinger 19 years ago
parent
commit
977a560255
1 changed files with 13 additions and 6 deletions
  1. 13 6
      libc/string/i386/string.c

+ 13 - 6
libc/string/i386/string.c

@@ -48,12 +48,15 @@ char * strncpy(char * dest, const char * src, size_t count)
 {
     int d0, d1, d2, d3;
     __asm__ __volatile__(
-	    "1:\tdecl %2\n\t"
-	    "js 2f\n\t"
+	    "incl %2\n"
+	    "1:\n"
+	    "decl %2\n"
+	    "jz 2f\n"
 	    "lodsb\n\t"
 	    "stosb\n\t"
 	    "testb %%al,%%al\n\t"
 	    "jne 1b\n\t"
+	    "decl %2\n"
 	    "rep\n\t"
 	    "stosb\n"
 	    "2:"
@@ -93,14 +96,17 @@ char *strncat(char * dest,
 	    "scasb\n\t"
 	    "decl %1\n\t"
 	    "movl %8,%3\n"
+	    "incl %3\n"
 	    "1:\tdecl %3\n\t"
-	    "js 2f\n\t"
+	    "jz 2f\n"
 	    "lodsb\n\t"
 	    "stosb\n\t"
 	    "testb %%al,%%al\n\t"
 	    "jne 1b\n"
+	    "jmp 3f\n"
 	    "2:\txorl %2,%2\n\t"
-	    "stosb"
+	    "stosb\n"
+	    "3:"
 	    : "=&S" (d0), "=&D" (d1), "=&a" (d2), "=&c" (d3)
 	    : "0" (src),"1" (dest),"2" (0),"3" (0xffffffff), "g" (count)
 	    : "memory");
@@ -141,8 +147,9 @@ int strncmp(const char *cs, const char *ct, size_t count)
     register int __res;
     int d0, d1, d2;
     __asm__ __volatile__(
+	    "incl %3\n"
 	    "1:\tdecl %3\n\t"
-	    "js 2f\n\t"
+	    "jz 2f\n"
 	    "lodsb\n\t"
 	    "scasb\n\t"
 	    "jne 3f\n\t"
@@ -226,12 +233,12 @@ size_t strnlen(const char *s, size_t count)
     register int __res;
     __asm__ __volatile__(
 	    "movl %2,%0\n\t"
+	    "incl %1\n"
 	    "jmp 2f\n"
 	    "1:\tcmpb $0,(%0)\n\t"
 	    "je 3f\n\t"
 	    "incl %0\n"
 	    "2:\tdecl %1\n\t"
-	    "cmpl $-1,%1\n\t"
 	    "jne 1b\n"
 	    "3:\tsubl %2,%0"
 	    :"=a" (__res), "=&d" (d0)