xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] libxl: off by one fix for new network-attach args parsing
@ 2011-06-12 18:54 Marek Marczykowski
  2011-06-17 17:58 ` Ian Jackson
  0 siblings, 1 reply; 6+ messages in thread
From: Marek Marczykowski @ 2011-06-12 18:54 UTC (permalink / raw)
  To: xen-devel; +Cc: marmarek

# HG changeset patch
# User Marek Marczykowski <marmarek@mimuw.edu.pl>
# Date 1307904815 -7200
# Node ID 764214d25cd9825925aeb846a6bdec56c9a5259a
# Parent  262a414e7e37541ff3c1346b316487606e9e736f
libxl: off by one fix for new network-attach args parsing

sizeof(const string) returns string length WITH \0 terminator.

Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -1238,7 +1238,7 @@ static int match_option_size(const char 
     return !rc;
 }
 #define match_option(_prefix, _arg, _oparg) \
-    match_option_size((_prefix "="), sizeof((_prefix)) + 1, (_arg), &(_oparg))
+    match_option_size((_prefix "="), sizeof((_prefix)), (_arg), &(_oparg))
 
 static void replace_string(char **str, const char *val)
 {

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] libxl: off by one fix for new network-attach args parsing
  2011-06-12 18:54 [PATCH] libxl: off by one fix for new network-attach args parsing Marek Marczykowski
@ 2011-06-17 17:58 ` Ian Jackson
  2011-06-21 16:49   ` [PATCH RESENT] xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param") Marek Marczykowski
  0 siblings, 1 reply; 6+ messages in thread
From: Ian Jackson @ 2011-06-17 17:58 UTC (permalink / raw)
  To: Marek Marczykowski; +Cc: xen-devel

Marek Marczykowski writes ("[Xen-devel] [PATCH] libxl: off by one fix for new network-attach args parsing"):
> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> --- a/tools/libxl/xl_cmdimpl.c
> +++ b/tools/libxl/xl_cmdimpl.c
> @@ -1238,7 +1238,7 @@ static int match_option_size(const char 
>      return !rc;
>  }
>  #define match_option(_prefix, _arg, _oparg) \
> -    match_option_size((_prefix "="), sizeof((_prefix)) + 1, (_arg), &(_oparg))
> +    match_option_size((_prefix "="), sizeof((_prefix)), (_arg), &(_oparg))

I haven't applied your patch yet, so could you fold this in and resend
please ?

Why do you use _'d names for the macro formal parameters ?  This is
not our usual coding style.

Finally can you please make sure that your patch has lines of only
around 75 characters, and call the macro MATCH_OPTION since it's not a
normal function.

thanks,
Ian.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH RESENT] xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param")
  2011-06-17 17:58 ` Ian Jackson
@ 2011-06-21 16:49   ` Marek Marczykowski
  2011-06-27 14:26     ` Ian Jackson
  0 siblings, 1 reply; 6+ messages in thread
From: Marek Marczykowski @ 2011-06-21 16:49 UTC (permalink / raw)
  To: xen-devel; +Cc: marmarek

# HG changeset patch
# User Marek Marczykowski <marmarek@mimuw.edu.pl>
# Date 1307145042 -7200
# Node ID f49657a37635b6b5a2ee0b41bf03e2eb15aedcf2
# Parent  9fe949c7ab9601bb5500a53c538f7a23b61e1bcb
xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param")

'script=' length was wrong... Replaced calls to strncmp("param", *argv,
explicit sizeof("param")) with macro and helper function to extract parameter
value. Also introduce replace_string function to simplify code.

Signed-off-by: Marek Marczykowski <marmarek@mimuw.edu.pl>

diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -1229,6 +1229,24 @@ static int handle_domain_death(libxl_ctx
     return restart;
 }
 
+/* for now used only by main_networkattach, but can be reused elsewhere */
+static int match_option_size(const char *prefix, size_t len,
+        char *arg, char **argopt)
+{
+    int rc = strncmp(prefix, arg, len);
+    if (!rc) *argopt = arg+len;
+    return !rc;
+}
+#define MATCH_OPTION(prefix, arg, oparg) \
+    match_option_size((prefix "="), sizeof((prefix)), (arg), &(oparg))
+
+static void replace_string(char **str, const char *val)
+{
+    free(*str);
+    *str = strdup(val);
+}
+
+
 static int preserve_domain(libxl_ctx *ctx, uint32_t domid, libxl_event *event,
                            libxl_domain_config *d_config, libxl_dominfo *info)
 {
@@ -3925,7 +3943,7 @@ int main_networkattach(int argc, char **
 {
     int opt;
     libxl_device_nic nic;
-    char *endptr;
+    char *endptr, *oparg;
     const char *tok;
     int i;
     unsigned int val;
@@ -3944,17 +3962,17 @@ int main_networkattach(int argc, char **
     }
     libxl_device_nic_init(&nic, -1);
     for (argv += optind+1, argc -= optind+1; argc > 0; ++argv, --argc) {
-        if (!strncmp("type=", *argv, 5)) {
-            if (!strncmp("vif", (*argv) + 5, 4)) {
+        if (MATCH_OPTION("type", *argv, oparg)) {
+            if (!strcmp("vif", oparg)) {
                 nic.nictype = LIBXL_NIC_TYPE_VIF;
-            } else if (!strncmp("ioemu", (*argv) + 5, 5)) {
+            } else if (!strcmp("ioemu", oparg)) {
                 nic.nictype = LIBXL_NIC_TYPE_IOEMU;
             } else {
                 fprintf(stderr, "Invalid parameter `type'.\n");
                 return 1;
             }
-        } else if (!strncmp("mac=", *argv, 4)) {
-            tok = strtok((*argv) + 4, ":");
+        } else if (MATCH_OPTION("mac", *argv, oparg)) {
+            tok = strtok(oparg, ":");
             for (i = 0; tok && i < 6; tok = strtok(NULL, ":"), ++i) {
                 val = strtoul(tok, &endptr, 16);
                 if ((tok == endptr) || (val > 255)) {
@@ -3963,29 +3981,24 @@ int main_networkattach(int argc, char **
                 }
                 nic.mac[i] = val;
             }
-        } else if (!strncmp("bridge=", *argv, 7)) {
-            free(nic.bridge);
-            nic.bridge = strdup((*argv) + 7);
-        } else if (!strncmp("ip=", *argv, 3)) {
-            free(nic.ip);
-            nic.ip = strdup((*argv) + 3);
-        } else if (!strncmp("script=", *argv, 6)) {
-            free(nic.script);
-            nic.script = strdup((*argv) + 6);
-        } else if (!strncmp("backend=", *argv, 8)) {
-            if(libxl_name_to_domid(ctx, ((*argv) + 8), &val)) {
+        } else if (MATCH_OPTION("bridge", *argv, oparg)) {
+            replace_string(&nic.bridge, oparg);
+        } else if (MATCH_OPTION("ip", *argv, oparg)) {
+            replace_string(&nic.ip, oparg);
+        } else if (MATCH_OPTION("script", *argv, oparg)) {
+            replace_string(&nic.script, oparg);
+        } else if (MATCH_OPTION("backend", *argv, oparg)) {
+            if(libxl_name_to_domid(ctx, oparg, &val)) {
                 fprintf(stderr, "Specified backend domain does not exist, defaulting to Dom0\n");
                 val = 0;
             }
             nic.backend_domid = val;
-        } else if (!strncmp("vifname=", *argv, 8)) {
-            free(nic.ifname);
-            nic.ifname = strdup((*argv) + 8);
-        } else if (!strncmp("model=", *argv, 6)) {
-            free(nic.model);
-            nic.model = strdup((*argv) + 6);
-        } else if (!strncmp("rate=", *argv, 5)) {
-        } else if (!strncmp("accel=", *argv, 6)) {
+        } else if (MATCH_OPTION("vifname", *argv, oparg)) {
+            replace_string(&nic.ifname, oparg);
+        } else if (MATCH_OPTION("model", *argv, oparg)) {
+            replace_string(&nic.model, oparg);
+        } else if (MATCH_OPTION("rate", *argv, oparg)) {
+        } else if (MATCH_OPTION("accel", *argv, oparg)) {
         } else {
             fprintf(stderr, "unrecognized argument `%s'\n", *argv);
             return 1;

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH RESENT] xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param")
  2011-06-21 16:49   ` [PATCH RESENT] xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param") Marek Marczykowski
@ 2011-06-27 14:26     ` Ian Jackson
  2011-06-27 14:37       ` Marek Marczykowski
  0 siblings, 1 reply; 6+ messages in thread
From: Ian Jackson @ 2011-06-27 14:26 UTC (permalink / raw)
  To: Marek Marczykowski; +Cc: xen-devel

Marek Marczykowski writes ("[Xen-devel] [PATCH RESENT] xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param")"):
> xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param")
> 
> 'script=' length was wrong... Replaced calls to strncmp("param", *argv,
> explicit sizeof("param")) with macro and helper function to extract parameter
> value. Also introduce replace_string function to simplify code.

I think I'm expecting an updated version of this ?

Thanks,
Ian.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH RESENT] xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param")
  2011-06-27 14:26     ` Ian Jackson
@ 2011-06-27 14:37       ` Marek Marczykowski
  2011-06-27 16:21         ` Ian Jackson
  0 siblings, 1 reply; 6+ messages in thread
From: Marek Marczykowski @ 2011-06-27 14:37 UTC (permalink / raw)
  To: Ian Jackson; +Cc: xen-devel


[-- Attachment #1.1: Type: text/plain, Size: 752 bytes --]

On 27.06.2011 16:26, Ian Jackson wrote:
> Marek Marczykowski writes ("[Xen-devel] [PATCH RESENT] xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param")"):
>> xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param")
>>
>> 'script=' length was wrong... Replaced calls to strncmp("param", *argv,
>> explicit sizeof("param")) with macro and helper function to extract parameter
>> value. Also introduce replace_string function to simplify code.
> 
> I think I'm expecting an updated version of this ?

This is an updated version...

-- 
Pozdrawiam / Best Regards,
Marek Marczykowski         | RLU #390519
marmarek at mimuw edu pl   | xmpp:marmarek at staszic waw pl


[-- Attachment #1.2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 5842 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

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

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH RESENT] xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param")
  2011-06-27 14:37       ` Marek Marczykowski
@ 2011-06-27 16:21         ` Ian Jackson
  0 siblings, 0 replies; 6+ messages in thread
From: Ian Jackson @ 2011-06-27 16:21 UTC (permalink / raw)
  To: Marek Marczykowski; +Cc: xen-devel

Marek Marczykowski writes ("Re: [Xen-devel] [PATCH RESENT] xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param")"):
> This is an updated version...

Oh, yes, so it was.  I had an off-by-one error looking for the
off-by-one error you fixed :-).

Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>

Thanks,
Ian.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2011-06-27 16:21 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-06-12 18:54 [PATCH] libxl: off by one fix for new network-attach args parsing Marek Marczykowski
2011-06-17 17:58 ` Ian Jackson
2011-06-21 16:49   ` [PATCH RESENT] xl: Use macros for param parsing in network-attach, to prevent use explicit sizeof("param") Marek Marczykowski
2011-06-27 14:26     ` Ian Jackson
2011-06-27 14:37       ` Marek Marczykowski
2011-06-27 16:21         ` Ian Jackson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).