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 char *ret = 0, *z; 7 ssize_t l; 8 FLOCK(f); 9 ungetc(getc_unlocked(f), f); 10 if ((z = memchr(f->rpos, '\n', f->rend - f->rpos))) { 11 ret = (char*)f->rpos; 12 *plen = ++z - ret; 13 f->rpos = (void*)z; 14 } else if ((l = getline(&f->getln_buf, (size_t[]){}, f)) > 0) { 15 *plen = l; 16 ret = f->getln_buf; 17 } 18 FUNLOCK(f); 19 return ret; 20 } 21