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 }