about summary refs log blame commit diff stats
path: root/themes/headache
blob: 5b2f5cba1363fd444b8e25c92e533cc5d5089b56 (plain) (tree)
gmail.com> 2016-01-09 21:37:59 +0000 Added roster room themes' href='/danisanti/profani-tty/commit/themes/headache?id=cd2458c0198bab99655248dd2e1071a862e5ef80'>cd2458c0 ^
1
2
3
4
5


                

                       










                          
                    
                    



                      

                         
               
                          








                            





             
               

             


              
              
                      
                           
                      
                           

          
                       

















                                

                           

                            
                          
                
ss='alt'>
                                         

                                         







                           
                                                                                
                                         

                                         















                                                                               
                                   

                                   
          
                                             
                                        







                                 
#include "rootfs.h"
#include "alloc.h"

static BOOL rootfs_open(File *node, uint32 flags);
static void rootfs_close(File *file);
static FileSystemNode *rootfs_finddir(FileSystemNode *node, char *name);
static struct FileSystemDirent *rootfs_readdir(FileSystemNode *node, uint32 index);
static BOOL rootfs_mkdir(FileSystemNode *node, const char *name, uint32 flags);

FileSystemNode* initializeRootFS() {
    FileSystemNode* root = (FileSystemNode*)kmalloc(sizeof(FileSystemNode));
    memset((uint8*)root, 0, sizeof(FileSystemNode));
    root->nodeType = FT_Directory;
    root->open = rootfs_open;
    root->close = rootfs_close;
    root->readdir = rootfs_readdir;
    root->finddir = rootfs_finddir;
    root->mkdir = rootfs_mkdir;

    return root;
}

static FileSystemDirent gDirent;

static BOOL rootfs_open(File *node, uint32 flags) {
    return TRUE;
}

static void rootfs_close(File *file) {

}

static struct FileSystemDirent *rootfs_readdir(FileSystemNode *node, uint32 index) {
    FileSystemNode *n = node->firstChild;
    uint32 i = 0;
    while (NULL != n) {
        if (index == i) {
            gDirent.fileType = n->nodeType;
            gDirent.inode = n->inode;
            strcpy(gDirent.name, n->name);

            return &gDirent;
        }
        n = n->nextSibling;
        ++i;
    }

    return NULL;
}

static FileSystemNode *rootfs_finddir(FileSystemNode *node, char *name) {
    FileSystemNode *n = node->firstChild;
    while (NULL != n) {
        if (strcmp(name, n->name) == 0) {
            return n;
        }
        n = n->nextSibling;
    }

    return NULL;
}

static BOOL rootfs_mkdir(FileSystemNode *node, const char *name, uint32 flags) {
    FileSystemNode *n = node->firstChild;
    while (NULL != n) {
        if (strcmp(name, n->name) == 0) {
            return FALSE;
        }
        n = n->nextSibling;
    }

    FileSystemNode* newNode = (FileSystemNode*)kmalloc(sizeof(FileSystemNode));
    memset((uint8*)newNode, 0, sizeof(FileSystemNode));
    strcpy(newNode->name, name);
    newNode->nodeType = FT_Directory;
    newNode->open = rootfs_open;
    newNode->close = rootfs_close;
    newNode->readdir = rootfs_readdir;
    newNode->finddir = rootfs_finddir;
    newNode->mkdir = rootfs_mkdir;
    newNode->parent = node;

    if (node->firstChild == NULL) {
        node->firstChild = newNode;
    }
    else {
        FileSystemNode *n = node->firstChild;
        while (NULL != n->nextSibling) {
            n = n->nextSibling;
        }
        n->nextSibling = newNode;
    }

    return TRUE;
}