if (rc == 0 && (cxt->user_mountflags & MNT_MS_OFFSET) &&
mnt_optstr_get_option(optstr, "offset", &val, &len) == 0) {
rc = mnt_parse_offset(val, len, &offset);
- if (rc)
+ if (rc) {
DBG(CXT, mnt_debug_h(cxt, "failed to parse offset="));
+ rc = -MNT_ERR_MOUNTOPT;
+ }
}
/*
if (rc == 0 && (cxt->user_mountflags & MNT_MS_SIZELIMIT) &&
mnt_optstr_get_option(optstr, "sizelimit", &val, &len) == 0) {
rc = mnt_parse_offset(val, len, &sizelimit);
- if (rc)
+ if (rc) {
DBG(CXT, mnt_debug_h(cxt, "failed to parse sizelimit="));
+ rc = -MNT_ERR_MOUNTOPT;
+ }
}
/*
DBG(CXT, mnt_debug_h(cxt, "fixed options [rc=%d]: "
"vfs: '%s' fs: '%s' user: '%s', optstr: '%s'", rc,
fs->vfs_optstr, fs->fs_optstr, fs->user_optstr, fs->optstr));
+
+ if (rc)
+ rc = -MNT_ERR_MOUNTOPT;
return rc;
}
#define MNT_ERR_NOFSTYPE 5001 /* failed to detect filesystem type */
#define MNT_ERR_NOSOURCE 5002 /* required mount source undefined */
#define MNT_ERR_LOOPDEV 5003 /* loopdev setup failed, errno set by libc */
+#define MNT_ERR_MOUNTOPT 5004 /* failed to parse/use userspace mount options */
/* init.c */
extern void mnt_init_debug(int mask);
} else {
DBG(UTILS, mnt_debug(
"cannot convert '%s' username to UID", username));
+ rc = errno ? -errno : -EINVAL;
}
free(buf);
} else {
DBG(UTILS, mnt_debug(
"cannot convert '%s' groupname to GID", groupname));
+ rc = errno ? -errno : -EINVAL;
}
free(buf);
else
warnx(_("mount source not defined"));
return MOUNT_EX_USAGE;
+ case -MNT_ERR_MOUNTOPT:
+ if (errno)
+ warn(_("failed to parse mount options"));
+ else
+ warnx(_("failed to parse mount options"));
+ return MOUNT_EX_USAGE;
case -MNT_ERR_LOOPDEV:
if (errno == ENOENT
&& (uflags & MNT_MS_ENCRYPTION)