Fix alignment issues in message sending/reading that would crash IRIX, thanks to Canavan for supplying a shell where I could fix this (#5077)
This commit is contained in:
parent
4c5e9963e3
commit
242c938d7f
3 changed files with 51 additions and 18 deletions
|
@ -140,23 +140,28 @@ void MSG_WriteBits( msg_t *msg, int value, int bits ) {
|
|||
bits = -bits;
|
||||
}
|
||||
if (msg->oob) {
|
||||
if (bits==8) {
|
||||
if(bits==8)
|
||||
{
|
||||
msg->data[msg->cursize] = value;
|
||||
msg->cursize += 1;
|
||||
msg->bit += 8;
|
||||
} else if (bits==16) {
|
||||
unsigned short *sp = (unsigned short *)&msg->data[msg->cursize];
|
||||
*sp = LittleShort(value);
|
||||
}
|
||||
else if(bits==16)
|
||||
{
|
||||
short temp = value;
|
||||
|
||||
CopyLittleShort(&msg->data[msg->cursize], &temp);
|
||||
msg->cursize += 2;
|
||||
msg->bit += 16;
|
||||
} else if (bits==32) {
|
||||
unsigned int *ip = (unsigned int *)&msg->data[msg->cursize];
|
||||
*ip = LittleLong(value);
|
||||
}
|
||||
else if(bits==32)
|
||||
{
|
||||
CopyLittleLong(&msg->data[msg->cursize], &value);
|
||||
msg->cursize += 4;
|
||||
msg->bit += 32;
|
||||
} else {
|
||||
Com_Error(ERR_DROP, "can't read %d bits", bits);
|
||||
}
|
||||
else
|
||||
Com_Error(ERR_DROP, "can't write %d bits", bits);
|
||||
} else {
|
||||
// fp = fopen("c:\\netchan.bin", "a");
|
||||
value &= (0xffffffff>>(32-bits));
|
||||
|
@ -198,23 +203,29 @@ int MSG_ReadBits( msg_t *msg, int bits ) {
|
|||
}
|
||||
|
||||
if (msg->oob) {
|
||||
if (bits==8) {
|
||||
if(bits==8)
|
||||
{
|
||||
value = msg->data[msg->readcount];
|
||||
msg->readcount += 1;
|
||||
msg->bit += 8;
|
||||
} else if (bits==16) {
|
||||
unsigned short *sp = (unsigned short *)&msg->data[msg->readcount];
|
||||
value = LittleShort(*sp);
|
||||
}
|
||||
else if(bits==16)
|
||||
{
|
||||
short temp;
|
||||
|
||||
CopyLittleShort(&temp, &msg->data[msg->readcount]);
|
||||
value = temp;
|
||||
msg->readcount += 2;
|
||||
msg->bit += 16;
|
||||
} else if (bits==32) {
|
||||
unsigned int *ip = (unsigned int *)&msg->data[msg->readcount];
|
||||
value = LittleLong(*ip);
|
||||
}
|
||||
else if(bits==32)
|
||||
{
|
||||
CopyLittleLong(&value, &msg->data[msg->readcount]);
|
||||
msg->readcount += 4;
|
||||
msg->bit += 32;
|
||||
} else {
|
||||
Com_Error(ERR_DROP, "can't read %d bits", bits);
|
||||
}
|
||||
else
|
||||
Com_Error(ERR_DROP, "can't read %d bits", bits);
|
||||
} else {
|
||||
nbits = 0;
|
||||
if (bits&7) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue