bootclean: Resolve any symlinks in tmpfs check

Followup to issue #49.

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
Joachim Nilsson
2016-11-21 09:41:30 +01:00
parent 846692ca03
commit 47060c9738
+24
View File
@@ -32,12 +32,36 @@
#include "../plugin.h"
#include "../utmp-api.h"
/* Resolve symbolic links */
static char *desym(char *dir)
{
static char path[80]; /* Should be enough for our use-case */
struct stat st;
if (stat(dir, &st))
return NULL;
if (S_ISLNK(st.st_mode)) {
if (-1 == readlink(dir, path, sizeof(path)))
return NULL;
return desym(path);
}
return dir;
}
static int is_tmpfs(char *dir)
{
int tmpfs = 0;
FILE *fp;
struct mntent *mnt;
/* If /var/run is a symlink, check what it resolves to */
dir = desym(dir);
if (!dir)
return 0; /* Outlook not so good */
fp = setmntent("/proc/mounts", "r");
if (!fp)
return 0; /* Dunno, maybe not */