Module: wine Branch: master Commit: 165f8734e85be74b31d08121b55b140e2deb408a URL: http://source.winehq.org/git/wine.git/?a=commit;h=165f8734e85be74b31d08121b5...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Mar 12 17:25:45 2015 +0900
msvcp60: Share misc functions implementation with msvcp90.
---
dlls/msvcp60/Makefile.in | 1 - dlls/msvcp60/main.c | 3 ++ dlls/msvcp60/misc.c | 90 ------------------------------------------------ dlls/msvcp90/misc.c | 12 +++++-- dlls/msvcp90/msvcp90.h | 4 +++ 5 files changed, 17 insertions(+), 93 deletions(-)
diff --git a/dlls/msvcp60/Makefile.in b/dlls/msvcp60/Makefile.in index 2a3e726..fcd149b 100644 --- a/dlls/msvcp60/Makefile.in +++ b/dlls/msvcp60/Makefile.in @@ -3,7 +3,6 @@ IMPORTS = msvcrt EXTRADEFS = -D_MSVCP_VER=60 PARENTSRC = ../msvcp90
- C_SRCS = \ exception.c \ ios.c \ diff --git a/dlls/msvcp60/main.c b/dlls/msvcp60/main.c index 3c5e36f..03473ae 100644 --- a/dlls/msvcp60/main.c +++ b/dlls/msvcp60/main.c @@ -59,6 +59,7 @@ const __int64 std_Fpz = 0;
void* (__cdecl *MSVCRT_operator_new)(MSVCP_size_t); void (__cdecl *MSVCRT_operator_delete)(void*); +void* (__cdecl *MSVCRT_set_new_handler)(void*);
static void init_cxx_funcs(void) { @@ -68,11 +69,13 @@ static void init_cxx_funcs(void) { MSVCRT_operator_new = (void*)GetProcAddress(hmod, "??2@YAPEAX_K@Z"); MSVCRT_operator_delete = (void*)GetProcAddress(hmod, "??3@YAXPEAX@Z"); + MSVCRT_set_new_handler = (void*)GetProcAddress(hmod, "?_set_new_handler@@YAP6AH_K@ZP6AH0@Z@Z"); } else { MSVCRT_operator_new = (void*)GetProcAddress(hmod, "??2@YAPAXI@Z"); MSVCRT_operator_delete = (void*)GetProcAddress(hmod, "??3@YAXPAX@Z"); + MSVCRT_set_new_handler = (void*)GetProcAddress(hmod, "?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z"); } }
diff --git a/dlls/msvcp60/misc.c b/dlls/msvcp60/misc.c deleted file mode 100644 index a54fd28..0000000 --- a/dlls/msvcp60/misc.c +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2010 Piotr Caban for CodeWeavers - * - * 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 <limits.h> - -#include "msvcp.h" - -#include "windef.h" -#include "winbase.h" - - -static CRITICAL_SECTION lockit_cs; - -void init_lockit(void) { - InitializeCriticalSection(&lockit_cs); - lockit_cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": _Lockit critical section"); -} - -void free_lockit(void) { - lockit_cs.DebugInfo->Spare[0] = 0; - DeleteCriticalSection(&lockit_cs); -} - -_Lockit* __thiscall _Lockit_ctor_locktype(_Lockit *this, int locktype) -{ - EnterCriticalSection(&lockit_cs); - return this; -} - -/* ??0_Lockit@std@@QAE@XZ */ -/* ??0_Lockit@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(_Lockit_ctor, 4) -_Lockit* __thiscall _Lockit_ctor(_Lockit *this) -{ - return _Lockit_ctor_locktype(this, 0); -} - -/* ??1_Lockit@std@@QAE@XZ */ -/* ??1_Lockit@std@@QEAA@XZ */ -DEFINE_THISCALL_WRAPPER(_Lockit_dtor, 4) -void __thiscall _Lockit_dtor(_Lockit *this) -{ - LeaveCriticalSection(&lockit_cs); -} - -/* wctype */ -unsigned short __cdecl wctype(const char *property) -{ - static const struct { - const char *name; - unsigned short mask; - } properties[] = { - { "alnum", _DIGIT|_ALPHA }, - { "alpha", _ALPHA }, - { "cntrl", _CONTROL }, - { "digit", _DIGIT }, - { "graph", _DIGIT|_PUNCT|_ALPHA }, - { "lower", _LOWER }, - { "print", _DIGIT|_PUNCT|_BLANK|_ALPHA }, - { "punct", _PUNCT }, - { "space", _SPACE }, - { "upper", _UPPER }, - { "xdigit", _HEX } - }; - unsigned int i; - - for(i=0; i<sizeof(properties)/sizeof(properties[0]); i++) - if(!strcmp(property, properties[i].name)) - return properties[i].mask; - - return 0; -} diff --git a/dlls/msvcp90/misc.c b/dlls/msvcp90/misc.c index a030b01..db68f6d 100644 --- a/dlls/msvcp90/misc.c +++ b/dlls/msvcp90/misc.c @@ -125,6 +125,14 @@ void CDECL mutex_mutex_dtor(mutex *m)
static CRITICAL_SECTION lockit_cs[_MAX_LOCK];
+#if _MSVCP_VER >= 70 +static inline int get_locktype( _Lockit *lockit ) { return lockit->locktype; } +static inline void set_locktype( _Lockit *lockit, int type ) { lockit->locktype = type; } +#else +static inline int get_locktype( _Lockit *lockit ) { return 0; } +static inline void set_locktype( _Lockit *lockit, int type ) { } +#endif + /* ?_Lockit_ctor@_Lockit@std@@SAXH@Z */ void __cdecl _Lockit_init(int locktype) { InitializeCriticalSection(&lockit_cs[locktype]); @@ -156,7 +164,7 @@ void free_lockit(void) { /* ?_Lockit_ctor@_Lockit@std@@CAXPEAV12@H@Z */ void __cdecl _Lockit__Lockit_ctor_locktype(_Lockit *lockit, int locktype) { - lockit->locktype = locktype; + set_locktype( lockit, locktype ); EnterCriticalSection(&lockit_cs[locktype]); }
@@ -189,7 +197,7 @@ _Lockit* __thiscall _Lockit_ctor(_Lockit *this) /* ?_Lockit_dtor@_Lockit@std@@CAXPEAV12@@Z */ void __cdecl _Lockit__Lockit_dtor(_Lockit *lockit) { - LeaveCriticalSection(&lockit_cs[lockit->locktype]); + LeaveCriticalSection(&lockit_cs[get_locktype( lockit )]); }
/* ??1_Lockit@std@@QAE@XZ */ diff --git a/dlls/msvcp90/msvcp90.h b/dlls/msvcp90/msvcp90.h index 5e7b427..2eb07a3 100644 --- a/dlls/msvcp90/msvcp90.h +++ b/dlls/msvcp90/msvcp90.h @@ -250,7 +250,11 @@ ctype_wchar* ctype_short_use_facet(const locale*);
/* class _Lockit */ typedef struct { +#if _MSVCP_VER >= 70 int locktype; +#else + char empty_struct; +#endif } _Lockit;
#define _LOCK_LOCALE 0