Introduction
Introduction Statistics Contact Development Disclaimer Help
mkswap.c - ubase - suckless linux base utils
git clone git://git.suckless.org/ubase
Log
Files
Refs
README
LICENSE
---
mkswap.c (1739B)
---
1 /* See LICENSE file for copyright and license details. */
2 #include <sys/stat.h>
3
4 #include <fcntl.h>
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <string.h>
8 #include <unistd.h>
9
10 #include "util.h"
11
12 #define SWAP_UUID_LENGTH 16
13 #define SWAP_LABEL_LENGTH 16
14 #define SWAP_MIN_PAGES 10
15
16 struct swap_hdr {
17 char bootbits[1024];
18 unsigned int version;
19 unsigned int last_page;
20 unsigned int nr_badpages;
21 unsigned char uuid[SWAP_UUID_LENGTH];
22 char volume_name[SWAP_LABEL_LENGTH];
23 unsigned int padding[117];
24 unsigned int badpages[1];
25 };
26
27 static void
28 usage(void)
29 {
30 eprintf("usage: %s device\n", argv0);
31 }
32
33 int
34 main(int argc, char *argv[])
35 {
36 int fd;
37 unsigned int pages;
38 long pagesize;
39 struct stat sb;
40 char *buf;
41 struct swap_hdr *hdr;
42
43 ARGBEGIN {
44 default:
45 usage();
46 } ARGEND;
47
48 if (argc < 1)
49 usage();
50
51 pagesize = sysconf(_SC_PAGESIZE);
52 if (pagesize <= 0) {
53 pagesize = sysconf(_SC_PAGE_SIZE);
54 if (pagesize <= 0)
55 eprintf("can't determine pagesize\n");
56 }
57
58 fd = open(argv[0], O_RDWR);
59 if (fd < 0)
60 eprintf("open %s:", argv[0]);
61 if (fstat(fd, &sb) < 0)
62 eprintf("stat %s:", argv[0]);
63
64 buf = ecalloc(1, pagesize);
65
66 pages = sb.st_size / pagesize;
67 if (pages < SWAP_MIN_PAGES)
68 eprintf("swap space needs to be at least %ldKiB\n",
69 SWAP_MIN_PAGES * pagesize / 1024);
70
71 /* Fill up the swap header */
72 hdr = (struct swap_hdr *)buf;
73 hdr->version = 1;
74 hdr->last_page = pages - 1;
75 strncpy(buf + pagesize - 10, "SWAPSPACE2", 10);
76
77 printf("Setting up swapspace version 1, size = %luKiB\n",
78 (pages - 1) * pagesize / 1024);
79
80 /* Write out the signature page */
81 if (write(fd, buf, pagesize) != pagesize)
82 eprintf("unable to write signature page\n");
83
84 fsync(fd);
85 close(fd);
86 free(buf);
87
88 return 0;
89 }
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.