From 41ff8055c5caf3e399783c728a6c8a820b2c7a29 Mon Sep 17 00:00:00 2001 From: Toon Moene Date: Wed, 30 Jan 2002 23:59:47 +0100 Subject: [PATCH] intrin.c (upcasecmp_): New function. 2002-01-30 Toon Moene * intrin.c (upcasecmp_): New function. (ffeintrin_cmp_name_): Use it to correctly compare name and table entry for bsearch. From-SVN: r49347 --- gcc/f/ChangeLog | 6 ++++++ gcc/f/intrin.c | 20 ++++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/gcc/f/ChangeLog b/gcc/f/ChangeLog index bccdcaebbbd..fb1e75b7018 100644 --- a/gcc/f/ChangeLog +++ b/gcc/f/ChangeLog @@ -1,3 +1,9 @@ +2002-01-30 Toon Moene + + * intrin.c (upcasecmp_): New function. + (ffeintrin_cmp_name_): Use it to correctly compare name + and table entry for bsearch. + 2002-01-26 Toon Moene * intrin.c (ffeintrin_cmp_name_): Correct comparison diff --git a/gcc/f/intrin.c b/gcc/f/intrin.c index 9759ab70a36..83a478c7065 100644 --- a/gcc/f/intrin.c +++ b/gcc/f/intrin.c @@ -1153,7 +1153,23 @@ ffeintrin_check_any_ (ffebld arglist) return FALSE; } -/* Compare name to intrinsic's name. Uses strcmp on arguments' names. +/* Compare a forced-to-uppercase name with a known-upper-case name. */ + +static int +upcasecmp_ (const char *name, const char *ucname) +{ + for ( ; *name != 0 && *ucname != 0; name++, ucname++) + { + int i = TOUPPER(*name) - *ucname; + + if (i != 0) + return i; + } + + return *name - *ucname; +} + +/* Compare name to intrinsic's name. The intrinsics table is sorted on the upper case entries; so first compare irrespective of case on the `uc' entry. If it matches, compare according to the setting of intrinsics case comparison mode. */ @@ -1166,7 +1182,7 @@ ffeintrin_cmp_name_ (const void *name, const void *intrinsic) const char *const ic = ((const struct _ffeintrin_name_ *) intrinsic)->name_ic; int i; - if ((i = strcasecmp (name, uc)) == 0) + if ((i = upcasecmp_ (name, uc)) == 0) { switch (ffe_case_intrin ()) { -- 2.30.2