aboutsummaryrefslogtreecommitdiffstats
path: root/trace-util.c
diff options
context:
space:
mode:
Diffstat (limited to 'trace-util.c')
-rw-r--r--trace-util.c47
1 files changed, 31 insertions, 16 deletions
diff --git a/trace-util.c b/trace-util.c
index 01894f8..e128188 100644
--- a/trace-util.c
+++ b/trace-util.c
@@ -714,6 +714,28 @@ static int read_header(struct pevent *pevent, const char *events_dir)
714struct pevent *tracecmd_local_events(const char *tracing_dir) 714struct pevent *tracecmd_local_events(const char *tracing_dir)
715{ 715{
716 struct pevent *pevent = NULL; 716 struct pevent *pevent = NULL;
717
718 pevent = pevent_alloc();
719 if (!pevent)
720 return NULL;
721
722 if (tracecmd_fill_local_events(tracing_dir, pevent)) {
723 pevent_free(pevent);
724 pevent = NULL;
725 }
726
727 return pevent;
728}
729
730/**
731 * tracecmd_fill_local_events - Fill a pevent with the events on system
732 * @tracing_dir: The directory that contains the events.
733 * @pevent: Allocated pevent which will be filled
734 *
735 * Returns whether the operation succeeded
736 */
737int tracecmd_fill_local_events(const char *tracing_dir, struct pevent *pevent)
738{
717 struct dirent *dent; 739 struct dirent *dent;
718 char *events_dir; 740 char *events_dir;
719 struct stat st; 741 struct stat st;
@@ -721,35 +743,27 @@ struct pevent *tracecmd_local_events(const char *tracing_dir)
721 int ret, failure = 0; 743 int ret, failure = 0;
722 744
723 if (!tracing_dir) 745 if (!tracing_dir)
724 return NULL; 746 return -1;
725 747
726 events_dir = append_file(tracing_dir, "events"); 748 events_dir = append_file(tracing_dir, "events");
727 if (!events_dir) 749 if (!events_dir)
728 return NULL; 750 return -1;
729 751
730 ret = stat(events_dir, &st); 752 ret = stat(events_dir, &st);
731 if (ret < 0 || !S_ISDIR(st.st_mode)) { 753 if (ret < 0 || !S_ISDIR(st.st_mode)) {
732 failure = 1; 754 ret = -1;
733 goto out_free; 755 goto out_free;
734 } 756 }
735 757
736 dir = opendir(events_dir); 758 dir = opendir(events_dir);
737 if (!dir) { 759 if (!dir) {
738 failure = 1; 760 ret = -1;
739 goto out_free;
740 }
741
742 pevent = pevent_alloc();
743 if (!pevent) {
744 failure = 1;
745 goto out_free; 761 goto out_free;
746 } 762 }
747 763
748 ret = read_header(pevent, events_dir); 764 ret = read_header(pevent, events_dir);
749 if (ret < 0) { 765 if (ret < 0) {
750 pevent_free(pevent); 766 ret = -1;
751 pevent = NULL;
752 failure = 1;
753 goto out_free; 767 goto out_free;
754 } 768 }
755 769
@@ -777,14 +791,15 @@ struct pevent *tracecmd_local_events(const char *tracing_dir)
777 } 791 }
778 792
779 closedir(dir); 793 closedir(dir);
794 /* always succeed because parsing failures are not critical */
795 ret = 0;
780 796
781 out_free: 797 out_free:
782 free(events_dir); 798 free(events_dir);
783 799
784 if (pevent) 800 pevent->parsing_failures = failure;
785 pevent->parsing_failures = failure;
786 801
787 return pevent; 802 return ret;
788} 803}
789 804
790/** 805/**