ports/ftp/atftp/files/patch-tftp_io.c

65 lines
1.9 KiB
C

--- tftp_io.c.orig 2004-02-19 09:30:00.000000000 +0800
+++ tftp_io.c 2010-10-11 13:01:28.000000000 +0800
@@ -103,7 +103,8 @@
tftphdr.th_block = htons(block_number);
result = sendto(socket, &tftphdr, 4, 0, (struct sockaddr *)sa,
- sizeof(*sa));
+ sizeof(*sa));
+
if (result < 0)
return ERR;
return OK;
@@ -142,7 +143,8 @@
}
/* send the buffer */
result = sendto(socket, buffer, index, 0, (struct sockaddr *)sa,
- sizeof(*sa));
+ sizeof(*sa));
+
if (result < 0)
return ERR;
return OK;
@@ -171,6 +173,7 @@
result = sendto(socket, tftphdr, size, 0, (struct sockaddr *)sa,
sizeof(*sa));
+
if (result < 0)
return ERR;
return OK;
@@ -192,7 +195,8 @@
tftphdr->th_block = htons(block_number);
result = sendto(socket, data, size, 0, (struct sockaddr *)sa,
- sizeof(*sa));
+ sizeof(*sa));
+
if (result < 0)
return ERR;
return OK;
@@ -214,7 +218,6 @@
struct msghdr msg; /* used to get client's packet info */
struct cmsghdr *cmsg;
- struct in_pktinfo *pktinfo;
struct iovec iov;
char cbuf[1024];
@@ -284,11 +287,12 @@
cmsg != NULL && cmsg->cmsg_len >= sizeof(*cmsg);
cmsg = CMSG_NXTHDR(&msg, cmsg))
{
- if (cmsg->cmsg_level == SOL_IP
- && cmsg->cmsg_type == IP_PKTINFO)
+ if (cmsg->cmsg_level == IPPROTO_IP
+ && cmsg->cmsg_type == IP_RECVDSTADDR)
{
- pktinfo = (struct in_pktinfo *)CMSG_DATA(cmsg);
- sa_to->sin_addr = pktinfo->ipi_addr;
+ struct in_addr *pktinfo;
+ pktinfo = (struct in_addr *)CMSG_DATA(cmsg);
+ sa_to->sin_addr = *pktinfo;
}
break;
}