[c] record C lists FP from #120
Summary: See https://github.com/facebook/infer/issues/120 Reviewed By: dulmarod Differential Revision: D8443475 fbshipit-source-id: c0f76ef52master
parent
398e97183f
commit
b23449a7d2
@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright (c) 2018-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef struct list_elem_s {
|
||||
void* data;
|
||||
struct list_elem_s* next;
|
||||
} list_elem_t;
|
||||
|
||||
typedef struct list_s {
|
||||
list_elem_t* first;
|
||||
} list_t;
|
||||
|
||||
list_t* list_init() { return calloc(1, sizeof(list_t)); }
|
||||
|
||||
void list_append(list_t* lst, list_elem_t* elem) {
|
||||
list_elem_t* iter;
|
||||
|
||||
if (NULL == lst->first) {
|
||||
lst->first = elem;
|
||||
} else {
|
||||
iter = lst->first;
|
||||
while (NULL != iter->next) {
|
||||
iter = iter->next;
|
||||
}
|
||||
iter->next = elem;
|
||||
}
|
||||
}
|
||||
|
||||
list_elem_t* list_add(list_t* lst, void* data) {
|
||||
list_elem_t* entry;
|
||||
|
||||
entry = calloc(1, sizeof(list_elem_t));
|
||||
if (NULL == entry) {
|
||||
return NULL;
|
||||
}
|
||||
entry->data = data;
|
||||
list_append(lst, entry);
|
||||
return (entry);
|
||||
}
|
||||
|
||||
void list_elem_free(list_elem_t* ptr) {
|
||||
if (NULL == ptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
list_elem_free(ptr->next);
|
||||
free(ptr);
|
||||
}
|
||||
|
||||
void list_free(list_t* ptr) {
|
||||
list_elem_free(ptr->first);
|
||||
free(ptr);
|
||||
}
|
||||
|
||||
int FP_list_build_and_free_good() {
|
||||
int val_data = 21;
|
||||
|
||||
list_t* list = list_init();
|
||||
if (NULL == list) {
|
||||
return 1;
|
||||
}
|
||||
if (NULL == list_add(list, &val_data)) {
|
||||
list_free(list);
|
||||
return 1;
|
||||
}
|
||||
list_free(list);
|
||||
return 0;
|
||||
}
|
Loading…
Reference in new issue