On Nov 20 10:40, Corinna Vinschen wrote: > Hi Christian, > > This puzzles me: > > On Nov 17 21:25, Christian Franke wrote: > > @@ -610,7 +607,7 @@ get_by_id_table (by_id_entry * &table, > > fhandler_dev_disk::dev_disk_location loc) > > if (!table) > > return (errno_set ? -1 : 0); > > > > - /* Sort by name and remove duplicates. */ > > + /* Sort by name and mark duplicates. */ > > qsort (table, table_size, sizeof (*table), by_id_compare_name); > > for (unsigned i = 0; i < table_size; i++) > > by_id_compare_name only compars the actual names... > > > { > > @@ -619,12 +616,13 @@ get_by_id_table (by_id_entry * &table, > > fhandler_dev_disk::dev_disk_location loc) > > j++; > > if (j == i + 1) > > continue; > > - /* Duplicate(s) found, remove all entries with this name. */ > > - debug_printf ("removing duplicates %d-%d: '%s'", i, j - 1, > > table[i].name); > > - if (j < table_size) > > - memmove (table + i, table + j, (table_size - j) * sizeof (*table)); > > - table_size -= j - i; > > - i--; > > + /* Duplicate(s) found, append "#N" to all entries. This never > > ...but the names are identical. So the *order* within the identically > named entries depends on qsort's reshuffling of table > entries. Which in turn depends on outside factors like number of table > entries and the ultimate position of the identical entries within the > ordered table. > > Having said that, I don't see how adding ordinals to the names can be > unambiguous. AFAICS, the numbers may change by just adding another > disk (USB Stick) to the system...
Oops, that's not exactly what I was trying to say, sorry. The problem is not adding ordinals to the name, AFAICS, the problem is that the sorting function by_id_compare_name is not up to the task to make sure the order is unambiguous within the entries of identical name. Corinna