aboutsummaryrefslogtreecommitdiff
path: root/toys/other/swapon.c
blob: 2eb5b93cee5f8eee26a96c401472681aaa8b7070 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/* swapon.c - Enable region for swapping
 *
 * Copyright 2012 Elie De Brauwer <eliedebrauwer@gmail.com>

USE_SWAPON(NEWTOY(swapon, "<1>1p#<0>32767d", TOYFLAG_SBIN|TOYFLAG_NEEDROOT))

config SWAPON
  bool "swapon"
  default y
  help
    usage: swapon [-d] [-p priority] filename

    Enable swapping on a given device/file.

    -d	Discard freed SSD pages
    -p	Priority (highest priority areas allocated first)
*/

#define FOR_swapon
#include "toys.h"

GLOBALS(
  long p;
)

void swapon_main(void)
{
  // 0x70000 = SWAP_FLAG_DISCARD|SWAP_FLAG_DISCARD_ONCE|SWAP_FLAG_DISCARD_PAGES
  int flags = (toys.optflags&FLAG_d)*0x70000;

  if (toys.optflags)
    flags |= SWAP_FLAG_PREFER | (TT.p << SWAP_FLAG_PRIO_SHIFT);

  if (swapon(*toys.optargs, flags))
    perror_exit("Couldn't swapon '%s'", *toys.optargs);
}