Browse Source

One less malloc and free per packet.

Vladyslav Hrytsenko 6 years ago
parent
commit
eedc42c8fd
1 changed files with 24 additions and 58 deletions
  1. 24 58
      include/enet.h

+ 24 - 58
include/enet.h

@@ -885,7 +885,6 @@ extern "C" {
     ENET_API ENetPacket * enet_packet_create (const void *, size_t, enet_uint32);
     ENET_API ENetPacket * enet_packet_create_offset (const void *, size_t, size_t, enet_uint32);
     ENET_API void         enet_packet_destroy (ENetPacket *);
-    ENET_API int          enet_packet_resize  (ENetPacket *, size_t);
     ENET_API enet_uint32  enet_crc32 (const ENetBuffer *, size_t);
 
     ENET_API ENetHost * enet_host_create (const ENetAddress *, size_t, size_t, enet_uint32, enet_uint32);
@@ -1251,23 +1250,23 @@ extern "C" {
      * @returns the packet on success, NULL on failure
      */
     ENetPacket *enet_packet_create(const void *data, size_t dataLength, enet_uint32 flags) {
-        ENetPacket *packet = (ENetPacket *)enet_malloc(sizeof(ENetPacket));
-
-        if (packet == NULL) {
-            return NULL;
-        }
-
+        ENetPacket *packet;
         if (flags & ENET_PACKET_FLAG_NO_ALLOCATE) {
+            packet = (ENetPacket *)enet_malloc(sizeof (ENetPacket));
+            if (packet == NULL) {
+                return NULL;
+            }
+
             packet->data = (enet_uint8 *)data;
-        } else if (dataLength <= 0) {
-            packet->data = NULL;
-        } else {
-            packet->data = (enet_uint8 *)enet_malloc(dataLength);
-            if (packet->data == NULL) {
-                enet_free(packet);
+        }
+        else {
+            packet = (ENetPacket *)enet_malloc(sizeof (ENetPacket) + dataLength);
+            if (packet == NULL) {
                 return NULL;
             }
 
+            packet->data = (enet_uint8 *)packet + sizeof(ENetPacket);
+
             if (data != NULL) {
                 memcpy(packet->data, data, dataLength);
             }
@@ -1283,24 +1282,23 @@ extern "C" {
     }
 
     ENetPacket *enet_packet_create_offset(const void *data, size_t dataLength, size_t dataOffset, enet_uint32 flags) {
-        ENetPacket *packet = (ENetPacket *)enet_malloc(sizeof(ENetPacket));
-
-        if (packet == NULL) {
-            return NULL;
-        }
-
+        ENetPacket *packet;
         if (flags & ENET_PACKET_FLAG_NO_ALLOCATE) {
-            packet->data = (enet_uint8 *)data;
-        } else if ((dataLength + dataOffset) <= 0)   {
-            packet->data = NULL;
-        } else {
-            packet->data = (enet_uint8 *)enet_malloc(dataLength + dataOffset);
+            packet = (ENetPacket *)enet_malloc(sizeof (ENetPacket));
+            if (packet == NULL) {
+                return NULL;
+            }
 
-            if (packet->data == NULL) {
-                enet_free(packet);
+            packet->data = (enet_uint8 *)data;
+        }
+        else {
+            packet = (ENetPacket *)enet_malloc(sizeof (ENetPacket) + dataLength + dataOffset);
+            if (packet == NULL) {
                 return NULL;
             }
 
+            packet->data = (enet_uint8 *)packet + sizeof(ENetPacket);
+
             if (data != NULL) {
                 memcpy(packet->data + dataOffset, data, dataLength);
             }
@@ -1328,41 +1326,9 @@ extern "C" {
             (*packet->freeCallback)((void *)packet);
         }
 
-        if (!(packet->flags & ENET_PACKET_FLAG_NO_ALLOCATE) && packet->data != NULL) {
-            enet_free(packet->data);
-        }
-
         enet_free(packet);
     }
 
-    /** Attempts to resize the data in the packet to length specified in the
-     *  dataLength parameter
-     *  @param packet packet to resize
-     *  @param dataLength new size for the packet data
-     *  @returns 0 on success, < 0 on failure
-     */
-    int enet_packet_resize(ENetPacket *packet, size_t dataLength) {
-        enet_uint8 *newData;
-
-        if (dataLength <= packet->dataLength || (packet->flags & ENET_PACKET_FLAG_NO_ALLOCATE)) {
-            packet->dataLength = dataLength;
-            return 0;
-        }
-
-        newData = (enet_uint8 *)enet_malloc(dataLength);
-        if (newData == NULL) {
-            return -1;
-        }
-
-        memcpy(newData, packet->data, packet->dataLength);
-        enet_free(packet->data);
-
-        packet->data       = newData;
-        packet->dataLength = dataLength;
-
-        return 0;
-    }
-
     static int initializedCRC32 = 0;
     static enet_uint32 crcTable[256];