blob: a847ab8bdfc325484c37e63b3c1cd19c807b60d9 [file] [log] [blame]
Rob Landley52476712009-01-18 16:19:25 -06001/* vi: set sw=4 ts=4:
2 *
3 * mkswap.c - Format swap device.
4 *
5 * Copyright 2009 Rob Landley <rob@landley.net>
6 *
Rob Landley86357ca2011-12-11 03:54:58 -06007 * Not in SUSv4.
Rob Landley52476712009-01-18 16:19:25 -06008
9USE_MKSWAP(NEWTOY(mkswap, "<1>2", TOYFLAG_SBIN))
10
11config MKSWAP
12 bool "mkswap"
13 default y
14 help
15 usage: mkswap DEVICE
16
17 Format a Linux v1 swap device.
18*/
19
20#include "toys.h"
21
22void mkswap_main(void)
23{
24 int fd = xopen(*toys.optargs, O_RDWR), pagesize = getpagesize();
25 off_t len = fdlength(fd);
26 unsigned int pages = (len/pagesize)-1, *swap = (unsigned int *)toybuf;
27
28 // Write header. Note that older kernel versions checked signature
29 // on disk (not in cache) during swapon, so sync after writing.
30
31 swap[0] = 1;
32 swap[1] = pages;
33 xlseek(fd, 1024, SEEK_SET);
34 xwrite(fd, swap, 129*sizeof(unsigned int));
35 xlseek(fd, pagesize-10, SEEK_SET);
36 xwrite(fd, "SWAPSPACE2", 10);
37 fsync(fd);
38
39 if (CFG_TOYBOX_FREE) close(fd);
40
41 printf("Swapspace size: %luk\n", pages*(unsigned long)(pagesize/1024));
42}