소스 검색

added enet_packet_create_offset method

Vladislav Gritsenko 6 년 전
부모
커밋
e52ea02f76
4개의 변경된 파일73개의 추가작업 그리고 3개의 파일을 삭제
  1. 36 1
      include/enet.h
  2. 2 1
      include/enet/enet.h
  3. 1 1
      package.json
  4. 34 0
      src/packet.c

+ 36 - 1
include/enet.h

@@ -443,7 +443,7 @@ extern void   enet_free (void *);
 
 #define ENET_VERSION_MAJOR 1
 #define ENET_VERSION_MINOR 4
-#define ENET_VERSION_PATCH 0
+#define ENET_VERSION_PATCH 1
 #define ENET_VERSION_CREATE(major, minor, patch) (((major)<<16) | ((minor)<<8) | (patch))
 #define ENET_VERSION_GET_MAJOR(version) (((version)>>16)&0xFF)
 #define ENET_VERSION_GET_MINOR(version) (((version)>>8)&0xFF)
@@ -971,6 +971,7 @@ ENET_API int enet_address_get_host (const ENetAddress * address, char * hostName
 /** @} */
 
 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);
@@ -2362,6 +2363,40 @@ extern size_t enet_protocol_command_size (enet_uint8);
         return packet;
     }
 
+    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;
+
+        if (flags & ENET_PACKET_FLAG_NO_ALLOCATE)
+          packet -> data = (enet_uint8 *) data;
+        else
+        if (dataLength <= 0)
+          packet -> data = NULL;
+        else
+        {
+           packet -> data = (enet_uint8 *) enet_malloc (dataLength + dataOffset);
+           if (packet -> data == NULL)
+           {
+              enet_free (packet);
+              return NULL;
+           }
+
+           if (data != NULL)
+             memcpy (packet -> data + dataOffset, data, dataLength);
+        }
+
+        packet -> referenceCount = 0;
+        packet -> flags = flags;
+        packet -> dataLength = dataLength;
+        packet -> freeCallback = NULL;
+        packet -> userData = NULL;
+
+        return packet;
+    }
+
     /** Destroys the packet and deallocates its data.
         @param packet packet to be destroyed
     */

+ 2 - 1
include/enet/enet.h

@@ -27,7 +27,7 @@ extern "C"
 
 #define ENET_VERSION_MAJOR 1
 #define ENET_VERSION_MINOR 4
-#define ENET_VERSION_PATCH 0
+#define ENET_VERSION_PATCH 1
 #define ENET_VERSION_CREATE(major, minor, patch) (((major)<<16) | ((minor)<<8) | (patch))
 #define ENET_VERSION_GET_MAJOR(version) (((version)>>16)&0xFF)
 #define ENET_VERSION_GET_MINOR(version) (((version)>>8)&0xFF)
@@ -555,6 +555,7 @@ ENET_API int enet_address_get_host (const ENetAddress * address, char * hostName
 /** @} */
 
 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);

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "enet.c",
-  "version": "1.4.0",
+  "version": "1.4.1",
   "description": "ENet - Simple, lightweight and reliable UDP networking library written on pure C.",
   "main": "include/enet.h",
   "directories": {

+ 34 - 0
src/packet.c

@@ -50,6 +50,40 @@ enet_packet_create (const void * data, size_t dataLength, enet_uint32 flags)
     return packet;
 }
 
+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;
+
+    if (flags & ENET_PACKET_FLAG_NO_ALLOCATE)
+      packet -> data = (enet_uint8 *) data;
+    else
+    if (dataLength <= 0)
+      packet -> data = NULL;
+    else
+    {
+       packet -> data = (enet_uint8 *) enet_malloc (dataLength + dataOffset);
+       if (packet -> data == NULL)
+       {
+          enet_free (packet);
+          return NULL;
+       }
+
+       if (data != NULL)
+         memcpy (packet -> data + dataOffset, data, dataLength);
+    }
+
+    packet -> referenceCount = 0;
+    packet -> flags = flags;
+    packet -> dataLength = dataLength;
+    packet -> freeCallback = NULL;
+    packet -> userData = NULL;
+
+    return packet;
+}
+
 /** Destroys the packet and deallocates its data.
     @param packet packet to be destroyed
 */