Changeset c955be91 in mainline


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

Add a function to remove a dentry from a given directory.

Location:
uspace/srv/fs/minixfs
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/minixfs/mfs.h

    r01accb7 rc955be91  
    4848#define NAME            "mfs"
    4949
    50 #define DEBUG_MODE
     50//#define DEBUG_MODE
    5151
    5252#define min(a, b)       ((a) < (b) ? (a) : (b))
     
    211211
    212212extern int
     213remove_dentry(struct mfs_node *mnode, const char *d_name);
     214
     215extern int
    213216insert_dentry(struct mfs_node *mnode, const char *d_name, fs_index_t d_inum);
    214217
  • uspace/srv/fs/minixfs/mfs_dentry.c

    r01accb7 rc955be91  
    141141
    142142int
     143remove_dentry(struct mfs_node *mnode, const char *d_name)
     144{
     145        struct mfs_sb_info *sbi = mnode->instance->sbi;
     146        struct mfs_dentry_info *d_info;
     147        int i, r;
     148
     149        const size_t name_len = str_size(d_name);
     150
     151        if (name_len > sbi->max_name_len)
     152                return ENAMETOOLONG;
     153
     154        /*Search the directory entry to be removed*/
     155        for (i = 0; ; ++i) {
     156                r = read_directory_entry(mnode, &d_info, i);
     157                on_error(r, return r);
     158
     159                if (!d_info) {
     160                        /*Reached the end of the dentries list*/
     161                        break;
     162                }
     163
     164                if (!bcmp(d_info->d_name, d_name, name_len)) {
     165                        d_info->d_inum = 0;
     166                        r = write_dentry(d_info);
     167                        return r;
     168                }
     169        }
     170
     171        return ENOENT;
     172}
     173
     174int
    143175insert_dentry(struct mfs_node *mnode, const char *d_name, fs_index_t d_inum)
    144176{
     
    150182        const size_t name_len = str_size(d_name);
    151183
    152         assert(name_len <= sbi->max_name_len);
     184        if (name_len > sbi->max_name_len)
     185                return ENAMETOOLONG;
    153186
    154187        /*Search for an empty dentry*/
Note: See TracChangeset for help on using the changeset viewer.