cerr << "can't write " << fn << ": " << strerror_r(errno, buf, sizeof(buf)) << std::endl;
return -errno;
}
+ int err = write_fd(fd);
+ ::close(fd);
+ return err;
+}
+
+int buffer::list::write_fd(int fd)
+{
for (std::list<ptr>::const_iterator it = _buffers.begin();
it != _buffers.end();
it++) {
int left = it->length();
while (left > 0) {
int r = ::write(fd, c, left);
- if (r < 0) {
- ::close(fd);
+ if (r < 0)
return -errno;
- }
c += r;
left -= r;
}
}
- ::close(fd);
return 0;
}
+
+
void buffer::list::hexdump(std::ostream &out) const
{
out.setf(std::ios::right);
void hexdump(std::ostream &out) const;
int read_file(const char *fn, bool silent=false);
int write_file(const char *fn, int mode=0644);
+ int write_fd(int fd);
__u32 crc32c(__u32 crc) {
for (std::list<ptr>::const_iterator it = _buffers.begin();
it != _buffers.end();
}
assert(fd >= 0);
- // write data
- for (list<bufferptr>::const_iterator it = bl.buffers().begin();
- it != bl.buffers().end();
- it++) {
- int r = ::write(fd, it->c_str(), it->length());
- if (r != (int)it->length())
- derr(0) << "put_bl_ss ::write() returned " << r << " not " << it->length() << dendl;
- if (r < 0) {
- char buf[80];
- derr(0) << "put_bl_ss ::write() errored out, errno is " << strerror_r(errno, buf, sizeof(buf)) << dendl;
- err = -errno;
- break;
- }
- }
+ err = bl.write_fd(fd);
if (sync && !err)
::fsync(fd);