[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Lost] [Patch] ramdisk



So, hier dann mal der Patch für die ramdisk. Das Teil kann Verzeichnisse anlegen, Dateien anlegen, Schreiben, Lesen, und truncate sollte für verkleinern und vergrößern funktionieren.
Index: src/modules/cdi/ramdisk/dir.c
===================================================================
--- src/modules/cdi/ramdisk/dir.c	(revision 0)
+++ src/modules/cdi/ramdisk/dir.c	(revision 0)
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2008 The LOST Project. All rights reserved.
+ *
+ * This code is derived from software contributed to the LOST Project
+ * by Alexander Siol.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the LOST Project
+ *     and its contributors.
+ * 4. Neither the name of the LOST Project nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <string.h>
+
+#include "ramdisk_cdi.h"
+
+
+cdi_list_t ramdisk_fs_dir_list(struct cdi_fs_stream* stream)
+{
+    return stream->res->children;
+}
+
+int ramdisk_fs_dir_create_child(struct cdi_fs_stream* stream, const char* name,
+                             struct cdi_fs_res* parent)
+{
+    struct ramdisk_fs_res* res = malloc(sizeof(*res));
+    struct ramdisk_fs_res* parent_res = (struct ramdisk_fs_res*) parent;
+
+    memset(res, 0, sizeof(*res));
+
+    res->res.loaded = 1;
+
+    res->res.name = strdup(name);
+    res->res.res = &ramdisk_fs_res;
+    res->buffer = 0;
+    res->size = 0;
+
+    cdi_list_push(parent_res->res.children, res);
+    res->res.parent = parent;
+
+    stream->res = (struct cdi_fs_res*) res;
+    return 1;
+}
Index: src/modules/cdi/ramdisk/ramdisk_cdi.h
===================================================================
--- src/modules/cdi/ramdisk/ramdisk_cdi.h	(revision 0)
+++ src/modules/cdi/ramdisk/ramdisk_cdi.h	(revision 0)
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2008 The LOST Project. All rights reserved.
+ *
+ * This code is derived from software contributed to the LOST Project
+ * by Alexander Siol.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the LOST Project
+ *     and its contributors.
+ * 4. Neither the name of the LOST Project nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _RAMDISK_CDI_H_
+#define _RAMDISK_CDI_H_
+
+#include <stdint.h>
+#include <stdlib.h>
+
+#include "cdi/fs.h"
+
+
+/**
+ * Dateisystemressource fuer ramdisk
+ */
+struct ramdisk_fs_res {
+    struct cdi_fs_res res;
+    void* buffer;
+    size_t size;
+    int64_t access_time;
+    int64_t modification_time;
+};
+
+
+// CDI-IF
+int ramdisk_fs_init(struct cdi_fs_filesystem* fs);
+int ramdisk_fs_destroy(struct cdi_fs_filesystem* fs);
+
+// CDI Res
+int     ramdisk_fs_res_load(struct cdi_fs_stream* stream);
+int     ramdisk_fs_res_unload(struct cdi_fs_stream* stream);
+//int     ramdisk_fs_res_remove(struct cdi_fs_stream* stream);
+//int     ramdisk_fs_res_rename(struct cdi_fs_stream* stream, const char* name);
+//int     ramdisk_fs_res_move(struct cdi_fs_stream* stream, struct cdi_fs_res* dest);
+int     ramdisk_fs_res_assign_class(struct cdi_fs_stream* stream,
+            cdi_fs_res_class_t class);
+//int     ramdisk_fs_res_remove_class(struct cdi_fs_stream* stream,
+//            cdi_fs_res_class_t class);
+int64_t ramdisk_fs_res_meta_read(struct cdi_fs_stream* stream, cdi_fs_meta_t meta);
+int     ramdisk_fs_res_meta_write(struct cdi_fs_stream* stream, cdi_fs_meta_t meta,
+    int64_t value);
+
+// CDI File
+size_t  ramdisk_fs_file_read(struct cdi_fs_stream* stream, uint64_t start,
+            size_t size, void* data);
+size_t  ramdisk_fs_file_write(struct cdi_fs_stream* stream, uint64_t start,
+            size_t size, const void* data);
+int     ramdisk_fs_file_truncate(struct cdi_fs_stream* stream, uint64_t size);
+
+// CDI Dir
+cdi_list_t  ramdisk_fs_dir_list(struct cdi_fs_stream* stream);
+int         ramdisk_fs_dir_create_child(struct cdi_fs_stream* stream,
+                const char* name, struct cdi_fs_res* parent);
+
+// CDI Link
+//const char* ramdisk_fs_link_read(struct cdi_fs_stream* stream);
+//int         ramdisk_fs_link_write(struct cdi_fs_stream* stream, const char* path);
+
+
+// Pointer auf die ramdisk-Ressourcen
+extern struct cdi_fs_res_res    ramdisk_fs_res;
+extern struct cdi_fs_res_file   ramdisk_fs_file;
+extern struct cdi_fs_res_dir    ramdisk_fs_dir;
+extern struct cdi_fs_res_link   ramdisk_fs_link;
+
+#endif
+
Index: src/modules/cdi/ramdisk/file.c
===================================================================
--- src/modules/cdi/ramdisk/file.c	(revision 0)
+++ src/modules/cdi/ramdisk/file.c	(revision 0)
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2008 The LOST Project. All rights reserved.
+ *
+ * This code is derived from software contributed to the LOST Project
+ * by Alexander Siol.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the LOST Project
+ *     and its contributors.
+ * 4. Neither the name of the LOST Project nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "ramdisk_cdi.h"
+
+size_t ramdisk_fs_file_read(struct cdi_fs_stream* stream, uint64_t start,
+    size_t size, void* data)
+{
+    struct ramdisk_fs_res* res = (struct ramdisk_fs_res*) stream->res;
+
+    // maximal bis Ende lesen.
+    if ((res->size - start) < size) {
+        size = res->size - start;
+    }
+
+    memcpy(data, res->buffer + start, size);
+    return size;
+}
+
+size_t ramdisk_fs_file_write(struct cdi_fs_stream* stream, uint64_t start,
+    size_t size, const void* data)
+{
+    struct ramdisk_fs_res* res = (struct ramdisk_fs_res*) stream->res;
+
+    // Es soll mehr geschrieben werden als Platz ist. Buffer vergrößern!.
+    if ((res->size - start) < size) {
+        size_t new_size;
+        new_size = start + size;
+        void* new_buffer = malloc(new_size);
+        if (new_size == 0) {
+            stream->error = CDI_FS_ERROR_INTERNAL;
+            return 0;
+        }
+        memcpy(new_buffer,res->buffer,res->size);
+        free(res->buffer);
+        res->buffer = new_buffer;
+        res->size = new_size;
+    }
+
+    memcpy(res->buffer + start, data, size);
+    return size;
+}
+
+int ramdisk_fs_file_truncate(struct cdi_fs_stream* stream, uint64_t size)
+{
+    struct ramdisk_fs_res* res = (struct ramdisk_fs_res*) stream->res;
+
+    // Nichts zu tun
+    if (size == res->size) {
+        return 1;
+    }
+
+    void* new_buffer;
+    new_buffer = malloc(size);
+    if (new_buffer == 0) {
+        stream->error = CDI_FS_ERROR_INTERNAL;
+        return 0;
+    }
+
+    if (res->size < size) {
+        memcpy(new_buffer,res->buffer,res->size);
+        memset(new_buffer + res->size,0,size - res->size);
+    }
+    else {
+        memcpy(new_buffer,res->buffer,size);
+    }
+    free(res->buffer);
+    res->buffer = new_buffer;
+    res->size = size;
+    return 1;
+}
Index: src/modules/cdi/ramdisk/init.c
===================================================================
--- src/modules/cdi/ramdisk/init.c	(revision 0)
+++ src/modules/cdi/ramdisk/init.c	(revision 0)
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2008 The LOST Project. All rights reserved.
+ *
+ * This code is derived from software contributed to the LOST Project
+ * by Alexander Siol.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the LOST Project
+ *     and its contributors.
+ * 4. Neither the name of the LOST Project nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "ramdisk_cdi.h"
+#include <stdio.h>
+
+int ramdisk_fs_init(struct cdi_fs_filesystem* cdi_fs)
+{
+    struct ramdisk_fs_res* root_res;
+    //ramdisk_fs_t* fs = malloc(sizeof(*fs));
+
+    cdi_fs->opaque = NULL;
+
+    //fs->dev_read = null;
+    //fs->dev_write = null;
+    //fs->dev_private = cdi_fs;
+
+    root_res = malloc(sizeof(*root_res));
+    memset(root_res, 0, sizeof(*root_res));
+    root_res->res.name = strdup("/");
+    root_res->res.res = &ramdisk_fs_res;
+    root_res->res.dir = &ramdisk_fs_dir;
+    root_res->res.loaded = 1;
+    root_res->buffer = 0;
+    root_res->size = 0;
+
+    cdi_fs->root_res = (struct cdi_fs_res*) root_res;
+    puts("mounted");
+    return 1;
+}
+
+int ramdisk_fs_destroy(struct cdi_fs_filesystem* fs)
+{
+    return 0;
+}
Index: src/modules/cdi/ramdisk/Makefile.all
===================================================================
--- src/modules/cdi/ramdisk/Makefile.all	(revision 0)
+++ src/modules/cdi/ramdisk/Makefile.all	(revision 0)
@@ -0,0 +1,6 @@
+shopt -s extglob
+source $LOST_BUILDMK_ROOT/config.sh
+
+echo "LD   $1/modules/ramdisk"
+$LOST_TOOLS_LD -oramdisk.mod -Ttext=0x40000000 *.o --start-group $2 --end-group
+$LOST_TOOLS_STRIP -s ramdisk.mod -o $1/modules/ramdisk
Index: src/modules/cdi/ramdisk/main.c
===================================================================
--- src/modules/cdi/ramdisk/main.c	(revision 0)
+++ src/modules/cdi/ramdisk/main.c	(revision 0)
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2008 The LOST Project. All rights reserved.
+ *
+ * This code is derived from software contributed to the LOST Project
+ * by Alexander Siol.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the LOST Project
+ *     and its contributors.
+ * 4. Neither the name of the LOST Project nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "cdi/fs.h"
+#include "cdi/misc.h"
+
+#include "ramdisk_cdi.h"
+
+struct ramdisk_driver {
+    struct cdi_fs_driver fs;
+};
+
+static struct ramdisk_driver ramdisk_driver;
+static const char* driver_name = "ramdisk";
+
+static int ramdisk_driver_init(struct ramdisk_driver* driver);
+static void ramdisk_driver_destroy(struct cdi_driver* driver);
+
+#ifdef CDI_STANDALONE
+int main()
+#else
+int init_ramdisk
+#endif
+{
+    cdi_init();
+
+    if (ramdisk_driver_init(&ramdisk_driver) != 0) {
+        return -1;
+    }
+    cdi_fs_driver_register((struct cdi_fs_driver*) &ramdisk_driver);
+
+#ifdef CDI_STANDALONE
+    cdi_run_drivers();
+#endif
+
+    return 0;
+}
+
+/**
+ * Initialisiert die Datenstrukturen fuer den ramdisk-Treiber
+ */
+static int ramdisk_driver_init(struct ramdisk_driver* driver)
+{
+    // Konstruktor der Vaterklasse
+    cdi_fs_driver_init((struct cdi_fs_driver*) driver);
+
+    // Namen setzen
+    driver->fs.drv.name = driver_name;
+    driver->fs.fs_init = ramdisk_fs_init;
+    driver->fs.fs_destroy = ramdisk_fs_destroy;
+
+    driver->fs.drv.destroy = ramdisk_driver_destroy;
+    return 0;
+}
+
+/**
+ * Deinitialisiert die Datenstrukturen fuer den ramdisk-Treiber
+ */
+static void ramdisk_driver_destroy(struct cdi_driver* driver)
+{
+    cdi_fs_driver_destroy((struct cdi_fs_driver*) driver);
+}
Index: src/modules/cdi/ramdisk/res.c
===================================================================
--- src/modules/cdi/ramdisk/res.c	(revision 0)
+++ src/modules/cdi/ramdisk/res.c	(revision 0)
@@ -0,0 +1,160 @@
+/*
+ * Copyright (c) 2008 The LOST Project. All rights reserved.
+ *
+ * This code is derived from software contributed to the LOST Project
+ * by Alexander Siol.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the LOST Project
+ *     and its contributors.
+ * 4. Neither the name of the LOST Project nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "ramdisk_cdi.h"
+
+int ramdisk_fs_res_load(struct cdi_fs_stream* stream)
+{
+    struct ramdisk_fs_res* res = (struct ramdisk_fs_res*) stream->res;
+
+    if (res->res.loaded) {
+        return 0;
+    }
+
+    res->res.loaded = 1;
+    return 1;
+}
+
+int ramdisk_fs_res_unload(struct cdi_fs_stream* stream)
+{
+    struct ramdisk_fs_res* res = (struct ramdisk_fs_res*) stream->res;
+
+    if (!res->res.loaded) {
+        return 0;
+    }
+
+    if (res->res.dir) {
+    //    dir_clear(stream);
+    }
+
+    res->res.loaded = 0;
+    return 1;
+}
+
+int64_t ramdisk_fs_res_meta_read(struct cdi_fs_stream* stream, cdi_fs_meta_t meta)
+{
+    struct ramdisk_fs_res* res = (struct ramdisk_fs_res*) stream->res;
+
+    switch (meta) {
+        case CDI_FS_META_SIZE:
+            return res->size;
+
+        case CDI_FS_META_USEDBLOCKS:
+            return 1;
+
+        case CDI_FS_META_BLOCKSZ:
+            return res->size;
+
+        case CDI_FS_META_BESTBLOCKSZ:
+            return res->size;
+
+        case CDI_FS_META_CREATETIME:
+            return res->modification_time;
+
+        case CDI_FS_META_ACCESSTIME:
+            return res->access_time;
+
+        case CDI_FS_META_CHANGETIME:
+            return res->modification_time;
+    }
+
+    return 0;
+}
+
+int ramdisk_fs_res_meta_write(struct cdi_fs_stream* stream, cdi_fs_meta_t meta,
+                           int64_t value)
+{
+    struct ramdisk_fs_res* res = (struct ramdisk_fs_res*) stream->res;
+
+    switch (meta) {
+        case CDI_FS_META_ACCESSTIME:
+            res->access_time = value;
+            return 1;
+
+        case CDI_FS_META_CHANGETIME:
+            res->modification_time = value;
+            return 1;
+
+        // RO:
+        case CDI_FS_META_SIZE:
+        case CDI_FS_META_USEDBLOCKS:
+        case CDI_FS_META_BESTBLOCKSZ:
+        case CDI_FS_META_BLOCKSZ:
+        case CDI_FS_META_CREATETIME:
+            return 0;
+    }
+
+    return 0;
+}
+
+int ramdisk_fs_res_assign_class(struct cdi_fs_stream* stream,
+                             cdi_fs_res_class_t class)
+{
+    struct ramdisk_fs_res* res = (struct ramdisk_fs_res*) stream->res;
+
+    // In ramdisk koennen die Ressource nur zu maximal einer Klasse gleichzeitig
+    // gehoeren
+    if (res->res.file || res->res.dir || res->res.link || res->res.special)
+    {
+        stream->error = CDI_FS_ERROR_ONS;
+        return 0;
+    }
+
+    switch (class) {
+        case CDI_FS_CLASS_FILE:
+            res->res.file = &ramdisk_fs_file;
+            break;
+
+        case CDI_FS_CLASS_DIR:
+            res->res.dir = &ramdisk_fs_dir;
+            break;
+
+        case CDI_FS_CLASS_LINK:
+            stream->error = CDI_FS_ERROR_NOT_IMPLEMENTED;
+            goto error_out;
+            break;
+
+        case CDI_FS_CLASS_SPECIAL:
+            stream->error = CDI_FS_ERROR_NOT_IMPLEMENTED;
+            goto error_out;
+            break;
+
+    };
+
+    return 1;
+
+error_out:
+    return 0;
+}
Index: src/modules/cdi/ramdisk/resources.c
===================================================================
--- src/modules/cdi/ramdisk/resources.c	(revision 0)
+++ src/modules/cdi/ramdisk/resources.c	(revision 0)
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2008 The LOST Project. All rights reserved.
+ *
+ * This code is derived from software contributed to the LOST Project
+ * by Alexander Siol.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the LOST Project
+ *     and its contributors.
+ * 4. Neither the name of the LOST Project nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "ramdisk_cdi.h"
+
+struct cdi_fs_res_res   ramdisk_fs_res = {
+    .load = ramdisk_fs_res_load,
+    .unload = ramdisk_fs_res_unload,
+
+    .meta_read = ramdisk_fs_res_meta_read,
+    .meta_write = ramdisk_fs_res_meta_write,
+
+    .assign_class = ramdisk_fs_res_assign_class
+};
+
+struct cdi_fs_res_file  ramdisk_fs_file = {
+    // Prinzipiell haben wir nur ausfuehrbare Dateien, der Rest wird mit den
+    // Berechtigungen geregelt
+    .executable = 1,
+
+    .read = ramdisk_fs_file_read,
+    .write = ramdisk_fs_file_write,
+    .truncate = ramdisk_fs_file_truncate
+};
+
+struct cdi_fs_res_dir   ramdisk_fs_dir = {
+    .list = ramdisk_fs_dir_list,
+    .create_child = ramdisk_fs_dir_create_child
+};
+
+struct cdi_fs_res_link  ramdisk_fs_link = {
+    .read_link = NULL,//ramdisk_fs_link_read,
+    .write_link = NULL,//ramdisk_fs_link_write
+};
+