support archs with no renameat syscall, only renameat2
[musl] / src / stdio / fgets.c
index d3f9819..6171f39 100644 (file)
@@ -21,14 +21,16 @@ char *fgets(char *restrict s, int n, FILE *restrict 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;