@@ -254,6 +254,7 @@ extern "C" {
254254 extern void * enet_malloc (size_t );
255255 extern void enet_free (void * );
256256 extern ENetPacket * enet_packet_create (const void * ,size_t ,enet_uint32 );
257+ extern int enet_packet_resize (ENetPacket * , size_t );
257258 extern ENetPacket * enet_packet_copy (ENetPacket * );
258259 extern void enet_packet_destroy (ENetPacket * );
259260
@@ -1391,6 +1392,36 @@ extern "C" {
13911392 return packet ;
13921393 }
13931394
1395+ /** Attempts to resize the data in the packet to length specified in the
1396+ dataLength parameter
1397+ @param packet packet to resize
1398+ @param dataLength new size for the packet data
1399+ @returns 0 on success, < 0 on failure
1400+ */
1401+ int enet_packet_resize (ENetPacket * packet , size_t dataLength )
1402+ {
1403+ enet_uint8 * newData = 0 ;
1404+
1405+ if (dataLength <= packet -> dataLength || (packet -> flags & ENET_PACKET_FLAG_NO_ALLOCATE ))
1406+ {
1407+ packet -> dataLength = dataLength ;
1408+
1409+ return 0 ;
1410+ }
1411+
1412+ newData = (enet_uint8 * ) enet_malloc (dataLength );
1413+ if (newData == NULL )
1414+ return -1 ;
1415+
1416+ memcpy (newData , packet -> data , packet -> dataLength );
1417+ enet_free (packet -> data );
1418+
1419+ packet -> data = newData ;
1420+ packet -> dataLength = dataLength ;
1421+
1422+ return 0 ;
1423+ }
1424+
13941425 ENetPacket * enet_packet_create_offset (const void * data , size_t dataLength , size_t dataOffset , enet_uint32 flags ) {
13951426 ENetPacket * packet ;
13961427 if (flags & ENET_PACKET_FLAG_NO_ALLOCATE ) {
0 commit comments