On 30.12.2012 11:56, Osier Yang wrote: > On 2012年12月30日 18:26, Michal Privoznik wrote: >> On 30.12.2012 10:25, Osier Yang wrote: >>> On 2012年12月29日 17:09, Michal Privoznik wrote: >>>> Since 586502189edf9fd0f89a83de96717a2ea826fdb0 qemu commit, the log >>>> lines reporting chardev's path has changed from: >>>> >>>> $ ./x86_64-softmmu/qemu-system-x86_64 -serial pty -serial pty -monitor >>>> pty >>>> char device redirected to /dev/pts/5 >>>> char device redirected to /dev/pts/6 >>>> char device redirected to /dev/pts/7 >>>> >>>> to: >>>> >>>> $ ./x86_64-softmmu/qemu-system-x86_64 -serial pty -serial pty -monitor >>>> pty >>>> char device compat_monitor0 redirected to /dev/pts/5 >>>> char device serial0 redirected to /dev/pts/6 >>>> char device serial1 redirected to /dev/pts/7 >>>> >>>> However, with current code we are not prepared for such change, which >>>> results in us being unable to start any domain. >>>> --- >>>> src/qemu/qemu_process.c | 33 +++++++++++++++++++++++++++++---- >>>> 1 file changed, 29 insertions(+), 4 deletions(-) >>>> >>>> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c >>>> index eac6553..29bd082 100644 >>>> --- a/src/qemu/qemu_process.c >>>> +++ b/src/qemu/qemu_process.c >>>> @@ -1431,22 +1431,43 @@ cleanup: >>>> * >>>> * char device redirected to /dev/pts/3 >>>> * >>>> + * However, since 1.4 the line we are looking for has changed to: >>>> + * >>>> + * char device<alias> redirected to /some/path >>>> + * >>>> * Returns -1 for error, 0 success, 1 continue reading >>>> */ >>>> static int >>>> qemuProcessExtractTTYPath(const char *haystack, >>>> size_t *offset, >>>> + const char *alias, >>>> char **path) >>>> { >>>> - static const char needle[] = "char device redirected to"; >>>> - char *tmp, *dev; >>>> + static const char *needle[] = {"char device", "redirected to"}; >>>> + const char *tmp, *dev; >>>> >>>> VIR_FREE(*path); >>>> /* First look for our magic string */ >>>> - if (!(tmp = strstr(haystack + *offset, needle))) { >>>> + if (!(tmp = strstr(haystack + *offset, needle[0]))) >>>> return 1; >>>> + >>>> + tmp += strlen(needle[0]); >>>> + virSkipSpaces(&tmp); >>>> + >>>> + if (STRPREFIX(tmp, "char")) { >>> >>> I don't see why it's the new style with "char" here with regard >>> to the new output string like "char device serial1 redirected >>> to /dev/pts/7". Should it be below instead? >>> >>> if (!STRPREFIX(tmp, "redirected")) >>> or >>> if (STRPREFIX(tmp, alias)) >>> >> >> I should have documented that. If you take look at >> qemuBuildChrChardevStr() you can see, that all char devices IDs are >> constructed as "id=char%s", where %s is substituted device alias. Hence >> qemu sees 'charalias0' instead of bare 'alias0'. Therefore we should >> check for 'char' prefix. >> > > Oh, I missed that, agreed with you that better to add a comment > for that, ACK with the comment added. > > Osier > Added and pushed. Thanks. Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list