blob: 1fd6e1f992342421e87720a48e46481a402362cc [file] [log] [blame]
Jiri Olsa592d5a62015-09-02 09:56:34 +02001#ifndef _GNU_SOURCE
2# define _GNU_SOURCE
3#endif
4
5#include <stdio.h>
6#include <stdlib.h>
7#include <string.h>
8#include "debugfs.h"
9#include "tracefs.h"
10
11#include "tracing_path.h"
12
13
14char tracing_path[PATH_MAX + 1] = "/sys/kernel/debug/tracing";
15char tracing_events_path[PATH_MAX + 1] = "/sys/kernel/debug/tracing/events";
16
17
18static void __tracing_path_set(const char *tracing, const char *mountpoint)
19{
20 snprintf(tracing_path, sizeof(tracing_path), "%s/%s",
21 mountpoint, tracing);
22 snprintf(tracing_events_path, sizeof(tracing_events_path), "%s/%s%s",
23 mountpoint, tracing, "events");
24}
25
26static const char *tracing_path_tracefs_mount(void)
27{
28 const char *mnt;
29
30 mnt = tracefs_mount(NULL);
31 if (!mnt)
32 return NULL;
33
34 __tracing_path_set("", mnt);
35
36 return mnt;
37}
38
39static const char *tracing_path_debugfs_mount(void)
40{
41 const char *mnt;
42
43 mnt = debugfs_mount(NULL);
44 if (!mnt)
45 return NULL;
46
47 __tracing_path_set("tracing/", mnt);
48
49 return mnt;
50}
51
52const char *tracing_path_mount(void)
53{
54 const char *mnt;
55
56 mnt = tracing_path_tracefs_mount();
57 if (mnt)
58 return mnt;
59
60 mnt = tracing_path_debugfs_mount();
61
62 return mnt;
63}
64
65void tracing_path_set(const char *mntpt)
66{
67 __tracing_path_set("tracing/", mntpt);
68}
69
70char *get_tracing_file(const char *name)
71{
72 char *file;
73
74 if (asprintf(&file, "%s/%s", tracing_path, name) < 0)
75 return NULL;
76
77 return file;
78}
79
80void put_tracing_file(char *file)
81{
82 free(file);
83}