Loading...
// SPDX-License-Identifier: GPL-2.0 #include "tracepoint.h" #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <sys/param.h> #include <unistd.h> #include <api/fs/tracing_path.h> #include "fncache.h" int tp_event_has_id(const char *dir_path, struct dirent *evt_dir) { char evt_path[MAXPATHLEN]; int fd; snprintf(evt_path, MAXPATHLEN, "%s/%s/id", dir_path, evt_dir->d_name); fd = open(evt_path, O_RDONLY); if (fd < 0) return -EINVAL; close(fd); return 0; } /* * Check whether event is in <debugfs_mount_point>/tracing/events */ bool is_valid_tracepoint(const char *event_string) { char *dst, *path = malloc(strlen(event_string) + 4); /* Space for "/id\0". */ bool have_file = false; /* Conservatively return false if memory allocation failed. */ const char *src; if (!path) return false; /* Copy event_string replacing the ':' with '/'. */ for (src = event_string, dst = path; *src; src++, dst++) *dst = (*src == ':') ? '/' : *src; /* Add "/id\0". */ memcpy(dst, "/id", 4); dst = get_events_file(path); if (dst) have_file = file_available(dst); free(dst); free(path); return have_file; } |