wok annotate busybox/stuff/busybox-1.17.4-stat.u @ rev 7361

Up: busybox to 1.17.4.
author Christopher Rogers <slaxemulator@gmail.com>
date Tue Nov 23 03:15:08 2010 +0000 (2010-11-23)
parents
children
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)