wok-next annotate busybox/stuff/patches/stat.u @ rev 19875

Up cookutils (973), busybox (1.27.2)
author Aleksej Bobylev <al.bobylev@gmail.com>
date Fri Sep 29 20:57:09 2017 +0300 (2017-09-29)
parents busybox/stuff/1.26/stat.u@dd1205f552b8
children 9616e3b57045
rev   line source
al@19592 1 Add non standard stat -m support to display file block list
al@19592 2 Useful to patch read-only filesystems such as ISO9660, for defragmentation
al@19592 3 tools or boot loaders
al@19592 4 --- busybox-1.26/coreutils/stat.c
al@19592 5 +++ busybox-1.26/coreutils/stat.c
al@19592 6 @@ -54,6 +54,7 @@
al@19592 7 //usage: )
al@19592 8 //usage: "\n -L Follow links"
al@19592 9 //usage: "\n -t Terse display"
al@19592 10 +//usage: "\n -m Display block list"
al@19592 11 //usage: IF_SELINUX(
al@19592 12 //usage: "\n -Z Print security context"
al@19592 13 //usage: )
al@19592 14 @@ -106,13 +107,15 @@
al@19592 15 //usage: )
al@19592 16
al@19592 17 #include "libbb.h"
al@19592 18 +#include <linux/fs.h>
al@19592 19 #include "common_bufsiz.h"
al@19592 20
al@19592 21 enum {
al@19592 22 OPT_TERSE = (1 << 0),
al@19592 23 OPT_DEREFERENCE = (1 << 1),
al@19592 24 - OPT_FILESYS = (1 << 2) * ENABLE_FEATURE_STAT_FILESYSTEM,
al@19592 25 - OPT_SELINUX = (1 << (2+ENABLE_FEATURE_STAT_FILESYSTEM)) * ENABLE_SELINUX,
al@19592 26 + OPT_MAP = (1 << 2),
al@19592 27 + OPT_FILESYS = (1 << 3) * ENABLE_FEATURE_STAT_FILESYSTEM,
al@19592 28 + OPT_SELINUX = (1 << (3+ENABLE_FEATURE_STAT_FILESYSTEM)) * ENABLE_SELINUX,
al@19592 29 };
al@19592 30
al@19592 31 #if ENABLE_FEATURE_STAT_FORMAT
al@19592 32 @@ -463,6 +466,25 @@
al@19592 33 }
al@19592 34 #endif /* FEATURE_STAT_FORMAT */
al@19592 35
al@19592 36 +#if !ENABLE_FEATURE_STAT_FORMAT
al@19592 37 +#define do_mapfile(filename, format) do_mapfile(filename)
al@19592 38 +#endif
al@19592 39 +static bool do_mapfile(const char *filename, const char *format)
al@19592 40 +{
al@19592 41 + int i = 0;
al@19592 42 + int fd = xopen(filename, O_RDONLY);
al@19592 43 +
al@19592 44 +#if ENABLE_FEATURE_STAT_FORMAT
al@19592 45 + (void) format;
al@19592 46 +#endif
al@19592 47 + while (1) {
al@19592 48 + int blk = i++;
al@19592 49 + if (ioctl(fd,FIBMAP,&blk) < 0 || blk == 0) break;
al@19592 50 + printf("%u\n",blk);
al@19592 51 + }
al@19592 52 + return 1;
al@19592 53 +}
al@19592 54 +
al@19592 55 #if ENABLE_FEATURE_STAT_FILESYSTEM
al@19592 56 /* Stat the file system and print what we find. */
al@19592 57 #if !ENABLE_FEATURE_STAT_FORMAT
al@19592 58 @@ -763,7 +785,7 @@
al@19592 59 statfunc_ptr statfunc = do_stat;
al@19592 60
al@19592 61 opt_complementary = "-1"; /* min one arg */
al@19592 62 - opts = getopt32(argv, "tL"
al@19592 63 + opts = getopt32(argv, "tLm"
al@19592 64 IF_FEATURE_STAT_FILESYSTEM("f")
al@19592 65 IF_SELINUX("Z")
al@19592 66 IF_FEATURE_STAT_FORMAT("c:", &format)
al@19592 67 @@ -777,6 +799,9 @@
al@19592 68 selinux_or_die();
al@19592 69 }
al@19592 70 #endif
al@19592 71 + if (opts & OPT_MAP) { /* -m */
al@19592 72 + statfunc = do_mapfile;
al@19592 73 + }
al@19592 74 ok = 1;
al@19592 75 argv += optind;
al@19592 76 for (i = 0; argv[i]; ++i)