From 90854679703217971ebeafe34836473b2e1fff9b Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Wed, 21 Dec 2005 16:53:57 +0000 Subject: Trying to losetup a device as a regular user shouldn't result in an endless loop, and the error messages should display correctly now. --- libbb/loop.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'libbb/loop.c') diff --git a/libbb/loop.c b/libbb/loop.c index 00e3d6236..85aa37236 100644 --- a/libbb/loop.c +++ b/libbb/loop.c @@ -89,7 +89,7 @@ int set_loop(char **device, const char *file, int offset) char dev[20], *try; bb_loop_info loopinfo; struct stat statbuf; - int i, dfd, ffd, mode, rc=1; + int i, dfd, ffd, mode, rc=-1; /* Open the file. Barf if this doesn't work. */ if((ffd = open(file, mode=O_RDWR))<0 && (ffd = open(file,mode=O_RDONLY))<0) @@ -107,7 +107,7 @@ int set_loop(char **device, const char *file, int offset) /* Open the sucker and check its loopiness. */ if((dfd=open(try, mode))<0 && errno==EROFS) dfd=open(try,mode=O_RDONLY); - if(dfd<0) continue; + if(dfd<0) goto try_again; rc=ioctl(dfd, BB_LOOP_GET_STATUS, &loopinfo); @@ -128,6 +128,7 @@ int set_loop(char **device, const char *file, int offset) } else if(strcmp(file,loopinfo.lo_file_name) || offset!=loopinfo.lo_offset) rc=-1; close(dfd); +try_again: if(*device) break; } close(ffd); -- cgit v1.2.3