summaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2001-02-16 01:27:46 +0000
committerAndrew Cagney <cagney@redhat.com>2001-02-16 01:27:46 +0000
commit0d351472b5b022f559beb3875dfee9a139fe4087 (patch)
tree43d046d1cb98079fdcce34e121c64faae19baf99 /gdb
parent6a189dc6c7aeb4831ee87fa4db5cd579e677d3da (diff)
downloadgdb-0d351472b5b022f559beb3875dfee9a139fe4087.tar.gz
Simplify code parsing integers and, in process fix a -Wuninitialized warning.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/f-exp.y32
2 files changed, 21 insertions, 16 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 4f891d9ac8f..2c72218d305 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2001-02-15 Andrew Cagney <ac131313@redhat.com>
+
+ * f-exp.y: Include <ctype.h>.
+ (parse_number): Ensure that ``i'' is always initialized.
+
2001-02-14 Jim Kingdon <jkingdon@engr.sgi.com>
* MAINTAINERS: Add myself to paper trail section.
diff --git a/gdb/f-exp.y b/gdb/f-exp.y
index 049d0f5a111..5afed8d8e1e 100644
--- a/gdb/f-exp.y
+++ b/gdb/f-exp.y
@@ -53,6 +53,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "bfd.h" /* Required by objfiles.h. */
#include "symfile.h" /* Required by objfiles.h. */
#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
+#include <ctype.h>
/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
as well as gratuitiously global symbol names, so we can have multiple
@@ -639,7 +640,6 @@ parse_number (p, len, parsed_float, putithere)
{
register LONGEST n = 0;
register LONGEST prevn = 0;
- register int i;
register int c;
register int base = input_radix;
int unsigned_p = 0;
@@ -697,26 +697,26 @@ parse_number (p, len, parsed_float, putithere)
while (len-- > 0)
{
c = *p++;
- if (c >= 'A' && c <= 'Z')
- c += 'a' - 'A';
- if (c != 'l' && c != 'u')
- n *= base;
- if (c >= '0' && c <= '9')
- n += i = c - '0';
+ if (isupper (c))
+ c = tolower (c);
+ if (len == 0 && c == 'l')
+ long_p = 1;
+ else if (len == 0 && c == 'u')
+ unsigned_p = 1;
else
{
- if (base > 10 && c >= 'a' && c <= 'f')
- n += i = c - 'a' + 10;
- else if (len == 0 && c == 'l')
- long_p = 1;
- else if (len == 0 && c == 'u')
- unsigned_p = 1;
+ int i;
+ if (c >= '0' && c <= '9')
+ i = c - '0';
+ else if (c >= 'a' && c <= 'f')
+ i = c - 'a' + 10;
else
return ERROR; /* Char not a digit */
+ if (i >= base)
+ return ERROR; /* Invalid digit in this base */
+ n *= base;
+ n += i;
}
- if (i >= base)
- return ERROR; /* Invalid digit in this base */
-
/* Portably test for overflow (only works for nonzero values, so make
a second check for zero). */
if ((prevn >= n) && n != 0)