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