On Wed, 16 Jan 2019 21:18:32 +0200 Tzvetomir Stoyanov <tstoyanov@xxxxxxxxxx> wrote: > +static int tracecmd_fill_local_events_system(const char *tracing_dir, > + struct tep_handle *pevent, > + char *sys_name) > { > struct dirent *dent; > char *events_dir; > @@ -1189,7 +1161,8 @@ int tracecmd_fill_local_events(const char *tracing_dir, struct tep_handle *peven > if (strcmp(name, ".") == 0 || > strcmp(name, "..") == 0) > continue; > - > + if (sys_name && strcmp(name, sys_name)) Small nit. Please compare as: strcmp(name, sys_name) != 0 This to make it look like it is not equal. One of the flaws of the "strcmp" is that a match is false and a non match is true, which makes it likely to be done wrong :-p If you noticed, the strcmp() in the previous if uses "== 0" as a way to say "this is true on match" > + continue; > sys = append_file(events_dir, name); > ret = stat(sys, &st); > if (ret < 0 || !S_ISDIR(st.st_mode)) { > @@ -1217,6 +1190,58 @@ int tracecmd_fill_local_events(const char *tracing_dir, struct tep_handle *peven > return ret; > } > > +/** > + * tracecmd_local_events_system - create a tep from the > + * events of the specified subsystem. Keep the above on one line, even though it breaks the 80 character limit. -- Steve > + * > + * @tracing_dir: The directory that contains the events. > + * @sys_name: Name of the subsystem, to load events from > + * > + * Returns a tep structure that contains the tep local to > + * the system. > + */ > +struct tep_handle *tracecmd_local_events_system(const char *tracing_dir, > + char *sys_name) > +{ > + struct tep_handle *tep = NULL; > + > + tep = tep_alloc(); > + if (!tep) > + return NULL; > + > + if (tracecmd_fill_local_events_system(tracing_dir, tep, sys_name)) { > + tep_free(tep); > + tep = NULL; > + } > + > + return tep; > +} >