x86/xen: resume timer irqs early
[linux/fpc-iii.git] / tools / perf / util / sysfs.c
blobf71e9eafe15a7323e127145c13cd0240daae6136
2 #include "util.h"
3 #include "sysfs.h"
5 static const char * const sysfs_known_mountpoints[] = {
6 "/sys",
7 0,
8 };
10 static int sysfs_found;
11 char sysfs_mountpoint[PATH_MAX + 1];
13 static int sysfs_valid_mountpoint(const char *sysfs)
15 struct statfs st_fs;
17 if (statfs(sysfs, &st_fs) < 0)
18 return -ENOENT;
19 else if (st_fs.f_type != (long) SYSFS_MAGIC)
20 return -ENOENT;
22 return 0;
25 const char *sysfs_find_mountpoint(void)
27 const char * const *ptr;
28 char type[100];
29 FILE *fp;
31 if (sysfs_found)
32 return (const char *) sysfs_mountpoint;
34 ptr = sysfs_known_mountpoints;
35 while (*ptr) {
36 if (sysfs_valid_mountpoint(*ptr) == 0) {
37 sysfs_found = 1;
38 strcpy(sysfs_mountpoint, *ptr);
39 return sysfs_mountpoint;
41 ptr++;
44 /* give up and parse /proc/mounts */
45 fp = fopen("/proc/mounts", "r");
46 if (fp == NULL)
47 return NULL;
49 while (!sysfs_found &&
50 fscanf(fp, "%*s %" STR(PATH_MAX) "s %99s %*s %*d %*d\n",
51 sysfs_mountpoint, type) == 2) {
53 if (strcmp(type, "sysfs") == 0)
54 sysfs_found = 1;
57 fclose(fp);
59 return sysfs_found ? sysfs_mountpoint : NULL;