1 #define _GNU_SOURCE
2 #include "stdio_impl.h"
3 #include <string.h>
4 
fgetln(FILE * f,size_t * plen)5 char* 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