wok annotate busybox/stuff/busybox-1.21-stat.u @ rev 14100

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