diff options
author | Michael Adam <obnox@samba.org> | 2007-07-20 16:31:32 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 15:01:15 -0500 |
commit | 0673a182771878892b584efc5316e4029a8fee47 (patch) | |
tree | c592f187865639c7e053473b5fb631e04abf1e84 | |
parent | 7002ed291a5831e0f5f89b038ab63dc31ea3287f (diff) | |
download | samba-0673a182771878892b584efc5316e4029a8fee47.tar.gz samba-0673a182771878892b584efc5316e4029a8fee47.tar.bz2 samba-0673a182771878892b584efc5316e4029a8fee47.zip |
r23980: Fix one more use of pwrite in expand_file.
Michael
(This used to be commit b97acdc67b1a55529e69bb7b2b78a317a34b1eba)
-rw-r--r-- | source4/lib/tdb/common/io.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/source4/lib/tdb/common/io.c b/source4/lib/tdb/common/io.c index a24b5e24a2..df924a9dcd 100644 --- a/source4/lib/tdb/common/io.c +++ b/source4/lib/tdb/common/io.c @@ -220,7 +220,16 @@ static int tdb_expand_file(struct tdb_context *tdb, tdb_off_t size, tdb_off_t ad if (ftruncate(tdb->fd, size+addition) == -1) { char b = 0; - if (pwrite(tdb->fd, &b, 1, (size+addition) - 1) != 1) { + ssize_t written = pwrite(tdb->fd, &b, 1, (size+addition) - 1); + if (written == 0) { + /* try once more, potentially revealing errno */ + written = pwrite(tdb->fd, &b, 1, (size+addition) - 1); + } + if (written == 0) { + /* again - give up, guessing errno */ + errno = ENOSPC; + } + if (written != 1) { TDB_LOG((tdb, TDB_DEBUG_FATAL, "expand_file to %d failed (%s)\n", size+addition, strerror(errno))); return -1; |