[libvirt] [PATCH 2/2] Always open files in binary mode in virFDStreamOpenFileInternal
Claudio Bley
cbley at av-test.de
Tue Sep 24 10:43:27 UTC 2013
At Tue, 24 Sep 2013 11:16:39 +0100,
Daniel P. Berrange wrote:
>
> On Tue, Sep 24, 2013 at 11:57:38AM +0200, Claudio Bley wrote:
> > On win32, using text mode for binary files might result in short
> > reads since ASCII character 0x1A is interpreted as EOF. Also, it
> > could lead to problems using the seek functions because of the \r
> > handling.
> >
> > Signed-off-by: Claudio Bley <cbley at av-test.de>
>
> What did you do to hit this problem ? AFAIK the virFDStream code
> isn't useful on Windows at all, since it requires the iohelper
> process and we haven't got that working on Windows.
AFAIS, the iohelper is only needed for non-blocking I/O which I
haven't used.
Here's my code:
,----
| virConnectPtr conn = virConnectOpen("test:///default");
|
| unsigned long libVer;
| int ret = virConnectGetLibVersion(conn, &libVer);
|
| virDomainPtr domain = virDomainLookupByName(conn, "test");
|
| virStreamPtr stream = virStreamNew(conn, 0);
|
| char* mimetype = virDomainScreenshot(domain, stream, 0, 0);
| char buf[8192];
| int got = 0;
|
| puts(mimetype);
|
| do {
| got = virStreamRecv(stream, buf, 8192);
|
| switch (got) {
| case 0:
| virStreamFinish(stream);
| break;
|
| case -1:
| puts("error");
| virStreamAbort(stream);
| goto cleanup;
|
| default:
| printf("got %d bytes\n", got);
| }
| } while(got > 0);
|
| cleanup:
| virDomainFree(domain);
| virConnectClose(conn);
`----
Here's the output:
2013-09-24 07:30:46.823+0000: 3052: debug : virDomainScreenshot:3241 : dom=0000000000681D30, (VM: name=test, uuid=6695eb01-f6a4-8304-79aa-97f2502e193f), stream=0000000000681E30, flags=0
2013-09-24 07:30:46.823+0000: 3052: debug : virFDStreamOpenFileInternal:599 : st=0000000000681E30 path=/usr/x86_64-w64-mingw32/sys-root/mingw/share/libvirt/libvirtLogo.png oflags=0 offset=0 length=0 mode=0
2013-09-24 07:30:46.825+0000: 3052: debug : virFDStreamOpenInternal:490 : st=0000000000681E30 fd=3 cmd=0000000000000000 errfd=-1 length=0
image/png
2013-09-24 07:30:46.826+0000: 3052: debug : virStreamRecv:17138 : stream=0000000000681E30, data=000000000022DE20, nbytes=8192
got 5 bytes
2013-09-24 07:30:46.828+0000: 3052: debug : virStreamRecv:17138 : stream=0000000000681E30, data=000000000022DE20, nbytes=8192
2013-09-24 07:30:46.830+0000: 3052: debug : virStreamFinish:17506 : stream=0000000000681E30
2013-09-24 07:30:46.831+0000: 3052: debug : virFDStreamCloseInt:260 : st=0000000000681E30
2013-09-24 07:30:46.831+0000: 3052: debug : virFileClose:90 : Closed fd 3
/ Claudio
--
AV-Test GmbH, Henricistraße 20, 04155 Leipzig, Germany
Phone: +49 341 265 310 19
Web:<http://www.av-test.org>
Eingetragen am / Registered at: Amtsgericht Stendal (HRB 114076)
Geschaeftsfuehrer (CEO): Andreas Marx, Guido Habicht, Maik Morgenstern
More information about the libvir-list
mailing list