Exemplo n.º 1
0
static int rtems_jffs2_rmnod(
	const rtems_filesystem_location_info_t *parentloc,
	const rtems_filesystem_location_info_t *loc
)
{
	struct _inode *dir_i = rtems_jffs2_get_inode_by_location(parentloc);
	struct _inode *entry_i = rtems_jffs2_get_inode_by_location(loc);
	char *name;
	size_t namelen;
	int eno = rtems_jffs2_cache_fd_name(entry_i, &name, &namelen);

	if (eno == 0) {
		switch (dir_i->i_mode & S_IFMT) {
			case S_IFDIR:
				eno = -jffs2_rmdir(dir_i, entry_i, name, namelen);
				break;
			case S_IFREG:
				eno = -jffs2_unlink(dir_i, entry_i, name, namelen);
				break;
			default:
				eno = EINVAL;
				break;
		}
	}

	return rtems_jffs2_eno_to_rv_and_errno(eno);
}
Exemplo n.º 2
0
int jffs2_rmdir (struct inode *dir_i, struct inode *d_inode, struct qstr *d_name)
{
    struct jffs2_inode_info *f = JFFS2_INODE_INFO(d_inode);
    struct jffs2_full_dirent *fd;

    for (fd = f->dents ; fd; fd = fd->next) {
        if (fd->ino)
            return EPERM; //-ENOTEMPTY;
    }
    return jffs2_unlink(dir_i, d_inode, d_name);
}
Exemplo n.º 3
0
int jffs2_rmdir (struct _inode *dir_i,
		struct _inode *d_inode, const unsigned char *d_name) {
	struct jffs2_inode_info *f = JFFS2_INODE_INFO(d_inode);
	struct jffs2_full_dirent *fd;

	for (fd = f->dents ; fd; fd = fd->next) {
		if (fd->ino) {
			return EPERM;
		}
	}
	return jffs2_unlink(dir_i, d_inode, d_name);
}
Exemplo n.º 4
0
static int jffs2_rmdir (struct inode *dir_i, struct dentry *dentry)
{
	struct jffs2_inode_info *f = JFFS2_INODE_INFO(dentry->d_inode);
	struct jffs2_full_dirent *fd;
	int ret;

	for (fd = f->dents ; fd; fd = fd->next) {
		if (fd->ino)
			return -ENOTEMPTY;
	}
	ret = jffs2_unlink(dir_i, dentry);
	if (!ret)
		dir_i->i_nlink--;
	return ret;
}