@@ -4794,8 +4794,7 @@ static int find_event_handle(struct pevent *pevent, struct event_format *event)
4794
4794
}
4795
4795
4796
4796
/**
4797
- * pevent_parse_event - parse the event format
4798
- * @pevent: the handle to the pevent
4797
+ * __pevent_parse_format - parse the event format
4799
4798
* @buf: the buffer storing the event format string
4800
4799
* @size: the size of @buf
4801
4800
* @sys: the system the event belongs to
@@ -4807,15 +4806,16 @@ static int find_event_handle(struct pevent *pevent, struct event_format *event)
4807
4806
*
4808
4807
* /sys/kernel/debug/tracing/events/.../.../format
4809
4808
*/
4810
- enum pevent_errno pevent_parse_event (struct pevent * pevent , const char * buf ,
4811
- unsigned long size , const char * sys )
4809
+ enum pevent_errno __pevent_parse_format (struct event_format * * eventp ,
4810
+ struct pevent * pevent , const char * buf ,
4811
+ unsigned long size , const char * sys )
4812
4812
{
4813
4813
struct event_format * event ;
4814
4814
int ret ;
4815
4815
4816
4816
init_input_buf (buf , size );
4817
4817
4818
- event = alloc_event ();
4818
+ * eventp = event = alloc_event ();
4819
4819
if (!event )
4820
4820
return PEVENT_ERRNO__MEM_ALLOC_FAILED ;
4821
4821
@@ -4849,9 +4849,6 @@ enum pevent_errno pevent_parse_event(struct pevent *pevent, const char *buf,
4849
4849
goto event_alloc_failed ;
4850
4850
}
4851
4851
4852
- /* Add pevent to event so that it can be referenced */
4853
- event -> pevent = pevent ;
4854
-
4855
4852
ret = event_read_format (event );
4856
4853
if (ret < 0 ) {
4857
4854
ret = PEVENT_ERRNO__READ_FORMAT_FAILED ;
@@ -4862,19 +4859,16 @@ enum pevent_errno pevent_parse_event(struct pevent *pevent, const char *buf,
4862
4859
* If the event has an override, don't print warnings if the event
4863
4860
* print format fails to parse.
4864
4861
*/
4865
- if (find_event_handle (pevent , event ))
4862
+ if (pevent && find_event_handle (pevent , event ))
4866
4863
show_warning = 0 ;
4867
4864
4868
4865
ret = event_read_print (event );
4866
+ show_warning = 1 ;
4867
+
4869
4868
if (ret < 0 ) {
4870
- show_warning = 1 ;
4871
4869
ret = PEVENT_ERRNO__READ_PRINT_FAILED ;
4872
4870
goto event_parse_failed ;
4873
4871
}
4874
- show_warning = 1 ;
4875
-
4876
- if (add_event (pevent , event ))
4877
- goto event_alloc_failed ;
4878
4872
4879
4873
if (!ret && (event -> flags & EVENT_FL_ISFTRACE )) {
4880
4874
struct format_field * field ;
@@ -4898,21 +4892,75 @@ enum pevent_errno pevent_parse_event(struct pevent *pevent, const char *buf,
4898
4892
return 0 ;
4899
4893
}
4900
4894
4901
- #define PRINT_ARGS 0
4902
- if (PRINT_ARGS && event -> print_fmt .args )
4903
- print_args (event -> print_fmt .args );
4904
-
4905
4895
return 0 ;
4906
4896
4907
4897
event_parse_failed :
4908
4898
event -> flags |= EVENT_FL_FAILED ;
4909
- /* still add it even if it failed */
4910
- if (add_event (pevent , event ))
4911
- goto event_alloc_failed ;
4912
-
4913
4899
return ret ;
4914
4900
4915
4901
event_alloc_failed :
4902
+ free (event -> system );
4903
+ free (event -> name );
4904
+ free (event );
4905
+ * eventp = NULL ;
4906
+ return ret ;
4907
+ }
4908
+
4909
+ /**
4910
+ * pevent_parse_format - parse the event format
4911
+ * @buf: the buffer storing the event format string
4912
+ * @size: the size of @buf
4913
+ * @sys: the system the event belongs to
4914
+ *
4915
+ * This parses the event format and creates an event structure
4916
+ * to quickly parse raw data for a given event.
4917
+ *
4918
+ * These files currently come from:
4919
+ *
4920
+ * /sys/kernel/debug/tracing/events/.../.../format
4921
+ */
4922
+ enum pevent_errno pevent_parse_format (struct event_format * * eventp , const char * buf ,
4923
+ unsigned long size , const char * sys )
4924
+ {
4925
+ return __pevent_parse_format (eventp , NULL , buf , size , sys );
4926
+ }
4927
+
4928
+ /**
4929
+ * pevent_parse_event - parse the event format
4930
+ * @pevent: the handle to the pevent
4931
+ * @buf: the buffer storing the event format string
4932
+ * @size: the size of @buf
4933
+ * @sys: the system the event belongs to
4934
+ *
4935
+ * This parses the event format and creates an event structure
4936
+ * to quickly parse raw data for a given event.
4937
+ *
4938
+ * These files currently come from:
4939
+ *
4940
+ * /sys/kernel/debug/tracing/events/.../.../format
4941
+ */
4942
+ enum pevent_errno pevent_parse_event (struct pevent * pevent , const char * buf ,
4943
+ unsigned long size , const char * sys )
4944
+ {
4945
+ struct event_format * event = NULL ;
4946
+ int ret = __pevent_parse_format (& event , pevent , buf , size , sys );
4947
+
4948
+ if (event == NULL )
4949
+ return ret ;
4950
+
4951
+ /* Add pevent to event so that it can be referenced */
4952
+ event -> pevent = pevent ;
4953
+
4954
+ if (add_event (pevent , event ))
4955
+ goto event_add_failed ;
4956
+
4957
+ #define PRINT_ARGS 0
4958
+ if (PRINT_ARGS && event -> print_fmt .args )
4959
+ print_args (event -> print_fmt .args );
4960
+
4961
+ return 0 ;
4962
+
4963
+ event_add_failed :
4916
4964
free (event -> system );
4917
4965
free (event -> name );
4918
4966
free (event );
@@ -5365,7 +5413,7 @@ static void free_formats(struct format *format)
5365
5413
free_format_fields (format -> fields );
5366
5414
}
5367
5415
5368
- static void free_event (struct event_format * event )
5416
+ void pevent_free_format (struct event_format * event )
5369
5417
{
5370
5418
free (event -> name );
5371
5419
free (event -> system );
@@ -5451,7 +5499,7 @@ void pevent_free(struct pevent *pevent)
5451
5499
}
5452
5500
5453
5501
for (i = 0 ; i < pevent -> nr_events ; i ++ )
5454
- free_event (pevent -> events [i ]);
5502
+ pevent_free_format (pevent -> events [i ]);
5455
5503
5456
5504
while (pevent -> handlers ) {
5457
5505
handle = pevent -> handlers ;
0 commit comments