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-changelog

[Xen-changelog] [xen-unstable] xl: allow truncation of xl subcommands

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] xl: allow truncation of xl subcommands
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 21 Jun 2010 10:45:24 -0700
Delivery-date: Mon, 21 Jun 2010 10:48:52 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1276866554 -3600
# Node ID c4216fa31a8e74eb142ac1a017cb0d67e63eebbb
# Parent  3fdd864a79d32a765b389521d1f367e0424208fe
xl: allow truncation of xl subcommands
for those of us who are used to typing "xm cr foo"

Signed-off-by: Tim Deegan <Tim.Deegan@xxxxxxxxxx>
---
 tools/libxl/xl.c          |   25 +++++++++++--------------
 tools/libxl/xl.h          |    2 ++
 tools/libxl/xl_cmdimpl.c  |   22 +++++++++++-----------
 tools/libxl/xl_cmdtable.c |   23 +++++++++++++++++++++++
 4 files changed, 47 insertions(+), 25 deletions(-)

diff -r 3fdd864a79d3 -r c4216fa31a8e tools/libxl/xl.c
--- a/tools/libxl/xl.c  Fri Jun 18 14:08:57 2010 +0100
+++ b/tools/libxl/xl.c  Fri Jun 18 14:09:14 2010 +0100
@@ -37,8 +37,9 @@ static xentoollog_level minmsglevel = XT
 
 int main(int argc, char **argv)
 {
-    int opt = 0, i;
+    int opt = 0;
     char *cmd = 0;
+    struct cmd_spec *cspec;
 
     while ((opt = getopt(argc, argv, "+v")) >= 0) {
         switch (opt) {
@@ -69,18 +70,14 @@ int main(int argc, char **argv)
 
     srand(time(0));
 
-    for (i = 0; i < cmdtable_len; i++) {
-        if (!strcmp(cmd, cmd_table[i].cmd_name))
-               cmd_table[i].cmd_impl(argc, argv);
-    }
-
-    if (i >= cmdtable_len) {
-        if (!strcmp(cmd, "help")) {
-            help(argv[2]);
-            exit(0);
-        } else {
-            fprintf(stderr, "command not implemented\n");
-            exit(1);
-        }
+    cspec = cmdtable_lookup(cmd);
+    if (cspec)
+        return cspec->cmd_impl(argc, argv);
+    else if (!strcmp(cmd, "help")) {
+        help(argv[2]);
+        exit(0);
+    } else {
+        fprintf(stderr, "command not implemented\n");
+        exit(1);
     }
 }
diff -r 3fdd864a79d3 -r c4216fa31a8e tools/libxl/xl.h
--- a/tools/libxl/xl.h  Fri Jun 18 14:08:57 2010 +0100
+++ b/tools/libxl/xl.h  Fri Jun 18 14:09:14 2010 +0100
@@ -80,6 +80,8 @@ void help(char *command);
 
 extern struct cmd_spec cmd_table[];
 extern int cmdtable_len;
+/* Look up a command in the table, allowing unambiguous truncation */
+struct cmd_spec *cmdtable_lookup(const char *s);
 
 extern struct libxl_ctx ctx;
 extern xentoollog_logger_stdiostream *logger;
diff -r 3fdd864a79d3 -r c4216fa31a8e tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c  Fri Jun 18 14:08:57 2010 +0100
+++ b/tools/libxl/xl_cmdimpl.c  Fri Jun 18 14:09:14 2010 +0100
@@ -1282,6 +1282,7 @@ void help(char *command)
 void help(char *command)
 {
     int i;
+    struct cmd_spec *cmd;
 
     if (!command || !strcmp(command, "help")) {
         printf("Usage xl <subcommand> [args]\n\n");
@@ -1290,18 +1291,17 @@ void help(char *command)
             printf(" %-20s%s\n",
                    cmd_table[i].cmd_name, cmd_table[i].cmd_desc);
     } else {
-        for (i = 0; i < cmdtable_len; i++)
-            if (!strcmp(command, cmd_table[i].cmd_name))
-                break;
-        if (i == cmdtable_len) {
-            printf("command not implemented\n");
-        } else {
+        cmd = cmdtable_lookup(command);
+        if (cmd) {
             printf("Usage: xl %s %s\n\n%s.\n\n",
-                   cmd_table[i].cmd_name,
-                   cmd_table[i].cmd_usage,
-                   cmd_table[i].cmd_desc);
-            if (cmd_table[i].cmd_option)
-            printf("Options:\n\n%s\n", cmd_table[i].cmd_option);
+                   cmd->cmd_name,
+                   cmd->cmd_usage,
+                   cmd->cmd_desc);
+            if (cmd->cmd_option)
+                printf("Options:\n\n%s\n", cmd->cmd_option);
+        }
+        else {
+            printf("command \"%s\" not implemented\n", command);
         }
     }
 }
diff -r 3fdd864a79d3 -r c4216fa31a8e tools/libxl/xl_cmdtable.c
--- a/tools/libxl/xl_cmdtable.c Fri Jun 18 14:08:57 2010 +0100
+++ b/tools/libxl/xl_cmdtable.c Fri Jun 18 14:09:14 2010 +0100
@@ -12,6 +12,8 @@
  * GNU Lesser General Public License for more details.
  */
 
+#include <string.h>
+
 #include "xl.h"
 
 struct cmd_spec cmd_table[] = {
@@ -308,3 +310,24 @@ struct cmd_spec cmd_table[] = {
 };
 
 int cmdtable_len = sizeof(cmd_table)/sizeof(struct cmd_spec);
+
+/* Look up a command in the table, allowing unambiguous truncation */
+struct cmd_spec *cmdtable_lookup(const char *s)
+{
+    struct cmd_spec *cmd = NULL;
+    size_t len;
+    int i;
+
+    if (!s) 
+        return NULL;
+    len = strlen(s);
+    for (i = 0; i < cmdtable_len; i++) {
+        if (!strncmp(s, cmd_table[i].cmd_name, len)) {
+            if (cmd == NULL) 
+                cmd = &cmd_table[i];
+            else 
+                return NULL;
+        }
+    }
+    return cmd;
+}

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] xl: allow truncation of xl subcommands, Xen patchbot-unstable <=