1 #define _GNU_SOURCE 2 #include "stdio_impl.h" 3 #include <string.h> 4 fgetln(FILE * f,size_t * plen)5char *fgetln(FILE *f, size_t *plen) 6 { 7 char *ret = 0, *z; 8 ssize_t l; 9 FLOCK(f); 10 ungetc(getc_unlocked(f), f); 11 if (f->rend && (z=memchr(f->rpos, '\n', f->rend - f->rpos))) { 12 ret = (char *)f->rpos; 13 *plen = ++z - ret; 14 f->rpos = (void *)z; 15 } else if ((l = getline(&f->getln_buf, (size_t[]){0}, f)) > 0) { 16 *plen = l; 17 ret = f->getln_buf; 18 } 19 FUNLOCK(f); 20 return ret; 21 } 22