From facc390f025eafceabfe087e0fb241a8f2d90e32 Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Fri, 13 Mar 2009 01:28:05 +0000 Subject: [PATCH] * ada-lang.c (ada_delta): Change the type of numerators and denominators to DOUBLEST, as they may not fit into a long. (scaling_factor): Ditto. --- gdb/ChangeLog | 6 ++++++ gdb/ada-lang.c | 24 +++++++++++++++++------- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a8621f9f544..985f46da7e9 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2009-03-12 Jerome Guitton + + * ada-lang.c (ada_delta): Change the type of numerators and + denominators to DOUBLEST, as they may not fit into a long. + (scaling_factor): Ditto. + 2009-03-12 Jerome Guitton * language.c (lang_bool_type): Set lai->bool_type_symbol to NULL. diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 0ec724f9c3e..aa5deceb9b5 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -9296,12 +9296,16 @@ DOUBLEST ada_delta (struct type *type) { const char *encoding = fixed_type_info (type); - long num, den; + DOUBLEST num, den; - if (sscanf (encoding, "_%ld_%ld", &num, &den) < 2) + /* Strictly speaking, num and den are encoded as integer. However, + they may not fit into a long, and they will have to be converted + to DOUBLEST anyway. So scan them as DOUBLEST. */ + if (sscanf (encoding, "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT, + &num, &den) < 2) return -1.0; else - return (DOUBLEST) num / (DOUBLEST) den; + return num / den; } /* Assuming that ada_is_fixed_point_type (TYPE), return the scaling @@ -9311,17 +9315,23 @@ static DOUBLEST scaling_factor (struct type *type) { const char *encoding = fixed_type_info (type); - unsigned long num0, den0, num1, den1; + DOUBLEST num0, den0, num1, den1; int n; - n = sscanf (encoding, "_%lu_%lu_%lu_%lu", &num0, &den0, &num1, &den1); + /* Strictly speaking, num's and den's are encoded as integer. However, + they may not fit into a long, and they will have to be converted + to DOUBLEST anyway. So scan them as DOUBLEST. */ + n = sscanf (encoding, + "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT + "_%" DOUBLEST_SCAN_FORMAT "_%" DOUBLEST_SCAN_FORMAT, + &num0, &den0, &num1, &den1); if (n < 2) return 1.0; else if (n == 4) - return (DOUBLEST) num1 / (DOUBLEST) den1; + return num1 / den1; else - return (DOUBLEST) num0 / (DOUBLEST) den0; + return num0 / den0; } -- 2.30.2