diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-05-11 16:14:38 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-05-11 16:14:38 +0200 |
| commit | b9f000a80cbba38b8f21c9737a42f07573ec7b91 (patch) | |
| tree | 7068e7188dab0a710ae79d71800b329ab655e3eb /src/io | |
| parent | a4b9cda7d6733f2b077f8586e3b3e69351e7dfba (diff) | |
| download | libft-b9f000a80cbba38b8f21c9737a42f07573ec7b91.tar.gz libft-b9f000a80cbba38b8f21c9737a42f07573ec7b91.tar.bz2 libft-b9f000a80cbba38b8f21c9737a42f07573ec7b91.zip | |
Moved util/ft_split* in str, Added ft_memjoin and ft_memjoinf1, Modified ft_getfile so that it can read non-ascii file
Diffstat (limited to 'src/io')
| -rw-r--r-- | src/io/ft_getfile.c | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/src/io/ft_getfile.c b/src/io/ft_getfile.c index 891ea51..d3f697c 100644 --- a/src/io/ft_getfile.c +++ b/src/io/ft_getfile.c @@ -6,32 +6,35 @@ /* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/05/11 09:52:32 by charles #+# #+# */ -/* Updated: 2020/05/11 10:15:12 by charles ### ########.fr */ +/* Updated: 2020/05/11 16:09:31 by charles ### ########.fr */ /* */ /* ************************************************************************** */ #include "libft_io.h" -char *ft_getfile(int fd) +/* +** \brief Read a file in a memory buffer +** \param fd File descriptor to read from +** \param mem Pointer to mem struct (buffer and buffer size) +** \return -1 on error, 0 otherwise +*/ + +int ft_getfile(int fd, t_ftmem *mem) { - char *s; - char buf[FT_GETFILE_BUFFER_SIZE + 1]; + char buf[FT_GETFILE_BUFFER_SIZE]; int ret; - if (fd < 0 || fd > OPEN_MAX) - return (NULL); - if ((s = ft_strdup("")) == NULL) - return (NULL); + if (fd < 0 || fd > OPEN_MAX || mem == NULL + || (mem->data = malloc(1)) == NULL) + return (-1); + mem->size = 0; while ((ret = read(fd, buf, FT_GETFILE_BUFFER_SIZE)) > 0) { - buf[ret] = '\0'; - if ((s = ft_strjoinf(s, buf, FT_STRJOINF_FST)) == NULL) - return (NULL); + if ((mem->data = ft_memjoinf1(mem->data, mem->size, buf, ret)) == NULL) + return (-1); + mem->size += ret; } if (ret == -1) - { - free(s); - return (NULL); - } - return (s); + free(mem->data); + return (ret); } |
