-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlinkedlist.c
87 lines (74 loc) · 1.62 KB
/
linkedlist.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <time.h>
#include <string.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "linkedlist.h"
#include "pgmread.h"
#include "packet.h"
#include "client.h"
void push(linkedlist *list, struct Packet *packet, int set_sent_time)
{
if (debug)
printf("push\n");
node_s *node = malloc(sizeof(node_s));
if (!node)
{
printf("malloc node\n");
exit(EXIT_FAILURE);
}
node->packet = packet;
set_between(list->tail->prev, node, list->tail);
if (set_sent_time)
time(&node->sent_time);
list->size++;
}
void set_between(node_s *left, node_s *middle, node_s *right)
{
if (debug)
printf("set_between\n");
left->next = middle;
middle->prev = left;
middle->next = right;
right->prev = middle;
}
void pop(linkedlist *list, int free_packet)
{
if (debug)
printf("pop\n");
node_s *node = list->head->next;
if (node == list->tail)
return;
else
remove_node(node);
if (free_packet)
free_node_memory(node);
else
free(node);
list->size--;
}
void remove_node(node_s *node)
{
if (debug)
printf("remove_node\n");
node_s *left = node->prev;
node_s *right = node->next;
left->next = right;
right->prev = left;
}
void free_node_memory(node_s *node)
{
if (debug)
printf("free_node_memory\n");
packet *packet = node->packet;
payload *payload = packet->payload;
if (payload)
{
free(payload->filename);
struct Image *image = payload->img;
Image_free(image);
}
free(payload);
free(packet);
free(node);
}