Changeset 53eb588 in mainline for uspace/srv/fs/minixfs/mfs_ops.c


Ignore:
Timestamp:
2011-06-23T18:34:19Z (13 years ago)
Author:
Maurizio Lombardi <m.lombardi85@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
d8af1bd
Parents:
c955be91
Message:

Add the mfs_unlink() function

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/minixfs/mfs_ops.c

    rc955be91 r53eb588  
    5656static int mfs_create_node(fs_node_t **rfn, devmap_handle_t handle, int flags);
    5757static int mfs_link(fs_node_t *pfn, fs_node_t *cfn, const char *name);
     58static int mfs_unlink(fs_node_t *, fs_node_t *, const char *name);
    5859
    5960static int mfs_node_get(fs_node_t **rfn, devmap_handle_t devmap_handle,
     
    7778        .create = mfs_create_node,
    7879        .link = mfs_link,
     80        .unlink = mfs_unlink,
    7981        .plb_get_char = mfs_plb_get_char,
    8082        .has_children = mfs_has_children,
     
    433435static unsigned mfs_lnkcnt_get(fs_node_t *fsnode)
    434436{
    435         unsigned rc;
    436437        struct mfs_node *mnode = fsnode->data;
    437438
     
    439440        assert(mnode->ino_i);
    440441
    441         rc = mnode->ino_i->i_nlinks;
    442         return rc;
     442        return mnode->ino_i->i_nlinks;;
    443443}
    444444
     
    536536exit_error:
    537537        return r;
     538}
     539
     540static int
     541mfs_unlink(fs_node_t *pfn, fs_node_t *cfn, const char *name)
     542{
     543        struct mfs_node *parent = pfn->data;
     544        struct mfs_node *child = cfn->data;
     545        bool has_children;
     546        int r;
     547
     548        if (!parent)
     549                return EBUSY;
     550
     551        r = mfs_has_children(&has_children, cfn);
     552        on_error(r, return r);
     553        if (has_children)
     554                return ENOTEMPTY;
     555
     556        r = remove_dentry(parent, name);
     557        on_error(r, return r);
     558
     559        struct mfs_ino_info *chino = child->ino_i;
     560
     561        assert(chino->i_nlinks >= 1);
     562        --chino->i_nlinks;
     563
     564        chino->dirty = true;
     565
     566        return EOK;
    538567}
    539568
Note: See TracChangeset for help on using the changeset viewer.