qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH V5 08/10] Create four opts list related functions


From: Dong Xu Wang
Subject: [Qemu-devel] [PATCH V5 08/10] Create four opts list related functions
Date: Thu, 1 Nov 2012 17:12:28 +0800

This patch will create 4 functions, count_opts_list, append_opts_list,
free_opts_list and print_opts_list, they will used in following commits.

Signed-off-by: Dong Xu Wang <address@hidden>
---
 qemu-option.c |   90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 qemu-option.h |    4 ++
 2 files changed, 94 insertions(+), 0 deletions(-)

diff --git a/qemu-option.c b/qemu-option.c
index e0628da..5dfbf35 100644
--- a/qemu-option.c
+++ b/qemu-option.c
@@ -1145,3 +1145,93 @@ int qemu_opts_foreach(QemuOptsList *list, 
qemu_opts_loopfunc func, void *opaque,
     loc_pop(&loc);
     return rc;
 }
+
+static size_t count_opts_list(QemuOptsList *list)
+{
+    size_t i = 0;
+
+    while (list && list->desc[i].name) {
+        i++;
+    }
+
+    return i;
+}
+
+/* Create a new QemuOptsList and make its desc to the merge of first and 
second.
+ * It will allocate space for one new QemuOptsList plus enouth space for
+ * QemuOptDesc in first and second QemuOptsList. First argument's QemuOptDesc
+ * members take precedence over second's.
+ */
+QemuOptsList *append_opts_list(QemuOptsList *first,
+                               QemuOptsList *second)
+{
+    size_t num_first_options, num_second_options;
+    QemuOptsList *dest = NULL;
+    int i = 0;
+    int index = 0;
+
+    num_first_options = count_opts_list(first);
+    num_second_options = count_opts_list(second);
+    if (num_first_options + num_second_options == 0) {
+        return NULL;
+    }
+
+    dest = g_malloc0(sizeof(QemuOptsList)
+        + (num_first_options + num_second_options) * sizeof(QemuOptDesc));
+
+    dest->name = "append_opts_list";
+    dest->implied_opt_name = NULL;
+    dest->merge_lists = false;
+    QTAILQ_INIT(&dest->head);
+    while (first && (first->desc[i].name)) {
+        if (!find_desc_by_name(dest->desc, first->desc[i].name)) {
+            dest->desc[index].name = g_strdup(first->desc[i].name);
+            dest->desc[index].help = g_strdup(first->desc[i].help);
+            dest->desc[index].type = first->desc[i].type;
+            dest->desc[index].def_print_str =
+                g_strdup(first->desc[i].def_print_str);
+            ++index;
+       }
+        i++;
+    }
+    i = 0;
+    while (second && (second->desc[i].name)) {
+        if (!find_desc_by_name(dest->desc, second->desc[i].name)) {
+            dest->desc[index].name = g_strdup(first->desc[i].name);
+            dest->desc[index].help = g_strdup(first->desc[i].help);
+            dest->desc[index].type = second->desc[i].type;
+            dest->desc[index].def_print_str =
+                g_strdup(second->desc[i].def_print_str);
+            ++index;
+        }
+        i++;
+    }
+    dest->desc[index].name = NULL;
+    return dest;
+}
+
+void free_opts_list(QemuOptsList *list)
+{
+    int i = 0;
+
+    while (list && list->desc[i].name) {
+        g_free((char *)list->desc[i].name);
+        g_free((char *)list->desc[i].help);
+        g_free((char *)list->desc[i].def_print_str);
+        i++;
+    }
+
+    g_free(list);
+}
+
+void print_opts_list(QemuOptsList *list)
+{
+    int i = 0;
+    printf("Supported options:\n");
+    while (list && list->desc[i].name) {
+        printf("%-16s %s\n", list->desc[i].name,
+            list->desc[i].help ?
+                list->desc[i].help : "No description available");
+        i++;
+    }
+}
diff --git a/qemu-option.h b/qemu-option.h
index ab02023..091a2f2 100644
--- a/qemu-option.h
+++ b/qemu-option.h
@@ -156,4 +156,8 @@ int qemu_opts_print(QemuOpts *opts, void *dummy);
 int qemu_opts_foreach(QemuOptsList *list, qemu_opts_loopfunc func, void 
*opaque,
                       int abort_on_failure);
 
+QemuOptsList *append_opts_list(QemuOptsList *dest,
+                               QemuOptsList *list);
+void free_opts_list(QemuOptsList *list);
+void print_opts_list(QemuOptsList *list);
 #endif
-- 
1.7.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]