Skip to content

Instantly share code, notes, and snippets.

@lutoma
Created September 29, 2010 19:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lutoma/603354 to your computer and use it in GitHub Desktop.
Save lutoma/603354 to your computer and use it in GitHub Desktop.
fsNode_t *memfs_init(uint32 location)
{
// Initialise the main and file header pointers and populate the root directory.
memfsHeader = (memfsHeader_t *)location;
memfsHeaders = (memfsFileHeader_t *) (location+sizeof(memfsHeader_t));
// Initialise the root directory.
rootNode = (fsNode_t*)kmalloc(sizeof(fsNode_t));
strcpy(rootNode->name, "initrd");
rootNode->mask = rootNode->uid = rootNode->gid = rootNode->inode = rootNode->length = 0;
rootNode->flags = FS_DIRECTORY;
rootNode->read = 0;
rootNode->write = 0;
rootNode->open = 0;
rootNode->close = 0;
rootNode->readdir = &memfs_readdir;
rootNode->finddir = &memfs_finddir;
rootNode->ptr = 0;
rootNode->impl = 0;
// Initialise the /dev directory [yes, we need one. required.]
devNode = (fsNode_t*)kmalloc(sizeof(fsNode_t));
strcpy(devNode->name, "dev");
devNode->mask = devNode->uid = devNode->gid = devNode->inode = devNode->length = 0;
devNode->flags = FS_DIRECTORY;
devNode->read = 0;
devNode->write = 0;
devNode->open = 0;
devNode->close = 0;
devNode->readdir = &memfs_readdir;
devNode->finddir = &memfs_finddir;
devNode->ptr = 0;
devNode->impl = 0;
rootNodes = (fsNode_t*)kmalloc(sizeof(fsNode_t) * memfsHeader->fileCount); //Allocate space for files
rootNodeCount = memfsHeader->fileCount;
// Make all the shiny files
int i;
for (i = 0; i < memfsHeader->fileCount; i++)
{
// Edit the file's header - currently it holds the file offset
// relative to the start of the ramdisk. We want it relative to the start
// of memory.
memfsHeaders[i].offset += location;
// Create a new file node.
/*strcpy(rootNodes[i].name, memfsHeaders[i].name);
rootNodes[i].mask = rootNodes[i].uid = rootNodes[i].gid = 0;
rootNodes[i].length = memfsHeaders[i].length;
rootNodes[i].inode = i;*
rootNodes[i].flags = FS_FILE;
rootNodes[i].read = &memfs_read;
rootNodes[i].write = 0;
rootNodes[i].readdir = 0;
rootNodes[i].finddir = 0;*/
rootNodes[i].open = 0;
rootNodes[i].close = 0;
rootNodes[i].impl = 0;
}
return rootNode;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment