From: "Steven Rostedt (VMware)" <rostedt@xxxxxxxxxxx> Add a way to remove the last item of a string list. This will be needed to revert changes made to the new tracefs_synth structure that will have more than one tracefs_list char ** that must be the same size. If one is successfully updated, but the next one fails, the first one needs to be reverted. Signed-off-by: Steven Rostedt (VMware) <rostedt@xxxxxxxxxxx> --- include/tracefs.h | 1 + src/tracefs-utils.c | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/include/tracefs.h b/include/tracefs.h index 2649417654b1..4dd77b9c4119 100644 --- a/include/tracefs.h +++ b/include/tracefs.h @@ -66,6 +66,7 @@ int tracefs_error_clear(struct tracefs_instance *instance); void tracefs_list_free(char **list); char **tracefs_list_add(char **list, const char *string); int tracefs_list_size(char **list); +int tracefs_list_pop(char **list); /** * tracefs_trace_on_get_fd - Get a file descriptor of "tracing_on" in given instance diff --git a/src/tracefs-utils.c b/src/tracefs-utils.c index 600cdf2acefc..63bb413298fe 100644 --- a/src/tracefs-utils.c +++ b/src/tracefs-utils.c @@ -448,6 +448,32 @@ char **tracefs_list_add(char **list, const char *string) return list; } +/** + * tracefs_list_pop - Removes the last string added + * @list: The list to remove the last event from + * + * Returns 0 on success, -1 on error. + * Returns 1 if the list is empty or NULL. + */ +int tracefs_list_pop(char **list) +{ + unsigned long size; + + if (!list || list[0]) + return 1; + + list--; + size = *(unsigned long *)list; + /* size must be greater than zero */ + if (!size) + return -1; + size--; + *list = (char *)size; + list++; + list[size] = '\0'; + return 0; +} + /** * tracefs_list_size - Return the number of strings in the list * @list: The list to determine the size. -- 2.30.2