From: Portisch Date: Mon, 8 Nov 2021 11:31:39 +0000 (+0100) Subject: sysfs: fallback for partitions not including parent name X-Git-Tag: v2.38-rc1~177^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9b59641bcec3df9c451eea4c7057751a153a3fcb;p=thirdparty%2Futil-linux.git sysfs: fallback for partitions not including parent name --- diff --git a/lib/sysfs.c b/lib/sysfs.c index bb71833193..191d870f66 100644 --- a/lib/sysfs.c +++ b/lib/sysfs.c @@ -210,9 +210,10 @@ int sysfs_blkdev_is_partition_dirent(DIR *dir, struct dirent *d, const char *par d->d_type != DT_UNKNOWN) return 0; #endif + size_t len = 0; + if (parent_name) { const char *p = parent_name; - size_t len; /* /dev/sda --> "sda" */ if (*parent_name == '/') { @@ -223,14 +224,15 @@ int sysfs_blkdev_is_partition_dirent(DIR *dir, struct dirent *d, const char *par } len = strlen(p); - if (strlen(d->d_name) <= len) - return 0; + if ((strlen(d->d_name) <= len) || (strncmp(p, d->d_name, len) != 0)) + len = 0; + } + if (len > 0) { /* partitions subdir name is * "[:digit:]" or "p[:digit:]" */ - return strncmp(p, d->d_name, len) == 0 && - ((*(d->d_name + len) == 'p' && isdigit(*(d->d_name + len + 1))) + return ((*(d->d_name + len) == 'p' && isdigit(*(d->d_name + len + 1))) || isdigit(*(d->d_name + len))); }