18 static struct sinfo s_sinfo;
19 static struct ninfo s_root;
47 INIT_LIST_HEAD(&s_root.
sibling);
48 INIT_LIST_HEAD(&s_root.
child);
49 INIT_LIST_HEAD(&s_root.
sinfo);
51 INIT_LIST_HEAD(&s_sinfo.
head);
73 static inline void vfs_free_ninfo(
struct ninfo *
node)
77 if (node == &s_root) {
87 list_del(&node->
child);
106 if (root == &s_root) {
127 item =
malloc(
sizeof(*item));
133 list_add_tail(&item->head, &stack);
142 struct ninfo *parent;
148 vfs_free_ninfo(node);
153 vfs_free_ninfo(node);
157 if (stack.prev == &stack) {
162 item =
list_entry(stack.prev,
struct stack, head);
163 list_del(&item->head);
168 vfs_free_ninfo(node);
173 vfs_free_ninfo(root);
185 static inline struct ninfo *get_root_if_attached(
struct ninfo *node)
245 if (state == DOTDOT) {
264 root = get_root_if_attached(node);
285 if (!tmp->
name[idx]) {
295 if (!node->
name[idx]) {
330 tmp = get_root_if_attached(node);
371 ninfo =
malloc(
sizeof(*ninfo));
377 ninfo->
name = dup_name;
383 INIT_LIST_HEAD(&ninfo->
sibling);
384 INIT_LIST_HEAD(&ninfo->
child);
385 INIT_LIST_HEAD(&ninfo->
sinfo);
432 if (child == root || child == node || !child->
head_sibling) {
442 struct ninfo *parent;
452 if (parent == node) {
533 ninfo =
malloc(
sizeof(*ninfo));
539 priv =
malloc(
sizeof(*priv));
548 ninfo->
name = dup_name;
556 INIT_LIST_HEAD(&ninfo->
sibling);
557 INIT_LIST_HEAD(&ninfo->
child);
558 INIT_LIST_HEAD(&ninfo->
sinfo);