+
+ /* get kernel name */
+ pos = strrchr(udev->devpath, '/');
+ if (pos == NULL)
+ return -1;
+ strfieldcpy(udev->kernel_name, &pos[1]);
+
+ /* get kernel number */
+ pos = &udev->kernel_name[strlen(udev->kernel_name)];
+ while (isdigit(pos[-1]))
+ pos--;
+ strfieldcpy(udev->kernel_number, pos);
+ dbg("kernel_number='%s'", udev->kernel_number);
+
+ /* Some block devices have '!' in their name, change that to '/' */
+ pos = udev->kernel_name;
+ while (pos[0] != '\0') {
+ if (pos[0] == '!')
+ pos[0] = '/';
+ pos++;
+ }
+
+ dbg("kernel_name='%s'", udev->kernel_name);
+ return 0;