View | Details | Raw Unified | Return to bug 19574
Collapse All | Expand All

(-)badsect.c (-7 / +7 lines)
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;

Return to bug 19574