at v6.19 52 lines 1.2 kB view raw
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 14int 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 */ 31bool 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}