The check for EROFS was wrong. For example, if you try to mount a filesystem
authorRob Landley <rob@landley.net>
Tue, 11 Oct 2005 07:26:15 +0000 (07:26 -0000)
committerRob Landley <rob@landley.net>
Tue, 11 Oct 2005 07:26:15 +0000 (07:26 -0000)
appended to an executable that's being run (yes, I'm doing this) you get
EPERM, but mounting readonly fixes it.  Doing the fallback all the time
shouldn't hurt, and is one less test.

libbb/loop.c

index 25f66fcead74aafde9b46f7e7389c192ba96258a..f7029d59194614557e3309f9874dc71397b88417 100644 (file)
@@ -88,10 +88,9 @@ extern int set_loop(char **device, const char *file, int offset)
        int i, dfd, ffd, mode, rc=1;
 
        // Open the file.  Barf if this doesn't work.
-       if((ffd = open(file, mode=O_RDWR))<0)
-               if(errno!=EROFS || (ffd=open(file,mode=O_RDONLY))<0)
-                       return errno;
-
+       if((ffd = open(file, mode=O_RDWR))<0 && (ffd = open(file,mode=O_RDONLY))<0)
+               return errno;
+       
        // Find a loop device
        for(i=0;rc;i++) {
                sprintf(dev, LOOP_FORMAT, i++);