Author: tkreuzer Date: Wed Jul 28 02:59:33 2010 New Revision: 48323
URL: http://svn.reactos.org/svn/reactos?rev=48323&view=rev Log: Revert accidental changes to swprintf as well Now the kernel loads again
Modified: branches/ros-amd64-bringup/reactos/lib/rtl/swprintf.c
Modified: branches/ros-amd64-bringup/reactos/lib/rtl/swprintf.c URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/rt... ============================================================================== --- branches/ros-amd64-bringup/reactos/lib/rtl/swprintf.c [iso-8859-1] (original) +++ branches/ros-amd64-bringup/reactos/lib/rtl/swprintf.c [iso-8859-1] Wed Jul 28 02:59:33 2010 @@ -27,40 +27,33 @@ #define SPECIAL 32 /* 0x */ #define LARGE 64 /* use 'ABCDEF' instead of 'abcdef' */ #define REMOVEHEX 256 /* use 256 as remve 0x frim BASE 16 */ -typedef struct { - unsigned int mantissal:32; - unsigned int mantissah:20; - unsigned int exponent:11; - unsigned int sign:1; +typedef union { + struct { + unsigned int mantissal:32; + unsigned int mantissah:20; + unsigned int exponent:11; + unsigned int sign:1; + }; + long long AsLongLong; } double_t; + +/* We depend on this being true */ +C_ASSERT(sizeof(double_t) == sizeof(double));
static __inline int -_isinf(double __x) -{ - union - { - double* __x; - double_t* x; - } x; - - x.__x = &__x; - return ( x.x->exponent == 0x7ff && ( x.x->mantissah == 0 && x.x->mantissal == 0 )); +_isinf(double_t x) +{ + return ( x.exponent == 0x7ff && ( x.mantissah == 0 && x.mantissal == 0 )); }
static __inline int -_isnan(double __x) -{ - union - { - double* __x; - double_t* x; - } x; - x.__x = &__x; - return ( x.x->exponent == 0x7ff && ( x.x->mantissah != 0 || x.x->mantissal != 0 )); +_isnan(double_t x) +{ + return ( x.exponent == 0x7ff && ( x.mantissah != 0 || x.mantissal != 0 )); }
@@ -179,14 +172,13 @@ }
static wchar_t * -numberf(wchar_t * buf, wchar_t * end, double num, int base, int size, int precision, int type) +numberf(wchar_t * buf, wchar_t * end, double_t num, int base, int size, int precision, int type) { wchar_t c, sign, tmp[66]; const wchar_t *digits; const wchar_t *small_digits = L"0123456789abcdefghijklmnopqrstuvwxyz"; const wchar_t *large_digits = L"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int i; - long long x;
/* FIXME the float version of number is direcly copy of number @@ -201,9 +193,9 @@ c = (type & ZEROPAD) ? L'0' : L' '; sign = 0; if (type & SIGN) { - if (num < 0) { + if (num.sign) { sign = L'-'; - num = -num; + num.sign = 0; size--; } else if (type & PLUS) { sign = L'+'; @@ -220,15 +212,11 @@ size--; } i = 0; - if (num == 0) + if (num.AsLongLong == 0) tmp[i++] = L'0'; - else while (num != 0) - { - x = num; - tmp[i++] = digits[do_div(&x,base)]; -#ifndef _M_ARM // Missing __floatdidf in CeGCC 0.55 -- GCC 4.4 - num = x; -#endif + else while (num.AsLongLong != 0) + { + tmp[i++] = digits[do_div(&num.AsLongLong,base)]; } if (i > precision) precision = i; @@ -394,7 +382,7 @@ const char *s; const wchar_t *sw; const wchar_t *ss; - double _double; + double_t _double;
int flags; /* flags to number() */
@@ -600,7 +588,7 @@ case 'f': case 'g': case 'G': - _double = (double)va_arg(args, double); + _double = va_arg(args, double_t);
if ( _isnan(_double) ) { ss = L"Nan";