Re: [libvirt] [PATCH 3/3] Support for vrdp/sdl/gui while starting the machine
On Mon, May 11, 2009 at 03:56:50PM +0200, Pritesh Kothari wrote: Same issue about use of 'getenv' strdup OOM handling here. Fixed these two and reposting the patch. Okay, I have applied the 3 patches, we still have the strdup() checks missing but it's easier now just as a diff on top of CVS head, thanks ! Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ dan...@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- Libvir-list mailing list Libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH 3/3] Support for vrdp/sdl/gui while starting the machine
On Thu, May 07, 2009 at 03:50:13PM +0200, Pritesh Kothari wrote: Hi All, I have added support for vrdp/sdl/gui modes for VirtualBox driver in libvirt. Tha patch's are as below: [PATCH 1/3]: contains support for vrdp/sdl/gui while defining a machine. [PATCH 2/3]: contains support for vrdp/sdl/gui while dumping xml [PATCH 3/3]: contains support for vrdp/sdl/gui while starting the machine Regards, Pritesh diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index 223009a..97a686f 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -2322,20 +2322,12 @@ static int vboxDomainCreate(virDomainPtr dom) { IProgress *progress= NULL; PRUint32 machineCnt= 0; PRUnichar *env = NULL; -const char *display= getenv(DISPLAY); PRUnichar *sessionType = NULL; char displayutf8[32] = {0}; unsigned char iidl[VIR_UUID_BUFLEN] = {0}; int i, ret = -1; -if (display) { -sprintf(displayutf8, DISPLAY=%s, display); -data-pFuncs-pfnUtf8ToUtf16(displayutf8, env); -} - -data-pFuncs-pfnUtf8ToUtf16(gui, sessionType); - if (!dom-name) { vboxError(dom-conn, VIR_ERR_INTERNAL_ERROR,%s, Error while reading the domain name); @@ -2373,6 +2365,92 @@ static int vboxDomainCreate(virDomainPtr dom) { if ( (state == MachineState_PoweredOff) || (state == MachineState_Saved) || (state == MachineState_Aborted) ) { +int vrdpPresent = 0; +int sdlPresent = 0; +int guiPresent = 0; +char *guiDisplay = NULL; +char *sdlDisplay = NULL; +PRUnichar *keyTypeUtf16 = NULL; +PRUnichar *valueTypeUtf16= NULL; +char *valueTypeUtf8 = NULL; +PRUnichar *keyDislpayUtf16 = NULL; +PRUnichar *valueDisplayUtf16 = NULL; +char *valueDisplayUtf8 = NULL; +int valueDisplayFree = 1; + +data-pFuncs-pfnUtf8ToUtf16(FRONTEND/Type, keyTypeUtf16); +machine-vtbl-GetExtraData(machine, keyTypeUtf16, valueTypeUtf16); +data-pFuncs-pfnUtf16Free(keyTypeUtf16); + +if (valueTypeUtf16) { +data-pFuncs-pfnUtf16ToUtf8(valueTypeUtf16, valueTypeUtf8); +data-pFuncs-pfnUtf16Free(valueTypeUtf16); + +if ( STREQ(valueTypeUtf8, sdl) || STREQ(valueTypeUtf8, gui) ) { + + data-pFuncs-pfnUtf8ToUtf16(FRONTEND/Display, keyDislpayUtf16); +machine-vtbl-GetExtraData(machine, keyDislpayUtf16, valueDisplayUtf16); +data-pFuncs-pfnUtf16Free(keyDislpayUtf16); + +if (valueDisplayUtf16) { + data-pFuncs-pfnUtf16ToUtf8(valueDisplayUtf16, valueDisplayUtf8); + data-pFuncs-pfnUtf16Free(valueDisplayUtf16); + +if (strlen(valueDisplayUtf8) = 0) { + data-pFuncs-pfnUtf8Free(valueDisplayUtf8); +valueDisplayUtf8 = getenv(DISPLAY); +valueDisplayFree = 0; +} +} else { +valueDisplayUtf8 = getenv(DISPLAY); +valueDisplayFree = 0; +} + +if (STREQ(valueTypeUtf8, sdl)) { +sdlPresent = 1; +sdlDisplay = strdup(valueDisplayUtf8); +} + +if (STREQ(valueTypeUtf8, gui)) { +guiPresent = 1; +guiDisplay = strdup(valueDisplayUtf8); +} +} + +if (STREQ(valueTypeUtf8, vrdp)) { +vrdpPresent = 1; +} + +data-pFuncs-pfnUtf8Free(valueTypeUtf8); + +} else { +guiPresent = 1; +guiDisplay = strdup(getenv(DISPLAY)); +} +if (valueDisplayFree) +data-pFuncs-pfnUtf8Free(valueDisplayUtf8); + +
Re: [libvirt] [PATCH 3/3] Support for vrdp/sdl/gui while starting the machine
Same issue about use of 'getenv' strdup OOM handling here. Fixed these two and reposting the patch. Regards, Pritesh diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c index 85a336a..274afd8 100644 --- a/src/vbox/vbox_tmpl.c +++ b/src/vbox/vbox_tmpl.c @@ -2343,20 +2343,12 @@ static int vboxDomainCreate(virDomainPtr dom) { IProgress *progress= NULL; PRUint32 machineCnt= 0; PRUnichar *env = NULL; -const char *display= getenv(DISPLAY); PRUnichar *sessionType = NULL; char displayutf8[32] = {0}; unsigned char iidl[VIR_UUID_BUFLEN] = {0}; int i, ret = -1; -if (display) { -sprintf(displayutf8, DISPLAY=%s, display); -data-pFuncs-pfnUtf8ToUtf16(displayutf8, env); -} - -data-pFuncs-pfnUtf8ToUtf16(gui, sessionType); - if (!dom-name) { vboxError(dom-conn, VIR_ERR_INTERNAL_ERROR,%s, Error while reading the domain name); @@ -2394,6 +2386,106 @@ static int vboxDomainCreate(virDomainPtr dom) { if ( (state == MachineState_PoweredOff) || (state == MachineState_Saved) || (state == MachineState_Aborted) ) { +int vrdpPresent = 0; +int sdlPresent = 0; +int guiPresent = 0; +char *guiDisplay = NULL; +char *sdlDisplay = NULL; +PRUnichar *keyTypeUtf16 = NULL; +PRUnichar *valueTypeUtf16= NULL; +char *valueTypeUtf8 = NULL; +PRUnichar *keyDislpayUtf16 = NULL; +PRUnichar *valueDisplayUtf16 = NULL; +char *valueDisplayUtf8 = NULL; + +data-pFuncs-pfnUtf8ToUtf16(FRONTEND/Type, keyTypeUtf16); +machine-vtbl-GetExtraData(machine, keyTypeUtf16, valueTypeUtf16); +data-pFuncs-pfnUtf16Free(keyTypeUtf16); + +if (valueTypeUtf16) { +data-pFuncs-pfnUtf16ToUtf8(valueTypeUtf16, valueTypeUtf8); +data-pFuncs-pfnUtf16Free(valueTypeUtf16); + +if ( STREQ(valueTypeUtf8, sdl) || STREQ(valueTypeUtf8, gui) ) { + +data-pFuncs-pfnUtf8ToUtf16(FRONTEND/Display, keyDislpayUtf16); +machine-vtbl-GetExtraData(machine, keyDislpayUtf16, valueDisplayUtf16); +data-pFuncs-pfnUtf16Free(keyDislpayUtf16); + +if (valueDisplayUtf16) { +data-pFuncs-pfnUtf16ToUtf8(valueDisplayUtf16, valueDisplayUtf8); +data-pFuncs-pfnUtf16Free(valueDisplayUtf16); + +if (strlen(valueDisplayUtf8) = 0) { +data-pFuncs-pfnUtf8Free(valueDisplayUtf8); +valueDisplayUtf8 = NULL; +} +} + +if (STREQ(valueTypeUtf8, sdl)) { +sdlPresent = 1; +if (valueDisplayUtf8) { +sdlDisplay = strdup(valueDisplayUtf8); +if (sdlDisplay == NULL) { +vboxError(dom-conn, VIR_ERR_SYSTEM_ERROR, %s, strdup failed); +/* just don't go to cleanup yet as it is ok to have + * sdlDisplay as NULL and we check it below if it + * exist and then only use it there + */ +} +} +} + +if (STREQ(valueTypeUtf8, gui)) { +guiPresent = 1; +if (valueDisplayUtf8) { +guiDisplay = strdup(valueDisplayUtf8); +if (guiDisplay == NULL) { +vboxError(dom-conn, VIR_ERR_SYSTEM_ERROR, %s, strdup failed); +/* just don't go to cleanup yet as it is ok to have + * guiDisplay as NULL and we check it below if it + * exist and then only use it there + */ +} +} +