diff -r 31708477f0a9 tools/libxl/xl_cmdtable.c --- a/tools/libxl/xl_cmdtable.c Mon Jun 21 09:59:10 2010 +0100 +++ b/tools/libxl/xl_cmdtable.c Mon Jun 21 13:13:19 2010 +0100 @@ -316,18 +316,19 @@ { struct cmd_spec *cmd = NULL; size_t len; - int i; + int i, count = 0; 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; + cmd = &cmd_table[i]; + /* Take an exact match, even if it also prefixes another command */ + if (len == strlen(cmd->cmd_name)) + return cmd; + count++; } } - return cmd; + return (count == 1) ? cmd : NULL; }