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
March 2009
----- 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
834 discussions
Start a n
N
ew thread
Henri Verbeet : wined3d: Fix some prototypes.
by Alexandre Julliard
05 Mar '09
05 Mar '09
Module: wine Branch: master Commit: 17e12611b8efd6e6934e75a0a87f94f8483fa830 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=17e12611b8efd6e6934e75a0a…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Thu Mar 5 12:30:42 2009 +0100 wined3d: Fix some prototypes. --- dlls/wined3d/drawprim.c | 16 ++++++++-------- dlls/wined3d/wined3d_private.h | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c index af03f4e..9059ebb 100644 --- a/dlls/wined3d/drawprim.c +++ b/dlls/wined3d/drawprim.c @@ -238,7 +238,7 @@ void primitiveDeclarationConvertToStridedData( } static void drawStridedFast(IWineD3DDevice *iface, GLenum primitive_type, - UINT min_vertex_idx, UINT max_vertex_idx, UINT count, short idx_size, + UINT min_vertex_idx, UINT max_vertex_idx, UINT count, UINT idx_size, const void *idx_data, UINT start_idx) { IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; @@ -274,12 +274,12 @@ static void drawStridedFast(IWineD3DDevice *iface, GLenum primitive_type, */ static void drawStridedSlow(IWineD3DDevice *iface, const WineDirect3DVertexStridedData *sd, UINT NumVertexes, - GLenum glPrimType, const void *idxData, short idxSize, ULONG minIndex, ULONG startIdx) + GLenum glPrimType, const void *idxData, UINT idxSize, UINT minIndex, UINT startIdx) { unsigned int textureNo = 0; const WORD *pIdxBufS = NULL; const DWORD *pIdxBufL = NULL; - ULONG vx_index; + UINT vx_index; IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; const UINT *streamOffset = This->stateBlock->streamOffset; long SkipnStrides = startIdx + This->stateBlock->loadBaseVertexIndex; @@ -594,13 +594,13 @@ static inline void send_attribute(IWineD3DDeviceImpl *This, const DWORD type, co } static void drawStridedSlowVs(IWineD3DDevice *iface, const WineDirect3DVertexStridedData *sd, UINT numberOfVertices, - GLenum glPrimitiveType, const void *idxData, short idxSize, ULONG minIndex, ULONG startIdx) + GLenum glPrimitiveType, const void *idxData, UINT idxSize, UINT minIndex, UINT startIdx) { IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *) iface; long SkipnStrides = startIdx + This->stateBlock->loadBaseVertexIndex; const WORD *pIdxBufS = NULL; const DWORD *pIdxBufL = NULL; - ULONG vx_index; + UINT vx_index; int i; IWineD3DStateBlockImpl *stateblock = This->stateBlock; const BYTE *ptr; @@ -654,8 +654,8 @@ static void drawStridedSlowVs(IWineD3DDevice *iface, const WineDirect3DVertexStr } static inline void drawStridedInstanced(IWineD3DDevice *iface, const WineDirect3DVertexStridedData *sd, - UINT numberOfVertices, GLenum glPrimitiveType, const void *idxData, short idxSize, ULONG minIndex, - ULONG startIdx) + UINT numberOfVertices, GLenum glPrimitiveType, const void *idxData, UINT idxSize, UINT minIndex, + UINT startIdx) { UINT numInstances = 0, i; int numInstancedAttribs = 0, j; @@ -808,7 +808,7 @@ static inline void remove_vbos(IWineD3DDeviceImpl *This, WineDirect3DVertexStrid /* Routine common to the draw primitive and draw indexed primitive routines */ void drawPrimitive(IWineD3DDevice *iface, WINED3DPRIMITIVETYPE PrimitiveType, UINT index_count, - UINT numberOfVertices, long StartIdx, short idxSize, const void *idxData, int minIndex) + UINT numberOfVertices, UINT StartIdx, UINT idxSize, const void *idxData, UINT minIndex) { IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 8f8fa82..b58d4ee 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -654,7 +654,7 @@ extern LONG primCounter; /* Routine common to the draw primitive and draw indexed primitive routines */ void drawPrimitive(IWineD3DDevice *iface, WINED3DPRIMITIVETYPE PrimitiveType, UINT index_count, - UINT numberOfVertices, long start_idx, short idxBytes, const void *idxData, int minIndex); + UINT numberOfVertices, UINT start_idx, UINT idxBytes, const void *idxData, UINT minIndex); void primitiveDeclarationConvertToStridedData( IWineD3DDevice *iface,
1
0
0
0
Henri Verbeet : wined3d: Pass the vertex count rather than the primitive count to wined3d draw methods .
by Alexandre Julliard
05 Mar '09
05 Mar '09
Module: wine Branch: master Commit: 602bb1f551893404dff99ff0331746c0e7bf0d55 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=602bb1f551893404dff99ff03…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Thu Mar 5 12:30:42 2009 +0100 wined3d: Pass the vertex count rather than the primitive count to wined3d draw methods. --- dlls/d3d8/device.c | 40 +++++++- dlls/d3d9/device.c | 40 +++++++- dlls/ddraw/device.c | 204 ++-------------------------------------- dlls/wined3d/device.c | 74 +++++++-------- dlls/wined3d/drawprim.c | 98 +++++++------------ dlls/wined3d/wined3d_private.h | 2 +- include/wine/wined3d.idl | 12 +- 7 files changed, 156 insertions(+), 314 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=602bb1f551893404dff99…
1
0
0
0
Alexandre Julliard : user32/tests: Skip menu test if sending input failed. Use VK_MENU instead of VK_LMENU.
by Alexandre Julliard
05 Mar '09
05 Mar '09
Module: wine Branch: master Commit: 6eccf2a3fa527260a3ae3304673b08ddf162cb30 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=6eccf2a3fa527260a3ae33046…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu Mar 5 14:27:17 2009 +0100 user32/tests: Skip menu test if sending input failed. Use VK_MENU instead of VK_LMENU. --- dlls/user32/tests/menu.c | 36 ++++++++++++++++++++++-------------- 1 files changed, 22 insertions(+), 14 deletions(-) diff --git a/dlls/user32/tests/menu.c b/dlls/user32/tests/menu.c index f51bf48..747970f 100644 --- a/dlls/user32/tests/menu.c +++ b/dlls/user32/tests/menu.c @@ -1750,23 +1750,23 @@ static struct menu_mouse_tests_s { BOOL _todo_wine; } menu_tests[] = { /* for each test, send keys or clicks and check for menu visibility */ - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE }, /* test 0 */ + { INPUT_KEYBOARD, {{0}}, {VK_MENU, 0}, TRUE, FALSE }, /* test 0 */ { INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE }, + { INPUT_KEYBOARD, {{0}}, {VK_MENU, 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE }, + { INPUT_KEYBOARD, {{0}}, {VK_MENU, 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE }, + { INPUT_KEYBOARD, {{0}}, {VK_MENU, 'M', 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, VK_ESCAPE, 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', VK_ESCAPE, 0}, TRUE, FALSE }, + { INPUT_KEYBOARD, {{0}}, {VK_MENU, 'M', VK_ESCAPE, 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE }, + { INPUT_KEYBOARD, {{0}}, {VK_MENU, 'M', 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE }, + { INPUT_KEYBOARD, {{0}}, {VK_MENU, 'M', 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 'P', 0}, TRUE, FALSE }, + { INPUT_KEYBOARD, {{0}}, {VK_MENU, 'M', 'P', 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE }, - { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 'P', 0}, TRUE, FALSE }, + { INPUT_KEYBOARD, {{0}}, {VK_MENU, 'M', 'P', 0}, TRUE, FALSE }, { INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE }, { INPUT_MOUSE, {{1, 2}, {0}}, {0}, TRUE, TRUE }, /* test 18 */ @@ -1793,7 +1793,7 @@ static void send_key(WORD wVk) pSendInput(2, (INPUT *) i, sizeof(INPUT)); } -static void click_menu(HANDLE hWnd, struct menu_item_pair_s *mi) +static BOOL click_menu(HANDLE hWnd, struct menu_item_pair_s *mi) { HMENU hMenu = hMenus[mi->uMenu]; TEST_INPUT i[3]; @@ -1802,7 +1802,7 @@ static void click_menu(HANDLE hWnd, struct menu_item_pair_s *mi) int screen_w = GetSystemMetrics(SM_CXSCREEN); int screen_h = GetSystemMetrics(SM_CYSCREEN); BOOL ret = GetMenuItemRect(mi->uMenu > 2 ? NULL : hWnd, hMenu, mi->uItem, &r); - if(!ret) return; + if(!ret) return FALSE; memset(i, 0, sizeof(i)); i[0].type = i[1].type = i[2].type = INPUT_MOUSE; @@ -1815,10 +1815,11 @@ static void click_menu(HANDLE hWnd, struct menu_item_pair_s *mi) i[0].u.mi.dwFlags |= MOUSEEVENTF_MOVE; i[1].u.mi.dwFlags |= MOUSEEVENTF_LEFTDOWN; i[2].u.mi.dwFlags |= MOUSEEVENTF_LEFTUP; - pSendInput(3, (INPUT *) i, sizeof(INPUT)); + ret = pSendInput(3, (INPUT *) i, sizeof(INPUT)); /* hack to prevent mouse message buildup in Wine */ while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageA( &msg ); + return ret; } static DWORD WINAPI test_menu_input_thread(LPVOID lpParameter) @@ -1830,7 +1831,7 @@ static DWORD WINAPI test_menu_input_thread(LPVOID lpParameter) /* mixed keyboard/mouse test */ for (i = 0; menu_tests[i].type != -1; i++) { - int elapsed = 0; + int ret = TRUE, elapsed = 0; got_input = i && menu_tests[i-1].bMenuVisible; @@ -1839,8 +1840,14 @@ static DWORD WINAPI test_menu_input_thread(LPVOID lpParameter) send_key(menu_tests[i].wVk[j]); else for (j = 0; menu_tests[i].menu_item_pairs[j].uMenu != 0; j++) - click_menu(hWnd, &menu_tests[i].menu_item_pairs[j]); + if (!(ret = click_menu(hWnd, &menu_tests[i].menu_item_pairs[j]))) break; + if (!ret) + { + skip( "test %u: failed to send input\n", i ); + PostMessage( hWnd, WM_CANCELMODE, 0, 0 ); + return 0; + } while (menu_tests[i].bMenuVisible != bMenuVisible) { if (elapsed > 200) @@ -1852,6 +1859,7 @@ static DWORD WINAPI test_menu_input_thread(LPVOID lpParameter) if (!got_input) { skip( "test %u: didn't receive input\n", i ); + PostMessage( hWnd, WM_CANCELMODE, 0, 0 ); return 0; }
1
0
0
0
Alexandre Julliard : user32/tests: Mark a couple of painting messages as optional.
by Alexandre Julliard
05 Mar '09
05 Mar '09
Module: wine Branch: master Commit: 903b52e7231921055a9a28a4a71f13c3ed65a180 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=903b52e7231921055a9a28a4a…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu Mar 5 14:26:55 2009 +0100 user32/tests: Mark a couple of painting messages as optional. --- dlls/user32/tests/msg.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c index 4a51600..423b747 100644 --- a/dlls/user32/tests/msg.c +++ b/dlls/user32/tests/msg.c @@ -413,7 +413,7 @@ static const struct message WmSWP_FrameChanged_noclip[] = { { EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 }, { WM_PAINT, sent }, { WM_NCPAINT, sent|beginpaint }, /* wparam != 1 */ - { WM_ERASEBKGND, sent|beginpaint }, + { WM_ERASEBKGND, sent|beginpaint|optional }, { 0 } }; @@ -8206,7 +8206,9 @@ static const struct message ScrollWindowPaint1[] = { { WM_ERASEBKGND, sent|beginpaint }, { WM_GETTEXTLENGTH, sent|optional }, { WM_PAINT, sent|optional }, - { WM_NCPAINT, sent|optional }, + { WM_NCPAINT, sent|beginpaint|optional }, + { WM_GETTEXT, sent|optional }, + { WM_GETTEXT, sent|optional }, { WM_GETTEXT, sent|optional }, { WM_ERASEBKGND, sent|optional }, { 0 }
1
0
0
0
Alexandre Julliard : iphlpapi: Simplify parsing of UDP stats. Only try to open /proc on Linux.
by Alexandre Julliard
05 Mar '09
05 Mar '09
Module: wine Branch: master Commit: 4c7216fc775fbddf5653a3c72e8d92372636f21c URL:
http://source.winehq.org/git/wine.git/?a=commit;h=4c7216fc775fbddf5653a3c72…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu Mar 5 14:24:39 2009 +0100 iphlpapi: Simplify parsing of UDP stats. Only try to open /proc on Linux. --- dlls/iphlpapi/ipstats.c | 129 ++++++++++++++++++---------------------------- 1 files changed, 51 insertions(+), 78 deletions(-) diff --git a/dlls/iphlpapi/ipstats.c b/dlls/iphlpapi/ipstats.c index 7d31e43..3884cfc 100644 --- a/dlls/iphlpapi/ipstats.c +++ b/dlls/iphlpapi/ipstats.c @@ -612,92 +612,65 @@ DWORD WINAPI GetTcpStatistics(PMIB_TCPSTATS stats) */ DWORD WINAPI GetUdpStatistics(PMIB_UDPSTATS stats) { -#if defined(HAVE_SYS_SYSCTL_H) && defined(UDPCTL_STATS) - int mib[] = {CTL_NET, PF_INET, IPPROTO_UDP, UDPCTL_STATS}; -#define MIB_LEN (sizeof(mib) / sizeof(mib[0])) - struct udpstat udp_stat; - MIB_UDPTABLE *udp_table; - size_t needed; - if (!stats) - return ERROR_INVALID_PARAMETER; - - needed = sizeof(udp_stat); - - if(sysctl(mib, MIB_LEN, &udp_stat, &needed, NULL, 0) == -1) - { - ERR ("failed to get udpstat\n"); - return ERROR_NOT_SUPPORTED; - } - - stats->dwInDatagrams = udp_stat.udps_ipackets; - stats->dwOutDatagrams = udp_stat.udps_opackets; - stats->dwNoPorts = udp_stat.udps_noport; - stats->dwInErrors = udp_stat.udps_hdrops + udp_stat.udps_badsum + udp_stat.udps_fullsock + udp_stat.udps_badlen; - if (!AllocateAndGetUdpTableFromStack( &udp_table, FALSE, GetProcessHeap(), 0 )) - { - stats->dwNumAddrs = udp_table->dwNumEntries; - HeapFree( GetProcessHeap(), 0, udp_table ); - } - else stats->dwNumAddrs = 0; - - return NO_ERROR; -#else - FILE *fp; - - if (!stats) - return ERROR_INVALID_PARAMETER; - - memset(stats, 0, sizeof(MIB_UDPSTATS)); + DWORD ret = ERROR_NOT_SUPPORTED; - /* get from /proc/net/snmp, no error if can't */ - fp = fopen("/proc/net/snmp", "r"); - if (fp) { - static const char hdr[] = "Udp:"; - char buf[512] = { 0 }, *ptr; + if (!stats) return ERROR_INVALID_PARAMETER; + memset( stats, 0, sizeof(*stats) ); +#ifdef __linux__ + { + FILE *fp; - do { - ptr = fgets(buf, sizeof(buf), fp); - } while (ptr && strncasecmp(buf, hdr, sizeof(hdr) - 1)); - if (ptr) { - /* last line was a header, get another */ - ptr = fgets(buf, sizeof(buf), fp); - if (ptr && strncasecmp(buf, hdr, sizeof(hdr) - 1) == 0) { - char *endPtr; + if ((fp = fopen("/proc/net/snmp", "r"))) + { + static const char hdr[] = "Udp:"; + char buf[512], *ptr; - ptr += sizeof(hdr); - if (ptr && *ptr) { - stats->dwInDatagrams = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwNoPorts = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwInErrors = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwOutDatagrams = strtoul(ptr, &endPtr, 10); - ptr = endPtr; + while ((ptr = fgets(buf, sizeof(buf), fp))) + { + if (strncasecmp(buf, hdr, sizeof(hdr) - 1)) continue; + /* last line was a header, get another */ + if (!(ptr = fgets(buf, sizeof(buf), fp))) break; + if (!strncasecmp(buf, hdr, sizeof(hdr) - 1)) + { + ptr += sizeof(hdr); + sscanf( ptr, "%u %u %u %u %u", + &stats->dwInDatagrams, &stats->dwNoPorts, + &stats->dwInErrors, &stats->dwOutDatagrams, &stats->dwNumAddrs ); + break; + } + } + fclose(fp); + ret = NO_ERROR; } - if (ptr && *ptr) { - stats->dwNumAddrs = strtoul(ptr, &endPtr, 10); - ptr = endPtr; + } +#elif defined(HAVE_SYS_SYSCTL_H) && defined(UDPCTL_STATS) + { + int mib[] = {CTL_NET, PF_INET, IPPROTO_UDP, UDPCTL_STATS}; +#define MIB_LEN (sizeof(mib) / sizeof(mib[0])) + struct udpstat udp_stat; + MIB_UDPTABLE *udp_table; + size_t needed = sizeof(udp_stat); + + if(sysctl(mib, MIB_LEN, &udp_stat, &needed, NULL, 0) != -1) + { + stats->dwInDatagrams = udp_stat.udps_ipackets; + stats->dwOutDatagrams = udp_stat.udps_opackets; + stats->dwNoPorts = udp_stat.udps_noport; + stats->dwInErrors = udp_stat.udps_hdrops + udp_stat.udps_badsum + udp_stat.udps_fullsock + udp_stat.udps_badlen; + if (!AllocateAndGetUdpTableFromStack( &udp_table, FALSE, GetProcessHeap(), 0 )) + { + stats->dwNumAddrs = udp_table->dwNumEntries; + HeapFree( GetProcessHeap(), 0, udp_table ); + } + ret = NO_ERROR; } - } + else ERR ("failed to get udpstat\n"); } - fclose(fp); - } - else - { - ERR ("unimplemented!\n"); - return ERROR_NOT_SUPPORTED; - } - - return NO_ERROR; +#else + FIXME( "unimplemented\n" ); #endif + return ret; }
1
0
0
0
Alexandre Julliard : iphlpapi: Simplify parsing of TCP stats. Only try to open /proc on Linux.
by Alexandre Julliard
05 Mar '09
05 Mar '09
Module: wine Branch: master Commit: 3a60d69b474e7610401a4b38beb5b608a046518f URL:
http://source.winehq.org/git/wine.git/?a=commit;h=3a60d69b474e7610401a4b38b…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu Mar 5 14:24:29 2009 +0100 iphlpapi: Simplify parsing of TCP stats. Only try to open /proc on Linux. --- dlls/iphlpapi/ipstats.c | 203 ++++++++++++++++++----------------------------- 1 files changed, 76 insertions(+), 127 deletions(-) diff --git a/dlls/iphlpapi/ipstats.c b/dlls/iphlpapi/ipstats.c index 6e210fa..7d31e43 100644 --- a/dlls/iphlpapi/ipstats.c +++ b/dlls/iphlpapi/ipstats.c @@ -508,144 +508,93 @@ DWORD WINAPI GetIpStatistics(PMIB_IPSTATS stats) */ DWORD WINAPI GetTcpStatistics(PMIB_TCPSTATS stats) { -#if defined(HAVE_SYS_SYSCTL_H) && defined(UDPCTL_STATS) + DWORD ret = ERROR_NOT_SUPPORTED; + + if (!stats) return ERROR_INVALID_PARAMETER; + memset( stats, 0, sizeof(*stats) ); + +#ifdef __linux__ + { + FILE *fp; + + if ((fp = fopen("/proc/net/snmp", "r"))) + { + static const char hdr[] = "Tcp:"; + MIB_TCPTABLE *tcp_table; + char buf[512], *ptr; + + while ((ptr = fgets(buf, sizeof(buf), fp))) + { + if (strncasecmp(buf, hdr, sizeof(hdr) - 1)) continue; + /* last line was a header, get another */ + if (!(ptr = fgets(buf, sizeof(buf), fp))) break; + if (!strncasecmp(buf, hdr, sizeof(hdr) - 1)) + { + ptr += sizeof(hdr); + sscanf( ptr, "%u %u %u %u %u %u %u %u %u %u %u %u %u %u", + &stats->dwRtoAlgorithm, + &stats->dwRtoMin, + &stats->dwRtoMax, + &stats->dwMaxConn, + &stats->dwActiveOpens, + &stats->dwPassiveOpens, + &stats->dwAttemptFails, + &stats->dwEstabResets, + &stats->dwCurrEstab, + &stats->dwInSegs, + &stats->dwOutSegs, + &stats->dwRetransSegs, + &stats->dwInErrs, + &stats->dwOutRsts ); + break; + } + } + if (!AllocateAndGetTcpTableFromStack( &tcp_table, FALSE, GetProcessHeap(), 0 )) + { + stats->dwNumConns = tcp_table->dwNumEntries; + HeapFree( GetProcessHeap(), 0, tcp_table ); + } + fclose(fp); + ret = NO_ERROR; + } + } +#elif defined(HAVE_SYS_SYSCTL_H) && defined(UDPCTL_STATS) + { #ifndef TCPTV_MIN /* got removed in Mac OS X for some reason */ #define TCPTV_MIN 2 #define TCPTV_REXMTMAX 128 #endif - int mib[] = {CTL_NET, PF_INET, IPPROTO_TCP, TCPCTL_STATS}; + int mib[] = {CTL_NET, PF_INET, IPPROTO_TCP, TCPCTL_STATS}; #define MIB_LEN (sizeof(mib) / sizeof(mib[0])) #define hz 1000 - struct tcpstat tcp_stat; - size_t needed; - - if (!stats) - return ERROR_INVALID_PARAMETER; - needed = sizeof(tcp_stat); - - if(sysctl(mib, MIB_LEN, &tcp_stat, &needed, NULL, 0) == -1) - { - ERR ("failed to get tcpstat\n"); - return ERROR_NOT_SUPPORTED; - } - - stats->dwRtoAlgorithm = MIB_TCP_RTO_VANJ; - stats->dwRtoMin = TCPTV_MIN; - stats->dwRtoMax = TCPTV_REXMTMAX; - stats->dwMaxConn = -1; - stats->dwActiveOpens = tcp_stat.tcps_connattempt; - stats->dwPassiveOpens = tcp_stat.tcps_accepts; - stats->dwAttemptFails = tcp_stat.tcps_conndrops; - stats->dwEstabResets = tcp_stat.tcps_drops; - stats->dwCurrEstab = 0; - stats->dwInSegs = tcp_stat.tcps_rcvtotal; - stats->dwOutSegs = tcp_stat.tcps_sndtotal - tcp_stat.tcps_sndrexmitpack; - stats->dwRetransSegs = tcp_stat.tcps_sndrexmitpack; - stats->dwInErrs = tcp_stat.tcps_rcvbadsum + tcp_stat.tcps_rcvbadoff + tcp_stat.tcps_rcvmemdrop + tcp_stat.tcps_rcvshort; - stats->dwOutRsts = tcp_stat.tcps_sndctrl - tcp_stat.tcps_closed; - stats->dwNumConns = tcp_stat.tcps_connects; - - return NO_ERROR; - -#else - FILE *fp; - MIB_TCPTABLE *tcp_table; - - if (!stats) - return ERROR_INVALID_PARAMETER; - - memset(stats, 0, sizeof(MIB_TCPSTATS)); - - /* get from /proc/net/snmp, no error if can't */ - fp = fopen("/proc/net/snmp", "r"); - if (fp) { - static const char hdr[] = "Tcp:"; - char buf[512] = { 0 }, *ptr; - - - do { - ptr = fgets(buf, sizeof(buf), fp); - } while (ptr && strncasecmp(buf, hdr, sizeof(hdr) - 1)); - if (ptr) { - /* last line was a header, get another */ - ptr = fgets(buf, sizeof(buf), fp); - if (ptr && strncasecmp(buf, hdr, sizeof(hdr) - 1) == 0) { - char *endPtr; + struct tcpstat tcp_stat; + size_t needed = sizeof(tcp_stat); - ptr += sizeof(hdr); - if (ptr && *ptr) { - stats->dwRtoAlgorithm = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwRtoMin = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwRtoMax = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwMaxConn = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwActiveOpens = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwPassiveOpens = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwAttemptFails = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwEstabResets = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwCurrEstab = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwInSegs = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwOutSegs = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwRetransSegs = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwInErrs = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwOutRsts = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (!AllocateAndGetTcpTableFromStack( &tcp_table, FALSE, GetProcessHeap(), 0 )) + if(sysctl(mib, MIB_LEN, &tcp_stat, &needed, NULL, 0) != -1) { - stats->dwNumConns = tcp_table->dwNumEntries; - HeapFree( GetProcessHeap(), 0, tcp_table ); + stats->dwRtoAlgorithm = MIB_TCP_RTO_VANJ; + stats->dwRtoMin = TCPTV_MIN; + stats->dwRtoMax = TCPTV_REXMTMAX; + stats->dwMaxConn = -1; + stats->dwActiveOpens = tcp_stat.tcps_connattempt; + stats->dwPassiveOpens = tcp_stat.tcps_accepts; + stats->dwAttemptFails = tcp_stat.tcps_conndrops; + stats->dwEstabResets = tcp_stat.tcps_drops; + stats->dwCurrEstab = 0; + stats->dwInSegs = tcp_stat.tcps_rcvtotal; + stats->dwOutSegs = tcp_stat.tcps_sndtotal - tcp_stat.tcps_sndrexmitpack; + stats->dwRetransSegs = tcp_stat.tcps_sndrexmitpack; + stats->dwInErrs = tcp_stat.tcps_rcvbadsum + tcp_stat.tcps_rcvbadoff + tcp_stat.tcps_rcvmemdrop + tcp_stat.tcps_rcvshort; + stats->dwOutRsts = tcp_stat.tcps_sndctrl - tcp_stat.tcps_closed; + stats->dwNumConns = tcp_stat.tcps_connects; + ret = NO_ERROR; } - } + else ERR ("failed to get tcpstat\n"); } - fclose(fp); - } - else - { - ERR ("unimplemented!\n"); - return ERROR_NOT_SUPPORTED; - } - - return NO_ERROR; +#else + FIXME( "unimplemented\n" ); #endif + return ret; }
1
0
0
0
Alexandre Julliard : iphlpapi: Simplify parsing of IP stats. Only try to open /proc on Linux.
by Alexandre Julliard
05 Mar '09
05 Mar '09
Module: wine Branch: master Commit: 988f6b50c7a0f51d620ade8f6f0070613bdad483 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=988f6b50c7a0f51d620ade8f6…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu Mar 5 14:24:08 2009 +0100 iphlpapi: Simplify parsing of IP stats. Only try to open /proc on Linux. --- dlls/iphlpapi/ipstats.c | 268 ++++++++++++++++++----------------------------- 1 files changed, 104 insertions(+), 164 deletions(-) diff --git a/dlls/iphlpapi/ipstats.c b/dlls/iphlpapi/ipstats.c index 6311641..6e210fa 100644 --- a/dlls/iphlpapi/ipstats.c +++ b/dlls/iphlpapi/ipstats.c @@ -381,176 +381,116 @@ DWORD WINAPI GetIcmpStatistics(PMIB_ICMP stats) */ DWORD WINAPI GetIpStatistics(PMIB_IPSTATS stats) { -#if defined(HAVE_SYS_SYSCTL_H) && defined(IPCTL_STATS) - int mib[] = {CTL_NET, PF_INET, IPPROTO_IP, IPCTL_STATS}; -#define MIB_LEN (sizeof(mib) / sizeof(mib[0])) - int ip_ttl, ip_forwarding; - struct ipstat ip_stat; - size_t needed; - - if (!stats) - return ERROR_INVALID_PARAMETER; - - needed = sizeof(ip_stat); - if(sysctl(mib, MIB_LEN, &ip_stat, &needed, NULL, 0) == -1) - { - ERR ("failed to get ipstat\n"); - return ERROR_NOT_SUPPORTED; - } - - needed = sizeof(ip_ttl); - if (sysctlbyname ("net.inet.ip.ttl", &ip_ttl, &needed, NULL, 0) == -1) - { - ERR ("failed to get ip Default TTL\n"); - return ERROR_NOT_SUPPORTED; - } - - needed = sizeof(ip_forwarding); - if (sysctlbyname ("net.inet.ip.forwarding", &ip_forwarding, &needed, NULL, 0) == -1) - { - ERR ("failed to get ip forwarding\n"); - return ERROR_NOT_SUPPORTED; - } - - stats->dwForwarding = ip_forwarding; - stats->dwDefaultTTL = ip_ttl; - stats->dwInDelivers = ip_stat.ips_delivered; - stats->dwInHdrErrors = ip_stat.ips_badhlen + ip_stat.ips_badsum + ip_stat.ips_tooshort + ip_stat.ips_badlen; - stats->dwInAddrErrors = ip_stat.ips_cantforward; - stats->dwInReceives = ip_stat.ips_total; - stats->dwForwDatagrams = ip_stat.ips_forward; - stats->dwInUnknownProtos = ip_stat.ips_noproto; - stats->dwInDiscards = ip_stat.ips_fragdropped; - stats->dwOutDiscards = ip_stat.ips_odropped; - stats->dwReasmOks = ip_stat.ips_reassembled; - stats->dwFragOks = ip_stat.ips_fragmented; - stats->dwFragFails = ip_stat.ips_cantfrag; - stats->dwReasmTimeout = ip_stat.ips_fragtimeout; - stats->dwOutNoRoutes = ip_stat.ips_noroute; - stats->dwOutRequests = ip_stat.ips_localout; - stats->dwReasmReqds = ip_stat.ips_fragments; - - return NO_ERROR; -#else - FILE *fp; - MIB_IPFORWARDTABLE *fwd_table; + DWORD ret = ERROR_NOT_SUPPORTED; + MIB_IPFORWARDTABLE *fwd_table; - if (!stats) - return ERROR_INVALID_PARAMETER; + if (!stats) return ERROR_INVALID_PARAMETER; + memset( stats, 0, sizeof(*stats) ); - memset(stats, 0, sizeof(MIB_IPSTATS)); - stats->dwNumIf = stats->dwNumAddr = getNumInterfaces(); - if (!AllocateAndGetIpForwardTableFromStack( &fwd_table, FALSE, GetProcessHeap(), 0 )) - { - stats->dwNumRoutes = fwd_table->dwNumEntries; - HeapFree( GetProcessHeap(), 0, fwd_table ); - } + stats->dwNumIf = stats->dwNumAddr = getNumInterfaces(); + if (!AllocateAndGetIpForwardTableFromStack( &fwd_table, FALSE, GetProcessHeap(), 0 )) + { + stats->dwNumRoutes = fwd_table->dwNumEntries; + HeapFree( GetProcessHeap(), 0, fwd_table ); + } - /* get most of these stats from /proc/net/snmp, no error if can't */ - fp = fopen("/proc/net/snmp", "r"); - if (fp) { - static const char hdr[] = "Ip:"; - char buf[512] = { 0 }, *ptr; +#ifdef __linux__ + { + FILE *fp; - do { - ptr = fgets(buf, sizeof(buf), fp); - } while (ptr && strncasecmp(buf, hdr, sizeof(hdr) - 1)); - if (ptr) { - /* last line was a header, get another */ - ptr = fgets(buf, sizeof(buf), fp); - if (ptr && strncasecmp(buf, hdr, sizeof(hdr) - 1) == 0) { - char *endPtr; + if ((fp = fopen("/proc/net/snmp", "r"))) + { + static const char hdr[] = "Ip:"; + char buf[512], *ptr; - ptr += sizeof(hdr); - if (ptr && *ptr) { - stats->dwForwarding = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwDefaultTTL = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwInReceives = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwInHdrErrors = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwInAddrErrors = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwForwDatagrams = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwInUnknownProtos = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwInDiscards = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwInDelivers = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwOutRequests = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwOutDiscards = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwOutNoRoutes = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwReasmTimeout = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwReasmReqds = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwReasmOks = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - stats->dwReasmFails = strtoul(ptr, &endPtr, 10); - ptr = endPtr; + while ((ptr = fgets(buf, sizeof(buf), fp))) + { + if (strncasecmp(buf, hdr, sizeof(hdr) - 1)) continue; + /* last line was a header, get another */ + if (!(ptr = fgets(buf, sizeof(buf), fp))) break; + if (!strncasecmp(buf, hdr, sizeof(hdr) - 1)) + { + ptr += sizeof(hdr); + sscanf( ptr, "%u %u %u %u %u %u %u %u %u %u %u %u %u %u %u %u %u %u %u", + &stats->dwForwarding, + &stats->dwDefaultTTL, + &stats->dwInReceives, + &stats->dwInHdrErrors, + &stats->dwInAddrErrors, + &stats->dwForwDatagrams, + &stats->dwInUnknownProtos, + &stats->dwInDiscards, + &stats->dwInDelivers, + &stats->dwOutRequests, + &stats->dwOutDiscards, + &stats->dwOutNoRoutes, + &stats->dwReasmTimeout, + &stats->dwReasmReqds, + &stats->dwReasmOks, + &stats->dwReasmFails, + &stats->dwFragOks, + &stats->dwFragFails, + &stats->dwFragCreates ); + /* hmm, no routingDiscards */ + break; + } + } + fclose(fp); + ret = NO_ERROR; } - if (ptr && *ptr) { - stats->dwFragOks = strtoul(ptr, &endPtr, 10); - ptr = endPtr; + } +#elif defined(HAVE_SYS_SYSCTL_H) && defined(IPCTL_STATS) + { + int mib[] = {CTL_NET, PF_INET, IPPROTO_IP, IPCTL_STATS}; +#define MIB_LEN (sizeof(mib) / sizeof(mib[0])) + int ip_ttl, ip_forwarding; + struct ipstat ip_stat; + size_t needed; + + needed = sizeof(ip_stat); + if(sysctl(mib, MIB_LEN, &ip_stat, &needed, NULL, 0) == -1) + { + ERR ("failed to get ipstat\n"); + return ERROR_NOT_SUPPORTED; } - if (ptr && *ptr) { - stats->dwFragFails = strtoul(ptr, &endPtr, 10); - ptr = endPtr; + + needed = sizeof(ip_ttl); + if (sysctlbyname ("net.inet.ip.ttl", &ip_ttl, &needed, NULL, 0) == -1) + { + ERR ("failed to get ip Default TTL\n"); + return ERROR_NOT_SUPPORTED; } - if (ptr && *ptr) { - stats->dwFragCreates = strtoul(ptr, &endPtr, 10); - ptr = endPtr; + + needed = sizeof(ip_forwarding); + if (sysctlbyname ("net.inet.ip.forwarding", &ip_forwarding, &needed, NULL, 0) == -1) + { + ERR ("failed to get ip forwarding\n"); + return ERROR_NOT_SUPPORTED; } - /* hmm, no routingDiscards */ - } - } - fclose(fp); - } - else - { - ERR ("unimplemented!\n"); - return ERROR_NOT_SUPPORTED; - } - return NO_ERROR; + stats->dwForwarding = ip_forwarding; + stats->dwDefaultTTL = ip_ttl; + stats->dwInDelivers = ip_stat.ips_delivered; + stats->dwInHdrErrors = ip_stat.ips_badhlen + ip_stat.ips_badsum + ip_stat.ips_tooshort + ip_stat.ips_badlen; + stats->dwInAddrErrors = ip_stat.ips_cantforward; + stats->dwInReceives = ip_stat.ips_total; + stats->dwForwDatagrams = ip_stat.ips_forward; + stats->dwInUnknownProtos = ip_stat.ips_noproto; + stats->dwInDiscards = ip_stat.ips_fragdropped; + stats->dwOutDiscards = ip_stat.ips_odropped; + stats->dwReasmOks = ip_stat.ips_reassembled; + stats->dwFragOks = ip_stat.ips_fragmented; + stats->dwFragFails = ip_stat.ips_cantfrag; + stats->dwReasmTimeout = ip_stat.ips_fragtimeout; + stats->dwOutNoRoutes = ip_stat.ips_noroute; + stats->dwOutRequests = ip_stat.ips_localout; + stats->dwReasmReqds = ip_stat.ips_fragments; + ret = NO_ERROR; + } +#else + FIXME( "unimplemented\n" ); #endif + return ret; }
1
0
0
0
Alexandre Julliard : iphlpapi: Simplify parsing of interface data. Only try to open /proc on Linux.
by Alexandre Julliard
05 Mar '09
05 Mar '09
Module: wine Branch: master Commit: ea73002863c3f42f8f9a9cc25985371908bd4794 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=ea73002863c3f42f8f9a9cc25…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu Mar 5 14:23:52 2009 +0100 iphlpapi: Simplify parsing of interface data. Only try to open /proc on Linux. --- dlls/iphlpapi/ipstats.c | 203 ++++++++++++++++++----------------------------- 1 files changed, 79 insertions(+), 124 deletions(-) diff --git a/dlls/iphlpapi/ipstats.c b/dlls/iphlpapi/ipstats.c index c9016fc..6311641 100644 --- a/dlls/iphlpapi/ipstats.c +++ b/dlls/iphlpapi/ipstats.c @@ -150,138 +150,93 @@ WINE_DEFAULT_DEBUG_CHANNEL(iphlpapi); DWORD getInterfaceStatsByName(const char *name, PMIB_IFROW entry) { -#if defined(HAVE_SYS_SYSCTL_H) && defined(NET_RT_IFLIST) - int mib[] = {CTL_NET, PF_ROUTE, 0, AF_INET, NET_RT_IFLIST, if_nametoindex(name)}; -#define MIB_LEN (sizeof(mib) / sizeof(mib[0])) - - size_t needed; - char *buf, *end; - struct if_msghdr *ifm; - struct if_data ifdata; - if (!name || !entry) - return ERROR_INVALID_PARAMETER; + DWORD ret = ERROR_NOT_SUPPORTED; - if(sysctl(mib, MIB_LEN, NULL, &needed, NULL, 0) == -1) - { - ERR ("failed to get size of iflist\n"); - return ERROR_NOT_SUPPORTED; - } - buf = HeapAlloc (GetProcessHeap (), 0, needed); - if (!buf) return ERROR_NOT_SUPPORTED; - if(sysctl(mib, MIB_LEN, buf, &needed, NULL, 0) == -1) - { - ERR ("failed to get iflist\n"); - HeapFree (GetProcessHeap (), 0, buf); - return ERROR_NOT_SUPPORTED; - } - else - for ( end = buf + needed; buf < end; buf += ifm->ifm_msglen) - { - ifm = (struct if_msghdr *) buf; - if(ifm->ifm_type == RTM_IFINFO && ifm->ifm_data.ifi_type == IFT_ETHER) - { - ifdata = ifm->ifm_data; - entry->dwMtu = ifdata.ifi_mtu; - entry->dwSpeed = ifdata.ifi_baudrate; - entry->dwInOctets = ifdata.ifi_ibytes; - entry->dwInErrors = ifdata.ifi_ierrors; - entry->dwInDiscards = ifdata.ifi_iqdrops; - entry->dwInUcastPkts = ifdata.ifi_ipackets; - entry->dwInNUcastPkts = ifdata.ifi_imcasts; - entry->dwOutOctets = ifdata.ifi_obytes; - entry->dwOutUcastPkts = ifdata.ifi_opackets; - entry->dwOutErrors = ifdata.ifi_oerrors; - HeapFree (GetProcessHeap (), 0, buf); - return NO_ERROR; - } - } - HeapFree (GetProcessHeap (), 0, buf); - return ERROR_NOT_SUPPORTED; -#else - /* get interface stats from /proc/net/dev, no error if can't - no inUnknownProtos, outNUcastPkts, outQLen */ - FILE *fp; + if (!name || !entry) return ERROR_INVALID_PARAMETER; - if (!name || !entry) - return ERROR_INVALID_PARAMETER; - fp = fopen("/proc/net/dev", "r"); - if (fp) { - char buf[512] = { 0 }, *ptr; - int nameLen = strlen(name), nameFound = 0; +#ifdef __linux__ + { + FILE *fp; + if ((fp = fopen("/proc/net/dev", "r"))) + { + DWORD skip; + char buf[512], *ptr; + int nameLen = strlen(name); - ptr = fgets(buf, sizeof(buf), fp); - while (ptr && !nameFound) { - while (*ptr && isspace(*ptr)) - ptr++; - if (strncasecmp(ptr, name, nameLen) == 0 && *(ptr + nameLen) == ':') - nameFound = 1; - else - ptr = fgets(buf, sizeof(buf), fp); + while ((ptr = fgets(buf, sizeof(buf), fp))) + { + while (*ptr && isspace(*ptr)) ptr++; + if (strncasecmp(ptr, name, nameLen) == 0 && *(ptr + nameLen) == ':') + { + ptr += nameLen + 1; + sscanf( ptr, "%u %u %u %u %u %u %u %u %u %u %u %u", + &entry->dwInOctets, &entry->dwInUcastPkts, + &entry->dwInErrors, &entry->dwInDiscards, + &skip, &skip, &skip, + &entry->dwInNUcastPkts, &entry->dwOutOctets, + &entry->dwOutUcastPkts, &entry->dwOutErrors, + &entry->dwOutDiscards ); + break; + } + } + fclose(fp); + ret = NO_ERROR; + } } - if (nameFound) { - char *endPtr; +#elif defined(HAVE_SYS_SYSCTL_H) && defined(NET_RT_IFLIST) + { + int mib[] = {CTL_NET, PF_ROUTE, 0, AF_INET, NET_RT_IFLIST, if_nametoindex(name)}; +#define MIB_LEN (sizeof(mib) / sizeof(mib[0])) - ptr += nameLen + 1; - if (ptr && *ptr) { - entry->dwInOctets = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - entry->dwInUcastPkts = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - entry->dwInErrors = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - entry->dwInDiscards = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - strtoul(ptr, &endPtr, 10); /* skip */ - ptr = endPtr; - } - if (ptr && *ptr) { - strtoul(ptr, &endPtr, 10); /* skip */ - ptr = endPtr; - } - if (ptr && *ptr) { - strtoul(ptr, &endPtr, 10); /* skip */ - ptr = endPtr; - } - if (ptr && *ptr) { - entry->dwInNUcastPkts = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - entry->dwOutOctets = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - entry->dwOutUcastPkts = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - entry->dwOutErrors = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - if (ptr && *ptr) { - entry->dwOutDiscards = strtoul(ptr, &endPtr, 10); - ptr = endPtr; - } - } - fclose(fp); - } - else - { - ERR ("unimplemented!\n"); - return ERROR_NOT_SUPPORTED; - } + size_t needed; + char *buf = NULL, *end; + struct if_msghdr *ifm; + struct if_data ifdata; - return NO_ERROR; + if(sysctl(mib, MIB_LEN, NULL, &needed, NULL, 0) == -1) + { + ERR ("failed to get size of iflist\n"); + goto done; + } + buf = HeapAlloc (GetProcessHeap (), 0, needed); + if (!buf) + { + ret = ERROR_OUTOFMEMORY; + goto done; + } + if(sysctl(mib, MIB_LEN, buf, &needed, NULL, 0) == -1) + { + ERR ("failed to get iflist\n"); + goto done; + } + for ( end = buf + needed; buf < end; buf += ifm->ifm_msglen) + { + ifm = (struct if_msghdr *) buf; + if(ifm->ifm_type == RTM_IFINFO && ifm->ifm_data.ifi_type == IFT_ETHER) + { + ifdata = ifm->ifm_data; + entry->dwMtu = ifdata.ifi_mtu; + entry->dwSpeed = ifdata.ifi_baudrate; + entry->dwInOctets = ifdata.ifi_ibytes; + entry->dwInErrors = ifdata.ifi_ierrors; + entry->dwInDiscards = ifdata.ifi_iqdrops; + entry->dwInUcastPkts = ifdata.ifi_ipackets; + entry->dwInNUcastPkts = ifdata.ifi_imcasts; + entry->dwOutOctets = ifdata.ifi_obytes; + entry->dwOutUcastPkts = ifdata.ifi_opackets; + entry->dwOutErrors = ifdata.ifi_oerrors; + ret = NO_ERROR; + break; + } + } + done: + HeapFree (GetProcessHeap (), 0, buf); + } +#else + FIXME( "unimplemented\n" ); #endif + return ret; }
1
0
0
0
Alexandre Julliard : iphlpapi: Simplify parsing of ICMP stats. Only try to open /proc on Linux.
by Alexandre Julliard
05 Mar '09
05 Mar '09
Module: wine Branch: master Commit: fc5ac51654718a0a393519955d1c6ea08078e6c9 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=fc5ac51654718a0a393519955…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu Mar 5 14:23:21 2009 +0100 iphlpapi: Simplify parsing of ICMP stats. Only try to open /proc on Linux. --- dlls/iphlpapi/ipstats.c | 289 +++++++++++++++++------------------------------ 1 files changed, 103 insertions(+), 186 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=fc5ac51654718a0a39351…
1
0
0
0
Hans Leidekker : mscms: Handle errors from lcms more gracefully.
by Alexandre Julliard
05 Mar '09
05 Mar '09
Module: wine Branch: master Commit: 12dac70a32b49fa4fda574bb7908c15710aa734d URL:
http://source.winehq.org/git/wine.git/?a=commit;h=12dac70a32b49fa4fda574bb7…
Author: Hans Leidekker <hans(a)codeweavers.com> Date: Thu Mar 5 12:11:30 2009 +0100 mscms: Handle errors from lcms more gracefully. Default behavior of lcms is to abort the process when it encounters an error it considers fatal, such as a corrupt color profile. --- dlls/mscms/mscms_main.c | 20 ++++++++++++++++++++ 1 files changed, 20 insertions(+), 0 deletions(-) diff --git a/dlls/mscms/mscms_main.c b/dlls/mscms/mscms_main.c index 00e2a75..3199c0b 100644 --- a/dlls/mscms/mscms_main.c +++ b/dlls/mscms/mscms_main.c @@ -36,6 +36,23 @@ WINE_DEFAULT_DEBUG_CHANNEL(mscms); +#ifdef HAVE_LCMS +static int lcms_error_handler( int error, const char *text ) +{ + switch (error) + { + case LCMS_ERRC_WARNING: + case LCMS_ERRC_RECOVERABLE: + case LCMS_ERRC_ABORTED: + WARN("%d %s\n", error, debugstr_a(text)); + return 1; + default: + ERR("unknown error %d %s\n", error, debugstr_a(text)); + return 0; + } +} +#endif + BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved ) { TRACE( "(%p, %d, %p)\n", hinst, reason, reserved ); @@ -44,6 +61,9 @@ BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved ) { case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls( hinst ); +#ifdef HAVE_LCMS + cmsSetErrorHandler( lcms_error_handler ); +#endif break; case DLL_PROCESS_DETACH: #ifdef HAVE_LCMS
1
0
0
0
← Newer
1
...
63
64
65
66
67
68
69
...
84
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
Results per page:
10
25
50
100
200