X-Git-Url: http://git.openwrt.org/?p=project%2Ffstools.git;a=blobdiff_plain;f=libfstools%2Fubi.c;h=0f6e37a2e66b58b8cdf18f8bf91bf1d53a118f31;hp=ac9eb1b976851e1e4322edace5018cd44265d488;hb=1e4579556ca54bdf9ccb86933c64bc6094c04e9a;hpb=0bc9aa72941d2e361e77b5ff7c4a742e1de98cc2 diff --git a/libfstools/ubi.c b/libfstools/ubi.c index ac9eb1b..0f6e37a 100644 --- a/libfstools/ubi.c +++ b/libfstools/ubi.c @@ -165,22 +165,34 @@ static int ubi_volume_match(struct volume *v, char *name, int ubi_num, int volid static int ubi_part_match(struct volume *v, char *name, unsigned int ubi_num) { - unsigned int i, volumes_count; + DIR *ubi_dir; + struct dirent *ubi_dirent; + unsigned int volid; char devdir[BUFLEN]; + int ret = -1; snprintf(devdir, sizeof(devdir), "%s/ubi%u", ubi_dir_name, ubi_num); - if (read_uint_from_file(devdir, "volumes_count", &volumes_count)) - return -1; + ubi_dir = opendir(devdir); + if (!ubi_dir) + return ret; - for (i=0;id_name, "ubi", 3)) + continue; + + if (sscanf(ubi_dirent->d_name, "ubi%*u_%u", &volid) != 1) + continue; + + if (!ubi_volume_match(v, name, ubi_num, volid)) { + ret = 0; + break; } } + closedir(ubi_dir); - return -1; + return ret; } static int ubi_volume_find(struct volume *v, char *name)