From: Michael Adam Date: Fri, 20 Jul 2007 16:31:32 +0000 (+0000) Subject: r23980: Fix one more use of pwrite in expand_file. X-Git-Tag: samba-4.0.0alpha6~801^2~5290 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=84f352caa58a5a903087ff93e56113a07a7840aa;p=thirdparty%2Fsamba.git r23980: Fix one more use of pwrite in expand_file. Michael (This used to be commit de0ef9134650e3e7cc5b5cfec9e8dd8510bd6677) --- diff --git a/source3/lib/tdb/common/io.c b/source3/lib/tdb/common/io.c index a24b5e24a2d..df924a9dcd7 100644 --- a/source3/lib/tdb/common/io.c +++ b/source3/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;