ChangeLog: - wrapped a couple of i386 specific items in ifdefs (__set_fs, _control87) - fixed a few MSVCRT methods that either didn't have sparc versions or had incorrect versions Warren Baird : Warren_Baird@cimmetry.com diff -ur clean/wine-20020509/memory/selector.c wine-20020509/memory/selector.c --- clean/wine-20020509/memory/selector.c Tue May 7 20:20:40 2002 +++ wine-20020509/memory/selector.c Wed May 15 17:24:41 2002 @@ -122,7 +122,9 @@ if (!((__get_fs() ^ sel) & ~7)) { WARN("Freeing %%fs selector (%04x), not good.\n", __get_fs() ); +#ifdef __i386__ __set_fs( 0 ); +#endif } if (!((__get_gs() ^ sel) & ~7)) __set_gs( 0 ); #endif /* __i386__ */ @@ -144,7 +146,9 @@ if (fs) { wine_ldt_copy.flags[fs >> __AHSHIFT] &= ~WINE_LDT_FLAGS_ALLOCATED; +#ifdef __i386__ __set_fs(0); +#endif wine_ldt_set_entry( fs, &null_entry ); } } diff -ur clean/wine-20020509/dlls/msvcrt/math.c wine-20020509/dlls/msvcrt/math.c --- clean/wine-20020509/dlls/msvcrt/math.c Mon Apr 1 16:03:53 2002 +++ wine-20020509/dlls/msvcrt/math.c Thu May 16 11:09:41 2002 @@ -572,7 +572,13 @@ */ unsigned int _controlfp(unsigned int newval, unsigned int mask) { + + // _EM_DENORMAL is only defined for x86 +#ifdef __i386__ return _control87( newval, mask & ~_EM_DENORMAL ); +#else + return _control87( newval, mask /*& ~_EM_DENORMAL*/ ); +#endif } /********************************************************************* @@ -696,10 +702,19 @@ * div (MSVCRT.@) * VERSION * [!i386] Non-x86 can't run win32 apps so we don't need binary compatibility + * + * Not sure why this is returning a different type than the x86 version, + * but fixed it to do the right thing. */ MSVCRT_div_t MSVCRT_div(int num, int denom) { - return div(num,denom); + div_t dt = div(num,denom); + MSVCRT_div_t ret; + ret.quot = dt.quot; + ret.rem = dt.rem; + + return ret; + } #endif /* ifdef __i386__ */ @@ -722,10 +737,19 @@ * ldiv (MSVCRT.@) * VERSION * [!i386] Non-x86 can't run win32 apps so we don't need binary compatibility + * + * Not sure why this is returning a different type than the x86 version, + * but fixed it to do the right thing. */ MSVCRT_ldiv_t MSVCRT_ldiv(long num, long denom) { - return ldiv(num,denom); + ldiv_t result = ldiv(num,denom); + + MSVCRT_ldiv_t ret; + ret.quot = result.quot; + ret.rem = result.rem; + + return ret; } #endif /* ifdef __i386__ */ diff -ur clean/wine-20020509/dlls/msvcrt/except.c wine-20020509/dlls/msvcrt/except.c --- clean/wine-20020509/dlls/msvcrt/except.c Thu Apr 25 17:40:56 2002 +++ wine-20020509/dlls/msvcrt/except.c Wed May 15 16:59:34 2002 @@ -82,6 +82,14 @@ *dispatch = frame; return ExceptionCollidedUnwind; } +#else +static DWORD MSVCRT_nested_handler(PEXCEPTION_RECORD rec, + struct __EXCEPTION_FRAME* frame, + PCONTEXT context WINE_UNUSED, + struct __EXCEPTION_FRAME** dispatch) +{ + return ExceptionCollidedUnwind; +} #endif diff -ur clean/wine-20020509/relay32/snoop.c wine-20020509/relay32/snoop.c --- clean/wine-20020509/relay32/snoop.c Thu Apr 25 17:40:56 2002 +++ wine-20020509/relay32/snoop.c Wed May 15 16:59:34 2002 @@ -410,7 +410,7 @@ ".long " __ASM_NAME("SNOOP_DoReturn") ",0" ); #else /* !__i386__ */ -void SNOOP_RegisterDLL(HMODULE hmod,LPCSTR name,DWORD nrofordinals) { +void SNOOP_RegisterDLL(HMODULE hmod,LPCSTR name,DWORD nrofordinals, DWORD dw) { if (!TRACE_ON(snoop)) return; FIXME("snooping works only on i386 for now.\n"); }