Changeset 1081 for Whitix

Show
Ignore:
Timestamp:
10/04/08 14:15:35 (2 months ago)
Author:
mwhitworth
Message:

Use new softlink code for IcFs, which uses KeFsEntrys. Add extra checks elsewhere.

Location:
Whitix/branches/keobject
Files:
2 removed
10 modified

Legend:

Unmodified
Added
Removed
  • Whitix/branches/keobject/devices/kedev/sdevice.c

    r1055 r1081  
    1919#include <devices/class.h> 
    2020#include <devices/sdevice.h> 
    21 #include <module.h> 
    2221#include <llist.h> 
    2322#include <module.h> 
     
    2928#include <malloc.h> 
    3029#include <print.h> 
    31 #include <fs/config.h> 
    3230#include <fs/devfs.h> 
    3331 
  • Whitix/branches/keobject/fs/icfs/config.c

    r1062 r1081  
    1010 
    1111extern struct KeFsEntry root; 
    12  
    13 int ConfigAddIntEntry(struct KeFsEntry* dir, char* name, void* value) 
    14 { 
    15         return IcFsAddIntEntry(dir, name, (int*)value, VFS_ATTR_RW); 
    16 } 
    17  
    18 SYMBOL_EXPORT(ConfigAddIntEntry); 
    19  
    20 int ConfigAddArrayEntry(struct KeFsEntry* dir, char* name, BYTE* value, int minLen, int maxLen, int size) 
    21 { 
    22         /* TODO: Create general IcFs function. */ 
    23         struct IcFsEntry* entry; 
    24          
    25         entry=IcFsAddStrEntry(dir, name, (char*)value, VFS_ATTR_RW); 
    26          
    27         if (!entry) 
    28                 return -EINVAL; 
    29          
    30         entry->type=ICFS_TYPE_BYTE; 
    31         entry->minLen=minLen; 
    32         entry->maxLen=maxLen; 
    33         entry->size=size; 
    34          
    35         return 0; 
    36 } 
    37  
    38 SYMBOL_EXPORT(ConfigAddArrayEntry); 
    39  
    40 int ConfigAddSoftLink(struct KeFsEntry* dir, char* name, int (*followLink)(char* buffer, int size)) 
    41 { 
    42         return IcFsAddSoftLink(dir, name, followLink); 
    43 } 
    44  
    45 SYMBOL_EXPORT(ConfigAddSoftLink); 
    46  
    47 struct KeFsEntry* ConfigCreateDir(struct KeFsEntry* dir, char* name) 
    48 { 
    49         return IcFsCreateDir(dir, name); 
    50 } 
    51  
    52 SYMBOL_EXPORT(ConfigCreateDir); 
    5312 
    5413struct KeFsEntry* ConfigResolvePath(char* name) 
     
    8241        struct KeFsEntry* entry; 
    8342        DWORD position=0; 
    84  
    85         KePrint("%s\n", name); 
    8643         
    8744        entry=ConfigResolvePath(name); 
  • Whitix/branches/keobject/fs/icfs/icfs.c

    r971 r1081  
    88 
    99#include "icfs.h" 
     10 
     11struct VfsSuperBlock* icFsSuperBlock; 
    1012 
    1113int IcFsWrite(struct File* file, BYTE* data, DWORD size) 
     
    5355int IcFsFollowLink(struct VNode** ret, struct VNode* vNode) 
    5456{ 
    55         char buf[2048]; 
    56         struct KeFsEntry* entry; 
     57        struct KeFsEntry* src, *dest; 
    5758        int err; 
    5859         
    59         entry=(struct KeFsEntry*)(vNode->id); 
     60        src=(struct KeFsEntry*)(vNode->id); 
    6061         
    6162        /* FIXME: Optimize */ 
    62         entry->followLink(buf, 2048); 
     63        err = src->followLink(&dest, src); 
     64 
     65        if (err) 
     66                return err; 
     67 
     68        *ret = VNodeGet(icFsSuperBlock, (DWORD)dest); 
    6369         
    64         err=NameToVNode(ret, buf, FILE_FORCE_OPEN, NULL); 
     70        if (!*ret) 
     71                return -ENOENT; 
    6572         
    66         return err; 
     73        return 0; 
    6774} 
    6875 
     
    134141        ret->mount=VNodeGet(ret, (DWORD)IcFsGetRootId()); 
    135142 
     143        icFsSuperBlock = ret; 
     144 
    136145end: 
    137146        return ret; 
  • Whitix/branches/keobject/fs/icfs/info.c

    r1062 r1081  
    118118} 
    119119 
    120 int InfoAddIntEntry(struct KeFsEntry* dir, char* name, int* value) 
    121 { 
    122         return IcFsAddIntEntry(dir, name, value, VFS_ATTR_READ); 
    123 } 
     120SYMBOL_EXPORT(IcFsAddIntEntry); 
    124121 
    125122struct IcFsEntry* IcFsAddStrEntry(struct KeFsEntry* dir, char* name, char* str, DWORD permissions) 
     
    142139} 
    143140 
    144 int IcFsAddSoftLink(struct KeFsEntry* dir, char* name, int (*followLink)(char* buffer, int size)) 
     141int IcFsAddSoftLink(struct KeFsEntry* dir, char* name, 
     142        int (*followLink)(struct KeFsEntry**, struct KeFsEntry*)) 
    145143{ 
    146144        struct KeFsEntry* entry; 
     
    159157} 
    160158 
    161 int InfoAddStrEntry(struct KeFsEntry* dir, char* name, char* str) 
    162 { 
    163         IcFsAddStrEntry(dir, name, str, VFS_ATTR_READ); 
    164         return 0; 
    165 } 
     159SYMBOL_EXPORT(IcFsAddSoftLink); 
    166160 
    167161struct KeFsEntry* IcFsCreateDir(struct KeFsEntry* dir, char* name /*, DWORD permissions */) 
     
    172166        return KeFsAddDir(&dir->dir, name); 
    173167} 
    174  
    175 struct KeFsEntry* InfoCreateDir(struct KeFsEntry* dir, char* name) 
    176 { 
    177         return IcFsCreateDir(dir, name); 
    178 } 
    179  
    180 SYMBOL_EXPORT(InfoCreateDir); 
    181168 
    182169DWORD IcFsGetRootId() 
  • Whitix/branches/keobject/fs/icfs/info_cpu.c

    r971 r1081  
    44#include <print.h> 
    55#include <fs/kfs.h> 
    6 #include <fs/info.h> 
    76#include <fs/vfs.h> 
    87 
  • Whitix/branches/keobject/fs/kfs/dir.c

    r1064 r1081  
    9090                { 
    9191                        /* Follow the softlink. TODO: Must be a simple one? */ 
    92                         char buf[2048]; 
    93                         entry->followLink(buf, 2048); 
     92                        struct KeFsEntry* dest; 
    9493                         
    95                         struct KeFsEntry* entry2; 
     94                        if (entry->followLink(&dest, entry)) 
     95                                return NULL; 
    9696                         
    97                         ListForEachEntry(entry2, &dir->entries, next) 
    98                         { 
    99                                 if ((entry2->type & VFS_ATTR_DIR) && !strnicmp(entry2->name, buf, strlen(buf))) 
    100                                         return &entry2->dir; 
    101                         } 
     97                        if ((dest->type & VFS_ATTR_DIR)) 
     98                                return &dest->dir; 
    10299                } 
    103100                 
  • Whitix/branches/keobject/fs/vfs/vnode.c

    r1061 r1081  
    9696                ++(*ret)->refs; 
    9797        } 
    98          
    9998                 
    10099        /* Check if the new vNode is a link. TODO: Move. */ 
     
    102101        { 
    103102//              KePrint("Following symlink, %#X\n", (*ret)->vNodeOps->followLink); 
    104                 (*ret)->vNodeOps->followLink(ret, *ret); 
     103                err = (*ret)->vNodeOps->followLink(ret, *ret); 
    105104        } 
    106105 
  • Whitix/branches/keobject/include/devices/class.h

    r1051 r1081  
    1111int DevClassCreate(struct DevClass* devClass, struct KeObjType* type, const char* name, ...); 
    1212 
     13static inline struct KeFsEntry* DevClassGetDir(struct DevClass* devClass) 
     14{ 
     15        return devClass->set.object.dir; 
     16} 
     17 
    1318#endif 
  • Whitix/branches/keobject/include/devices/device.h

    r1051 r1081  
    9191} 
    9292 
     93static inline struct KeFsEntry* KeDeviceGetConfDir(struct KeDevice* device) 
     94{ 
     95        return device->object.dir; 
     96} 
     97 
    9398#endif 
  • Whitix/branches/keobject/include/fs/icfs.h

    r1052 r1081  
    3939int IcFsAddIntEntry(struct KeFsEntry* dir, char* name, int* value, DWORD permissions); 
    4040struct IcFsEntry* IcFsAddStrEntry(struct KeFsEntry* dir, char* name, char* str, DWORD permissions); 
    41 int IcFsAddSoftLink(struct KeFsEntry* dir, char* name, int (*followLink)(char* buffer, int size)); 
     41int IcFsAddSoftLink(struct KeFsEntry* dir, char* name, 
     42        int (*followLink)(struct KeFsEntry**, struct KeFsEntry*)); 
    4243 
    4344#endif