1 #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 14 char tracing_path[PATH_MAX + 1] = "/sys/kernel/debug/tracing"; 15 char tracing_events_path[PATH_MAX + 1] = "/sys/kernel/debug/tracing/events"; 16 17 18 static 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 26 static 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 39 static 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 52 const 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 65 void tracing_path_set(const char *mntpt) 66 { 67 __tracing_path_set("tracing/", mntpt); 68 } 69 70 char *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 80 void put_tracing_file(char *file) 81 { 82 free(file); 83 } 84