[libvirt] [PATCH] Replace truncate() with ftruncate()

Daniel P. Berrange berrange at redhat.com
Wed Feb 8 14:04:35 UTC 2012


From: "Daniel P. Berrange" <berrange at redhat.com>

Mingw32 does not have any truncate() API defined, but it does
have ftruncate(). So replace use of the former with the latter
---
 src/util/storage_file.c |   23 ++++++++++++++++++++---
 1 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/src/util/storage_file.c b/src/util/storage_file.c
index 8260adb..a8661e3 100644
--- a/src/util/storage_file.c
+++ b/src/util/storage_file.c
@@ -939,12 +939,29 @@ virStorageFileFreeMetadata(virStorageFileMetadata *meta)
 int
 virStorageFileResize(const char *path, unsigned long long capacity)
 {
-    if (truncate(path, capacity) < 0) {
+    int fd = -1;
+    int ret = -1;
+
+    if ((fd = open(path, O_RDWR)) < 0) {
+        virReportSystemError(errno, _("Unable to open '%s'"), path);
+        goto cleanup;
+    }
+
+    if (ftruncate(fd, capacity) < 0) {
         virReportSystemError(errno, _("Failed to truncate file '%s'"), path);
-        return -1;
+        goto cleanup;
     }
 
-    return 0;
+    if (VIR_CLOSE(fd) < 0) {
+        virReportSystemError(errno, _("Unable to save '%s'"), path);
+        goto cleanup;
+    }
+
+    ret = 0;
+
+cleanup:
+    VIR_FORCE_CLOSE(fd);
+    return ret;
 }
 
 #ifdef __linux__
-- 
1.7.7.6




More information about the libvir-list mailing list