- if (dev->partitions > 0) {
- info("creating device partition nodes '%s[1-%i]'", filename, dev->partitions);
- if (!fake) {
- for (i = 1; i <= dev->partitions; i++) {
- strfieldcpy(partitionname, filename);
- strintcat(partitionname, i);
- make_node(partitionname, dev->major,
- dev->minor + i, dev->mode, uid, gid);
+ if (udev->partitions) {
+ struct sysfs_attribute *attr;
+ int range;
+
+ /* take the maximum registered minor range */
+ attr = sysfs_get_classdev_attr(class_dev, "range");
+ if (attr) {
+ range = atoi(attr->value);
+ if (range > 1)
+ udev->partitions = range-1;
+ }
+ info("creating device partition nodes '%s[1-%i]'", filename, udev->partitions);
+ if (!udev->test_run) {
+ for (i = 1; i <= udev->partitions; i++) {
+ dev_t part_devt;
+
+ snprintf(partitionname, sizeof(partitionname), "%s%d", filename, i);
+ partitionname[sizeof(partitionname)-1] = '\0';
+ part_devt = makedev(major(udev->devt), minor(udev->devt) + i);
+ udev_make_node(udev, partitionname, part_devt, udev->mode, uid, gid);