[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Lost] [LOST] [Patch] Ramdisk
Hi,
So Ramdisk baut jetzt richtig ab und kann auch symbolische Links.
stultus / dunklermeuchler schrieb:
> so, das ist der neueste code den ich hier auf der platte hab.
>
>
> ------------------------------------------------------------------------
>
> 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,63 @@
> +/*
> + * 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;
> +
> + 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,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.
> + */
> +
> +#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;
> +
> + // Buffer fuer die Daten, und dessen Groesse
> + void* buffer;
> + size_t size;
> +
> + // Zugriffszeiten (Meta-Informationen)
> + 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);
> +
> +
> +// ramdisk-Ressourcen(-Typen)
> +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,95 @@
> +/*
> + * 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 vergroessern!.
> + if ((res->size - start) < size) {
> + void* new_buffer;
> + size_t new_size;
> + new_size = start + size;
> + if (!(new_buffer = realloc(res->buffer,new_size))) {
> + stream->error = CDI_FS_ERROR_INTERNAL;
> + return 0;
> + }
> + memset(res->buffer + res->size, 0, new_size - res->size);
> + 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;
> + if (!(new_buffer = realloc(res->buffer,size))) {
> + stream->error = CDI_FS_ERROR_INTERNAL;
> + }
> + if (res->size < size) {
> + memset(new_buffer + res->size,0,size - res->size);
> + }
> +
> + 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,77 @@
> +/*
> + * 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>
> +
> +static int dir_clear(struct cdi_fs_res* real_res)
> +{
> + struct ramdisk_fs_res* res = (struct ramdisk_fs_res*) real_res;
> + struct ramdisk_fs_res* child;
> +
> + while ((child = cdi_list_pop(res->res.children))) {
> + if (child->res.dir) {
> + dir_clear((struct cdi_fs_res*)child);
> + }
> + free(child->res.name);
> + free(child->buffer);
> + free(child);
> + }
> +
> + cdi_list_destroy(res->res.children);
> + res->res.children = NULL;
> + return 1;
> +}
> +
> +int ramdisk_fs_init(struct cdi_fs_filesystem* cdi_fs)
> +{
> + struct ramdisk_fs_res* root_res;
> +
> + 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;
> +
> + cdi_fs->root_res = (struct cdi_fs_res*) root_res;
> + return 1;
> +}
> +
> +int ramdisk_fs_destroy(struct cdi_fs_filesystem* fs)
> +{
> + dir_clear(fs->root_res);
> + 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,156 @@
> +/*
> + * 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;
> + }
> +
> + 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
> +};
> +
Index: ramdisk/dir.c
===================================================================
--- ramdisk/dir.c (Revision 0)
+++ 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 "cdi/lists.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->res.children = cdi_list_create();
+ res->creation_time = time(NULL);
+
+ cdi_list_push(parent_res->res.children, res);
+ res->res.parent = parent;
+
+ stream->res = (struct cdi_fs_res*) res;
+ return 1;
+}
Index: ramdisk/ramdisk_cdi.h
===================================================================
--- ramdisk/ramdisk_cdi.h (Revision 0)
+++ ramdisk/ramdisk_cdi.h (Revision 0)
@@ -0,0 +1,105 @@
+/*
+ * 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;
+
+ // Buffer fuer die Daten, und dessen Groesse
+ void* buffer;
+ size_t size;
+
+ // Zugriffszeiten (Meta-Informationen)
+ int64_t creation_time;
+ 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);
+int ramdisk_fs_res_destroy(struct ramdisk_fs_res* res);
+
+// 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);
+
+
+// ramdisk-Ressourcen(-Typen)
+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: ramdisk/file.c
===================================================================
--- ramdisk/file.c (Revision 0)
+++ ramdisk/file.c (Revision 0)
@@ -0,0 +1,95 @@
+/*
+ * 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 vergroessern!.
+ if ((res->size - start) < size) {
+ void* new_buffer;
+ size_t new_size;
+ new_size = start + size;
+ if (!(new_buffer = realloc(res->buffer,new_size))) {
+ stream->error = CDI_FS_ERROR_INTERNAL;
+ return 0;
+ }
+ memset(new_buffer + res->size, 0, new_size - res->size);
+ 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;
+ if (!(new_buffer = realloc(res->buffer,size))) {
+ stream->error = CDI_FS_ERROR_INTERNAL;
+ }
+ if (res->size < size) {
+ memset(new_buffer + res->size,0,size - res->size);
+ }
+
+ res->buffer = new_buffer;
+ res->size = size;
+ return 1;
+}
Index: ramdisk/init.c
===================================================================
--- ramdisk/init.c (Revision 0)
+++ ramdisk/init.c (Revision 0)
@@ -0,0 +1,60 @@
+/*
+ * 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 "cdi/lists.h"
+#include <stdio.h>
+
+int ramdisk_fs_init(struct cdi_fs_filesystem* cdi_fs)
+{
+ struct ramdisk_fs_res* root_res;
+
+ 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->res.children = cdi_list_create();
+ root_res->creation_time = time(NULL);
+
+ cdi_fs->root_res = (struct cdi_fs_res*) root_res;
+ return 1;
+}
+
+int ramdisk_fs_destroy(struct cdi_fs_filesystem* fs)
+{
+ return ramdisk_fs_res_destroy((struct ramdisk_fs_res*)fs->root_res);
+}
Index: ramdisk/main.c
===================================================================
--- ramdisk/main.c (Revision 0)
+++ 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: ramdisk/res.c
===================================================================
--- ramdisk/res.c (Revision 0)
+++ ramdisk/res.c (Revision 0)
@@ -0,0 +1,223 @@
+/*
+ * 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;
+ }
+
+ 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->creation_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:
+ res->res.link = &ramdisk_fs_link;
+ break;
+
+ case CDI_FS_CLASS_SPECIAL:
+ stream->error = CDI_FS_ERROR_NOT_IMPLEMENTED;
+ goto error_out;
+ break;
+
+ };
+
+ return 1;
+
+error_out:
+ return 0;
+}
+
+int ramdisk_fs_res_remove_class(struct cdi_fs_stream* stream,
+ cdi_fs_res_class_t class)
+{
+ struct ramdisk_fs_res* res = (struct ramdisk_fs_res*) stream->res;
+
+ switch (class) {
+ case CDI_FS_CLASS_FILE:
+ res->res.file = NULL;
+ break;
+
+ case CDI_FS_CLASS_DIR:
+ res->res.dir = NULL;
+ break;
+
+ case CDI_FS_CLASS_LINK:
+ res->res.link = NULL;
+ break;
+
+ case CDI_FS_CLASS_SPECIAL:
+ res->res.special = NULL;
+ break;
+ };
+
+ return 1;
+}
+
+int ramdisk_fs_res_rename(struct cdi_fs_stream* stream, const char* name)
+{
+ struct ramdisk_fs_res* res = (struct ramdisk_fs_res*) stream->res;
+ free(res->res.name);
+ res->res.name = strdup(name);
+ return 1;
+}
+
+int ramdisk_fs_res_remove(struct cdi_fs_stream* stream)
+{
+ struct ramdisk_fs_res* res = (struct ramdisk_fs_res*) stream->res;
+
+ if (res->res.file!=NULL || res->res.dir!=NULL || res->res.link!=NULL || res->res.special!=NULL) {
+ stream->error = CDI_FS_ERROR_ONS;
+ return 0;
+ }
+
+ // Link aus der Liste der Vater-Resource entfernen
+ size_t i;
+ struct ramdisk_fs_res* child;
+ for (i=0;(child = cdi_list_get(res->res.parent->children,i));i++) {
+ if (child==res) {
+ cdi_list_remove(res->res.parent->children,i);
+ break;
+ }
+ }
+
+ ramdisk_fs_res_destroy(res);
+
+ return 1;
+}
+
+int ramdisk_fs_res_destroy(struct ramdisk_fs_res* res)
+{
+ struct ramdisk_fs_res *child;
+ free(res->res.name);
+ free(res->buffer);
+ while ((child = cdi_list_pop(res->res.children))) ramdisk_fs_res_destroy(child);
+ cdi_list_destroy(res->res.children);
+ free(res);
+}
Index: ramdisk/resources.c
===================================================================
--- ramdisk/resources.c (Revision 0)
+++ ramdisk/resources.c (Revision 0)
@@ -0,0 +1,71 @@
+/*
+ * 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,
+ .remove_class = ramdisk_fs_res_remove_class,
+
+ .rename = ramdisk_fs_res_rename,
+ .remove = ramdisk_fs_res_remove
+};
+
+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 = ramdisk_fs_link_read,
+ .write_link = ramdisk_fs_link_write
+};
+
Index: ramdisk/link.c
===================================================================
--- ramdisk/link.c (Revision 0)
+++ ramdisk/link.c (Revision 0)
@@ -0,0 +1,50 @@
+/*
+ * 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"
+
+const char *ramdisk_fs_link_read(struct cdi_fs_stream *stream)
+{
+ struct ramdisk_fs_res* res = (struct ramdisk_fs_res*) stream->res;
+
+ return res->buffer;
+}
+
+int ramdisk_fs_link_write(struct cdi_fs_stream *stream, const char *path) {
+ struct ramdisk_fs_res* res = (struct ramdisk_fs_res*) stream->res;
+
+ free(res->buffer);
+ res->buffer = strdup(path);
+}