n-dhcp4: merge branch 'th/fix-lto-compiler-warnings'

https://github.com/nettools/n-dhcp4/pull/20
This commit is contained in:
Thomas Haller 2020-08-17 15:08:47 +02:00
commit 689ebd0d60
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
2 changed files with 11 additions and 24 deletions

View file

@ -182,7 +182,8 @@ int n_dhcp4_c_connection_listen(NDhcp4CConnection *connection) {
int n_dhcp4_c_connection_connect(NDhcp4CConnection *connection,
const struct in_addr *client,
const struct in_addr *server) {
int r, fd_udp;
_c_cleanup_(c_closep) int fd_udp = -1;
int r;
c_assert(connection->state == N_DHCP4_C_CONNECTION_STATE_PACKET);
@ -200,27 +201,21 @@ int n_dhcp4_c_connection_connect(NDhcp4CConnection *connection,
.events = EPOLLIN,
.data = { .u32 = N_DHCP4_CLIENT_EPOLL_IO },
});
if (r < 0) {
r = -errno;
goto exit_fd;
}
if (r < 0)
return -errno;
r = packet_shutdown(connection->fd_packet);
if (r < 0)
goto exit_epoll;
if (r < 0) {
epoll_ctl(connection->fd_epoll, EPOLL_CTL_DEL, fd_udp, NULL);
return r;
}
connection->state = N_DHCP4_C_CONNECTION_STATE_DRAINING;
connection->fd_udp = fd_udp;
fd_udp = -1;
connection->client_ip = client->s_addr;
connection->server_ip = server->s_addr;
fd_udp = -1;
return 0;
exit_epoll:
epoll_ctl(connection->fd_epoll, EPOLL_CTL_DEL, fd_udp, NULL);
exit_fd:
close(fd_udp);
return r;
}
void n_dhcp4_c_connection_close(NDhcp4CConnection *connection) {

View file

@ -293,6 +293,8 @@ int packet_recvfrom_udp(int sockfd,
ssize_t pktlen;
size_t hdrlen;
*n_transmittedp = 0;
/* Peek packet to obtain the real IP header length */
pktlen = recv(sockfd, &ip_hdr.hdr, sizeof(ip_hdr.hdr), MSG_PEEK);
if (pktlen < 0)
@ -304,7 +306,6 @@ int packet_recvfrom_udp(int sockfd,
* discard it.
*/
recv(sockfd, NULL, 0, 0);
*n_transmittedp = 0;
return 0;
}
@ -313,7 +314,6 @@ int packet_recvfrom_udp(int sockfd,
* This is not an IPv4 packet, discard it.
*/
recv(sockfd, NULL, 0, 0);
*n_transmittedp = 0;
return 0;
}
@ -324,7 +324,6 @@ int packet_recvfrom_udp(int sockfd,
* header length, discard the packet.
*/
recv(sockfd, NULL, 0, 0);
*n_transmittedp = 0;
return 0;
}
@ -354,7 +353,6 @@ int packet_recvfrom_udp(int sockfd,
* provided too small a buffer. In both cases, we simply drop
* the packet.
*/
*n_transmittedp = 0;
return 0;
}
@ -366,14 +364,12 @@ int packet_recvfrom_udp(int sockfd,
* The packet is too small to even contain an entire UDP
* header, so discard it entirely.
*/
*n_transmittedp = 0;
return 0;
} else if ((size_t)pktlen < hdrlen + ntohs(udp_hdr.len)) {
/*
* The UDP header specified a longer length than the returned
* packet, so discard it entirely.
*/
*n_transmittedp = 0;
return 0;
}
@ -386,13 +382,10 @@ int packet_recvfrom_udp(int sockfd,
/* IP */
if (ip_hdr.hdr.protocol != IPPROTO_UDP) {
*n_transmittedp = 0;
return 0; /* not a UDP packet, discard it */
} else if (ip_hdr.hdr.frag_off & htons(IP_MF | IP_OFFMASK)) {
*n_transmittedp = 0;
return 0; /* fragmented packet, discard it */
} else if (checksum && packet_internet_checksum(ip_hdr.data, hdrlen)) {
*n_transmittedp = 0;
return 0; /* invalid checksum, discard it */
}
@ -411,7 +404,6 @@ int packet_recvfrom_udp(int sockfd,
buf,
pktlen,
udp_hdr.check)) {
*n_transmittedp = 0;
return 0;
}
}