Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / tools / perf / util / tracepoint.c
blob95377ed5d87b09c4c192105280199e7d37d87f33
1 // SPDX-License-Identifier: GPL-2.0
2 #include "tracepoint.h"
4 #include <errno.h>
5 #include <fcntl.h>
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <sys/param.h>
9 #include <unistd.h>
11 #include <api/fs/tracing_path.h>
12 #include "fncache.h"
14 int tp_event_has_id(const char *dir_path, struct dirent *evt_dir)
16 char evt_path[MAXPATHLEN];
17 int fd;
19 snprintf(evt_path, MAXPATHLEN, "%s/%s/id", dir_path, evt_dir->d_name);
20 fd = open(evt_path, O_RDONLY);
21 if (fd < 0)
22 return -EINVAL;
23 close(fd);
25 return 0;
29 * Check whether event is in <debugfs_mount_point>/tracing/events
31 bool is_valid_tracepoint(const char *event_string)
33 char *dst, *path = malloc(strlen(event_string) + 4); /* Space for "/id\0". */
34 bool have_file = false; /* Conservatively return false if memory allocation failed. */
35 const char *src;
37 if (!path)
38 return false;
40 /* Copy event_string replacing the ':' with '/'. */
41 for (src = event_string, dst = path; *src; src++, dst++)
42 *dst = (*src == ':') ? '/' : *src;
43 /* Add "/id\0". */
44 memcpy(dst, "/id", 4);
46 dst = get_events_file(path);
47 if (dst)
48 have_file = file_available(dst);
49 free(dst);
50 free(path);
51 return have_file;