From 4195ac0c530690efbe7d2862c3184b823d34b5aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 25 May 2005 00:41:32 +0000 Subject: [PATCH] The devfs directory entries are now always sorted. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12803 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/fs/devfs.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/system/kernel/fs/devfs.cpp b/src/system/kernel/fs/devfs.cpp index d0b5b246e4..fc31e70e84 100644 --- a/src/system/kernel/fs/devfs.cpp +++ b/src/system/kernel/fs/devfs.cpp @@ -271,8 +271,22 @@ devfs_insert_in_dir(struct devfs_vnode *dir, struct devfs_vnode *vnode) if (!S_ISDIR(dir->stream.type)) return B_BAD_VALUE; - vnode->dir_next = dir->stream.u.dir.dir_head; - dir->stream.u.dir.dir_head = vnode; + // make sure the directory stays sorted alphabetically + + devfs_vnode *node = dir->stream.u.dir.dir_head, *last = NULL; + while (node && strcmp(node->name, vnode->name) < 0) { + last = node; + node = node->dir_next; + } + if (last == NULL) { + // the new vnode is the first entry in the list + vnode->dir_next = dir->stream.u.dir.dir_head; + dir->stream.u.dir.dir_head = vnode; + } else { + // insert after that node + vnode->dir_next = last->dir_next; + last->dir_next = vnode; + } vnode->parent = dir; dir->modification_time = time(NULL);