X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=strbuf.c;h=c606f339d6d51a31e49870144c58297a656fede5;hb=8b2707101aa52d4da98becea0aa910de13768488;hp=bbaf32eef6b0b36ea52390be3aee2ffab7f24f13;hpb=961abca02c532626df631c851688ec433095d93d;p=thirdparty%2Fgit.git diff --git a/strbuf.c b/strbuf.c index bbaf32eef6..c606f339d6 100644 --- a/strbuf.c +++ b/strbuf.c @@ -364,19 +364,19 @@ ssize_t strbuf_read(struct strbuf *sb, int fd, size_t hint) strbuf_grow(sb, hint ? hint : 8192); for (;;) { - ssize_t cnt; + ssize_t want = sb->alloc - sb->len - 1; + ssize_t got = read_in_full(fd, sb->buf + sb->len, want); - cnt = xread(fd, sb->buf + sb->len, sb->alloc - sb->len - 1); - if (cnt < 0) { + if (got < 0) { if (oldalloc == 0) strbuf_release(sb); else strbuf_setlen(sb, oldlen); return -1; } - if (!cnt) + sb->len += got; + if (got < want) break; - sb->len += cnt; strbuf_grow(sb, 8192); }