summaryrefslogtreecommitdiff
path: root/gcc/real.c
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-10-09 16:56:24 +0000
committerRichard Stallman <rms@gnu.org>1993-10-09 16:56:24 +0000
commitd73e9b8da15ed020f98756edb2f1795b5f063129 (patch)
treecba6e858982dd07c4dec00025ad5ef527825946e /gcc/real.c
parent0debc00746c5f125a208f0f35dd6cbae415c6596 (diff)
downloadgcc-d73e9b8da15ed020f98756edb2f1795b5f063129.tar.gz
(asctoeg): Allocate local buffer dynamically.
(asctoeg): Allocate local buffer dynamically. Count any lost significant digits before the decimal point. From-SVN: r5696
Diffstat (limited to 'gcc/real.c')
-rw-r--r--gcc/real.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/gcc/real.c b/gcc/real.c
index 57769b4c96d..b6b55a52ff7 100644
--- a/gcc/real.c
+++ b/gcc/real.c
@@ -4626,9 +4626,8 @@ asctoe (s, y)
asctoeg (s, y, NBITS);
}
-/* Space to make a copy of the input string: */
-static char lstr[82];
+/* ASCII to e type, with specified rounding precision = oprec. */
void
asctoeg (ss, y, oprec)
char *ss;
@@ -4640,19 +4639,16 @@ asctoeg (ss, y, oprec)
int k, trail, c, rndsav;
EMULONG lexp;
unsigned EMUSHORT nsign, *p;
- char *sp, *s;
+ char *sp, *s, *lstr;
/* Copy the input string. */
+ lstr = (char *) alloca (strlen (ss) + 1);
s = ss;
while (*s == ' ') /* skip leading spaces */
++s;
sp = lstr;
- for (k = 0; k < 79; k++)
- {
- if ((*sp++ = *s++) == '\0')
- break;
- }
- *sp = '\0';
+ while ((*sp++ = *s++) == '\0')
+ ;
s = lstr;
rndsav = rndprc;
@@ -4713,7 +4709,11 @@ asctoeg (ss, y, oprec)
}
else
{
+ /* Mark any lost non-zero digit. */
lost |= k;
+ /* Count lost digits before the decimal point. */
+ if (decflg == 0)
+ nexp -= 1;
}
prec += 1;
goto donchr;