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__