86 lines
1.9 KiB
C
86 lines
1.9 KiB
C
/* ************************************************************************** */
|
|
/* */
|
|
/* ::: :::::::: */
|
|
/* io.c :+: :+: :+: */
|
|
/* +:+ +:+ +:+ */
|
|
/* By: apago <apago@student.42.fr> +#+ +:+ +#+ */
|
|
/* +#+#+#+#+#+ +#+ */
|
|
/* Created: 2023/04/04 18:23:57 by apago #+# #+# */
|
|
/* Updated: 2023/04/05 19:06:21 by apago ### ########.fr */
|
|
/* */
|
|
/* ************************************************************************** */
|
|
|
|
#include "ft_bsq.h"
|
|
|
|
void copy_bytes(char *dst, char *src, size_t bytes)
|
|
{
|
|
size_t i;
|
|
|
|
i = 0;
|
|
while (i < bytes)
|
|
{
|
|
dst[i] = src[i];
|
|
i++;
|
|
}
|
|
}
|
|
|
|
void ft_memset_int(int *dst, int set, size_t bytes)
|
|
{
|
|
size_t i;
|
|
|
|
i = 0;
|
|
while (i < bytes)
|
|
{
|
|
dst[i] = set;
|
|
i++;
|
|
}
|
|
}
|
|
|
|
int push_bytes(size_t n_read, char **res, size_t *offset, size_t *size)
|
|
{
|
|
char *new_res;
|
|
|
|
if (n_read <= 0)
|
|
return (n_read);
|
|
*offset += n_read;
|
|
if (*offset == *size)
|
|
{
|
|
new_res = malloc(*size * 2);
|
|
if (!new_res)
|
|
return (-1);
|
|
copy_bytes(new_res, *res, *size);
|
|
free(*res);
|
|
*res = new_res;
|
|
*size *= 2;
|
|
}
|
|
return (n_read);
|
|
}
|
|
|
|
char *read_file(int file)
|
|
{
|
|
size_t size;
|
|
size_t offset;
|
|
size_t n_read;
|
|
char *res;
|
|
|
|
offset = 0;
|
|
size = 1024;
|
|
res = malloc(size);
|
|
if (!res)
|
|
return (0);
|
|
while (1)
|
|
{
|
|
n_read = read(file, &res[offset], size - offset);
|
|
n_read = push_bytes(n_read, &res, &offset, &size);
|
|
if (!n_read)
|
|
break ;
|
|
if (n_read < 0)
|
|
{
|
|
free(res);
|
|
return (0);
|
|
}
|
|
}
|
|
res[offset] = 0;
|
|
return (res);
|
|
}
|