ubase

suckless linux base utils
git clone git://git.2f30.org/ubase.git
Log | Files | Refs | README | LICENSE

commit 5d85bb0cfe86c81e8b5e973098491faad23e66e0
parent 816199471f291e52ca42b1a6aa04deb0043a57a3
Author: sin <sin@2f30.org>
Date:   Sat Jun 14 16:48:10 +0100

Add fsfreeze(8)

Diffstat:
Makefile | 1+
fsfreeze.c | 51+++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 52 insertions(+), 0 deletions(-)
diff --git 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 @@ -0,0 +1,51 @@ +/* See LICENSE file for copyright and license details. */ +#include <fcntl.h> +#include <stdio.h> +#include <stdlib.h> +#include <sys/ioctl.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <unistd.h> +#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; +}