2001-12-21 Michael Snyder <msnyder@redhat.com>
authorMichael Snyder <msnyder@vmware.com>
Fri, 21 Dec 2001 17:30:02 +0000 (17:30 +0000)
committerMichael Snyder <msnyder@vmware.com>
Fri, 21 Dec 2001 17:30:02 +0000 (17:30 +0000)
        * maint.c (match_substring): New function.  Tokenizer for
        'maintenance info sections' command arguments.
        (match_bfd_flag): Use match_substring.
        (print_bfd_section_info): Use match_substring.
        (print_objfile_section_info): Use match_substring.
        (maintenance_info_sections): Use match_substring.

gdb/ChangeLog
gdb/maint.c

index d7e3441709142e78831f5b34020fb5381044bf83..a3bbbdcb9d5efb1ba0b220165b883e759056c669 100644 (file)
@@ -1,3 +1,12 @@
+2001-12-21  Michael Snyder  <msnyder@redhat.com>
+
+       * maint.c (match_substring): New function.  Tokenizer for
+       maint info sections command arguments.
+       (match_bfd_flag): Use match_substring.
+       (print_bfd_section_info): Use match_substring.
+       (print_objfile_section_info): Use match_substring.
+       (maintenance_info_sections): Use match_substring.
+
 2001-12-21  Orjan Friberg  <orjanf@axis.com>
 
         * configure.tgt: Delete CRIS from multi-arch targets.
index 0b58fd4c4a89c247c1e98d9e1971eff4c8433ed0..3e1b63f6765edc35acc6814ce830135377d775f8 100644 (file)
@@ -186,44 +186,74 @@ maintenance_info_command (char *arg, int from_tty)
   help_list (maintenanceinfolist, "maintenance info ", -1, gdb_stdout);
 }
 
+/* Mini tokenizing lexer for 'maint info sections' command.  */
+
+static int
+match_substring (char *string, char *substr)
+{
+  int substr_len = strlen(substr);
+  char *tok;
+
+  while ((tok = strstr (string, substr)) != NULL)
+    {
+      /* Got a partial match.  Is it a whole word? */
+      if (tok == string  ||
+         tok[-1] == ' ' ||
+         tok[-1] == '\t')
+      {
+       /* Token is delimited at the front... */
+       if (tok[substr_len] == ' ' ||
+           tok[substr_len] == '\t' ||
+           tok[substr_len] == '\0')
+       {
+         /* Token is delimited at the rear.  Got a whole-word match.  */
+         return 1;
+       }
+      }
+      /* Token didn't match as a whole word.  Advance and try again.  */
+      string = tok + 1;
+    }
+  return 0;
+}
+
 static int 
 match_bfd_flags (char *string, flagword flags)
 {
   if (flags & SEC_ALLOC)
-    if (strstr (string, "ALLOC"))
+    if (match_substring (string, "ALLOC"))
       return 1;
   if (flags & SEC_LOAD)
-    if (strstr (string, "LOAD"))
+    if (match_substring (string, "LOAD"))
       return 1;
   if (flags & SEC_RELOC)
-    if (strstr (string, "RELOC"))
+    if (match_substring (string, "RELOC"))
       return 1;
   if (flags & SEC_READONLY)
-    if (strstr (string, "READONLY"))
+    if (match_substring (string, "READONLY"))
       return 1;
   if (flags & SEC_CODE)
-    if (strstr (string, "CODE"))
+    if (match_substring (string, "CODE"))
       return 1;
   if (flags & SEC_DATA)
-    if (strstr (string, "DATA"))
+    if (match_substring (string, "DATA"))
       return 1;
   if (flags & SEC_ROM)
-    if (strstr (string, "ROM"))
+    if (match_substring (string, "ROM"))
       return 1;
   if (flags & SEC_CONSTRUCTOR)
-    if (strstr (string, "CONSTRUCTOR"))
+    if (match_substring (string, "CONSTRUCTOR"))
       return 1;
   if (flags & SEC_HAS_CONTENTS)
-    if (strstr (string, "HAS_CONTENTS"))
+    if (match_substring (string, "HAS_CONTENTS"))
       return 1;
   if (flags & SEC_NEVER_LOAD)
-    if (strstr (string, "NEVER_LOAD"))
+    if (match_substring (string, "NEVER_LOAD"))
       return 1;
   if (flags & SEC_COFF_SHARED_LIBRARY)
-    if (strstr (string, "COFF_SHARED_LIBRARY"))
+    if (match_substring (string, "COFF_SHARED_LIBRARY"))
       return 1;
   if (flags & SEC_IS_COMMON)
-    if (strstr (string, "IS_COMMON"))
+    if (match_substring (string, "IS_COMMON"))
       return 1;
 
   return 0;
@@ -282,7 +312,7 @@ print_bfd_section_info (bfd *abfd,
   const char *name = bfd_section_name (abfd, asect);
 
   if (arg == NULL || *((char *) arg) == '\0' ||
-      strstr ((char *) arg, name) ||
+      match_substring ((char *) arg, name) ||
       match_bfd_flags ((char *) arg, flags))
     {
       CORE_ADDR addr, endaddr;
@@ -302,7 +332,7 @@ print_objfile_section_info (bfd *abfd,
   const char *name = bfd_section_name (abfd, asect->the_bfd_section);
 
   if (string == NULL || *string == '\0' ||
-      strstr (string, name) ||
+      match_substring (string, name) ||
       match_bfd_flags (string, flags))
     {
       print_section_info (name, flags, asect->addr, asect->endaddr, 
@@ -320,7 +350,7 @@ maintenance_info_sections (char *arg, int from_tty)
       printf_filtered ("    `%s', ", bfd_get_filename (exec_bfd));
       wrap_here ("        ");
       printf_filtered ("file type %s.\n", bfd_get_target (exec_bfd));
-      if (arg && *arg && strstr (arg, "ALLOBJ"))
+      if (arg && *arg && match_substring (arg, "ALLOBJ"))
        {
          struct objfile *ofile;
          struct obj_section *osect;