[ros-diffs] [amunger] 22137: Merged crt and string fixes from trunk, per GreatLord. Revisions: 21936, 21937*, 21939-21941, 21963-21965, 21967, 21969-21970, 21973-21974, 21976, 21987, 22011-22013, 22019-22023, 22027, 22060-22062, 22069-22073, 22075, 22079, 22105. Fixes the calc bug and supposedly some other things. ; 0) *partial

amunger at svn.reactos.org amunger at svn.reactos.org
Thu Jun 1 03:03:07 CEST 2006


Author: amunger
Date: Thu Jun  1 05:03:05 2006
New Revision: 22137

URL: http://svn.reactos.ru/svn/reactos?rev=22137&view=rev
Log:
Merged crt and string fixes from trunk, per GreatLord.
Revisions: 21936, 21937*, 21939-21941, 21963-21965, 21967, 21969-21970, 21973-21974, 21976, 21987, 22011-22013, 22019-22023, 22027, 22060-22062, 22069-22073, 22075, 22079, 22105.
Fixes the calc bug and supposedly some other things. ;0)
*partial

Added:
    branches/ros-branch-0_3_0/reactos/lib/crt/math/s_modf.c
Modified:
    branches/ros-branch-0_3_0/reactos/lib/crt/README.txt   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/conio/cgets.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/conio/cprintf.c   (contents, props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/conio/cputs.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/conio/getch.c   (contents, props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/conio/getche.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/conio/kbhit.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/conio/putch.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/conio/ungetch.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/crt.rbuild
    branches/ros-branch-0_3_0/reactos/lib/crt/io/open.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/acos.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/adjust.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/asin.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/atan.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/atan2.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/cabs.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/ceil.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/cos.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/cosh.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/exp.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/fabs.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/floor.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/fmod.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/frexp.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/huge_val.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/hypot.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/j0_y0.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/j1_y1.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/jn_yn.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/ldexp.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/log.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/log10.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/math.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/modf.c   (contents, props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/pow.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/sin.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/sinh.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/sqrt.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/stubs.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/tan.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/math/tanh.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/misc/environ.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/precomp.h   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/stdio/fgetws.c   (contents, props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/fcvt.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/fcvtbuf.c   (contents, props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/itoa.c   (contents, props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/itow.c   (contents, props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/putenv.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/swab.c   (contents, props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/wfulpath.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/witoa.c   (contents, props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/wmakpath.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/wputenv.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/wsenv.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/wsplitp.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/wtoi.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/wtoi64.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/wtol.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wine/cpp.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wine/cppexcept.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wine/heap.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wine/scanf.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wine/scanf.h   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wine/thread.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wine/undname.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcscoll.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcscspn.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcsdup.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcsicmp.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcslwr.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcsnicmp.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcspbrk.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcsrev.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcsset.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcsspn.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcsstr.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcstok.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcsupr.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcsxfrm.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wlasttok.c   (props changed)
    branches/ros-branch-0_3_0/reactos/lib/string/itoa.c
    branches/ros-branch-0_3_0/reactos/lib/string/itow.c
    branches/ros-branch-0_3_0/reactos/lib/string/wtoi.c
    branches/ros-branch-0_3_0/reactos/lib/string/wtol.c

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/README.txt
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/conio/cgets.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Modified: branches/ros-branch-0_3_0/reactos/lib/crt/conio/cprintf.c
URL: http://svn.reactos.ru/svn/reactos/branches/ros-branch-0_3_0/reactos/lib/crt/conio/cprintf.c?rev=22137&r1=22136&r2=22137&view=diff
==============================================================================
--- branches/ros-branch-0_3_0/reactos/lib/crt/conio/cprintf.c (original)
+++ branches/ros-branch-0_3_0/reactos/lib/crt/conio/cprintf.c Thu Jun  1 05:03:05 2006
@@ -1,27 +1,36 @@
 /*
- * COPYRIGHT:        See COPYING in the top level directory
- * PROJECT:          ReactOS kernel
+ * COPYRIGHT:        Winehq 
+ * PROJECT:          wine
  * FILE:             msvcrt/conio/cprintf.c
  * PURPOSE:          C Runtime
- * PROGRAMMER:       Eric Kohl (Imported from DJGPP)
+ * PROGRAMMER:       Magnus Olsen (Imported from wine cvs 2006-05-23) 
  */
 
 #include <precomp.h>
 
 /*
- * @unimplemented
+ * @implemented
  */
 int
 _cprintf(const char *fmt, ...)
 {
-  int     cnt;
-  char    buf[ 2048 ];		/* this is buggy, because buffer might be too small. */
-  va_list ap;
-
-  va_start(ap, fmt);
-  cnt = vsprintf(buf, fmt, ap);
-  va_end(ap);
-
-  _cputs(buf);
-  return cnt;
+  char buf[2048], *mem = buf;
+  int written, resize = sizeof(buf), retval;
+  va_list valist;
+    
+  while ((written = _vsnprintf( mem, resize, fmt, valist )) == -1 ||
+          written > resize)
+  {
+    resize = (written == -1 ? resize * 2 : written + 1);
+    if (mem != buf)
+       free (mem);
+    if (!(mem = (char *)malloc(resize)))
+      return  EOF;
+    va_start( valist, fmt );
+  }
+  va_end(valist);
+  retval = _cputs( mem );
+  if (mem != buf)
+      free (mem);      
+  return retval;
 }

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/conio/cprintf.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/conio/cputs.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Modified: branches/ros-branch-0_3_0/reactos/lib/crt/conio/getch.c
URL: http://svn.reactos.ru/svn/reactos/branches/ros-branch-0_3_0/reactos/lib/crt/conio/getch.c?rev=22137&r1=22136&r2=22137&view=diff
==============================================================================
--- branches/ros-branch-0_3_0/reactos/lib/crt/conio/getch.c (original)
+++ branches/ros-branch-0_3_0/reactos/lib/crt/conio/getch.c Thu Jun  1 05:03:05 2006
@@ -53,17 +53,3 @@
     return c;
 }
 
-#if 0
-/*
- * @unimplemented
- */
-int _getche(void)
-{
-    int c;
-
-    c = _getch();
-    _putch(c);
-
-    return c;
-}
-#endif

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/conio/getch.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/conio/getche.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/conio/kbhit.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/conio/putch.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/conio/ungetch.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Modified: branches/ros-branch-0_3_0/reactos/lib/crt/crt.rbuild
URL: http://svn.reactos.ru/svn/reactos/branches/ros-branch-0_3_0/reactos/lib/crt/crt.rbuild?rev=22137&r1=22136&r2=22137&view=diff
==============================================================================
--- branches/ros-branch-0_3_0/reactos/lib/crt/crt.rbuild (original)
+++ branches/ros-branch-0_3_0/reactos/lib/crt/crt.rbuild Thu Jun  1 05:03:05 2006
@@ -119,7 +119,8 @@
 		<file>jn_yn.c</file>
 		<file>ldexp.c</file>
 		<file>log10.c</file>
-		<file>modf.c</file>
+            <file>modf.c</file>
+		<file>s_modf.c</file>
 		<file>pow.c</file>
 		<file>sinh.c</file>
 		<file>stubs.c</file>

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/io/open.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/acos.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/adjust.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/asin.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/atan.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/atan2.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/cabs.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/ceil.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/cos.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/cosh.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/exp.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/fabs.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/floor.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/fmod.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/frexp.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/huge_val.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/hypot.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/j0_y0.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/j1_y1.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/jn_yn.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/ldexp.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/log.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/log10.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/math.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Modified: branches/ros-branch-0_3_0/reactos/lib/crt/math/modf.c
URL: http://svn.reactos.ru/svn/reactos/branches/ros-branch-0_3_0/reactos/lib/crt/math/modf.c?rev=22137&r1=22136&r2=22137&view=diff
==============================================================================
--- branches/ros-branch-0_3_0/reactos/lib/crt/math/modf.c (original)
+++ branches/ros-branch-0_3_0/reactos/lib/crt/math/modf.c Thu Jun  1 05:03:05 2006
@@ -14,74 +14,6 @@
 
 //static const double one = 1.0;
 
-double modf(double __x, double *__i)
-{
-	union
-	{
-		double*   __x;
-		double_t*   x;
-	} x;
-	union
-	{
-		double*     __i;
-		double_t*  iptr;
-	} iptr;
-
-	int j0;
-	unsigned int i;
-
-	x.__x = &__x;
-	iptr.__i = __i;
-
-
-	j0 = x.x->exponent - 0x3ff;  /* exponent of x */
-	if(j0<20) {                     /* integer part in high x */
-		if(j0<0) {                  /* |x|<1 */
-			*__i = 0.0;
-			iptr.iptr->sign = x.x->sign;
-			return __x;
-		} else {
-
-			if ( x.x->mantissah == 0 && x.x->mantissal == 0 ) {
-				*__i = __x;
-				return 0.0;
-			}
-
-			i = (0x000fffff)>>j0;
-			iptr.iptr->sign = x.x->sign;
-			iptr.iptr->exponent = x.x->exponent;
-			iptr.iptr->mantissah = x.x->mantissah&(~i);
-			iptr.iptr->mantissal = 0;
-			if ( __x == *__i ) {
-				__x = 0.0;
-				x.x->sign = iptr.iptr->sign;
-				return __x;
-			}
-			return __x - *__i;
-		}
-	} else if (j0>51) {             /* no fraction part */
-		*__i = __x;
-		if ( _isnan(__x) || _isinf(__x) )
-			return __x;
-
-		__x = 0.0;
-		x.x->sign = iptr.iptr->sign;
-		return __x;
-	} else {                        /* fraction part in low x */
-
-		i = ((unsigned)(0xffffffff))>>(j0-20);
-		iptr.iptr->sign = x.x->sign;
-		iptr.iptr->exponent = x.x->exponent;
-		iptr.iptr->mantissah = x.x->mantissah;
-		iptr.iptr->mantissal = x.x->mantissal&(~i);
-		if ( __x == *__i ) {
-			__x = 0.0;
-			x.x->sign = iptr.iptr->sign;
-			return __x;
-		}
-		return __x - *__i;
-	}
-}
 
 
 long double modfl(long double __x, long double *__i)

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/modf.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/pow.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Added: branches/ros-branch-0_3_0/reactos/lib/crt/math/s_modf.c
URL: http://svn.reactos.ru/svn/reactos/branches/ros-branch-0_3_0/reactos/lib/crt/math/s_modf.c?rev=22137&view=auto
==============================================================================
--- branches/ros-branch-0_3_0/reactos/lib/crt/math/s_modf.c (added)
+++ branches/ros-branch-0_3_0/reactos/lib/crt/math/s_modf.c Thu Jun  1 05:03:05 2006
@@ -1,0 +1,194 @@
+
+
+/* @(#)s_modf.c 5.1 93/09/24 */
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice 
+ * is preserved.
+ * ====================================================
+ */
+
+/*
+FUNCTION
+       <<modf>>, <<modff>>---split fractional and integer parts
+
+INDEX
+	modf
+INDEX
+	modff
+
+ANSI_SYNOPSIS
+	#include <math.h>
+	double modf(double <[val]>, double *<[ipart]>);
+        float modff(float <[val]>, float *<[ipart]>);
+
+TRAD_SYNOPSIS
+	#include <math.h>
+	double modf(<[val]>, <[ipart]>)
+        double <[val]>;
+        double *<[ipart]>;
+
+	float modff(<[val]>, <[ipart]>)
+	float <[val]>;
+        float *<[ipart]>;
+
+DESCRIPTION
+	<<modf>> splits the double <[val]> apart into an integer part
+	and a fractional part, returning the fractional part and
+	storing the integer part in <<*<[ipart]>>>.  No rounding
+	whatsoever is done; the sum of the integer and fractional
+	parts is guaranteed to be exactly  equal to <[val]>.   That
+	is, if . <[realpart]> = modf(<[val]>, &<[intpart]>); then
+	`<<<[realpart]>+<[intpart]>>>' is the same as <[val]>.
+	<<modff>> is identical, save that it takes and returns
+	<<float>> rather than <<double>> values. 
+
+RETURNS
+	The fractional part is returned.  Each result has the same
+	sign as the supplied argument <[val]>.
+
+PORTABILITY
+	<<modf>> is ANSI C. <<modff>> is an extension.
+
+QUICKREF
+	modf  ansi pure 
+	modff - pure
+
+*/
+
+/*
+ * modf(double x, double *iptr) 
+ * return fraction part of x, and return x's integral part in *iptr.
+ * Method:
+ *	Bit twiddling.
+ *
+ * Exception:
+ *	No exception.
+ */
+
+
+static const double one = 1.0;
+
+#define __int32_t long
+#define __uint32_t unsigned long
+#define __IEEE_LITTLE_ENDIAN
+
+#ifdef __IEEE_BIG_ENDIAN
+
+typedef union 
+{
+  struct 
+  {
+    __uint32_t msw;
+    __uint32_t lsw;
+  } parts;
+  double value;
+} ieee_double_shape_type;
+
+#endif
+
+#ifdef __IEEE_LITTLE_ENDIAN
+
+typedef union 
+{
+  struct 
+  {
+    __uint32_t lsw;
+    __uint32_t msw;
+  } parts;
+  double value;
+} ieee_double_shape_type;
+
+#endif
+
+
+/* Get two 32 bit ints from a double.  */
+
+#define EXTRACT_WORDS(ix0,ix1,d)				\
+do {								\
+  ieee_double_shape_type ew_u;					\
+  ew_u.value = (d);						\
+  (ix0) = ew_u.parts.msw;					\
+  (ix1) = ew_u.parts.lsw;					\
+} while (0)
+
+/* Get the more significant 32 bit int from a double.  */
+
+#define GET_HIGH_WORD(i,d)					\
+do {								\
+  ieee_double_shape_type gh_u;					\
+  gh_u.value = (d);						\
+  (i) = gh_u.parts.msw;						\
+} while (0)
+
+/* Get the less significant 32 bit int from a double.  */
+
+#define GET_LOW_WORD(i,d)					\
+do {								\
+  ieee_double_shape_type gl_u;					\
+  gl_u.value = (d);						\
+  (i) = gl_u.parts.lsw;						\
+} while (0)
+
+/* Set a double from two 32 bit ints.  */
+
+#define INSERT_WORDS(d,ix0,ix1)					\
+do {								\
+  ieee_double_shape_type iw_u;					\
+  iw_u.parts.msw = (ix0);					\
+  iw_u.parts.lsw = (ix1);					\
+  (d) = iw_u.value;						\
+} while (0)
+
+
+
+
+double modf(double x, double *iptr)
+{
+	__int32_t i0,i1,j_0;
+	__uint32_t i;
+	EXTRACT_WORDS(i0,i1,x);
+	j_0 = ((i0>>20)&0x7ff)-0x3ff;	/* exponent of x */
+	if(j_0<20) {			/* integer part in high x */
+	    if(j_0<0) {			/* |x|<1 */
+	        INSERT_WORDS(*iptr,i0&0x80000000U,0);	/* *iptr = +-0 */
+		return x;
+	    } else {
+		i = (0x000fffff)>>j_0;
+		if(((i0&i)|i1)==0) {		/* x is integral */
+		    __uint32_t high;
+		    *iptr = x;
+		    GET_HIGH_WORD(high,x);
+		    INSERT_WORDS(x,high&0x80000000U,0);	/* return +-0 */
+		    return x;
+		} else {
+		    INSERT_WORDS(*iptr,i0&(~i),0);
+		    return x - *iptr;
+		}
+	    }
+	} else if (j_0>51) {		/* no fraction part */
+	    __uint32_t high;
+	    *iptr = x*one;
+	    GET_HIGH_WORD(high,x);
+	    INSERT_WORDS(x,high&0x80000000U,0);	/* return +-0 */
+	    return x;
+	} else {			/* fraction part in low x */
+	    i = ((__uint32_t)(0xffffffffU))>>(j_0-20);
+	    if((i1&i)==0) { 		/* x is integral */
+	        __uint32_t high;
+		*iptr = x;
+		GET_HIGH_WORD(high,x);
+		INSERT_WORDS(x,high&0x80000000U,0);	/* return +-0 */
+		return x;
+	    } else {
+	        INSERT_WORDS(*iptr,i0,i1&(~i));
+		return x - *iptr;
+	    }
+	}
+}
+
+//#endif /* _DOUBLE_IS_32BITS */

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/sin.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/sinh.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/sqrt.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/stubs.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/tan.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/math/tanh.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/misc/environ.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/precomp.h
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Modified: branches/ros-branch-0_3_0/reactos/lib/crt/stdio/fgetws.c
URL: http://svn.reactos.ru/svn/reactos/branches/ros-branch-0_3_0/reactos/lib/crt/stdio/fgetws.c?rev=22137&r1=22136&r2=22137&view=diff
==============================================================================
--- branches/ros-branch-0_3_0/reactos/lib/crt/stdio/fgetws.c (original)
+++ branches/ros-branch-0_3_0/reactos/lib/crt/stdio/fgetws.c Thu Jun  1 05:03:05 2006
@@ -32,23 +32,19 @@
 
 wchar_t* fgetws(wchar_t* s, int n, FILE* f)
 {
-  wchar_t c = 0;
-  wchar_t* cs;
+
+  int c=0;
+  wchar_t *cs;
 
   cs = s;
-  //while (--n > 0 && (c = getwc(f)) != WEOF) {
-  while (n > 0) {
-    c = getwc(f);
-    if (c == WEOF)
-      break;
-    n--;
+  while (--n>0 && (c = getwc(f)) != WEOF)
+  {
     *cs++ = c;
     if (c == L'\n')
       break;
   }
-  if (c == WEOF && cs == s) {
+  if (c == WEOF && cs == s)
     return NULL;
-  }
   *cs++ = L'\0';
   return s;
 }

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/stdio/fgetws.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/fcvt.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Modified: branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/fcvtbuf.c
URL: http://svn.reactos.ru/svn/reactos/branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/fcvtbuf.c?rev=22137&r1=22136&r2=22137&view=diff
==============================================================================
--- branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/fcvtbuf.c (original)
+++ branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/fcvtbuf.c Thu Jun  1 05:03:05 2006
@@ -1,61 +1,127 @@
-/* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 #include <float.h>
+#include <math.h>
 #include <malloc.h>
 // #include <msvcrt/locale.h>
 
-void __ecvround (char *, char *, const char *, int *);
-char *ecvtbuf (double, int, int *, int *, char *);
+// replace fjgpp fcvtbuf from project  http://www.jbox.dk/sanos/source/lib/fcvt.c.html 
+// with small modification's to match ReactOS arch
 
-char *
-fcvtbuf (double value, int ndigits, int *decpt, int *sign, char *buf)
+// Floating point to string conversion routines
+//
+// Copyright (C) 2002 Michael Ringgaard. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 
+// 1. Redistributions of source code must retain the above copyright 
+//    notice, this list of conditions and the following disclaimer.  
+// 2. Redistributions in binary form must reproduce the above copyright
+//    notice, this list of conditions and the following disclaimer in the
+//    documentation and/or other materials provided with the distribution.  
+// 3. Neither the name of the project nor the names of its contributors
+//    may be used to endorse or promote products derived from this software
+//    without specific prior written permission. 
+// 
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+// ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
+// SUCH DAMAGE.
+// 
+
+
+//#include <math.h>
+#define CVTBUFSIZE  2 * DBL_MAX_10_EXP + 10
+static char *cvt(double arg, int ndigits, int *decpt, int *sign, char *buf, int eflag)
 {
-  static char INFINITY[] = "Infinity";
-  char decimal = '.' /* localeconv()->decimal_point[0] */;
-  int digits = ndigits >= 0 ? ndigits : 0;
-  char *cvtbuf = (char *)_alloca (2*DBL_MAX_10_EXP + 16);
-  char *s = cvtbuf;
-  char *dot;
+  int r2;
+  double fi, fj;
+  char *p, *p1;
 
-  sprintf (cvtbuf, "%-+#.*f", DBL_MAX_10_EXP + digits + 1, value);
+  if (ndigits < 0) ndigits = 0;
+  if (ndigits >= CVTBUFSIZE - 1) ndigits = CVTBUFSIZE - 2;
+  r2 = 0;
+  *sign = 0;
+  p = &buf[0];
+  if (arg < 0)
+  {
+    *sign = 1;
+    arg = -arg;
+  }
+  arg = modf(arg, &fi);
+  p1 = &buf[CVTBUFSIZE];
 
-  /* The sign.  */
-  if (*s++ == '-')
-    *sign = 1;
-  else
-    *sign = 0;
+  if (fi != 0) 
+  {
+    p1 = &buf[CVTBUFSIZE];
+    while (fi != 0) 
+    {
+      fj = modf(fi / 10, &fi);
+      *--p1 = (int)((fj + .03) * 10) + '0';
+      r2++;
+    }
+    while (p1 < &buf[CVTBUFSIZE]) *p++ = *p1++;
+  } 
+  else if (arg > 0)
+  {
+    while ((fj = arg * 10) < 1) 
+    {
+      arg = fj;
+      r2--;
+    }
+  }
+  p1 = &buf[ndigits];
+  if (eflag == 0) p1 += r2;
+  *decpt = r2;
+  if (p1 < &buf[0]) 
+  {
+    buf[0] = '\0';
+    return buf;
+  }
+  while (p <= p1 && p < &buf[CVTBUFSIZE])
+  {
+    arg *= 10;
+    arg = modf(arg, &fj);
+    *p++ = (int) fj + '0';
+  }
+  if (p1 >= &buf[CVTBUFSIZE]) 
+  {
+    buf[CVTBUFSIZE - 1] = '\0';
+    return buf;
+  }
+  p = p1;
+  *p1 += 5;
+  while (*p1 > '9') 
+  {
+    *p1 = '0';
+    if (p1 > buf)
+      ++*--p1;
+    else 
+    {
+      *p1 = '1';
+      (*decpt)++;
+      if (eflag == 0) 
+      {
+        if (p > buf) *p = '0';
+        p++;
+      }
+    }
+  }
+  *p = '\0';
+  return buf;
+}
 
-  /* Where's the decimal point?  */
-  dot = strchr (s, decimal);
-  *decpt = dot ? dot - s : (int)strlen (s);
-
-  /* SunOS docs says if NDIGITS is 8 or more, produce "Infinity"
-     instead of "Inf".  */
-  if (strncmp (s, "Inf", 3) == 0)
-    {
-      memcpy (buf, INFINITY, ndigits >= 8 ? 9 : 3);
-      if (ndigits < 8)
-	buf[3] = '\0';
-      return buf;
-    }
-  else if (ndigits < 0)
-    return ecvtbuf (value, *decpt + ndigits, decpt, sign, buf);
-  else if (*s == '0' && value != 0.0)
-    return ecvtbuf (value, ndigits, decpt, sign, buf);
-  else
-    {
-      memcpy (buf, s, *decpt);
-      if (s[*decpt] == decimal)
-	{
-	  memcpy (buf + *decpt, s + *decpt + 1, ndigits);
-	  buf[*decpt + ndigits] = '\0';
-	}
-      else
-	buf[*decpt] = '\0';
-      __ecvround (buf, buf + *decpt + ndigits - 1,
-		s + *decpt + ndigits + 1, decpt);
-      return buf;
-    }
+char *fcvtbuf(double arg, int ndigits, int *decpt, int *sign, char *buf)
+{
+  return cvt(arg, ndigits, decpt, sign, buf, 0);
 }

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/fcvtbuf.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Modified: branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/itoa.c
URL: http://svn.reactos.ru/svn/reactos/branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/itoa.c?rev=22137&r1=22136&r2=22137&view=diff
==============================================================================
--- branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/itoa.c (original)
+++ branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/itoa.c Thu Jun  1 05:03:05 2006
@@ -104,37 +104,32 @@
 
 /*
  * @implemented
+ * copy it from wine 0.9.0 with small modifcations do check for NULL
  */
-char* _ultoa(unsigned long value, char* string, int radix)
+char* ultoa(unsigned long value, char* string, int radix)
 {
-  char tmp[33];
-  char* tp = tmp;
-  long i;
-  unsigned long v = value;
-  char* sp;
+    char buffer[33];
+    char *pos;
+    int digit;
+    
+    pos = &buffer[32];
+    *pos = '\0';
 
-  if (radix > 36 || radix <= 1)
-  {
-    __set_errno(EDOM);
-    return 0;
-  }
+    if (string == NULL)
+    {
+      return NULL;         
+    }
+    
+    do {
+	digit = value % radix;
+	value = value / radix;
+	if (digit < 10) {
+	    *--pos = '0' + digit;
+	} else {
+	    *--pos = 'a' + digit - 10;
+	} /* if */
+    } while (value != 0L);
 
-  while (v || tp == tmp)
-  {
-    i = v % radix;
-    v = v / radix;
-    if (i < 10)
-      *tp++ = i+'0';
-    else
-      *tp++ = i + 'a' - 10;
-  }
-
-  if (string == 0)
-    string = (char*)malloc((tp-tmp)+1);
-  sp = string;
-
-  while (tp > tmp)
-    *sp++ = *--tp;
-  *sp = 0;
-  return string;
+    memcpy(string, pos, &buffer[32] - pos + 1);
+    return string;
 }

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/itoa.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Modified: branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/itow.c
URL: http://svn.reactos.ru/svn/reactos/branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/itow.c?rev=22137&r1=22136&r2=22137&view=diff
==============================================================================
--- branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/itow.c (original)
+++ branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/itow.c Thu Jun  1 05:03:05 2006
@@ -16,138 +16,81 @@
 
 /*
  * @implemented
+ * from wine cvs 2006-05-21
  */
 wchar_t* _itow(int value, wchar_t* string, int radix)
 {
-    wchar_t     tmp [33];
-    wchar_t     * tp = tmp;
-    int     i;
-    unsigned int    v;
-    int     sign;
-    wchar_t     * sp;
+   return _ltow(value, string, radix);
+}
 
-    if (radix > 36 || radix <= 1)
-    {
-        __set_errno(EDOM);
-        return 0;
-    }
+/*
+ * @implemented
+ * from wine cvs 2006-05-21
+ */
+wchar_t* _ltow(long value, wchar_t* string, int radix)
+{
+     unsigned long val;
+    int negative;
+    WCHAR buffer[33];
+    PWCHAR pos;
+    WCHAR digit;
 
-    sign = ((radix == 10) && (value < 0));
-    if (sign) {
-        v = -value;
+    if (value < 0 && radix == 10) {
+	negative = 1;
+        val = -value;
     } else {
-        v = (unsigned) value;
-    }
-    while (v || tp == tmp) {
-        i = v % radix;
-        v = v / radix;
-        if (i < 10) {
-            *tp++ = i+ (wchar_t) '0';
-        } else {
-            *tp++ = i + (wchar_t) 'a' - 10;
-        }
-    }
+	negative = 0;
+        val = value;
+    } /* if */
 
-    if (string == 0) {
-        string = (wchar_t*) malloc((tp-tmp) + (sign + 1) * sizeof(wchar_t));
-    }
-    sp = string;
+    pos = &buffer[32];
+    *pos = '\0';
 
-    if (sign) {
-        *sp++ = (wchar_t) '-';
-    }
-    while (tp > tmp) {
-        *sp++ = *--tp;
-    }
-    *sp = (wchar_t) 0;
+    do {
+	digit = val % radix;
+	val = val / radix;
+	if (digit < 10) {
+	    *--pos = '0' + digit;
+	} else {
+	    *--pos = 'a' + digit - 10;
+	} /* if */
+    } while (val != 0L);
+
+    if (negative) {
+	*--pos = '-';
+    } /* if */
+
+    if (str != NULL) {
+	memcpy(string, pos, (&buffer[32] - pos + 1) * sizeof(WCHAR));
+    } /* if */
     return string;
 }
 
 /*
  * @implemented
- */
-wchar_t* _ltow(long value, wchar_t* string, int radix)
-{
-    wchar_t tmp [33];
-    wchar_t* tp = tmp;
-    long int i;
-    unsigned long int v;
-    int sign;
-    wchar_t* sp;
-
-    if (radix > 36 || radix <= 1) {
-        __set_errno(EDOM);
-        return 0;
-    }
-
-    sign = ((radix == 10) && (value < 0));
-    if (sign) {
-        v = -value;
-    } else {
-        v = (unsigned long) value;
-    }
-    while (v || tp == tmp) {
-        i = v % radix;
-        v = v / radix;
-        if (i < 10) {
-            *tp++ = i + (wchar_t) '0';
-        } else {
-            *tp++ = i + (wchar_t) 'a' - 10;
-        }
-    }
-
-    if (string == 0) {
-        string = (wchar_t*) malloc((tp - tmp) + (sign + 1) * sizeof(wchar_t));
-    }
-    sp = string;
-
-    if (sign) {
-        *sp++ = (wchar_t) '-';
-    }
-    while (tp > tmp) {
-        *sp++ = *--tp;
-    }
-    *sp = (wchar_t) 0;
-    return string;
-}
-
-/*
- * @unimplemented
+ * from wine cvs 2006-05-21
  */
 wchar_t* _ultow(unsigned long value, wchar_t* string, int radix)
 {
-    wchar_t tmp [33];
-    wchar_t* tp = tmp;
-    long int i;
-    unsigned long int v = value;
-    wchar_t* sp;
+    WCHAR buffer[33];
+    PWCHAR pos;
+    WCHAR digit;
 
-    if (radix > 36 || radix <= 1) {
-        __set_errno(EDOM);
-        return 0;
-    }
-    while (v || tp == tmp) {
-        i = v % radix;
-        v = v / radix;
-        if (i < 10) {
-            *tp++ = i + (wchar_t) '0';
-        } else {
-            *tp++ = i + (wchar_t) 'a' - 10;
-        }
-    }
+    pos = &buffer[32];
+    *pos = '\0';
 
-    if (string == 0) {
-#ifdef _MSVCRT_LIB_    // TODO: check on difference?
-        string = (wchar_t*)malloc(((tp-tmp)+1)*sizeof(wchar_t));
-#else // TODO: FIXME: review which is correct
-        string = (wchar_t*)malloc((tp - tmp) + sizeof(wchar_t));
-#endif /*_MSVCRT_LIB_*/
-    }
-    sp = string;
+    do {
+	digit = value % radix;
+	value = value / radix;
+	if (digit < 10) {
+	    *--pos = '0' + digit;
+	} else {
+	    *--pos = 'a' + digit - 10;
+	} /* if */
+    } while (value != 0L);
 
-    while (tp > tmp) {
-        *sp++ = *--tp;
-    }
-    *sp = (wchar_t) 0;
+    if (string != NULL) {
+	memcpy(string, pos, (&buffer[32] - pos + 1) * sizeof(WCHAR));
+    } /* if */
     return string;
 }

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/itow.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/putenv.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Modified: branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/swab.c
URL: http://svn.reactos.ru/svn/reactos/branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/swab.c?rev=22137&r1=22136&r2=22137&view=diff
==============================================================================
--- branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/swab.c (original)
+++ branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/swab.c Thu Jun  1 05:03:05 2006
@@ -12,17 +12,23 @@
 
 /*
  * @implemented
+ *
+ * copy this swab from wine cvs 2006-05-24
  */
-void _swab (const char* caFrom, char* caTo, size_t sizeToCopy)
+void _swab (const char *  src,  char *  dst,  size_t  sizeToCopy 
+ )   
+ 
 {
-  if (sizeToCopy > 1)
+ if (sizeToCopy > 1)
   {
-    sizeToCopy = sizeToCopy >> 1;
+    sizeToCopy = (unsigned)sizeToCopy >> 1;
 
     while (sizeToCopy--) {
-      *caTo++ = caFrom[1];
-      *caTo++ = *caFrom++;
-      caFrom++;
+      char s0 = src[0];
+      char s1 = src[1];
+      *dst++ = s1;
+      *dst++ = s0;
+      src = src + 2;
     }
   }
 }

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/swab.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/wfulpath.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Modified: branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/witoa.c
URL: http://svn.reactos.ru/svn/reactos/branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/witoa.c?rev=22137&r1=22136&r2=22137&view=diff
==============================================================================
--- branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/witoa.c (original)
+++ branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/witoa.c Thu Jun  1 05:03:05 2006
@@ -7,88 +7,75 @@
  * UPDATE HISTORY:
  *              1995: Created
  *              1998: Added ltoa Boudewijn Dekker
+ *              2006 : replace all api in this file to wine cvs 2006-05-21
  */
-/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
+/*  */
 #include <precomp.h>
 
 /*
  * @implemented
+ * copy _i64toa from wine cvs 2006 month 05 day 21
  */
 char* _i64toa(__int64 value, char* string, int radix)
 {
-  char tmp[65];
-  char *tp = tmp;
-  int i;
-  unsigned v;
-  int sign;
-  char *sp;
+    ULONGLONG val;
+    int negative;
+    char buffer[65];
+    char *pos;
+    int digit;
 
-  if (radix > 36 || radix <= 1)
-  {
-    __set_errno(EDOM);
-    return 0;
-  }
+    if (value < 0 && radix == 10) {
+	negative = 1;
+        val = -value;
+    } else {
+	negative = 0;
+        val = value;
+    } /* if */
 
-  sign = (radix == 10 && value < 0);
-  if (sign)
-    v = -value;
-  else
-    v = (unsigned)value;
-  while (v || tp == tmp)
-  {
-    i = v % radix;
-    v = v / radix;
-    if (i < 10)
-      *tp++ = i+'0';
-    else
-      *tp++ = i + 'a' - 10;
-  }
+    pos = &buffer[64];
+    *pos = '\0';
 
-  if (string == 0)
-    string = (char *)malloc((tp-tmp)+sign+1);
-  sp = string;
+    do {
+	digit = val % radix;
+	val = val / radix;
+	if (digit < 10) {
+	    *--pos = '0' + digit;
+	} else {
+	    *--pos = 'a' + digit - 10;
+	} /* if */
+    } while (val != 0L);
 
-  if (sign)
-    *sp++ = '-';
-  while (tp > tmp)
-    *sp++ = *--tp;
-  *sp = 0;
-  return string;
+    if (negative) {
+	*--pos = '-';
+    } /* if */
+
+    memcpy(string, pos, &buffer[64] - pos + 1);
+    return string;
 }
+
 
 /*
  * @implemented
  */
 char* _ui64toa(unsigned __int64 value, char* string, int radix)
 {
-  char tmp[65];
-  char *tp = tmp;
-  long i;
-  unsigned long v = value;
-  char *sp;
+    char buffer[65];
+    char *pos;
+    int digit;
 
-  if (radix > 36 || radix <= 1)
-  {
-    __set_errno(EDOM);
-    return 0;
-  }
+    pos = &buffer[64];
+    *pos = '\0';
 
-  while (v || tp == tmp)
-  {
-    i = v % radix;
-    v = v / radix;
-    if (i < 10)
-      *tp++ = i+'0';
-    else
-      *tp++ = i + 'a' - 10;
-  }
+    do {
+	digit = value % radix;
+	value = value / radix;
+	if (digit < 10) {
+	    *--pos = '0' + digit;
+	} else {
+	    *--pos = 'a' + digit - 10;
+	} /* if */
+    } while (value != 0L);
 
-  if (string == 0)
-    string = (char *)malloc((tp-tmp)+1);
-  sp = string;
-
-  while (tp > tmp)
-    *sp++ = *--tp;
-  *sp = 0;
-  return string;
+    memcpy(string, pos, &buffer[64] - pos + 1);
+    return string;
 }

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/witoa.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/wmakpath.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/wputenv.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/wsenv.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/wsplitp.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/wtoi.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/wtoi64.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/stdlib/wtol.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wine/cpp.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wine/cppexcept.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wine/heap.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wine/scanf.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wine/scanf.h
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wine/thread.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wine/undname.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcscoll.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcscspn.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcsdup.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcsicmp.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcslwr.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcsnicmp.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcspbrk.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcsrev.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcsset.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcsspn.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcsstr.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcstok.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcsupr.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wcsxfrm.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Propchange: branches/ros-branch-0_3_0/reactos/lib/crt/wstring/wlasttok.c
------------------------------------------------------------------------------
--- svn:needs-lock (original)
+++ svn:needs-lock (removed)
@@ -1,1 +1,0 @@
-*

Modified: branches/ros-branch-0_3_0/reactos/lib/string/itoa.c
URL: http://svn.reactos.ru/svn/reactos/branches/ros-branch-0_3_0/reactos/lib/string/itoa.c?rev=22137&r1=22136&r2=22137&view=diff
==============================================================================
--- branches/ros-branch-0_3_0/reactos/lib/string/itoa.c (original)
+++ branches/ros-branch-0_3_0/reactos/lib/string/itoa.c Thu Jun  1 05:03:05 2006
@@ -1,82 +1,76 @@
 #include <string.h>
 #include <stdlib.h>
+#include <windows.h>
 
 /*
  * @implemented
+ * copy _i64toa from wine cvs 2006 month 05 day 21
  */
 char *
 _i64toa(__int64 value, char *string, int radix)
 {
-  char tmp[65];
-  char *tp = tmp;
-  __int64 i;
-  unsigned __int64 v;
-  __int64 sign;
-  char *sp;
+    ULONGLONG  val;
+    int negative;
+    char buffer[65];
+    char *pos;
+    int digit;
 
-  if (radix > 36 || radix <= 1)
-  {
-    return 0;
-  }
+    if (value < 0 && radix == 10) {
+	negative = 1;
+        val = -value;
+    } else {
+	negative = 0;
+        val = value;
+    } /* if */
 
-  sign = (radix == 10 && value < 0);
-  if (sign)
-    v = -value;
-  else
-    v = (unsigned __int64)value;
-  while (v || tp == tmp)
-  {
-    i = v % radix;
-    v = v / radix;
-    if (i < 10)
-      *tp++ = i+'0';
-    else
-      *tp++ = i + 'a' - 10;
-  }
+    pos = &buffer[64];
+    *pos = '\0';
 
-  sp = string;
-  if (sign)
-    *sp++ = '-';
-  while (tp > tmp)
-    *sp++ = *--tp;
-  *sp = 0;
-  return string;
+    do {
+	digit = val % radix;
+	val = val / radix;
+	if (digit < 10) {
+	    *--pos = '0' + digit;
+	} else {
+	    *--pos = 'a' + digit - 10;
+	} /* if */
+    } while (val != 0L);
+
+    if (negative) {
+	*--pos = '-';
+    } /* if */
+
+    memcpy(string, pos, &buffer[64] - pos + 1);
+    return string;
 }
 
 
 /*
  * @implemented
+ * copy _i64toa from wine cvs 2006 month 05 day 21
  */
 char *
 _ui64toa(unsigned __int64 value, char *string, int radix)
 {
-  char tmp[65];
-  char *tp = tmp;
-  __int64 i;
-  unsigned __int64 v;
-  char *sp;
+    char buffer[65];
+    char *pos;
+    int digit;
 
-  if (radix > 36 || radix <= 1)
-  {
-    return 0;
-  }
+    pos = &buffer[64];
+    *pos = '\0';
 
-  v = (unsigned __int64)value;
-  while (v || tp == tmp)
-  {
-    i = v % radix;
-    v = v / radix;
-    if (i < 10)
-      *tp++ = i+'0';
-    else
-      *tp++ = i + 'a' - 10;
-  }
+    do {
+	digit = value % radix;
+	value = value / radix;
+	if (digit < 10) {
+	    *--pos = '0' + digit;
+	} else {
+	    *--pos = 'a' + digit - 10;
+	} /* if */
+    } while (value != 0L);
 
-  sp = string;
-  while (tp > tmp)
-    *sp++ = *--tp;
-  *sp = 0;
-  return string;
+    memcpy(string, pos, &buffer[64] - pos + 1);
+    return string;
 }
 
 
@@ -133,35 +127,35 @@
 
 
 /*
- * @implemented
+ * @implemented 
+ *  copy it from wine 0.9.0 with small modifcations do check for NULL
  */
 char *
 _ultoa(unsigned long value, char *string, int radix)
 {
-  char tmp[33];
-  char *tp = tmp;
-  long i;
-  unsigned long v = value;
-  char *sp;
+    char buffer[33];
+    char *pos;
+    int digit;
+    
+    pos = &buffer[32];
+    *pos = '\0';
 
-  if (radix > 36 || radix <= 1)
-  {
-    return 0;
-  }
+    if (string == NULL)
+    {
+      return NULL;         
+    }
+    
+    do {
+	digit = value % radix;
+	value = value / radix;
+	if (digit < 10) {
+	    *--pos = '0' + digit;
+	} else {
+	    *--pos = 'a' + digit - 10;
+	} /* if */
+    } while (value != 0L);
 
-  while (v || tp == tmp)
-  {
-    i = v % radix;
-    v = v / radix;
-    if (i < 10)
-      *tp++ = i+'0';
-    else
-      *tp++ = i + 'a' - 10;
-  }
-
-  sp = string;
-  while (tp > tmp)
-    *sp++ = *--tp;
-  *sp = 0;
-  return string;
+    memcpy(string, pos, &buffer[32] - pos + 1);
+    
+    return string;
 }

Modified: branches/ros-branch-0_3_0/reactos/lib/string/itow.c
URL: http://svn.reactos.ru/svn/reactos/branches/ros-branch-0_3_0/reactos/lib/string/itow.c?rev=22137&r1=22136&r2=22137&view=diff
==============================================================================
--- branches/ros-branch-0_3_0/reactos/lib/string/itow.c (original)
+++ branches/ros-branch-0_3_0/reactos/lib/string/itow.c Thu Jun  1 05:03:05 2006
@@ -1,45 +1,48 @@
 #include <string.h>
+#include <windows.h>
 
 /*
  * @implemented
+ * from wine cvs 2006-05-21
  */
 wchar_t *
 _i64tow(__int64 value, wchar_t *string, int radix)
 {
-  wchar_t tmp[65];
-  wchar_t *tp = tmp;
-  __int64 i;
-  unsigned __int64 v;
-  __int64 sign;
-  wchar_t *sp;
+    ULONGLONG val;
+    int negative;
+    WCHAR buffer[65];
+    PWCHAR pos;
+    WCHAR digit;
 
-  if (radix > 36 || radix <= 1)
-  {
-    return 0;
-  }
+    if (value < 0 && radix == 10) {
+	negative = 1;
+        val = -value;
+    } else {
+	negative = 0;
+        val = value;
+    } /* if */
 
-  sign = (radix == 10 && value < 0);
-  if (sign)
-    v = -value;
-  else
-    v = (unsigned __int64)value;
-  while (v || tp == tmp)
-  {
-    i = v % radix;
-    v = v / radix;
-    if (i < 10)
-      *tp++ = i+L'0';
-    else
-      *tp++ = i + L'a' - 10;
-  }
+    pos = &buffer[64];
+    *pos = '\0';
 
-  sp = string;
-  if (sign)
-    *sp++ = L'-';
-  while (tp > tmp)
-    *sp++ = *--tp;
-  *sp = 0;
-  return string;
+    do {
+	digit = val % radix;
+	val = val / radix;
+	if (digit < 10) {
+	    *--pos = '0' + digit;
+	} else {
+	    *--pos = 'a' + digit - 10;
+	} /* if */
+    } while (val != 0L);
+
+    if (negative) {
+	*--pos = '-';
+    } /* if */
+
+    if (string != NULL) {
+	memcpy(string, pos, (&buffer[64] - pos + 1) * sizeof(WCHAR));
+    } /* if */
+    return string;
 }
 
 
@@ -49,152 +52,112 @@
 wchar_t *
 _ui64tow(unsigned __int64 value, wchar_t *string, int radix)
 {
-  wchar_t tmp[65];
-  wchar_t *tp = tmp;
-  __int64 i;
-  unsigned __int64 v;
-  wchar_t *sp;
+    WCHAR buffer[65];
+    PWCHAR pos;
+    WCHAR digit;
 
-  if (radix > 36 || radix <= 1)
-  {
-    return 0;
-  }
+    pos = &buffer[64];
+    *pos = '\0';
 
-  v = (unsigned __int64)value;
-  while (v || tp == tmp)
-  {
-    i = v % radix;
-    v = v / radix;
-    if (i < 10)
-      *tp++ = i+L'0';
-    else
-      *tp++ = i + L'a' - 10;
-  }
+    do {
+	digit = value % radix;
+	value = value / radix;
+	if (digit < 10) {
+	    *--pos = '0' + digit;
+	} else {
+	    *--pos = 'a' + digit - 10;
+	} /* if */
+    } while (value != 0L);
 
-  sp = string;
-  while (tp > tmp)
-    *sp++ = *--tp;
-  *sp = 0;
-  return string;
+    if (string != NULL) {
+	memcpy(string, pos, (&buffer[64] - pos + 1) * sizeof(WCHAR));
+    } /* if */
+    return string;
 }
 
 
 /*
  * @implemented
+ * from wine cvs 2006-05-21
  */
 wchar_t *
 _itow(int value, wchar_t *string, int radix)
 {
-  wchar_t tmp[33];
-  wchar_t *tp = tmp;
-  int i;
-  unsigned v;
-  int sign;
-  wchar_t *sp;
-
-  if (radix > 36 || radix <= 1)
-  {
-    return 0;
-  }
-
-  sign = (radix == 10 && value < 0);
-  if (sign)
-    v = -value;
-  else
-    v = (unsigned)value;
-  while (v || tp == tmp)
-  {
-    i = v % radix;
-    v = v / radix;
-    if (i < 10)
-      *tp++ = i+L'0';
-    else
-      *tp++ = i + L'a' - 10;
-  }
-
-  sp = string;
-  if (sign)
-    *sp++ = L'-';
-  while (tp > tmp)
-    *sp++ = *--tp;
-  *sp = 0;
-  return string;
+  return _ltow(value, string, radix);
 }
 
 
 /*
  * @implemented
+ * from wine cvs 2006-05-21
  */
 wchar_t *
 _ltow(long value, wchar_t *string, int radix)
 {
-  wchar_t tmp[33];
-  wchar_t *tp = tmp;
-  long i;
-  unsigned long v;
-  int sign;
-  wchar_t *sp;
+    unsigned long val;
+    int negative;
+    WCHAR buffer[33];
+    PWCHAR pos;
+    WCHAR digit;
 
-  if (radix > 36 || radix <= 1)
-  {
-    return 0;
-  }
+    if (value < 0 && radix == 10) {
+	negative = 1;
+        val = -value;
+    } else {
+	negative = 0;
+        val = value;
+    } /* if */
 
-  sign = (radix == 10 && value < 0);
-  if (sign)
-    v = -value;
-  else
-    v = (unsigned long)value;
-  while (v || tp == tmp)
-  {
-    i = v % radix;
-    v = v / radix;
-    if (i < 10)
-      *tp++ = i+L'0';
-    else
-      *tp++ = i + L'a' - 10;
-  }
+    pos = &buffer[32];
+    *pos = '\0';
 
-  sp = string;
-  if (sign)
-    *sp++ = L'-';
-  while (tp > tmp)
-    *sp++ = *--tp;
-  *sp = 0;
-  return string;
+    do {
+	digit = val % radix;
+	val = val / radix;
+	if (digit < 10) {
+	    *--pos = '0' + digit;
+	} else {
+	    *--pos = 'a' + digit - 10;
+	} /* if */
+    } while (val != 0L);
+
+    if (negative) {
+	*--pos = '-';
+    } /* if */
+
+    if (string != NULL) {
+	memcpy(string, pos, (&buffer[32] - pos + 1) * sizeof(WCHAR));
+    } /* if */
+    return string;
 }
 
 
 /*
  * @implemented
+ * from wine cvs 2006-05-21
  */
 wchar_t *
 _ultow(unsigned long value, wchar_t *string, int radix)
 {
-  wchar_t tmp[33];
-  wchar_t *tp = tmp;
-  long i;
-  unsigned long v = value;
-  wchar_t *sp;
+    WCHAR buffer[33];
+    PWCHAR pos;
+    WCHAR digit;
 
-  if (radix > 36 || radix <= 1)
-  {
-    return 0;
-  }
+    pos = &buffer[32];
+    *pos = '\0';
 
-  while (v || tp == tmp)
-  {
-    i = v % radix;
-    v = v / radix;
-    if (i < 10)
-      *tp++ = i+L'0';
-    else
-      *tp++ = i + L'a' - 10;
-  }
+    do {
+	digit = value % radix;
+	value = value / radix;
+	if (digit < 10) {
+	    *--pos = '0' + digit;
+	} else {
+	    *--pos = 'a' + digit - 10;
+	} /* if */
+    } while (value != 0L);
 
-  sp = string;
-  while (tp > tmp)
-    *sp++ = *--tp;
-  *sp = 0;
-  return string;
+    if (string != NULL) {
+	memcpy(string, pos, (&buffer[32] - pos + 1) * sizeof(WCHAR));
+    } /* if */
+    return string;
 }

Modified: branches/ros-branch-0_3_0/reactos/lib/string/wtoi.c
URL: http://svn.reactos.ru/svn/reactos/branches/ros-branch-0_3_0/reactos/lib/string/wtoi.c?rev=22137&r1=22136&r2=22137&view=diff
==============================================================================
--- branches/ros-branch-0_3_0/reactos/lib/string/wtoi.c (original)
+++ branches/ros-branch-0_3_0/reactos/lib/string/wtoi.c Thu Jun  1 05:03:05 2006
@@ -3,9 +3,10 @@
 
 /*
  * @implemented
+ * copy _i64toa from wine cvs 2006 month 05 day 21
  */
 int
 _wtoi(const wchar_t *str)
 {
-  return (int)wcstol(str, 0, 10);
+   return _wtol(str);
 }

Modified: branches/ros-branch-0_3_0/reactos/lib/string/wtol.c
URL: http://svn.reactos.ru/svn/reactos/branches/ros-branch-0_3_0/reactos/lib/string/wtol.c?rev=22137&r1=22136&r2=22137&view=diff
==============================================================================
--- branches/ros-branch-0_3_0/reactos/lib/string/wtol.c (original)
+++ branches/ros-branch-0_3_0/reactos/lib/string/wtol.c Thu Jun  1 05:03:05 2006
@@ -1,5 +1,6 @@
 #include <string.h>
 #include <stdlib.h>
+#include <windows.h>
 
 /*
  * @implemented
@@ -7,5 +8,26 @@
 long
 _wtol(const wchar_t *str)
 {
-  return wcstol(str, 0, 10);
+     ULONG RunningTotal = 0;
+    char bMinus = 0;
+
+    while (iswctype(*str, _SPACE) ) {
+	str++;
+    } /* while */
+
+    if (*str == L'+') {
+	str++;
+    } else if (*str == L'-') {
+	bMinus = 1;
+	str++;
+    } /* if */
+
+    while (*str >= L'0' && *str <= L'9') {
+	RunningTotal = RunningTotal * 10 + *str - L'0';
+	str++;
+    } /* while */
+
+    return bMinus ? -RunningTotal : RunningTotal;
 }
+
+




More information about the Ros-diffs mailing list