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.
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++);