Mercurial > hg > toybox
changeset 1434:08a34594b2c6 draft
A toy _BLOCKDEV_ to get/set block device properties.
author | Ashwini Sharma <ak.ashwini1981@gmail.com> |
---|---|
date | Tue, 12 Aug 2014 07:14:58 -0500 |
parents | 00c20f410c46 |
children | 6bc78fa4c31f |
files | toys/pending/blockdev.c |
diffstat | 1 files changed, 92 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toys/pending/blockdev.c Tue Aug 12 07:14:58 2014 -0500 @@ -0,0 +1,92 @@ +/* blockdev.c -show/set blockdev information. + * + * Copyright 2014 Sameer Prakash Pradhan <sameer.p.pradhan@gmail.com> + * + * No Standard. + * + +USE_BLOCKDEV(NEWTOY(blockdev, "<1>1(setro)(setrw)(getro)(getss)(getbsz)(setbsz)#<0(getsz)(getsize)(getsize64)(flushbufs)(rereadpt)",TOYFLAG_USR|TOYFLAG_BIN)) + +config BLOCKDEV + bool "blockdev" + default n + help + usage:blockdev OPTION BLOCKDEV + + + setro Set ro + setrw Set rw + getro Get ro + getss Get sector size + getbsz Get block size + setbsz BYTES Set block size + getsz Get device size in 512-byte sectors + getsize Get device size in sectors (deprecated) + getsize64 Get device size in bytes + flushbufs Flush buffers + rereadpt Reread partition table +*/ + +#define FOR_blockdev +#include "toys.h" +#include <linux/fs.h> + +GLOBALS( + long bsz; +) + +void blockdev_main(void) +{ + long long val = 0; + int cmd, fd, set = 0; + + switch (toys.optflags) { + case FLAG_setro: + cmd = BLKROSET; + val = set = 1; + break; + case FLAG_setrw: + cmd = BLKROSET; + set = 1; + break; + case FLAG_getro: + cmd = BLKROGET; + break; + case FLAG_getss: + cmd = BLKSSZGET; + break; + case FLAG_getbsz: + cmd = BLKBSZGET; + break; + case FLAG_setbsz: + cmd = BLKBSZSET; + set = 1; + val = TT.bsz; + break; + case FLAG_getsz: + cmd = BLKGETSIZE64; + break; + case FLAG_getsize: + cmd = BLKGETSIZE; + break; + case FLAG_getsize64: + cmd = BLKGETSIZE64; + break; + case FLAG_flushbufs: + cmd = BLKFLSBUF; + set = 1; + break; + case FLAG_rereadpt: + cmd = BLKRRPART; + set = 1; + break; + default: + toys.exithelp = 1; + error_exit(NULL); + } + fd = xopen(*toys.optargs, O_RDONLY); + xioctl(fd, cmd, &val); + if (!set) + printf("%lld\n", ((toys.optflags & FLAG_getsz)?val >> 9: val)); + if (CFG_TOYBOX_FREE) xclose(fd); +}