slirp: Remove some type casts caused by bad declaration of x.tp_buf
x.tp_buf was declared as a uint8_t array, but always used as a char array (which needed a lot of type casts). The patch includes these changes: * Fix declaration of x.tp_buf and remove all type casts. * Use offsetof() to get the offset of x.tp_buf. Signed-off-by: Stefan Weil <weil@mail.berlios.de> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
parent
c3febae62b
commit
89d2d3af51
14
slirp/tftp.c
14
slirp/tftp.c
@ -136,9 +136,9 @@ static int tftp_send_oack(struct tftp_session *spt,
|
||||
m->m_data += sizeof(struct udpiphdr);
|
||||
|
||||
tp->tp_op = htons(TFTP_OACK);
|
||||
n += snprintf((char *)tp->x.tp_buf + n, sizeof(tp->x.tp_buf) - n, "%s",
|
||||
n += snprintf(tp->x.tp_buf + n, sizeof(tp->x.tp_buf) - n, "%s",
|
||||
key) + 1;
|
||||
n += snprintf((char *)tp->x.tp_buf + n, sizeof(tp->x.tp_buf) - n, "%u",
|
||||
n += snprintf(tp->x.tp_buf + n, sizeof(tp->x.tp_buf) - n, "%u",
|
||||
value) + 1;
|
||||
|
||||
saddr.sin_addr = recv_tp->ip.ip_dst;
|
||||
@ -283,7 +283,7 @@ static void tftp_handle_rrq(Slirp *slirp, struct tftp_t *tp, int pktlen)
|
||||
|
||||
/* skip header fields */
|
||||
k = 0;
|
||||
pktlen -= ((uint8_t *)&tp->x.tp_buf[0] - (uint8_t *)tp);
|
||||
pktlen -= offsetof(struct tftp_t, x.tp_buf);
|
||||
|
||||
/* prepend tftp_prefix */
|
||||
prefix_len = strlen(slirp->tftp_prefix);
|
||||
@ -299,7 +299,7 @@ static void tftp_handle_rrq(Slirp *slirp, struct tftp_t *tp, int pktlen)
|
||||
tftp_send_error(spt, 2, "Access violation", tp);
|
||||
return;
|
||||
}
|
||||
req_fname[k] = (char)tp->x.tp_buf[k];
|
||||
req_fname[k] = tp->x.tp_buf[k];
|
||||
if (req_fname[k++] == '\0') {
|
||||
break;
|
||||
}
|
||||
@ -311,7 +311,7 @@ static void tftp_handle_rrq(Slirp *slirp, struct tftp_t *tp, int pktlen)
|
||||
return;
|
||||
}
|
||||
|
||||
if (strcasecmp((const char *)&tp->x.tp_buf[k], "octet") != 0) {
|
||||
if (strcasecmp(&tp->x.tp_buf[k], "octet") != 0) {
|
||||
tftp_send_error(spt, 4, "Unsupported transfer mode", tp);
|
||||
return;
|
||||
}
|
||||
@ -340,7 +340,7 @@ static void tftp_handle_rrq(Slirp *slirp, struct tftp_t *tp, int pktlen)
|
||||
while (k < pktlen) {
|
||||
const char *key, *value;
|
||||
|
||||
key = (const char *)&tp->x.tp_buf[k];
|
||||
key = &tp->x.tp_buf[k];
|
||||
k += strlen(key) + 1;
|
||||
|
||||
if (k >= pktlen) {
|
||||
@ -348,7 +348,7 @@ static void tftp_handle_rrq(Slirp *slirp, struct tftp_t *tp, int pktlen)
|
||||
return;
|
||||
}
|
||||
|
||||
value = (const char *)&tp->x.tp_buf[k];
|
||||
value = &tp->x.tp_buf[k];
|
||||
k += strlen(value) + 1;
|
||||
|
||||
if (strcasecmp(key, "tsize") == 0) {
|
||||
|
@ -26,7 +26,7 @@ struct tftp_t {
|
||||
uint16_t tp_error_code;
|
||||
uint8_t tp_msg[512];
|
||||
} tp_error;
|
||||
uint8_t tp_buf[512 + 2];
|
||||
char tp_buf[512 + 2];
|
||||
} x;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user