{
char buf[4];
- int r = safe_read(fd, buf, 4);
+ int r = safe_read_exact(fd, buf, 4);
if (r < 0)
return r;
return -EINVAL;
char sbuf[len];
- r = safe_read(fd, sbuf, len);
+ r = safe_read_exact(fd, sbuf, len);
if (r < 0)
return r;
out->assign(sbuf, len);
}
char buf[15];
- r = safe_read(fd, buf, strlen(RBD_DIFF_BANNER));
+ r = safe_read_exact(fd, buf, strlen(RBD_DIFF_BANNER));
if (r < 0)
goto done;
buf[strlen(RBD_DIFF_BANNER)] = '\0';
while (true) {
__u8 tag;
- r = safe_read(fd, &tag, 1);
- if (r <= 0)
+ r = safe_read_exact(fd, &tag, 1);
+ if (r < 0) {
goto done;
+ }
if (tag == 'e') {
dout(2) << " end diff" << dendl;
} else if (tag == 's') {
uint64_t end_size;
char buf[8];
- r = safe_read(fd, buf, 8);
+ r = safe_read_exact(fd, buf, 8);
if (r < 0)
goto done;
bufferlist bl;
} else if (tag == 'w' || tag == 'z') {
uint64_t len;
char buf[16];
- r = safe_read(fd, buf, 16);
+ r = safe_read_exact(fd, buf, 16);
if (r < 0)
goto done;
bufferlist bl;
if (tag == 'w') {
bufferptr bp = buffer::create(len);
- r = safe_read(fd, bp.c_str(), len);
+ r = safe_read_exact(fd, bp.c_str(), len);
if (r < 0)
goto done;
bufferlist data;