rev |
line source |
slaxemulator@7361
|
1 Add non standard stat -m support to display file block list
|
slaxemulator@7361
|
2 Useful to patch read-only filesystems such as ISO9660, for defragmentation
|
slaxemulator@7361
|
3 tools or boot loaders
|
slaxemulator@7361
|
4 --- busybox-1.17.1/include/usage.src.h
|
slaxemulator@7361
|
5 +++ busybox-1.17.1/include/usage.src.h
|
slaxemulator@7361
|
6 @@ -3979,6 +3979,7 @@
|
slaxemulator@7361
|
7 "\n -f Display filesystem status" \
|
slaxemulator@7361
|
8 "\n -L Follow links" \
|
slaxemulator@7361
|
9 "\n -t Display info in terse form" \
|
slaxemulator@7361
|
10 + "\n -m Display block list" \
|
slaxemulator@7361
|
11 IF_SELINUX( \
|
slaxemulator@7361
|
12 "\n -Z Print security context" \
|
slaxemulator@7361
|
13 ) \
|
slaxemulator@7361
|
14
|
slaxemulator@7361
|
15 --- busybox-1.17.1/coreutils/stat.c
|
slaxemulator@7361
|
16 +++ busybox-1.17.1/coreutils/stat.c
|
slaxemulator@7361
|
17 @@ -13,11 +13,13 @@
|
slaxemulator@7361
|
18 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
slaxemulator@7361
|
19 */
|
slaxemulator@7361
|
20 #include "libbb.h"
|
slaxemulator@7361
|
21 +#include <linux/fs.h>
|
slaxemulator@7361
|
22
|
slaxemulator@7361
|
23 #define OPT_FILESYS (1 << 0)
|
slaxemulator@7361
|
24 #define OPT_TERSE (1 << 1)
|
slaxemulator@7361
|
25 #define OPT_DEREFERENCE (1 << 2)
|
slaxemulator@7361
|
26 -#define OPT_SELINUX (1 << 3)
|
slaxemulator@7361
|
27 +#define OPT_MAP (1 << 3)
|
slaxemulator@7361
|
28 +#define OPT_SELINUX (1 << 4)
|
slaxemulator@7361
|
29
|
slaxemulator@7361
|
30 #if ENABLE_FEATURE_STAT_FORMAT
|
slaxemulator@7361
|
31 typedef bool (*statfunc_ptr)(const char *, const char *);
|
slaxemulator@7361
|
32 @@ -361,6 +363,26 @@
|
slaxemulator@7361
|
33
|
slaxemulator@7361
|
34 /* Stat the file system and print what we find. */
|
slaxemulator@7361
|
35 #if !ENABLE_FEATURE_STAT_FORMAT
|
slaxemulator@7361
|
36 +#define do_mapfile(filename, format) do_mapfile(filename)
|
slaxemulator@7361
|
37 +#endif
|
slaxemulator@7361
|
38 +static bool do_mapfile(const char *filename, const char *format)
|
slaxemulator@7361
|
39 +{
|
slaxemulator@7361
|
40 + int i = 0;
|
slaxemulator@7361
|
41 + int fd = xopen(filename, O_RDONLY);
|
slaxemulator@7361
|
42 +
|
slaxemulator@7361
|
43 +#if ENABLE_FEATURE_STAT_FORMAT
|
slaxemulator@7361
|
44 + (void) format;
|
slaxemulator@7361
|
45 +#endif
|
slaxemulator@7361
|
46 + while (1) {
|
slaxemulator@7361
|
47 + int blk = i++;
|
slaxemulator@7361
|
48 + if (ioctl(fd,FIBMAP,&blk) < 0 || blk == 0) break;
|
slaxemulator@7361
|
49 + printf("%u\n",blk);
|
slaxemulator@7361
|
50 + }
|
slaxemulator@7361
|
51 + return 1;
|
slaxemulator@7361
|
52 +}
|
slaxemulator@7361
|
53 +
|
slaxemulator@7361
|
54 +/* Stat the file system and print what we find. */
|
slaxemulator@7361
|
55 +#if !ENABLE_FEATURE_STAT_FORMAT
|
slaxemulator@7361
|
56 #define do_statfs(filename, format) do_statfs(filename)
|
slaxemulator@7361
|
57 #endif
|
slaxemulator@7361
|
58 static bool do_statfs(const char *filename, const char *format)
|
slaxemulator@7361
|
59 @@ -651,7 +673,7 @@
|
slaxemulator@7361
|
60 statfunc_ptr statfunc = do_stat;
|
slaxemulator@7361
|
61
|
slaxemulator@7361
|
62 opt_complementary = "-1"; /* min one arg */
|
slaxemulator@7361
|
63 - opts = getopt32(argv, "ftL"
|
slaxemulator@7361
|
64 + opts = getopt32(argv, "ftLm"
|
slaxemulator@7361
|
65 IF_SELINUX("Z")
|
slaxemulator@7361
|
66 IF_FEATURE_STAT_FORMAT("c:", &format)
|
slaxemulator@7361
|
67 );
|
slaxemulator@7361
|
68 @@ -662,6 +684,9 @@
|
slaxemulator@7361
|
69 selinux_or_die();
|
slaxemulator@7361
|
70 }
|
slaxemulator@7361
|
71 #endif
|
slaxemulator@7361
|
72 + if (opts & OPT_MAP) { /* -m */
|
slaxemulator@7361
|
73 + statfunc = do_mapfile;
|
slaxemulator@7361
|
74 + }
|
slaxemulator@7361
|
75 ok = 1;
|
slaxemulator@7361
|
76 argv += optind;
|
slaxemulator@7361
|
77 for (i = 0; argv[i]; ++i)
|