image_types_nfi.bbclass: add option nofail to /data
[opendreambox.git] / meta-opendreambox / recipes-core / busybox / busybox-1.20.2 / 0005-mount-set-up-RO-loop-device-if-mount-o-ro.-Closes-47.patch
1 From bde363f587632e29d5dda1102a551cf9dfedc2d1 Mon Sep 17 00:00:00 2001
2 From: Denys Vlasenko <vda.linux@googlemail.com>
3 Date: Thu, 21 Jun 2012 12:08:56 +0200
4 Subject: [PATCH 5/8] mount: set up RO loop device if mount -o ro. Closes 4784
5
6 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
7 ---
8  util-linux/mount.c |   29 +++++++++++++++--------------
9  1 file changed, 15 insertions(+), 14 deletions(-)
10
11 diff --git a/util-linux/mount.c b/util-linux/mount.c
12 index f1da30f..220a4e6 100644
13 --- a/util-linux/mount.c
14 +++ b/util-linux/mount.c
15 @@ -450,9 +450,9 @@ static void append_mount_options(char **oldopts, const char *newopts)
16  
17  // Use the mount_options list to parse options into flags.
18  // Also update list of unrecognized options if unrecognized != NULL
19 -static long parse_mount_options(char *options, char **unrecognized)
20 +static unsigned long parse_mount_options(char *options, char **unrecognized)
21  {
22 -       long flags = MS_SILENT;
23 +       unsigned long flags = MS_SILENT;
24  
25         // Loop through options
26         for (;;) {
27 @@ -466,7 +466,7 @@ static long parse_mount_options(char *options, char **unrecognized)
28                 // Find this option in mount_options
29                 for (i = 0; i < ARRAY_SIZE(mount_options); i++) {
30                         if (strcasecmp(option_str, options) == 0) {
31 -                               long fl = mount_options[i];
32 +                               unsigned long fl = mount_options[i];
33                                 if (fl < 0)
34                                         flags &= fl;
35                                 else
36 @@ -548,7 +548,7 @@ void delete_block_backed_filesystems(void);
37  
38  // Perform actual mount of specific filesystem at specific location.
39  // NB: mp->xxx fields may be trashed on exit
40 -static int mount_it_now(struct mntent *mp, long vfsflags, char *filteropts)
41 +static int mount_it_now(struct mntent *mp, unsigned long vfsflags, char *filteropts)
42  {
43         int rc = 0;
44  
45 @@ -1080,7 +1080,7 @@ static void error_msg_rpc(const char *msg)
46  }
47  
48  /* NB: mp->xxx fields may be trashed on exit */
49 -static NOINLINE int nfsmount(struct mntent *mp, long vfsflags, char *filteropts)
50 +static NOINLINE int nfsmount(struct mntent *mp, unsigned long vfsflags, char *filteropts)
51  {
52         CLIENT *mclient;
53         char *hostname;
54 @@ -1711,7 +1711,7 @@ static NOINLINE int nfsmount(struct mntent *mp, long vfsflags, char *filteropts)
55   * For older kernels, you must build busybox with ENABLE_FEATURE_MOUNT_NFS.
56   * (However, note that then you lose any chances that NFS over IPv6 would work).
57   */
58 -static int nfsmount(struct mntent *mp, long vfsflags, char *filteropts)
59 +static int nfsmount(struct mntent *mp, unsigned long vfsflags, char *filteropts)
60  {
61         len_and_sockaddr *lsa;
62         char *opts;
63 @@ -1753,7 +1753,7 @@ static int nfsmount(struct mntent *mp, long vfsflags, char *filteropts)
64  static int singlemount(struct mntent *mp, int ignore_busy)
65  {
66         int rc = -1;
67 -       long vfsflags;
68 +       unsigned long vfsflags;
69         char *loopFile = NULL, *filteropts = NULL;
70         llist_t *fl = NULL;
71         struct stat st;
72 @@ -1854,7 +1854,7 @@ static int singlemount(struct mntent *mp, int ignore_busy)
73                 if (ENABLE_FEATURE_MOUNT_LOOP && S_ISREG(st.st_mode)) {
74                         loopFile = bb_simplify_path(mp->mnt_fsname);
75                         mp->mnt_fsname = NULL; // will receive malloced loop dev name
76 -                       if (set_loop(&mp->mnt_fsname, loopFile, 0, /*ro:*/ 0) < 0) {
77 +                       if (set_loop(&mp->mnt_fsname, loopFile, 0, /*ro:*/ (vfsflags & MS_RDONLY)) < 0) {
78                                 if (errno == EPERM || errno == EACCES)
79                                         bb_error_msg(bb_msg_perm_denied_are_you_root);
80                                 else
81 @@ -1992,6 +1992,7 @@ int mount_main(int argc UNUSED_PARAM, char **argv)
82         FILE *fstab;
83         int i, j;
84         int rc = EXIT_SUCCESS;
85 +       unsigned long cmdopt_flags;
86         unsigned opt;
87         struct mntent mtpair[2], *mtcur = mtpair;
88         IF_NOT_DESKTOP(const int nonroot = 0;)
89 @@ -2066,16 +2067,16 @@ int mount_main(int argc UNUSED_PARAM, char **argv)
90         // Past this point, we are handling either "mount -a [opts]"
91         // or "mount [opts] single_param"
92  
93 -       i = parse_mount_options(cmdopts, NULL); // FIXME: should be "long", not "int"
94 -       if (nonroot && (i & ~MS_SILENT)) // Non-root users cannot specify flags
95 +       cmdopt_flags = parse_mount_options(cmdopts, NULL);
96 +       if (nonroot && (cmdopt_flags & ~MS_SILENT)) // Non-root users cannot specify flags
97                 bb_error_msg_and_die(bb_msg_you_must_be_root);
98  
99         // If we have a shared subtree flag, don't worry about fstab or mtab.
100         if (ENABLE_FEATURE_MOUNT_FLAGS
101 -        && (i & (MS_SHARED | MS_PRIVATE | MS_SLAVE | MS_UNBINDABLE))
102 +        && (cmdopt_flags & (MS_SHARED | MS_PRIVATE | MS_SLAVE | MS_UNBINDABLE))
103         ) {
104                 // verbose_mount(source, target, type, flags, data)
105 -               rc = verbose_mount("", argv[0], "", i, "");
106 +               rc = verbose_mount("", argv[0], "", cmdopt_flags, "");
107                 if (rc)
108                         bb_simple_perror_msg_and_die(argv[0]);
109                 return rc;
110 @@ -2083,7 +2084,7 @@ int mount_main(int argc UNUSED_PARAM, char **argv)
111  
112         // Open either fstab or mtab
113         fstabname = "/etc/fstab";
114 -       if (i & MS_REMOUNT) {
115 +       if (cmdopt_flags & MS_REMOUNT) {
116                 // WARNING. I am not sure this matches util-linux's
117                 // behavior. It's possible util-linux does not
118                 // take -o opts from mtab (takes only mount source).
119 @@ -2182,7 +2183,7 @@ int mount_main(int argc UNUSED_PARAM, char **argv)
120         // End of fstab/mtab is reached.
121         // Were we looking for something specific?
122         if (argv[0]) { // yes
123 -               long l;
124 +               unsigned long l;
125  
126                 // If we didn't find anything, complain
127                 if (!mtcur->mnt_fsname)
128 -- 
129 1.7.10.4
130