From: Érico Rolim Date: Wed, 18 Nov 2020 17:07:10 +0000 (-0300) Subject: lib/procutils: add proc_is_procfs helper. X-Git-Tag: v2.36.2~46 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=9f704636d0ff547c809c0fe9cf301507359fbe44;p=thirdparty%2Futil-linux.git lib/procutils: add proc_is_procfs helper. Also add missing include in procutils.h for the definition of pid_t. (cherry picked from commit e411b8a63d4a44ac191b5ca032c4639b12d4b838) --- diff --git a/include/procutils.h b/include/procutils.h index 9f8dd76ec1..c9f5bb5528 100644 --- a/include/procutils.h +++ b/include/procutils.h @@ -2,6 +2,7 @@ #define UTIL_LINUX_PROCUTILS #include +#include struct proc_tasks { DIR *dir; @@ -31,4 +32,6 @@ extern int proc_next_pid(struct proc_processes *ps, pid_t *pid); extern char *proc_get_command(pid_t pid); extern char *proc_get_command_name(pid_t pid); +extern int proc_is_procfs(int fd); + #endif /* UTIL_LINUX_PROCUTILS */ diff --git a/lib/procutils.c b/lib/procutils.c index cf660ea5de..4436f38fa4 100644 --- a/lib/procutils.c +++ b/lib/procutils.c @@ -13,11 +13,13 @@ #include #include #include +#include #include #include #include #include "procutils.h" +#include "statfs_magic.h" #include "fileutils.h" #include "all-io.h" #include "c.h" @@ -235,6 +237,23 @@ int proc_next_pid(struct proc_processes *ps, pid_t *pid) return 0; } +/* checks if fd is file in a procfs; + * returns 1 if true, 0 if false or couldn't determine */ +int proc_is_procfs(int fd) +{ + struct statfs st; + int ret; + + do { + ret = fstatfs(fd, &st); + } while (ret == -1 && errno == EINTR); + + if (ret == 0) + return st.f_type == STATFS_PROC_MAGIC; + else + return 0; +} + #ifdef TEST_PROGRAM_PROCUTILS static int test_tasks(int argc, char *argv[])