+/** Finds the lowest positive N such that <name>N isn't present in
+ * $(udevroot) either as a file or a symlink.
+ *
+ * @param name Name to check for
+ * @return 0 if <name> didn't exist and N otherwise.
+ */
+static unsigned int find_free_number (struct udevice *udev, char *name)
+{
+ char temp[NAME_SIZE];
+ char path[NAME_SIZE];
+ struct udevice dev;
+ int result;
+
+ /* have to sweep the database for each lookup */
+ result = 0;
+ strncpy(temp, name, sizeof (temp));
+ while (1) {
+ if (udevdb_get_dev_byname(temp, path, &dev) != 0)
+ goto found;
+ /* symlink might be stale if $(udevroot) isn't cleaned; check
+ * on major/minor to see if it's the same device
+ */
+ if (dev.major == udev->major && dev.minor == udev->minor)
+ goto found;
+ snprintf (temp, sizeof(temp), "%s%d", name, ++result);
+ }
+
+found:
+ return result;
+}
+