From 5d85bb0cfe86c81e8b5e973098491faad23e66e0 Mon Sep 17 00:00:00 2001 From: sin Date: Sat, 14 Jun 2014 16:48:10 +0100 Subject: [PATCH] Add fsfreeze(8) --- Makefile | 1 + fsfreeze.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 fsfreeze.c diff --git a/Makefile b/Makefile index ed73272..08513b2 100644 --- a/Makefile +++ b/Makefile @@ -31,6 +31,7 @@ SRC = \ eject.c \ fallocate.c \ free.c \ + fsfreeze.c \ getty.c \ halt.c \ hwclock.c \ diff --git a/fsfreeze.c b/fsfreeze.c new file mode 100644 index 0000000..24f55dc --- /dev/null +++ b/fsfreeze.c @@ -0,0 +1,51 @@ +/* See LICENSE file for copyright and license details. */ +#include +#include +#include +#include +#include +#include +#include +#include "util.h" + +#define FIFREEZE _IOWR('X', 119, int /* Freeze */ +#define FITHAW _IOWR('X', 120, int) /* Thaw */ + +static void +usage(void) +{ + eprintf("usage: %s [-f] [-u] mountpoint\n", argv0); +} + +int +main(int argc, char *argv[]) +{ + int fflag = 0; + int uflag = 0; + long p = 1; + int fd; + + ARGBEGIN { + case 'f': + fflag = 1; + break; + case 'u': + uflag = 1; + break; + default: + usage(); + } ARGEND; + + if (argc != 1) + usage(); + + if ((fflag ^ uflag) == 0) + usage(); + + fd = open(argv[0], O_RDONLY); + if (fd < 0) + eprintf("open: %s:", argv[0]); + ioctl(fd, fflag == 1 ? FIFREEZE : FITHAW, &p); + close(fd); + return EXIT_SUCCESS; +}