| /* |
| * msvcp100 specific functions |
| * |
| * Copyright 2011 Austin English |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
| */ |
| |
| #include "config.h" |
| |
| #include <stdarg.h> |
| |
| #include "windef.h" |
| #include "winbase.h" |
| |
| /* Copied from dlls/msvcrt/cpp.c */ |
| #ifdef __i386__ /* thiscall functions are i386-specific */ |
| |
| #define THISCALL(func) __thiscall_ ## func |
| #define THISCALL_NAME(func) __ASM_NAME("__thiscall_" #func) |
| #define __thiscall __stdcall |
| #define DEFINE_THISCALL_WRAPPER(func,args) \ |
| extern void THISCALL(func)(void); \ |
| __ASM_GLOBAL_FUNC(__thiscall_ ## func, \ |
| "popl %eax\n\t" \ |
| "pushl %ecx\n\t" \ |
| "pushl %eax\n\t" \ |
| "jmp " __ASM_NAME(#func) __ASM_STDCALL(args) ) |
| #else /* __i386__ */ |
| |
| #define THISCALL(func) func |
| #define THISCALL_NAME(func) __ASM_NAME(#func) |
| #define __thiscall __cdecl |
| #define DEFINE_THISCALL_WRAPPER(func,args) /* nothing */ |
| |
| #endif /* __i386__ */ |
| |
| /* ?_BADOFF@std@@3_JB -> __int64 const std::_BADOFF */ |
| const __int64 std_BADOFF = -1; |
| |
| /* _Container_base0 is used by apps compiled without iterator checking |
| * (i.e. with _ITERATOR_DEBUG_LEVEL=0 ). |
| * It provides empty versions of methods used by visual c++'s stl's |
| * iterator checking. |
| * msvcr100 has to provide them in case apps are compiled with /Od |
| * or the optimizer fails to inline those (empty) calls. |
| */ |
| |
| /* ?_Orphan_all@_Container_base0@std@@QAEXXZ */ |
| /* ?_Orphan_all@_Container_base0@std@@QEAAXXZ */ |
| DEFINE_THISCALL_WRAPPER(Container_base0_Orphan_all, 4) |
| void __thiscall Container_base0_Orphan_all(void *this) |
| { |
| } |
| |
| /* ?_Swap_all@_Container_base0@std@@QAEXAAU12@@Z */ |
| /* ?_Swap_all@_Container_base0@std@@QEAAXAEAU12@@Z */ |
| DEFINE_THISCALL_WRAPPER(Container_base0_Swap_all, 8) |
| void __thiscall Container_base0_Swap_all(void *this, void *that) |
| { |
| } |
| |
| BOOL WINAPI DllMain(HINSTANCE hdll, DWORD reason, LPVOID reserved) |
| { |
| switch (reason) |
| { |
| case DLL_WINE_PREATTACH: |
| return FALSE; /* prefer native version */ |
| |
| case DLL_PROCESS_ATTACH: |
| DisableThreadLibraryCalls(hdll); |
| } |
| return TRUE; |
| } |