From d9ec9c693756ddabcc8f243c083b4f169d9e73f8 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Thu, 2 Apr 2009 18:42:33 +0000 Subject: [PATCH] Fix mingw32 portability --- ChangeLog | 7 +++++++ configure.in | 4 ++-- src/util.c | 11 ++++++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3e84344131..4bcaf13eb1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Thu Apr 2 19:41:00 BST 2009 Daniel P. Berrange + + Mingw portability fixes + * src/util.c: Fix virFileResolveLink for Win32 platform. + Fix offset usage in safezero for mmap() and write() impls + * configure.in: Add check for readlink() + Thu Apr 2 15:18:00 CEST 2009 Daniel Veillard * docs/schemas/domain.rng: some missing disk bus values and cleanups diff --git a/configure.in b/configure.in index 392f2b9f05..70a6b1ac77 100644 --- a/configure.in +++ b/configure.in @@ -72,7 +72,7 @@ dnl Use --disable-largefile if you don't want this. AC_SYS_LARGEFILE dnl Availability of various common functions (non-fatal if missing). -AC_CHECK_FUNCS([cfmakeraw regexec uname sched_getaffinity getuid getgid posix_fallocate mmap]) +AC_CHECK_FUNCS([cfmakeraw regexec uname sched_getaffinity getuid getgid posix_fallocate mmap readlink]) dnl Availability of various not common threadsafe functions AC_CHECK_FUNCS([strerror_r strtok_r getmntent_r getgrnam_r getpwuid_r]) @@ -937,8 +937,8 @@ if test "$with_storage_scsi" = "check"; then AC_DEFINE_UNQUOTED([WITH_STORAGE_SCSI], 1, [whether SCSI backend for storage driver is enabled]) - AM_CONDITIONAL([WITH_STORAGE_SCSI], [test "$with_storage_scsi" = "yes"]) fi +AM_CONDITIONAL([WITH_STORAGE_SCSI], [test "$with_storage_scsi" = "yes"]) LIBPARTED_CFLAGS= diff --git a/src/util.c b/src/util.c index 65088b04c5..5abdbbcec4 100644 --- a/src/util.c +++ b/src/util.c @@ -136,7 +136,7 @@ int safezero(int fd, int flags ATTRIBUTE_UNUSED, off_t offset, off_t len) /* memset wants the mmap'ed file to be present on disk so create a * sparse file */ - r = ftruncate(fd, len); + r = ftruncate(fd, offset + len); if (r < 0) return -errno; @@ -158,6 +158,9 @@ int safezero(int fd, int flags ATTRIBUTE_UNUSED, off_t offset, off_t len) char *buf; unsigned long long remain, bytes; + if (lseek(fd, offset, SEEK_SET) < 0) + return errno; + /* Split up the write in small chunks so as not to allocate lots of RAM */ remain = len; bytes = 1024 * 1024; @@ -949,6 +952,7 @@ int virFileLinkPointsTo(const char *checkLink, int virFileResolveLink(const char *linkpath, char **resultpath) { +#ifdef HAVE_READLINK struct stat st; char *buf; int n; @@ -981,6 +985,11 @@ int virFileResolveLink(const char *linkpath, *resultpath = buf; return 0; +#else + if (!(*resultpath = strdup(linkpath))) + return -ENOMEM; + return 0; +#endif }