diff mbox

[1/7] console: add qemu_console_lookup_by_device_name

Message ID 1452601779-5790-1-git-send-email-kraxel@redhat.com
State New
Headers show

Commit Message

Gerd Hoffmann Jan. 12, 2016, 12:29 p.m. UTC
We have two places needing this, and a third one will come shortly.
So create a helper function for that so we don't diplicate code.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/ui/console.h |  2 ++
 ui/console.c         | 23 +++++++++++++++++++++++
 2 files changed, 25 insertions(+)

Comments

Daniel P. Berrangé Jan. 12, 2016, 12:42 p.m. UTC | #1
On Tue, Jan 12, 2016 at 01:29:33PM +0100, Gerd Hoffmann wrote:
> We have two places needing this, and a third one will come shortly.
> So create a helper function for that so we don't diplicate code.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>

Reviewed-by: Daniel P. Berrange <berrange@redhat.com>

Regards,
Daniel
Markus Armbruster Jan. 15, 2016, 4:22 p.m. UTC | #2
Gerd Hoffmann <kraxel@redhat.com> writes:

> We have two places needing this, and a third one will come shortly.
> So create a helper function for that so we don't diplicate code.

"duplicate"

>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  include/ui/console.h |  2 ++
>  ui/console.c         | 23 +++++++++++++++++++++++
>  2 files changed, 25 insertions(+)
>
> diff --git a/include/ui/console.h b/include/ui/console.h
> index adac36d..bbc3b7c 100644
> --- a/include/ui/console.h
> +++ b/include/ui/console.h
> @@ -377,6 +377,8 @@ void graphic_hw_text_update(QemuConsole *con, console_ch_t *chardata);
>  
>  QemuConsole *qemu_console_lookup_by_index(unsigned int index);
>  QemuConsole *qemu_console_lookup_by_device(DeviceState *dev, uint32_t head);
> +QemuConsole *qemu_console_lookup_by_device_name(const char *device_id,
> +                                                uint32_t head, Error **errp);
>  bool qemu_console_is_visible(QemuConsole *con);
>  bool qemu_console_is_graphic(QemuConsole *con);
>  bool qemu_console_is_fixedsize(QemuConsole *con);
> diff --git a/ui/console.c b/ui/console.c
> index 4b65c34..ddaa165 100644
> --- a/ui/console.c
> +++ b/ui/console.c
> @@ -1779,6 +1779,29 @@ QemuConsole *qemu_console_lookup_by_device(DeviceState *dev, uint32_t head)
>      return NULL;
>  }
>  
> +QemuConsole *qemu_console_lookup_by_device_name(const char *device_id,
> +                                                uint32_t head, Error **errp)
> +{
> +    DeviceState *dev;
> +    QemuConsole *con;
> +
> +    dev = qdev_find_recursive(sysbus_get_default(), device_id);
> +    if (dev == NULL) {
> +        error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
> +                  "Device '%s' not found", device_id);
> +        return NULL;
> +    }
> +
> +    con = qemu_console_lookup_by_device(dev, head);
> +    if (con == NULL) {
> +        error_setg(errp, "Device %s (head %d) is not bound to a QemuConsole",
> +                   device_id, head);
> +        return NULL;
> +    }
> +
> +    return con;
> +}
> +
>  bool qemu_console_is_visible(QemuConsole *con)
>  {
>      return (con == active_console) || (con->dcls > 0);

Peeking ahead in the series...  okay, this is factored out of
qemu_input_handler_bind() and vnc_display_open(), with the error message
improved slightly.

I'd squash PATCH 1-3 together, to make that more obvious.
Markus Armbruster Jan. 15, 2016, 4:41 p.m. UTC | #3
Markus Armbruster <armbru@redhat.com> writes:

> Gerd Hoffmann <kraxel@redhat.com> writes:
>
>> We have two places needing this, and a third one will come shortly.
>> So create a helper function for that so we don't diplicate code.
>
> "duplicate"
>
>>
>> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
>> ---
>>  include/ui/console.h |  2 ++
>>  ui/console.c         | 23 +++++++++++++++++++++++
>>  2 files changed, 25 insertions(+)
>>
>> diff --git a/include/ui/console.h b/include/ui/console.h
>> index adac36d..bbc3b7c 100644
>> --- a/include/ui/console.h
>> +++ b/include/ui/console.h
>> @@ -377,6 +377,8 @@ void graphic_hw_text_update(QemuConsole *con, console_ch_t *chardata);
>>  
>>  QemuConsole *qemu_console_lookup_by_index(unsigned int index);
>>  QemuConsole *qemu_console_lookup_by_device(DeviceState *dev, uint32_t head);
>> +QemuConsole *qemu_console_lookup_by_device_name(const char *device_id,
>> +                                                uint32_t head, Error **errp);
>>  bool qemu_console_is_visible(QemuConsole *con);
>>  bool qemu_console_is_graphic(QemuConsole *con);
>>  bool qemu_console_is_fixedsize(QemuConsole *con);
>> diff --git a/ui/console.c b/ui/console.c
>> index 4b65c34..ddaa165 100644
>> --- a/ui/console.c
>> +++ b/ui/console.c
>> @@ -1779,6 +1779,29 @@ QemuConsole *qemu_console_lookup_by_device(DeviceState *dev, uint32_t head)
>>      return NULL;
>>  }
>>  
>> +QemuConsole *qemu_console_lookup_by_device_name(const char *device_id,
>> +                                                uint32_t head, Error **errp)
>> +{
>> +    DeviceState *dev;
>> +    QemuConsole *con;
>> +
>> +    dev = qdev_find_recursive(sysbus_get_default(), device_id);
>> +    if (dev == NULL) {
>> +        error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
>> +                  "Device '%s' not found", device_id);
>> +        return NULL;
>> +    }
>> +
>> +    con = qemu_console_lookup_by_device(dev, head);
>> +    if (con == NULL) {
>> +        error_setg(errp, "Device %s (head %d) is not bound to a QemuConsole",
>> +                   device_id, head);
>> +        return NULL;
>> +    }
>> +
>> +    return con;
>> +}
>> +
>>  bool qemu_console_is_visible(QemuConsole *con)
>>  {
>>      return (con == active_console) || (con->dcls > 0);
>
> Peeking ahead in the series...  okay, this is factored out of
> qemu_input_handler_bind() and vnc_display_open(), with the error message
> improved slightly.
>
> I'd squash PATCH 1-3 together, to make that more obvious.

And add a declaration to a suitable header :)

ui/input.c: In function ‘qemu_input_handler_bind’:
ui/input.c:87:11: warning: implicit declaration of function ‘qemu_console_lookup_by_device_name’ [-Wimplicit-function-declaration]
     con = qemu_console_lookup_by_device_name(device_id, head, &err);
           ^
Markus Armbruster Jan. 15, 2016, 4:45 p.m. UTC | #4
Markus Armbruster <armbru@redhat.com> writes:

> And add a declaration to a suitable header :)
>
> ui/input.c: In function ‘qemu_input_handler_bind’:
> ui/input.c:87:11: warning: implicit declaration of function ‘qemu_console_lookup_by_device_name’ [-Wimplicit-function-declaration]
>      con = qemu_console_lookup_by_device_name(device_id, head, &err);
>            ^

Scratch that, I misapplied your series.
diff mbox

Patch

diff --git a/include/ui/console.h b/include/ui/console.h
index adac36d..bbc3b7c 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -377,6 +377,8 @@  void graphic_hw_text_update(QemuConsole *con, console_ch_t *chardata);
 
 QemuConsole *qemu_console_lookup_by_index(unsigned int index);
 QemuConsole *qemu_console_lookup_by_device(DeviceState *dev, uint32_t head);
+QemuConsole *qemu_console_lookup_by_device_name(const char *device_id,
+                                                uint32_t head, Error **errp);
 bool qemu_console_is_visible(QemuConsole *con);
 bool qemu_console_is_graphic(QemuConsole *con);
 bool qemu_console_is_fixedsize(QemuConsole *con);
diff --git a/ui/console.c b/ui/console.c
index 4b65c34..ddaa165 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -1779,6 +1779,29 @@  QemuConsole *qemu_console_lookup_by_device(DeviceState *dev, uint32_t head)
     return NULL;
 }
 
+QemuConsole *qemu_console_lookup_by_device_name(const char *device_id,
+                                                uint32_t head, Error **errp)
+{
+    DeviceState *dev;
+    QemuConsole *con;
+
+    dev = qdev_find_recursive(sysbus_get_default(), device_id);
+    if (dev == NULL) {
+        error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
+                  "Device '%s' not found", device_id);
+        return NULL;
+    }
+
+    con = qemu_console_lookup_by_device(dev, head);
+    if (con == NULL) {
+        error_setg(errp, "Device %s (head %d) is not bound to a QemuConsole",
+                   device_id, head);
+        return NULL;
+    }
+
+    return con;
+}
+
 bool qemu_console_is_visible(QemuConsole *con)
 {
     return (con == active_console) || (con->dcls > 0);