48#define _GL_ARG_NONNULL(params)
58#define SSIZE_MAX ((ssize_t)(SIZE_MAX / 2))
62#include "unlocked-io.h"
63#define getc_maybe_unlocked(fp) getc(fp)
64#elif !HAVE_FLOCKFILE || !HAVE_FUNLOCKFILE || !HAVE_DECL_GETC_UNLOCKED
67#define flockfile(x) ((void)0)
68#define funlockfile(x) ((void)0)
69#define getc_maybe_unlocked(fp) getc(fp)
71#define getc_maybe_unlocked(fp) getc_unlocked(fp)
80ssize_t
getdelim(
char **lineptr,
size_t *
n,
int delimiter, FILE *fp)
97 new_lineptr = (
char *)realloc(*lineptr, *
n);
103 *lineptr = new_lineptr;
118 if(cur_len + 1 >= *
n)
121 size_t needed = 2 * *
n + 1;
124 if(needed_max < needed) needed = needed_max;
125 if(cur_len + 1 >= needed)
132 new_lineptr = (
char *)realloc(*lineptr, needed);
139 *lineptr = new_lineptr;
143 (*lineptr)[cur_len] =
i;
146 if(
i == delimiter)
break;
148 (*lineptr)[cur_len] =
'\0';
149 result = cur_len ? cur_len : result;
157ssize_t
getline(
char **lineptr,
size_t *
n, FILE *stream)
159 return getdelim(lineptr,
n,
'\n', stream);
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
ssize_t getdelim(char **lineptr, size_t *n, int delimiter, FILE *fp)
#define getc_maybe_unlocked(fp)
ssize_t getline(char **lineptr, size_t *n, FILE *stream)