summaryrefslogtreecommitdiff
path: root/bfd/peicode.h
diff options
context:
space:
mode:
authorDavid Carlton <carlton@bactrian.org>2004-01-26 19:11:50 +0000
committerDavid Carlton <carlton@bactrian.org>2004-01-26 19:11:50 +0000
commit473f7a3bdf4431d8b738ec5e0f06df9745cfa278 (patch)
treea0d72108a597eec779cb5ada83ee40f11be3cb13 /bfd/peicode.h
parentd24d1d3b1955a582cb0f6ca968a5ceec1d739986 (diff)
downloadbinutils-redhat-carlton_dictionary-branch.tar.gz
2004-01-26 David Carlton <carlton@kealia.com>carlton_dictionary-branch
* Merge with mainline; tag is carlton_dictionary-20040126-merge.
Diffstat (limited to 'bfd/peicode.h')
-rw-r--r--bfd/peicode.h38
1 files changed, 34 insertions, 4 deletions
diff --git a/bfd/peicode.h b/bfd/peicode.h
index 41fcbbcb65..41445e592c 100644
--- a/bfd/peicode.h
+++ b/bfd/peicode.h
@@ -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 '@' */