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
January 2013
----- 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
736 discussions
Start a n
N
ew thread
Andrew Talbot : d3dx9_36: Avoid signed-unsigned integer comparisons.
by Alexandre Julliard
03 Jan '13
03 Jan '13
Module: wine Branch: master Commit: 2cf00836ef4232934f159e49acde4ee17c636472 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=2cf00836ef4232934f159e49a…
Author: Andrew Talbot <andrew.talbot(a)talbotville.com> Date: Wed Jan 2 21:49:19 2013 +0000 d3dx9_36: Avoid signed-unsigned integer comparisons. --- dlls/d3dx9_36/mesh.c | 55 +++++++++++++++++++++++++------------------------ 1 files changed, 28 insertions(+), 27 deletions(-) diff --git a/dlls/d3dx9_36/mesh.c b/dlls/d3dx9_36/mesh.c index 986cbd4..8a3d49a 100644 --- a/dlls/d3dx9_36/mesh.c +++ b/dlls/d3dx9_36/mesh.c @@ -686,7 +686,6 @@ static HRESULT WINAPI ID3DXMeshImpl_CloneMesh(struct ID3DXMesh *iface, DWORD opt void *data_in, *data_out; DWORD vertex_size; HRESULT hr; - int i; BOOL same_declaration; TRACE("(%p)->(%x,%p,%p,%p)\n", This, options, declaration, device, clone_mesh_out); @@ -738,6 +737,7 @@ static HRESULT WINAPI ID3DXMeshImpl_CloneMesh(struct ID3DXMesh *iface, DWORD opt goto error; } if ((options ^ This->options) & D3DXMESH_32BIT) { + DWORD i; if (options & D3DXMESH_32BIT) { for (i = 0; i < This->numfaces * 3; i++) ((DWORD*)data_out)[i] = ((WORD*)data_in)[i]; @@ -1230,7 +1230,7 @@ static HRESULT WINAPI ID3DXMeshImpl_GenerateAdjacency(ID3DXMesh *iface, FLOAT ep * that adjacency checks can be limited to faces sharing a vertex */ DWORD *shared_indices = NULL; const FLOAT epsilon_sq = epsilon * epsilon; - int i; + DWORD i; TRACE("(%p)->(%f,%p)\n", This, epsilon, adjacency); @@ -1279,7 +1279,7 @@ static HRESULT WINAPI ID3DXMeshImpl_GenerateAdjacency(ID3DXMesh *iface, FLOAT ep DWORD shared_index_a = sorted_vertex_a->first_shared_index; while (shared_index_a != -1) { - int j = i; + DWORD j = i; DWORD shared_index_b = shared_indices[shared_index_a]; struct vertex_metadata *sorted_vertex_b = sorted_vertex_a; @@ -2763,7 +2763,7 @@ static HRESULT parse_material(IDirectXFileData *filedata, D3DXMATERIAL *material static void destroy_materials(struct mesh_data *mesh) { - int i; + DWORD i; for (i = 0; i < mesh->num_materials; i++) HeapFree(GetProcessHeap(), 0, mesh->materials[i].pTextureFilename); HeapFree(GetProcessHeap(), 0, mesh->materials); @@ -2781,7 +2781,7 @@ static HRESULT parse_material_list(IDirectXFileData *filedata, struct mesh_data const GUID *type; IDirectXFileData *child; DWORD num_materials; - int i; + DWORD i; destroy_materials(mesh); @@ -2902,7 +2902,7 @@ static HRESULT parse_vertex_colors(IDirectXFileData *filedata, struct mesh_data DWORD data_size; BYTE *data; DWORD num_colors; - int i; + DWORD i; HeapFree(GetProcessHeap(), 0, mesh->vertex_colors); mesh->vertex_colors = NULL; @@ -2969,7 +2969,7 @@ static HRESULT parse_normals(IDirectXFileData *filedata, struct mesh_data *mesh) DWORD data_size; BYTE *data; DWORD *index_out_ptr; - int i; + DWORD i; DWORD num_face_indices = mesh->num_poly_faces * 2 + mesh->num_tri_faces; HeapFree(GetProcessHeap(), 0, mesh->normals); @@ -3065,7 +3065,7 @@ static HRESULT parse_mesh(IDirectXFileData *filedata, struct mesh_data *mesh_dat DWORD *index_out_ptr; const GUID *type; IDirectXFileData *child; - int i; + DWORD i; /* * template Mesh { @@ -3201,7 +3201,7 @@ static HRESULT generate_effects(ID3DXBuffer *materials, DWORD num_materials, }; static const char texture_paramname[] = "Texture0@Name"; DWORD buffer_size; - int i; + DWORD i; /* effects buffer layout: * @@ -3238,7 +3238,7 @@ static HRESULT generate_effects(ID3DXBuffer *materials, DWORD num_materials, for (i = 0; i < num_materials; i++) { - int j; + DWORD j; D3DXEFFECTDEFAULT *defaults = (D3DXEFFECTDEFAULT*)out_ptr; effect_ptr->pDefaults = defaults; @@ -3292,7 +3292,7 @@ static HRESULT load_skin_mesh_from_xof(struct IDirectXFileData *filedata, DWORD DWORD normal_index; struct list entry; } *duplications = NULL; - int i; + DWORD i; void *vertices = NULL; void *indices = NULL; BYTE *out_ptr; @@ -3983,7 +3983,6 @@ HRESULT WINAPI D3DXLoadMeshFromXInMemory(const void *memory, DWORD memory_size, DWORD num_materials; DWORD num_faces, num_vertices; D3DXMATRIX identity; - int i; DWORD provide_flags = 0; DWORD fvf; ID3DXMesh *concat_mesh = NULL; @@ -4087,6 +4086,7 @@ HRESULT WINAPI D3DXLoadMeshFromXInMemory(const void *memory, DWORD memory_size, DWORD num_mesh_vertices = mesh->lpVtbl->GetNumVertices(mesh); DWORD mesh_vertex_size; const BYTE *mesh_vertices; + DWORD i; hr = mesh->lpVtbl->GetDeclaration(mesh, mesh_decl); if (FAILED(hr)) goto cleanup; @@ -4139,7 +4139,7 @@ HRESULT WINAPI D3DXLoadMeshFromXInMemory(const void *memory, DWORD memory_size, ID3DXMesh *mesh = container_ptr->mesh; const void *mesh_indices; DWORD num_mesh_faces = mesh->lpVtbl->GetNumFaces(mesh); - int i; + DWORD i; hr = mesh->lpVtbl->LockIndexBuffer(mesh, D3DLOCK_READONLY, (void**)&mesh_indices); if (FAILED(hr)) goto cleanup; @@ -4215,6 +4215,7 @@ HRESULT WINAPI D3DXLoadMeshFromXInMemory(const void *memory, DWORD memory_size, LIST_FOR_EACH_ENTRY(container_ptr, &container_list, struct mesh_container, entry) { if (container_ptr->materials) { + DWORD i; const D3DXMATERIAL *in_ptr = ID3DXBuffer_GetBufferPointer(container_ptr->materials); for (i = 0; i < container_ptr->num_materials; i++) { @@ -4233,6 +4234,7 @@ HRESULT WINAPI D3DXLoadMeshFromXInMemory(const void *memory, DWORD memory_size, LIST_FOR_EACH_ENTRY(container_ptr, &container_list, struct mesh_container, entry) { if (container_ptr->materials) { + DWORD i; const D3DXMATERIAL *in_ptr = ID3DXBuffer_GetBufferPointer(container_ptr->materials); for (i = 0; i < container_ptr->num_materials; i++) { @@ -4275,8 +4277,9 @@ HRESULT WINAPI D3DXLoadMeshFromXInMemory(const void *memory, DWORD memory_size, out_ptr = ID3DXBuffer_GetBufferPointer(adjacency); LIST_FOR_EACH_ENTRY(container_ptr, &container_list, struct mesh_container, entry) { + DWORD i; + DWORD count = 3 * container_ptr->mesh->lpVtbl->GetNumFaces(container_ptr->mesh); DWORD *in_ptr = ID3DXBuffer_GetBufferPointer(container_ptr->adjacency); - int count = 3 * container_ptr->mesh->lpVtbl->GetNumFaces(container_ptr->mesh); for (i = 0; i < count; i++) *out_ptr++ = offset + *in_ptr++; @@ -4389,8 +4392,7 @@ HRESULT WINAPI D3DXCreateSphere(struct IDirect3DDevice9 *device, float radius, U float phi_step, phi_start; struct sincos_table phi; float theta_step, theta, sin_theta, cos_theta; - DWORD vertex, face; - int slice, stack; + DWORD vertex, face, stack, slice; TRACE("(%p, %f, %u, %u, %p, %p)\n", device, radius, slices, stacks, mesh, adjacency); @@ -4561,8 +4563,7 @@ HRESULT WINAPI D3DXCreateCylinder(struct IDirect3DDevice9 *device, float radius1 struct sincos_table theta; float delta_radius, radius, radius_step; float z, z_step, z_normal; - DWORD vertex, face; - int slice, stack; + DWORD vertex, face, slice, stack; TRACE("(%p, %f, %f, %f, %u, %u, %p, %p)\n", device, radius1, radius2, length, slices, stacks, mesh, adjacency); @@ -5060,6 +5061,7 @@ static HRESULT create_outline(struct glyphinfo *glyph, void *raw_outline, int da { D3DXVECTOR2 bezier_start = outline->items[outline->count - 1].pos; BOOL to_curve = curve->wType != TT_PRIM_LINE && curve->cpfx > 1; + unsigned int j2 = 0; if (!curve->cpfx) { curve = (TTPOLYCURVE *)&curve->apfx[curve->cpfx]; @@ -5074,37 +5076,36 @@ static HRESULT create_outline(struct glyphinfo *glyph, void *raw_outline, int da { HRESULT hr; int count = curve->cpfx; - j = 0; while (count > 2) { D3DXVECTOR2 bezier_end; - D3DXVec2Scale(&bezier_end, D3DXVec2Add(&bezier_end, &pt_flt[j], &pt_flt[j+1]), 0.5f); - hr = add_bezier_points(outline, &bezier_start, &pt_flt[j], &bezier_end, max_deviation_sq); + D3DXVec2Scale(&bezier_end, D3DXVec2Add(&bezier_end, &pt_flt[j2], &pt_flt[j2+1]), 0.5f); + hr = add_bezier_points(outline, &bezier_start, &pt_flt[j2], &bezier_end, max_deviation_sq); if (hr != S_OK) return hr; bezier_start = bezier_end; count--; - j++; + j2++; } - hr = add_bezier_points(outline, &bezier_start, &pt_flt[j], &pt_flt[j+1], max_deviation_sq); + hr = add_bezier_points(outline, &bezier_start, &pt_flt[j2], &pt_flt[j2+1], max_deviation_sq); if (hr != S_OK) return hr; pt = add_points(outline, 1); if (!pt) return E_OUTOFMEMORY; - j++; - pt->pos = pt_flt[j]; + j2++; + pt->pos = pt_flt[j2]; pt->corner = POINTTYPE_CURVE_END; } else { pt = add_points(outline, curve->cpfx); if (!pt) return E_OUTOFMEMORY; - for (j = 0; j < curve->cpfx; j++) + for (j2 = 0; j2 < curve->cpfx; j2++) { - pt->pos = pt_flt[j]; + pt->pos = pt_flt[j2]; pt->corner = POINTTYPE_CORNER; pt++; }
1
0
0
0
André Hentschel : netstat: Implement the UDP table output.
by Alexandre Julliard
03 Jan '13
03 Jan '13
Module: wine Branch: master Commit: fc5a2aa05c70ac5d9befb5f15aa8042017962a88 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=fc5a2aa05c70ac5d9befb5f15…
Author: André Hentschel <nerv(a)dawncrow.de> Date: Wed Jan 2 21:38:00 2013 +0100 netstat: Implement the UDP table output. --- programs/netstat/netstat.c | 55 +++++++++++++++++++++++++++++++++++++------ 1 files changed, 47 insertions(+), 8 deletions(-) diff --git a/programs/netstat/netstat.c b/programs/netstat/netstat.c index dede96d..a3f584c 100644 --- a/programs/netstat/netstat.c +++ b/programs/netstat/netstat.c @@ -1,5 +1,5 @@ /* - * Copyright 2011-2012 André Hentschel + * Copyright 2011-2013 André Hentschel * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -39,6 +39,7 @@ static const WCHAR fmtn[] = {'\n', 0}; static const WCHAR fmtnn[] = {'\n', '%', 's', '\n', 0}; static const WCHAR fmtcolon[] = {'%', 's', ':', '%', 's', 0}; static const WCHAR fmttcpout[] = {' ', ' ', '%', '-', '6', 's', ' ', '%', '-', '2', '2', 's', ' ', '%', '-', '2', '2', 's', ' ', '%', 's', '\n', 0}; +static const WCHAR fmtudpout[] = {' ', ' ', '%', '-', '6', 's', ' ', '%', '-', '2', '2', 's', ' ', '*', ':', '*', '\n', 0}; /* ========================================================================= * Output a unicode string. Ideally this will go to the console @@ -143,11 +144,21 @@ static WCHAR *NETSTAT_host_name(UINT ip, WCHAR name[]) return name; } +static void NETSTAT_tcp_header(void) +{ + WCHAR local[22], remote[22], state[22]; + NETSTAT_wprintf(fmtnn, NETSTAT_load_message(IDS_TCP_ACTIVE_CONN)); + NETSTAT_wprintf(fmtn); + strcpyW(local, NETSTAT_load_message(IDS_TCP_LOCAL_ADDR)); + strcpyW(remote, NETSTAT_load_message(IDS_TCP_REMOTE_ADDR)); + strcpyW(state, NETSTAT_load_message(IDS_TCP_STATE)); + NETSTAT_wprintf(fmttcpout, NETSTAT_load_message(IDS_TCP_PROTO), local, remote, state); +} + static void NETSTAT_tcp_table(void) { PMIB_TCPTABLE table; DWORD err, size, i; - WCHAR local[22], remote[22], state[22]; WCHAR HostIp[MAX_HOSTNAME_LEN], HostPort[32]; WCHAR RemoteIp[MAX_HOSTNAME_LEN], RemotePort[32]; WCHAR Host[MAX_HOSTNAME_LEN + 32]; @@ -163,12 +174,7 @@ static void NETSTAT_tcp_table(void) if (err) return; - NETSTAT_wprintf(fmtnn, NETSTAT_load_message(IDS_TCP_ACTIVE_CONN)); - NETSTAT_wprintf(fmtn); - strcpyW(local, NETSTAT_load_message(IDS_TCP_LOCAL_ADDR)); - strcpyW(remote, NETSTAT_load_message(IDS_TCP_REMOTE_ADDR)); - strcpyW(state, NETSTAT_load_message(IDS_TCP_STATE)); - NETSTAT_wprintf(fmttcpout, NETSTAT_load_message(IDS_TCP_PROTO), local, remote, state); + NETSTAT_tcp_header(); for (i = 0; i < table->dwNumEntries; i++) { @@ -189,6 +195,36 @@ static void NETSTAT_tcp_table(void) HeapFree(GetProcessHeap(), 0, table); } +static void NETSTAT_udp_table(void) +{ + PMIB_UDPTABLE table; + DWORD err, size, i; + WCHAR HostIp[MAX_HOSTNAME_LEN], HostPort[32]; + WCHAR Host[MAX_HOSTNAME_LEN + 32]; + + size = sizeof(MIB_UDPTABLE); + do + { + table = (PMIB_UDPTABLE)HeapAlloc(GetProcessHeap(), 0, size); + err = GetUdpTable(table, &size, TRUE); + if (err != NO_ERROR) HeapFree(GetProcessHeap(), 0, table); + } while (err == ERROR_INSUFFICIENT_BUFFER); + + if (err) return; + + NETSTAT_tcp_header(); + + for (i = 0; i < table->dwNumEntries; i++) + { + NETSTAT_host_name(table->table[i].dwLocalAddr, HostIp); + NETSTAT_port_name(table->table[i].dwLocalPort, HostPort); + + sprintfW(Host, fmtcolon, HostIp, HostPort); + NETSTAT_wprintf(fmtudpout, udpW, Host); + } + HeapFree(GetProcessHeap(), 0, table); +} + static NETSTATPROTOCOLS NETSTAT_get_protocol(WCHAR name[]) { if (!strcmpiW(name, ipW)) return PROT_IP; @@ -231,6 +267,9 @@ int wmain(int argc, WCHAR *argv[]) case PROT_TCP: NETSTAT_tcp_table(); break; + case PROT_UDP: + NETSTAT_udp_table(); + break; default: WINE_FIXME("Protocol not yet implemented: %s\n", debugstr_w(argv[1])); }
1
0
0
0
André Hentschel : netstat: Parse command line arguments.
by Alexandre Julliard
03 Jan '13
03 Jan '13
Module: wine Branch: master Commit: c25c7f804988a782b2eb7f515f322b51b5557f67 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=c25c7f804988a782b2eb7f515…
Author: André Hentschel <nerv(a)dawncrow.de> Date: Wed Jan 2 21:37:45 2013 +0100 netstat: Parse command line arguments. --- programs/netstat/netstat.c | 60 ++++++++++++++++++++++++++++++++++++------- programs/netstat/netstat.h | 12 +++++++++ 2 files changed, 62 insertions(+), 10 deletions(-) diff --git a/programs/netstat/netstat.c b/programs/netstat/netstat.c index 999e409..dede96d 100644 --- a/programs/netstat/netstat.c +++ b/programs/netstat/netstat.c @@ -24,7 +24,15 @@ WINE_DEFAULT_DEBUG_CHANNEL(netstat); +static const WCHAR ipW[] = {'I', 'P', 0}; +static const WCHAR ipv6W[] = {'I', 'P', 'v', '6', 0}; +static const WCHAR icmpW[] = {'I', 'C', 'M', 'P', 0}; +static const WCHAR icmpv6W[] = {'I', 'C', 'M', 'P', 'v', '6', 0}; static const WCHAR tcpW[] = {'T', 'C', 'P', 0}; +static const WCHAR tcpv6W[] = {'T', 'C', 'P', 'v', '6', 0}; +static const WCHAR udpW[] = {'U', 'D', 'P', 0}; +static const WCHAR udpv6W[] = {'U', 'D', 'P', 'v', '6', 0}; + static const WCHAR fmtport[] = {'%', 'd', 0}; static const WCHAR fmtip[] = {'%', 'd', '.', '%', 'd', '.', '%', 'd', '.', '%', 'd', 0}; static const WCHAR fmtn[] = {'\n', 0}; @@ -181,26 +189,58 @@ static void NETSTAT_tcp_table(void) HeapFree(GetProcessHeap(), 0, table); } +static NETSTATPROTOCOLS NETSTAT_get_protocol(WCHAR name[]) +{ + if (!strcmpiW(name, ipW)) return PROT_IP; + if (!strcmpiW(name, ipv6W)) return PROT_IPV6; + if (!strcmpiW(name, icmpW)) return PROT_ICMP; + if (!strcmpiW(name, icmpv6W)) return PROT_ICMPV6; + if (!strcmpiW(name, tcpW)) return PROT_TCP; + if (!strcmpiW(name, tcpv6W)) return PROT_TCPV6; + if (!strcmpiW(name, udpW)) return PROT_UDP; + if (!strcmpiW(name, udpv6W)) return PROT_UDPV6; + return PROT_UNKNOWN; +} + int wmain(int argc, WCHAR *argv[]) { WSADATA wsa_data; - if (argc > 1) - { - int i; - WINE_FIXME("stub:"); - for (i = 0; i < argc; i++) - WINE_FIXME(" %s", wine_dbgstr_w(argv[i])); - WINE_FIXME("\n"); - } - if (WSAStartup(MAKEWORD(2, 2), &wsa_data)) { WINE_ERR("WSAStartup failed: %d\n", WSAGetLastError()); return 1; } - NETSTAT_tcp_table(); + if (argc == 1) + { + /* No options */ + NETSTAT_tcp_table(); + return 0; + } + + while (argv[1] && argv[1][0] == '-') + { + switch (argv[1][1]) + { + case 'p': + argv++; argc--; + if (argc == 1) return 1; + switch (NETSTAT_get_protocol(argv[1])) + { + case PROT_TCP: + NETSTAT_tcp_table(); + break; + default: + WINE_FIXME("Protocol not yet implemented: %s\n", debugstr_w(argv[1])); + } + break; + default: + WINE_FIXME("Unknown option: %s\n", debugstr_w(argv[1])); + return 1; + } + argv++; argc--; + } return 0; } diff --git a/programs/netstat/netstat.h b/programs/netstat/netstat.h index b51a81f..dc4fb1e 100644 --- a/programs/netstat/netstat.h +++ b/programs/netstat/netstat.h @@ -18,6 +18,18 @@ #include <windows.h> +typedef enum _NETSTATPROTOCOLS { + PROT_UNKNOWN, + PROT_IP, + PROT_IPV6, + PROT_ICMP, + PROT_ICMPV6, + PROT_TCP, + PROT_TCPV6, + PROT_UDP, + PROT_UDPV6, +} NETSTATPROTOCOLS; + #define IDS_TCP_CLOSED 1 #define IDS_TCP_LISTENING 2 #define IDS_TCP_SYN_SENT 3
1
0
0
0
André Hentschel : netstat: Make functions static.
by Alexandre Julliard
03 Jan '13
03 Jan '13
Module: wine Branch: master Commit: 7357b65d62a2058c1502094353ff105cfab4de06 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=7357b65d62a2058c150209435…
Author: André Hentschel <nerv(a)dawncrow.de> Date: Wed Jan 2 21:37:17 2013 +0100 netstat: Make functions static. --- programs/netstat/netstat.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/programs/netstat/netstat.c b/programs/netstat/netstat.c index 2fe2e0c..999e409 100644 --- a/programs/netstat/netstat.c +++ b/programs/netstat/netstat.c @@ -107,7 +107,7 @@ static int __cdecl NETSTAT_wprintf(const WCHAR *format, ...) return nOut; } -WCHAR *NETSTAT_load_message(UINT id) { +static WCHAR *NETSTAT_load_message(UINT id) { static WCHAR msg[2048]; static const WCHAR failedW[] = {'F','a','i','l','e','d','!','\0'}; @@ -118,14 +118,14 @@ WCHAR *NETSTAT_load_message(UINT id) { return msg; } -WCHAR *NETSTAT_port_name(UINT port, WCHAR name[]) +static WCHAR *NETSTAT_port_name(UINT port, WCHAR name[]) { /* FIXME: can we get the name? */ sprintfW(name, fmtport, htons((WORD)port)); return name; } -WCHAR *NETSTAT_host_name(UINT ip, WCHAR name[]) +static WCHAR *NETSTAT_host_name(UINT ip, WCHAR name[]) { UINT nip; @@ -135,7 +135,7 @@ WCHAR *NETSTAT_host_name(UINT ip, WCHAR name[]) return name; } -void NETSTAT_tcp_table(void) +static void NETSTAT_tcp_table(void) { PMIB_TCPTABLE table; DWORD err, size, i;
1
0
0
0
Vincent Povirk : windowscodecs: Add test showing CreateBitmapFromMemory copies the data.
by Alexandre Julliard
03 Jan '13
03 Jan '13
Module: wine Branch: master Commit: 5e3e7304a1bf28e692f6b0b3b7010dc15aee4f12 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=5e3e7304a1bf28e692f6b0b3b…
Author: Vincent Povirk <vincent(a)codeweavers.com> Date: Wed Jan 2 13:25:18 2013 -0600 windowscodecs: Add test showing CreateBitmapFromMemory copies the data. --- dlls/windowscodecs/tests/bitmap.c | 11 ++++++++--- 1 files changed, 8 insertions(+), 3 deletions(-) diff --git a/dlls/windowscodecs/tests/bitmap.c b/dlls/windowscodecs/tests/bitmap.c index cec714b..af0446c 100644 --- a/dlls/windowscodecs/tests/bitmap.c +++ b/dlls/windowscodecs/tests/bitmap.c @@ -421,10 +421,11 @@ static void test_createbitmapfromsource(void) static void test_CreateBitmapFromMemory(void) { - BYTE data3x3[27] = { + BYTE orig_data3x3[27] = { 128,128,255, 128,128,128, 128,255,128, 128,128,128, 128,128,128, 255,255,255, 255,128,128, 255,255,255, 255,255,255 }; + BYTE data3x3[27]; BYTE data3x2[27] = { 128,128,255, 128,128,128, 128,255,128, 0,0,0, 0,128,128, 255,255,255, @@ -434,6 +435,8 @@ static void test_CreateBitmapFromMemory(void) IWICBitmap *bitmap; UINT width, height, i; + memcpy(data3x3, orig_data3x3, sizeof(data3x3)); + hr = IWICImagingFactory_CreateBitmapFromMemory(factory, 3, 3, &GUID_WICPixelFormat24bppBGR, 0, 0, NULL, &bitmap); todo_wine @@ -470,16 +473,18 @@ todo_wine ok(width == 3, "expected 3, got %u\n", width); ok(height == 3, "expected 3, got %u\n", height); + data3x3[2] = 192; + memset(data, 0, sizeof(data)); hr = IWICBitmap_CopyPixels(bitmap, NULL, 9, sizeof(data), data); ok(hr == S_OK, "IWICBitmap_CopyPixels error %#x\n", hr); for (i = 0; i < sizeof(data); i++) - ok(data[i] == data3x3[i], "%u: expected %u, got %u\n", i, data[i], data3x3[i]); + ok(data[i] == orig_data3x3[i], "%u: expected %u, got %u\n", i, data[i], data3x3[i]); IWICBitmap_Release(bitmap); hr = IWICImagingFactory_CreateBitmapFromMemory(factory, 3, 2, &GUID_WICPixelFormat24bppBGR, - 13, sizeof(data3x3), data3x3, &bitmap); + 13, sizeof(orig_data3x3), orig_data3x3, &bitmap); ok(hr == S_OK, "IWICImagingFactory_CreateBitmapFromMemory error %#x\n", hr); if (hr != S_OK) return;
1
0
0
0
André Hentschel : Fix german translation
by Jeremy Newman
03 Jan '13
03 Jan '13
Module: website Branch: master Commit: b3febd39676caa89c49b7b654541545e8eda375b URL:
http://source.winehq.org/git/website.git/?a=commit;h=b3febd39676caa89c49b7b…
Author: André Hentschel <nerv(a)dawncrow.de> Date: Thu Jan 3 19:25:48 2013 +0100 Fix german translation --- news/de/2012122101.xml | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/news/de/2012122101.xml b/news/de/2012122101.xml index 3af627f..45fc1aa 100644 --- a/news/de/2012122101.xml +++ b/news/de/2012122101.xml @@ -6,7 +6,7 @@ <p> <a href="{$root}/announce/1.5.20">Neuerungen (en)</a> in dieser Version:</p> <ul> <li>Ein haufen DLLs mit hässlichen Namen für die API Set Unterstützung.</li> - <li>Mehr implementierete ATL Funktionen.</li> + <li>Mehr implementierte ATL Funktionen.</li> <li>Schonwieder mehr C++ Runtime Funktionen.</li> <li>Mehere Text Render Fehlerbehebungen.</li> <li>PostScript Treiber Verbesserungen.</li>
1
0
0
0
André Hentschel : winedbg: Add modified immediate dataprocessing operators to Thumb2 disassembler.
by Alexandre Julliard
02 Jan '13
02 Jan '13
Module: wine Branch: master Commit: 0004788e96cfd5f81642bf430dfdd16353e59ca1 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=0004788e96cfd5f81642bf430…
Author: André Hentschel <nerv(a)dawncrow.de> Date: Wed Jan 2 17:23:56 2013 +0100 winedbg: Add modified immediate dataprocessing operators to Thumb2 disassembler. --- programs/winedbg/be_arm.c | 74 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 74 insertions(+), 0 deletions(-) diff --git a/programs/winedbg/be_arm.c b/programs/winedbg/be_arm.c index 408dbcc..9f6c824 100644 --- a/programs/winedbg/be_arm.c +++ b/programs/winedbg/be_arm.c @@ -1133,6 +1133,79 @@ static UINT thumb2_disasm_dataprocessing(UINT inst, ADDRESS64 *addr) return inst; } +static UINT thumb2_disasm_dataprocessingmod(UINT inst, ADDRESS64 *addr) +{ + WORD op = (inst >> 21) & 0x0f; + WORD sf = (inst >> 20) & 0x01; + WORD offset = ((inst >> 15) & 0x0800) + ((inst >> 4) & 0x0700) + (inst & 0xff); + + /* FIXME: use ThumbExpandImm_C */ + + switch (op) + { + case 0: + if (get_nibble(inst, 2) == 15) + dbg_printf("\n\ttst\t%s, #%u", tbl_regs[get_nibble(inst, 4)], offset); + else + dbg_printf("\n\tand%s\t%s, %s, #%u", sf ? "s" : "", tbl_regs[get_nibble(inst, 2)], + tbl_regs[get_nibble(inst, 4)], offset); + return 0; + case 1: + dbg_printf("\n\tbic%s\t%s, %s, #%u", sf ? "s" : "", tbl_regs[get_nibble(inst, 2)], + tbl_regs[get_nibble(inst, 4)], offset); + return 0; + case 2: + if (get_nibble(inst, 4) == 15) + dbg_printf("\n\tmov%s\t%s, #%u", sf ? "s" : "", tbl_regs[get_nibble(inst, 2)], offset); + else + dbg_printf("\n\torr%s\t%s, %s, #%u", sf ? "s" : "", tbl_regs[get_nibble(inst, 2)], + tbl_regs[get_nibble(inst, 4)], offset); + return 0; + case 3: + if (get_nibble(inst, 4) == 15) + dbg_printf("\n\tmvn%s\t%s, #%u", sf ? "s" : "", tbl_regs[get_nibble(inst, 2)], offset); + else + dbg_printf("\n\torn%s\t%s, %s, #%u", sf ? "s" : "", tbl_regs[get_nibble(inst, 2)], + tbl_regs[get_nibble(inst, 4)], offset); + return 0; + case 4: + if (get_nibble(inst, 2) == 15) + dbg_printf("\n\tteq\t%s, #%u", tbl_regs[get_nibble(inst, 4)], offset); + else + dbg_printf("\n\teor%s\t%s, %s, #%u", sf ? "s" : "", tbl_regs[get_nibble(inst, 2)], + tbl_regs[get_nibble(inst, 4)], offset); + return 0; + case 8: + if (get_nibble(inst, 2) == 15) + dbg_printf("\n\tcmn\t%s, #%u", tbl_regs[get_nibble(inst, 4)], offset); + else + dbg_printf("\n\tadd%s\t%s, %s, #%u", sf ? "s" : "", tbl_regs[get_nibble(inst, 2)], + tbl_regs[get_nibble(inst, 4)], offset); + return 0; + case 10: + dbg_printf("\n\tadc%s\t%s, %s, #%u", sf ? "s" : "", tbl_regs[get_nibble(inst, 2)], + tbl_regs[get_nibble(inst, 4)], offset); + return 0; + case 11: + dbg_printf("\n\tsbc%s\t%s, %s, #%u", sf ? "s" : "", tbl_regs[get_nibble(inst, 2)], + tbl_regs[get_nibble(inst, 4)], offset); + return 0; + case 13: + if (get_nibble(inst, 2) == 15) + dbg_printf("\n\tcmp\t%s, #%u", tbl_regs[get_nibble(inst, 4)], offset); + else + dbg_printf("\n\tsub%s\t%s, %s, #%u", sf ? "s" : "", tbl_regs[get_nibble(inst, 2)], + tbl_regs[get_nibble(inst, 4)], offset); + return 0; + case 14: + dbg_printf("\n\trsb%s\t%s, %s, #%u", sf ? "s" : "", tbl_regs[get_nibble(inst, 2)], + tbl_regs[get_nibble(inst, 4)], offset); + return 0; + default: + return inst; + } +} + static UINT thumb2_disasm_coprocdat(UINT inst, ADDRESS64 *addr) { WORD opc2 = (inst >> 5) & 0x07; @@ -1370,6 +1443,7 @@ static const struct inst_arm tbl_thumb32[] = { { 0xfe70f000, 0xf810f000, thumb2_disasm_preload }, { 0xfe500000, 0xf8100000, thumb2_disasm_ldrnonword }, { 0xfa008000, 0xf2000000, thumb2_disasm_dataprocessing }, + { 0xfa008000, 0xf0000000, thumb2_disasm_dataprocessingmod }, { 0xef000010, 0xee000000, thumb2_disasm_coprocdat }, { 0xef000010, 0xee000010, thumb2_disasm_coprocmov1 }, { 0xefe00000, 0xec400000, thumb2_disasm_coprocmov2 },
1
0
0
0
André Hentschel : winedbg: Add plain binary dataprocessing operators to Thumb2 disassembler.
by Alexandre Julliard
02 Jan '13
02 Jan '13
Module: wine Branch: master Commit: 87fbe4ca107a8fffb8e37106aca1117e5d1ccb0f URL:
http://source.winehq.org/git/wine.git/?a=commit;h=87fbe4ca107a8fffb8e37106a…
Author: André Hentschel <nerv(a)dawncrow.de> Date: Wed Jan 2 17:17:03 2013 +0100 winedbg: Add plain binary dataprocessing operators to Thumb2 disassembler. --- programs/winedbg/be_arm.c | 84 ++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 83 insertions(+), 1 deletions(-) diff --git a/programs/winedbg/be_arm.c b/programs/winedbg/be_arm.c index a6f57f7..408dbcc 100644 --- a/programs/winedbg/be_arm.c +++ b/programs/winedbg/be_arm.c @@ -1,7 +1,7 @@ /* * Debugger ARM specific functions * - * Copyright 2010-2012 André Hentschel + * Copyright 2010-2013 André Hentschel * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -1052,6 +1052,87 @@ static UINT thumb2_disasm_ldrnonword(UINT inst, ADDRESS64 *addr) return inst; } +static UINT thumb2_disasm_dataprocessing(UINT inst, ADDRESS64 *addr) +{ + WORD op = (inst >> 20) & 0x1f; + WORD imm5 = ((inst >> 10) & 0x1c) + ((inst >> 6) & 0x03); + + if (op == 0) + { + WORD offset = ((inst >> 15) & 0x0800) + ((inst >> 4) & 0x0700) + (inst & 0xff); + if (get_nibble(inst, 4) == 15) + { + dbg_printf("\n\tadr\t%s, ", tbl_regs[get_nibble(inst, 2)]); + db_printsym(addr->Offset + offset + 4); + } + else + dbg_printf("\n\taddw\t%s, %s, #%u", tbl_regs[get_nibble(inst, 2)], + tbl_regs[get_nibble(inst, 4)], offset); + return 0; + } + + if (op == 4 || op == 12) + { + WORD offset = ((inst >> 15) & 0x0800) + ((inst >> 4) & 0xf000) + + ((inst >> 4) & 0x0700) + (inst & 0xff); + dbg_printf("\n\t%s\t%s, #%u", op == 12 ? "movt" : "movw", tbl_regs[get_nibble(inst, 2)], + offset); + return 0; + } + + if (op == 10) + { + int offset = ((inst >> 15) & 0x0800) + ((inst >> 4) & 0x0700) + (inst & 0xff); + if (get_nibble(inst, 4) == 15) + { + offset *= -1; + dbg_printf("\n\tadr\t%s, ", tbl_regs[get_nibble(inst, 2)]); + db_printsym(addr->Offset + offset + 4); + } + else + dbg_printf("\n\tsubw\t%s, %s, #%u", tbl_regs[get_nibble(inst, 2)], + tbl_regs[get_nibble(inst, 4)], offset); + return 0; + } + + if (op == 16 || op == 18 || op == 24 || op == 26) + { + BOOL sign = op < 24; + WORD sh = (inst >> 21) & 0x01; + WORD sat = (inst & 0x1f); + if (sign) sat++; + if (imm5) + dbg_printf("\n\t%s\t%s, #%u, %s, %s #%u", sign ? "ssat" : "usat", + tbl_regs[get_nibble(inst, 2)], sat, tbl_regs[get_nibble(inst, 4)], + sh ? "asr" : "lsl", imm5); + else + dbg_printf("\n\t%s\t%s, #%u, %s", sign ? "ssat" : "usat", tbl_regs[get_nibble(inst, 2)], + sat, tbl_regs[get_nibble(inst, 4)]); + return 0; + } + + if (op == 20 || op == 28) + { + WORD width = (inst & 0x1f) + 1; + dbg_printf("\n\t%s\t%s, %s, #%u, #%u", op == 28 ? "ubfx" : "sbfx", + tbl_regs[get_nibble(inst, 2)], tbl_regs[get_nibble(inst, 4)], imm5, width); + return 0; + } + + if (op == 22) + { + WORD msb = (inst & 0x1f) + 1 - imm5; + if (get_nibble(inst, 4) == 15) + dbg_printf("\n\tbfc\t%s, #%u, #%u", tbl_regs[get_nibble(inst, 2)], imm5, msb); + else + dbg_printf("\n\tbfi\t%s, %s, #%u, #%u", tbl_regs[get_nibble(inst, 2)], + tbl_regs[get_nibble(inst, 4)], imm5, msb); + return 0; + } + + return inst; +} + static UINT thumb2_disasm_coprocdat(UINT inst, ADDRESS64 *addr) { WORD opc2 = (inst >> 5) & 0x07; @@ -1288,6 +1369,7 @@ static const struct inst_arm tbl_thumb32[] = { { 0xff700000, 0xf8500000, thumb2_disasm_ldrword }, { 0xfe70f000, 0xf810f000, thumb2_disasm_preload }, { 0xfe500000, 0xf8100000, thumb2_disasm_ldrnonword }, + { 0xfa008000, 0xf2000000, thumb2_disasm_dataprocessing }, { 0xef000010, 0xee000000, thumb2_disasm_coprocdat }, { 0xef000010, 0xee000010, thumb2_disasm_coprocmov1 }, { 0xefe00000, 0xec400000, thumb2_disasm_coprocmov2 },
1
0
0
0
Alexandre Julliard : winex11: Add an option to disable shaping of layered window to work around compositor bugs .
by Alexandre Julliard
02 Jan '13
02 Jan '13
Module: wine Branch: master Commit: defcfde17ccf27d8ea9693a79e7a9239cd604b90 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=defcfde17ccf27d8ea9693a79…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Wed Jan 2 18:09:34 2013 +0100 winex11: Add an option to disable shaping of layered window to work around compositor bugs. --- dlls/winex11.drv/bitblt.c | 2 ++ dlls/winex11.drv/x11drv.h | 1 + dlls/winex11.drv/x11drv_main.c | 4 ++++ 3 files changed, 7 insertions(+), 0 deletions(-) diff --git a/dlls/winex11.drv/bitblt.c b/dlls/winex11.drv/bitblt.c index 161fa73..84e8751 100644 --- a/dlls/winex11.drv/bitblt.c +++ b/dlls/winex11.drv/bitblt.c @@ -1621,6 +1621,8 @@ static void update_surface_region( struct x11drv_window_surface *surface ) int x, y, start, width; HRGN rgn; + if (!shape_layered_windows) return; + if (!surface->is_argb && surface->color_key == CLR_INVALID) { XShapeCombineMask( gdi_display, surface->window, ShapeBounding, 0, 0, None, ShapeSet ); diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index 0c462d6..707ee03 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -218,6 +218,7 @@ extern const int X11DRV_XROPfunction[]; extern int client_side_graphics DECLSPEC_HIDDEN; extern int client_side_with_render DECLSPEC_HIDDEN; +extern int shape_layered_windows DECLSPEC_HIDDEN; extern const struct gdi_dc_funcs *X11DRV_XRender_Init(void) DECLSPEC_HIDDEN; extern struct opengl_funcs *get_glx_driver(UINT) DECLSPEC_HIDDEN; diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c index ef6b1a9..329fea5 100644 --- a/dlls/winex11.drv/x11drv_main.c +++ b/dlls/winex11.drv/x11drv_main.c @@ -81,6 +81,7 @@ int private_color_map = 0; int primary_monitor = 0; int client_side_graphics = 1; int client_side_with_render = 1; +int shape_layered_windows = 1; int copy_default_colors = 128; int alloc_system_colors = 256; DWORD thread_data_tls_index = TLS_OUT_OF_INDEXES; @@ -397,6 +398,9 @@ static void setup_options(void) if (!get_config_key( hkey, appkey, "UseXIM", buffer, sizeof(buffer) )) use_xim = IS_OPTION_TRUE( buffer[0] ); + if (!get_config_key( hkey, appkey, "ShapeLayeredWindows", buffer, sizeof(buffer) )) + shape_layered_windows = IS_OPTION_TRUE( buffer[0] ); + if (!get_config_key( hkey, appkey, "PrivateColorMap", buffer, sizeof(buffer) )) private_color_map = IS_OPTION_TRUE( buffer[0] );
1
0
0
0
Jacek Caban : iphlpapi: Added support for direct routes when using NET_RT_DUMP.
by Alexandre Julliard
02 Jan '13
02 Jan '13
Module: wine Branch: master Commit: fdcbd3137a6100da6520ecaf3b3b58b7d2d5a7c0 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=fdcbd3137a6100da6520ecaf3…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Wed Jan 2 15:33:28 2013 +0100 iphlpapi: Added support for direct routes when using NET_RT_DUMP. --- dlls/iphlpapi/ipstats.c | 42 +++++++++++++++++++++++++----------------- 1 files changed, 25 insertions(+), 17 deletions(-) diff --git a/dlls/iphlpapi/ipstats.c b/dlls/iphlpapi/ipstats.c index a78424b..f8191ba 100644 --- a/dlls/iphlpapi/ipstats.c +++ b/dlls/iphlpapi/ipstats.c @@ -1497,15 +1497,13 @@ DWORD WINAPI AllocateAndGetIpForwardTableFromStack(PMIB_IPFORWARDTABLE *ppIpForw continue; } - /* Ignore all entries except for gateway routes which aren't - multicast */ - if (!(rtm->rtm_flags & RTF_GATEWAY) || - (rtm->rtm_flags & RTF_MULTICAST)) + /* Ignore gateway routes which are multicast */ + if ((rtm->rtm_flags & RTF_GATEWAY) && (rtm->rtm_flags & RTF_MULTICAST)) continue; memset( &row, 0, sizeof(row) ); row.dwForwardIfIndex = rtm->rtm_index; - row.u1.ForwardType = MIB_IPROUTE_TYPE_INDIRECT; + row.u1.ForwardType = (rtm->rtm_flags & RTF_GATEWAY) ? MIB_IPROUTE_TYPE_INDIRECT : MIB_IPROUTE_TYPE_DIRECT; row.dwForwardMetric1 = rtm->rtm_rmx.rmx_hopcount; row.u2.ForwardProto = MIB_IPPROTO_LOCAL; @@ -1523,19 +1521,29 @@ DWORD WINAPI AllocateAndGetIpForwardTableFromStack(PMIB_IPFORWARDTABLE *ppIpForw ADVANCE (addrPtr, sa); /* default routes are encoded by length-zero sockaddr */ - if (sa->sa_len == 0) + if (sa->sa_len == 0) { addr = 0; - else if (sa->sa_family != AF_INET) - { - WARN ("Received unsupported sockaddr family 0x%x\n", - sa->sa_family); - addr = 0; - } - else - { - struct sockaddr_in *sin = (struct sockaddr_in *)sa; - - addr = sin->sin_addr.s_addr; + }else { + switch(sa->sa_family) { + case AF_INET: { + struct sockaddr_in *sin = (struct sockaddr_in *)sa; + addr = sin->sin_addr.s_addr; + break; + } +#ifdef AF_LINK + case AF_LINK: + if(i == RTA_GATEWAY && row.u1.ForwardType == MIB_IPROUTE_TYPE_DIRECT) { + /* For direct route we may simply use dest addr as next hop */ + C_ASSERT(RTA_DST < RTA_GATEWAY); + addr = row.dwForwardDest; + break; + } + /* fallthrough */ +#endif + default: + WARN ("Received unsupported sockaddr family 0x%x\n", sa->sa_family); + addr = 0; + } } switch (i)
1
0
0
0
← Newer
1
...
68
69
70
71
72
73
74
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
Results per page:
10
25
50
100
200