aboutsummaryrefslogtreecommitdiff
path: root/rush02/ex00/helper.c
diff options
context:
space:
mode:
Diffstat (limited to 'rush02/ex00/helper.c')
-rw-r--r--rush02/ex00/helper.c106
1 files changed, 106 insertions, 0 deletions
diff --git a/rush02/ex00/helper.c b/rush02/ex00/helper.c
new file mode 100644
index 0000000..e29eb47
--- /dev/null
+++ b/rush02/ex00/helper.c
@@ -0,0 +1,106 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* helper.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: cacharle <cacharle@student.42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2019/07/20 07:25:21 by cacharle #+# #+# */
+/* Updated: 2019/07/21 08:23:41 by cacharle ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include "include.h"
+
+/*
+** Read an already openned file in `file`
+** return the file_size (-1 if a error occurs)
+*/
+
+int read_file(int fildes, char **file_ptr)
+{
+ char buf[BUF_SIZE];
+ int file_size;
+ int read_size;
+
+ file_size = 0;
+ while ((read_size = read(fildes, buf, BUF_SIZE)))
+ {
+ if (read_size < 0)
+ return (-1);
+ *file_ptr = ft_memcat(*file_ptr, buf, file_size, read_size);
+ file_size += read_size;
+ }
+ return (file_size);
+}
+
+/*
+** Concatenate buf[buf_size] into file[file_size]
+** Create a copy of the file, free file,
+** reallocate it with sufficient memory for the concatenation
+** copy each character of file_copy then buf into file
+** free file_copy
+*/
+
+char *ft_memcat(char *file, char buf[BUF_SIZE], int file_size,
+ int buf_size)
+{
+ int i;
+ char *file_copy;
+
+ if ((file_copy = malloc(sizeof(char) * (file_size + 1))) == NULL)
+ return (NULL);
+ i = -1;
+ while (++i < file_size)
+ file_copy[i] = file[i];
+ free(file);
+ if ((file = malloc(sizeof(char) * (file_size + buf_size + 1))) == NULL)
+ return (NULL);
+ i = 0;
+ while (i < file_size)
+ {
+ file[i] = file_copy[i];
+ i++;
+ }
+ free(file_copy);
+ while (i < file_size + buf_size)
+ {
+ file[i] = buf[i - file_size];
+ i++;
+ }
+ return (file);
+}
+
+char *ft_strndup(char *src, int n)
+{
+ int i;
+ char *dup_ptr;
+
+ dup_ptr = (char*)malloc(sizeof(char) * (n + 1));
+ if (dup_ptr == NULL)
+ return (NULL);
+ i = 0;
+ while (src[i] && i < n)
+ {
+ dup_ptr[i] = src[i];
+ i++;
+ }
+ dup_ptr[i] = '\0';
+ return (dup_ptr);
+}
+
+/*
+** Print a string char by char on the standard output
+*/
+
+void ft_putstr(char *str)
+{
+ while (*str)
+ {
+ write(1, str, 1);
+ str++;
+ }
+}