-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tools lib fs: Add helper to find mounted file systems
In preparation for adding tracefs for perf to use, create a findfs helper utility that find_debugfs uses instead of hard coding the search in the code. This will allow for a find_tracefs to be used as well. Signed-off-by: Steven Rostedt <rostedt@goodmis.org> Acked-by: Jiri Olsa <jolsa@kernel.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Ingo Molnar <mingo@kernel.org> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> Cc: Namhyung Kim <namhyung@kernel.org> Link: http://lkml.kernel.org/r/20150202193552.735023362@goodmis.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
- Loading branch information
Steven Rostedt (Red Hat)
authored and
Arnaldo Carvalho de Melo
committed
Feb 7, 2015
1 parent
5693c92
commit cde164a
Showing
5 changed files
with
94 additions
and
54 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
#include <errno.h> | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <string.h> | ||
#include <stdbool.h> | ||
#include <sys/vfs.h> | ||
|
||
#include "findfs.h" | ||
|
||
/* verify that a mountpoint is actually the type we want */ | ||
|
||
int valid_mountpoint(const char *mount, long magic) | ||
{ | ||
struct statfs st_fs; | ||
|
||
if (statfs(mount, &st_fs) < 0) | ||
return -ENOENT; | ||
else if ((long)st_fs.f_type != magic) | ||
return -ENOENT; | ||
|
||
return 0; | ||
} | ||
|
||
/* find the path to a mounted file system */ | ||
const char *find_mountpoint(const char *fstype, long magic, | ||
char *mountpoint, int len, | ||
const char * const *known_mountpoints) | ||
{ | ||
const char * const *ptr; | ||
char format[128]; | ||
char type[100]; | ||
FILE *fp; | ||
|
||
if (known_mountpoints) { | ||
ptr = known_mountpoints; | ||
while (*ptr) { | ||
if (valid_mountpoint(*ptr, magic) == 0) { | ||
strncpy(mountpoint, *ptr, len - 1); | ||
mountpoint[len-1] = 0; | ||
return mountpoint; | ||
} | ||
ptr++; | ||
} | ||
} | ||
|
||
/* give up and parse /proc/mounts */ | ||
fp = fopen("/proc/mounts", "r"); | ||
if (fp == NULL) | ||
return NULL; | ||
|
||
snprintf(format, 128, "%%*s %%%ds %%99s %%*s %%*d %%*d\n", len); | ||
|
||
while (fscanf(fp, format, mountpoint, type) == 2) { | ||
if (strcmp(type, fstype) == 0) | ||
break; | ||
} | ||
fclose(fp); | ||
|
||
if (strcmp(type, fstype) != 0) | ||
return NULL; | ||
|
||
return mountpoint; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
#ifndef __API_FINDFS_H__ | ||
#define __API_FINDFS_H__ | ||
|
||
#define _STR(x) #x | ||
#define STR(x) _STR(x) | ||
|
||
/* | ||
* On most systems <limits.h> would have given us this, but not on some systems | ||
* (e.g. GNU/Hurd). | ||
*/ | ||
#ifndef PATH_MAX | ||
#define PATH_MAX 4096 | ||
#endif | ||
|
||
const char *find_mountpoint(const char *fstype, long magic, | ||
char *mountpoint, int len, | ||
const char * const *known_mountpoints); | ||
|
||
int valid_mountpoint(const char *mount, long magic); | ||
|
||
#endif /* __API_FINDFS_H__ */ |