Annotation of /tags/mkinitrd-6_3_1/busybox/e2fsprogs/tune2fs.c
Parent Directory | Revision Log
Revision 1143 -
(hide annotations)
(download)
Thu Aug 19 12:44:27 2010 UTC (14 years, 1 month ago) by niro
File MIME type: text/plain
File size: 1542 byte(s)
Thu Aug 19 12:44:27 2010 UTC (14 years, 1 month ago) by niro
File MIME type: text/plain
File size: 1542 byte(s)
tagged 'mkinitrd-6_3_1'
1 | niro | 1123 | /* vi: set sw=4 ts=4: */ |
2 | /* | ||
3 | * tune2fs: utility to modify EXT2 filesystem | ||
4 | * | ||
5 | * Busybox'ed (2009) by Vladimir Dronnikov <dronnikov@gmail.com> | ||
6 | * | ||
7 | * Licensed under GPLv2, see file LICENSE in this tarball for details. | ||
8 | */ | ||
9 | #include "libbb.h" | ||
10 | #include <linux/fs.h> | ||
11 | #include <linux/ext2_fs.h> | ||
12 | |||
13 | // storage helpers | ||
14 | char BUG_wrong_field_size(void); | ||
15 | #define STORE_LE(field, value) \ | ||
16 | do { \ | ||
17 | if (sizeof(field) == 4) \ | ||
18 | field = SWAP_LE32(value); \ | ||
19 | else if (sizeof(field) == 2) \ | ||
20 | field = SWAP_LE16(value); \ | ||
21 | else if (sizeof(field) == 1) \ | ||
22 | field = (value); \ | ||
23 | else \ | ||
24 | BUG_wrong_field_size(); \ | ||
25 | } while (0) | ||
26 | |||
27 | #define FETCH_LE32(field) \ | ||
28 | (sizeof(field) == 4 ? SWAP_LE32(field) : BUG_wrong_field_size()) | ||
29 | |||
30 | enum { | ||
31 | OPT_L = 1 << 0, // label | ||
32 | }; | ||
33 | |||
34 | int tune2fs_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | ||
35 | int tune2fs_main(int argc UNUSED_PARAM, char **argv) | ||
36 | { | ||
37 | unsigned opts; | ||
38 | const char *label; | ||
39 | struct ext2_super_block *sb; | ||
40 | int fd; | ||
41 | |||
42 | opt_complementary = "=1"; | ||
43 | opts = getopt32(argv, "L:", &label); | ||
44 | argv += optind; // argv[0] -- device | ||
45 | |||
46 | if (!opts) | ||
47 | bb_show_usage(); | ||
48 | |||
49 | // read superblock | ||
50 | fd = xopen(argv[0], O_RDWR); | ||
51 | xlseek(fd, 1024, SEEK_SET); | ||
52 | sb = xzalloc(1024); | ||
53 | xread(fd, sb, 1024); | ||
54 | |||
55 | // mangle superblock | ||
56 | //STORE_LE(sb->s_wtime, time(NULL)); - why bother? | ||
57 | // set the label | ||
58 | if (1 /*opts & OPT_L*/) | ||
59 | safe_strncpy((char *)sb->s_volume_name, label, sizeof(sb->s_volume_name)); | ||
60 | // write superblock | ||
61 | xlseek(fd, 1024, SEEK_SET); | ||
62 | xwrite(fd, sb, 1024); | ||
63 | |||
64 | if (ENABLE_FEATURE_CLEAN_UP) { | ||
65 | free(sb); | ||
66 | } | ||
67 | |||
68 | xclose(fd); | ||
69 | return EXIT_SUCCESS; | ||
70 | } |