2 * sparse/smatch_tracker.c
4 * Copyright (C) 2009 Dan Carpenter.
6 * Licensed under the Open Software License version 1.1
12 ALLOCATOR(tracker
, "trackers");
14 struct tracker
*alloc_tracker(int owner
, const char *name
, struct symbol
*sym
)
18 tmp
= __alloc_tracker(0);
19 tmp
->name
= alloc_string(name
);
25 void add_tracker(struct tracker_list
**list
, int owner
, const char *name
,
30 if (in_tracker_list(*list
, owner
, name
, sym
))
32 tmp
= alloc_tracker(owner
, name
, sym
);
33 add_ptr_list(list
, tmp
);
36 void add_tracker_expr(struct tracker_list
**list
, int owner
, struct expression
*expr
)
41 name
= get_variable_from_expr(expr
, &sym
);
44 add_tracker(list
, owner
, name
, sym
);
49 void del_tracker(struct tracker_list
**list
, int owner
, const char *name
,
54 FOR_EACH_PTR(*list
, tmp
) {
55 if (tmp
->owner
== owner
&& tmp
->sym
== sym
56 && !strcmp(tmp
->name
, name
)) {
57 DELETE_CURRENT_PTR(tmp
);
61 } END_FOR_EACH_PTR(tmp
);
64 int in_tracker_list(struct tracker_list
*list
, int owner
, const char *name
,
69 FOR_EACH_PTR(list
, tmp
) {
70 if (tmp
->owner
== owner
&& tmp
->sym
== sym
71 && !strcmp(tmp
->name
, name
))
73 } END_FOR_EACH_PTR(tmp
);
77 struct tracker_list
*clone_tracker_list(struct tracker_list
*orig_list
)
80 struct tracker_list
*to_list
= NULL
;
82 FOR_EACH_PTR(orig_list
, tmp
) {
83 add_ptr_list(&to_list
, tmp
);
84 } END_FOR_EACH_PTR(tmp
);
89 void free_tracker_list(struct tracker_list
**list
)
91 __free_ptr_list((struct ptr_list
**)list
);
94 void free_trackers_and_list(struct tracker_list
**list
)
98 FOR_EACH_PTR(*list
, tmp
) {
99 free_string(tmp
->name
);
101 } END_FOR_EACH_PTR(tmp
);
102 free_tracker_list(list
);