forked from KolibriOS/kolibrios
1402c59305
git-svn-id: svn://kolibrios.org@1408 a494cfbc-eb01-0410-851d-a64ba20cac60
44 lines
1020 B
ArmAsm
44 lines
1020 B
ArmAsm
# _strncat() Author: Kees J. Bot
|
|
# 1 Jan 1994
|
|
# char *_strncat(char *s1, const char *s2, size_t edx)
|
|
# Append string s2 to s1.
|
|
#
|
|
|
|
.intel_syntax
|
|
|
|
.global __strncat
|
|
|
|
.text
|
|
.align 16
|
|
__strncat:
|
|
push ebp
|
|
mov ebp, esp
|
|
push esi
|
|
push edi
|
|
mov edi, [ebp+8] # String s1
|
|
mov ecx, -1
|
|
xorb al, al # Null byte
|
|
cld
|
|
repne
|
|
scasb # Look for the zero byte in s1
|
|
dec edi # Back one up (and clear 'Z' flag)
|
|
push edi # Save end of s1
|
|
mov edi, [12+ebp] # edi = string s2
|
|
mov ecx, edx # Maximum count
|
|
repne
|
|
scasb # Look for the end of s2
|
|
jne no0
|
|
inc ecx # Exclude null byte
|
|
no0: sub edx, ecx # Number of bytes in s2
|
|
mov ecx, edx
|
|
mov esi, [12+ebp] # esi = string s2
|
|
pop edi # edi = end of string s1
|
|
rep
|
|
movsb # Copy bytes
|
|
stosb # Add a terminating null
|
|
mov eax, [8+ebp] # Return s1
|
|
pop edi
|
|
pop esi
|
|
pop ebp
|
|
ret
|