aboutsummaryrefslogtreecommitdiff
path: root/src/packet.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/packet.c')
-rw-r--r--src/packet.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/packet.c b/src/packet.c
index c5ece05..c778965 100644
--- a/src/packet.c
+++ b/src/packet.c
@@ -1,5 +1,6 @@
#include <gran/packet.h>
#include <stdlib.h>
+#include <assert.h>
struct packet {
enum packet_state state;
@@ -13,7 +14,7 @@ struct packet {
struct packet *create_packet(enum packet_type type, uintptr_t addr, size_t size)
{
- struct packet *pkt = calloc(1, sizeof(struct packet) + size);
+ struct packet *pkt = malloc(sizeof(struct packet) + size);
if (!pkt)
return NULL;
@@ -28,7 +29,7 @@ struct packet *create_packet(enum packet_type type, uintptr_t addr, size_t size)
struct packet *create_packet_with(enum packet_type type, uintptr_t addr,
size_t size, void *data)
{
- struct packet *pkt = calloc(1, sizeof(struct packet));
+ struct packet *pkt = malloc(sizeof(struct packet));
if (!pkt)
return NULL;
@@ -40,6 +41,18 @@ struct packet *create_packet_with(enum packet_type type, uintptr_t addr,
return pkt;
}
+struct packet *reuse_packet(struct packet *pkt, enum packet_type type,
+ uintptr_t addr, size_t size, void *data)
+{
+ assert(pkt->state == PACKET_DONE);
+ pkt->state = PACKET_INIT;
+ pkt->type = type;
+ pkt->addr = addr;
+ pkt->size = size;
+ pkt->data = data;
+ return pkt;
+}
+
enum packet_type packet_type(struct packet *pkt)
{
return pkt->type;