Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
a16f91ae
Commit
a16f91ae
authored
Jul 15, 2020
by
Alex Henrie
Committed by
Alexandre Julliard
Jul 17, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ws2_32: Avoid depending on system getprotoby(name|number) functions.
Signed-off-by:
Alex Henrie
<
alexhenrie24@gmail.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
d2b0c100
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
114 additions
and
75 deletions
+114
-75
configure
configure
+0
-2
configure.ac
configure.ac
+0
-2
socket.c
dlls/ws2_32/socket.c
+14
-65
protocol.c
dlls/ws2_32/tests/protocol.c
+100
-0
config.h.in
include/config.h.in
+0
-6
No files found.
configure
View file @
a16f91ae
...
...
@@ -18332,8 +18332,6 @@ for ac_func in \
getaddrinfo
\
getnameinfo
\
getnetbyname
\
getprotobyname
\
getprotobynumber
\
getservbyport
\
do
:
...
...
configure.ac
View file @
a16f91ae
...
...
@@ -2245,8 +2245,6 @@ AC_CHECK_FUNCS(\
getaddrinfo \
getnameinfo \
getnetbyname \
getprotobyname \
getprotobynumber \
getservbyport \
)
...
...
dlls/ws2_32/socket.c
View file @
a16f91ae
...
...
@@ -6509,56 +6509,23 @@ static const struct { int prot; const char *names[3]; } protocols[] =
{
{
0
,
{
"ip"
,
"IP"
}},
{
1
,
{
"icmp"
,
"ICMP"
}},
{
2
,
{
"igmp"
,
"IGMP"
}},
{
3
,
{
"ggp"
,
"GGP"
}},
{
6
,
{
"tcp"
,
"TCP"
}},
{
8
,
{
"egp"
,
"EGP"
}},
{
9
,
{
"igp"
,
"IGP"
}},
{
12
,
{
"pup"
,
"PUP"
}},
{
17
,
{
"udp"
,
"UDP"
}},
{
20
,
{
"hmp"
,
"HMP"
}},
{
22
,
{
"xns-idp"
,
"XNS-IDP"
}},
{
27
,
{
"rdp"
,
"RDP"
}},
{
29
,
{
"iso-tp4"
,
"ISO-TP4"
}},
{
33
,
{
"dccp"
,
"DCCP"
}},
{
36
,
{
"xtp"
,
"XTP"
}},
{
37
,
{
"ddp"
,
"DDP"
}},
{
38
,
{
"idpr-cmtp"
,
"IDPR-CMTP"
}},
{
41
,
{
"ipv6"
,
"IPv6"
}},
{
43
,
{
"ipv6-route"
,
"IPv6-Route"
}},
{
44
,
{
"ipv6-frag"
,
"IPv6-Frag"
}},
{
45
,
{
"idrp"
,
"IDRP"
}},
{
46
,
{
"rsvp"
,
"RSVP"
}},
{
47
,
{
"gre"
,
"GRE"
}},
{
50
,
{
"esp"
,
"ESP"
}},
{
51
,
{
"ah"
,
"AH"
}},
{
57
,
{
"skip"
,
"SKIP"
}},
{
58
,
{
"ipv6-icmp"
,
"IPv6-ICMP"
}},
{
59
,
{
"ipv6-nonxt"
,
"IPv6-NoNxt"
}},
{
60
,
{
"ipv6-opts"
,
"IPv6-Opts"
}},
{
66
,
{
"rvd"
,
"RVD"
}},
{
73
,
{
"rspf"
,
"RSPF"
}},
{
81
,
{
"vmtp"
,
"VMTP"
}},
{
88
,
{
"eigrp"
,
"EIGRP"
}},
{
89
,
{
"ospf"
,
"OSPFIGP"
}},
{
93
,
{
"ax.25"
,
"AX.25"
}},
{
94
,
{
"ipip"
,
"IPIP"
}},
{
97
,
{
"etherip"
,
"ETHERIP"
}},
{
98
,
{
"encap"
,
"ENCAP"
}},
{
103
,
{
"pim"
,
"PIM"
}},
{
108
,
{
"ipcomp"
,
"IPCOMP"
}},
{
112
,
{
"vrrp"
,
"VRRP"
}},
{
115
,
{
"l2tp"
,
"L2TP"
}},
{
124
,
{
"isis"
,
"ISIS"
}},
{
132
,
{
"sctp"
,
"SCTP"
}},
{
133
,
{
"fc"
,
"FC"
}},
{
135
,
{
"mobility-header"
,
"Mobility-Header"
}},
{
136
,
{
"udplite"
,
"UDPLite"
}},
{
137
,
{
"mpls-in-ip"
,
"MPLS-in-IP"
}},
{
139
,
{
"hip"
,
"HIP"
}},
{
140
,
{
"shim6"
,
"Shim6"
}},
{
141
,
{
"wesp"
,
"WESP"
}},
{
142
,
{
"rohc"
,
"ROHC"
}},
};
/***********************************************************************
...
...
@@ -6567,23 +6534,14 @@ static const struct { int prot; const char *names[3]; } protocols[] =
struct
WS_protoent
*
WINAPI
WS_getprotobyname
(
const
char
*
name
)
{
struct
WS_protoent
*
retval
=
NULL
;
#ifdef HAVE_GETPROTOBYNAME
struct
protoent
*
proto
;
EnterCriticalSection
(
&
csWSgetXXXbyYYY
);
if
(
(
proto
=
getprotobyname
(
name
))
!=
NULL
)
retval
=
WS_create_pe
(
proto
->
p_name
,
proto
->
p_aliases
,
proto
->
p_proto
);
LeaveCriticalSection
(
&
csWSgetXXXbyYYY
);
#endif
if
(
!
retval
)
unsigned
int
i
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
protocols
);
i
++
)
{
unsigned
int
i
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
protocols
);
i
++
)
{
if
(
_strnicmp
(
protocols
[
i
].
names
[
0
],
name
,
-
1
))
continue
;
retval
=
WS_create_pe
(
protocols
[
i
].
names
[
0
],
(
char
**
)
protocols
[
i
].
names
+
1
,
protocols
[
i
].
prot
);
break
;
}
if
(
_strnicmp
(
protocols
[
i
].
names
[
0
],
name
,
-
1
))
continue
;
retval
=
WS_create_pe
(
protocols
[
i
].
names
[
0
],
(
char
**
)
protocols
[
i
].
names
+
1
,
protocols
[
i
].
prot
);
break
;
}
if
(
!
retval
)
{
...
...
@@ -6601,23 +6559,14 @@ struct WS_protoent* WINAPI WS_getprotobyname(const char* name)
struct
WS_protoent
*
WINAPI
WS_getprotobynumber
(
int
number
)
{
struct
WS_protoent
*
retval
=
NULL
;
#ifdef HAVE_GETPROTOBYNUMBER
struct
protoent
*
proto
;
EnterCriticalSection
(
&
csWSgetXXXbyYYY
);
if
(
(
proto
=
getprotobynumber
(
number
))
!=
NULL
)
retval
=
WS_create_pe
(
proto
->
p_name
,
proto
->
p_aliases
,
proto
->
p_proto
);
LeaveCriticalSection
(
&
csWSgetXXXbyYYY
);
#endif
if
(
!
retval
)
unsigned
int
i
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
protocols
);
i
++
)
{
unsigned
int
i
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
protocols
);
i
++
)
{
if
(
protocols
[
i
].
prot
!=
number
)
continue
;
retval
=
WS_create_pe
(
protocols
[
i
].
names
[
0
],
(
char
**
)
protocols
[
i
].
names
+
1
,
protocols
[
i
].
prot
);
break
;
}
if
(
protocols
[
i
].
prot
!=
number
)
continue
;
retval
=
WS_create_pe
(
protocols
[
i
].
names
[
0
],
(
char
**
)
protocols
[
i
].
names
+
1
,
protocols
[
i
].
prot
);
break
;
}
if
(
!
retval
)
{
...
...
dlls/ws2_32/tests/protocol.c
View file @
a16f91ae
...
...
@@ -192,6 +192,104 @@ static void test_WSAEnumProtocolsW(void)
}
}
struct
protocol
{
int
prot
;
const
char
*
names
[
2
];
BOOL
missing_from_xp
;
};
static
const
struct
protocol
protocols
[]
=
{
{
0
,
{
"ip"
,
"IP"
}},
{
1
,
{
"icmp"
,
"ICMP"
}},
{
3
,
{
"ggp"
,
"GGP"
}},
{
6
,
{
"tcp"
,
"TCP"
}},
{
8
,
{
"egp"
,
"EGP"
}},
{
12
,
{
"pup"
,
"PUP"
}},
{
17
,
{
"udp"
,
"UDP"
}},
{
20
,
{
"hmp"
,
"HMP"
}},
{
22
,
{
"xns-idp"
,
"XNS-IDP"
}},
{
27
,
{
"rdp"
,
"RDP"
}},
{
41
,
{
"ipv6"
,
"IPv6"
},
TRUE
},
{
43
,
{
"ipv6-route"
,
"IPv6-Route"
},
TRUE
},
{
44
,
{
"ipv6-frag"
,
"IPv6-Frag"
},
TRUE
},
{
50
,
{
"esp"
,
"ESP"
}},
{
51
,
{
"ah"
,
"AH"
}},
{
58
,
{
"ipv6-icmp"
,
"IPv6-ICMP"
},
TRUE
},
{
59
,
{
"ipv6-nonxt"
,
"IPv6-NoNxt"
},
TRUE
},
{
60
,
{
"ipv6-opts"
,
"IPv6-Opts"
},
TRUE
},
{
66
,
{
"rvd"
,
"RVD"
}},
};
static
const
struct
protocol
*
find_protocol
(
int
number
)
{
int
i
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
protocols
);
i
++
)
{
if
(
protocols
[
i
].
prot
==
number
)
return
&
protocols
[
i
];
}
return
NULL
;
}
static
void
test_getprotobyname
(
void
)
{
struct
protoent
*
ent
;
char
all_caps_name
[
16
];
int
i
,
j
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
protocols
);
i
++
)
{
for
(
j
=
0
;
j
<
ARRAY_SIZE
(
protocols
[
0
].
names
);
j
++
)
{
ent
=
getprotobyname
(
protocols
[
i
].
names
[
j
]);
ok
((
ent
&&
ent
->
p_proto
==
protocols
[
i
].
prot
)
||
broken
(
!
ent
&&
protocols
[
i
].
missing_from_xp
),
"Expected %s to be protocol number %d, got %d
\n
"
,
wine_dbgstr_a
(
protocols
[
i
].
names
[
j
]),
protocols
[
i
].
prot
,
ent
?
ent
->
p_proto
:
-
1
);
}
for
(
j
=
0
;
protocols
[
i
].
names
[
0
][
j
];
j
++
)
all_caps_name
[
j
]
=
toupper
(
protocols
[
i
].
names
[
0
][
j
]);
all_caps_name
[
j
]
=
0
;
ent
=
getprotobyname
(
all_caps_name
);
ok
((
ent
&&
ent
->
p_proto
==
protocols
[
i
].
prot
)
||
broken
(
!
ent
&&
protocols
[
i
].
missing_from_xp
),
"Expected %s to be protocol number %d, got %d
\n
"
,
wine_dbgstr_a
(
all_caps_name
),
protocols
[
i
].
prot
,
ent
?
ent
->
p_proto
:
-
1
);
}
}
static
void
test_getprotobynumber
(
void
)
{
struct
protoent
*
ent
;
const
struct
protocol
*
ref
;
int
i
;
for
(
i
=
-
1
;
i
<=
256
;
i
++
)
{
ent
=
getprotobynumber
(
i
);
ref
=
find_protocol
(
i
);
if
(
!
ref
)
{
ok
(
!
ent
,
"Expected protocol number %d to be undefined, got %s
\n
"
,
i
,
wine_dbgstr_a
(
ent
?
ent
->
p_name
:
NULL
));
continue
;
}
ok
((
ent
&&
ent
->
p_name
&&
strcmp
(
ent
->
p_name
,
ref
->
names
[
0
])
==
0
)
||
broken
(
!
ent
&&
ref
->
missing_from_xp
),
"Expected protocol number %d to be %s, got %s
\n
"
,
i
,
ref
->
names
[
0
],
wine_dbgstr_a
(
ent
?
ent
->
p_name
:
NULL
));
ok
((
ent
&&
ent
->
p_aliases
&&
ent
->
p_aliases
[
0
]
&&
strcmp
(
ent
->
p_aliases
[
0
],
ref
->
names
[
1
])
==
0
)
||
broken
(
!
ent
&&
ref
->
missing_from_xp
),
"Expected protocol number %d alias 0 to be %s, got %s
\n
"
,
i
,
ref
->
names
[
0
],
wine_dbgstr_a
(
ent
&&
ent
->
p_aliases
?
ent
->
p_aliases
[
0
]
:
NULL
));
}
}
START_TEST
(
protocol
)
{
WSADATA
data
;
...
...
@@ -201,4 +299,6 @@ START_TEST( protocol )
test_WSAEnumProtocolsA
();
test_WSAEnumProtocolsW
();
test_getprotobyname
();
test_getprotobynumber
();
}
include/config.h.in
View file @
a16f91ae
...
...
@@ -245,12 +245,6 @@
/* Define to 1 if you have the `getopt_long_only' function. */
#undef HAVE_GETOPT_LONG_ONLY
/* Define to 1 if you have the `getprotobyname' function. */
#undef HAVE_GETPROTOBYNAME
/* Define to 1 if you have the `getprotobynumber' function. */
#undef HAVE_GETPROTOBYNUMBER
/* Define to 1 if you have the `getservbyport' function. */
#undef HAVE_GETSERVBYPORT
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment