diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-02-13 03:13:57 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-02-13 03:13:57 +0100 |
| commit | 8521c9e02b2bcb9f6437a111cba3f395236f8e22 (patch) | |
| tree | 06174b3f89357968feeca6687f8209586e7e01e5 | |
| parent | e6f53e82b0f8ae1cff3749ea3476c2074c325d7b (diff) | |
| download | libft-8521c9e02b2bcb9f6437a111cba3f395236f8e22.tar.gz libft-8521c9e02b2bcb9f6437a111cba3f395236f8e22.tar.bz2 libft-8521c9e02b2bcb9f6437a111cba3f395236f8e22.zip | |
Added ft_memmem and ft_memset_pattern4, not tested
| -rw-r--r-- | .gitignore | 2 | ||||
| -rw-r--r-- | .travis.yml | 2 | ||||
| -rw-r--r-- | include/libft_mem.h | 9 | ||||
| -rw-r--r-- | include/libft_types.h | 2 | ||||
| -rw-r--r-- | src/mem/ft_memmem.c | 54 | ||||
| -rw-r--r-- | src/mem/ft_memset_pattern4.c | 25 | ||||
| -rw-r--r-- | test/include/helper/helper_segfault.h | 1 | ||||
| -rwxr-xr-x | test/libft_test | bin | 53772 -> 0 bytes |
8 files changed, 91 insertions, 4 deletions
@@ -4,6 +4,6 @@ *.ghc *.dSYM a.out -test_libft +libft_test obj/* rendu.makefile diff --git a/.travis.yml b/.travis.yml index 94e4879..71027dd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,4 @@ language: c compiler: gcc -script: make all && make test +script: make all && make -C ./test run_v diff --git a/include/libft_mem.h b/include/libft_mem.h index af3f4b5..a15c020 100644 --- a/include/libft_mem.h +++ b/include/libft_mem.h @@ -6,13 +6,16 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/01/31 10:35:57 by cacharle #+# #+# */ -/* Updated: 2020/02/10 02:55:38 by cacharle ### ########.fr */ +/* Updated: 2020/02/13 03:11:09 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ #ifndef LIBFT_MEM_H # define LIBFT_MEM_H +# include <stddef.h> +# include "libft_types.h" + void ft_bzero(void *s, size_t n); void *ft_memset(void *s, int c, size_t n); void *ft_memcpy(void *dest, const void *src, size_t n); @@ -22,6 +25,10 @@ void *ft_memchr(const void *s, int c, size_t n); int ft_memcmp(const void *s1, const void *s2, size_t n); void *ft_calloc(size_t count, size_t size); void ft_memswap(void *a, void *b, size_t size); +void *ft_memmem(const void *big, size_t big_len, + const void *little, size_t little_len); +void ft_memset_pattern4(void *b, const void *pattern4, + size_t len); /* ** bloat ? diff --git a/include/libft_types.h b/include/libft_types.h index 8df4e00..20fe0f7 100644 --- a/include/libft_types.h +++ b/include/libft_types.h @@ -6,7 +6,7 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/01/31 10:36:56 by cacharle #+# #+# */ -/* Updated: 2020/01/31 10:37:01 by cacharle ### ########.fr */ +/* Updated: 2020/02/13 03:07:56 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/mem/ft_memmem.c b/src/mem/ft_memmem.c new file mode 100644 index 0000000..b69efa0 --- /dev/null +++ b/src/mem/ft_memmem.c @@ -0,0 +1,54 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memmem.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/02/13 01:54:55 by cacharle #+# #+# */ +/* Updated: 2020/02/13 03:13:23 by cacharle ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft_mem.h" + +#define BAD_TABLE_SIZE 256 + +static void st_bad_table_init(size_t bad_table[BAD_TABLE_SIZE], + const char *little, size_t little_len) +{ + size_t i; + + ft_memset_pattern4(bad_table, &little_len, 4 * BAD_TABLE_SIZE); + i = 0; + while (i < little_len) + { + bad_table[(int)little[i]] = little_len - i - 1; + i++; + } +} + +static t_ftbool st_memcmp_end(const void *s1, const void *s2, size_t n) +{ + while (n-- > 0) + if (((t_ftbyte*)s1)[n] != ((t_ftbyte*)s2)[n]) + return (FALSE); + return (TRUE); +} + +void *ft_memmem(const void *big, size_t big_len, + const void *little, size_t little_len) +{ + size_t i; + size_t bad_table[BAD_TABLE_SIZE]; + + st_bad_table_init(bad_table, little, little_len); + i = 0; + while (i < big_len - little_len) + { + if (st_memcmp_end((t_ftbyte*)big + i, little, little_len)) + return ((t_ftbyte*)big + i); + i += bad_table[(int)(((t_ftbyte*)big)[i + big_len] - 1)]; + } + return (NULL); +} diff --git a/src/mem/ft_memset_pattern4.c b/src/mem/ft_memset_pattern4.c new file mode 100644 index 0000000..d16f420 --- /dev/null +++ b/src/mem/ft_memset_pattern4.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memset_pattern4.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/02/13 03:06:41 by cacharle #+# #+# */ +/* Updated: 2020/02/13 03:10:42 by cacharle ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft_mem.h" + +void ft_memset_pattern4(void *b, const void *pattern4, size_t len) +{ + int i; + + i = len / 4; + while (i-- > 0) + ((int*)b)[i] = *(int*)pattern4; + i = len % 4; + while (i-- > 0) + ((int*)b)[len / 4 + i] = ((t_ftbyte*)pattern4)[i]; +} diff --git a/test/include/helper/helper_segfault.h b/test/include/helper/helper_segfault.h index 99351af..d638a70 100644 --- a/test/include/helper/helper_segfault.h +++ b/test/include/helper/helper_segfault.h @@ -4,6 +4,7 @@ extern int helper_segfault_pid; # define TEST_ASSERT_SEGFAULT(code) do { \ + fflush(stdout); \ if ((helper_segfault_pid = fork()) < 0) \ exit(EXIT_FAILURE); \ if (helper_segfault_pid == 0) \ diff --git a/test/libft_test b/test/libft_test Binary files differdeleted file mode 100755 index 3af5a2f..0000000 --- a/test/libft_test +++ /dev/null |
