fstab-generator: modernize style

This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2013-01-02 17:15:55 -05:00
parent 15f55e8092
commit d0aa9ce519
1 changed files with 52 additions and 123 deletions

View File

@ -79,8 +79,8 @@ static int mount_find_pri(struct mntent *me, int *ret) {
}
static int add_swap(const char *what, struct mntent *me) {
char *name = NULL, *unit = NULL, *lnk = NULL, *device = NULL;
FILE *f = NULL;
char _cleanup_free_ *name = NULL, *unit = NULL, *lnk = NULL, *device = NULL;
FILE _cleanup_fclose_ *f = NULL;
bool noauto, nofail;
int r, pri = -1;
@ -97,25 +97,20 @@ static int add_swap(const char *what, struct mntent *me) {
nofail = !!hasmntopt(me, "nofail");
name = unit_name_from_path(what, ".swap");
if (!name) {
r = log_oom();
goto finish;
}
if (!name)
return log_oom();
unit = strjoin(arg_dest, "/", name, NULL);
if (!unit) {
r = log_oom();
goto finish;
}
if (!unit)
return log_oom();
f = fopen(unit, "wxe");
if (!f) {
r = -errno;
if (errno == EEXIST)
log_error("Failed to create swap unit file %s, as it already exists. Duplicate entry in /etc/fstab?", unit);
else
log_error("Failed to create unit file %s: %m", unit);
goto finish;
return -errno;
}
fputs("# Automatically generated by systemd-fstab-generator\n\n"
@ -142,56 +137,39 @@ static int add_swap(const char *what, struct mntent *me) {
fflush(f);
if (ferror(f)) {
log_error("Failed to write unit file %s: %m", unit);
r = -errno;
goto finish;
return -errno;
}
if (!noauto) {
lnk = strjoin(arg_dest, "/" SPECIAL_SWAP_TARGET ".wants/", name, NULL);
if (!lnk) {
r = log_oom();
goto finish;
}
if (!lnk)
return log_oom();
mkdir_parents_label(lnk, 0755);
if (symlink(unit, lnk) < 0) {
log_error("Failed to create symlink %s: %m", lnk);
r = -errno;
goto finish;
return -errno;
}
r = device_name(what, &device);
if (r < 0)
goto finish;
return r;
if (r > 0) {
free(lnk);
lnk = strjoin(arg_dest, "/", device, ".wants/", name, NULL);
if (!lnk) {
r = log_oom();
goto finish;
}
if (!lnk)
return log_oom();
mkdir_parents_label(lnk, 0755);
if (symlink(unit, lnk) < 0) {
log_error("Failed to create symlink %s: %m", lnk);
r = -errno;
goto finish;
return -errno;
}
}
}
r = 0;
finish:
if (f)
fclose(f);
free(unit);
free(lnk);
free(name);
free(device);
return r;
return 0;
}
static bool mount_is_bind(struct mntent *me) {
@ -213,8 +191,10 @@ static bool mount_is_network(struct mntent *me) {
static int add_mount(const char *what, const char *where, const char *type, const char *opts,
int passno, bool wait, bool noauto, bool nofail, bool automount, bool isbind, bool isnetwork,
const char *source) {
char *name = NULL, *unit = NULL, *lnk = NULL, *device = NULL, *automount_name = NULL, *automount_unit = NULL;
FILE *f = NULL;
char _cleanup_free_
*name = NULL, *unit = NULL, *lnk = NULL, *device = NULL,
*automount_name = NULL, *automount_unit = NULL;
FILE _cleanup_fclose_ *f = NULL;
int r;
const char *post, *pre;
@ -245,25 +225,20 @@ static int add_mount(const char *what, const char *where, const char *type, cons
}
name = unit_name_from_path(where, ".mount");
if (!name) {
r = log_oom();
goto finish;
}
if (!name)
return log_oom();
unit = strjoin(arg_dest, "/", name, NULL);
if (!unit) {
r = log_oom();
goto finish;
}
if (!unit)
return log_oom();
f = fopen(unit, "wxe");
if (!f) {
r = -errno;
if (errno == EEXIST)
log_error("Failed to create mount unit file %s, as it already exists. Duplicate entry in /etc/fstab?", unit);
else
log_error("Failed to create unit file %s: %m", unit);
goto finish;
return -errno;
}
fprintf(f,
@ -313,22 +288,18 @@ static int add_mount(const char *what, const char *where, const char *type, cons
fflush(f);
if (ferror(f)) {
log_error("Failed to write unit file %s: %m", unit);
r = -errno;
goto finish;
return -errno;
}
if (!noauto) {
lnk = strjoin(arg_dest, "/", post, nofail || automount ? ".wants/" : ".requires/", name, NULL);
if (!lnk) {
r = log_oom();
goto finish;
}
if (!lnk)
return log_oom();
mkdir_parents_label(lnk, 0755);
if (symlink(unit, lnk) < 0) {
log_error("Failed to create symlink %s: %m", lnk);
r = -errno;
goto finish;
return -errno;
}
if (!isbind &&
@ -336,21 +307,18 @@ static int add_mount(const char *what, const char *where, const char *type, cons
r = device_name(what, &device);
if (r < 0)
goto finish;
return r;
if (r > 0) {
free(lnk);
lnk = strjoin(arg_dest, "/", device, ".wants/", name, NULL);
if (!lnk) {
r = log_oom();
goto finish;
}
if (!lnk)
return log_oom();
mkdir_parents_label(lnk, 0755);
if (symlink(unit, lnk) < 0) {
log_error("Failed to create symlink %s: %m", lnk);
r = -errno;
goto finish;
return -errno;
}
}
}
@ -358,23 +326,18 @@ static int add_mount(const char *what, const char *where, const char *type, cons
if (automount && !path_equal(where, "/")) {
automount_name = unit_name_from_path(where, ".automount");
if (!name) {
r = log_oom();
goto finish;
}
if (!name)
return log_oom();
automount_unit = strjoin(arg_dest, "/", automount_name, NULL);
if (!automount_unit) {
r = log_oom();
goto finish;
}
if (!automount_unit)
return log_oom();
fclose(f);
f = fopen(automount_unit, "wxe");
if (!f) {
r = -errno;
log_error("Failed to create unit file %s: %m", automount_unit);
goto finish;
return -errno;
}
fprintf(f,
@ -393,38 +356,22 @@ static int add_mount(const char *what, const char *where, const char *type, cons
fflush(f);
if (ferror(f)) {
log_error("Failed to write unit file %s: %m", automount_unit);
r = -errno;
goto finish;
return -errno;
}
free(lnk);
lnk = strjoin(arg_dest, "/", post, nofail ? ".wants/" : ".requires/", automount_name, NULL);
if (!lnk) {
r = log_oom();
goto finish;
}
if (!lnk)
return log_oom();
mkdir_parents_label(lnk, 0755);
if (symlink(automount_unit, lnk) < 0) {
log_error("Failed to create symlink %s: %m", lnk);
r = -errno;
goto finish;
return -errno;
}
}
r = 0;
finish:
if (f)
fclose(f);
free(unit);
free(lnk);
free(name);
free(device);
free(automount_name);
free(automount_unit);
return r;
return 0;
}
static int parse_fstab(void) {
@ -443,19 +390,13 @@ static int parse_fstab(void) {
}
while ((me = getmntent(f))) {
char *where, *what;
char _cleanup_free_ *where = NULL, *what = NULL;
int k;
what = fstab_node_to_udev_node(me->mnt_fsname);
if (!what) {
r = log_oom();
goto finish;
}
where = strdup(me->mnt_dir);
if (!where) {
if (!what || !where) {
r = log_oom();
free(what);
goto finish;
}
@ -483,9 +424,6 @@ static int parse_fstab(void) {
"/etc/fstab");
}
free(what);
free(where);
if (k < 0)
r = k;
}
@ -509,10 +447,8 @@ static int parse_new_root_from_proc_cmdline(void) {
}
opts = strdup("defaults");
if (!opts)
return log_oom();
type = strdup("auto");
if (!type)
if (!opts || !type)
return log_oom();
/* root= and roofstype= may occur more than once, the last instance should take precedence.
@ -571,7 +507,8 @@ static int parse_new_root_from_proc_cmdline(void) {
}
static int parse_proc_cmdline(void) {
char *line, *w, *state;
char _cleanup_free_ *line = NULL;
char *w, *state;
int r;
size_t l;
@ -585,13 +522,11 @@ static int parse_proc_cmdline(void) {
}
FOREACH_WORD_QUOTED(w, l, line, state) {
char *word;
char _cleanup_free_ *word = NULL;
word = strndup(w, l);
if (!word) {
r = log_oom();
goto finish;
}
if (!word)
return log_oom();
if (startswith(word, "fstab=")) {
r = parse_boolean(word + 6);
@ -615,15 +550,9 @@ static int parse_proc_cmdline(void) {
log_warning("Unknown kernel switch %s. Ignoring.", word);
}
free(word);
}
r = 0;
finish:
free(line);
return r;
return 0;
}
int main(int argc, char *argv[]) {