Relocate ismnt() and fismnt() to util.c, for sharing with initctl

initctl cannot link with helpers.c, so let's relocate these helper
functions to util.c instead.  Need them to probe for cgroup support.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
Joachim Wiberg
2022-01-10 20:26:37 +01:00
parent 3b21d35f23
commit d331b72dfd
5 changed files with 54 additions and 53 deletions
+1 -1
View File
@@ -48,7 +48,7 @@
#include "config.h" #include "config.h"
#include "finit.h" #include "finit.h"
#include "helpers.h" #include "util.h"
#include "plugin.h" #include "plugin.h"
struct module { struct module {
-49
View File
@@ -564,55 +564,6 @@ void endfsent(void)
} }
#endif /* HAVE_GETFSENT */ #endif /* HAVE_GETFSENT */
static int hasopt(char *opts, char *opt)
{
char buf[strlen(opts) + 1];
char *ptr;
memcpy(buf, opts, sizeof(buf));
ptr = strtok(buf, ",");
while (ptr) {
if (!strcmp(ptr, opt))
return 1;
ptr = strtok(NULL, ",");
}
return 0;
}
int ismnt(char *file, char *dir, char *mode)
{
struct mntent *mnt;
int found = 0;
FILE *fp;
fp = setmntent(file, "r");
if (!fp)
return 0; /* Dunno, maybe not */
while ((mnt = getmntent(fp))) {
if (!strcmp(mnt->mnt_dir, dir)) {
if (mode) {
if (hasopt(mnt->mnt_opts, mode))
found = 1;
} else
found = 1;
break;
}
}
endmntent(fp);
return found;
}
/* Requires /proc to be mounted */
int fismnt(char *dir)
{
return ismnt("/proc/mounts", dir, NULL);
}
/** /**
* Local Variables: * Local Variables:
* indent-tabs-mode: t * indent-tabs-mode: t
-3
View File
@@ -130,9 +130,6 @@ static inline int dprint(int fd, const char *s, size_t len)
return rc; return rc;
} }
int ismnt (char *file, char *dir, char *mode);
int fismnt (char *dir);
#endif /* FINIT_HELPERS_H_ */ #endif /* FINIT_HELPERS_H_ */
/** /**
+50
View File
@@ -24,6 +24,7 @@
#include "config.h" #include "config.h"
#include <ctype.h> /* isprint() */ #include <ctype.h> /* isprint() */
#include <errno.h> #include <errno.h>
#include <mntent.h>
#include <regex.h> #include <regex.h>
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
@@ -398,6 +399,55 @@ char *sanitize(char *arg, size_t len)
return arg; return arg;
} }
static int hasopt(char *opts, char *opt)
{
char buf[strlen(opts) + 1];
char *ptr;
memcpy(buf, opts, sizeof(buf));
ptr = strtok(buf, ",");
while (ptr) {
if (!strcmp(ptr, opt))
return 1;
ptr = strtok(NULL, ",");
}
return 0;
}
int ismnt(char *file, char *dir, char *mode)
{
struct mntent *mnt;
int found = 0;
FILE *fp;
fp = setmntent(file, "r");
if (!fp)
return 0; /* Dunno, maybe not */
while ((mnt = getmntent(fp))) {
if (!strcmp(mnt->mnt_dir, dir)) {
if (mode) {
if (hasopt(mnt->mnt_opts, mode))
found = 1;
} else
found = 1;
break;
}
}
endmntent(fp);
return found;
}
/* Requires /proc to be mounted */
int fismnt(char *dir)
{
return ismnt("/proc/mounts", dir, NULL);
}
#ifdef HAVE_TERMIOS_H #ifdef HAVE_TERMIOS_H
/* /*
* Called by initctl, and by finit at boot and shutdown, to * Called by initctl, and by finit at boot and shutdown, to
+3
View File
@@ -70,6 +70,9 @@ char *memsz (uint64_t sz, char *buf, size_t len);
char *sanitize (char *arg, size_t len); char *sanitize (char *arg, size_t len);
int ismnt (char *file, char *dir, char *mode);
int fismnt (char *dir);
#ifdef HAVE_TERMIOS_H #ifdef HAVE_TERMIOS_H
int ttinit (void); int ttinit (void);
int ttraw (void); int ttraw (void);