mirror of https://github.com/acidanthera/audk.git
StdLib: Fix a "potentially uninitialized variable" error.
gdtoa/gdtoa.c: Several "goto" paths allowed the initialization of a variable to be bypassed. Initialized it at the top of the function in order to eliminate the error. Updated the file header and copyright notices. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Daryl McDaniel <daryl.mcdaniel@intel.com> Reviewed-by: Erik Bjorge <erik.c.bjorge@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16324 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
931b2cff42
commit
2a7e98a8cc
|
@ -1,6 +1,15 @@
|
|||
/* $NetBSD: gdtoa.c,v 1.1.1.1.4.1.4.1 2008/04/08 21:10:55 jdc Exp $ */
|
||||
/** @file
|
||||
|
||||
/****************************************************************
|
||||
Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials are licensed and made available under
|
||||
the terms and conditions of the BSD License that accompanies this distribution.
|
||||
The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php.
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
***************************************************************
|
||||
|
||||
The author of this software is David M. Gay.
|
||||
|
||||
|
@ -26,10 +35,11 @@ IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
|||
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
||||
THIS SOFTWARE.
|
||||
|
||||
****************************************************************/
|
||||
Please send bug reports to David M. Gay (dmg at acm dot org,
|
||||
with " at " changed at "@" and " dot " changed to ".").
|
||||
|
||||
/* Please send bug reports to David M. Gay (dmg at acm dot org,
|
||||
* with " at " changed at "@" and " dot " changed to "."). */
|
||||
NetBSD: gdtoa.c,v 1.1.1.1.4.1.4.1 2008/04/08 21:10:55 jdc Exp
|
||||
**/
|
||||
#include <LibConfig.h>
|
||||
|
||||
#include "gdtoaimp.h"
|
||||
|
@ -53,7 +63,7 @@ bitstob(ULong *bits, int nbits, int *bbits)
|
|||
while(i < nbits) {
|
||||
i <<= 1;
|
||||
k++;
|
||||
}
|
||||
}
|
||||
#ifndef Pack_32
|
||||
if (!k)
|
||||
k = 1;
|
||||
|
@ -68,19 +78,19 @@ bitstob(ULong *bits, int nbits, int *bbits)
|
|||
#ifdef Pack_16
|
||||
*x++ = (*bits >> 16) & ALL_ON;
|
||||
#endif
|
||||
} while(++bits <= be);
|
||||
} while(++bits <= be);
|
||||
i = x - x0;
|
||||
while(!x0[--i])
|
||||
if (!i) {
|
||||
b->wds = 0;
|
||||
*bbits = 0;
|
||||
goto ret;
|
||||
}
|
||||
}
|
||||
b->wds = i + 1;
|
||||
*bbits = i*ULbits + 32 - hi0bits(b->x[i]);
|
||||
ret:
|
||||
ret:
|
||||
return b;
|
||||
}
|
||||
}
|
||||
|
||||
/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
|
||||
*
|
||||
|
@ -162,11 +172,13 @@ gdtoa
|
|||
double d, d2, ds, eps;
|
||||
char *s, *s0;
|
||||
|
||||
mlo = NULL;
|
||||
|
||||
#ifndef MULTIPLE_THREADS
|
||||
if (dtoa_result) {
|
||||
freedtoa(dtoa_result);
|
||||
dtoa_result = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
inex = 0;
|
||||
if (*kindp & STRTOG_NoMemory)
|
||||
|
@ -174,19 +186,19 @@ gdtoa
|
|||
kind = *kindp &= ~STRTOG_Inexact;
|
||||
switch(kind & STRTOG_Retmask) {
|
||||
case STRTOG_Zero:
|
||||
goto ret_zero;
|
||||
goto ret_zero;
|
||||
case STRTOG_Normal:
|
||||
case STRTOG_Denormal:
|
||||
break;
|
||||
break;
|
||||
case STRTOG_Infinite:
|
||||
*decpt = -32768;
|
||||
return nrv_alloc("Infinity", rve, 8);
|
||||
*decpt = -32768;
|
||||
return nrv_alloc("Infinity", rve, 8);
|
||||
case STRTOG_NaN:
|
||||
*decpt = -32768;
|
||||
return nrv_alloc("NaN", rve, 3);
|
||||
*decpt = -32768;
|
||||
return nrv_alloc("NaN", rve, 3);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
b = bitstob(bits, nbits = fpi->nbits, &bbits);
|
||||
if (b == NULL)
|
||||
return NULL;
|
||||
|
@ -195,13 +207,13 @@ gdtoa
|
|||
rshift(b, i);
|
||||
be += i;
|
||||
bbits -= i;
|
||||
}
|
||||
}
|
||||
if (!b->wds) {
|
||||
Bfree(b);
|
||||
ret_zero:
|
||||
ret_zero:
|
||||
*decpt = 1;
|
||||
return nrv_alloc("0", rve, 1);
|
||||
}
|
||||
}
|
||||
|
||||
dval(d) = b2d(b, &i);
|
||||
i = be + bbits - 1;
|
||||
|
@ -261,33 +273,33 @@ gdtoa
|
|||
if (dval(d) < tens[k])
|
||||
k--;
|
||||
k_check = 0;
|
||||
}
|
||||
}
|
||||
j = bbits - i - 1;
|
||||
if (j >= 0) {
|
||||
b2 = 0;
|
||||
s2 = j;
|
||||
}
|
||||
}
|
||||
else {
|
||||
b2 = -j;
|
||||
s2 = 0;
|
||||
}
|
||||
}
|
||||
if (k >= 0) {
|
||||
b5 = 0;
|
||||
s5 = k;
|
||||
s2 += k;
|
||||
}
|
||||
}
|
||||
else {
|
||||
b2 -= k;
|
||||
b5 = -k;
|
||||
s5 = 0;
|
||||
}
|
||||
}
|
||||
if (mode < 0 || mode > 9)
|
||||
mode = 0;
|
||||
try_quick = 1;
|
||||
if (mode > 5) {
|
||||
mode -= 4;
|
||||
try_quick = 0;
|
||||
}
|
||||
}
|
||||
leftright = 1;
|
||||
switch(mode) {
|
||||
case 0:
|
||||
|
@ -313,7 +325,7 @@ gdtoa
|
|||
ilim1 = i - 1;
|
||||
if (i <= 0)
|
||||
i = 1;
|
||||
}
|
||||
}
|
||||
s = s0 = rv_alloc((size_t)i);
|
||||
if (s == NULL)
|
||||
return NULL;
|
||||
|
@ -323,7 +335,7 @@ gdtoa
|
|||
rdir = 2;
|
||||
if (kind & STRTOG_Neg)
|
||||
rdir = 3 - rdir;
|
||||
}
|
||||
}
|
||||
|
||||
/* Now rdir = 0 ==> round near, 1 ==> round up, 2 ==> round down. */
|
||||
|
||||
|
@ -352,13 +364,13 @@ gdtoa
|
|||
j &= Bletch - 1;
|
||||
dval(d) /= bigtens[n_bigtens-1];
|
||||
ieps++;
|
||||
}
|
||||
}
|
||||
for(; j; j /= 2, i++)
|
||||
if (j & 1) {
|
||||
ieps++;
|
||||
ds *= bigtens[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
ds = 1.;
|
||||
if ( (jj1 = -k) !=0) {
|
||||
|
@ -367,9 +379,9 @@ gdtoa
|
|||
if (j & 1) {
|
||||
ieps++;
|
||||
dval(d) *= bigtens[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (k_check && dval(d) < 1. && ilim > 0) {
|
||||
if (ilim1 <= 0)
|
||||
goto fast_failed;
|
||||
|
@ -377,7 +389,7 @@ gdtoa
|
|||
k--;
|
||||
dval(d) *= 10.;
|
||||
ieps++;
|
||||
}
|
||||
}
|
||||
dval(eps) = ieps*dval(d) + 7.;
|
||||
word0(eps) -= (P-1)*Exp_msk1;
|
||||
if (ilim == 0) {
|
||||
|
@ -388,7 +400,7 @@ gdtoa
|
|||
if (dval(d) < -dval(eps))
|
||||
goto no_digits;
|
||||
goto fast_failed;
|
||||
}
|
||||
}
|
||||
#ifndef No_leftright
|
||||
if (leftright) {
|
||||
/* Use Steele & White method of only
|
||||
|
@ -403,15 +415,15 @@ gdtoa
|
|||
if (dval(d))
|
||||
inex = STRTOG_Inexlo;
|
||||
goto ret1;
|
||||
}
|
||||
}
|
||||
if (ds - dval(d) < dval(eps))
|
||||
goto bump_up;
|
||||
if (++i >= ilim)
|
||||
break;
|
||||
dval(eps) *= 10.;
|
||||
dval(d) *= 10.;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
#endif
|
||||
/* Generate ilim digits, then fix them up. */
|
||||
|
@ -430,19 +442,19 @@ gdtoa
|
|||
if (dval(d))
|
||||
inex = STRTOG_Inexlo;
|
||||
goto ret1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
#ifndef No_leftright
|
||||
}
|
||||
#ifndef No_leftright
|
||||
}
|
||||
#endif
|
||||
fast_failed:
|
||||
fast_failed:
|
||||
s = s0;
|
||||
dval(d) = d2;
|
||||
k = k0;
|
||||
ilim = ilim0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Do we have a "small" integer? */
|
||||
|
||||
|
@ -454,7 +466,7 @@ gdtoa
|
|||
if (ilim < 0 || dval(d) <= 5*ds)
|
||||
goto no_digits;
|
||||
goto one_digit;
|
||||
}
|
||||
}
|
||||
for(i = 1;; i++, dval(d) *= 10.) {
|
||||
L = dval(d) / ds;
|
||||
dval(d) -= L*ds;
|
||||
|
@ -463,7 +475,7 @@ gdtoa
|
|||
if (dval(d) < 0) {
|
||||
L--;
|
||||
dval(d) += ds;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
*s++ = '0' + (int)L;
|
||||
if (dval(d) == 0.)
|
||||
|
@ -474,37 +486,38 @@ gdtoa
|
|||
goto bump_up;
|
||||
inex = STRTOG_Inexlo;
|
||||
goto ret1;
|
||||
}
|
||||
}
|
||||
dval(d) += dval(d);
|
||||
if (dval(d) > ds || (dval(d) == ds && L & 1)) {
|
||||
bump_up:
|
||||
bump_up:
|
||||
inex = STRTOG_Inexhi;
|
||||
while(*--s == '9')
|
||||
if (s == s0) {
|
||||
k++;
|
||||
*s = '0';
|
||||
break;
|
||||
}
|
||||
}
|
||||
++*s++;
|
||||
}
|
||||
}
|
||||
else
|
||||
inex = STRTOG_Inexlo;
|
||||
break;
|
||||
}
|
||||
}
|
||||
goto ret1;
|
||||
}
|
||||
goto ret1;
|
||||
}
|
||||
|
||||
m2 = b2;
|
||||
m5 = b5;
|
||||
mhi = mlo = 0;
|
||||
mhi = NULL;
|
||||
mlo = NULL;
|
||||
if (leftright) {
|
||||
if (mode < 2) {
|
||||
i = nbits - bbits;
|
||||
if (be - i++ < fpi->emin)
|
||||
/* denormal */
|
||||
i = be - fpi->emin + 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
j = ilim - 1;
|
||||
if (m5 >= j)
|
||||
|
@ -513,22 +526,22 @@ gdtoa
|
|||
s5 += j -= m5;
|
||||
b5 += j;
|
||||
m5 = 0;
|
||||
}
|
||||
}
|
||||
if ((i = ilim) < 0) {
|
||||
m2 -= i;
|
||||
i = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
b2 += i;
|
||||
s2 += i;
|
||||
mhi = i2b(1);
|
||||
}
|
||||
}
|
||||
if (m2 > 0 && s2 > 0) {
|
||||
i = m2 < s2 ? m2 : s2;
|
||||
b2 -= i;
|
||||
m2 -= i;
|
||||
s2 -= i;
|
||||
}
|
||||
}
|
||||
if (b5 > 0) {
|
||||
if (leftright) {
|
||||
if (m5 > 0) {
|
||||
|
@ -540,19 +553,19 @@ gdtoa
|
|||
return NULL;
|
||||
Bfree(b);
|
||||
b = b1;
|
||||
}
|
||||
}
|
||||
if ( (j = b5 - m5) !=0) {
|
||||
b = pow5mult(b, j);
|
||||
if (b == NULL)
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
b = pow5mult(b, b5);
|
||||
if (b == NULL)
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
S = i2b(1);
|
||||
if (S == NULL)
|
||||
return NULL;
|
||||
|
@ -560,7 +573,7 @@ gdtoa
|
|||
S = pow5mult(S, s5);
|
||||
if (S == NULL)
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check for special case that d is a normalized power of 2. */
|
||||
|
||||
|
@ -571,8 +584,8 @@ gdtoa
|
|||
b2++;
|
||||
s2++;
|
||||
spec_case = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Arrange for convenient computation of quotients:
|
||||
* shift left if necessary so divisor has 4 leading 0 bits.
|
||||
|
@ -593,13 +606,13 @@ gdtoa
|
|||
b2 += i;
|
||||
m2 += i;
|
||||
s2 += i;
|
||||
}
|
||||
}
|
||||
else if (i < 4) {
|
||||
i += 28;
|
||||
b2 += i;
|
||||
m2 += i;
|
||||
s2 += i;
|
||||
}
|
||||
}
|
||||
if (b2 > 0)
|
||||
b = lshift(b, b2);
|
||||
if (s2 > 0)
|
||||
|
@ -614,30 +627,30 @@ gdtoa
|
|||
mhi = multadd(mhi, 10, 0);
|
||||
if (mhi == NULL)
|
||||
return NULL;
|
||||
}
|
||||
ilim = ilim1;
|
||||
}
|
||||
ilim = ilim1;
|
||||
}
|
||||
}
|
||||
if (ilim <= 0 && mode > 2) {
|
||||
if (ilim < 0 || cmp(b,S = multadd(S,5,0)) <= 0) {
|
||||
/* no digits, fcvt style */
|
||||
no_digits:
|
||||
no_digits:
|
||||
k = -1 - ndigits;
|
||||
inex = STRTOG_Inexlo;
|
||||
goto ret;
|
||||
}
|
||||
one_digit:
|
||||
}
|
||||
one_digit:
|
||||
inex = STRTOG_Inexhi;
|
||||
*s++ = '1';
|
||||
k++;
|
||||
goto ret;
|
||||
}
|
||||
}
|
||||
if (leftright) {
|
||||
if (m2 > 0) {
|
||||
mhi = lshift(mhi, m2);
|
||||
if (mhi == NULL)
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* Compute mlo -- check for special case
|
||||
* that d is a normalized power of 2.
|
||||
|
@ -652,7 +665,7 @@ gdtoa
|
|||
mhi = lshift(mhi, 1);
|
||||
if (mhi == NULL)
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
for(i = 1;;i++) {
|
||||
dig = quorem(b,S) + '0';
|
||||
|
@ -672,14 +685,14 @@ gdtoa
|
|||
if (j <= 0) {
|
||||
if (b->wds > 1 || b->x[0])
|
||||
inex = STRTOG_Inexlo;
|
||||
}
|
||||
}
|
||||
else {
|
||||
dig++;
|
||||
inex = STRTOG_Inexhi;
|
||||
}
|
||||
}
|
||||
*s++ = dig;
|
||||
goto ret;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (j < 0 || (j == 0 && !mode
|
||||
#ifndef ROUND_BIASED
|
||||
|
@ -690,7 +703,7 @@ gdtoa
|
|||
if (rdir == 2) {
|
||||
inex = STRTOG_Inexlo;
|
||||
goto accept;
|
||||
}
|
||||
}
|
||||
while (cmp(S,mhi) > 0) {
|
||||
*s++ = dig;
|
||||
mhi1 = multadd(mhi, 10, 0);
|
||||
|
@ -703,12 +716,12 @@ gdtoa
|
|||
if (b == NULL)
|
||||
return NULL;
|
||||
dig = quorem(b,S) + '0';
|
||||
}
|
||||
}
|
||||
if (dig++ == '9')
|
||||
goto round_9_up;
|
||||
inex = STRTOG_Inexhi;
|
||||
goto accept;
|
||||
}
|
||||
}
|
||||
if (jj1 > 0) {
|
||||
b = lshift(b, 1);
|
||||
if (b == NULL)
|
||||
|
@ -718,24 +731,24 @@ gdtoa
|
|||
&& dig++ == '9')
|
||||
goto round_9_up;
|
||||
inex = STRTOG_Inexhi;
|
||||
}
|
||||
}
|
||||
if (b->wds > 1 || b->x[0])
|
||||
inex = STRTOG_Inexlo;
|
||||
accept:
|
||||
accept:
|
||||
*s++ = dig;
|
||||
goto ret;
|
||||
}
|
||||
}
|
||||
if (jj1 > 0 && rdir != 2) {
|
||||
if (dig == '9') { /* possible if i == 1 */
|
||||
round_9_up:
|
||||
round_9_up:
|
||||
*s++ = '9';
|
||||
inex = STRTOG_Inexhi;
|
||||
goto roundoff;
|
||||
}
|
||||
}
|
||||
inex = STRTOG_Inexhi;
|
||||
*s++ = dig + 1;
|
||||
goto ret;
|
||||
}
|
||||
}
|
||||
*s++ = dig;
|
||||
if (i == ilim)
|
||||
break;
|
||||
|
@ -746,7 +759,7 @@ gdtoa
|
|||
mlo = mhi = multadd(mhi, 10, 0);
|
||||
if (mlo == NULL)
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else {
|
||||
mlo = multadd(mlo, 10, 0);
|
||||
if (mlo == NULL)
|
||||
|
@ -754,9 +767,9 @@ gdtoa
|
|||
mhi = multadd(mhi, 10, 0);
|
||||
if (mhi == NULL)
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
for(i = 1;; i++) {
|
||||
*s++ = dig = quorem(b,S) + '0';
|
||||
|
@ -765,7 +778,7 @@ gdtoa
|
|||
b = multadd(b, 10, 0);
|
||||
if (b == NULL)
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* Round off last digit */
|
||||
|
||||
|
@ -773,37 +786,37 @@ gdtoa
|
|||
if (rdir == 2 || (b->wds <= 1 && !b->x[0]))
|
||||
goto chopzeros;
|
||||
goto roundoff;
|
||||
}
|
||||
}
|
||||
b = lshift(b, 1);
|
||||
if (b == NULL)
|
||||
return NULL;
|
||||
j = cmp(b, S);
|
||||
if (j > 0 || (j == 0 && dig & 1)) {
|
||||
roundoff:
|
||||
roundoff:
|
||||
inex = STRTOG_Inexhi;
|
||||
while(*--s == '9')
|
||||
if (s == s0) {
|
||||
k++;
|
||||
*s++ = '1';
|
||||
goto ret;
|
||||
}
|
||||
}
|
||||
++*s++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
chopzeros:
|
||||
chopzeros:
|
||||
if (b->wds > 1 || b->x[0])
|
||||
inex = STRTOG_Inexlo;
|
||||
while(*--s == '0'){}
|
||||
s++;
|
||||
}
|
||||
ret:
|
||||
}
|
||||
ret:
|
||||
Bfree(S);
|
||||
if (mhi) {
|
||||
if (mlo && mlo != mhi)
|
||||
Bfree(mlo);
|
||||
Bfree(mhi);
|
||||
}
|
||||
ret1:
|
||||
}
|
||||
ret1:
|
||||
Bfree(b);
|
||||
*s = 0;
|
||||
*decpt = k + 1;
|
||||
|
@ -811,4 +824,4 @@ gdtoa
|
|||
*rve = s;
|
||||
*kindp |= inex;
|
||||
return s0;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue