aboutsummaryrefslogtreecommitdiffstats
path: root/trace-filter.c
diff options
context:
space:
mode:
Diffstat (limited to 'trace-filter.c')
-rw-r--r--trace-filter.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/trace-filter.c b/trace-filter.c
index 904c9cb..efdb5fa 100644
--- a/trace-filter.c
+++ b/trace-filter.c
@@ -2209,3 +2209,78 @@ int trace_filter_save_tasks(struct tracecmd_xml_handle *handle,
2209{ 2209{
2210 return 0; 2210 return 0;
2211} 2211}
2212
2213int trace_filter_load_events(struct event_filter *event_filter,
2214 struct tracecmd_xml_handle *handle,
2215 struct tracecmd_xml_system_node *node)
2216{
2217 struct tracecmd_xml_system_node *child;
2218 const char *name;
2219 const char *system;
2220 const char *event;
2221 const char *value;
2222 char *buffer;
2223
2224 while (node) {
2225 name = tracecmd_xml_node_type(node);
2226
2227 if (strcmp(name, "System") == 0) {
2228 system = tracecmd_xml_node_value(handle, node);
2229 pevent_filter_add_filter_str(event_filter,
2230 system, NULL);
2231 } else if (strcmp(name, "Event") == 0) {
2232 system = NULL;
2233 event = NULL;
2234 value = NULL;
2235 child = tracecmd_xml_node_child(node);
2236 if (!child)
2237 return -1;
2238 do {
2239 name = tracecmd_xml_node_type(child);
2240 if (strcmp(name, "System") == 0)
2241 system = tracecmd_xml_node_value(handle, child);
2242 else if (strcmp(name, "Name") == 0)
2243 event = tracecmd_xml_node_value(handle, child);
2244 else if (strcmp(name, "Advanced") == 0)
2245 value = tracecmd_xml_node_value(handle, child);
2246 child = tracecmd_xml_node_next(child);
2247 } while (child);
2248
2249 if (event || system) {
2250 if (event && system) {
2251 if (value) {
2252 buffer = malloc_or_die(strlen(event) +
2253 strlen(system) +
2254 strlen(value) + 3);
2255 sprintf(buffer, "%s/%s:%s",
2256 system, event, value);
2257 } else {
2258 buffer = malloc_or_die(strlen(event) +
2259 strlen(system) + 2);
2260 sprintf(buffer, "%s/%s",
2261 system, event);
2262 }
2263 } else {
2264 if (!event)
2265 event = system;
2266 if (value) {
2267 buffer = malloc_or_die(strlen(event) +
2268 strlen(value) + 2);
2269 sprintf(buffer, "%s:%s",
2270 event, value);
2271 } else {
2272 buffer = malloc_or_die(strlen(event) + 1);
2273 sprintf(buffer, "%s", event);
2274 }
2275 }
2276 pevent_filter_add_filter_str(event_filter,
2277 buffer, NULL);
2278 free(buffer);
2279 }
2280 }
2281
2282 node = tracecmd_xml_node_next(node);
2283 }
2284
2285 return 0;
2286}