WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] xl: improve vif2 parsing

To: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH] xl: improve vif2 parsing
From: Andre Przywara <andre.przywara@xxxxxxx>
Date: Fri, 20 Aug 2010 14:03:44 +0200
Cc: xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>, Keir Fraser <keir.fraser@xxxxxxxxxxxxx>
Delivery-date: Fri, 20 Aug 2010 05:10:33 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <4C6E6E84.5020704@xxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <4C6E6E84.5020704@xxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 2.0.0.23 (X11/20090820)
Andre Przywara wrote:
Hi,

vif2 parsing relies on counted strncmp() statements. Replace this
with a more robust automatic version.

No, I didn't want to leave this as an exercise to the reader, I am just
spoiled by git send-email, so forgot to attach the patch. Sorry!


Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx>

Regards,
Andre.

P.S. If you like this, I have seen at least two more instances of the same issue that could be improved this way.



--
Andre Przywara
AMD-Operating System Research Center (OSRC), Dresden, Germany
Tel: +49 351 448-3567-12
>From 7b34567697aaf8b8acf251d63519d08a5fb7b646 Mon Sep 17 00:00:00 2001
From: Andre Przywara <andre.przywara@xxxxxxx>
Date: Fri, 20 Aug 2010 01:01:43 +0200
Subject: [PATCH 3/4] xl: improve vif2 parsing

vif2 parsing relies on counted strncmp() statements. Replace this
with a more robust automatic version.

Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx>
---
 tools/libxl/xl_cmdimpl.c |   45 +++++++++++++++++++++++++--------------------
 1 files changed, 25 insertions(+), 20 deletions(-)

diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index c291879..1ddaab9 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -860,28 +860,33 @@ skip:
             init_net2_info(net2, d_config->num_vif2s);
 
             for (p = strtok(buf2, ","); p; p = strtok(NULL, ",")) {
+                char* val;
                 while (isblank(*p))
                     p++;
-                if (!strncmp("front_mac=", p, 10)) {
-                    libxl_strtomac(p + 10, net2->front_mac);
-                } else if (!strncmp("back_mac=", p, 9)) {
-                    libxl_strtomac(p + 9, net2->back_mac);
-                } else if (!strncmp("backend=", p, 8)) {
-                    domain_qualifier_to_domid(p + 8, &net2->backend_domid, 0);
-                } else if (!strncmp("trusted=", p, 8)) {
-                    net2->trusted = (*(p + 8) == '1');
-                } else if (!strncmp("back_trusted=", p, 13)) {
-                    net2->back_trusted = (*(p + 13) == '1');
-                } else if (!strncmp("bridge=", p, 7)) {
-                    net2->bridge = strdup(p + 13);
-                } else if (!strncmp("filter_mac=", p, 11)) {
-                    net2->filter_mac = (*(p + 11) == '1');
-                } else if (!strncmp("front_filter_mac=", p, 17)) {
-                    net2->front_filter_mac = (*(p + 17) == '1');
-                } else if (!strncmp("pdev=", p, 5)) {
-                    net2->pdev = strtoul(p + 5, NULL, 10);
-                } else if (!strncmp("max_bypasses=", p, 13)) {
-                    net2->max_bypasses = strtoul(p + 13, NULL, 10);
+                val = strchr(p, '=');
+                if (val == NULL)
+                    continue;
+                *val++ = 0;
+                if (!strcmp("front_mac", p)) {
+                    libxl_strtomac(val, net2->front_mac);
+                } else if (!strcmp("back_mac", p)) {
+                    libxl_strtomac(val, net2->back_mac);
+                } else if (!strcmp("backend", p)) {
+                    domain_qualifier_to_domid(val, &net2->backend_domid, 0);
+                } else if (!strcmp("trusted", p)) {
+                    net2->trusted = (*val == '1');
+                } else if (!strcmp("back_trusted", p)) {
+                    net2->back_trusted = (*val == '1');
+                } else if (!strcmp("bridge", p)) {
+                    net2->bridge = strdup(val);
+                } else if (!strcmp("filter_mac", p)) {
+                    net2->filter_mac = (*val == '1');
+                } else if (!strcmp("front_filter_mac", p)) {
+                    net2->front_filter_mac = (*val == '1');
+                } else if (!strcmp("pdev", p)) {
+                    net2->pdev = strtoul(val, NULL, 10);
+                } else if (!strcmp("max_bypasses", p)) {
+                    net2->max_bypasses = strtoul(val, NULL, 10);
                 }
             }
             free(buf2);
-- 
1.6.4

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel