On Fri, 10 Sep 2021 19:38:55 +0300 "Yordan Karadzhov (VMware)" <y.karadz@xxxxxxxxx> wrote: > The current version of the API makes it hard to add multiple sort keys > to a histogram. The only way to do this is to use the variadic arguments, > however in order to do this the caller have to know the number of sort > keys at compile time, because the method overwrite all previously added > keys. The problem is addressed by splitting tracefs_hist_add_sort_key() > into two methods - one that overwrite and one that does not. > > Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@xxxxxxxxx> > --- > include/tracefs.h | 4 +++- > src/tracefs-hist.c | 21 +++++++++++++++++++-- > 2 files changed, 22 insertions(+), 3 deletions(-) > > diff --git a/include/tracefs.h b/include/tracefs.h > index 64fbb3f..c3fa1d6 100644 > --- a/include/tracefs.h > +++ b/include/tracefs.h > @@ -303,7 +303,9 @@ int tracefs_hist_add_key(struct tracefs_hist *hist, const char *key, > enum tracefs_hist_key_type type); > int tracefs_hist_add_value(struct tracefs_hist *hist, const char *value); > int tracefs_hist_add_sort_key(struct tracefs_hist *hist, > - const char *sort_key, ...); > + char *sort_key); Why did you remove the const? The add_sort_key() takes a const and makes a copy of it. > +int tracefs_hist_sort_key(struct tracefs_hist *hist, > + const char *sort_key, ...); > int tracefs_hist_sort_key_direction(struct tracefs_hist *hist, > const char *sort_key, > enum tracefs_hist_sort_direction dir); > diff --git a/src/tracefs-hist.c b/src/tracefs-hist.c > index 8501d64..2ea90d9 100644 > --- a/src/tracefs-hist.c > +++ b/src/tracefs-hist.c > @@ -453,6 +453,23 @@ add_sort_key(struct tracefs_hist *hist, const char *sort_key, char **list) > return tracefs_list_add(list, sort_key); > } > Needs a kerneldoc documentation header. > +int tracefs_hist_add_sort_key(struct tracefs_hist *hist, > + char *sort_key) > +{ > + char **list = hist->sort; > + > + if (!hist || !sort_key) > + return -1; > + > + list = add_sort_key(hist, sort_key, hist->sort); > + if (!list) > + return -1; > + > + hist->sort = list; > + > + return 0; > +} > + > /** > * tracefs_hist_add_sort_key - add a key for sorting the histogram The above name needs to be updated. > * @hist: The histogram to add the sort key to > @@ -464,8 +481,8 @@ add_sort_key(struct tracefs_hist *hist, const char *sort_key, char **list) > * > * Returns 0 on success, -1 on error. > */ > -int tracefs_hist_add_sort_key(struct tracefs_hist *hist, > - const char *sort_key, ...) > +int tracefs_hist_sort_key(struct tracefs_hist *hist, How about if we call this: tracefs_hist_replace_sort_keys() I think that would be a more intuitive name. -- Steve > + const char *sort_key, ...) > { > char **list = NULL; > char **tmp;