Contents of /trunk/mkinitrd-magellan/busybox/e2fsprogs/tune2fs.c
Parent Directory | Revision Log
Revision 1123 -
(show annotations)
(download)
Wed Aug 18 21:56:57 2010 UTC (14 years, 1 month ago) by niro
File MIME type: text/plain
File size: 1542 byte(s)
Wed Aug 18 21:56:57 2010 UTC (14 years, 1 month ago) by niro
File MIME type: text/plain
File size: 1542 byte(s)
-updated to busybox-1.17.1
1 | /* 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 | } |