~vcs-imports/busybox/trunk

« back to all changes in this revision

Viewing changes to util-linux/fsfreeze.c

  • Committer: Eric Andersen
  • Date: 1999-11-24 09:04:33 UTC
  • Revision ID: git-v1:b99df0fd65abe3245fa2d04115326100847f865e
First draft

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* vi: set sw=4 ts=4: */
2
 
/*
3
 
 * Copyright (C) 2017 Denys Vlasenko <vda.linux@googlemail.com>
4
 
 *
5
 
 * Licensed under GPLv2, see file LICENSE in this source tree.
6
 
 */
7
 
//config:config FSFREEZE
8
 
//config:       bool "fsfreeze (3.7 kb)"
9
 
//config:       default y
10
 
//config:       select LONG_OPTS
11
 
//config:       help
12
 
//config:       Halt new accesses and flush writes on a mounted filesystem.
13
 
 
14
 
//applet:IF_FSFREEZE(APPLET_NOEXEC(fsfreeze, fsfreeze, BB_DIR_USR_SBIN, BB_SUID_DROP, fsfreeze))
15
 
 
16
 
//kbuild:lib-$(CONFIG_FSFREEZE) += fsfreeze.o
17
 
 
18
 
//usage:#define fsfreeze_trivial_usage
19
 
//usage:       "--[un]freeze MOUNTPOINT"
20
 
//usage:#define fsfreeze_full_usage "\n\n"
21
 
//usage:        "Flush and halt writes to MOUNTPOINT"
22
 
 
23
 
#include "libbb.h"
24
 
#include <linux/fs.h>
25
 
 
26
 
#ifndef FIFREEZE
27
 
# define FIFREEZE _IOWR('X', 119, int)
28
 
# define FITHAW   _IOWR('X', 120, int)
29
 
#endif
30
 
 
31
 
int fsfreeze_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
32
 
int fsfreeze_main(int argc UNUSED_PARAM, char **argv)
33
 
{
34
 
        unsigned opts;
35
 
        int fd;
36
 
 
37
 
        /* exactly one non-option arg: the mountpoint */
38
 
        /* one of opts is required */
39
 
        /* opts are mutually exclusive */
40
 
        opts = getopt32long(argv, "^"
41
 
                "" /* no opts */
42
 
                "\0" "=1:""\xff:\xfe:""\xff--\xfe:\xfe--\xff",
43
 
                "freeze\0"   No_argument "\xff"
44
 
                "unfreeze\0" No_argument "\xfe"
45
 
        );
46
 
 
47
 
        fd = xopen(argv[optind], O_RDONLY);
48
 
        /* Works with NULL arg on linux-4.8.0 */
49
 
        xioctl(fd, (opts & 1) ? FIFREEZE : FITHAW, NULL);
50
 
 
51
 
        return EXIT_SUCCESS;
52
 
}