示例#1
0
static int ramfs_remove_node(struct ramfs_node *dnp, struct ramfs_node *np)
{
  struct ramfs_node *prev;

  if (dnp->rn_child == NULL)
    return -EBUSY;

  RAMFS_LOCK();

  /* Unlink from the directory list */
  if (dnp->rn_child == np) {
    dnp->rn_child = np->rn_next;
  } else {
    for (prev = dnp->rn_child; prev->rn_next != np;
         prev = prev->rn_next) {
      if (prev->rn_next == NULL) {
        RAMFS_UNLOCK();
        return -ENOENT;
      }
    }
    prev->rn_next = np->rn_next;
  }
  ramfs_free_node(np);

  RAMFS_UNLOCK();
  return 0;
}
示例#2
0
static s32_t ramfs_unmount(struct mount_t * m)
{
	ramfs_free_node(m->m_root->v_data);
	m->m_data = NULL;

	return 0;
}
示例#3
0
文件: ramfs_vnops.c 项目: Zabrane/osv
static int
ramfs_remove_node(struct ramfs_node *dnp, struct ramfs_node *np)
{
	struct ramfs_node *prev;

	if (dnp->rn_child == NULL)
		return EBUSY;

	mutex_lock(&ramfs_lock);

	/* Unlink from the directory list */
	if (dnp->rn_child == np) {
		dnp->rn_child = np->rn_next;
	} else {
		for (prev = dnp->rn_child; prev->rn_next != np;
		     prev = prev->rn_next) {
			if (prev->rn_next == NULL) {
				mutex_unlock(&ramfs_lock);
				return ENOENT;
			}
		}
		prev->rn_next = np->rn_next;
	}
	ramfs_free_node(np);

	mutex_unlock(&ramfs_lock);
	return 0;
}
示例#4
0
static s32_t ramfs_remove_node(struct ramfs_node * dnode, struct ramfs_node * node)
{
	struct ramfs_node * prev;

	if(dnode->child == NULL)
		return EBUSY;

	/* unlink from the directory list */
	if(dnode->child == node)
	{
		dnode->child = node->next;
	}
	else
	{
		for(prev = dnode->child; prev->next != node; prev = prev->next)
		{
			if(prev->next == NULL)
			{
				return ENOENT;
			}
		}
		prev->next = node->next;
	}

	ramfs_free_node(node);

	return 0;
}