mirror of
https://github.com/troglobit/finit.git
synced 2026-10-01 05:22:48 +07:00
bootclean: Resolve any symlinks in tmpfs check
Followup to issue #49. Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user