winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
January
2003
December
November
October
September
August
July
June
May
April
March
February
January
2002
December
November
October
September
August
July
June
May
April
March
February
January
2001
December
November
October
September
August
July
June
May
April
March
February
List overview
wine-commits
April 2010
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
2 participants
898 discussions
Start a n
N
ew thread
Maarten Lankhorst : mmdevapi: Add some DEVPKEY's to property tests.
by Alexandre Julliard
26 Apr '10
26 Apr '10
Module: wine Branch: master Commit: 85339cdb5f44d6a5dff86d565f1cf45c84bef3cf URL:
http://source.winehq.org/git/wine.git/?a=commit;h=85339cdb5f44d6a5dff86d565…
Author: Maarten Lankhorst <m.b.lankhorst(a)gmail.com> Date: Thu Apr 22 22:59:58 2010 +0200 mmdevapi: Add some DEVPKEY's to property tests. --- dlls/mmdevapi/devenum.c | 1 + dlls/mmdevapi/tests/mmdevenum.c | 1 + dlls/mmdevapi/tests/propstore.c | 24 ++++++++++++++++++++---- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/dlls/mmdevapi/devenum.c b/dlls/mmdevapi/devenum.c index a5f49a6..0a7a661 100644 --- a/dlls/mmdevapi/devenum.c +++ b/dlls/mmdevapi/devenum.c @@ -1211,6 +1211,7 @@ static HRESULT WINAPI MMDevPropStore_GetValue(IPropertyStore *iface, REFPROPERTY /* Special case */ if (IsEqualPropertyKey(*key, PKEY_AudioEndpoint_GUID)) { + pv->vt = VT_LPWSTR; pv->u.pwszVal = CoTaskMemAlloc(39 * sizeof(WCHAR)); if (!pv->u.pwszVal) return E_OUTOFMEMORY; diff --git a/dlls/mmdevapi/tests/mmdevenum.c b/dlls/mmdevapi/tests/mmdevenum.c index 014cbf3..f2b8f13 100644 --- a/dlls/mmdevapi/tests/mmdevenum.c +++ b/dlls/mmdevapi/tests/mmdevenum.c @@ -26,6 +26,7 @@ #include "audioclient.h" #include "dshow.h" #include "dsound.h" +#include "devpkey.h" DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0); diff --git a/dlls/mmdevapi/tests/propstore.c b/dlls/mmdevapi/tests/propstore.c index bb9ff16..13d6f75 100644 --- a/dlls/mmdevapi/tests/propstore.c +++ b/dlls/mmdevapi/tests/propstore.c @@ -29,22 +29,38 @@ #include "unknwn.h" #include "uuids.h" #include "mmdeviceapi.h" +#include "devpkey.h" static void test_propertystore(IPropertyStore *store) { HRESULT hr; - PROPVARIANT pv = { 0 }; - char temp[40]; + PROPVARIANT pv; + char temp[128]; + temp[sizeof(temp)-1] = 0; + pv.vt = VT_EMPTY; hr = IPropertyStore_GetValue(store, &PKEY_AudioEndpoint_GUID, &pv); ok(hr == S_OK, "Failed with %08x\n", hr); - if (hr == S_OK) + ok(pv.vt == VT_LPWSTR, "Value should be %i, is %i\n", VT_LPWSTR, pv.vt); + if (hr == S_OK && pv.vt == VT_LPWSTR) { WideCharToMultiByte(CP_ACP, 0, pv.u.pwszVal, -1, temp, sizeof(temp)-1, NULL, NULL); - temp[sizeof(temp)-1] = 0; trace("guid: %s\n", temp); CoTaskMemFree(pv.u.pwszVal); } + + pv.vt = VT_EMPTY; + hr = IPropertyStore_GetValue(store, (const PROPERTYKEY*)&DEVPKEY_DeviceInterface_FriendlyName, &pv); + ok(hr == S_OK, "Failed with %08x\n", hr); + ok(pv.vt == VT_EMPTY, "Key should not be found\n"); + + pv.vt = VT_EMPTY; + hr = IPropertyStore_GetValue(store, (const PROPERTYKEY*)&DEVPKEY_DeviceInterface_Enabled, &pv); + ok(pv.vt == VT_EMPTY, "Key should not be found\n"); + + pv.vt = VT_EMPTY; + hr = IPropertyStore_GetValue(store, (const PROPERTYKEY*)&DEVPKEY_DeviceInterface_ClassGuid, &pv); + ok(pv.vt == VT_EMPTY, "Key should not be found\n"); } START_TEST(propstore)
1
0
0
0
Maarten Lankhorst : includes: Add some devpkey definitions.
by Alexandre Julliard
26 Apr '10
26 Apr '10
Module: wine Branch: master Commit: bbd882a3d2edfff0441e1ca888d8327b7e27078b URL:
http://source.winehq.org/git/wine.git/?a=commit;h=bbd882a3d2edfff0441e1ca88…
Author: Maarten Lankhorst <m.b.lankhorst(a)gmail.com> Date: Thu Apr 22 22:59:57 2010 +0200 includes: Add some devpkey definitions. --- include/devpkey.h | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/include/devpkey.h b/include/devpkey.h index 46c8c39..ebaabc1 100644 --- a/include/devpkey.h +++ b/include/devpkey.h @@ -56,3 +56,7 @@ DEFINE_DEVPROPKEY(DEVPKEY_Device_RemovalPolicyOverride, 0xa45c254e,0xdf1c,0x4efd DEFINE_DEVPROPKEY(DEVPKEY_Device_InstallState, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 36); DEFINE_DEVPROPKEY(DEVPKEY_Device_LocationPaths, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 37); DEFINE_DEVPROPKEY(DEVPKEY_Device_BaseContainerId, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 38); + +DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_FriendlyName, 0x026e516e,0x8b14,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 2); +DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_Enabled, 0x026e516e,0x8b14,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 3); +DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_ClassGuid, 0x026e516e,0x8b14,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 4);
1
0
0
0
Piotr Caban : msvcrt: Added strtok_s implementation.
by Alexandre Julliard
26 Apr '10
26 Apr '10
Module: wine Branch: master Commit: 2b3b860396175653dce6582190748f5a4b5b2b71 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=2b3b860396175653dce658219…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Mon Apr 26 14:09:59 2010 +0200 msvcrt: Added strtok_s implementation. --- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/msvcrt.spec | 2 +- dlls/msvcrt/string.c | 27 +++++++++++++++++++++++++++ 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 65da427..60e66ba 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -1396,7 +1396,7 @@ @ cdecl strstr(str str) msvcrt.strstr @ cdecl strtod(str ptr) msvcrt.strtod @ cdecl strtok(str str) msvcrt.strtok -@ stub strtok_s +@ cdecl strtok_s(ptr str ptr) msvcrt.strtok_s @ cdecl strtol(str ptr long) msvcrt.strtol @ cdecl strtoul(str ptr long) msvcrt.strtoul @ cdecl strxfrm(ptr str long) msvcrt.strxfrm diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index b7884dc..16a1bc2 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -1380,7 +1380,7 @@ @ cdecl strstr(str str) msvcrt.strstr @ cdecl strtod(str ptr) msvcrt.strtod @ cdecl strtok(str str) msvcrt.strtok -@ stub strtok_s +@ cdecl strtok_s(ptr str ptr) msvcrt.strtok_s @ cdecl strtol(str ptr long) msvcrt.strtol @ cdecl strtoul(str ptr long) msvcrt.strtoul @ cdecl strxfrm(ptr str long) msvcrt.strxfrm diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 0680375..6807de2 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -1331,7 +1331,7 @@ @ cdecl strstr(str str) ntdll.strstr @ cdecl strtod(str ptr) MSVCRT_strtod @ cdecl strtok(str str) MSVCRT_strtok -# stub strtok_s +@ cdecl strtok_s(ptr str ptr) MSVCRT_strtok_s @ cdecl strtol(str ptr long) MSVCRT_strtol @ cdecl strtoul(str ptr long) MSVCRT_strtoul @ cdecl strxfrm(ptr str long) MSVCRT_strxfrm diff --git a/dlls/msvcrt/string.c b/dlls/msvcrt/string.c index d99c508..459d1a1 100644 --- a/dlls/msvcrt/string.c +++ b/dlls/msvcrt/string.c @@ -111,6 +111,33 @@ char * CDECL MSVCRT_strtok( char *str, const char *delim ) return ret; } +/********************************************************************* + * strtok_s (MSVCRT.@) + */ +char * CDECL MSVCRT_strtok_s(char *str, const char *delim, char **ctx) +{ + if(!delim || !ctx || (!str && !*ctx)) { + MSVCRT__invalid_parameter(NULL, NULL, NULL, 0, 0); + *MSVCRT__errno() = MSVCRT_EINVAL; + return NULL; + } + + if(!str) + str = *ctx; + + while(*str && strchr(delim, *str)) + str++; + if(!*str) + return NULL; + + *ctx = str+1; + while(**ctx && !strchr(delim, **ctx)) + (*ctx)++; + if(**ctx) + *(*ctx)++ = 0; + + return str; +} /********************************************************************* * _swab (MSVCRT.@)
1
0
0
0
Piotr Caban : msvcrt: Fix debug message in scanf.
by Alexandre Julliard
26 Apr '10
26 Apr '10
Module: wine Branch: master Commit: 59c1139f0521e405bab2cbd56079ef3f57db8075 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=59c1139f0521e405bab2cbd56…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Mon Apr 26 12:33:58 2010 +0200 msvcrt: Fix debug message in scanf. --- dlls/msvcrt/scanf.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/dlls/msvcrt/scanf.h b/dlls/msvcrt/scanf.h index 6366a77..b78d57c 100644 --- a/dlls/msvcrt/scanf.h +++ b/dlls/msvcrt/scanf.h @@ -110,7 +110,7 @@ _FUNCTION_ { TRACE("(%s):\n", debugstr_a(format)); #else /* CONSOLE */ #ifdef STRING - TRACE("%s (%s)\n", file, debugstr_a(format)); + TRACE("%s (%s)\n", debugstr_a(file), debugstr_a(format)); #else /* STRING */ TRACE("%p (%s)\n", file, debugstr_a(format)); #endif /* STRING */
1
0
0
0
Piotr Caban : msvcrt: Use wcstod_l/ strtod_l in other functions that parses doubles.
by Alexandre Julliard
26 Apr '10
26 Apr '10
Module: wine Branch: master Commit: 6974abe0e67063b46dd30005d9b8b68257a376dd URL:
http://source.winehq.org/git/wine.git/?a=commit;h=6974abe0e67063b46dd30005d…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Mon Apr 26 12:33:49 2010 +0200 msvcrt: Use wcstod_l/strtod_l in other functions that parses doubles. --- dlls/msvcr80/msvcr80.spec | 8 ++-- dlls/msvcr90/msvcr90.spec | 8 ++-- dlls/msvcrt/msvcrt.spec | 6 ++-- dlls/msvcrt/string.c | 24 +++++++++---- dlls/msvcrt/wcs.c | 79 ++++++++------------------------------------ 5 files changed, 42 insertions(+), 83 deletions(-) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index b8e89e4..65da427 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -289,7 +289,7 @@ @ cdecl _assert(str str long) msvcrt._assert @ stub _atodbl @ stub _atodbl_l -@ stub _atof_l +@ cdecl _atof_l(str ptr) msvcrt._atof_l @ stub _atoflt @ stub _atoflt_l @ cdecl -ret64 _atoi64(str) msvcrt._atoi64 @@ -1105,7 +1105,7 @@ @ cdecl _wcsrev(wstr) msvcrt._wcsrev @ cdecl _wcsset(wstr long) msvcrt._wcsset @ stub _wcsset_s -@ stub _wcstod_l +@ cdecl _wcstod_l(wstr ptr) msvcrt._wcstod_l @ stub _wcstoi64 @ stub _wcstoi64_l @ stub _wcstol_l @@ -1207,8 +1207,8 @@ @ cdecl _wtempnam(wstr wstr) msvcrt._wtempnam @ stub _wtmpnam @ stub _wtmpnam_s -@ stub _wtof -@ stub _wtof_l +@ cdecl _wtof(wstr) msvcrt._wtof +@ cdecl _wtof_l(wstr ptr) msvcrt._wtof_l @ cdecl _wtoi(wstr) msvcrt._wtoi @ cdecl _wtoi64(wstr) msvcrt._wtoi64 @ stub _wtoi64_l diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 141592d..b7884dc 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -281,7 +281,7 @@ @ cdecl _assert(str str long) msvcrt._assert @ stub _atodbl @ stub _atodbl_l -@ stub _atof_l +@ cdecl _atof_l(str ptr) msvcrt._atof_l @ stub _atoflt @ stub _atoflt_l @ cdecl -ret64 _atoi64(str) msvcrt._atoi64 @@ -1092,7 +1092,7 @@ @ cdecl _wcsrev(wstr) msvcrt._wcsrev @ cdecl _wcsset(wstr long) msvcrt._wcsset @ stub _wcsset_s -@ stub _wcstod_l +@ cdecl _wcstod_l(wstr ptr) msvcrt._wcstod_l @ stub _wcstoi64 @ stub _wcstoi64_l @ stub _wcstol_l @@ -1191,8 +1191,8 @@ @ cdecl _wtempnam(wstr wstr) msvcrt._wtempnam @ stub _wtmpnam @ stub _wtmpnam_s -@ stub _wtof -@ stub _wtof_l +@ cdecl _wtof(wstr) msvcrt._wtof +@ cdecl _wtof_l(wstr ptr) msvcrt._wtof_l @ cdecl _wtoi(wstr) msvcrt._wtoi @ cdecl _wtoi64(wstr) msvcrt._wtoi64 @ stub _wtoi64_l diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 81e07a7..0680375 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -264,7 +264,7 @@ @ cdecl _assert(str str long) MSVCRT__assert @ stub _atodbl #(ptr str) # stub _atodbl_l -# stub _atof_l +@ cdecl _atof_l(str ptr) MSVCRT__atof_l # stub _atoflt_l @ cdecl -ret64 _atoi64(str) ntdll._atoi64 # stub _atoi64_l @@ -1136,8 +1136,8 @@ # stub _wtempnam_dbg @ stub _wtmpnam #(ptr) # stub _wtmpnam_s -# stub _wtof -# stub _wtof_l +@ cdecl _wtof(wstr) MSVCRT__wtof +@ cdecl _wtof_l(wstr ptr) MSVCRT__wtof_l @ cdecl _wtoi(wstr) ntdll._wtoi @ cdecl _wtoi64(wstr) ntdll._wtoi64 # stub _wtoi64_l diff --git a/dlls/msvcrt/string.c b/dlls/msvcrt/string.c index 6829e25..d99c508 100644 --- a/dlls/msvcrt/string.c +++ b/dlls/msvcrt/string.c @@ -132,14 +132,6 @@ void CDECL MSVCRT__swab(char* src, char* dst, int len) } /********************************************************************* - * atof (MSVCRT.@) - */ -double CDECL MSVCRT_atof( const char *str ) -{ - return atof( str ); -} - -/********************************************************************* * strtod_l (MSVCRT.@) */ double CDECL MSVCRT_strtod_l( const char *str, char **end, MSVCRT__locale_t locale) @@ -253,6 +245,22 @@ double CDECL MSVCRT_strtod( const char *str, char **end ) } /********************************************************************* + * atof (MSVCRT.@) + */ +double CDECL MSVCRT_atof( const char *str ) +{ + return MSVCRT_strtod_l(str, NULL, NULL); +} + +/********************************************************************* + * _atof_l (MSVCRT.@) + */ +double CDECL MSVCRT__atof_l( const char *str, MSVCRT__locale_t locale) +{ + return MSVCRT_strtod_l(str, NULL, locale); +} + +/********************************************************************* * strcoll (MSVCRT.@) */ int CDECL MSVCRT_strcoll( const char* str1, const char* str2 ) diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c index 94c638b..44a3b4d 100644 --- a/dlls/msvcrt/wcs.c +++ b/dlls/msvcrt/wcs.c @@ -231,73 +231,24 @@ double CDECL MSVCRT__wcstod_l(const MSVCRT_wchar_t* str, MSVCRT_wchar_t** end, */ double CDECL MSVCRT_wcstod(const MSVCRT_wchar_t* lpszStr, MSVCRT_wchar_t** end) { - const MSVCRT_wchar_t* str = lpszStr; - int negative = 0; - double ret = 0, divisor = 10.0; - - TRACE("(%s,%p) semi-stub\n", debugstr_w(lpszStr), end); - - /* FIXME: - * - Should set errno on failure - * - Should fail on overflow - * - Need to check which input formats are allowed - */ - while (isspaceW(*str)) - str++; - - if (*str == '-') - { - negative = 1; - str++; - } - - while (isdigitW(*str)) - { - ret = ret * 10.0 + (*str - '0'); - str++; - } - if (*str == '.') - str++; - while (isdigitW(*str)) - { - ret = ret + (*str - '0') / divisor; - divisor *= 10; - str++; - } - - if (*str == 'E' || *str == 'e' || *str == 'D' || *str == 'd') - { - int negativeExponent = 0; - int exponent = 0; - if (*(++str) == '-') - { - negativeExponent = 1; - str++; - } - while (isdigitW(*str)) - { - exponent = exponent * 10 + (*str - '0'); - str++; - } - if (exponent != 0) - { - if (negativeExponent) - ret = ret / pow(10.0, exponent); - else - ret = ret * pow(10.0, exponent); - } - } - - if (negative) - ret = -ret; - - if (end) - *end = (MSVCRT_wchar_t*)str; + return MSVCRT__wcstod_l(lpszStr, end, NULL); +} - TRACE("returning %g\n", ret); - return ret; +/********************************************************************* + * _wtof (MSVCRT.@) + */ +double CDECL MSVCRT__wtof(const MSVCRT_wchar_t *str) +{ + return MSVCRT__wcstod_l(str, NULL, NULL); } +/********************************************************************* + * _wtof_l (MSVCRT.@) + */ +double CDECL MSVCRT__wtof_l(const MSVCRT_wchar_t *str, MSVCRT__locale_t locale) +{ + return MSVCRT__wcstod_l(str, NULL, locale); +} typedef struct pf_output_t {
1
0
0
0
Piotr Caban : msvcrt: Added wcstod_l implementation.
by Alexandre Julliard
26 Apr '10
26 Apr '10
Module: wine Branch: master Commit: f7197663c998d989c6ecf26ddc8c09208fff873c URL:
http://source.winehq.org/git/wine.git/?a=commit;h=f7197663c998d989c6ecf26dd…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Mon Apr 26 12:33:38 2010 +0200 msvcrt: Added wcstod_l implementation. It's almost a copy of strtod_l. --- dlls/msvcrt/msvcrt.spec | 1 + dlls/msvcrt/wcs.c | 107 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+), 0 deletions(-) diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 156ab2e..81e07a7 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -1413,3 +1413,4 @@ @ cdecl _create_locale(long str) @ cdecl _free_locale(ptr) @ cdecl _configthreadlocale(long) +@ cdecl _wcstod_l(wstr ptr) MSVCRT__wcstod_l diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c index 21d0d28..94c638b 100644 --- a/dlls/msvcrt/wcs.c +++ b/dlls/msvcrt/wcs.c @@ -18,6 +18,9 @@ * 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 "wine/port.h" + #include <limits.h> #include <stdio.h> #include <math.h> @@ -120,6 +123,110 @@ INT CDECL MSVCRT__wcsupr_s( MSVCRT_wchar_t* str, MSVCRT_size_t n ) } /********************************************************************* + * _wcstod_l - not exported in native msvcrt + */ +double CDECL MSVCRT__wcstod_l(const MSVCRT_wchar_t* str, MSVCRT_wchar_t** end, + MSVCRT__locale_t locale) +{ + unsigned __int64 d=0, hlp; + int exp=0, sign=1; + const MSVCRT_wchar_t *p; + double ret; + + if(!str) { + MSVCRT__invalid_parameter(NULL, NULL, NULL, 0, 0); + *MSVCRT__errno() = MSVCRT_EINVAL; + return 0; + } + + if(!locale) + locale = get_locale(); + + p = str; + while(isspaceW(*p)) + p++; + + if(*p == '-') { + sign = -1; + p++; + } else if(*p == '+') + p++; + + while(isdigitW(*p)) { + hlp = d*10+*(p++)-'0'; + if(d>MSVCRT_UI64_MAX/10 || hlp<d) { + exp++; + break; + } else + d = hlp; + } + while(isdigitW(*p)) { + exp++; + p++; + } + if(*p == *locale->locinfo->lconv->decimal_point) + p++; + + while(isdigitW(*p)) { + hlp = d*10+*(p++)-'0'; + if(d>MSVCRT_UI64_MAX/10 || hlp<d) + break; + + d = hlp; + exp--; + } + while(isdigitW(*p)) + p++; + + if(p == str) { + if(end) + *end = (MSVCRT_wchar_t*)str; + return 0.0; + } + + if(*p=='e' || *p=='E' || *p=='d' || *p=='D') { + int e=0, s=1; + + p++; + if(*p == '-') { + s = -1; + p++; + } else if(*p == '+') + p++; + + if(isdigitW(*p)) { + while(isdigitW(*p)) { + if(e>INT_MAX/10 || (e=e*10+*p-'0')<0) + e = INT_MAX; + p++; + } + e *= s; + + if(exp<0 && e<0 && exp+e>=0) exp = INT_MIN; + else if(exp>0 && e>0 && exp+e<0) exp = INT_MAX; + else exp += e; + } else { + if(*p=='-' || *p=='+') + p--; + p--; + } + } + + if(exp>0) + ret = (double)sign*d*pow(10, exp); + else + ret = (double)sign*d/pow(10, -exp); + + if((d && ret==0.0) || isinf(ret)) + *MSVCRT__errno() = MSVCRT_ERANGE; + + if(end) + *end = (MSVCRT_wchar_t*)p; + + return ret; +} + +/********************************************************************* * wcstod (MSVCRT.@) */ double CDECL MSVCRT_wcstod(const MSVCRT_wchar_t* lpszStr, MSVCRT_wchar_t** end)
1
0
0
0
Piotr Caban : msvcrt: Change strtod_l implementation.
by Alexandre Julliard
26 Apr '10
26 Apr '10
Module: wine Branch: master Commit: f76eef74018852253b03d305432b4864c724bed3 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=f76eef74018852253b03d3054…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Mon Apr 26 12:33:28 2010 +0200 msvcrt: Change strtod_l implementation. --- dlls/msvcrt/string.c | 104 ++++++++++++++++++++++++++++++++------------ dlls/msvcrt/tests/string.c | 34 +++++++++++++-- 2 files changed, 106 insertions(+), 32 deletions(-) diff --git a/dlls/msvcrt/string.c b/dlls/msvcrt/string.c index 830fe51..6829e25 100644 --- a/dlls/msvcrt/string.c +++ b/dlls/msvcrt/string.c @@ -23,8 +23,11 @@ #define _ISOC99_SOURCE #include "config.h" +#include "wine/port.h" #include <stdlib.h> +#include <math.h> +#include <limits.h> #include <errno.h> #include "msvcrt.h" #include "wine/debug.h" @@ -141,13 +144,10 @@ double CDECL MSVCRT_atof( const char *str ) */ double CDECL MSVCRT_strtod_l( const char *str, char **end, MSVCRT__locale_t locale) { - const char *p, *dec_point=NULL, *exp=NULL; - char *copy; + unsigned __int64 d=0, hlp; + int exp=0, sign=1; + const char *p; double ret; - int err = errno; - - if(!locale) - locale = get_locale(); if(!str) { MSVCRT__invalid_parameter(NULL, NULL, NULL, 0, 0); @@ -155,45 +155,93 @@ double CDECL MSVCRT_strtod_l( const char *str, char **end, MSVCRT__locale_t loca return 0; } + if(!locale) + locale = get_locale(); + /* FIXME: use *_l functions */ p = str; while(isspace(*p)) p++; - if(*p=='+' || *p=='-') + + if(*p == '-') { + sign = -1; p++; - while(isdigit(*p)) + } else if(*p == '+') p++; - if(*p == *locale->locinfo->lconv->decimal_point) { - if(*p!='.') - dec_point = p; + + while(isdigit(*p)) { + hlp = d*10+*(p++)-'0'; + if(d>MSVCRT_UI64_MAX/10 || hlp<d) { + exp++; + break; + } else + d = hlp; + } + while(isdigit(*p)) { + exp++; p++; } - while(isdigit(*p)) + + if(*p == *locale->locinfo->lconv->decimal_point) p++; - if(*p=='d' || *p=='D') - exp = p; - /* FIXME: don't copy input string */ - if((dec_point || exp) && (copy=_strdup(str))) { - if(dec_point) - copy[dec_point-str] = '.'; + while(isdigit(*p)) { + hlp = d*10+*(p++)-'0'; + if(d>MSVCRT_UI64_MAX/10 || hlp<d) + break; - if(exp) - copy[exp-str] = 'e'; + d = hlp; + exp--; + } + while(isdigit(*p)) + p++; - ret = strtod(copy, end); + if(p == str) { if(end) - *end = (char*)str+(*end-copy); + *end = (char*)str; + return 0.0; + } - MSVCRT_free(copy); - } else - ret = strtod(str, end); + if(*p=='e' || *p=='E' || *p=='d' || *p=='D') { + int e=0, s=1; - if(err != errno) - *MSVCRT__errno() = errno; + p++; + if(*p == '-') { + s = -1; + p++; + } else if(*p == '+') + p++; + + if(isdigit(*p)) { + while(isdigit(*p)) { + if(e>INT_MAX/10 || (e=e*10+*p-'0')<0) + e = INT_MAX; + p++; + } + e *= s; - return ret; + if(exp<0 && e<0 && exp+e>=0) exp = INT_MIN; + else if(exp>0 && e>0 && exp+e<0) exp = INT_MAX; + else exp += e; + } else { + if(*p=='-' || *p=='+') + p--; + p--; + } + } + + if(exp>0) + ret = (double)sign*d*pow(10, exp); + else + ret = (double)sign*d/pow(10, -exp); + if((d && ret==0.0) || isinf(ret)) + *MSVCRT__errno() = MSVCRT_ERANGE; + + if(end) + *end = (char*)p; + + return ret; } /********************************************************************* diff --git a/dlls/msvcrt/tests/string.c b/dlls/msvcrt/tests/string.c index 433a318..5d61687 100644 --- a/dlls/msvcrt/tests/string.c +++ b/dlls/msvcrt/tests/string.c @@ -1081,7 +1081,7 @@ static void test__strtoi64(void) } static inline BOOL almost_equal(double d1, double d2) { - if(d1-d2>-1e-16 && d1-d2<1e-16) + if(d1-d2>-1e-30 && d1-d2<1e-30) return TRUE; return FALSE; } @@ -1093,6 +1093,7 @@ static void test__strtod(void) const char double3[] = "INF"; const char double4[] = ".21e12"; const char double5[] = "214353e-3"; + const char overflow[] = "1d9999999999999999999"; char *end; double d; @@ -1106,8 +1107,8 @@ static void test__strtod(void) ok(end == double2+7, "incorrect end (%d)\n", end-double2); d = strtod(double3, &end); - todo_wine ok(almost_equal(d, 0), "d = %lf\n", d); - todo_wine ok(end == double3, "incorrect end (%d)\n", end-double3); + ok(almost_equal(d, 0), "d = %lf\n", d); + ok(end == double3, "incorrect end (%d)\n", end-double3); d = strtod(double4, &end); ok(almost_equal(d, 210000000000.0), "d = %lf\n", d); @@ -1127,12 +1128,37 @@ static void test__strtod(void) } d = strtod("12.1", NULL); - todo_wine ok(almost_equal(d, 12.0), "d = %lf\n", d); + ok(almost_equal(d, 12.0), "d = %lf\n", d); d = strtod("12,1", NULL); ok(almost_equal(d, 12.1), "d = %lf\n", d); setlocale(LC_ALL, "C"); + + /* Precision tests */ + d = strtod("0.1", NULL); + ok(almost_equal(d, 0.1), "d = %lf\n", d); + d = strtod("-0.1", NULL); + ok(almost_equal(d, -0.1), "d = %lf\n", d); + d = strtod("0.1281832188491894198128921", NULL); + ok(almost_equal(d, 0.1281832188491894198128921), "d = %lf\n", d); + d = strtod("0.82181281288121", NULL); + ok(almost_equal(d, 0.82181281288121), "d = %lf\n", d); + d = strtod("21921922352523587651128218821", NULL); + ok(almost_equal(d, 21921922352523587651128218821.0), "d = %lf\n", d); + d = strtod("0.1d238", NULL); + ok(almost_equal(d, 0.1e238L), "d = %lf\n", d); + d = strtod("0.1D-4736", NULL); + ok(almost_equal(d, 0.1e-4736L), "d = %lf\n", d); + + errno = 0xdeadbeef; + d = strtod(overflow, &end); + ok(errno == ERANGE, "errno = %x\n", errno); + ok(end == overflow+21, "incorrect end (%d)\n", end-overflow); + + errno = 0xdeadbeef; + strtod("-1d309", NULL); + ok(errno == ERANGE, "errno = %x\n", errno); } START_TEST(string)
1
0
0
0
Piotr Caban : msvcrt: Added btowc implementation.
by Alexandre Julliard
26 Apr '10
26 Apr '10
Module: wine Branch: master Commit: 815840e972fd70d2d4bfd32df5422cdc8e5ef738 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=815840e972fd70d2d4bfd32df…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Mon Apr 26 12:33:19 2010 +0200 msvcrt: Added btowc implementation. --- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/locale.c | 16 ++++++++++++++++ dlls/msvcrt/msvcrt.spec | 2 +- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 0c69621..b8e89e4 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -1235,7 +1235,7 @@ @ cdecl atol(str) msvcrt.atol @ cdecl bsearch(ptr ptr long long ptr) msvcrt.bsearch @ stub bsearch_s -@ stub btowc +@ cdecl btowc(long) msvcrt.btowc @ cdecl calloc(long long) msvcrt.calloc @ cdecl ceil(double) msvcrt.ceil @ cdecl clearerr(ptr) msvcrt.clearerr diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 3bfd1b8..141592d 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -1219,7 +1219,7 @@ @ cdecl atol(str) msvcrt.atol @ cdecl bsearch(ptr ptr long long ptr) msvcrt.bsearch @ stub bsearch_s -@ stub btowc +@ cdecl btowc(long) msvcrt.btowc @ cdecl calloc(long long) msvcrt.calloc @ cdecl ceil(double) msvcrt.ceil @ cdecl clearerr(ptr) msvcrt.clearerr diff --git a/dlls/msvcrt/locale.c b/dlls/msvcrt/locale.c index 84bd73b..546f20c 100644 --- a/dlls/msvcrt/locale.c +++ b/dlls/msvcrt/locale.c @@ -485,6 +485,22 @@ int CDECL __crtGetLocaleInfoW( LCID lcid, LCTYPE type, MSVCRT_wchar_t *buffer, i } /********************************************************************* + * btowc(MSVCRT.@) + */ +MSVCRT_wint_t CDECL MSVCRT_btowc(int c) +{ + MSVCRT__locale_t locale = get_locale(); + unsigned char letter = c; + MSVCRT_wchar_t ret; + + if(!MultiByteToWideChar(locale->locinfo->lc_handle[MSVCRT_LC_CTYPE], + 0, (LPCSTR)&letter, 1, &ret, 1)) + return 0; + + return ret; +} + +/********************************************************************* * __crtGetStringTypeW(MSVCRT.@) * * This function was accepting different number of arguments in older diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 0909cd0..156ab2e 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -1165,7 +1165,7 @@ @ cdecl atol(str) ntdll.atol @ cdecl bsearch(ptr ptr long long ptr) ntdll.bsearch # stub bsearch_s -# stub btowc +@ cdecl btowc(long) MSVCRT_btowc @ cdecl calloc(long long) MSVCRT_calloc @ cdecl ceil(double) MSVCRT_ceil @ cdecl clearerr(ptr) MSVCRT_clearerr
1
0
0
0
Piotr Caban : msvcr90: Added _recalloc implementation.
by Alexandre Julliard
26 Apr '10
26 Apr '10
Module: wine Branch: master Commit: 40aa4dc459921631dff66989576bc264ee3a3540 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=40aa4dc459921631dff669895…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Mon Apr 26 12:33:02 2010 +0200 msvcr90: Added _recalloc implementation. --- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.c | 27 +++++++++++++++++++++++++++ dlls/msvcr90/msvcr90.spec | 2 +- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 53cef75..0c69621 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -837,7 +837,7 @@ @ stub _pwctype @ cdecl _read(long ptr long) msvcrt._read @ stub _realloc_crt -@ stub _recalloc +@ cdecl _recalloc(ptr long long) msvcr90._recalloc @ stub _recalloc_crt @ stub _resetstkoflw @ cdecl _rmdir(str) msvcrt._rmdir diff --git a/dlls/msvcr90/msvcr90.c b/dlls/msvcr90/msvcr90.c index 9d03767..eaf9d66 100644 --- a/dlls/msvcr90/msvcr90.c +++ b/dlls/msvcr90/msvcr90.c @@ -21,6 +21,8 @@ #include <stdarg.h> #include "stdlib.h" +#include "errno.h" +#include "malloc.h" #include "windef.h" #include "winbase.h" #include "wine/debug.h" @@ -131,3 +133,28 @@ void CDECL __clean_type_info_names_internal(void *p) { FIXME("(%p) stub\n", p); } + +/********************************************************************* + * _recalloc (MSVCR90.@) + */ +void* CDECL _recalloc(void* mem, size_t num, size_t size) +{ + size_t old_size; + void *ret; + + if(!mem) + return calloc(num, size); + + size = num*size; + old_size = _msize(mem); + + ret = realloc(mem, size); + if(!ret) { + *_errno() = ENOMEM; + return NULL; + } + + if(size>old_size) + memset((BYTE*)mem+old_size, 0, size-old_size); + return ret; +} diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index d8f8e04..3bfd1b8 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -823,7 +823,7 @@ @ stub _pwctype @ cdecl _read(long ptr long) msvcrt._read @ stub _realloc_crt -@ stub _recalloc +@ cdecl _recalloc(ptr long long) @ stub _recalloc_crt @ stub _resetstkoflw @ cdecl _rmdir(str) msvcrt._rmdir
1
0
0
0
Henri Verbeet : wined3d: Simply pass an IWineD3DSurfaceImpl pointer to surface_force_reload().
by Alexandre Julliard
26 Apr '10
26 Apr '10
Module: wine Branch: master Commit: 32b1f25f4beaeae419e86ed8123730a33c38a0b6 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=32b1f25f4beaeae419e86ed81…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Mon Apr 26 11:02:36 2010 +0200 wined3d: Simply pass an IWineD3DSurfaceImpl pointer to surface_force_reload(). --- dlls/wined3d/surface.c | 12 +++++------- 1 files changed, 5 insertions(+), 7 deletions(-) diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index c62d741..d768ff4 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -463,11 +463,9 @@ HRESULT surface_init(IWineD3DSurfaceImpl *surface, WINED3DSURFTYPE surface_type, return hr; } -static void surface_force_reload(IWineD3DSurface *iface) +static void surface_force_reload(IWineD3DSurfaceImpl *surface) { - IWineD3DSurfaceImpl *This = (IWineD3DSurfaceImpl *)iface; - - This->Flags &= ~(SFLAG_ALLOCATED | SFLAG_SRGBALLOCATED); + surface->Flags &= ~(SFLAG_ALLOCATED | SFLAG_SRGBALLOCATED); } void surface_set_texture_name(IWineD3DSurface *iface, GLuint new_name, BOOL srgb) @@ -499,7 +497,7 @@ void surface_set_texture_name(IWineD3DSurface *iface, GLuint new_name, BOOL srgb } *name = new_name; - surface_force_reload(iface); + surface_force_reload(This); } void surface_set_texture_target(IWineD3DSurface *iface, GLenum target) @@ -520,7 +518,7 @@ void surface_set_texture_target(IWineD3DSurface *iface, GLenum target) } } This->texture_target = target; - surface_force_reload(iface); + surface_force_reload(This); } /* Context activation is done by the caller. */ @@ -2025,7 +2023,7 @@ static void surface_release_client_storage(IWineD3DSurface *iface) IWineD3DSurface_ModifyLocation(iface, SFLAG_INSRGBTEX, FALSE); IWineD3DSurface_ModifyLocation(iface, SFLAG_INTEXTURE, FALSE); - surface_force_reload(iface); + surface_force_reload(This); } static HRESULT WINAPI IWineD3DSurfaceImpl_GetDC(IWineD3DSurface *iface, HDC *pHDC)
1
0
0
0
← Newer
1
...
8
9
10
11
12
13
14
...
90
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
Results per page:
10
25
50
100
200