diff mbox

[v3,2/2] monitor: add del completion for peripheral device

Message ID 5121b7eb590291a65e698afd1e55f2a1f5a0b8ab.1412594742.git.zhugh.fnst@cn.fujitsu.com
State New
Headers show

Commit Message

Zhu Guihua Oct. 6, 2014, 11:38 a.m. UTC
Add peripheral_device_del_completion() to let peripheral device del completion
be possible.

Signed-off-by: Zhu Guihua <zhugh.fnst@cn.fujitsu.com>
---
 monitor.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

Comments

Igor Mammedov Oct. 16, 2014, 11:50 a.m. UTC | #1
On Mon, 6 Oct 2014 19:38:44 +0800
Zhu Guihua <zhugh.fnst@cn.fujitsu.com> wrote:

> Add peripheral_device_del_completion() to let peripheral device del
> completion be possible.
> 
> Signed-off-by: Zhu Guihua <zhugh.fnst@cn.fujitsu.com>
> ---
>  monitor.c | 24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
> 
> diff --git a/monitor.c b/monitor.c
> index 667efb7..ffe5405 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -4351,6 +4351,29 @@ static void
> device_del_bus_completion(ReadLineState *rs,  BusState *bus, }
>  }
>  
> +static void peripheral_device_del_completion(ReadLineState *rs,
> +                                             const char *str, size_t
> len) +{
> +    Object *peripheral;
> +    GSList *list = NULL, *item;
> +
> +    peripheral = object_resolve_path("/machine/peripheral/", NULL);
> +
pls remove unnecessary blank line

> +    if (peripheral == NULL) {
> +        return;
> +    }
> +
> +    object_child_foreach(peripheral,
> qdev_build_hotpluggable_device_list,
> +                         &list);
> +
> +    for (item = list; item; item = g_slist_next(item)) {
> +        DeviceState *dev = item->data;
add blank line here, pls.

> +        if (!strncmp(str, dev->id, len)) {
> +            readline_add_completion(rs, dev->id);
> +        }
> +    }
> +}
> +
>  void chardev_remove_completion(ReadLineState *rs, int nb_args, const
> char *str) {
>      size_t len;
> @@ -4424,6 +4447,7 @@ void device_del_completion(ReadLineState *rs,
> int nb_args, const char *str) len = strlen(str);
>      readline_set_completion_index(rs, len);
>      device_del_bus_completion(rs, sysbus_get_default(), str, len);
All ID-ed devices that might be available for removal are returned by
following line, so do we still need above recusive bus walker that
gathers duplicate devices from buses?

> +    peripheral_device_del_completion(rs, str, len);
>  }
>  
>  void object_del_completion(ReadLineState *rs, int nb_args, const
> char *str)
Zhu Guihua Oct. 17, 2014, 3:39 a.m. UTC | #2
On Thu, 2014-10-16 at 13:50 +0200, Igor Mammedov wrote:
> On Mon, 6 Oct 2014 19:38:44 +0800
> Zhu Guihua <zhugh.fnst@cn.fujitsu.com> wrote:
> 
> > Add peripheral_device_del_completion() to let peripheral device del
> > completion be possible.
> > 
> > Signed-off-by: Zhu Guihua <zhugh.fnst@cn.fujitsu.com>
> > ---
> >  monitor.c | 24 ++++++++++++++++++++++++
> >  1 file changed, 24 insertions(+)
> > 
> > diff --git a/monitor.c b/monitor.c
> > index 667efb7..ffe5405 100644
> > --- a/monitor.c
> > +++ b/monitor.c
> > @@ -4351,6 +4351,29 @@ static void
> > device_del_bus_completion(ReadLineState *rs,  BusState *bus, }
> >  }
> >  
> > +static void peripheral_device_del_completion(ReadLineState *rs,
> > +                                             const char *str, size_t
> > len) +{
> > +    Object *peripheral;
> > +    GSList *list = NULL, *item;
> > +
> > +    peripheral = object_resolve_path("/machine/peripheral/", NULL);
> > +
> pls remove unnecessary blank line
> 
> > +    if (peripheral == NULL) {
> > +        return;
> > +    }
> > +
> > +    object_child_foreach(peripheral,
> > qdev_build_hotpluggable_device_list,
> > +                         &list);
> > +
> > +    for (item = list; item; item = g_slist_next(item)) {
> > +        DeviceState *dev = item->data;
> add blank line here, pls.
> 
> > +        if (!strncmp(str, dev->id, len)) {
> > +            readline_add_completion(rs, dev->id);
> > +        }
> > +    }
> > +}
> > +
> >  void chardev_remove_completion(ReadLineState *rs, int nb_args, const
> > char *str) {
> >      size_t len;
> > @@ -4424,6 +4447,7 @@ void device_del_completion(ReadLineState *rs,
> > int nb_args, const char *str) len = strlen(str);
> >      readline_set_completion_index(rs, len);
> >      device_del_bus_completion(rs, sysbus_get_default(), str, len);
> All ID-ed devices that might be available for removal are returned by
> following line, so do we still need above recusive bus walker that
> gathers duplicate devices from buses?
> 
yeah, we do not need recursive bus walker any more.
I will change it, thanks.

Regards,
Zhu 
> > +    peripheral_device_del_completion(rs, str, len);
> >  }
> >  
> >  void object_del_completion(ReadLineState *rs, int nb_args, const
> > char *str)
>
diff mbox

Patch

diff --git a/monitor.c b/monitor.c
index 667efb7..ffe5405 100644
--- a/monitor.c
+++ b/monitor.c
@@ -4351,6 +4351,29 @@  static void device_del_bus_completion(ReadLineState *rs,  BusState *bus,
     }
 }
 
+static void peripheral_device_del_completion(ReadLineState *rs,
+                                             const char *str, size_t len)
+{
+    Object *peripheral;
+    GSList *list = NULL, *item;
+
+    peripheral = object_resolve_path("/machine/peripheral/", NULL);
+
+    if (peripheral == NULL) {
+        return;
+    }
+
+    object_child_foreach(peripheral, qdev_build_hotpluggable_device_list,
+                         &list);
+
+    for (item = list; item; item = g_slist_next(item)) {
+        DeviceState *dev = item->data;
+        if (!strncmp(str, dev->id, len)) {
+            readline_add_completion(rs, dev->id);
+        }
+    }
+}
+
 void chardev_remove_completion(ReadLineState *rs, int nb_args, const char *str)
 {
     size_t len;
@@ -4424,6 +4447,7 @@  void device_del_completion(ReadLineState *rs, int nb_args, const char *str)
     len = strlen(str);
     readline_set_completion_index(rs, len);
     device_del_bus_completion(rs, sysbus_get_default(), str, len);
+    peripheral_device_del_completion(rs, str, len);
 }
 
 void object_del_completion(ReadLineState *rs, int nb_args, const char *str)