small clean up.
[smatch.git] / smatch_tracker.c
blobad55eb7c22d57e474e657ac5f60b08b9b592ba68
1 #include "smatch.h"
3 ALLOCATOR(tracker, "trackers");
5 struct tracker *alloc_tracker(int owner, const char *name, struct symbol *sym)
7 struct tracker *tmp;
9 tmp = __alloc_tracker(0);
10 tmp->name = alloc_string(name);
11 tmp->owner = owner;
12 tmp->sym = sym;
13 return tmp;
16 void add_tracker(struct tracker_list **list, int owner, const char *name,
17 struct symbol *sym)
19 struct tracker *tmp;
21 if (in_tracker_list(*list, owner, name, sym))
22 return;
23 tmp = alloc_tracker(owner, name, sym);
24 add_ptr_list(list, tmp);
27 void del_tracker(struct tracker_list **list, int owner, const char *name,
28 struct symbol *sym)
30 struct tracker *tmp;
32 FOR_EACH_PTR(*list, tmp) {
33 if (tmp->owner == owner && tmp->sym == sym
34 && !strcmp(tmp->name, name)) {
35 DELETE_CURRENT_PTR(tmp);
36 __free_tracker(tmp);
37 return;
39 } END_FOR_EACH_PTR(tmp);
42 int in_tracker_list(struct tracker_list *list, int owner, const char *name,
43 struct symbol *sym)
45 struct tracker *tmp;
47 FOR_EACH_PTR(list, tmp) {
48 if (tmp->owner == owner && tmp->sym == sym
49 && !strcmp(tmp->name, name))
50 return 1;
51 } END_FOR_EACH_PTR(tmp);
52 return 0;
55 void free_tracker_list(struct tracker_list **list)
57 __free_ptr_list((struct ptr_list **)list);
60 void free_trackers_and_list(struct tracker_list **list)
62 struct tracker *tmp;
64 FOR_EACH_PTR(*list, tmp) {
65 free_string(tmp->name);
66 __free_tracker(tmp);
67 } END_FOR_EACH_PTR(tmp);
68 free_tracker_list(list);