rework langinfo code for ABI compat and for use by time code
[musl] / src / stdio / fgetln.c
1 #include "stdio_impl.h"
2 #include <string.h>
3
4 char *fgetln(FILE *f, size_t *plen)
5 {
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[]){0}, f)) > 0) {
15                 *plen = l;
16                 ret = f->getln_buf;
17         }
18         FUNLOCK(f);
19         return ret;
20 }