* Device Filesystem (DevFS)
* - vfs/fs/devfs.c
*/
+#define DEBUG 0
#include <acess.h>
#include <vfs.h>
#include <fs_devfs.h>
void DevFS_DelDevice(tDevFS_Driver *Device);
#endif
tVFS_Node *DevFS_InitDevice(const char *Device, const char **Options);
-char *DevFS_ReadDir(tVFS_Node *Node, int Pos);
+void DevFS_Unmount(tVFS_Node *RootNode);
+ int DevFS_ReadDir(tVFS_Node *Node, int Pos, char Dest[FILENAME_MAX]);
tVFS_Node *DevFS_FindDir(tVFS_Node *Node, const char *Name);
// === GLOBALS ===
tVFS_Driver gDevFS_Info = {
- "devfs", 0, DevFS_InitDevice, NULL, NULL
+ .Name = "devfs",
+ .InitDevice = DevFS_InitDevice,
+ .Unmount = DevFS_Unmount
};
tVFS_NodeType gDevFS_DirType = {
.TypeName = "DevFS-Dir",
{
int ret = 0;
tDevFS_Driver *dev;
+
+ ENTER("pDevice", Device);
+ LOG("Device->Name = '%s'", Device->Name);
SHORTLOCK( &glDevFS_ListLock );
else
Log_Warning("DevFS", "Device %p attempted to register '%s' which was owned by %p",
Device, dev->Name, dev);
- ret = 0; // Error
+ ret = -1; // Error
}
else {
Device->Next = gDevFS_Drivers;
}
SHORTREL( &glDevFS_ListLock );
+ LEAVE('i', ret);
return ret;
}
return &gDevFS_RootNode;
}
+void DevFS_Unmount(tVFS_Node *RootNode)
+{
+
+}
+
/**
* \fn char *DevFS_ReadDir(tVFS_Node *Node, int Pos)
*/
-char *DevFS_ReadDir(tVFS_Node *Node, int Pos)
+int DevFS_ReadDir(tVFS_Node *Node, int Pos, char Dest[FILENAME_MAX])
{
tDevFS_Driver *dev;
- if(Pos < 0) return NULL;
+ if(Pos < 0) return -EINVAL;
for(dev = gDevFS_Drivers;
dev && Pos--;
dev = dev->Next
);
- if(dev)
- return strdup(dev->Name);
- else
- return NULL;
+ if(dev) {
+ strncpy(Dest, dev->Name, FILENAME_MAX);
+ return 0;
+ }
+ else {
+ return -ENOENT;
+ }
}
/**
{
tDevFS_Driver *dev;
- //ENTER("pNode sName", Node, Name);
+ ENTER("pNode sName", Node, Name);
for(dev = gDevFS_Drivers;
dev;
)
{
//LOG("dev = %p", dev);
- //LOG("dev->Name = '%s'", dev->Name);
+ LOG("dev->Name = '%s'", dev->Name);
if(strcmp(dev->Name, Name) == 0) {
- //LEAVE('p', &dev->RootNode);
+ LEAVE('p', &dev->RootNode);
return &dev->RootNode;
}
}
- //LEAVE('n');
+ LEAVE('n');
return NULL;
}