提交 a8182206 编写于 作者: D Daniel P. Berrange

Fix errno return in safezero()

Most of the safezero() implementations return -1 on error,
setting errno. The safezero() impl using posix_fallocate()
though returned a positive errno value on error (due to
the unusual API contract of posix_fallocate() compared to
most syscall APIs).

* src/util/util.c: Ensure safezero() returns -1 and sets
  errno on error.
* src/storage/storage_backend.c: Change safezero != 0 to
  < 0 for detecting errors
上级 c24c07f4
......@@ -331,7 +331,7 @@ createRawFile(int fd, virStorageVolDefPtr vol,
if (bytes > remain)
bytes = remain;
if (safezero(fd, 0, vol->allocation - remain, bytes) != 0) {
if (safezero(fd, 0, vol->allocation - remain, bytes) < 0) {
ret = -errno;
virReportSystemError(errno, _("cannot fill file '%s'"),
vol->target.path);
......@@ -340,7 +340,7 @@ createRawFile(int fd, virStorageVolDefPtr vol,
remain -= bytes;
}
} else { /* No progress bars to be shown */
if (safezero(fd, 0, 0, remain) != 0) {
if (safezero(fd, 0, 0, remain) < 0) {
ret = -errno;
virReportSystemError(errno, _("cannot fill file '%s'"),
vol->target.path);
......
......@@ -136,7 +136,11 @@ safewrite(int fd, const void *buf, size_t count)
#ifdef HAVE_POSIX_FALLOCATE
int safezero(int fd, int flags ATTRIBUTE_UNUSED, off_t offset, off_t len)
{
return posix_fallocate(fd, offset, len);
int ret = posix_fallocate(fd, offset, len);
if (ret == 0)
return 0;
errno = ret;
return -1;
}
#else
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册