tune2fs: new applet by Vladimir. Only supports -L LABEL

function                                             old     new   delta
tune2fs_main                                           -     165    +165
packed_usage                                       26692   26702     +10
applet_names                                        2148    2156      +8
applet_main                                         1264    1268      +4
applet_nameofs                                       632     634      +2
applet_install_loc                                   158     159      +1
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 5/0 up/down: 190/0)             Total: 190 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2009-10-22 00:55:55 +02:00
parent 481ca9604d
commit 3945bc1534
4 changed files with 83 additions and 9 deletions

View File

@ -396,7 +396,7 @@ IF_TRUE(APPLET_NOFORK(true, true, _BB_DIR_BIN, _BB_SUID_DROP, true))
IF_TTY(APPLET(tty, _BB_DIR_USR_BIN, _BB_SUID_DROP))
IF_TTYSIZE(APPLET(ttysize, _BB_DIR_USR_BIN, _BB_SUID_DROP))
IF_TUNCTL(APPLET(tunctl, _BB_DIR_SBIN, _BB_SUID_DROP))
//IF_TUNE2FS(APPLET(tune2fs, _BB_DIR_SBIN, _BB_SUID_DROP))
IF_MKFS_EXT2(APPLET(tune2fs, _BB_DIR_SBIN, _BB_SUID_DROP))
IF_APP_UDHCPC(APPLET(udhcpc, _BB_DIR_SBIN, _BB_SUID_DROP))
IF_APP_UDHCPD(APPLET(udhcpd, _BB_DIR_USR_SBIN, _BB_SUID_DROP))
IF_UDPSVD(APPLET_ODDNAME(udpsvd, tcpudpsvd, _BB_DIR_USR_BIN, _BB_SUID_DROP, udpsvd))

View File

@ -4676,12 +4676,14 @@ IF_FEATURE_TUNCTL_UG( \
"# tunctl -d tun0\n"
#define tune2fs_trivial_usage \
"[-c max-mounts-count] [-e errors-behavior] [-g group] " \
"[-i interval[d|m|w]] [-j] [-J journal-options] [-l] [-s sparse-flag] " \
"[-m reserved-blocks-percent] [-o [^]mount-options[,...]] " \
"[-r reserved-blocks-count] [-u user] [-C mount-count] " \
"[-L volume-label] [-M last-mounted-dir] [-O [^]feature[,...]] " \
"[-T last-check-time] [-U UUID] device"
/* "[-c max-mounts-count] [-e errors-behavior] [-g group] " */ \
/* "[-i interval[d|m|w]] [-j] [-J journal-options] [-l] [-s sparse-flag] " */ \
/* "[-m reserved-blocks-percent] [-o [^]mount-options[,...]] " */ \
/* "[-r reserved-blocks-count] [-u user] [-C mount-count] " */ \
"[-L LABEL] " \
/* "[-M last-mounted-dir] [-O [^]feature[,...]] " */ \
/* "[-T last-check-time] [-U UUID] " */ \
"BLOCKDEV"
#define tune2fs_full_usage "\n\n" \
"Adjust filesystem options on ext[23] filesystems"

View File

@ -38,4 +38,5 @@ lib-$(CONFIG_SCRIPTREPLAY) += scriptreplay.o
lib-$(CONFIG_SETARCH) += setarch.o
lib-$(CONFIG_SWAPONOFF) += swaponoff.o
lib-$(CONFIG_SWITCH_ROOT) += switch_root.o
lib-$(CONFIG_MKFS_EXT2) += tune2fs.o
lib-$(CONFIG_UMOUNT) += umount.o

71
util-linux/tune2fs.c Normal file
View File

@ -0,0 +1,71 @@
/* vi: set sw=4 ts=4: */
/*
* tune2fs: utility to modify EXT2 filesystem
*
* Busybox'ed (2009) by Vladimir Dronnikov <dronnikov@gmail.com>
*
* Licensed under GPLv2, see file LICENSE in this tarball for details.
*/
#include "libbb.h"
#include <linux/fs.h>
#include <linux/ext2_fs.h>
#include "volume_id/volume_id_internal.h"
// storage helpers
char BUG_wrong_field_size(void);
#define STORE_LE(field, value) \
do { \
if (sizeof(field) == 4) \
field = cpu_to_le32(value); \
else if (sizeof(field) == 2) \
field = cpu_to_le16(value); \
else if (sizeof(field) == 1) \
field = (value); \
else \
BUG_wrong_field_size(); \
} while (0)
#define FETCH_LE32(field) \
(sizeof(field) == 4 ? cpu_to_le32(field) : BUG_wrong_field_size())
enum {
OPT_L = 1 << 0, // label
};
int tune2fs_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int tune2fs_main(int argc UNUSED_PARAM, char **argv)
{
unsigned opts;
const char *label;
struct ext2_super_block *sb;
int fd;
opt_complementary = "=1";
opts = getopt32(argv, "L:", &label);
argv += optind; // argv[0] -- device
if (!opts)
bb_show_usage();
// read superblock
fd = xopen(argv[0], O_RDWR);
xlseek(fd, 1024, SEEK_SET);
sb = xzalloc(1024);
xread(fd, sb, 1024);
// mangle superblock
//STORE_LE(sb->s_wtime, time(NULL)); - why bother?
// set the label
if (1 /*opts & OPT_L*/)
safe_strncpy((char *)sb->s_volume_name, label, sizeof(sb->s_volume_name));
// write superblock
xlseek(fd, 1024, SEEK_SET);
xwrite(fd, sb, 1024);
if (ENABLE_FEATURE_CLEAN_UP) {
free(sb);
}
xclose(fd);
return EXIT_SUCCESS;
}