- buf = talloc_size(ctx, bufsize);
- if (!buf)
- goto err;
-
- do {
- p = buf + filesize;
- sz = read(fd, p, bufsize);
- if (sz < 0 && errno == EAGAIN) {
- continue;
- } else if (sz == 0) {
- break;
+ for (p = buf, total = 0; ; p = buf + count) {
+ count = read(fd, p, sizeof(buf) - total);
+ if (count < 0) {
+ if (errno == EAGAIN || errno == EWOULDBLOCK)
+ continue;
+
+ pb_log("%s: read failed %s: (%ld) %s\n", __func__, path,
+ count, strerror(errno));
+ goto exit;
+ }
+ if (p >= (buf + sizeof(buf))) {
+ pb_log("%s: buffer full %s: (%ld)\n", __func__, path,
+ sizeof(buf));
+ goto exit;