mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 17:44:45 +00:00
- Added static string library.
svn path=/trunk/; revision=4769
This commit is contained in:
parent
28c98fe9b4
commit
34cc922d57
51 changed files with 1363 additions and 0 deletions
2
reactos/lib/string/.cvsignore
Normal file
2
reactos/lib/string/.cvsignore
Normal file
|
@ -0,0 +1,2 @@
|
|||
*.o
|
||||
.*.d
|
59
reactos/lib/string/Makefile
Normal file
59
reactos/lib/string/Makefile
Normal file
|
@ -0,0 +1,59 @@
|
|||
# $Id: Makefile,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
|
||||
PATH_TO_TOP = ../..
|
||||
|
||||
TARGET_TYPE = library
|
||||
|
||||
TARGET_NAME = string
|
||||
|
||||
include $(PATH_TO_TOP)/config
|
||||
|
||||
include makefile.$(ARCH)
|
||||
|
||||
TARGET_CFLAGS = -Wall -Werror
|
||||
|
||||
ifeq ($(DBG), 1)
|
||||
TARGET_CFLAGS += -g
|
||||
else
|
||||
TARGET_CFLAGS += -fno-strict-aliasing -O6
|
||||
endif
|
||||
|
||||
TARGET_OBJECTS = \
|
||||
memchr.o \
|
||||
memcmp.o \
|
||||
memcpy.o \
|
||||
memmove.o \
|
||||
memset.o \
|
||||
strcat.o \
|
||||
strchr.o \
|
||||
strcmp.o \
|
||||
strcpy.o \
|
||||
strlen.o \
|
||||
strncat.o \
|
||||
strncmp.o \
|
||||
strncpy.o \
|
||||
strnlen.o \
|
||||
strrchr.o \
|
||||
wcscat.o \
|
||||
wcschr.o \
|
||||
wcscmp.o \
|
||||
wcscpy.o \
|
||||
wcslen.o \
|
||||
wcsncat.o \
|
||||
wcsncmp.o \
|
||||
wcsncpy.o \
|
||||
wcsnlen.o \
|
||||
wcsrchr.o
|
||||
|
||||
TARGET_OBJECTS := $(filter-out $(EXCLUDE_FILTER), $(TARGET_OBJECTS)) $(OBJECTS_ARCH)
|
||||
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
||||
DEP_OBJECTS := $(TARGET_OBJECTS)
|
||||
|
||||
TARGET_CLEAN = $(DEP_FILES)
|
||||
|
||||
include $(PATH_TO_TOP)/tools/depend.mk
|
31
reactos/lib/string/Makefile.i386
Normal file
31
reactos/lib/string/Makefile.i386
Normal file
|
@ -0,0 +1,31 @@
|
|||
# $Id: Makefile.i386,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
|
||||
|
||||
EXCLUDE_FILTER = \
|
||||
memchr.o \
|
||||
memcpy.o \
|
||||
memset.o \
|
||||
strcat.o \
|
||||
strchr.o \
|
||||
strcmp.o \
|
||||
strcpy.o \
|
||||
strlen.o \
|
||||
strncat.o \
|
||||
strncmp.o \
|
||||
strncpy.o \
|
||||
strrchr.o \
|
||||
wcscat.o \
|
||||
wcschr.o \
|
||||
wcscmp.o \
|
||||
wcscpy.o \
|
||||
wcslen.o \
|
||||
wcsncat.o \
|
||||
wcsncmp.o \
|
||||
wcsncpy.o \
|
||||
wcsrchr.o
|
||||
|
||||
|
||||
OBJECTS_ARCH = $(addprefix i386/, $(EXCLUDE_FILTER))
|
||||
|
||||
|
||||
# EOF
|
2
reactos/lib/string/i386/.cvsignore
Normal file
2
reactos/lib/string/i386/.cvsignore
Normal file
|
@ -0,0 +1,2 @@
|
|||
*.o
|
||||
.*.d
|
31
reactos/lib/string/i386/memchr.s
Normal file
31
reactos/lib/string/i386/memchr.s
Normal file
|
@ -0,0 +1,31 @@
|
|||
/* $Id: memchr.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* FILE: lib/string/i386/memchr.s
|
||||
*/
|
||||
|
||||
/*
|
||||
* void* memchr(const void* s, int c, size_t n)
|
||||
*/
|
||||
|
||||
.globl _memchr
|
||||
|
||||
_memchr:
|
||||
push %ebp
|
||||
mov %esp,%ebp
|
||||
push %edi
|
||||
mov 0x8(%ebp),%edi
|
||||
mov 0xc(%ebp),%eax
|
||||
mov 0x10(%ebp),%ecx
|
||||
cld
|
||||
repne scasb
|
||||
je .L1
|
||||
mov $1,%edi
|
||||
.L1:
|
||||
mov %edi,%eax
|
||||
dec %eax
|
||||
pop %edi
|
||||
leave
|
||||
ret
|
||||
|
51
reactos/lib/string/i386/memcpy.s
Normal file
51
reactos/lib/string/i386/memcpy.s
Normal file
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* $Id: memcpy.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* void *memcpy (void *to, const void *from, size_t count)
|
||||
*/
|
||||
|
||||
.globl _memcpy
|
||||
|
||||
_memcpy:
|
||||
push %ebp
|
||||
mov %esp,%ebp
|
||||
push %esi
|
||||
push %edi
|
||||
mov 0x8(%ebp),%edi
|
||||
mov 0xc(%ebp),%esi
|
||||
mov 0x10(%ebp),%ecx
|
||||
cld
|
||||
cmp $4,%ecx
|
||||
jb .L1
|
||||
test $3,%edi
|
||||
je .L2
|
||||
/*
|
||||
* Should we make the source or the destination dword aligned?
|
||||
*/
|
||||
mov %ecx,%edx
|
||||
mov %edi,%ecx
|
||||
and $3,%ecx
|
||||
sub %ecx,%edx
|
||||
rep movsb
|
||||
mov %edx,%ecx
|
||||
.L2:
|
||||
cmp $4,%ecx
|
||||
jb .L1
|
||||
mov %ecx,%edx
|
||||
shr $2,%ecx
|
||||
rep movsl
|
||||
mov %edx,%ecx
|
||||
and $3,%ecx
|
||||
.L1:
|
||||
test %ecx,%ecx
|
||||
je .L3
|
||||
rep movsb
|
||||
.L3:
|
||||
pop %edi
|
||||
pop %esi
|
||||
mov 0x8(%ebp),%eax
|
||||
leave
|
||||
ret
|
||||
|
54
reactos/lib/string/i386/memset.s
Normal file
54
reactos/lib/string/i386/memset.s
Normal file
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* $Id: memset.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* void *memset (void *src, int val, size_t count)
|
||||
*/
|
||||
|
||||
.globl _memset
|
||||
|
||||
_memset:
|
||||
; push %ebp
|
||||
; mov %esp,%ebp
|
||||
push %edi
|
||||
push %edx
|
||||
; mov 0x8(%ebp),%edi
|
||||
; movzb 0xc(%ebp),%eax
|
||||
; mov 0x10(%ebp),%ecx
|
||||
mov 0x10(%esp),%edi
|
||||
movzb 0x14(%esp),%eax
|
||||
mov 0x18(%esp),%ecx
|
||||
cld
|
||||
cmp $4,%ecx
|
||||
jb .L1
|
||||
mov $0x01010101,%edx
|
||||
mul %edx
|
||||
test $3,%edi
|
||||
je .L2
|
||||
mov %ecx,%edx
|
||||
mov %edi,%ecx
|
||||
and $3,%ecx
|
||||
sub %ecx,%edx
|
||||
rep stosb
|
||||
mov %edx,%ecx
|
||||
.L2:
|
||||
cmp $4,%ecx
|
||||
jb .L1
|
||||
mov %ecx,%edx
|
||||
shr $2,%ecx
|
||||
rep stosl
|
||||
mov %edx,%ecx
|
||||
and $3,%ecx
|
||||
.L1:
|
||||
test %ecx,%ecx
|
||||
je .L3
|
||||
rep stosb
|
||||
.L3:
|
||||
pop %edx
|
||||
pop %edi
|
||||
; mov 0x8(%ebp),%eax
|
||||
mov 0x8(%esp),%eax
|
||||
; leave
|
||||
ret
|
||||
|
33
reactos/lib/string/i386/strcat.s
Normal file
33
reactos/lib/string/i386/strcat.s
Normal file
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* $Id: strcat.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* char *strcat (char *s, const char *append)
|
||||
*/
|
||||
|
||||
.globl _strcat
|
||||
|
||||
_strcat:
|
||||
push %ebp
|
||||
mov %esp,%ebp
|
||||
push %esi
|
||||
push %edi
|
||||
mov 0x8(%ebp),%edi
|
||||
mov 0xc(%ebp),%esi
|
||||
xor %eax,%eax
|
||||
mov $-1,%ecx
|
||||
cld
|
||||
repne scasb
|
||||
dec %edi
|
||||
.L1:
|
||||
lodsb
|
||||
stosb
|
||||
test %al,%al
|
||||
jne .L1
|
||||
mov 0x8(%ebp),%eax
|
||||
pop %edi
|
||||
pop %esi
|
||||
leave
|
||||
ret
|
||||
|
32
reactos/lib/string/i386/strchr.s
Normal file
32
reactos/lib/string/i386/strchr.s
Normal file
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* $Id: strchr.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* char* strchr (const char* s, int c)
|
||||
*/
|
||||
|
||||
.globl _strchr
|
||||
|
||||
_strchr:
|
||||
push %ebp
|
||||
mov %esp,%ebp
|
||||
push %esi
|
||||
mov 0x8(%ebp),%esi
|
||||
mov 0xc(%ebp),%eax
|
||||
mov %al,%ah
|
||||
cld
|
||||
.L1:
|
||||
lodsb
|
||||
cmp %al,%ah
|
||||
je .L2
|
||||
test %al,%al
|
||||
jne .L1
|
||||
mov $1,%esi
|
||||
.L2:
|
||||
mov %esi,%eax
|
||||
dec %eax
|
||||
pop %esi
|
||||
leave
|
||||
ret
|
||||
|
36
reactos/lib/string/i386/strcmp.s
Normal file
36
reactos/lib/string/i386/strcmp.s
Normal file
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* $Id: strcmp.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* int *strcmp (const char* s1, const char* s2)
|
||||
*/
|
||||
|
||||
.globl _strcmp
|
||||
|
||||
_strcmp:
|
||||
push %ebp
|
||||
mov %esp,%ebp
|
||||
push %esi
|
||||
push %edi
|
||||
mov 0x8(%ebp),%esi
|
||||
mov 0xc(%ebp),%edi
|
||||
xor %eax,%eax
|
||||
cld
|
||||
.L1:
|
||||
lodsb
|
||||
scasb
|
||||
jne .L2
|
||||
test %eax,%eax // bit 8..31 are set to 0
|
||||
jne .L1
|
||||
xor %eax,%eax
|
||||
jmp .L3
|
||||
.L2:
|
||||
sbb %eax,%eax
|
||||
or $1,%al
|
||||
.L3:
|
||||
pop %edi
|
||||
pop %esi
|
||||
leave
|
||||
ret
|
||||
|
29
reactos/lib/string/i386/strcpy.s
Normal file
29
reactos/lib/string/i386/strcpy.s
Normal file
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* $Id: strcpy.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* char *strcpy (char *to, const char *from)
|
||||
*/
|
||||
|
||||
.globl _strcpy
|
||||
|
||||
_strcpy:
|
||||
push %ebp
|
||||
mov %esp,%ebp
|
||||
push %esi
|
||||
push %edi
|
||||
mov 0x8(%ebp),%edi
|
||||
mov 0xc(%ebp),%esi
|
||||
cld
|
||||
.L1:
|
||||
lodsb
|
||||
stosb
|
||||
test %al,%al
|
||||
jne .L1
|
||||
mov 0x8(%ebp),%eax
|
||||
pop %edi
|
||||
pop %esi
|
||||
leave
|
||||
ret
|
||||
|
26
reactos/lib/string/i386/strlen.s
Normal file
26
reactos/lib/string/i386/strlen.s
Normal file
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
* $Id: strlen.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* size_t strlen (const char* s)
|
||||
*/
|
||||
|
||||
.globl _strlen
|
||||
|
||||
_strlen:
|
||||
push %ebp
|
||||
mov %esp,%ebp
|
||||
push %edi
|
||||
mov 0x8(%ebp),%edi
|
||||
xor %eax,%eax
|
||||
mov $-1,%ecx
|
||||
cld
|
||||
repne scasb
|
||||
not %ecx
|
||||
dec %ecx
|
||||
mov %ecx,%eax
|
||||
pop %edi
|
||||
leave
|
||||
ret
|
||||
|
41
reactos/lib/string/i386/strncat.s
Normal file
41
reactos/lib/string/i386/strncat.s
Normal file
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
* $Id: strncat.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* char *strncat (char *s, const char *append, size_t n)
|
||||
*/
|
||||
|
||||
.globl _strncat
|
||||
|
||||
_strncat:
|
||||
push %ebp
|
||||
mov %esp,%ebp
|
||||
push %esi
|
||||
push %edi
|
||||
mov 0x8(%ebp),%edi
|
||||
mov 0xc(%ebp),%esi
|
||||
xor %eax,%eax
|
||||
mov $-1,%ecx
|
||||
cld
|
||||
repne scasb
|
||||
dec %edi
|
||||
mov 0x10(%ebp),%ecx
|
||||
.L1:
|
||||
dec %ecx
|
||||
js .L2
|
||||
lodsb
|
||||
stosb
|
||||
test %al,%al
|
||||
jne .L1
|
||||
jmp .L3
|
||||
.L2:
|
||||
xor %eax,%eax
|
||||
stosb
|
||||
.L3:
|
||||
mov 0x8(%ebp),%eax
|
||||
pop %edi
|
||||
pop %esi
|
||||
leave
|
||||
ret
|
||||
|
40
reactos/lib/string/i386/strncmp.s
Normal file
40
reactos/lib/string/i386/strncmp.s
Normal file
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* $Id: strncmp.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* int *strncmp (const char* s1, const char* s2, size_t n)
|
||||
*/
|
||||
|
||||
.globl _strncmp
|
||||
|
||||
_strncmp:
|
||||
push %ebp
|
||||
mov %esp,%ebp
|
||||
push %esi
|
||||
push %edi
|
||||
mov 0x8(%ebp),%esi // s1
|
||||
mov 0xc(%ebp),%edi // s2
|
||||
mov 0x10(%ebp),%ecx // n
|
||||
xor %eax,%eax
|
||||
cld
|
||||
.L1:
|
||||
dec %ecx
|
||||
js .L2
|
||||
lodsb
|
||||
scasb
|
||||
jne .L3
|
||||
test %eax,%eax // bit 8..31 are set to 0
|
||||
jne .L1
|
||||
.L2:
|
||||
xor %eax,%eax
|
||||
jmp .L4
|
||||
.L3:
|
||||
sbb %eax,%eax
|
||||
or $1,%al
|
||||
.L4:
|
||||
pop %edi
|
||||
pop %esi
|
||||
leave
|
||||
ret
|
||||
|
35
reactos/lib/string/i386/strncpy.s
Normal file
35
reactos/lib/string/i386/strncpy.s
Normal file
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* $Id: strncpy.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* char *strncpy (char *to, const char *from, size_t n)
|
||||
*/
|
||||
|
||||
.globl _strncpy
|
||||
|
||||
_strncpy:
|
||||
push %ebp
|
||||
mov %esp,%ebp
|
||||
push %esi
|
||||
push %edi
|
||||
mov 0x8(%ebp),%edi
|
||||
mov 0xc(%ebp),%esi
|
||||
mov 0x10(%ebp),%ecx
|
||||
xor %eax,%eax
|
||||
cld
|
||||
.L1:
|
||||
dec %ecx
|
||||
js .L2
|
||||
lodsb
|
||||
stosb
|
||||
test %al,%al
|
||||
jne .L1
|
||||
rep stosb
|
||||
.L2:
|
||||
mov 0x8(%ebp),%eax
|
||||
pop %edi
|
||||
pop %esi
|
||||
leave
|
||||
ret
|
||||
|
33
reactos/lib/string/i386/strrchr.s
Normal file
33
reactos/lib/string/i386/strrchr.s
Normal file
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* $Id: strrchr.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* char* strrchr (const char* s, int c)
|
||||
*/
|
||||
|
||||
.globl _strrchr
|
||||
|
||||
_strrchr:
|
||||
push %ebp
|
||||
mov %esp,%ebp
|
||||
push %esi
|
||||
mov 0x8(%ebp),%esi
|
||||
mov 0xc(%ebp),%eax
|
||||
mov $1,%ecx
|
||||
mov %al,%ah
|
||||
cld
|
||||
.L1:
|
||||
lodsb
|
||||
cmp %al,%ah
|
||||
jne .L2
|
||||
mov %esi,%ecx
|
||||
.L2:
|
||||
test %al,%al
|
||||
jne .L1
|
||||
mov %ecx,%eax
|
||||
dec %eax
|
||||
pop %esi
|
||||
leave
|
||||
ret
|
||||
|
33
reactos/lib/string/i386/wcscat.s
Normal file
33
reactos/lib/string/i386/wcscat.s
Normal file
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* $Id: wcscat.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* wchar_t *wcscat (wchar_t *dest, const wchar_t *append)
|
||||
*/
|
||||
|
||||
.globl _wcscat
|
||||
|
||||
_wcscat:
|
||||
push %ebp
|
||||
mov %esp,%ebp
|
||||
push %esi
|
||||
push %edi
|
||||
mov 0x8(%ebp),%edi
|
||||
mov 0xc(%ebp),%esi
|
||||
cld
|
||||
xor %eax,%eax
|
||||
mov $-1,%ecx
|
||||
repne scasw
|
||||
sub $2,%edi
|
||||
.L1:
|
||||
lodsw
|
||||
stosw
|
||||
test %ax,%ax
|
||||
jne .L1
|
||||
mov 0x8(%ebp),%eax
|
||||
pop %edi
|
||||
pop %esi
|
||||
leave
|
||||
ret
|
||||
|
34
reactos/lib/string/i386/wcschr.s
Normal file
34
reactos/lib/string/i386/wcschr.s
Normal file
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* $Id: wcschr.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* wchar_t *wcschr (const wchar_t* str, wchar_t ch)
|
||||
*/
|
||||
|
||||
.globl _wcschr
|
||||
|
||||
_wcschr:
|
||||
push %ebp
|
||||
mov %esp,%ebp
|
||||
push %esi
|
||||
push %edx
|
||||
mov 0x8(%ebp),%esi
|
||||
mov 0xc(%ebp),%edx
|
||||
cld
|
||||
.L1:
|
||||
lodsw
|
||||
cmp %ax,%dx
|
||||
je .L2
|
||||
test %ax,%ax
|
||||
jne .L1
|
||||
mov $2,%esi
|
||||
.L2:
|
||||
mov %esi,%eax
|
||||
sub $2,%eax
|
||||
pop %edx
|
||||
pop %esi
|
||||
leave
|
||||
ret
|
||||
|
||||
|
36
reactos/lib/string/i386/wcscmp.s
Normal file
36
reactos/lib/string/i386/wcscmp.s
Normal file
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* $Id: wcscmp.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* int wcscmp (const wchar_t* s1, const wchar_t* s2)
|
||||
*/
|
||||
|
||||
.globl _wcscmp
|
||||
|
||||
_wcscmp:
|
||||
push %ebp
|
||||
mov %esp,%ebp
|
||||
push %esi
|
||||
push %edi
|
||||
mov 0x8(%ebp),%esi
|
||||
mov 0xc(%ebp),%edi
|
||||
cld
|
||||
.L1:
|
||||
lodsw
|
||||
scasw
|
||||
jne .L2
|
||||
test %ax,%ax
|
||||
jne .L1
|
||||
xor %eax,%eax
|
||||
jmp .L3
|
||||
.L2:
|
||||
sbb %eax,%eax
|
||||
or $1,%al
|
||||
.L3:
|
||||
pop %edi
|
||||
pop %esi
|
||||
leave
|
||||
ret
|
||||
|
||||
|
30
reactos/lib/string/i386/wcscpy.s
Normal file
30
reactos/lib/string/i386/wcscpy.s
Normal file
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* $Id: wcscpy.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* wchar_t* wcscpy (wchar_t* to, const wchar_t* from)
|
||||
*/
|
||||
|
||||
.globl _wcscpy
|
||||
|
||||
_wcscpy:
|
||||
push %ebp
|
||||
mov %esp,%ebp
|
||||
push %esi
|
||||
push %edi
|
||||
mov 0x8(%ebp),%edi
|
||||
mov 0xc(%ebp),%esi
|
||||
cld
|
||||
.L1:
|
||||
lodsw
|
||||
stosw
|
||||
test %ax,%ax
|
||||
jne .L1
|
||||
mov 0x8(%ebp),%eax
|
||||
pop %edi
|
||||
pop %esi
|
||||
leave
|
||||
ret
|
||||
|
||||
|
28
reactos/lib/string/i386/wcslen.s
Normal file
28
reactos/lib/string/i386/wcslen.s
Normal file
|
@ -0,0 +1,28 @@
|
|||
/*
|
||||
* $Id: wcslen.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* size_t wcslen (const wchar_t* str)
|
||||
*/
|
||||
|
||||
.globl _wcslen
|
||||
|
||||
_wcslen:
|
||||
push %ebp
|
||||
mov %esp,%ebp
|
||||
push %edi
|
||||
mov 0x8(%ebp),%edi
|
||||
xor %eax,%eax
|
||||
mov $-1,%ecx
|
||||
cld
|
||||
repne scasw
|
||||
not %ecx
|
||||
dec %ecx
|
||||
mov %ecx,%eax
|
||||
pop %edi
|
||||
leave
|
||||
ret
|
||||
|
||||
|
||||
|
41
reactos/lib/string/i386/wcsncat.s
Normal file
41
reactos/lib/string/i386/wcsncat.s
Normal file
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
* $Id: wcsncat.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* wchar_t *wcsncat (wchar_t *dest, const wchar_t *append, size_t n)
|
||||
*/
|
||||
|
||||
.globl _wcsncat
|
||||
|
||||
_wcsncat:
|
||||
push %ebp
|
||||
mov %esp,%ebp
|
||||
push %esi
|
||||
push %edi
|
||||
mov 0x8(%ebp),%edi
|
||||
mov 0xc(%ebp),%esi
|
||||
cld
|
||||
xor %eax,%eax
|
||||
mov $-1,%ecx
|
||||
repne scasw
|
||||
sub $2,%edi
|
||||
mov 0x10(%ebp),%ecx
|
||||
.L1:
|
||||
dec %ecx
|
||||
js .L2
|
||||
lodsw
|
||||
stosw
|
||||
test %ax,%ax
|
||||
jne .L1
|
||||
jmp .L3
|
||||
.L2:
|
||||
xor %eax,%eax
|
||||
stosw
|
||||
.L3:
|
||||
mov 0x8(%ebp),%eax
|
||||
pop %edi
|
||||
pop %esi
|
||||
leave
|
||||
ret
|
||||
|
40
reactos/lib/string/i386/wcsncmp.s
Normal file
40
reactos/lib/string/i386/wcsncmp.s
Normal file
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* $Id: wcsncmp.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* int wcsncmp (const wchar_t* s1, const wchar_t* s2, size_t n)
|
||||
*/
|
||||
|
||||
.globl _wcsncmp
|
||||
|
||||
_wcsncmp:
|
||||
push %ebp
|
||||
mov %esp,%ebp
|
||||
push %esi
|
||||
push %edi
|
||||
mov 0x8(%ebp),%esi
|
||||
mov 0xc(%ebp),%edi
|
||||
mov 0xc(%ebp),%ecx
|
||||
cld
|
||||
.L1:
|
||||
dec %ecx
|
||||
js .L2
|
||||
lodsw
|
||||
scasw
|
||||
jne .L3
|
||||
test %ax,%ax
|
||||
jne .L1
|
||||
.L2:
|
||||
xor %eax,%eax
|
||||
jmp .L4
|
||||
.L3:
|
||||
sbb %eax,%eax
|
||||
or $1,%al
|
||||
.L4:
|
||||
pop %edi
|
||||
pop %esi
|
||||
leave
|
||||
ret
|
||||
|
||||
|
35
reactos/lib/string/i386/wcsncpy.s
Normal file
35
reactos/lib/string/i386/wcsncpy.s
Normal file
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* $Id: wcsncpy.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* wchar_t* wcsncpy (wchar_t* to, const wchar_t* from)
|
||||
*/
|
||||
|
||||
.globl _wcsncpy
|
||||
|
||||
_wcsncpy:
|
||||
push %ebp
|
||||
mov %esp,%ebp
|
||||
push %esi
|
||||
push %edi
|
||||
mov 0x8(%ebp),%edi
|
||||
mov 0xc(%ebp),%esi
|
||||
mov 0x10(%ebp),%ecx
|
||||
cld
|
||||
.L1:
|
||||
dec %ecx
|
||||
js .L2
|
||||
lodsw
|
||||
stosw
|
||||
test %ax,%ax
|
||||
jne .L1
|
||||
rep stosw
|
||||
.L2:
|
||||
mov 0x8(%ebp),%eax
|
||||
pop %edi
|
||||
pop %esi
|
||||
leave
|
||||
ret
|
||||
|
||||
|
35
reactos/lib/string/i386/wcsrchr.s
Normal file
35
reactos/lib/string/i386/wcsrchr.s
Normal file
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* $Id: wcsrchr.s,v 1.1 2003/05/27 18:58:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* wchar_t *wcsrchr (const wchar_t* str, wchar_t ch)
|
||||
*/
|
||||
|
||||
.globl _wcsrchr
|
||||
|
||||
_wcsrchr:
|
||||
push %ebp
|
||||
mov %esp,%ebp
|
||||
push %esi
|
||||
push %edx
|
||||
mov 0x8(%ebp),%esi
|
||||
mov 0xc(%ebp),%edx
|
||||
mov $2,%ecx
|
||||
cld
|
||||
.L1:
|
||||
lodsw
|
||||
cmp %ax,%dx
|
||||
jne .L2
|
||||
mov %esi,%ecx
|
||||
.L2:
|
||||
test %ax,%ax
|
||||
jne .L1
|
||||
mov %ecx,%eax
|
||||
sub $2,%eax
|
||||
pop %edx
|
||||
pop %esi
|
||||
leave
|
||||
ret
|
||||
|
||||
|
25
reactos/lib/string/memccpy.c
Normal file
25
reactos/lib/string/memccpy.c
Normal file
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* $Id: memccpy.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
|
||||
void *
|
||||
_memccpy (void *to, const void *from,int c,size_t count)
|
||||
{
|
||||
char t;
|
||||
size_t i;
|
||||
char *dst=(char*)to;
|
||||
const char *src=(const char*)from;
|
||||
|
||||
for ( i = 0; i < count; i++ )
|
||||
{
|
||||
dst[i] = t = src[i];
|
||||
if ( t == '\0' )
|
||||
break;
|
||||
if ( t == c )
|
||||
return &dst[i+1];
|
||||
}
|
||||
return NULL; /* didn't copy c */
|
||||
}
|
18
reactos/lib/string/memchr.c
Normal file
18
reactos/lib/string/memchr.c
Normal file
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
* $Id: memchr.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
void* memchr(const void *s, int c, size_t n)
|
||||
{
|
||||
if (n)
|
||||
{
|
||||
const char *p = s;
|
||||
do {
|
||||
if (*p++ == c)
|
||||
return (void *)(p-1);
|
||||
} while (--n != 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
17
reactos/lib/string/memcmp.c
Normal file
17
reactos/lib/string/memcmp.c
Normal file
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* $Id: memcmp.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
int memcmp(const void *s1, const void *s2, size_t n)
|
||||
{
|
||||
if (n != 0) {
|
||||
const unsigned char *p1 = s1, *p2 = s2;
|
||||
do {
|
||||
if (*p1++ != *p2++)
|
||||
return (*--p1 - *--p2);
|
||||
} while (--n != 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
16
reactos/lib/string/memcpy.c
Normal file
16
reactos/lib/string/memcpy.c
Normal file
|
@ -0,0 +1,16 @@
|
|||
/*
|
||||
* $Id: memcpy.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
void* memcpy(void* to, const void* from, size_t count)
|
||||
{
|
||||
register char *f = (char *)from;
|
||||
register char *t = (char *)to;
|
||||
register int i = count;
|
||||
|
||||
while (i-- > 0)
|
||||
*t++ = *f++;
|
||||
return to;
|
||||
}
|
40
reactos/lib/string/memmove.c
Normal file
40
reactos/lib/string/memmove.c
Normal file
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* $Id: memmove.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
|
||||
void * memmove(void *dest,const void *src,size_t count)
|
||||
{
|
||||
char *char_dest = (char *)dest;
|
||||
char *char_src = (char *)src;
|
||||
|
||||
if ((char_dest <= char_src) || (char_dest >= (char_src+count)))
|
||||
{
|
||||
/* non-overlapping buffers */
|
||||
while(count > 0)
|
||||
{
|
||||
*char_dest = *char_src;
|
||||
char_dest++;
|
||||
char_src++;
|
||||
count--;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* overlaping buffers */
|
||||
char_dest = (char *)dest + count - 1;
|
||||
char_src = (char *)src + count - 1;
|
||||
|
||||
while(count > 0)
|
||||
{
|
||||
*char_dest = *char_src;
|
||||
char_dest--;
|
||||
char_src--;
|
||||
count--;
|
||||
}
|
||||
}
|
||||
|
||||
return dest;
|
||||
}
|
17
reactos/lib/string/memset.c
Normal file
17
reactos/lib/string/memset.c
Normal file
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* $Id: memset.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
void* memset(void* src, int val, size_t count)
|
||||
{
|
||||
char *char_src = (char *)src;
|
||||
|
||||
while(count>0) {
|
||||
*char_src = val;
|
||||
char_src++;
|
||||
count--;
|
||||
}
|
||||
return src;
|
||||
}
|
14
reactos/lib/string/strcat.c
Normal file
14
reactos/lib/string/strcat.c
Normal file
|
@ -0,0 +1,14 @@
|
|||
/*
|
||||
* $Id: strcat.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
char* strcat(char* s, const char* append)
|
||||
{
|
||||
char* save = s;
|
||||
|
||||
for (; *s; ++s);
|
||||
while ((*s++ = *append++));
|
||||
return save;
|
||||
}
|
20
reactos/lib/string/strchr.c
Normal file
20
reactos/lib/string/strchr.c
Normal file
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* $Id: strchr.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
char *strchr(const char *s, int c)
|
||||
{
|
||||
char cc = c;
|
||||
while (*s)
|
||||
{
|
||||
if (*s == cc)
|
||||
return (char *)s;
|
||||
s++;
|
||||
}
|
||||
if (cc == 0)
|
||||
return (char *)s;
|
||||
return 0;
|
||||
}
|
||||
|
17
reactos/lib/string/strcmp.c
Normal file
17
reactos/lib/string/strcmp.c
Normal file
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* $Id: strcmp.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
int strcmp(const char* s1, const char* s2)
|
||||
{
|
||||
while (*s1 == *s2)
|
||||
{
|
||||
if (*s1 == 0)
|
||||
return 0;
|
||||
s1++;
|
||||
s2++;
|
||||
}
|
||||
return *(unsigned const char*)s1 - *(unsigned const char*)(s2);
|
||||
}
|
13
reactos/lib/string/strcpy.c
Normal file
13
reactos/lib/string/strcpy.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
/*
|
||||
* $Id: strcpy.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
char* strcpy(char *to, const char *from)
|
||||
{
|
||||
char *save = to;
|
||||
|
||||
for (; (*to = *from); ++from, ++to);
|
||||
return save;
|
||||
}
|
25
reactos/lib/string/strlen.c
Normal file
25
reactos/lib/string/strlen.c
Normal file
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* $Id: strlen.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <debug.h>
|
||||
#define NTOS_MODE_USER
|
||||
#include <ntos.h>
|
||||
|
||||
int strlen(const char* str)
|
||||
{
|
||||
const char* s;
|
||||
|
||||
// DPRINT1("strlen(%x)\n", str);
|
||||
// DPRINT1("%x\n", __builtin_return_address(0));
|
||||
// if (str == (char*)0x6418c4)
|
||||
// {
|
||||
// DPRINT1("%s\n", str);
|
||||
// }
|
||||
if (str == 0)
|
||||
return 0;
|
||||
for (s = str; *s; ++s);
|
||||
return s-str;
|
||||
}
|
||||
|
25
reactos/lib/string/strncat.c
Normal file
25
reactos/lib/string/strncat.c
Normal file
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* $Id: strncat.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
char *
|
||||
strncat(char *dst, const char *src, size_t n)
|
||||
{
|
||||
if (n != 0)
|
||||
{
|
||||
char *d = dst;
|
||||
const char *s = src;
|
||||
|
||||
while (*d != 0)
|
||||
d++;
|
||||
do {
|
||||
if ((*d = *s++) == 0)
|
||||
break;
|
||||
d++;
|
||||
} while (--n != 0);
|
||||
*d = 0;
|
||||
}
|
||||
return dst;
|
||||
}
|
20
reactos/lib/string/strncmp.c
Normal file
20
reactos/lib/string/strncmp.c
Normal file
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* $Id: strncmp.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
int
|
||||
strncmp(const char *s1, const char *s2, size_t n)
|
||||
{
|
||||
|
||||
if (n == 0)
|
||||
return 0;
|
||||
do {
|
||||
if (*s1 != *s2++)
|
||||
return *(unsigned const char *)s1 - *(unsigned const char *)--s2;
|
||||
if (*s1++ == 0)
|
||||
break;
|
||||
} while (--n != 0);
|
||||
return 0;
|
||||
}
|
24
reactos/lib/string/strncpy.c
Normal file
24
reactos/lib/string/strncpy.c
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* $Id: strncpy.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
char *
|
||||
strncpy(char *dst, const char *src, size_t n)
|
||||
{
|
||||
if (n != 0) {
|
||||
char *d = dst;
|
||||
const char *s = src;
|
||||
|
||||
do {
|
||||
if ((*d++ = *s++) == 0)
|
||||
{
|
||||
while (--n != 0)
|
||||
*d++ = 0;
|
||||
break;
|
||||
}
|
||||
} while (--n != 0);
|
||||
}
|
||||
return dst;
|
||||
}
|
16
reactos/lib/string/strnlen.c
Normal file
16
reactos/lib/string/strnlen.c
Normal file
|
@ -0,0 +1,16 @@
|
|||
/*
|
||||
* $Id: strnlen.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
int strnlen(const char *str, size_t count)
|
||||
{
|
||||
const char *s;
|
||||
|
||||
if (str == 0)
|
||||
return 0;
|
||||
for (s = str; *s && count; ++s, count--);
|
||||
return s-str;
|
||||
}
|
||||
|
22
reactos/lib/string/strrchr.c
Normal file
22
reactos/lib/string/strrchr.c
Normal file
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* $Id: strrchr.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
char *
|
||||
strrchr(const char *s, int c)
|
||||
{
|
||||
char cc = c;
|
||||
const char *sp=(char *)0;
|
||||
while (*s)
|
||||
{
|
||||
if (*s == cc)
|
||||
sp = s;
|
||||
s++;
|
||||
}
|
||||
if (cc == 0)
|
||||
sp = s;
|
||||
return (char *)sp;
|
||||
}
|
||||
|
14
reactos/lib/string/wcscat.c
Normal file
14
reactos/lib/string/wcscat.c
Normal file
|
@ -0,0 +1,14 @@
|
|||
/*
|
||||
* $Id: wcscat.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
wchar_t* wcscat(wchar_t* s, const wchar_t* append)
|
||||
{
|
||||
wchar_t* save = s;
|
||||
|
||||
for (; *s; ++s);
|
||||
while ((*s++ = *append++));
|
||||
return save;
|
||||
}
|
20
reactos/lib/string/wcschr.c
Normal file
20
reactos/lib/string/wcschr.c
Normal file
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* $Id: wcschr.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
wchar_t *wcschr(const wchar_t *s, wchar_t c)
|
||||
{
|
||||
wchar_t cc = c;
|
||||
while (*s)
|
||||
{
|
||||
if (*s == cc)
|
||||
return (wchar_t *)s;
|
||||
s++;
|
||||
}
|
||||
if (cc == 0)
|
||||
return (wchar_t *)s;
|
||||
return 0;
|
||||
}
|
||||
|
17
reactos/lib/string/wcscmp.c
Normal file
17
reactos/lib/string/wcscmp.c
Normal file
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* $Id: wcscmp.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
int wcscmp(const wchar_t* s1, const wchar_t* s2)
|
||||
{
|
||||
while (*s1 == *s2)
|
||||
{
|
||||
if (*s1 == 0)
|
||||
return 0;
|
||||
s1++;
|
||||
s2++;
|
||||
}
|
||||
return *s1 - *s2;
|
||||
}
|
13
reactos/lib/string/wcscpy.c
Normal file
13
reactos/lib/string/wcscpy.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
/*
|
||||
* $Id: wcscpy.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
wchar_t* wcscpy(wchar_t *to, const wchar_t *from)
|
||||
{
|
||||
wchar_t *save = to;
|
||||
|
||||
for (; (*to = *from); ++from, ++to);
|
||||
return save;
|
||||
}
|
16
reactos/lib/string/wcslen.c
Normal file
16
reactos/lib/string/wcslen.c
Normal file
|
@ -0,0 +1,16 @@
|
|||
/*
|
||||
* $Id: wcslen.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
size_t wcslen(const wchar_t* str)
|
||||
{
|
||||
const wchar_t* s;
|
||||
|
||||
if (str == 0)
|
||||
return 0;
|
||||
for (s = str; *s; ++s);
|
||||
return s-str;
|
||||
}
|
||||
|
25
reactos/lib/string/wcsncat.c
Normal file
25
reactos/lib/string/wcsncat.c
Normal file
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* $Id: wcsncat.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
wchar_t *
|
||||
wcsncat(wchar_t *dst, const wchar_t *src, size_t n)
|
||||
{
|
||||
if (n != 0)
|
||||
{
|
||||
wchar_t *d = dst;
|
||||
const wchar_t *s = src;
|
||||
|
||||
while (*d != 0)
|
||||
d++;
|
||||
do {
|
||||
if ((*d = *s++) == 0)
|
||||
break;
|
||||
d++;
|
||||
} while (--n != 0);
|
||||
*d = 0;
|
||||
}
|
||||
return dst;
|
||||
}
|
20
reactos/lib/string/wcsncmp.c
Normal file
20
reactos/lib/string/wcsncmp.c
Normal file
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* $Id: wcsncmp.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
int
|
||||
wcsncmp(const wchar_t *s1, const wchar_t *s2, size_t n)
|
||||
{
|
||||
|
||||
if (n == 0)
|
||||
return 0;
|
||||
do {
|
||||
if (*s1 != *s2++)
|
||||
return *s1 - *--s2;
|
||||
if (*s1++ == 0)
|
||||
break;
|
||||
} while (--n != 0);
|
||||
return 0;
|
||||
}
|
24
reactos/lib/string/wcsncpy.c
Normal file
24
reactos/lib/string/wcsncpy.c
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* $Id: wcsncpy.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
wchar_t *
|
||||
wcsncpy(wchar_t *dst, const wchar_t *src, size_t n)
|
||||
{
|
||||
if (n != 0) {
|
||||
wchar_t *d = dst;
|
||||
const wchar_t *s = src;
|
||||
|
||||
do {
|
||||
if ((*d++ = *s++) == 0)
|
||||
{
|
||||
while (--n != 0)
|
||||
*d++ = 0;
|
||||
break;
|
||||
}
|
||||
} while (--n != 0);
|
||||
}
|
||||
return dst;
|
||||
}
|
16
reactos/lib/string/wcsnlen.c
Normal file
16
reactos/lib/string/wcsnlen.c
Normal file
|
@ -0,0 +1,16 @@
|
|||
/*
|
||||
* $Id: wcsnlen.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
int wcsnlen(const wchar_t *str, size_t count)
|
||||
{
|
||||
const wchar_t *s;
|
||||
|
||||
if (str == 0)
|
||||
return 0;
|
||||
for (s = str; *s && count; ++s, count--);
|
||||
return s-str;
|
||||
}
|
||||
|
22
reactos/lib/string/wcsrchr.c
Normal file
22
reactos/lib/string/wcsrchr.c
Normal file
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* $Id: wcsrchr.c,v 1.1 2003/05/27 18:56:15 hbirr Exp $
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
wchar_t *
|
||||
wcsrchr(const wchar_t *s, wchar_t c)
|
||||
{
|
||||
wchar_t cc = c;
|
||||
const wchar_t *sp=(wchar_t *)0;
|
||||
while (*s)
|
||||
{
|
||||
if (*s == cc)
|
||||
sp = s;
|
||||
s++;
|
||||
}
|
||||
if (cc == 0)
|
||||
sp = s;
|
||||
return (wchar_t *)sp;
|
||||
}
|
||||
|
Loading…
Reference in a new issue