#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
-#include "compat.h"
#include "util.h"
#include "pathconfig.h"
if (mnt->flags & MS_BIND) argv[idx++] = "--bind";
else if (mnt->flags & MS_MOVE) argv[idx++] = "--move";
- if (mnt->data) {
+ if (mnt->data &&
+ strcmp(mnt->data, "defaults")!=0) {
argv[idx++] = "-o";
argv[idx++] = mnt->data;
}
parseFstabLine(struct MountInfo *info, char *buf)
{
while (isspace(*buf)) ++buf;
- if (*buf=='#') return prIGNORE;
+ if (*buf=='#' || *buf=='\0') return prIGNORE;
info->src = buf;
MOVE_TO_NEXT_FIELD(buf, false);
}
{
- char buf[len+1];
+ char buf[len+2];
char *ptr, *ptrptr;
if (read(fd, buf, len+1)!=len) {
perror("read()");
goto err1;
}
- buf[len] = '\0';
+ buf[len] = '#'; // workaround for broken dietlibc strtok_r()
+ // implementation
+ buf[len+1] = '\0';
ptr = strtok_r(buf, "\n", &ptrptr);
while (ptr) {
switch (parseFstabLine(&mnt, ptr)) {
case prFAIL :
- WRITE_MSG(2, "Failed to parse/mount fstab-line beginning with '");
+ WRITE_MSG(2, "Failed to parse fstab-line beginning with '");
WRITE_STR(2, ptr);
WRITE_MSG(2, "'\n");
goto err1;
};
struct Options opt = {
- .mtab = "/etc/mtab",
- .fstab = "/etc/fstab",
- .rootdir = 0,
- .ignore_mtab = false,
- .mount_all = false,
- .is_secure = false,
-
- .cur_rootdir_fd = open("/", O_RDONLY|O_DIRECTORY)
+ .mtab = "/etc/mtab",
+ .fstab = "/etc/fstab",
+ .rootdir = 0,
+ .ignore_mtab = false,
+ .mount_all = false,
+ .is_secure = false,
+ .cur_rootdir_fd = -1
};
+ opt.cur_rootdir_fd = open("/", O_RDONLY|O_DIRECTORY);
+
if (opt.cur_rootdir_fd==-1) {
perror("open(\"/\")");
return EXIT_FAILURE;