Linux Audio

Check our new training course

Loading...
v6.8
 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 <sys/param.h>
 8#include <unistd.h>
 9
10#include <api/fs/tracing_path.h>
 
11
12int tp_event_has_id(const char *dir_path, struct dirent *evt_dir)
13{
14	char evt_path[MAXPATHLEN];
15	int fd;
16
17	snprintf(evt_path, MAXPATHLEN, "%s/%s/id", dir_path, evt_dir->d_name);
18	fd = open(evt_path, O_RDONLY);
19	if (fd < 0)
20		return -EINVAL;
21	close(fd);
22
23	return 0;
24}
25
26/*
27 * Check whether event is in <debugfs_mount_point>/tracing/events
28 */
29int is_valid_tracepoint(const char *event_string)
30{
31	DIR *sys_dir, *evt_dir;
32	struct dirent *sys_dirent, *evt_dirent;
33	char evt_path[MAXPATHLEN];
34	char *dir_path;
35
36	sys_dir = tracing_events__opendir();
37	if (!sys_dir)
38		return 0;
39
40	for_each_subsystem(sys_dir, sys_dirent) {
41		dir_path = get_events_file(sys_dirent->d_name);
42		if (!dir_path)
43			continue;
44		evt_dir = opendir(dir_path);
45		if (!evt_dir)
46			goto next;
47
48		for_each_event(dir_path, evt_dir, evt_dirent) {
49			snprintf(evt_path, MAXPATHLEN, "%s:%s",
50				 sys_dirent->d_name, evt_dirent->d_name);
51			if (!strcmp(evt_path, event_string)) {
52				closedir(evt_dir);
53				put_events_file(dir_path);
54				closedir(sys_dir);
55				return 1;
56			}
57		}
58		closedir(evt_dir);
59next:
60		put_events_file(dir_path);
61	}
62	closedir(sys_dir);
63	return 0;
64}
v6.13.7
 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}