view toys/mkswap.c @ 493:42a322adbd17

update id to be SUS compliant * add -n and -G flag * allow a username to be given as argument * display complete list of groups * include it in default build
author Daniel Walter <d.walter@0x90.at>
date Tue, 21 Feb 2012 21:39:20 -0600
parents e1b9a8579ddb
children d51be130fda2
line wrap: on
line source

/* 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 = getpagesize();
	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));
}