2005-11-25 Andrew Stubbs <andrew.stubbs@st.com>
authorAndrew Stubbs <andrew.stubbs@st.com>
Fri, 25 Nov 2005 11:45:49 +0000 (11:45 +0000)
committerAndrew Stubbs <andrew.stubbs@st.com>
Fri, 25 Nov 2005 11:45:49 +0000 (11:45 +0000)
* cli-decode.c (find_command_name_length): New function.
(lookup_cmd_1): Replace loop reading command name with
find_command_name_length().
(lookup_cmd): Likewise.
(lookup_cmd_composition): Likewise.

gdb/ChangeLog
gdb/cli/cli-decode.c

index de1c5c385477c53a9ca20471c0548d4fe59524d0..957889510bb507e28dab91034aacc4f4f9021f79 100644 (file)
@@ -1,3 +1,11 @@
+2005-11-25  Andrew Stubbs  <andrew.stubbs@st.com>
+
+       * cli-decode.c (find_command_name_length): New function.
+       (lookup_cmd_1): Replace loop reading command name with
+       find_command_name_length().
+       (lookup_cmd): Likewise.
+       (lookup_cmd_composition): Likewise.
+
 2005-11-25 Frederic Riss <frederic.riss@st.com>
        
        * dwarf2-frame.c: (execute_cfa_program): Don't access past the 
index 9933e30656c5353c94e4b437a0bc6b97786dc7c8..b08e82cd73d8ecc12be46691ee51a92fecd41b9e 100644 (file)
@@ -977,6 +977,31 @@ find_cmd (char *command, int len, struct cmd_list_element *clist,
   return found;
 }
 
+static int
+find_command_name_length (const char *text)
+{
+  const char *p = text;
+
+  /* Treating underscores as part of command words is important
+     so that "set args_foo()" doesn't get interpreted as
+     "set args _foo()".  */
+  /* Some characters are only used for TUI specific commands. However, they
+     are always allowed for the sake of consistency.
+     The XDB compatibility characters are only allowed when using the right
+     mode because they clash with other GDB commands - specifically '/' is
+     used as a suffix for print, examine and display.
+     Note that this is larger than the character set allowed when creating
+     user-defined commands.  */
+  while (isalnum (*p) || *p == '-' || *p == '_' ||
+        /* Characters used by TUI specific commands.  */
+        *p == '+' || *p == '<' || *p == '>' || *p == '$' ||
+        /* Characters used for XDB compatibility.  */
+        (xdb_commands && (*p == '!' || *p == '/' || *p == '?')))
+    p++;
+
+  return p - text;
+}
+
 /* This routine takes a line of TEXT and a CLIST in which to start the
    lookup.  When it returns it will have incremented the text pointer past
    the section of text it matched, set *RESULT_LIST to point to the list in
@@ -1017,7 +1042,7 @@ struct cmd_list_element *
 lookup_cmd_1 (char **text, struct cmd_list_element *clist,
              struct cmd_list_element **result_list, int ignore_help_classes)
 {
-  char *p, *command;
+  char *command;
   int len, tmp, nfound;
   struct cmd_list_element *found, *c;
   char *line = *text;
@@ -1025,27 +1050,13 @@ lookup_cmd_1 (char **text, struct cmd_list_element *clist,
   while (**text == ' ' || **text == '\t')
     (*text)++;
 
-  /* Treating underscores as part of command words is important
-     so that "set args_foo()" doesn't get interpreted as
-     "set args _foo()".  */
-  /* NOTE: cagney/2003-02-13 The `tui_active' was previously
-     `tui_version'.  */
-  for (p = *text;
-       *p && (isalnum (*p) || *p == '-' || *p == '_' ||
-#if defined(TUI)
-             (tui_active &&
-              (*p == '+' || *p == '<' || *p == '>' || *p == '$')) ||
-#endif
-             (xdb_commands && (*p == '!' || *p == '/' || *p == '?')));
-       p++)
-    ;
+  /* Identify the name of the command.  */
+  len = find_command_name_length (*text);
 
   /* If nothing but whitespace, return 0.  */
-  if (p == *text)
+  if (len == 0)
     return 0;
 
-  len = p - *text;
-
   /* *text and p now bracket the first command word to lookup (and
      it's length is len).  We copy this into a local temporary */
 
@@ -1092,7 +1103,7 @@ lookup_cmd_1 (char **text, struct cmd_list_element *clist,
 
   /* We've matched something on this list.  Move text pointer forward. */
 
-  *text = p;
+  *text += len;
 
   if (found->cmd_pointer)
     {
@@ -1194,14 +1205,12 @@ lookup_cmd (char **line, struct cmd_list_element *list, char *cmdtype,
            error (_("Lack of needed %scommand"), cmdtype);
          else
            {
-             char *p = *line, *q;
-
-             while (isalnum (*p) || *p == '-')
-               p++;
+             char *q;
+             int len = find_command_name_length (*line);
 
-             q = (char *) alloca (p - *line + 1);
-             strncpy (q, *line, p - *line);
-             q[p - *line] = '\0';
+             q = (char *) alloca (len + 1);
+             strncpy (q, *line, len);
+             q[len] = '\0';
              undef_cmd_error (cmdtype, q);
            }
        }
@@ -1379,7 +1388,7 @@ lookup_cmd_composition (char *text,
                       struct cmd_list_element **prefix_cmd, 
                       struct cmd_list_element **cmd)
 {
-  char *p, *command;
+  char *command;
   int len, tmp, nfound;
   struct cmd_list_element *cur_list;
   struct cmd_list_element *prev_cmd;
@@ -1399,28 +1408,14 @@ lookup_cmd_composition (char *text,
       while (*text == ' ' || *text == '\t')
       (text)++;
       
-      /* Treating underscores as part of command words is important
-       so that "set args_foo()" doesn't get interpreted as
-       "set args _foo()".  */
-      /* NOTE: cagney/2003-02-13 The `tui_active' was previously
-        `tui_version'.  */
-      for (p = text;
-         *p && (isalnum (*p) || *p == '-' || *p == '_' ||
-#if defined(TUI)
-                (tui_active &&
-                 (*p == '+' || *p == '<' || *p == '>' || *p == '$')) ||
-#endif
-                (xdb_commands && (*p == '!' || *p == '/' || *p == '?')));
-         p++)
-      ;
+      /* Identify the name of the command.  */
+      len = find_command_name_length (text);
       
       /* If nothing but whitespace, return.  */
-      if (p == text)
-      return 0;
-      
-      len = p - text;
+      if (len == 0)
+       return 0;
       
-      /* text and p now bracket the first command word to lookup (and
+      /* text is the start of the first command word to lookup (and
        it's length is len).  We copy this into a local temporary */
       
       command = (char *) alloca (len + 1);
@@ -1473,7 +1468,7 @@ lookup_cmd_composition (char *text,
       else
       return 1;
       
-      text = p;
+      text += len;
     }
 }