Only skip one instance of each prefix character, if they are present.
authorNick Clifton <nickc@redhat.com>
Tue, 16 Dec 2003 11:10:42 +0000 (11:10 +0000)
committerNick Clifton <nickc@redhat.com>
Tue, 16 Dec 2003 11:10:42 +0000 (11:10 +0000)
bfd/ChangeLog
bfd/peicode.h

index bb4c9ce908eb50f51563f07c13da9abdf35327ea..4b354be12f386dcbe51cb82deede74dd0df43e37 100644 (file)
@@ -1,3 +1,9 @@
+2003-12-16  Eric Youngdale  <eric@mkssoftware.com>
+           Nick Clifton  <nickc@redhat.com>
+
+       * peicode.h (pe_ILF_build_a_bfd): Only skip one instance of each
+       prefix character, if they are present.
+
 2003-12-15  Dmitry Semyonov  <Dmitry.Semyonov@oktet.ru>
            Nick Clifton  <nickc@redhat.com>
 
index 41fcbbcb652e943766f65e89ee2a02773c18c16d..41445e592c3fb29fbcdf82f2224a99579d3a1412 100644 (file)
@@ -902,10 +902,40 @@ pe_ILF_build_a_bfd (bfd *           abfd,
       symbol = symbol_name;
 
       if (import_name_type != IMPORT_NAME)
-       /* Skip any prefix in symbol_name.  */
-       while (*symbol == '@' || * symbol == '?' || * symbol == '_')
-         ++ symbol;
-
+       {
+         bfd_boolean skipped_leading_underscore = FALSE;
+         bfd_boolean skipped_leading_at = FALSE;
+         bfd_boolean skipped_leading_question_mark = FALSE;
+         bfd_boolean check_again;
+         
+         /* Skip any prefix in symbol_name.  */
+         -- symbol;
+         do
+           {
+             check_again = FALSE;
+             ++ symbol;
+
+             switch (*symbol)
+               {
+               case '@':
+                 if (! skipped_leading_at)
+                   check_again = skipped_leading_at = TRUE;
+                 break;
+               case '?':
+                 if (! skipped_leading_question_mark)
+                   check_again = skipped_leading_question_mark = TRUE;
+                 break;
+               case '_':
+                 if (! skipped_leading_underscore)
+                   check_again = skipped_leading_underscore = TRUE;
+                 break;
+               default:
+                 break;
+               }
+           }
+         while (check_again);
+       }
+      
       if (import_name_type == IMPORT_NAME_UNDECORATE)
        {
          /* Truncate at the first '@'  */