[libvirt] PATCH: Fix build on Mingw32

Jim Meyering jim at meyering.net
Tue Mar 3 10:18:45 UTC 2009


Daniel P. Berrange wrote:
> pread() and pwrite() do not exist on mingw, and the nodedevxml2xmltest
> was adding libvirt_driver_qemu.la for some unknown reason - probably a
> cut & paste error. This broke the test compile when qemu was turned off
> as it is on mingw32.

Although the new code doesn't have exactly the same semantics as
pread/pwrite (new code doesn't restore each file pointer to its
original position), it looks like no caller relied on the file
pointers remaining unchanged.

On a related note, don't these need EAGAIN handling?
Maybe EINTR, too.

> diff --git a/src/pci.c b/src/pci.c
> --- a/src/pci.c
> +++ b/src/pci.c
> @@ -156,7 +156,8 @@ pciRead(pciDevice *dev, unsigned pos, ui
>      if (pciOpenConfig(dev) < 0)
>          return -1;
>
> -    if (pread(dev->fd, buf, buflen, pos) < 0) {
> +    if (lseek(dev->fd, pos, SEEK_SET) != pos ||
> +        read(dev->fd, buf, buflen) < 0) {
>          char ebuf[1024];
>          VIR_WARN(_("Failed to read from '%s' : %s"), dev->path,
>                   virStrerror(errno, ebuf, sizeof(ebuf)));
> @@ -195,7 +196,8 @@ pciWrite(pciDevice *dev, unsigned pos, u
>      if (pciOpenConfig(dev) < 0)
>          return -1;
>
> -    if (pwrite(dev->fd, buf, buflen, pos) < 0) {
> +    if (lseek(dev->fd, pos, SEEK_SET) != pos ||
> +        write(dev->fd, buf, buflen) < 0) {
>          char ebuf[1024];
>          VIR_WARN(_("Failed to write to '%s' : %s"), dev->path,
>                   virStrerror(errno, ebuf, sizeof(ebuf)));
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -185,7 +185,7 @@ endif
>  nodedevxml2xmltest_SOURCES = \
>  	nodedevxml2xmltest.c \
>  	testutils.c testutils.h
> -nodedevxml2xmltest_LDADD = ../src/libvirt_driver_qemu.la $(LDADDS)
> +nodedevxml2xmltest_LDADD = $(LDADDS)
>
>  virshtest_SOURCES = \
>  	virshtest.c \




More information about the libvir-list mailing list