Changeset 1091

Show
Ignore:
Timestamp:
10/05/08 00:01:17 (3 months ago)
Author:
mwhitworth
Message:

Add IcFsRemoveDir and KeFsRemoveDir functions.

Location:
Whitix/branches/keobject/fs
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • Whitix/branches/keobject/fs/icfs/info.c

    r1081 r1091  
    167167} 
    168168 
     169int IcFsRemoveDir(struct KeFsEntry* dir) 
     170{ 
     171        return KeFsRemoveDir(dir); 
     172} 
     173 
    169174DWORD IcFsGetRootId() 
    170175{ 
  • Whitix/branches/keobject/fs/kfs/dir.c

    r1081 r1091  
    3636 
    3737        ListForEachEntry(entry,&dir->entries,next) 
    38                 if (!strnicmp(name, entry->name, nameLength)) 
     38                if (!strnicmp(name, entry->name, nameLength) && strlen(entry->name) == nameLength) 
    3939                        goto found; 
    4040 
     
    8989                if ((entry->type & VFS_ATTR_SOFTLINK) && !strnicmp(entry->name, name, nameLength)) 
    9090                { 
    91                         /* Follow the softlink. TODO: Must be a simple one? */ 
    9291                        struct KeFsEntry* dest; 
    9392                         
     
    154153        ListAddTail(&entry->next, &dir->entries); 
    155154         
     155//      KePrint("%s\n", entry->name); 
     156         
    156157        return entry; 
    157158} 
     
    192193 
    193194SYMBOL_EXPORT(KeFsInitRoot); 
     195 
     196/* Recursively remove dir. */ 
     197int KeFsRemoveDir(struct KeFsEntry* entry) 
     198{ 
     199        struct KeFsDir* dir; 
     200         
     201        if (!entry || !entry->name) 
     202                return -EFAULT; 
     203         
     204        if (!(entry->type & VFS_ATTR_DIR)) 
     205                return -ENOTDIR; 
     206                 
     207        dir=&entry->dir; 
     208         
     209        /* The only directory without a parent is the root directory, which we 
     210         * can't remove. */ 
     211        if (!dir->parent) 
     212                return -EPERM; 
     213                 
     214        ListRemove(&entry->next); 
     215         
     216        ListForEachEntry(entry,&dir->entries,next) 
     217        { 
     218                /* Remove. */ 
     219//              KePrint("Remove %s\n", entry->name); 
     220        } 
     221         
     222        return 0; 
     223}