Index: fusl/src/stdio/fgetln.c |
diff --git a/fusl/src/stdio/fgetln.c b/fusl/src/stdio/fgetln.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..afe12b5dfe024add1739f80d5982eefef76d7567 |
--- /dev/null |
+++ b/fusl/src/stdio/fgetln.c |
@@ -0,0 +1,21 @@ |
+#define _GNU_SOURCE |
+#include "stdio_impl.h" |
+#include <string.h> |
+ |
+char *fgetln(FILE *f, size_t *plen) |
+{ |
+ char *ret = 0, *z; |
+ ssize_t l; |
+ FLOCK(f); |
+ ungetc(getc_unlocked(f), f); |
+ if ((z=memchr(f->rpos, '\n', f->rend - f->rpos))) { |
+ ret = (char *)f->rpos; |
+ *plen = ++z - ret; |
+ f->rpos = (void *)z; |
+ } else if ((l = getline(&f->getln_buf, (size_t[]){0}, f)) > 0) { |
+ *plen = l; |
+ ret = f->getln_buf; |
+ } |
+ FUNLOCK(f); |
+ return ret; |
+} |