Index: fusl/src/stdio/fgets.c |
diff --git a/fusl/src/stdio/fgets.c b/fusl/src/stdio/fgets.c |
index d3f9819e82eec3a5707805d5ae5b661a78adec30..cf967bbe644300291eb2bbd6db65b1c82d8334cc 100644 |
--- a/fusl/src/stdio/fgets.c |
+++ b/fusl/src/stdio/fgets.c |
@@ -1,46 +1,50 @@ |
#include "stdio_impl.h" |
#include <string.h> |
-#define MIN(a,b) ((a)<(b) ? (a) : (b)) |
- |
-char *fgets(char *restrict s, int n, FILE *restrict f) |
-{ |
- char *p = s; |
- unsigned char *z; |
- size_t k; |
- int c; |
- |
- FLOCK(f); |
- |
- if (n--<=1) { |
- f->mode |= f->mode-1; |
- FUNLOCK(f); |
- if (n) return 0; |
- *s = 0; |
- return s; |
- } |
- |
- while (n) { |
- z = memchr(f->rpos, '\n', f->rend - f->rpos); |
- k = z ? z - f->rpos + 1 : f->rend - f->rpos; |
- k = MIN(k, n); |
- memcpy(p, f->rpos, k); |
- f->rpos += k; |
- p += k; |
- n -= k; |
- if (z || !n) break; |
- if ((c = getc_unlocked(f)) < 0) { |
- if (p==s || !feof(f)) s = 0; |
- break; |
- } |
- n--; |
- if ((*p++ = c) == '\n') break; |
- } |
- if (s) *p = 0; |
- |
- FUNLOCK(f); |
- |
- return s; |
+#define MIN(a, b) ((a) < (b) ? (a) : (b)) |
+ |
+char* fgets(char* restrict s, int n, FILE* restrict f) { |
+ char* p = s; |
+ unsigned char* z; |
+ size_t k; |
+ int c; |
+ |
+ FLOCK(f); |
+ |
+ if (n-- <= 1) { |
+ f->mode |= f->mode - 1; |
+ FUNLOCK(f); |
+ if (n) |
+ return 0; |
+ *s = 0; |
+ return s; |
+ } |
+ |
+ while (n) { |
+ z = memchr(f->rpos, '\n', f->rend - f->rpos); |
+ k = z ? z - f->rpos + 1 : f->rend - f->rpos; |
+ k = MIN(k, n); |
+ memcpy(p, f->rpos, k); |
+ f->rpos += k; |
+ p += k; |
+ n -= k; |
+ if (z || !n) |
+ break; |
+ if ((c = getc_unlocked(f)) < 0) { |
+ if (p == s || !feof(f)) |
+ s = 0; |
+ break; |
+ } |
+ n--; |
+ if ((*p++ = c) == '\n') |
+ break; |
+ } |
+ if (s) |
+ *p = 0; |
+ |
+ FUNLOCK(f); |
+ |
+ return s; |
} |
weak_alias(fgets, fgets_unlocked); |