loop device code: readability improvement

This commit is contained in:
Denis Vlasenko 2007-04-19 00:09:34 +00:00
parent 3ace9fa6d8
commit c34d35557b
2 changed files with 20 additions and 13 deletions

View File

@ -112,19 +112,22 @@ int set_loop(char **device, const char *file, unsigned long long offset)
mode = O_RDONLY; mode = O_RDONLY;
dfd = open(try, mode); dfd = open(try, mode);
} }
if (dfd < 0) goto try_again; if (dfd < 0)
goto try_again;
rc = ioctl(dfd, BB_LOOP_GET_STATUS, &loopinfo); rc = ioctl(dfd, BB_LOOP_GET_STATUS, &loopinfo);
/* If device free, claim it. */ /* If device is free, claim it. */
if (rc && errno == ENXIO) { if (rc && errno == ENXIO) {
memset(&loopinfo, 0, sizeof(loopinfo)); memset(&loopinfo, 0, sizeof(loopinfo));
safe_strncpy((char *)loopinfo.lo_file_name, file, LO_NAME_SIZE); safe_strncpy((char *)loopinfo.lo_file_name, file, LO_NAME_SIZE);
loopinfo.lo_offset = offset; loopinfo.lo_offset = offset;
/* Associate free loop device with file. */ /* Associate free loop device with file. */
if (!ioctl(dfd, LOOP_SET_FD, ffd)) { if (!ioctl(dfd, LOOP_SET_FD, ffd)) {
if (!ioctl(dfd, BB_LOOP_SET_STATUS, &loopinfo)) rc = 0; if (!ioctl(dfd, BB_LOOP_SET_STATUS, &loopinfo))
else ioctl(dfd, LOOP_CLR_FD, 0); rc = 0;
else
ioctl(dfd, LOOP_CLR_FD, 0);
} }
/* If this block device already set up right, re-use it. /* If this block device already set up right, re-use it.
@ -132,7 +135,7 @@ int set_loop(char **device, const char *file, unsigned long long offset)
file isn't pretty either. In general, mounting the same file twice file isn't pretty either. In general, mounting the same file twice
without using losetup manually is problematic.) without using losetup manually is problematic.)
*/ */
} else if (strcmp(file,(char *)loopinfo.lo_file_name) } else if (strcmp(file, (char *)loopinfo.lo_file_name) != 0
|| offset != loopinfo.lo_offset) { || offset != loopinfo.lo_offset) {
rc = -1; rc = -1;
} }
@ -142,8 +145,9 @@ try_again:
} }
close(ffd); close(ffd);
if (!rc) { if (!rc) {
if (!*device) *device = xstrdup(dev); if (!*device)
return mode==O_RDONLY ? 1 : 0; *device = xstrdup(dev);
return (mode == O_RDONLY) ? 1 : 0;
} }
return rc; return rc;
} }

View File

@ -45,9 +45,11 @@ int losetup_main(int argc, char **argv)
bb_perror_nomsg_and_die(); bb_perror_nomsg_and_die();
} else if (argc == 1) { } else if (argc == 1) {
char *s = query_loop(argv[0]); char *s = query_loop(argv[0]);
if (!s) bb_perror_nomsg_and_die(); if (!s)
bb_perror_nomsg_and_die();
printf("%s: %s\n", argv[0], s); printf("%s: %s\n", argv[0], s);
if (ENABLE_FEATURE_CLEAN_UP) free(s); if (ENABLE_FEATURE_CLEAN_UP)
free(s);
} else { } else {
char dev[sizeof(LOOP_NAME"0")] = LOOP_NAME"0"; char dev[sizeof(LOOP_NAME"0")] = LOOP_NAME"0";
char c; char c;
@ -57,7 +59,8 @@ int losetup_main(int argc, char **argv)
s = query_loop(dev); s = query_loop(dev);
if (s) { if (s) {
printf("%s: %s\n", dev, s); printf("%s: %s\n", dev, s);
if (ENABLE_FEATURE_CLEAN_UP) free(s); if (ENABLE_FEATURE_CLEAN_UP)
free(s);
} }
} }
} }