Thanks, applied.
On Wed, Feb 23, 2011 at 8:40 PM, Stefan Weil <w...@mail.berlios.de> wrote:
> 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 <w...@mail.berlios.de>
> ---
> slirp/tftp.c | 14 +++++++-------
> slirp/tftp.h | 2 +-
> 2 files changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/slirp/tftp.c b/slirp/tftp.c
> index 1821648..8055ccc 100644
> --- a/slirp/tftp.c
> +++ b/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) {
> diff --git a/slirp/tftp.h b/slirp/tftp.h
> index b9f0847..72e5e91 100644
> --- a/slirp/tftp.h
> +++ b/slirp/tftp.h
> @@ -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;
> };
>
> --
> 1.7.2.3
>
>
>