tracing_path.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #ifndef _GNU_SOURCE
  2. # define _GNU_SOURCE
  3. #endif
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include "debugfs.h"
  8. #include "tracefs.h"
  9. #include "tracing_path.h"
  10. char tracing_path[PATH_MAX + 1] = "/sys/kernel/debug/tracing";
  11. char tracing_events_path[PATH_MAX + 1] = "/sys/kernel/debug/tracing/events";
  12. static void __tracing_path_set(const char *tracing, const char *mountpoint)
  13. {
  14. snprintf(tracing_path, sizeof(tracing_path), "%s/%s",
  15. mountpoint, tracing);
  16. snprintf(tracing_events_path, sizeof(tracing_events_path), "%s/%s%s",
  17. mountpoint, tracing, "events");
  18. }
  19. static const char *tracing_path_tracefs_mount(void)
  20. {
  21. const char *mnt;
  22. mnt = tracefs_mount(NULL);
  23. if (!mnt)
  24. return NULL;
  25. __tracing_path_set("", mnt);
  26. return mnt;
  27. }
  28. static const char *tracing_path_debugfs_mount(void)
  29. {
  30. const char *mnt;
  31. mnt = debugfs_mount(NULL);
  32. if (!mnt)
  33. return NULL;
  34. __tracing_path_set("tracing/", mnt);
  35. return mnt;
  36. }
  37. const char *tracing_path_mount(void)
  38. {
  39. const char *mnt;
  40. mnt = tracing_path_tracefs_mount();
  41. if (mnt)
  42. return mnt;
  43. mnt = tracing_path_debugfs_mount();
  44. return mnt;
  45. }
  46. void tracing_path_set(const char *mntpt)
  47. {
  48. __tracing_path_set("tracing/", mntpt);
  49. }
  50. char *get_tracing_file(const char *name)
  51. {
  52. char *file;
  53. if (asprintf(&file, "%s/%s", tracing_path, name) < 0)
  54. return NULL;
  55. return file;
  56. }
  57. void put_tracing_file(char *file)
  58. {
  59. free(file);
  60. }