diff options
Diffstat (limited to 'mount')
-rw-r--r-- | mount/swapon.c | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/mount/swapon.c b/mount/swapon.c index f0c969b61..eb0eb4aba 100644 --- a/mount/swapon.c +++ b/mount/swapon.c @@ -400,29 +400,37 @@ swapon_all(void) { const char *special; int skip = 0; int pri = priority; + char *opt, *opts; if (!streq(fstab->mnt_type, MNTTYPE_SWAP)) continue; + opts = strdup(fstab->mnt_opts); + + for (opt = strtok(opts, ","); opt != NULL; + opt = strtok(NULL, ",")) { + if (strncmp(opt, "pri=", 4) == 0) + pri = atoi(opt+4); + if (strcmp(opt, "noauto") == 0) + skip = 1; + } + free(opts); + + if (skip) + continue; + special = fsprobe_get_devname(fstab->mnt_fsname); - if (!special) + if (!special) { + if (!ifexists) + status |= cannot_find(fstab->mnt_fsname); continue; + } if (!is_in_proc_swaps(special) && - (!ifexists || !access(special, R_OK))) { - /* parse mount options; */ - char *opt, *opts = strdup(fstab->mnt_opts); - - for (opt = strtok(opts, ","); opt != NULL; - opt = strtok(NULL, ",")) { - if (strncmp(opt, "pri=", 4) == 0) - pri = atoi(opt+4); - if (strcmp(opt, "noauto") == 0) - skip = 1; - } - if (!skip) - status |= do_swapon(special, pri, CANONIC); - } + (!ifexists || !access(special, R_OK))) + status |= do_swapon(special, pri, CANONIC); + + free((void *) special); } fclose(fp); |