diff --git a/fs/tftp.c b/fs/tftp.c index e36c1c8..0de215e 100644 --- a/fs/tftp.c +++ b/fs/tftp.c @@ -256,22 +256,21 @@ static void tftp_recv(struct file_priv *priv, uint8_t *pkt, unsigned len, uint16_t uh_sport) { - uint16_t proto; - uint16_t *s; + uint16_t opcode; /* according to RFC1350 minimal tftp packet length is 4 bytes */ if (len < 4) return; + opcode = ntohs(*(uint16_t *)pkt); + + /* skip tftp opcode 2-byte field */ len -= 2; + pkt += 2; - s = (uint16_t *)pkt; - proto = *s++; - pkt = (unsigned char *)s; + debug("%s: opcode 0x%04x\n", __func__, opcode); - debug("%s: proto 0x%04x\n", __func__, proto); - - switch (ntohs(proto)) { + switch (opcode) { case TFTP_RRQ: case TFTP_WRQ: default: