swapon.c - ubase - suckless linux base utils
 (HTM) git clone git://git.suckless.org/ubase
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       swapon.c (1145B)
       ---
            1 /* See LICENSE file for copyright and license details. */
            2 #include <sys/swap.h>
            3 
            4 #include <mntent.h>
            5 #include <stdio.h>
            6 #include <stdlib.h>
            7 #include <string.h>
            8 
            9 #include "util.h"
           10 
           11 static void
           12 usage(void)
           13 {
           14         eprintf("usage: %s [-dp] -a | device\n", argv0);
           15 }
           16 
           17 int
           18 main(int argc, char *argv[])
           19 {
           20         int i;
           21         int ret = 0;
           22         int flags = 0;
           23         int all = 0;
           24         struct mntent *me;
           25         FILE *fp;
           26 
           27         ARGBEGIN {
           28         case 'a':
           29                 all = 1;
           30                 break;
           31         case 'd':
           32                 flags |= SWAP_FLAG_DISCARD;
           33                 break;
           34         case 'p':
           35                 flags |= SWAP_FLAG_PREFER;
           36                 break;
           37         default:
           38                 usage();
           39         } ARGEND;
           40 
           41         if ((!all && argc < 1) || (all && argc > 0))
           42                 usage();
           43 
           44         if (all) {
           45                 fp = setmntent("/etc/fstab", "r");
           46                 if (!fp)
           47                         eprintf("setmntent %s:", "/etc/fstab");
           48                 while ((me = getmntent(fp)) != NULL) {
           49                         if (strcmp(me->mnt_type, MNTTYPE_SWAP) == 0
           50                             && (hasmntopt(me, MNTOPT_NOAUTO) == NULL)) {
           51                                 if (swapon(me->mnt_fsname, flags) < 0) {
           52                                         weprintf("swapon %s:", me->mnt_fsname);
           53                                         ret = 1;
           54                                 }
           55                         }
           56                 }
           57                 endmntent(fp);
           58         } else {
           59                 for (i = 0; i < argc; i++) {
           60                         if (swapon(argv[i], flags) < 0) {
           61                                 weprintf("swapon %s:", argv[i]);
           62                                 ret = 1;
           63                         }
           64                 }
           65         }
           66         return ret;
           67 }