aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-02-13 03:13:57 +0100
committerCharles <sircharlesaze@gmail.com>2020-02-13 03:13:57 +0100
commit8521c9e02b2bcb9f6437a111cba3f395236f8e22 (patch)
tree06174b3f89357968feeca6687f8209586e7e01e5
parente6f53e82b0f8ae1cff3749ea3476c2074c325d7b (diff)
downloadlibft-8521c9e02b2bcb9f6437a111cba3f395236f8e22.tar.gz
libft-8521c9e02b2bcb9f6437a111cba3f395236f8e22.tar.bz2
libft-8521c9e02b2bcb9f6437a111cba3f395236f8e22.zip
Added ft_memmem and ft_memset_pattern4, not tested
-rw-r--r--.gitignore2
-rw-r--r--.travis.yml2
-rw-r--r--include/libft_mem.h9
-rw-r--r--include/libft_types.h2
-rw-r--r--src/mem/ft_memmem.c54
-rw-r--r--src/mem/ft_memset_pattern4.c25
-rw-r--r--test/include/helper/helper_segfault.h1
-rwxr-xr-xtest/libft_testbin53772 -> 0 bytes
8 files changed, 91 insertions, 4 deletions
diff --git a/.gitignore b/.gitignore
index 35d1ada..cf98940 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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
deleted file mode 100755
index 3af5a2f..0000000
--- a/test/libft_test
+++ /dev/null
Binary files differ