Mercurial > hg > toybox
diff toys/other/mkswap.c @ 653:2986aa63a021
Move commands into "posix", "lsb", and "other" menus/directories.
author | Rob Landley <rob@landley.net> |
---|---|
date | Sat, 25 Aug 2012 14:25:22 -0500 |
parents | toys/mkswap.c@d51be130fda2 |
children | 6df4ccc0acbe |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toys/other/mkswap.c Sat Aug 25 14:25:22 2012 -0500 @@ -0,0 +1,42 @@ +/* vi: set sw=4 ts=4: + * + * mkswap.c - Format swap device. + * + * Copyright 2009 Rob Landley <rob@landley.net> + * + * Not in SUSv4. + +USE_MKSWAP(NEWTOY(mkswap, "<1>1", TOYFLAG_SBIN)) + +config MKSWAP + bool "mkswap" + default y + help + usage: mkswap DEVICE + + Sets up a Linux swap area on a device or file. +*/ + +#include "toys.h" + +void mkswap_main(void) +{ + int fd = xopen(*toys.optargs, O_RDWR), pagesize = sysconf(_SC_PAGE_SIZE); + off_t len = fdlength(fd); + unsigned int pages = (len/pagesize)-1, *swap = (unsigned int *)toybuf; + + // Write header. Note that older kernel versions checked signature + // on disk (not in cache) during swapon, so sync after writing. + + swap[0] = 1; + swap[1] = pages; + xlseek(fd, 1024, SEEK_SET); + xwrite(fd, swap, 129*sizeof(unsigned int)); + xlseek(fd, pagesize-10, SEEK_SET); + xwrite(fd, "SWAPSPACE2", 10); + fsync(fd); + + if (CFG_TOYBOX_FREE) close(fd); + + printf("Swapspace size: %luk\n", pages*(unsigned long)(pagesize/1024)); +}