Merge CRT changes from cmake branch (mainly MSVC compilation fixes)
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Thu, 10 Feb 2011 11:35:05 +0000 (11:35 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Thu, 10 Feb 2011 11:35:05 +0000 (11:35 +0000)
svn path=/trunk/; revision=50647

26 files changed:
reactos/lib/sdk/crt/except/cpp.c
reactos/lib/sdk/crt/except/cppexcept.c
reactos/lib/sdk/crt/except/except.c
reactos/lib/sdk/crt/include/internal/file.h
reactos/lib/sdk/crt/include/internal/time.h
reactos/lib/sdk/crt/math/abs.c
reactos/lib/sdk/crt/math/acos.c
reactos/lib/sdk/crt/math/asin.c
reactos/lib/sdk/crt/math/cosf.c
reactos/lib/sdk/crt/math/cosh.c
reactos/lib/sdk/crt/math/labs.c
reactos/lib/sdk/crt/math/logf.c
reactos/lib/sdk/crt/math/modf.c
reactos/lib/sdk/crt/math/powf.c
reactos/lib/sdk/crt/math/sinf.c
reactos/lib/sdk/crt/math/sinh.c
reactos/lib/sdk/crt/math/tanh.c
reactos/lib/sdk/crt/mem/memcmp.c
reactos/lib/sdk/crt/misc/assert.c
reactos/lib/sdk/crt/stdlib/rot.c
reactos/lib/sdk/crt/string/scanf.h
reactos/lib/sdk/crt/string/strset.c
reactos/lib/sdk/crt/string/wcs.c
reactos/lib/sdk/crt/time/ctime.c
reactos/lib/sdk/crt/time/futime.c
reactos/lib/sdk/crt/time/utime.c

index 445ce08..158a277 100644 (file)
@@ -63,6 +63,10 @@ typedef struct _rtti_object_locator
 
 #define THISCALL(func) __thiscall_ ## func
 #define THISCALL_NAME(func) __ASM_NAME("__thiscall_" #func)
+
+#ifdef _MSC_VER
+#include <internal/wine_msc.h>
+#else
 #define DEFINE_THISCALL_WRAPPER(func,args) \
     extern void THISCALL(func)(void); \
     __ASM_GLOBAL_FUNC(__thiscall_ ## func, \
@@ -70,6 +74,8 @@ typedef struct _rtti_object_locator
                       "pushl %ecx\n\t" \
                       "pushl %eax\n\t" \
                       "jmp " __ASM_NAME(#func) __ASM_STDCALL(args) )
+#endif /* _MSC_VER */
+
 #else /* __i386__ */
 
 #define THISCALL(func) func
@@ -658,6 +664,7 @@ void * __stdcall MSVCRT_type_info_vector_dtor(type_info * _this, unsigned int fl
 
 /* vtables */
 
+#ifdef __GNUC__
 #ifdef _WIN64
 
 #define __ASM_VTABLE(name,funcs) \
@@ -701,6 +708,16 @@ __ASM_EXCEPTION_VTABLE(__non_rtti_object)
 #ifndef __GNUC__
 }
 #endif
+#endif
+
+#ifdef _MSC_VER
+#pragma message ("HAXX!")
+const vtable_ptr MSVCRT_exception_vtable;
+const vtable_ptr MSVCRT_bad_typeid_vtable;
+const vtable_ptr MSVCRT_bad_cast_vtable;
+const vtable_ptr MSVCRT___non_rtti_object_vtable;
+const vtable_ptr MSVCRT_type_info_vtable;
+#endif
 
 /* Static RTTI for exported objects */
 
index 02a74a9..5ff9e2b 100644 (file)
@@ -45,6 +45,9 @@ static inline void *call_ebp_func( void *func, void *ebp )
 {
     void *ret;
     int dummy;
+#ifdef _MSC_VER
+#pragma message ("call_ebp_func is unimplemented for MSC")
+#else
     __asm__ __volatile__ ("pushl %%ebx\n\t"
                           "pushl %%ebp\n\t"
                           "movl %4,%%ebp\n\t"
@@ -53,6 +56,7 @@ static inline void *call_ebp_func( void *func, void *ebp )
                           "popl %%ebx"
                           : "=a" (ret), "=S" (dummy), "=D" (dummy)
                           : "0" (func), "1" (ebp) : "ecx", "edx", "memory" );
+#endif
     return ret;
 }
 
@@ -60,6 +64,9 @@ static inline void *call_ebp_func( void *func, void *ebp )
 static inline void call_copy_ctor( void *func, void *this, void *src, int has_vbase )
 {
     TRACE( "calling copy ctor %p object %p src %p\n", func, this, src );
+#ifdef _MSC_VER
+#pragma message ("call_copy_ctor is unimplemented for MSC")
+#else
     if (has_vbase)
         /* in that case copy ctor takes an extra bool indicating whether to copy the base class */
         __asm__ __volatile__("pushl $1; pushl %2; call *%0"
@@ -67,19 +74,28 @@ static inline void call_copy_ctor( void *func, void *this, void *src, int has_vb
     else
         __asm__ __volatile__("pushl %2; call *%0"
                              : : "r" (func), "c" (this), "r" (src) : "eax", "edx", "memory" );
+#endif
 }
 
 /* call the destructor of the exception object */
 static inline void call_dtor( void *func, void *object )
 {
+#ifdef _MSC_VER
+#pragma message ("call_dtor is unimplemented for MSC")
+#else
     __asm__ __volatile__("call *%0" : : "r" (func), "c" (object) : "eax", "edx", "memory" );
+#endif
 }
 
 /* continue execution to the specified address after exception is caught */
 static inline void DECLSPEC_NORETURN continue_after_catch( cxx_exception_frame* frame, void *addr )
 {
+#ifdef _MSC_VER
+#pragma message ("continue_after_catch is unimplemented for MSC")
+#else
     __asm__ __volatile__("movl -4(%0),%%esp; leal 12(%0),%%ebp; jmp *%1"
                          : : "r" (frame), "a" (addr) );
+#endif
     for (;;) ; /* unreached */
 }
 
@@ -415,6 +431,14 @@ DWORD CDECL cxx_frame_handler( PEXCEPTION_RECORD rec, cxx_exception_frame* frame
  */
 extern DWORD CDECL __CxxFrameHandler( PEXCEPTION_RECORD rec, EXCEPTION_REGISTRATION_RECORD* frame,
                                       PCONTEXT context, EXCEPTION_REGISTRATION_RECORD** dispatch );
+#ifdef _MSC_VER
+#pragma message ("__CxxFrameHandler is unimplemented for MSC")
+DWORD CDECL __CxxFrameHandler( PEXCEPTION_RECORD rec, EXCEPTION_REGISTRATION_RECORD* frame,
+                                      PCONTEXT context, EXCEPTION_REGISTRATION_RECORD** dispatch )
+{
+    return 0;
+}
+#else
 __ASM_GLOBAL_FUNC( __CxxFrameHandler,
                    "pushl $0\n\t"        /* nested_trylevel */
                    __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t")
@@ -434,7 +458,7 @@ __ASM_GLOBAL_FUNC( __CxxFrameHandler,
                    "add $28,%esp\n\t"
                    __ASM_CFI(".cfi_adjust_cfa_offset -28\n\t")
                    "ret" )
-
+#endif
 
 /*********************************************************************
  *             __CxxLongjmpUnwind (MSVCRT.@)
index 6636777..af14359 100644 (file)
@@ -96,6 +96,57 @@ static inline int call_unwind_func( int (*func)(void), void *ebp )
                           : "ecx", "edx", "memory" );
     return ret;
 }
+#elif defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable:4731) // Don't complain about changing ebp
+void __inline call_finally_block( void *code_block, void *base_ptr )
+{
+    __asm
+    {
+        mov eax, code_block
+        mov ebp, base_ptr
+        call [eax]
+    }
+}
+
+int __inline call_filter( int (*func)(PEXCEPTION_POINTERS), void *arg, void *_ebp )
+{
+    int _ret;
+    __asm
+    {
+        push ebp
+        mov eax, arg
+        push eax
+        mov ebp, _ebp
+        mov eax, func
+        call [eax]
+        mov _ret, eax
+        pop ebp
+        pop ebp
+    }
+    return _ret;
+}
+int __inline call_unwind_func( int (*func)(void), void *_ebp )
+{
+    int _ret;
+
+    __asm
+    {
+        push ebp
+        push ebx
+        push esi
+        push edi
+        mov ebp, _ebp
+        call dword ptr [func]
+        mov _ret, eax
+        pop edi
+        pop esi
+        pop ebx
+        pop ebp
+    }
+    return _ret;
+}
+#pragma warning(pop)
 #endif
 
 static DWORD MSVCRT_nested_handler(PEXCEPTION_RECORD rec,
index bb175fe..247aa48 100644 (file)
@@ -127,8 +127,6 @@ int access_dirW(const wchar_t *_path);
 
 int _isnanl(long double x);
 int _isinfl(long double x);
-int _isnan(double x);
-int _isinf(double x);
 
 /* Flags for the iobuf structure (for reference) */
 #if 0
index ad72279..852bdab 100644 (file)
@@ -20,9 +20,9 @@ FileTimeToUnixTime(const FILETIME *FileTime, USHORT *millitm)
     ULargeInt.HighPart = FileTime->dwHighDateTime;
     ULargeInt.QuadPart -= DIFFTIME;
 
-    time = ULargeInt.QuadPart / 10000000;
+    time = (time_t)(ULargeInt.QuadPart / 10000000);
     if (millitm)
-        *millitm = (ULargeInt.QuadPart % 10000000) / 10000;
+        *millitm = (USHORT)((ULargeInt.QuadPart % 10000000) / 10000);
 
     return time;
 }
index a18f19b..7563c36 100644 (file)
@@ -1,5 +1,10 @@
 /* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
 
+#ifdef _MSC_VER
+#pragma warning(disable: 4164)
+#pragma function(abs)
+#endif
+
 /*
  * @implemented
  */
index ac348f8..4f7a650 100644 (file)
@@ -21,6 +21,9 @@
 
 #include <math.h>
 
+#ifdef _MSC_VER
+#pragma function(acos)
+#endif
 
 double acos(double __x)
 {
index 5be040d..9a7ecec 100644 (file)
@@ -21,6 +21,9 @@
 
 #include <math.h>
 
+#ifdef _MSC_VER
+#pragma function(asin)
+#endif
 
 double asin(double __x)
 {
index d2329c7..0605582 100644 (file)
@@ -3,7 +3,9 @@
  * This file is part of the w64 mingw-runtime package.
  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  */
+#define cosf _dummy_cosf
 #include <math.h>
+#undef cosf
 
 float cosf(float _X)
 {
index e81fde5..e97651f 100644 (file)
@@ -1,6 +1,9 @@
 /* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
 #include <math.h>
 
+#ifdef _MSC_VER
+#pragma function(cosh)
+#endif
 
 /*
  * @implemented
index b4fc33e..51a1d80 100644 (file)
@@ -1,5 +1,10 @@
 /* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
 
+#ifdef _MSC_VER
+#pragma warning(disable: 4164)
+#pragma function(labs)
+#endif
+
 /*
  * @implemented
  */
index 0da1dae..417250f 100644 (file)
@@ -3,7 +3,9 @@
  * This file is part of the w64 mingw-runtime package.
  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  */
+#define logf _dummy_logf
 #include <math.h>
+#undef logf
 
 float logf(float _X)
 {
index 8212070..c6d9592 100644 (file)
@@ -9,8 +9,9 @@
  * is preserved.
  * ====================================================
  */
-
+#define modfl _dummy_modfl
 #include <precomp.h>
+#undef modfl
 
 //static const double one = 1.0;
 
index 55eb92a..e9cc35a 100644 (file)
@@ -3,7 +3,8 @@
  * This file is part of the w64 mingw-runtime package.
  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  */
-#include <math.h>
+
+double __cdecl pow(double x, double y);
 
 float powf(float x, float y)
 {
index 1069dcf..92ffc99 100644 (file)
@@ -3,7 +3,9 @@
  * This file is part of the w64 mingw-runtime package.
  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  */
+#define sinf _dummy_sinf
 #include <math.h>
+#undef sinf
 
 float sinf(float _X)
 {
index fa9e5f7..7de7744 100644 (file)
@@ -1,6 +1,10 @@
 /* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
 #include <math.h>
 
+#ifdef _MSC_VER
+#pragma function(sinh)
+#endif
+
 /*
  * @implemented
  */
index 8c231c1..43262f3 100644 (file)
@@ -2,6 +2,10 @@
 
 #include <math.h>
 
+#ifdef _MSC_VER
+#pragma function(tanh)
+#endif
+
 /*
  * @implemented
  */
index 078238e..b9b4334 100644 (file)
@@ -4,6 +4,11 @@
 
 #include <string.h>
 
+#ifdef _MSC_VER
+#pragma warning(disable: 4164)
+#pragma function(memcmp)
+#endif
+
 int memcmp(const void *s1, const void *s2, size_t n)
 {
     if (n != 0) {
index bc196fd..693e42d 100644 (file)
@@ -32,7 +32,7 @@ void _assert(const char *exp, const char *file, unsigned line)
 
     /* Get MessageBoxA function pointer */
     hmodUser32 = LoadLibrary("user32.dll");
-    pMessageBoxA = GetProcAddress(hmodUser32, "MessageBoxA");
+    pMessageBoxA = (PVOID)GetProcAddress(hmodUser32, "MessageBoxA");
     if (!pMessageBoxA)
     {
         abort();
index 7502fb7..d9655a2 100644 (file)
 
 #include <stdlib.h>
 
+#ifdef _MSC_VER
+#pragma function(_rotr, _rotl, _rotr, _lrotl, _lrotr)
+#endif
+
 unsigned int _rotr( unsigned int value, int shift );
 /*
  * @implemented
index 25c6336..4be9d8d 100644 (file)
@@ -460,7 +460,7 @@ _FUNCTION_ {
                            if ((*(format - 1)) < *(format + 1))
                                RtlSetBits(&bitMask, *(format - 1) +1 , *(format + 1) - *(format - 1));
                            else
-                               RtlSetBits(&bitMask, *(format + 1)    , *(format - 1) - *(format + 1));                       
+                               RtlSetBits(&bitMask, *(format + 1)    , *(format - 1) - *(format + 1));
                            format++;
                        } else
                            RtlSetBits(&bitMask, *format, 1);
index 29a7212..5f5e641 100644 (file)
@@ -10,6 +10,9 @@
 
 #if defined(__GNUC__) && !defined(__clang__)
 #define __int64 long long
+#elif defined(_MSC_VER)
+#pragma warning(disable: 4164)
+#pragma function(_strset)
 #endif
 
 #ifdef _WIN64
@@ -49,3 +52,4 @@ char* _strset(char* szToFill, int szFill)
        }
        return t;
 }
+
index 8c4fff9..dcef8c4 100644 (file)
 #undef vprintf
 #undef vwprintf
 
+#ifdef _MSC_VER
+#pragma function(_wcsset)
+#endif
+
 #ifndef _LIBCNT_
 /*********************************************************************
  *             _wcsdup (MSVCRT.@)
index b6d1bfb..3b93ba1 100644 (file)
@@ -7,6 +7,7 @@
  */
 #define MINGW_HAS_SECURE_API 1
 
+#define RC_INVOKED 1 // to prevent inline functions
 #include <tchar.h>
 #include <time.h>
 #include "bitsfixup.h"
index 99010f0..8e3ae86 100644 (file)
@@ -6,6 +6,7 @@
  * PROGRAMERS:  Timo Kreuzer
  */
 #include <precomp.h>
+#define RC_INVOKED 1 // to prevent inline functions
 #include <time.h>
 #include <sys/utime.h>
 #include "bitsfixup.h"
index 130e5a4..d879d49 100644 (file)
@@ -7,6 +7,7 @@
  */
 #include <precomp.h>
 #include <tchar.h>
+#define RC_INVOKED 1 // to prevent inline functions
 #include <sys/utime.h>
 #include "bitsfixup.h"