[Libguestfs] [PATCH] daemon/Win32: Replace pread on platforms that don't have this function.

Jim Meyering jim at meyering.net
Wed Nov 25 13:44:17 UTC 2009


Richard W.M. Jones wrote:
> Subject: [PATCH 1/2] daemon/Win32: Replace pread on platforms that don't have this function.
>
> ---
>  daemon/configure.ac |    1 +
>  daemon/file.c       |   20 ++++++++++++++++++++
>  2 files changed, 21 insertions(+), 0 deletions(-)
>
> diff --git a/daemon/configure.ac b/daemon/configure.ac
> index 89bd800..e70f05e 100644
> --- a/daemon/configure.ac
> +++ b/daemon/configure.ac
> @@ -180,6 +180,7 @@ AC_CHECK_FUNCS([\
>          lremovexattr \
>          mknod \
>          posix_fallocate \
> +        pread \
>          removexattr \
>          setxattr \
>          sync])

I'm adding a pread module to gnulib right now.
Once that's in, you can drop the rest of this patch, below.

> diff --git a/daemon/file.c b/daemon/file.c
> index 252c02c..e6bbc19 100644
> --- a/daemon/file.c
> +++ b/daemon/file.c
> @@ -402,6 +402,7 @@ do_pread (const char *path, int count, int64_t offset, size_t *size_r)
>      return NULL;
>    }
>
> +#ifdef HAVE_PREAD
>    r = pread (fd, buf, count, offset);
>    if (r == -1) {
>      reply_with_perror ("pread: %s", path);
> @@ -409,6 +410,25 @@ do_pread (const char *path, int count, int64_t offset, size_t *size_r)
>      free (buf);
>      return NULL;
>    }
> +#else
> +  if (lseek (fd, offset, SEEK_SET) == (off_t) -1) {
> +    reply_with_perror ("lseek: %s", path);
> +    close (fd);
> +    free (buf);
> +    return NULL;
> +  }
> +  r = read (fd, buf, count);
> +  if (r == -1) {
> +    reply_with_perror ("read: %s", path);
> +    close (fd);
> +    free (buf);
> +    return NULL;
> +  }
> +  /* The real pread function would reset the file offset here,
> +   * but we don't care since we're just about to close the
> +   * file anyway.
> +   */
> +#endif /* !HAVE_PREAD */
>
>    if (close (fd) == -1) {
>      reply_with_perror ("close: %s", path);




More information about the Libguestfs mailing list