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));
+}