ustring: more functions

This commit is contained in:
Matheus
2022-12-15 08:36:33 -03:00
parent caa87bff4e
commit 30dd3d6ca3
3 changed files with 77 additions and 14 deletions
+45 -13
View File
@@ -4,17 +4,49 @@ global arch_u_strlen
global arch_u_strlen_cont
arch_u_strlen:
xor rcx, rcx
.loop:
cmp byte [rdi],0
je .done
inc rcx
inc rdi
jmp .loop
.done:
mov [rsi], rcx
xor rax, rax
ret
xor rcx, rcx
.loop:
cmp byte [rdi],0
je .done
inc rcx
inc rdi
jmp .loop
.done:
mov [rsi], rcx
xor rax, rax
ret
arch_u_strlen_cont:
mov rax, 1
ret
mov rax, 1
ret
global arch_u_memcpy
global arch_u_memcpy_cont
arch_u_memcpy:
mov rcx, rdx
rep movsb
xor rax, rax
ret
arch_u_memcpy_cont:
mov rax, 1
ret
global arch_u_strcpy
global arch_u_strcpy_cont
arch_u_strcpy:
.loop:
mov al, [rsi]
mov [rdi], al
inc rsi
inc rdi
test al,al
jz .done
jmp .loop
.done:
xor rax,rax
ret
arch_u_strcpy_cont:
mov rax, 1
ret
+3 -1
View File
@@ -3,7 +3,9 @@
#include <stddef.h>
int u_strlen(const char* str, size_t* size);
int u_strlen(const char*, size_t*);
int u_memcpy(void*, const void*, size_t);
int u_strcpy(char*, const char*);
#endif
+29
View File
@@ -17,3 +17,32 @@ int u_strlen(const char* str, size_t* len){
}
extern void arch_u_memcpy_cont();
extern int arch_u_memcpy(void* dest, const void* src, size_t len);
int u_memcpy(void* dest, const void* src, size_t len){
arch_getcls()->thread->umemopfailaddr = arch_u_memcpy_cont;
int ret = arch_u_memcpy(dest, src, len);
arch_getcls()->thread->umemopfailaddr = NULL;
return ret == 0 ? 0 : arch_getcls()->thread->umemoperror;
}
extern void arch_u_strcpy_cont();
extern int arch_u_strcpy(void* dest, const void* src);
int u_strcpy(void* dest, const void* src){
arch_getcls()->thread->umemopfailaddr = arch_u_strcpy_cont;
int ret = arch_u_strcpy(dest, src);
arch_getcls()->thread->umemopfailaddr = NULL;
return ret == 0 ? 0 : arch_getcls()->thread->umemoperror;
}