mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
pedantic: resolve flexible array member in nested struct
ISO C forbids a structure that has a flexible array member to be a member of another structure or element of an array. filetx_pak and fileack_pak are two such structures. These have been removed from doomdata_t's union.
This commit is contained in:
parent
bea79dfa65
commit
59c04ae041
3 changed files with 16 additions and 13 deletions
|
|
@ -357,8 +357,8 @@ typedef struct
|
||||||
servertics_pak serverpak; // 132495 bytes (more around 360, no?)
|
servertics_pak serverpak; // 132495 bytes (more around 360, no?)
|
||||||
serverconfig_pak servercfg; // 773 bytes
|
serverconfig_pak servercfg; // 773 bytes
|
||||||
UINT8 textcmd[MAXTEXTCMD+1]; // 66049 bytes (wut??? 64k??? More like 257 bytes...)
|
UINT8 textcmd[MAXTEXTCMD+1]; // 66049 bytes (wut??? 64k??? More like 257 bytes...)
|
||||||
filetx_pak filetxpak; // 139 bytes
|
char filetxpak[sizeof (filetx_pak)];// 139 bytes
|
||||||
fileack_pak fileack;
|
char fileack[sizeof (fileack_pak)];
|
||||||
UINT8 filereceived;
|
UINT8 filereceived;
|
||||||
clientconfig_pak clientcfg; // 136 bytes
|
clientconfig_pak clientcfg; // 136 bytes
|
||||||
UINT8 md5sum[16];
|
UINT8 md5sum[16];
|
||||||
|
|
|
||||||
|
|
@ -913,11 +913,13 @@ static void DebugPrintpacket(const char *header)
|
||||||
case PT_SERVERREFUSE:
|
case PT_SERVERREFUSE:
|
||||||
fprintf(debugfile, " reason %s\n", netbuffer->u.serverrefuse.reason);
|
fprintf(debugfile, " reason %s\n", netbuffer->u.serverrefuse.reason);
|
||||||
break;
|
break;
|
||||||
case PT_FILEFRAGMENT:
|
case PT_FILEFRAGMENT: {
|
||||||
|
filetx_pak *pak = (void*)&netbuffer->u.filetxpak;
|
||||||
fprintf(debugfile, " fileid %d datasize %d position %u\n",
|
fprintf(debugfile, " fileid %d datasize %d position %u\n",
|
||||||
netbuffer->u.filetxpak.fileid, (UINT16)SHORT(netbuffer->u.filetxpak.size),
|
pak->fileid, (UINT16)SHORT(pak->size),
|
||||||
(UINT32)LONG(netbuffer->u.filetxpak.position));
|
(UINT32)LONG(pak->position));
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case PT_REQUESTFILE:
|
case PT_REQUESTFILE:
|
||||||
default: // write as a raw packet
|
default: // write as a raw packet
|
||||||
fprintfstringnewline((char *)netbuffer->u.textcmd,
|
fprintfstringnewline((char *)netbuffer->u.textcmd,
|
||||||
|
|
|
||||||
|
|
@ -1124,7 +1124,7 @@ void FileSendTicker(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build a packet containing a file fragment
|
// Build a packet containing a file fragment
|
||||||
p = &netbuffer->u.filetxpak;
|
p = (void*)&netbuffer->u.filetxpak;
|
||||||
fragmentsize = FILEFRAGMENTSIZE;
|
fragmentsize = FILEFRAGMENTSIZE;
|
||||||
if (f->size-transfer[i].position < fragmentsize)
|
if (f->size-transfer[i].position < fragmentsize)
|
||||||
fragmentsize = f->size-transfer[i].position;
|
fragmentsize = f->size-transfer[i].position;
|
||||||
|
|
@ -1166,7 +1166,7 @@ void FileSendTicker(void)
|
||||||
|
|
||||||
void PT_FileAck(void)
|
void PT_FileAck(void)
|
||||||
{
|
{
|
||||||
fileack_pak *packet = &netbuffer->u.fileack;
|
fileack_pak *packet = (void*)&netbuffer->u.fileack;
|
||||||
INT32 node = doomcom->remotenode;
|
INT32 node = doomcom->remotenode;
|
||||||
filetran_t *trans = &transfer[node];
|
filetran_t *trans = &transfer[node];
|
||||||
INT32 i, j;
|
INT32 i, j;
|
||||||
|
|
@ -1310,10 +1310,11 @@ void FileReceiveTicker(void)
|
||||||
|
|
||||||
void PT_FileFragment(void)
|
void PT_FileFragment(void)
|
||||||
{
|
{
|
||||||
INT32 filenum = netbuffer->u.filetxpak.fileid;
|
filetx_pak *pak = (void*)&netbuffer->u.filetxpak;
|
||||||
|
INT32 filenum = pak->fileid;
|
||||||
fileneeded_t *file = &fileneeded[filenum];
|
fileneeded_t *file = &fileneeded[filenum];
|
||||||
UINT32 fragmentpos = LONG(netbuffer->u.filetxpak.position);
|
UINT32 fragmentpos = LONG(pak->position);
|
||||||
UINT16 fragmentsize = SHORT(netbuffer->u.filetxpak.size);
|
UINT16 fragmentsize = SHORT(pak->size);
|
||||||
UINT16 boundedfragmentsize = doomcom->datalength - BASEPACKETSIZE - sizeof(netbuffer->u.filetxpak);
|
UINT16 boundedfragmentsize = doomcom->datalength - BASEPACKETSIZE - sizeof(netbuffer->u.filetxpak);
|
||||||
char *filename;
|
char *filename;
|
||||||
|
|
||||||
|
|
@ -1381,7 +1382,7 @@ void PT_FileFragment(void)
|
||||||
CONS_Printf("\r%s...\n",filename);
|
CONS_Printf("\r%s...\n",filename);
|
||||||
|
|
||||||
file->currentsize = 0;
|
file->currentsize = 0;
|
||||||
file->totalsize = LONG(netbuffer->u.filetxpak.filesize);
|
file->totalsize = LONG(pak->filesize);
|
||||||
file->ackresendposition = UINT32_MAX; // Only used for resumed downloads
|
file->ackresendposition = UINT32_MAX; // Only used for resumed downloads
|
||||||
|
|
||||||
file->receivedfragments = calloc(file->totalsize / fragmentsize + 1, sizeof(*file->receivedfragments));
|
file->receivedfragments = calloc(file->totalsize / fragmentsize + 1, sizeof(*file->receivedfragments));
|
||||||
|
|
@ -1397,7 +1398,7 @@ void PT_FileFragment(void)
|
||||||
if (fragmentpos >= file->totalsize)
|
if (fragmentpos >= file->totalsize)
|
||||||
I_Error("Invalid file fragment\n");
|
I_Error("Invalid file fragment\n");
|
||||||
|
|
||||||
file->iteration = max(file->iteration, netbuffer->u.filetxpak.iteration);
|
file->iteration = max(file->iteration, pak->iteration);
|
||||||
|
|
||||||
if (!file->receivedfragments[fragmentpos / fragmentsize]) // Not received yet
|
if (!file->receivedfragments[fragmentpos / fragmentsize]) // Not received yet
|
||||||
{
|
{
|
||||||
|
|
@ -1405,7 +1406,7 @@ void PT_FileFragment(void)
|
||||||
|
|
||||||
// We can receive packets in the wrong order, anyway all OSes support gaped files
|
// We can receive packets in the wrong order, anyway all OSes support gaped files
|
||||||
fseek(file->file, fragmentpos, SEEK_SET);
|
fseek(file->file, fragmentpos, SEEK_SET);
|
||||||
if (fragmentsize && fwrite(netbuffer->u.filetxpak.data, boundedfragmentsize, 1, file->file) != 1)
|
if (fragmentsize && fwrite(pak->data, boundedfragmentsize, 1, file->file) != 1)
|
||||||
I_Error("Can't write to %s: %s\n",filename, M_FileError(file->file));
|
I_Error("Can't write to %s: %s\n",filename, M_FileError(file->file));
|
||||||
file->currentsize += boundedfragmentsize;
|
file->currentsize += boundedfragmentsize;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue