rev |
line source |
pascal@16773
|
1 --- busybox-1.22.0/include/applets.src.h
|
pascal@16773
|
2 +++ busybox-1.22.0/include/applets.src.h
|
pascal@16773
|
3 @@ -138,6 +138,7 @@
|
pascal@16773
|
4 IF_EXPR(APPLET(expr, BB_DIR_USR_BIN, BB_SUID_DROP))
|
pascal@16773
|
5 IF_FAKEIDENTD(APPLET(fakeidentd, BB_DIR_USR_SBIN, BB_SUID_DROP))
|
pascal@16773
|
6 IF_FALSE(APPLET_NOFORK(false, false, BB_DIR_BIN, BB_SUID_DROP, false))
|
pascal@16773
|
7 +IF_FATATTR(APPLET(fatattr, BB_DIR_BIN, BB_SUID_DROP))
|
pascal@16773
|
8 IF_FBSET(APPLET(fbset, BB_DIR_USR_SBIN, BB_SUID_DROP))
|
pascal@16773
|
9 IF_FBSPLASH(APPLET(fbsplash, BB_DIR_SBIN, BB_SUID_DROP))
|
pascal@16773
|
10 IF_FDFLUSH(APPLET_ODDNAME(fdflush, freeramdisk, BB_DIR_BIN, BB_SUID_DROP, fdflush))
|
pascal@16773
|
11 --- busybox-1.22.0/e2fsprogs/Config.src
|
pascal@16773
|
12 +++ busybox-1.22.0/e2fsprogs/Config.src
|
pascal@16773
|
13 @@ -37,6 +37,13 @@
|
pascal@16773
|
14 help
|
pascal@16773
|
15 lsattr lists the file attributes on a second extended file system.
|
pascal@16773
|
16
|
pascal@16773
|
17 +config FATATTR
|
pascal@16773
|
18 + bool "fatattr"
|
pascal@16773
|
19 + default y
|
pascal@16773
|
20 + select PLATFORM_LINUX
|
pascal@16773
|
21 + help
|
pascal@16773
|
22 + fatattr lists or changes the file attributes on a fat file system.
|
pascal@16773
|
23 +
|
pascal@16773
|
24 ### config MKE2FS
|
pascal@16773
|
25 ### bool "mke2fs"
|
pascal@16773
|
26 ### default y
|
pascal@16773
|
27 --- busybox-1.22.0/e2fsprogs/Kbuild.src
|
pascal@16773
|
28 +++ busybox-1.22.0/e2fsprogs/Kbuild.src
|
pascal@16773
|
29 @@ -11,5 +11,7 @@
|
pascal@16773
|
30 lib-$(CONFIG_CHATTR) += chattr.o e2fs_lib.o
|
pascal@16773
|
31 lib-$(CONFIG_LSATTR) += lsattr.o e2fs_lib.o
|
pascal@16773
|
32
|
pascal@16773
|
33 +lib-$(CONFIG_FATATTR) += fatattr.o
|
pascal@16773
|
34 +
|
pascal@16773
|
35 lib-$(CONFIG_FSCK) += fsck.o
|
pascal@16773
|
36 lib-$(CONFIG_TUNE2FS) += tune2fs.o
|
pascal@16773
|
37 --- busybox-1.22.0/e2fsprogs/fatattr.c
|
pascal@16773
|
38 +++ busybox-1.22.0/e2fsprogs/fatattr.c
|
pascal@16773
|
39 @@ -0,0 +1,113 @@
|
pascal@16773
|
40 +/* vi: set sw=4 ts=4: */
|
pascal@16773
|
41 +/*
|
pascal@16773
|
42 + * fatattr.c - Display or change file attributes on a fat file system
|
pascal@16773
|
43 + *
|
pascal@16773
|
44 + * Copyright 2005 H. Peter Anvin
|
pascal@16773
|
45 + * Busybox'ed (2014) by Pascal Bellard <pascal.bellard@ads-lu.com>
|
pascal@16773
|
46 + *
|
pascal@16773
|
47 + * This file can be redistributed under the terms of the GNU General
|
pascal@16773
|
48 + * Public License
|
pascal@16773
|
49 + */
|
pascal@16773
|
50 +
|
pascal@16773
|
51 +//usage:#define fatattr_trivial_usage
|
pascal@16773
|
52 +//usage: "[-+rhsvda] [FILE]..."
|
pascal@16773
|
53 +//usage:#define fatattr_full_usage "\n\n"
|
pascal@16773
|
54 +//usage: "Change file attributes on a fat fs\n"
|
pascal@16773
|
55 +//usage: "\nModifiers:"
|
pascal@16773
|
56 +//usage: "\n - Clear attributes"
|
pascal@16773
|
57 +//usage: "\n + Set attributes"
|
pascal@16773
|
58 +//usage: "\nAttributes:"
|
pascal@16773
|
59 +//usage: "\n r Read only"
|
pascal@16773
|
60 +//usage: "\n h Hidden"
|
pascal@16773
|
61 +//usage: "\n s System"
|
pascal@16773
|
62 +//usage: "\n v Volume label"
|
pascal@16773
|
63 +//usage: "\n d Directory"
|
pascal@16773
|
64 +//usage: "\n a Archive"
|
pascal@16773
|
65 +
|
pascal@16773
|
66 +#include "libbb.h"
|
pascal@16773
|
67 +/* linux/msdos_fs.h says: */
|
pascal@16773
|
68 +#ifndef FAT_IOCTL_GET_ATTRIBUTES
|
pascal@16773
|
69 +# define FAT_IOCTL_GET_ATTRIBUTES _IOR('r', 0x10, __u32)
|
pascal@16773
|
70 +#endif
|
pascal@16773
|
71 +#ifndef FAT_IOCTL_SET_ATTRIBUTES
|
pascal@16773
|
72 +# define FAT_IOCTL_SET_ATTRIBUTES _IOW('r', 0x11, __u32)
|
pascal@16773
|
73 +#endif
|
pascal@16773
|
74 +
|
pascal@16773
|
75 +#define OPT_ADD 1
|
pascal@16773
|
76 +#define OPT_REM 2
|
pascal@16773
|
77 +
|
pascal@16773
|
78 +struct globals {
|
pascal@16773
|
79 + unsigned long af;
|
pascal@16773
|
80 + unsigned long rf;
|
pascal@16773
|
81 +};
|
pascal@16773
|
82 +
|
pascal@16773
|
83 +/* Currently supports only the FAT flags, not the NTFS ones */
|
pascal@16773
|
84 +const char bit_to_char[] = "rhsvda67 ";
|
pascal@16773
|
85 +
|
pascal@16773
|
86 +static inline unsigned long get_flag(char c)
|
pascal@16773
|
87 +{
|
pascal@16773
|
88 + const char *fp = strchr(bit_to_char, c);
|
pascal@16773
|
89 + if (fp)
|
pascal@16773
|
90 + return 1 << (fp - bit_to_char);
|
pascal@16773
|
91 + bb_error_msg_and_die("invalid character '%c' ", c);
|
pascal@16773
|
92 +}
|
pascal@16773
|
93 +
|
pascal@16773
|
94 +static inline int decode_arg(const char *arg, struct globals *gp)
|
pascal@16773
|
95 +{
|
pascal@16773
|
96 + unsigned long *fl;
|
pascal@16773
|
97 + char opt = *arg++;
|
pascal@16773
|
98 +
|
pascal@16773
|
99 + fl = &gp->af;
|
pascal@16773
|
100 + if (opt == '-') {
|
pascal@16773
|
101 + fl = &gp->rf;
|
pascal@16773
|
102 + } else if (opt != '+') {
|
pascal@16773
|
103 + return 0;
|
pascal@16773
|
104 + }
|
pascal@16773
|
105 +
|
pascal@16773
|
106 + while (*arg)
|
pascal@16773
|
107 + *fl |= get_flag(*arg++);
|
pascal@16773
|
108 +
|
pascal@16773
|
109 + return 1;
|
pascal@16773
|
110 +}
|
pascal@16773
|
111 +
|
pascal@16773
|
112 +int fatattr_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
pascal@16773
|
113 +int fatattr_main(int argc UNUSED_PARAM, char **argv)
|
pascal@16773
|
114 +{
|
pascal@16773
|
115 + struct globals g;
|
pascal@16773
|
116 + char *arg;
|
pascal@16773
|
117 +
|
pascal@16773
|
118 + g.rf = g.af = 0;
|
pascal@16773
|
119 +
|
pascal@16773
|
120 + /* parse the args */
|
pascal@16773
|
121 + while ((arg = *++argv)) {
|
pascal@16773
|
122 + if (!decode_arg(arg, &g))
|
pascal@16773
|
123 + break;
|
pascal@16773
|
124 + }
|
pascal@16773
|
125 +
|
pascal@16773
|
126 + /* run sanity checks on all the arguments given us */
|
pascal@16773
|
127 + if (!*argv)
|
pascal@16773
|
128 + bb_show_usage();
|
pascal@16773
|
129 +
|
pascal@16773
|
130 + /* now proceed all the files passed to us */
|
pascal@16773
|
131 + do {
|
pascal@16773
|
132 + int fd, i;
|
pascal@16773
|
133 + uint32_t attr;
|
pascal@16773
|
134 +
|
pascal@16773
|
135 + fd = xopen(*argv, O_RDONLY);
|
pascal@16773
|
136 + xioctl(fd, FAT_IOCTL_GET_ATTRIBUTES, &attr);
|
pascal@16773
|
137 + attr |= g.af;
|
pascal@16773
|
138 + attr &= ~g.rf;
|
pascal@16773
|
139 + if (g.af || g.rf)
|
pascal@16773
|
140 + xioctl(fd, FAT_IOCTL_SET_ATTRIBUTES, &attr);
|
pascal@16773
|
141 + else {
|
pascal@16773
|
142 + for ( i = 0 ; bit_to_char[i] ; i++ ) {
|
pascal@16773
|
143 + bb_putchar( (attr & 1) ? bit_to_char[i] : ' ' );
|
pascal@16773
|
144 + attr >>= 1;
|
pascal@16773
|
145 + }
|
pascal@16773
|
146 + puts(*argv);
|
pascal@16773
|
147 + }
|
pascal@16773
|
148 + close(fd);
|
pascal@16773
|
149 + } while (*++argv);
|
pascal@16773
|
150 +
|
pascal@16773
|
151 + return EXIT_SUCCESS;
|
pascal@16773
|
152 +}
|