#include <lttv/lttv.h>
#include <lttv/tracecontext.h>
#include <ltt/event.h>
-#include <ltt/facility.h>
#include <ltt/trace.h>
-#include <ltt/type.h>
#include <lttv/filter.h>
#include <errno.h>
static LttField *
find_field(LttEventType *et, const GQuark field)
{
- GQuark name;
+ LttField *f;
if(field == 0) return NULL;
- return ltt_eventtype_field_by_name(et, field);
+ f = ltt_eventtype_field_by_name(et, field);
+ if (!f) {
+ g_warning("Cannot find field %s in event %s.%s", g_quark_to_string(field),
+ g_quark_to_string(ltt_facility_name(ltt_eventtype_facility(et))),
+ g_quark_to_string(ltt_eventtype_name(et)));
+ }
+
+ return f;
}
LttvTraceHookByFacility *lttv_trace_hook_get_fac(LttvTraceHook *th,
return &g_array_index(th->fac_index, LttvTraceHookByFacility, facility_id);
}
-/* Get the first facility corresponding to the name. As the types must be
- * compatible, it is relevant to use the field name and sizes of the first
- * facility to create data structures and assume the data will be compatible
- * thorough the trace */
-LttvTraceHookByFacility *lttv_trace_hook_get_first(LttvTraceHook *th)
+struct marker_info *lttv_trace_hook_get_marker(LttvTraceHook *th)
{
g_assert(th->fac_list->len > 0);
return g_array_index(th->fac_list, LttvTraceHookByFacility*, 0);
/* Returns 0 on success, -1 if fails. */
gint
-lttv_trace_find_hook(LttTrace *t, GQuark facility, GQuark event,
+lttv_trace_find_hook(LttTrace *t, GQuark event,
GQuark field1, GQuark field2, GQuark field3, LttvHook h, gpointer hook_data,
LttvTraceHook *th)
{
- LttFacility *f;
-
LttEventType *et, *first_et;
- GArray *facilities;
-
- guint i, fac_id, ev_id;
-
- LttvTraceHookByFacility *thf, *first_thf;
+ struct marker_info *info;
- facilities = ltt_trace_facility_get_by_name(t, facility);
+ guint i, ev_id;
- if(unlikely(facilities == NULL)) goto facility_error;
+ head = marker_get_info_from_name(t, event);
- th->fac_index = g_array_sized_new(FALSE, TRUE,
- sizeof(LttvTraceHookByFacility),
- NUM_FACILITIES);
- th->fac_index = g_array_set_size(th->fac_index, NUM_FACILITIES);
-
- th->fac_list = g_array_sized_new(FALSE, TRUE,
- sizeof(LttvTraceHookByFacility*),
- facilities->len);
- th->fac_list = g_array_set_size(th->fac_list, facilities->len);
-
- fac_id = g_array_index(facilities, guint, 0);
- f = ltt_trace_get_facility_by_num(t, fac_id);
-
- et = ltt_facility_eventtype_get_by_name(f, event);
- if(unlikely(et == NULL)) goto event_error;
-
- thf = &g_array_index(th->fac_index, LttvTraceHookByFacility, fac_id);
- g_array_index(th->fac_list, LttvTraceHookByFacility*, 0) = thf;
+ if(unlikely(head == NULL))
+ goto facility_error;
- ev_id = ltt_eventtype_id(et);
+ ev_id = marker_get_id_from_info(t, info);
- thf->h = h;
- thf->id = GET_HOOK_ID(fac_id, ev_id);
- thf->f1 = find_field(et, field1);
- thf->f2 = find_field(et, field2);
- thf->f3 = find_field(et, field3);
- thf->hook_data = hook_data;
+ th->h = h;
+ th->id = ev_id;
+ th->f1 = find_field(et, field1);
+ th->f2 = find_field(et, field2);
+ th->f3 = find_field(et, field3);
+ th->hook_data = hook_data;
first_thf = thf;
first_et = et;
ltt_tracefile_get_event(tfc->tf),
tfc->tf,
tfc->t_context->t,
- tfc)) {
+ tfc,NULL,NULL)) {
return FALSE;
}
if(sd->filter2 != NULL && sd->filter2->head != NULL &&
ltt_tracefile_get_event(tfc->tf),
tfc->tf,
tfc->t_context->t,
- tfc)) {
+ tfc,NULL,NULL)) {
return FALSE;
}
if(sd->filter3 != NULL && sd->filter3->head != NULL &&
ltt_tracefile_get_event(tfc->tf),
tfc->tf,
tfc->t_context->t,
- tfc)) {
+ tfc,NULL,NULL)) {
return FALSE;
}
ltt_tracefile_get_event(tfc->tf),
tfc->tf,
tfc->t_context->t,
- tfc)) {
+ tfc,NULL,NULL)) {
return FALSE;
}
if(sd->filter2 != NULL && sd->filter2->head != NULL &&
ltt_tracefile_get_event(tfc->tf),
tfc->tf,
tfc->t_context->t,
- tfc)) {
+ tfc,NULL,NULL)) {
return FALSE;
}
if(sd->filter3 != NULL && sd->filter3->head != NULL &&
ltt_tracefile_get_event(tfc->tf),
tfc->tf,
tfc->t_context->t,
- tfc)) {
+ tfc,NULL,NULL)) {
return FALSE;
}