Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1626 → Rev 1627

/drivers/ddk/string/_strnlen.S
1,30 → 1,27
# _strnlen() Author: Kees J. Bot 1 Jan 1994
/* _strnlen() Author: Kees J. Bot */
/* 1 Jan 1994 */
 
# size_t _strnlen(const char *s, size_t ecx)
# Return the length of a string.
/* size_t _strnlen(const char *s, size_t ecx) */
/* Return the length of a string. */
/* */
#include "asm.h"
 
.intel_syntax
ENTRY(_strnlen)
push %ebp
movl %esp, %ebp
push %edi
movl 8(%ebp), %edi /* edi = string */
xorb %al, %al /* Look for a zero byte */
movl %ecx, %edx /* Save maximum count */
cmpb $1, %cl /* 'Z' bit must be clear if ecx = 0 */
cld
 
.globl __strnlen
 
.text
.align 16
__strnlen:
push ebp
mov ebp, esp
push edi
mov edi, [ebp+8] # edi = string
xorb al, al # Look for a zero byte
mov edx, ecx # Save maximum count
cmpb cl, 1 # 'Z' bit must be clear if ecx = 0
cld
repne
scasb # Look for zero
repne scasb /* Look for zero */
jne no0
inc ecx # Don't count zero byte
incl %ecx /* Don't count zero byte */
no0:
mov eax, edx
sub eax, ecx # Compute bytes scanned
pop edi
pop ebp
movl %edx, %eax
subl %ecx, %eax /* Compute bytes scanned */
pop %edi
pop %ebp
ret