Browse Source

+Added checking for nil on most functions.

michael 26 years ago
parent
commit
7e68180e14
1 changed files with 27 additions and 3 deletions
  1. 27 3
      rtl/i386/strings.inc

+ 27 - 3
rtl/i386/strings.inc

@@ -21,6 +21,8 @@ function strcopy(dest,source : pchar) : pchar;assembler;
 asm
 asm
         cld
         cld
         movl    source,%edi
         movl    source,%edi
+        orl     %edi,%edi
+        jz      .LStrCopyNil
         movl    $0xffffffff,%ecx
         movl    $0xffffffff,%ecx
         xorb    %al,%al
         xorb    %al,%al
         repne
         repne
@@ -36,6 +38,7 @@ asm
         andl    $3,%ecx
         andl    $3,%ecx
         rep
         rep
         movsb
         movsb
+.LStrCopyNil:        
         movl    dest,%eax
         movl    dest,%eax
 end;
 end;
 
 
@@ -90,26 +93,33 @@ end ['EAX','ECX','ESI','EDI'];
 function strlen(p : pchar) : longint;assembler;
 function strlen(p : pchar) : longint;assembler;
 asm
 asm
         cld
         cld
+        xorl    %eax,%eax
         movl    p,%edi
         movl    p,%edi
+        orl     %edi,%edi
+        jz      .LNil
         movl    $0xffffffff,%ecx
         movl    $0xffffffff,%ecx
-        xorl    %eax,%eax
         repne
         repne
         scasb
         scasb
         movl    $0xfffffffe,%eax
         movl    $0xfffffffe,%eax
         subl    %ecx,%eax
         subl    %ecx,%eax
+.LNil:        
 end ['EDI','ECX','EAX'];
 end ['EDI','ECX','EAX'];
 
 
 
 
 function strend(p : pchar) : pchar;assembler;
 function strend(p : pchar) : pchar;assembler;
 asm
 asm
         cld
         cld
+        xorl    %eax,%eax
         movl    p,%edi
         movl    p,%edi
+        orl     %edi,%edi
+        jz      .LStrEndNil
         movl    $0xffffffff,%ecx
         movl    $0xffffffff,%ecx
         xorl    %eax,%eax
         xorl    %eax,%eax
         repne
         repne
         scasb
         scasb
         movl    %edi,%eax
         movl    %edi,%eax
         decl    %eax
         decl    %eax
+.LStrEndNil:
 end ['EDI','ECX','EAX'];
 end ['EDI','ECX','EAX'];
 
 
 
 
@@ -231,10 +241,12 @@ end ['EAX','ECX','ESI','EDI'];
 
 
 function strscan(p : pchar;c : char) : pchar;assembler;
 function strscan(p : pchar;c : char) : pchar;assembler;
 asm
 asm
+	xorl    %eax,%eax
         movl    p,%edi
         movl    p,%edi
+        orl     %edi,%edi
+        jz      .LSTRSCAN
         movl    $0xffffffff,%ecx
         movl    $0xffffffff,%ecx
         cld
         cld
-        xorb    %al,%al
         repne
         repne
         scasb
         scasb
         not     %ecx
         not     %ecx
@@ -252,7 +264,10 @@ end;
 
 
 function strrscan(p : pchar;c : char) : pchar;assembler;
 function strrscan(p : pchar;c : char) : pchar;assembler;
 asm
 asm
+	xorl    %eax,%eax
         movl    p,%edi
         movl    p,%edi
+        orl     %edi,%edi
+        jz      .LSTRRSCAN
         movl    $0xffffffff,%ecx
         movl    $0xffffffff,%ecx
         cld
         cld
         xorb    %al,%al
         xorb    %al,%al
@@ -278,6 +293,8 @@ end;
 function strupper(p : pchar) : pchar;assembler;
 function strupper(p : pchar) : pchar;assembler;
 asm
 asm
         movl    p,%esi
         movl    p,%esi
+	orl     %esi,%esi
+	jz      .LStrUpperNil
         movl    %esi,%edi
         movl    %esi,%edi
 .LSTRUPPER1:
 .LSTRUPPER1:
         lodsb
         lodsb
@@ -290,6 +307,7 @@ asm
         stosb
         stosb
         orb     %al,%al
         orb     %al,%al
         jnz     .LSTRUPPER1
         jnz     .LSTRUPPER1
+.LStrUpperNil:
         movl    p,%eax
         movl    p,%eax
 end;
 end;
 
 
@@ -297,6 +315,8 @@ end;
 function strlower(p : pchar) : pchar;assembler;
 function strlower(p : pchar) : pchar;assembler;
 asm
 asm
         movl    p,%esi
         movl    p,%esi
+        orl     %esi,%esi
+        jz      .LStrLowerNil
         movl    %esi,%edi
         movl    %esi,%edi
 .LSTRLOWER1:
 .LSTRLOWER1:
         lodsb
         lodsb
@@ -309,12 +329,16 @@ asm
         stosb
         stosb
         orb     %al,%al
         orb     %al,%al
         jnz     .LSTRLOWER1
         jnz     .LSTRLOWER1
+.LStrLowerNil:
         movl    p,%eax
         movl    p,%eax
 end;
 end;
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.3  1999-03-30 16:58:49  peter
+  Revision 1.4  1999-04-09 07:58:41  michael
+  +Added checking for nil on most functions.
+
+  Revision 1.3  1999/03/30 16:58:49  peter
     * use assembler and remove all rets
     * use assembler and remove all rets
 
 
   Revision 1.2  1999/02/25 10:07:01  michael
   Revision 1.2  1999/02/25 10:07:01  michael