23 lines
700 B
Diff
23 lines
700 B
Diff
--- utils.c 2015-11-20 01:15:32.227019383 +0100
|
|
+++ utils.c 2015-11-20 01:16:59.419971215 +0100
|
|
@@ -1208,13 +1208,19 @@ static int resolve_loop_device(const cha
|
|
{
|
|
int ret;
|
|
FILE *f;
|
|
+ struct stat stat_buf;
|
|
char fmt[20];
|
|
char p[PATH_MAX];
|
|
char real_loop_dev[PATH_MAX];
|
|
|
|
if (!realpath(loop_dev, real_loop_dev))
|
|
return -errno;
|
|
- snprintf(p, PATH_MAX, "/sys/block/%s/loop/backing_file", strrchr(real_loop_dev, '/'));
|
|
+
|
|
+ if (stat(real_loop_dev, &stat_buf) || !S_ISBLK(stat_buf.st_mode))
|
|
+ return -errno;
|
|
+
|
|
+ snprintf(p, PATH_MAX, "/sys/dev/block/%d:%d/loop/backing_file",
|
|
+ major(stat_buf.st_rdev), minor(stat_buf.st_rdev));
|
|
if (!(f = fopen(p, "r"))) {
|
|
if (errno == ENOENT)
|
|
/*
|