|
Lines 118-128
Link Here
|
| 118 |
err(3, "%s", name); |
118 |
err(3, "%s", name); |
| 119 |
name_dir_end = name + strlen(name); |
119 |
name_dir_end = name + strlen(name); |
| 120 |
while ((dp = readdir(dirp)) != NULL) { |
120 |
while ((dp = readdir(dirp)) != NULL) { |
|
|
121 |
/* |
| 122 |
* Opening of a mounted on device is not allowed. |
| 123 |
* Attempt to open the raw device instead. |
| 124 |
*/ |
| 125 |
if (dp->d_name[0] != 'r') |
| 126 |
continue ; |
| 121 |
strcpy(name_dir_end, dp->d_name); |
127 |
strcpy(name_dir_end, dp->d_name); |
| 122 |
if (lstat(name, &devstat) < 0) |
128 |
if (lstat(name, &devstat) < 0) |
| 123 |
err(4, "%s", name); |
129 |
err(4, "%s", name); |
| 124 |
if (stbuf.st_dev == devstat.st_rdev && |
130 |
if (stbuf.st_dev == devstat.st_rdev && |
| 125 |
(devstat.st_mode & IFMT) == IFBLK) |
131 |
(devstat.st_mode & IFMT) == IFCHR) |
| 126 |
break; |
132 |
break; |
| 127 |
} |
133 |
} |
| 128 |
closedir(dirp); |
134 |
closedir(dirp); |
|
Lines 131-142
Link Here
|
| 131 |
(u_long)stbuf.st_rdev, argv[1]); |
137 |
(u_long)stbuf.st_rdev, argv[1]); |
| 132 |
exit(5); |
138 |
exit(5); |
| 133 |
} |
139 |
} |
| 134 |
/* |
|
|
| 135 |
* Opening of a mounted on device is not allowed. |
| 136 |
* Attempt to open the raw device instead. |
| 137 |
*/ |
| 138 |
memcpy(name_dir_end + 1, name_dir_end, strlen(name_dir_end) + 1); |
| 139 |
*name_dir_end = 'r'; |
| 140 |
if ((fsi = open(name, O_RDONLY)) < 0) |
140 |
if ((fsi = open(name, O_RDONLY)) < 0) |
| 141 |
err(6, "%s", name); |
141 |
err(6, "%s", name); |
| 142 |
fs = &sblock; |
142 |
fs = &sblock; |