size_t _ft_ios_copy_stock(t_ios *ios, t_lst *stock, void *dst, size_t n) { size_t i; size_t size; i = 0; while (i < n && stock != NULL) { size = BUFFER_BUFF_SIZE - ios->_cursor; ft_memcpy(dst + i, stock->data + ios->_cursor, ft_sizemin(size, n - i)); ios->_cursor = 0; ft_lstshift(&stock, &free); i += size; } if (i == n) ios->_cursor = size; return (i); }
static char *get_copy(t_list **list, int pos, int *start) { int i; char *str; int max; i = 0; max = pos - *start; str = (char *)malloc(sizeof(char) * (max + 1)); while (i <= max && list != NULL && *list != NULL) { ft_strncpy(&str[i], (char *)(*list)->content + *start, max - i); i += BUF_SIZE - *start; if (i <= max) ft_lstshift(list); *start = 0; } *start = pos % BUF_SIZE + 1; str[max] = '\0'; return (str); }
static char *make_str(t_fd *fdatas, int const line_end) { int i; int max; char *str; i = 0; max = (line_end - fdatas->start); if (!(str = (char *)malloc(sizeof(char) * (max + 1)))) return (NULL); while (i < max) { ft_strncpy(&(str[i]), fdatas->lst->content + fdatas->start, (max - i)); i += BUFF_SIZE - fdatas->start; if (i <= max) ft_lstshift(&(fdatas->lst)); fdatas->start = 0; } str[max] = '\0'; fdatas->start = line_end % BUFF_SIZE + 1; return (str); }