diff --git a/src/sys/ubixfsv2/Makefile b/src/sys/ubixfsv2/Makefile index 2165acd..d38158d 100644 --- a/src/sys/ubixfsv2/Makefile +++ b/src/sys/ubixfsv2/Makefile @@ -11,7 +11,7 @@ REMOVE = rm -f #Objects -OBJS = main.o vfs.o ubixfs.o btree.o +OBJS = main.o vfs.o ubixfs.o btree.o ramdrive.o #Includes INCLUDES = -I./include -I./ diff --git a/src/sys/ubixfsv2/ramdrive.cpp b/src/sys/ubixfsv2/ramdrive.cpp new file mode 100644 index 0000000..b5c3e4d --- /dev/null +++ b/src/sys/ubixfsv2/ramdrive.cpp @@ -0,0 +1,123 @@ +/***************************************************************************************** + Copyright (c) 2002-2004 The UbixOS Project + All rights reserved. + + Redistribution and use in source and binary forms, with or without modification, are + permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this list of + conditions, the following disclaimer and the list of authors. Redistributions in binary + form must reproduce the above copyright notice, this list of conditions, the following + disclaimer and the list of authors in the documentation and/or other materials provided + with the distribution. Neither the name of the UbixOS 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 OWNER 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. + + $Id$ + +*****************************************************************************************/ + +#include +#include +#include + +#include + + +static char *ram_data = 0x0; + + +static int ramDrive_read(device_t *dev,void *ptr,uInt32 length,uInt32 offset) { + char *data = ram_data + offset; + + memcpy(ptr,data,length * 512); + + return(length); + } + +static int ramDrive_write(device_t *dev,void *ptr,uInt32 length,uInt32 offset) { + char *data = ram_data + offset; + + memcpy(data,ptr,length * 512); + + return(length); + } + +device_t *dev_ramDrive() { + device_t *ramDrive = 0x0; + + FILE *ramDisk; + + ramDisk = fopen("./ram.dsk","rb"); + + ramDrive = (device_t *)malloc(sizeof(device_t)); + + ram_data = (char *)malloc(1024 * 1024 * 40); + + if (ramDisk != 0x0) { + printf("Loaded Ram Disk\n"); + fread(ram_data,1024 * 1024 * 40,1,ramDisk); + fclose(ramDisk); + } + + ramDrive->major = 0x1; + + ramDrive->read = ramDrive_read; + ramDrive->write = ramDrive_write; + + return(ramDrive); + } + +int dev_ramDestroy() { + FILE *ramDisk; + + ramDisk = fopen("./ram.dsk","wb"); + + fwrite(ram_data,1024 * 1024 * 40,1,ramDisk); + + fclose(ramDisk); + + printf("Saved Ram Disk\n"); + + return(0x0); + } + +/*** + $Log$ + Revision 1.8 2004/08/30 13:29:08 reddawg + Fixed ramdisk to write/read 512 blocks + + Revision 1.7 2004/08/13 22:06:54 reddawg + UbixFS: fixed the test shell + + Revision 1.6 2004/08/13 21:47:49 reddawg + Fixed + + Revision 1.5 2004/08/13 17:25:06 reddawg + Testing better + + Revision 1.4 2004/08/13 17:07:32 reddawg + Works + + Revision 1.3 2004/08/13 16:58:57 reddawg + test + + Revision 1.2 2004/08/13 16:54:14 reddawg + fixed + + Revision 1.1 2004/08/13 16:51:55 reddawg + Start of ubixfs shell + + END + ***/ + diff --git a/src/sys/ubixfsv2/ubixfs.cpp b/src/sys/ubixfsv2/ubixfs.cpp index a72d4ec..51f714f 100644 --- a/src/sys/ubixfsv2/ubixfs.cpp +++ b/src/sys/ubixfsv2/ubixfs.cpp @@ -330,12 +330,43 @@ memset(bth, 0, superBlock->blockSize); bth->firstDeleted = bth->firstNodeOffset = -1; - // write out the "root" dir inode + /* create the root dir inode here */ + ubixfsInode * inode = new ubixfsInode; assert(inode); + if (inode == NULL) return NULL; memset(inode, 0, sizeof(ubixfsInode)); + // inode->magic1 = ; + inode->inodeNum.allocationGroup = 0; + inode->inodeNum.start = 0; + inode->inodeNum.len = 1; + + inode->parent.iAddr.allocationGroup = 0; + inode->parent.iAddr.start = 0; + inode->parent.iAddr.len = 0; + strcpy(inode->name, "/"); + inode->uid = getuid(); + inode->gid = getgid(); + // inode->mode + // inode->flags + // inode->createTime + // inode->lastModifiedTime + // inode->type + inode->inodeSize = superBlock->inodeSize; + + /* + * next and prev are used in memory to hold pointers to the next/prev + * inodes in this dir. On disk they may have another value, but for + * now they should be set to null. + */ + + inode->next.offset = 0; + inode->prev.offset = 0; + + // write out the "root" dir inode + dev->write(dev, inode, 0, superBlock->inodeSize / 512); // write out the "root" dir dev->write(dev, bth, 1, superBlock->blockSize / 512);