[systemd-devel] [PATCH v2] fstab-generator: add x-systemd.requires and x-systemd.requires-mounts-for
Lennart Poettering
lennart at poettering.net
Thu May 14 08:24:39 PDT 2015
On Thu, 14.05.15 13:27, Karel Zak (kzak at redhat.com) wrote:
> + r = fstab_filter_options(opts, "x-systemd.requires\0", NULL, &arg, NULL);
> + if (r < 0)
> + return log_warning_errno(r, "Failed to parse options: %m");
> + if (r == 0)
> + return 0;
> +
> + if (*arg == '/') {
> + r = unit_name_mangle_with_suffix(arg, UNIT_NAME_NOGLOB, ".mount", &unit);
> + if (r < 0)
> + return log_error_errno(r, "Failed to generate unit name: %m");
> + } else
> + unit = arg;
No need to explicitly check *arg for '/', just invoke
unit_name_mangle_with_suffix() immediately, without condition, as it
internally does pretty much the same check anyway. i.e. remove the if
check, remove the second branch, just invoke the function immediatey
and unconditionally, it will already do the right thing...
> + fprintf(f, "After=%1$s\nRequires=%1$s\n", unit);
> +
> + if (unit == arg)
> + unit = NULL;
> +
> + return 0;
> +}
> +
> +#define REQUIRES_MOUNTS_OPT "x-systemd.requires-mounts-for="
I'd just use the literal string everywhere. We only use this in this
one file and the macro isn't really that much shorter than the real
string, there's really no need to define a macro for this...
> +
> +static int write_requires_mounts_for(FILE *f, const char *opts) {
> + _cleanup_free_ char **optsv = NULL, **paths = NULL, *res = NULL;
> + char **s;
> +
> + assert(f);
> + assert(opts);
> +
> + optsv = strv_split(opts, ",");
> + if (!optsv)
> + return log_oom();
> +
> + STRV_FOREACH(s, optsv) {
> + char *arg;
> +
> + if (!startswith(*s, REQUIRES_MOUNTS_OPT))
> + continue;
> + arg = *s + strlen(REQUIRES_MOUNTS_OPT);
> + if (!*arg)
> + return log_warning("Failed to parse option " REQUIRES_MOUNTS_OPT);
> + if (!paths)
> + paths = strv_new(arg, NULL);
> + else
> + strv_push(&paths, arg);
> + }
I figure this logic should really be made generic and added to
fstab-util.c or so.
Lennart
--
Lennart Poettering, Red Hat
More information about the systemd-devel
mailing list