Convert ff_is_multicast_address to take a struct sockaddr parameter
Not all users of this function will have a full struct sockaddr_storage available, and casting other sockaddrs to sockaddr_storage is wrong, while any sockaddr can be cast to a base sockaddr. Originally committed as revision 25388 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
7ac57fa5eb
commit
55b6bd1c01
@ -162,13 +162,13 @@ const char *ff_gai_strerror(int ecode);
|
|||||||
#define IN6_IS_ADDR_MULTICAST(a) (((uint8_t *) (a))[0] == 0xff)
|
#define IN6_IS_ADDR_MULTICAST(a) (((uint8_t *) (a))[0] == 0xff)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static inline int ff_is_multicast_address(struct sockaddr_storage *addr)
|
static inline int ff_is_multicast_address(struct sockaddr *addr)
|
||||||
{
|
{
|
||||||
if (addr->ss_family == AF_INET) {
|
if (addr->sa_family == AF_INET) {
|
||||||
return IN_MULTICAST(ntohl(((struct sockaddr_in *)addr)->sin_addr.s_addr));
|
return IN_MULTICAST(ntohl(((struct sockaddr_in *)addr)->sin_addr.s_addr));
|
||||||
}
|
}
|
||||||
#if HAVE_STRUCT_SOCKADDR_IN6
|
#if HAVE_STRUCT_SOCKADDR_IN6
|
||||||
if (addr->ss_family == AF_INET6) {
|
if (addr->sa_family == AF_INET6) {
|
||||||
return IN6_IS_ADDR_MULTICAST(&((struct sockaddr_in6 *)addr)->sin6_addr);
|
return IN6_IS_ADDR_MULTICAST(&((struct sockaddr_in6 *)addr)->sin6_addr);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -254,7 +254,7 @@ int udp_set_remote_url(URLContext *h, const char *uri)
|
|||||||
if (s->dest_addr_len < 0) {
|
if (s->dest_addr_len < 0) {
|
||||||
return AVERROR(EIO);
|
return AVERROR(EIO);
|
||||||
}
|
}
|
||||||
s->is_multicast = ff_is_multicast_address(&s->dest_addr);
|
s->is_multicast = ff_is_multicast_address((struct sockaddr*) &s->dest_addr);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user