-
Notifications
You must be signed in to change notification settings - Fork 0
/
malloc_track.c
66 lines (56 loc) · 1.39 KB
/
malloc_track.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
#include "malloc_track.h"
#include "misc.h"
/* Create node from ptr and insert node at head of linked list */
/* Returns 0 if ptr is null */
/* Returns 1 if node insertion succeeds */
int insertNode(LLNode **head, void *ptr) {
LLNode *temp;
if (ptr == NULL)
return 0;
temp = (LLNode*)SafeMalloc(sizeof(LLNode));
temp->ptr = ptr;
/* fprintf(stderr, "debug insertNode: (ptr = %x)(head = %x)\n", ptr, *head); */
if (*head == NULL) {
/* linked list is empty */
*head = temp;
(*head)->next = NULL;
} else {
temp->next = *head;
*head = temp;
}
return 1;
}
/* Remove node based with ptr data from linked list */
/* Returns 0 if ptr is null or node cannot be found */
/* Returns 1 if node removal succeeds */
int removeNode(LLNode **head, void *ptr) {
LLNode *prev, *curr;
if (ptr == NULL) {
return 0;
}
/* fprintf(stderr, "debug removeNode: (ptr = %x)(head = %x)\n", ptr, *head); */
curr = *head;
while (curr != NULL) {
if (curr->ptr == ptr) {
if (curr == *head) {
*head = curr->next;
free(curr);
return 1;
} else {
prev->next = curr->next;
free(curr);
return 1;
}
} else {
prev = curr;
curr = curr->next;
}
}
return 0;
}
/* Checks if linked list is empty */
/* Returns 0 if not empty */
/* Returns 1 if empty */
int isEmpty(LLNode **head) {
return *head == NULL;
}