You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
SQA-Homework/afl_fuzz/tests/BASIC/linked_list.cc

61 lines
1.2 KiB

void *create_linked_list(void *value){
void *output;
output = kmalloc(POINTER_SIZE*3);
((void **) output)[0] = value;
((void **) output)[1] = (void *) 0;
((void **) output)[2] = (void *) 0;
return output;
}
void free_linked_list(void *list, void (*free_value)(void *)){
void *next_list;
while((int) list){
free_value(((void **) list)[0]);
next_list = ((void **) list)[1];
kfree(list);
list = next_list;
}
}
void *get_list_value(void *list){
return ((void **) list)[0];
}
void *next_list(void *list){
return ((void **) list)[1];
}
void *previous_list(void *list){
return ((void **) list)[2];
}
void add_value(void *list, void *value){
void *new_list;
void *temp;
new_list = create_linked_list(value);
temp = ((void **) list)[1];
((void **) list)[1] = new_list;
((void **) new_list)[1] = temp;
((void **) new_list)[2] = list;
if((int) temp)
((void **) temp)[2] = new_list;
}
void remove_value(void *list, void (*free_value)(void *)){
void *next;
void *prev;
free_value(((void **) list)[0]);
next = ((void **) list)[1];
prev = ((void **) list)[2];
kfree(list);
if((int) next)
((void **) next)[2] = prev;
if((int) prev)
((void **) prev)[1] = next;
}