summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKay Sievers <kay.sievers@vrfy.org>2008-10-16 21:12:08 +0200
committerKay Sievers <kay.sievers@vrfy.org>2008-10-16 21:12:08 +0200
commitbe7f7f57012e61b062bd540152a1af529c1509f2 (patch)
tree3a92ff202e12a3bfe89fa43cee5a8e505adbfd62
parenta390e6f764087b74b1567e1daf1f1c41eae42c74 (diff)
fix sorting of rules files
-rw-r--r--udev/lib/libudev-list.c9
-rw-r--r--udev/lib/libudev-private.h1
-rw-r--r--udev/udev-rules-parse.c8
3 files changed, 12 insertions, 6 deletions
diff --git a/udev/lib/libudev-list.c b/udev/lib/libudev-list.c
index 918277cb64..fb8301b0bd 100644
--- a/udev/lib/libudev-list.c
+++ b/udev/lib/libudev-list.c
@@ -148,7 +148,7 @@ struct udev_list_entry *udev_list_entry_add(struct udev *udev, struct udev_list_
list_entry_insert_before(entry_new, entry_loop);
else
list_entry_append(entry_new, list);
- info(udev, "'%s=%s' added\n", entry_new->name, entry_new->value);
+ dbg(udev, "'%s=%s' added\n", entry_new->name, entry_new->value);
return entry_new;
}
@@ -182,6 +182,13 @@ void udev_list_entry_move_to_list(struct udev_list_entry *list_entry, struct ude
list_entry->list = list;
}
+void udev_list_entry_move_before(struct udev_list_entry *list_entry, struct udev_list_entry *entry)
+{
+ list_node_remove(&list_entry->node);
+ list_node_insert_between(&list_entry->node, entry->node.prev, &entry->node);
+ list_entry->list = entry->list;
+}
+
struct udev_list_entry *udev_list_get_entry(struct udev_list_node *list)
{
if (list_is_empty(list))
diff --git a/udev/lib/libudev-private.h b/udev/lib/libudev-private.h
index 6549669711..96e62a8ec5 100644
--- a/udev/lib/libudev-private.h
+++ b/udev/lib/libudev-private.h
@@ -131,6 +131,7 @@ extern void udev_list_entry_remove(struct udev_list_entry *entry);
extern struct udev_list_entry *udev_list_get_entry(struct udev_list_node *list);
extern void udev_list_entry_move_to_end(struct udev_list_entry *list_entry);
extern void udev_list_entry_move_to_list(struct udev_list_entry *list_entry, struct udev_list_node *list);
+extern void udev_list_entry_move_before(struct udev_list_entry *list_entry, struct udev_list_entry *entry);
extern int udev_list_entry_get_flag(struct udev_list_entry *list_entry);
extern void udev_list_entry_set_flag(struct udev_list_entry *list_entry, int flag);
#define udev_list_entry_foreach_safe(entry, tmp, first) \
diff --git a/udev/udev-rules-parse.c b/udev/udev-rules-parse.c
index 737bbf4d92..41dc85aba8 100644
--- a/udev/udev-rules-parse.c
+++ b/udev/udev-rules-parse.c
@@ -854,20 +854,18 @@ int udev_rules_init(struct udev *udev, struct udev_rules *rules, int resolve_nam
if (file_base == NULL)
continue;
-
if (strcmp(file_base, sort_base) == 0) {
info(udev, "rule file basename '%s' already added, ignoring '%s'\n",
file_name, sort_name);
udev_list_entry_remove(sort_loop);
sort_loop = NULL;
- continue;
+ break;
}
-
if (strcmp(file_base, sort_base) > 0)
break;
}
if (sort_loop != NULL)
- udev_list_entry_move_to_list(sort_loop, &file_list);
+ udev_list_entry_move_before(sort_loop, file_loop);
}
}
@@ -878,7 +876,7 @@ int udev_rules_init(struct udev *udev, struct udev_rules *rules, int resolve_nam
if (stat(file_name, &statbuf) == 0 && statbuf.st_size > 0)
parse_file(rules, file_name);
else
- err(udev, "could not read '%s': %m\n", file_name);
+ info(udev, "can not read '%s'\n", file_name);
udev_list_entry_remove(file_loop);
}
return retval;