[libvirt] [PATCH] qemu: Adapt to new log format

Osier Yang jyang at redhat.com
Sun Dec 30 10:56:13 UTC 2012


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




More information about the libvir-list mailing list