1 // SPDX-License-Identifier: GPL-2.0 2 #include "tracepoint.h" 3 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> 10 11 #include <api/fs/tracing_path.h> 12 #include "fncache.h" 13 14 int tp_event_has_id(const char *dir_path, struct dirent *evt_dir) 15 { 16 char evt_path[MAXPATHLEN]; 17 int fd; 18 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); 24 25 return 0; 26 } 27 28 /* 29 * Check whether event is in <debugfs_mount_point>/tracing/events 30 */ 31 bool is_valid_tracepoint(const char *event_string) 32 { 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; 36 37 if (!path) 38 return false; 39 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); 45 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; 52 } 53