|
@@ -106,6 +106,7 @@ TftpSend (void)
|
|
|
volatile uchar * pkt;
|
|
|
volatile uchar * xp;
|
|
|
int len = 0;
|
|
|
+ volatile ushort *s;
|
|
|
|
|
|
/*
|
|
|
* We will always be sending some sort of packet, so
|
|
@@ -117,7 +118,9 @@ TftpSend (void)
|
|
|
|
|
|
case STATE_RRQ:
|
|
|
xp = pkt;
|
|
|
- *((ushort *)pkt)++ = htons(TFTP_RRQ);
|
|
|
+ s = (ushort *)pkt;
|
|
|
+ *s++ = htons(TFTP_RRQ);
|
|
|
+ pkt = (uchar *)s;
|
|
|
strcpy ((char *)pkt, tftp_filename);
|
|
|
pkt += strlen(tftp_filename) + 1;
|
|
|
strcpy ((char *)pkt, "octet");
|
|
@@ -135,15 +138,19 @@ TftpSend (void)
|
|
|
case STATE_DATA:
|
|
|
case STATE_OACK:
|
|
|
xp = pkt;
|
|
|
- *((ushort *)pkt)++ = htons(TFTP_ACK);
|
|
|
- *((ushort *)pkt)++ = htons(TftpBlock);
|
|
|
+ s = (ushort *)pkt;
|
|
|
+ *s++ = htons(TFTP_ACK);
|
|
|
+ *s++ = htons(TftpBlock);
|
|
|
+ pkt = (uchar *)s;
|
|
|
len = pkt - xp;
|
|
|
break;
|
|
|
|
|
|
case STATE_TOO_LARGE:
|
|
|
xp = pkt;
|
|
|
- *((ushort *)pkt)++ = htons(TFTP_ERROR);
|
|
|
- *((ushort *)pkt)++ = htons(3);
|
|
|
+ s = (ushort *)pkt;
|
|
|
+ *s++ = htons(TFTP_ERROR);
|
|
|
+ *s++ = htons(3);
|
|
|
+ pkt = (uchar *)s;
|
|
|
strcpy ((char *)pkt, "File too large");
|
|
|
pkt += 14 /*strlen("File too large")*/ + 1;
|
|
|
len = pkt - xp;
|
|
@@ -151,8 +158,10 @@ TftpSend (void)
|
|
|
|
|
|
case STATE_BAD_MAGIC:
|
|
|
xp = pkt;
|
|
|
- *((ushort *)pkt)++ = htons(TFTP_ERROR);
|
|
|
- *((ushort *)pkt)++ = htons(2);
|
|
|
+ s = (ushort *)pkt;
|
|
|
+ *s++ = htons(TFTP_ERROR);
|
|
|
+ *s++ = htons(2);
|
|
|
+ pkt = (uchar *)s;
|
|
|
strcpy ((char *)pkt, "File has bad magic");
|
|
|
pkt += 18 /*strlen("File has bad magic")*/ + 1;
|
|
|
len = pkt - xp;
|
|
@@ -167,6 +176,7 @@ static void
|
|
|
TftpHandler (uchar * pkt, unsigned dest, unsigned src, unsigned len)
|
|
|
{
|
|
|
ushort proto;
|
|
|
+ ushort *s;
|
|
|
|
|
|
if (dest != TftpOurPort) {
|
|
|
return;
|
|
@@ -180,7 +190,9 @@ TftpHandler (uchar * pkt, unsigned dest, unsigned src, unsigned len)
|
|
|
}
|
|
|
len -= 2;
|
|
|
/* warning: don't use increment (++) in ntohs() macros!! */
|
|
|
- proto = *((ushort *)pkt)++;
|
|
|
+ s = (ushort *)pkt;
|
|
|
+ proto = *s++;
|
|
|
+ pkt = (uchar *)s;
|
|
|
switch (ntohs(proto)) {
|
|
|
|
|
|
case TFTP_RRQ:
|