UBI Tools - problem with multiple ubi devices.
Alexander Schmidt
alexs at linux.vnet.ibm.com
Wed Feb 28 04:29:34 EST 2007
On Tuesday 27 February 2007, John Smith wrote:
> In
> GIT: users/haver/mtd-utils.git
> File: ubi-utils/src/libubi.c
> Function: get_ubi_info
>
> The code counts the number of UBI volumes by looking for files called
>
> /sys/class/ubi0, /sys/class/ubi1, ...
>
> but the files are actually
>
> /sys/class/ubi/ubi0, ...
>
> The count starts from 1 (probably also wrong), so is usable if there is a
> single UBI device. But if there is more than one UBI device, tools like
> ubimkvol fail.
Hi John,
thanks for pointing this out.
Frank, please review and commit.
Signed-off-by: Alexander Schmidt <alexs at linux.vnet.ibm.com>
---
ubi-utils/src/libubi.c | 16 ++++++++--------
1 files changed, 8 insertions(+), 8 deletions(-)
--- mtd-utils.orig/ubi-utils/src/libubi.c
+++ mtd-utils/ubi-utils/src/libubi.c
@@ -138,7 +138,7 @@ static int
get_ubi_info(ubi_lib_t desc, struct ubi_info *ubi)
{
int err;
- int n = 1;
+ int dev_count = 0;
char *path;
struct stat stat;
@@ -147,31 +147,31 @@ get_ubi_info(ubi_lib_t desc, struct ubi_
return -1;
/* Calculate number of UBI devices */
- do {
+ while (!err) {
char dir[20];
- sprintf(&dir[0], "ubi%d", n);
- path = mkpath(desc->sysfs_root, dir);
+ sprintf(&dir[0], "ubi%d", dev_count);
+ path = mkpath(desc->ubi_root, dir);
if (!path)
return ENOMEM;
err = lstat(path, &stat);
if (err == 0)
- n += 1;
+ dev_count += 1;
free(path);
- } while (err == 0);
+ }
if (errno != ENOENT)
return -1;
- if (n == 0) {
+ if (dev_count == 0) {
ubi_err("no UBI devices found");
errno = EINVAL;
return -1;
}
errno = 0;
- ubi->dev_count = n;
+ ubi->dev_count = dev_count;
return 0;
}
More information about the linux-mtd
mailing list