]> git.ipfire.org Git - thirdparty/util-linux.git/blobdiff - sys-utils/swapon.c
misc: consolidate version printing and close_stdout()
[thirdparty/util-linux.git] / sys-utils / swapon.c
index 28f3bd8d64196514643a5d3ccda2c5a90b827353..7e3135c729f3bac50f36b3a91d0a9eb692f9e293 100644 (file)
 # define SWAP_FLAG_PRIO_SHIFT  0
 #endif
 
-#ifndef SWAPON_HAS_TWO_ARGS
-/* libc is insane, let's call the kernel */
+#if !defined(HAVE_SWAPON) && defined(SYS_swapon)
 # include <sys/syscall.h>
 # define swapon(path, flags) syscall(SYS_swapon, path, flags)
 #endif
 
 #define MAX_PAGESIZE   (64 * 1024)
 
+#ifndef UUID_STR_LEN
+# define UUID_STR_LEN  37
+#endif
+
 enum {
        SIG_SWAPSPACE = 1,
        SIG_SWSUSPEND
@@ -338,7 +341,7 @@ static int swap_reinitialize(struct swap_device *dev)
                cmd[idx++] = dev->path;
                cmd[idx++] = NULL;
                execvp(cmd[0], (char * const *) cmd);
-               err(EXIT_FAILURE, _("failed to execute %s"), cmd[0]);
+               errexec(cmd[0]);
 
        default: /* parent */
                do {
@@ -350,7 +353,7 @@ static int swap_reinitialize(struct swap_device *dev)
                        return -1;
                }
 
-               /* mkswap returns: 0=suss, 1=error */
+               /* mkswap returns: 0=suss, >0 error */
                if (WIFEXITED(status) && WEXITSTATUS(status)==0)
                        return 0; /* ok */
                break;
@@ -459,12 +462,12 @@ static unsigned long long swap_get_size(const struct swap_device *dev,
 {
        unsigned int last_page = 0;
        const unsigned int swap_version = SWAP_VERSION;
-       struct swap_header_v1_2 *s;
+       const struct swap_header_v1_2 *s;
 
        assert(dev);
        assert(dev->pagesize > 0);
 
-       s = (struct swap_header_v1_2 *) hdr;
+       s = (const struct swap_header_v1_2 *) hdr;
 
        if (s->version == swap_version)
                last_page = s->last_page;
@@ -476,7 +479,7 @@ static unsigned long long swap_get_size(const struct swap_device *dev,
 
 static void swap_get_info(struct swap_device *dev, const char *hdr)
 {
-       struct swap_header_v1_2 *s = (struct swap_header_v1_2 *) hdr;
+       const struct swap_header_v1_2 *s = (const struct swap_header_v1_2 *) hdr;
 
        assert(dev);
 
@@ -485,7 +488,7 @@ static void swap_get_info(struct swap_device *dev, const char *hdr)
 
        if (s && *s->uuid) {
                const unsigned char *u = s->uuid;
-               char str[37];
+               char str[UUID_STR_LEN];
 
                snprintf(str, sizeof(str),
                        "%02x%02x%02x%02x-"
@@ -808,7 +811,7 @@ static void __attribute__((__noreturn__)) usage(void)
        fputs(_(" -v, --verbose            verbose mode\n"), out);
 
        fputs(USAGE_SEPARATOR, out);
-       print_usage_help_options(26);
+       printf(USAGE_HELP_OPTIONS(26));
 
        fputs(_("\nThe <spec> parameter:\n" \
                " -L <label>             synonym for LABEL=<label>\n"
@@ -829,7 +832,7 @@ static void __attribute__((__noreturn__)) usage(void)
        for (i = 0; i < ARRAY_SIZE(infos); i++)
                fprintf(out, " %-5s  %s\n", infos[i].name, _(infos[i].help));
 
-       fprintf(out, USAGE_MAN_TAIL("swapon(8)"));
+       printf(USAGE_MAN_TAIL("swapon(8)"));
        exit(EXIT_SUCCESS);
 }
 
@@ -843,7 +846,8 @@ int main(int argc, char *argv[])
                BYTES_OPTION = CHAR_MAX + 1,
                NOHEADINGS_OPTION,
                RAW_OPTION,
-               SHOW_OPTION
+               SHOW_OPTION,
+               OPT_LIST_TYPES
        };
 
        static const struct option long_opts[] = {
@@ -858,6 +862,7 @@ int main(int argc, char *argv[])
                { "verbose",    no_argument,       NULL, 'v'               },
                { "version",    no_argument,       NULL, 'V'               },
                { "show",       optional_argument, NULL, SHOW_OPTION       },
+               { "output-all", no_argument,       NULL, OPT_LIST_TYPES    },
                { "noheadings", no_argument,       NULL, NOHEADINGS_OPTION },
                { "raw",        no_argument,       NULL, RAW_OPTION        },
                { "bytes",      no_argument,       NULL, BYTES_OPTION      },
@@ -878,7 +883,7 @@ int main(int argc, char *argv[])
        setlocale(LC_ALL, "");
        bindtextdomain(PACKAGE, LOCALEDIR);
        textdomain(PACKAGE);
-       atexit(close_stdout);
+       close_stdout_atexit();
 
        memset(&ctl, 0, sizeof(struct swapon_ctl));
        ctl.props.priority = -1;
@@ -895,9 +900,6 @@ int main(int argc, char *argv[])
                case 'a':               /* all */
                        ctl.all = 1;
                        break;
-               case 'h':               /* help */
-                       usage();
-                       break;
                case 'o':
                        options = optarg;
                        break;
@@ -948,6 +950,10 @@ int main(int argc, char *argv[])
                        }
                        ctl.show = 1;
                        break;
+               case OPT_LIST_TYPES:
+                       for (ctl.ncolumns = 0; (size_t)ctl.ncolumns < ARRAY_SIZE(infos); ctl.ncolumns++)
+                               ctl.columns[ctl.ncolumns] = ctl.ncolumns;
+                       break;
                case NOHEADINGS_OPTION:
                        ctl.no_heading = 1;
                        break;
@@ -957,11 +963,13 @@ int main(int argc, char *argv[])
                case BYTES_OPTION:
                        ctl.bytes = 1;
                        break;
-               case 'V':               /* version */
-                       printf(UTIL_LINUX_VERSION);
-                       return EXIT_SUCCESS;
                case 0:
                        break;
+
+               case 'h':               /* help */
+                       usage();
+               case 'V':               /* version */
+                       print_version(EXIT_SUCCESS);
                default:
                        errtryhelp(EXIT_FAILURE);
                }