projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Improve the lttng list feature
[lttng-tools.git]
/
ltt-sessiond
/
kernel-ctl.c
diff --git
a/ltt-sessiond/kernel-ctl.c
b/ltt-sessiond/kernel-ctl.c
index ef3afb714bf1bebe6b96376f484f15044f2e4555..09a3763eb835c30aaaa25fca4081f27d34aeb881 100644
(file)
--- a/
ltt-sessiond/kernel-ctl.c
+++ b/
ltt-sessiond/kernel-ctl.c
@@
-545,18
+545,16
@@
error:
}
/*
}
/*
- * kernel_list_events
- *
- * Get the event list from the kernel tracer and return that list in the CTF
- * format.
+ * Get the event list from the kernel tracer and return the number of elements.
*/
*/
-ssize_t kernel_list_events(int tracer_fd,
char **list
)
+ssize_t kernel_list_events(int tracer_fd,
struct lttng_event **events
)
{
{
- int fd;
- char *
buf, *line = NULL
;
- size_t nb
, nbmem, total
= 0;
+ int fd
, pos
;
+ char *
event
;
+ size_t nb
mem, count
= 0;
ssize_t size;
FILE *fp;
ssize_t size;
FILE *fp;
+ struct lttng_event *elist;
fd = kernctl_tracepoint_list(tracer_fd);
if (fd < 0) {
fd = kernctl_tracepoint_list(tracer_fd);
if (fd < 0) {
@@
-575,29
+573,29
@@
ssize_t kernel_list_events(int tracer_fd, char **list)
* See kernel-ctl.h for explanation of this value
*/
nbmem = KERNEL_EVENT_LIST_SIZE;
* See kernel-ctl.h for explanation of this value
*/
nbmem = KERNEL_EVENT_LIST_SIZE;
-
buf = malloc(
nbmem);
+
elist = malloc(sizeof(struct lttng_event) *
nbmem);
- while ((size =
getline(&line, &nb, fp)) != -
1) {
- if (
total + size
> nbmem) {
+ while ((size =
fscanf(fp, "event { name = %m[^;]; };%n\n", &event, &pos)) ==
1) {
+ if (
count
> nbmem) {
DBG("Reallocating event list from %zd to %zd bytes", nbmem,
DBG("Reallocating event list from %zd to %zd bytes", nbmem,
-
total + size
+ KERNEL_EVENT_LIST_SIZE);
+
nbmem
+ KERNEL_EVENT_LIST_SIZE);
/* Adding the default size again */
/* Adding the default size again */
- nbmem
= total + size +
KERNEL_EVENT_LIST_SIZE;
-
buf = realloc(buf
, nbmem);
- if (
buf
== NULL) {
+ nbmem
+=
KERNEL_EVENT_LIST_SIZE;
+
elist = realloc(elist
, nbmem);
+ if (
elist
== NULL) {
perror("realloc list events");
goto error;
}
}
perror("realloc list events");
goto error;
}
}
-
memcpy(buf + total, line, size
);
-
total += size
;
+
strncpy(elist[count].name, event, strlen(event)
);
+
count++
;
}
}
- *
list = buf
;
+ *
events = elist
;
- DBG("Kernel list events done
"
);
+ DBG("Kernel list events done
(%ld events)", count
);
- return
total
;
+ return
count
;
error:
return -1;
error:
return -1;
This page took
0.025881 seconds
and
5
git commands to generate.