add SPE FPU support to powerpc-sf
[musl] / src / stdio / fgets.c
index cf5b103..6171f39 100644 (file)
@@ -10,23 +10,27 @@ char *fgets(char *restrict s, int n, FILE *restrict f)
        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;
        }
 
-       FLOCK(f);
-
        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 (f->rpos != f->rend) {
+                       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;