fd = open(file, O_RDONLY);
if (fd == -1)
- return -1;
+ return sys_errmsg("cannot open \"%s\"", file);
rd = read(fd, buf, 50);
if (rd == -1) {
fd = open(file, O_RDONLY);
if (fd == -1)
- return -1;
+ return sys_errmsg("cannot open \"%s\"", file);
rd = read(fd, buf, buf_len);
if (rd == -1) {
char file[strlen(lib->ubi_vol) + 100];
if (stat(node, &st))
- return -1;
+ return sys_errmsg("cannot get information about \"%s\"",
+ node);
if (!S_ISCHR(st.st_mode)) {
errno = EINVAL;
int i, major, minor;
if (stat(node, &st))
- return -1;
+ return sys_errmsg("cannot get information about \"%s\"",
+ node);
if (!S_ISCHR(st.st_mode)) {
errno = EINVAL;
fd = open(node, O_RDONLY);
if (fd == -1)
- return -1;
+ return sys_errmsg("cannot open \"%s\"", node);
ret = ioctl(fd, UBI_IOCATT, &r);
close(fd);
#ifdef UDEV_SETTLE_HACK
if (system("udevsettle") == -1)
return -1;
- if (system("udevsettle") == -1)
- return -1;
#endif
return ret;
fd = open(node, O_RDONLY);
if (fd == -1)
- return -1;
+ return sys_errmsg("cannot open \"%s\"", node);
ret = ioctl(fd, UBI_IOCDET, &ubi_dev);
if (ret == -1)
goto out_close;
char file[strlen(lib->ubi_vol) + 100];
if (stat(node, &st))
- return -1;
+ return sys_errmsg("cannot get information about \"%s\"",
+ node);
if (!S_ISCHR(st.st_mode)) {
+ errmsg("\"%s\" is not a character device", node);
errno = EINVAL;
return -1;
}
if (ret) {
if (errno == ENOENT)
continue;
+ if (!errno)
+ goto out_not_ubi;
return -1;
}
break;
}
- if (i > info.highest_dev_num) {
- /*
- * The character device node does not correspond to any
- * existing UBI device or volume, but we do not want to return
- * any error number in this case, to indicate the fact that it
- * could be a UBI device/volume, but it doesn't.
- */
- errno = 0;
- return -1;
- }
+ if (i > info.highest_dev_num)
+ goto out_not_ubi;
if (minor == 0)
return 1;
sprintf(file, lib->ubi_vol, i, minor - 1);
fd = open(file, O_RDONLY);
if (fd == -1) {
- errno = 0;
+ sys_errmsg("cannot open \"%s\"", node);
return -1;
}
return 2;
+
+out_not_ubi:
+ errmsg("\"%s\" has major:minor %d:%d, but this does not correspond to "
+ "any UBI device or volume", node, major, minor);
+ errno = 0;
+ return -1;
}
int ubi_get_info(libubi_t desc, struct ubi_info *info)
fd = open(node, O_RDONLY);
if (fd == -1)
- return -1;
+ return sys_errmsg("cannot open \"%s\"", node);
ret = ioctl(fd, UBI_IOCMKVOL, &r);
if (ret == -1)
desc = desc;
fd = open(node, O_RDONLY);
if (fd == -1)
- return -1;
+ return sys_errmsg("cannot open \"%s\"", node);
ret = ioctl(fd, UBI_IOCRMVOL, &vol_id);
if (ret == -1)
desc = desc;
fd = open(node, O_RDONLY);
if (fd == -1)
- return -1;
+ return sys_errmsg("cannot open \"%s\"", node);
req.bytes = bytes;
req.vol_id = vol_id;