1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31#define FOR_blockdev
32#include "toys.h"
33#include <linux/fs.h>
34
35GLOBALS(
36 long bsz;
37)
38
39void blockdev_main(void)
40{
41 int cmds[] = {BLKRRPART, BLKFLSBUF, BLKGETSIZE64, BLKGETSIZE, BLKGETSIZE64,
42 BLKBSZSET, BLKBSZGET, BLKSSZGET, BLKROGET, BLKROSET, BLKROSET};
43 char **ss;
44 long long val = 0;
45
46 if (!toys.optflags) help_exit("need --option");
47
48 for (ss = toys.optargs; *ss; ss++) {
49 int fd = xopenro(*ss), i;
50
51
52 for (i = 0; i < 32; i++) {
53 long flag = toys.optflags & (1<<i);
54
55 if (!flag) continue;
56
57 if (flag & FLAG_setbsz) val = TT.bsz;
58 else val = !!(flag & FLAG_setro);
59
60 xioctl(fd, cmds[i], &val);
61
62 flag &= FLAG_setbsz|FLAG_setro|FLAG_flushbufs|FLAG_rereadpt|FLAG_setrw;
63 if (!flag) printf("%lld\n", (toys.optflags & FLAG_getsz) ? val >> 9: val);
64 }
65 xclose(fd);
66 }
67}
68