losetup: implement -r option. Closes 4033.

function                                             old     new   delta
packed_usage                                       28595   28633     +38
losetup_main                                         285     290      +5
singlemount                                          906     908      +2
set_loop                                             674     672      -2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko
2011-09-12 02:13:47 +02:00
parent dd1061b6a7
commit 13e709c53f
4 changed files with 17 additions and 13 deletions

View File

@@ -84,7 +84,7 @@ int FAST_FUNC del_loop(const char *device)
search will re-use an existing loop device already bound to that
file/offset if it finds one.
*/
int FAST_FUNC set_loop(char **device, const char *file, unsigned long long offset)
int FAST_FUNC set_loop(char **device, const char *file, unsigned long long offset, int ro)
{
char dev[LOOP_NAMESIZE];
char *try;
@@ -93,11 +93,13 @@ int FAST_FUNC set_loop(char **device, const char *file, unsigned long long offse
int i, dfd, ffd, mode, rc = -1;
/* Open the file. Barf if this doesn't work. */
mode = O_RDWR;
mode = ro ? O_RDONLY : O_RDWR;
ffd = open(file, mode);
if (ffd < 0) {
mode = O_RDONLY;
ffd = open(file, mode);
if (mode != O_RDONLY) {
mode = O_RDONLY;
ffd = open(file, mode);
}
if (ffd < 0)
return -errno;
}