summaryrefslogtreecommitdiff
path: root/tools/perf/util/strlist.c
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2009-08-15 05:58:45 +0900
committerPaul Mundt <lethal@linux-sh.org>2009-08-15 05:58:45 +0900
commitd2dcd9101b1a940ce8496601ba871e47f84881ec (patch)
tree3de9cb11379d51eb01b568a20c8d7c585c89d10e /tools/perf/util/strlist.c
parent8010fbe7a67c2f993cbb11b9d8b7e98528256dd1 (diff)
parent606b4c992f3b28f906100f1b6eb49059909d8da7 (diff)
downloadlinux-d2dcd9101b1a940ce8496601ba871e47f84881ec.tar.gz
linux-d2dcd9101b1a940ce8496601ba871e47f84881ec.tar.xz
Merge branch 'master' into sh/cachetlb
Diffstat (limited to 'tools/perf/util/strlist.c')
-rw-r--r--tools/perf/util/strlist.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/tools/perf/util/strlist.c b/tools/perf/util/strlist.c
index 025a78edfffe..7ad38171dc2b 100644
--- a/tools/perf/util/strlist.c
+++ b/tools/perf/util/strlist.c
@@ -64,6 +64,7 @@ int strlist__add(struct strlist *self, const char *new_entry)
rb_link_node(&sn->rb_node, parent, p);
rb_insert_color(&sn->rb_node, &self->entries);
+ ++self->nr_entries;
return 0;
}
@@ -155,8 +156,9 @@ struct strlist *strlist__new(bool dupstr, const char *slist)
struct strlist *self = malloc(sizeof(*self));
if (self != NULL) {
- self->entries = RB_ROOT;
- self->dupstr = dupstr;
+ self->entries = RB_ROOT;
+ self->dupstr = dupstr;
+ self->nr_entries = 0;
if (slist && strlist__parse_list(self, slist) != 0)
goto out_error;
}
@@ -182,3 +184,17 @@ void strlist__delete(struct strlist *self)
free(self);
}
}
+
+struct str_node *strlist__entry(const struct strlist *self, unsigned int idx)
+{
+ struct rb_node *nd;
+
+ for (nd = rb_first(&self->entries); nd; nd = rb_next(nd)) {
+ struct str_node *pos = rb_entry(nd, struct str_node, rb_node);
+
+ if (!idx--)
+ return pos;
+ }
+
+ return NULL;
+}