puts/putchar stuff
This commit is contained in:
parent
6d62442fd8
commit
8e66148582
6 changed files with 35 additions and 25 deletions
|
|
@ -102,11 +102,11 @@ fclean : clean
|
||||||
re : fclean all
|
re : fclean all
|
||||||
|
|
||||||
test: $(NAME) test.c
|
test: $(NAME) test.c
|
||||||
@gcc test.c -I $(INC_DIR) -Wall -Wextra -Werror -L. -lfts -o test
|
@gcc test.c -I $(INC_DIR) -L. -lfts -o test
|
||||||
@printf "\r\033[38;5;117m✓ MAKE test\033[0m\033[K\n"
|
@printf "\r\033[38;5;117m✓ MAKE test\033[0m\033[K\n"
|
||||||
|
|
||||||
debug: $(NAME) debug.c
|
debug: $(NAME) debug.c
|
||||||
@gcc debug.c -I $(INC_DIR) -Wall -Wextra -Werror -L. -lfts -o debug
|
@gcc debug.c -I $(INC_DIR) -L. -lfts -o debug
|
||||||
@printf "\r\033[38;5;117m✓ MAKE debug\033[0m\033[K\n"
|
@printf "\r\033[38;5;117m✓ MAKE debug\033[0m\033[K\n"
|
||||||
|
|
||||||
run-dbg: debug
|
run-dbg: debug
|
||||||
|
|
|
||||||
|
|
@ -2,5 +2,5 @@
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
ft_puts("hello\0");
|
return (ft_puts("h2g2"));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,22 +12,25 @@ section .text
|
||||||
_ft_putchar:
|
_ft_putchar:
|
||||||
ft_putchar:
|
ft_putchar:
|
||||||
; save c value
|
; save c value
|
||||||
push rdi
|
push rdi
|
||||||
|
|
||||||
; write(STDOUT, char, 1)
|
; int write(int fd, char *str, size_t len)
|
||||||
mov rdi, STDOUT
|
lea rsi, [char] ; char *str
|
||||||
lea rsi, [rdi]
|
mov [rsi], dil
|
||||||
mov rdx, 1
|
mov rdi, STDOUT ; int fd
|
||||||
mov rax, WRITE
|
mov rdx, 1 ; size_t len
|
||||||
|
mov rax, WRITE
|
||||||
syscall
|
syscall
|
||||||
|
|
||||||
cmp rax, 0
|
cmp rax, 0
|
||||||
jle err
|
jl err
|
||||||
|
|
||||||
; success case then return c
|
; success case then return c
|
||||||
pop rax
|
pop rax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
err:
|
err:
|
||||||
; error case then return -1
|
; error case then return -1
|
||||||
mov rax, -1
|
pop rax
|
||||||
|
mov rax, -1
|
||||||
ret
|
ret
|
||||||
|
|
|
||||||
|
|
@ -25,22 +25,21 @@ print_string:
|
||||||
mov rdx, rax ; size_t strlen
|
mov rdx, rax ; size_t strlen
|
||||||
mov rax, WRITE ; WRITE
|
mov rax, WRITE ; WRITE
|
||||||
syscall
|
syscall
|
||||||
jc error
|
cmp rax, 0
|
||||||
|
jl error
|
||||||
|
|
||||||
print_nl:
|
print_nl:
|
||||||
|
; xor rdi, rdi
|
||||||
|
; add rdi, 0xa
|
||||||
mov rdi, 0xa
|
mov rdi, 0xa
|
||||||
call ft_putchar
|
call ft_putchar
|
||||||
test rax, rax
|
cmp rax, 0
|
||||||
jc error ; if write failed, go to error
|
jl error
|
||||||
|
|
||||||
success:
|
success:
|
||||||
mov rax, 0xa ; success returns '\n'
|
mov rax, 0xa ; success returns '\n'
|
||||||
jmp end
|
ret
|
||||||
|
|
||||||
error:
|
error:
|
||||||
pop rax
|
|
||||||
mov rax, -1 ; Return EOF (alias -1) on error
|
mov rax, -1 ; Return EOF (alias -1) on error
|
||||||
jmp end
|
|
||||||
|
|
||||||
end:
|
|
||||||
ret
|
ret
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ ft_strdup:
|
||||||
inc rax
|
inc rax
|
||||||
push rax
|
push rax
|
||||||
mov rdi, rax
|
mov rdi, rax
|
||||||
call _malloc
|
call malloc
|
||||||
cmp rax, 0
|
cmp rax, 0
|
||||||
je end
|
je end
|
||||||
mov rdi, rax
|
mov rdi, rax
|
||||||
|
|
|
||||||
|
|
@ -216,25 +216,32 @@ int test_puts()
|
||||||
int ret, ret_cmp;
|
int ret, ret_cmp;
|
||||||
printf("Original:|"); ret = puts("");printf("|\n");
|
printf("Original:|"); ret = puts("");printf("|\n");
|
||||||
printf("Notre :|"); ret_cmp = ft_puts("");printf("|\n");
|
printf("Notre :|"); ret_cmp = ft_puts("");printf("|\n");
|
||||||
|
#ifdef __APPLE__
|
||||||
if (ret != ret_cmp)
|
if (ret != ret_cmp)
|
||||||
{
|
{
|
||||||
printf("FAILED: %d vs %d\n", ret, ret_cmp);
|
printf("FAILED: %d should be %d\n", ret_cmp, ret);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef __APPLE__
|
||||||
|
// puts(NULL) segfaults on linux
|
||||||
printf("Original:|"); ret = puts(NULL);printf("|\n");
|
printf("Original:|"); ret = puts(NULL);printf("|\n");
|
||||||
printf("Notre :|"); ret_cmp = ft_puts(NULL);printf("|\n");
|
printf("Notre :|"); ret_cmp = ft_puts(NULL);printf("|\n");
|
||||||
if (ret != ret_cmp)
|
if (ret != ret_cmp)
|
||||||
{
|
{
|
||||||
printf("FAILED: %d vs %d\n", ret, ret_cmp);
|
printf("FAILED: %d should be %d\n", ret_cmp, ret);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
printf("Notre :|"); ret = ft_puts(str);printf("|\n");
|
printf("Notre :|"); ret = ft_puts(str);printf("|\n");
|
||||||
printf("Original:|"); ret_cmp = puts(str);printf("|\n");
|
printf("Original:|"); ret_cmp = puts(str);printf("|\n");
|
||||||
|
#ifdef __APPLE__
|
||||||
if (ret != ret_cmp)
|
if (ret != ret_cmp)
|
||||||
{
|
{
|
||||||
printf("FAILED: %d vs %d\n", ret, ret_cmp);
|
printf("FAILED: %d should be %d\n", ret_cmp, ret);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -484,6 +491,7 @@ int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
(void)argc;
|
(void)argc;
|
||||||
(void)argv;
|
(void)argv;
|
||||||
|
setbuf(stdout, NULL);
|
||||||
ft_putstr("\nPART 1:\n_______\n");
|
ft_putstr("\nPART 1:\n_______\n");
|
||||||
if (test_bzero() ||
|
if (test_bzero() ||
|
||||||
test_isdigit() ||
|
test_isdigit() ||
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue