diff --git a/.cproject b/.cproject
index 04b8d6f..202d010 100644
--- a/.cproject
+++ b/.cproject
@@ -5,7 +5,6 @@
-
@@ -17,8 +16,8 @@
-
-
+
+
@@ -44,6 +43,9 @@
+
+
+
diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
index 076bf00..1650089 100644
--- a/.settings/language.settings.xml
+++ b/.settings/language.settings.xml
@@ -5,10 +5,6 @@
-
-
-
-
diff --git a/sys/fs/ubixfsv2/btree.cpp b/sys/fs/ubixfsv2/btree.cpp
index 114018d..c24a051 100644
--- a/sys/fs/ubixfsv2/btree.cpp
+++ b/sys/fs/ubixfsv2/btree.cpp
@@ -1,4 +1,7 @@
// http://www.cs.msstate.edu/~cs2314/global/BTreeAnimation/algorithm.html
+
+/*
+
#include
#include
#include
@@ -37,7 +40,7 @@
} // bTree::bTree
bTree::bTree(const char * key, ubixfsInode * inode) {
-/* once the FS and the bTree are interfaced, this should go away */
+// once the FS and the bTree are interfaced, this should go away
root = NULL;
tag = 0;
header = new bTreeHeader;
@@ -114,9 +117,8 @@
// cout << "Insert(" << key << ")" << endl;
//Info(bnode);
++header->treeLeafCount;
- /*
- * Find the leaf node the inode goes into
- */
+ //Find the leaf node the inode goes into
+
assert(bnode->used);
// cout << "---Inserting " << inode->name << " @ " << inode << endl;
while (bnode != NULL && !bnode->leaf) {
@@ -136,9 +138,6 @@
}
} // while
- /*
- *
- */
assert(bnode);
if (bnode->leaf != true) cout << "leafnode!=true" << endl;
@@ -161,9 +160,7 @@
if (tmpInode == NULL) {
- /*
- * This is the first node in this leaf
- */
+ // This is the first node in this leaf
bnode->head[curSlot].iPtr = bnode->tail[curSlot].iPtr = inode;
bnode->present[curSlot] = true;
@@ -185,9 +182,8 @@
} // else
} else {
- /*
- * Add node to leaf page. Scan through to find where it goes.
- */
+ // Add node to leaf page. Scan through to find where it goes.
+
if (strcmp(key, bnode->head[curSlot].iPtr->name) < 0)
{
@@ -405,11 +401,12 @@
if (strcmp(key, node->keys[curSlot]) < 0) break;
} // for
- /*
+
+ *//*
* note that there is one more item for everything but keys
* So, make the shift count +1 and just subtract it from the key shift
* later
- */
+ *//*
int shift = node->used - curSlot +1;
memmove(&node->head[curSlot+1],
@@ -543,14 +540,15 @@
ubixfsInode *
bTree::Find(const char * key) {
-/*
+
+*//*
ubixfsInode * tmp = GetFirstNode();
while (tmp!=NULL) {
if (strcmp(tmp->name, key) == 0) return tmp;
tmp = tmp->next.iPtr;
}
return NULL;
-*/
+*//*
return treeSearch(root, key);
} // bTree::Find
@@ -765,3 +763,5 @@
cout << "tree width: " << header->treeWidth << endl;
cout << "tree leaf count: " << header->treeLeafCount << endl;
} // bTree::~bTree
+
+*/
diff --git a/sys/fs/ubixfsv2/btree.h b/sys/fs/ubixfsv2/btree.h
index edd28ee..591ba26 100644
--- a/sys/fs/ubixfsv2/btree.h
+++ b/sys/fs/ubixfsv2/btree.h
@@ -1,3 +1,4 @@
+/*
#ifndef BTREE_H
#define BTREE_H
@@ -68,3 +69,4 @@
friend class UbixFS;
}; // bTree
#endif // !BTREE_H
+*/
diff --git a/sys/fs/ubixfsv2/btreeheader.h b/sys/fs/ubixfsv2/btreeheader.h
index be72012..9f0e1fb 100644
--- a/sys/fs/ubixfsv2/btreeheader.h
+++ b/sys/fs/ubixfsv2/btreeheader.h
@@ -1,4 +1,4 @@
-#ifndef BTREEHEADER_H
+/*#ifndef BTREEHEADER_H
#define BTREEHEADER_H
typedef struct bTreeHeader {
@@ -10,4 +10,4 @@
char paddington[4068];
} bTreeHeader; // bTreeHeader
-#endif /* !BTREEHEADER_H */
+#endif*/ /* !BTREEHEADER_H */
diff --git a/sys/fs/ubixfsv2/device.h b/sys/fs/ubixfsv2/device.h
index fe3d82f..007d187 100644
--- a/sys/fs/ubixfsv2/device.h
+++ b/sys/fs/ubixfsv2/device.h
@@ -26,7 +26,7 @@
$Id: device.h 54 2016-01-11 01:29:55Z reddawg $
*****************************************************************************************/
-
+/*
#ifndef _DEVICE_H
#define _DEVICE_H
@@ -62,7 +62,7 @@
};
#endif
-
+*/
/***
$Log: device.h,v $
Revision 1.1.1.1 2006/06/01 12:46:15 reddawg
diff --git a/sys/fs/ubixfsv2/file.h b/sys/fs/ubixfsv2/file.h
index 7d8f1f3..d03e2d3 100644
--- a/sys/fs/ubixfsv2/file.h
+++ b/sys/fs/ubixfsv2/file.h
@@ -1,3 +1,4 @@
+/*
#ifndef FILE_H
#define FILE_H
@@ -11,4 +12,4 @@
size_t size;
} fileDescriptor;
-#endif /* !FILE_H */
+#endif *//* !FILE_H */
diff --git a/sys/fs/ubixfsv2/fsAbstract.h b/sys/fs/ubixfsv2/fsAbstract.h
index 9658881..4f1bf80 100644
--- a/sys/fs/ubixfsv2/fsAbstract.h
+++ b/sys/fs/ubixfsv2/fsAbstract.h
@@ -1,4 +1,4 @@
-#ifndef FSABSTRACT_H
+/*#ifndef FSABSTRACT_H
#define FSABSTRACT_H
#include
@@ -13,7 +13,7 @@
vfs_abstract * next;
device_t * device;
public:
- /* File I/O */
+ // File I/O
virtual int vfs_open(const char *, fileDescriptor *,int,...) { return -1; };
virtual int vfs_close(fileDescriptor *) { return -1; };
virtual size_t vfs_read(fileDescriptor *, void *, off_t, size_t)
@@ -21,14 +21,14 @@
virtual size_t vfs_write(fileDescriptor *, void *, off_t, size_t)
{ return 0; };
- /* Dir I/O */
+ // Dir I/O
virtual int vfs_opendir(DIR *,const char *) { return -1; };
virtual int vfs_closedir(DIR *) { return -1; };
virtual int vfs_mkdir(const char *, mode_t) { return -1; };
virtual int vfs_rmdir(const char *) { return -1; };
virtual int vfs_readdir(DIR *,struct dirent *) { return -1; };
- /* FS Functions */
+ // FS Functions
virtual int vfs_init(void) { return -1; };
virtual int vfs_format(device_t *) { return -1; };
virtual void * vfs_mknod(const char *, mode_t) { return NULL; };
@@ -36,11 +36,11 @@
virtual int vfs_stop(void) { return -1; };
virtual int vfs_sync(void) { return -1; };
- /* Misc Functions */
+ // Misc Functions
virtual int vfs_unlink(const char *) { return -1; };
virtual int vfs_rename(const char *,const char *) { return -1; };
virtual ~vfs_abstract(void) { };
}; // vfs_FS
-#endif // !FSABSTRACT_H
+#endif*/ // !FSABSTRACT_H
diff --git a/sys/fs/ubixfsv2/main.cpp b/sys/fs/ubixfsv2/main.cpp
index 8bdff45..5c14a12 100644
--- a/sys/fs/ubixfsv2/main.cpp
+++ b/sys/fs/ubixfsv2/main.cpp
@@ -1,4 +1,5 @@
-#include
+/*
+ #include
#include
#include
#include "vfs.h"
@@ -63,3 +64,4 @@
cout << "sizeof(bTreeHeader): " << sizeof(struct bTreeHeader) << endl;
return 0;
}
+*/
diff --git a/sys/fs/ubixfsv2/ramdrive.cpp b/sys/fs/ubixfsv2/ramdrive.cpp
index 2ecc2d7..3a189bb 100644
--- a/sys/fs/ubixfsv2/ramdrive.cpp
+++ b/sys/fs/ubixfsv2/ramdrive.cpp
@@ -26,7 +26,7 @@
$Id: ramdrive.cpp 54 2016-01-11 01:29:55Z reddawg $
*****************************************************************************************/
-
+/*
#include
#include
#include
@@ -106,7 +106,7 @@
return(0x0);
} // dev_ramDestroy
-
+*/
/***
$Log: ramdrive.cpp,v $
Revision 1.1.1.1 2006/06/01 12:46:15 reddawg
diff --git a/sys/fs/ubixfsv2/ramdrive.h b/sys/fs/ubixfsv2/ramdrive.h
index 647969e..c7e9914 100644
--- a/sys/fs/ubixfsv2/ramdrive.h
+++ b/sys/fs/ubixfsv2/ramdrive.h
@@ -26,7 +26,7 @@
$Id: ramdrive.h 54 2016-01-11 01:29:55Z reddawg $
*****************************************************************************************/
-
+/*
#ifndef __RAMDRIVE_H_
#define __RAMDRIVE_H_
@@ -36,6 +36,7 @@
device_t *dev_ramDrive();
#endif
+*/
/***
$Log: ramdrive.h,v $
diff --git a/sys/fs/ubixfsv2/types.h b/sys/fs/ubixfsv2/types.h
index 0cad845..1bea2a5 100644
--- a/sys/fs/ubixfsv2/types.h
+++ b/sys/fs/ubixfsv2/types.h
@@ -1,3 +1,4 @@
+/*
#ifndef TYPES_H
#define TYPES_H
@@ -8,4 +9,4 @@
typedef unsigned long long uInt64;
typedef signed long long int64;
-#endif /* !TYPES_H */
+#endif *//* !TYPES_H */
diff --git a/sys/fs/ubixfsv2/ubixfs.cpp b/sys/fs/ubixfsv2/ubixfs.cpp
index f938ddb..55b7964 100644
--- a/sys/fs/ubixfsv2/ubixfs.cpp
+++ b/sys/fs/ubixfsv2/ubixfs.cpp
@@ -1,4 +1,4 @@
-#include
+/*#include
#include
#include
#include
@@ -106,7 +106,7 @@
ubixfsInode * rootInode = static_cast(root->inode);
assert(rootInode);
- /* the bTree constructor now loads in the header */
+ //the bTree constructor now loads in the header
rootInode->data.btPtr = new bTree(this, root);
rootInode->data.btPtr->Info();
@@ -209,7 +209,7 @@
dev->write(dev, §or, (batSect)+i, 1);
} // for i
- /* allocate part of the root dir */
+ // allocate part of the root dir
// sanity checks
assert(sb->blockSize);
@@ -225,7 +225,7 @@
bth->treeWidth = 0;
bth->treeLeafCount = 0;
- /* create the root dir inode here */
+ // create the root dir inode here
ubixfsInode * inode = new ubixfsInode;
assert(inode);
@@ -244,7 +244,7 @@
inode->parent.iAddr.start = 0;
inode->parent.iAddr.len = 0;
- /* this is part of the root dir structure (the bTreeHeader) */
+ // this is part of the root dir structure (the bTreeHeader)
inode->blocks.direct[0].AG = 0;
inode->blocks.direct[0].start = 1;
inode->blocks.direct[0].len = 1;
@@ -267,11 +267,11 @@
inode->inodeSize = sb->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;
@@ -342,9 +342,9 @@
while (size > 0) {
- /*
+ *//*
* place check here to see which set of blocks we're looking through
- */
+ *//*
// scan through direct blocks
do {
@@ -422,11 +422,11 @@
}
if (EORPos > maxRange) {
- /*
+ *//*
* The offset+size is greater than the size of the file, so we need to
* extend out the file. Scan through the direct blocks (FIX LATER)
* to find out where we need to extend
- */
+ *//*
switch (whichBlocks) {
case 0:
while (i < NUM_DIRECT_BLOCKS && inode->blocks.direct[i].len != 0) ++i;
@@ -440,18 +440,18 @@
assert(false); // sanity check
} // switch
- /*
+ *//*
* NOTE: it's possible that if we scan through to find where the
* run goes, we might be able to extend the previous block extent.
* This will require that we set up br.start to be where we'd like to
* start looking through the free block list, and then modifying
* getFreeBlock() to honour that.
- */
+ *//*
br.AG = inode->inodeNum.AG; // request a sane allocation group
br.start = 0; // getFreeBlock() will ignore this
- /*
+ *//*
* The length that we need is determined by how much extra slack we
* already have in the pre-allocated blocks.
* e.g. (assumes 4k blocks)
@@ -473,7 +473,7 @@
* ((3000 + 4000) - 4096 + (4095)) / 4096 == 1 (rounded down)
* And then we expand it by a little extra so we don't have to keep
* looking for more blocks. Currently we use 32k of slack (or 8 blocks)
- */
+ *//*
br.len = ((EORPos - maxRange + (bSize-1)) / bSize);
@@ -509,9 +509,8 @@
while (size > 0) {
- /*
- * place check here to see which set of blocks we're looking through
- */
+ / place check here to see which set of blocks we're looking through
+
// scan through direct blocks
do {
@@ -576,10 +575,10 @@
superBlock = NULL;
root = NULL;
- /*
+ *//*
* The device isn't null at this point, allowing for people to restart
* the mount point. Or, alternatively, to blow things up.
- */
+ *//*
return 0;
} // UbixFS::vfs_stop
@@ -628,22 +627,22 @@
if (ibr.len > superBlock->numBlocks) return obr;
if (ibr.len == 1) return getFreeBlock(ibr.AG);
- /*
+ *//*
* count is the block from the base of the list.
* Since we're given a specific AG to look through, we start the count at
* AG << AGShift, where AGShift is the shift value of the number of blocks
* in an AG
- */
+ *//*
count = (ibr.AG << superBlock->AGShift);
- /*
+ *//*
* The freeBlockList is a bit map of the free/used blocks.
* Used = on bit
* Unused = off bit
* There are 8 bits per byte (hopefully) and so we have to divide the count
* by 8 to get our starting byte offset to look from
- */
+ *//*
ptr = freeBlockList + (count >> 3);
@@ -706,22 +705,22 @@
// Are there any blocks available?
if (superBlock->numBlocks == superBlock->usedBlocks) return br;
- /*
+ *//*
* count is the block from the base of the list.
* Since we're given a specific AG to look through, we start the count at
* AG << AGShift, where AGShift is the shift value of the number of blocks
* in an AG
- */
+ *//*
count = (AG << superBlock->AGShift);
- /*
+ *//*
* The freeBlockList is a bit map of the free/used blocks.
* Used = on bit
* Unused = off bit
* There are 8 bits per byte (hopefully) and so we have to divide the count
* by 8 to get our starting byte offset to look from
- */
+ *//*
ptr = freeBlockList + (count >> 3);
@@ -767,11 +766,11 @@
} // UbixFS::getNextAG
-/*
+*//*
* UbixFS::getFreeBlock(void)
* upon success returns a free block based on the next AG after the lastUsedAG
* failure returns -1
- */
+ *//*
blockRun
UbixFS::getFreeBlock(void) {
@@ -795,12 +794,12 @@
// Are there any blocks available?
if (superBlock->usedBlocks+8 > superBlock->numBlocks) return br;
- /*
+ *//*
* count is the block from the base of the list.
* Since we're given a specific AG to look through, we start the count at
* AG << AGShift, where AGShift is the shift value of the number of blocks
* in an AG
- */
+ *//*
count = (AG << superBlock->AGShift);
@@ -842,11 +841,11 @@
inode->magic1 = UBIXFS_INODE_MAGIC;
- /*
+ *//*
* in retrospect.. I'm not sure why parent would be null.. only the
* root directory would have a null parent, but that's manually allocated
* in vfs_format()
- */
+ *//*
if (parent == NULL) {
inode->inodeNum = getFreeBlock();
@@ -874,11 +873,11 @@
// inode->type
- /*
+ *//*
* 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;
@@ -913,24 +912,24 @@
assert(path[nameStart] != '/'); // bad input: mkdir /a//
- /*
+ *//*
* we're guaranteed by the assert() above that there is
* at least one "/" before our location. If you remove the assert
* you might need to make sure nameStart stays above 0 in the following
* while
- */
+ *//*
while (path[nameStart] != '/') --nameStart;
++nameStart;
assert(len - nameStart > 0);
- /* e.g.
+ *//* e.g.
* v--------------------- start
* v------------------ end
* v------ nameStart
* /usr/local/data/dirname/ <--- ignores trailing /
* <---------23----------> len
- */
+ *//*
start = end = 1; // skip leading /
while (end < nameStart) {
@@ -949,13 +948,13 @@
strncpy(name, &path[nameStart], len - nameStart);
inode = (ubixfsInode *)mknod(name, dir, mode | INODE_DIRECTORY);
- /*
+ *//*
* keep in mind that the reason for passing in the name is because
* we thought about allowing key names to be different from inode
* names. In retrospect, I don't think that's a good idea since a dir
* listing will print the actual dir name instead of . and ..
* Thus: the first parameter of btPtr->Insert() may go away.
- */
+ *//*
assert(dir->data.btPtr->Insert(inode->name, inode));
@@ -987,3 +986,4 @@
delete [] freeBlockList;
return;
}
+*/
diff --git a/sys/fs/ubixfsv2/ubixfs.h b/sys/fs/ubixfsv2/ubixfs.h
index 595e6f4..15d40a2 100644
--- a/sys/fs/ubixfsv2/ubixfs.h
+++ b/sys/fs/ubixfsv2/ubixfs.h
@@ -1,4 +1,4 @@
-#ifndef UBIXFS_H
+/*#ifndef UBIXFS_H
#define UBIXFS_H
#include
@@ -25,11 +25,11 @@
#define UBIXFS_MAGIC3 0xC0C0C0C
#define UBIXFS_INODE_MAGIC 0x3bbe0ad9
-/* befs magic numbers
+*//* befs magic numbers
#define SUPER_BLOCK_MAGIC1 0x42465331 // BFS1
#define SUPER_BLOCK_MAGIC2 0xdd121031
#define SUPER_BLOCK_MAGIC3 0x15b6830e
- */
+ *//*
#define UBIXFS_CLEAN 0x434C454E // CLEN
#define UBIXFS_DIRTY 0x44495254 // DIRT
@@ -161,3 +161,4 @@
}; // UbixFS
#endif // !UBIXFS_H
+*/
diff --git a/sys/fs/ubixfsv2/vfs.cpp b/sys/fs/ubixfsv2/vfs.cpp
index daa28a7..1cf4a45 100644
--- a/sys/fs/ubixfsv2/vfs.cpp
+++ b/sys/fs/ubixfsv2/vfs.cpp
@@ -1,4 +1,4 @@
-#include
+/*#include
#include "vfs.h"
DiskFS::DiskFS(const char * filename) {
@@ -20,3 +20,4 @@
fread(data, size, 1, diskFile);
return 0;
} // DiskFS::read
+*/
diff --git a/sys/fs/ubixfsv2/vfs.h b/sys/fs/ubixfsv2/vfs.h
index 68548e9..dc78084 100644
--- a/sys/fs/ubixfsv2/vfs.h
+++ b/sys/fs/ubixfsv2/vfs.h
@@ -1,4 +1,4 @@
-#ifndef VFS_H
+/*#ifndef VFS_H
#define VFS_H
#include
@@ -23,3 +23,4 @@
}; // DiskFS
#endif // !VFS_H
+*/
diff --git a/sys/fs/ufs/ufs.c b/sys/fs/ufs/ufs.c
index 4bb26ab..e91b2cf 100644
--- a/sys/fs/ufs/ufs.c
+++ b/sys/fs/ufs/ufs.c
@@ -29,6 +29,7 @@
#include
#include
+#include
#include
#include
#include
@@ -48,9 +49,9 @@
(((x) % (fs)->fs_ipg) / (ipervblk) * DBPERVBLK))
#define INO_TO_VBO(ipervblk, x) ((x) % ipervblk)
-static int dskread(void *buf, u_int64_t block, size_t count, fileDescriptor *fd) {
- fd->mp->device->devInfo->read(fd->mp->device->devInfo->info, buf, block, count);
- return (0x0);
+static int dskread(void *buf, uint64_t block, size_t count, fileDescriptor *fd) {
+ fd->mp->device->devInfo->read(fd->mp->device->devInfo->info, buf, block, count);
+ return (0x0);
}
//struct dmadat {
@@ -74,216 +75,221 @@
#endif
static ssize_t fsread(ino_t inode, void *buf, size_t nbyte, fileDescriptor *fd) {
- #ifndef UFS2_ONLY
+#ifndef UFS2_ONLY
static struct ufs1_dinode dp1;
- #endif
- #ifndef UFS1_ONLY
+#endif
+#ifndef UFS1_ONLY
static struct ufs2_dinode dp2;
- #endif
- static ino_t inomap;
- char *blkbuf;
- void *indbuf;
- struct fs *fs;
- char *s;
- size_t n, nb, size, off, vboff;
- ufs_lbn_t lbn;
- ufs2_daddr_t addr, vbaddr;
- static ufs2_daddr_t blkmap, indmap;
- u_int u;
+#endif
+ static ino_t inomap;
+ char *blkbuf;
+ void *indbuf;
+ struct fs *fs;
+ char *s;
+ size_t n, nb, size, off, vboff;
+ ufs_lbn_t lbn;
+ ufs2_daddr_t addr, vbaddr;
+ static ufs2_daddr_t blkmap, indmap;
+ u_int u;
- blkbuf = fd->dmadat->blkbuf;
- indbuf = fd->dmadat->indbuf;
- fs = (struct fs *) fd->dmadat->sbbuf;
+ blkbuf = fd->dmadat->blkbuf;
+ indbuf = fd->dmadat->indbuf;
+ fs = (struct fs *) fd->dmadat->sbbuf;
- if (!fd->dsk_meta) {
- inomap = 0;
- for (n = 0; sblock_try[n] != -1; n++) {
- if (dskread(fs, sblock_try[n] / DEV_BSIZE, 16, fd))
- return -1;
- if ((
+ if (!fd->dsk_meta) {
+ inomap = 0;
+ for (n = 0; sblock_try[n] != -1; n++) {
+ if (dskread(fs, sblock_try[n] / DEV_BSIZE, 16, fd))
+ return -1;
+ if ((
#if defined(UFS1_ONLY)
- fs->fs_magic == FS_UFS1_MAGIC
+ fs->fs_magic == FS_UFS1_MAGIC
#elif defined(UFS2_ONLY)
(fs->fs_magic == FS_UFS2_MAGIC && fs->fs_sblockloc == sblock_try[n])
#else
fs->fs_magic == FS_UFS1_MAGIC || (fs->fs_magic == FS_UFS2_MAGIC && fs->fs_sblockloc == sblock_try[n])
#endif
) && fs->fs_bsize <= MAXBSIZE && fs->fs_bsize >= sizeof(struct fs))
- break;
+ break;
//MrOlsen 2017-12-14 this was for debugging kprintf("Finding SBlock: [%s][0x%X][%i - %i]\n", fs->fs_fsmnt, fs->fs_magic, sblock_try[n], sblock_try[n] / DEV_BSIZE);
- }
- if (sblock_try[n] == -1) {
- kprintf("Not ufs\n");
- return -1;
- }
- fd->dsk_meta++;
- }
+ }
+ if (sblock_try[n] == -1) {
+ kprintf("Not ufs\n");
+ return -1;
+ }
+ fd->dsk_meta++;
+ }
- if (!inode)
- return (0x0);
+ if (!inode)
+ return (0x0);
- if (inomap != inode) {
- n = IPERVBLK(fs);
- if (dskread(blkbuf, INO_TO_VBA(fs, n, inode), DBPERVBLK, fd))
- return -1;
- n = INO_TO_VBO(n, inode);
+ if (inomap != inode) {
+ n = IPERVBLK(fs);
+ if (dskread(blkbuf, INO_TO_VBA(fs, n, inode), DBPERVBLK, fd))
+ return -1;
+ n = INO_TO_VBO(n, inode);
#if defined(UFS1_ONLY)
- dp1 = ((struct ufs1_dinode *)blkbuf)[n];
+ dp1 = ((struct ufs1_dinode *)blkbuf)[n];
+ memcpy(fd->inode.ufs1, dp1, sizeof(struct ufs1_dinode));
#elif defined(UFS2_ONLY)
- dp2 = ((struct ufs2_dinode *)blkbuf)[n];
+ dp2 = ((struct ufs2_dinode *)blkbuf)[n];
+ memcpy(fd->inode.ufs2, dp2, sizeof(struct ufs2_dinode));
#else
- if (fs->fs_magic == FS_UFS1_MAGIC)
- dp1 = ((struct ufs1_dinode *) blkbuf)[n];
- else
- dp2 = ((struct ufs2_dinode *) blkbuf)[n];
+ if (fs->fs_magic == FS_UFS1_MAGIC) {
+ dp1 = ((struct ufs1_dinode *) blkbuf)[n];
+ memcpy(fd->inode.ufs1, dp1, sizeof(struct ufs1_dinode));
+ }
+ else{
+ dp2 = ((struct ufs2_dinode *) blkbuf)[n];
+ memcpy(fd->inode.ufs2, dp2, sizeof(struct ufs2_dinode));
+ }
#endif
- inomap = inode;
- fd->offset = 0;
- blkmap = indmap = 0;
- }
+ inomap = inode;
+ fd->offset = 0;
+ blkmap = indmap = 0;
+ }
- s = buf;
- size = DIP(di_size);
- fd->size = size;
- n = size - fd->offset;
- //Why?
- if (n < 0)
- return (0x0);
- if (nbyte > n)
- nbyte = n;
- nb = nbyte;
- while (nb) {
- lbn = lblkno(fs, fd->offset);
- off = blkoff(fs, fd->offset);
- if (lbn < NDADDR) {
- addr = DIP(di_db[lbn]);
- } else if (lbn < NDADDR + NINDIR(fs)) {
- n = INDIRPERVBLK(fs);
- addr = DIP(di_ib[0]);
- u = (u_int) (lbn - NDADDR) / (n * DBPERVBLK);
- vbaddr = fsbtodb(fs, addr) + u;
- if (indmap != vbaddr) {
- if (dskread(indbuf, vbaddr, DBPERVBLK, fd))
- return -1;
- indmap = vbaddr;
- }
- n = (lbn - NDADDR) & (n - 1);
+ s = buf;
+ size = DIP(di_size);
+ fd->size = size;
+ n = size - fd->offset;
+ //Why?
+ if (n < 0)
+ return (0x0);
+ if (nbyte > n)
+ nbyte = n;
+ nb = nbyte;
+ while (nb) {
+ lbn = lblkno(fs, fd->offset);
+ off = blkoff(fs, fd->offset);
+ if (lbn < NDADDR) {
+ addr = DIP(di_db[lbn]);
+ } else if (lbn < NDADDR + NINDIR(fs)) {
+ n = INDIRPERVBLK(fs);
+ addr = DIP(di_ib[0]);
+ u = (u_int) (lbn - NDADDR) / (n * DBPERVBLK);
+ vbaddr = fsbtodb(fs, addr) + u;
+ if (indmap != vbaddr) {
+ if (dskread(indbuf, vbaddr, DBPERVBLK, fd))
+ return -1;
+ indmap = vbaddr;
+ }
+ n = (lbn - NDADDR) & (n - 1);
#if defined(UFS1_ONLY)
- addr = ((ufs1_daddr_t *)indbuf)[n];
+ addr = ((ufs1_daddr_t *)indbuf)[n];
#elif defined(UFS2_ONLY)
- addr = ((ufs2_daddr_t *)indbuf)[n];
+ addr = ((ufs2_daddr_t *)indbuf)[n];
#else
- if (fs->fs_magic == FS_UFS1_MAGIC)
- addr = ((ufs1_daddr_t *) indbuf)[n];
- else
- addr = ((ufs2_daddr_t *) indbuf)[n];
+ if (fs->fs_magic == FS_UFS1_MAGIC)
+ addr = ((ufs1_daddr_t *) indbuf)[n];
+ else
+ addr = ((ufs2_daddr_t *) indbuf)[n];
#endif
- } else {
- return -1;
- }
- vbaddr = fsbtodb(fs, addr) + (off >> VBLKSHIFT) * DBPERVBLK;
- vboff = off & VBLKMASK;
- n = sblksize(fs, size, lbn) - (off & ~VBLKMASK);
- if (n > VBLKSIZE)
- n = VBLKSIZE;
- if (blkmap != vbaddr) {
- if (dskread(blkbuf, vbaddr, n >> DEV_BSHIFT, fd))
- return -1;
- blkmap = vbaddr;
- }
- n -= vboff;
- if (n > nb)
- n = nb;
- memcpy(s, blkbuf + vboff, n);
- s += n;
- fd->offset += n;
- nb -= n;
- }
- return nbyte;
+ } else {
+ return -1;
+ }
+ vbaddr = fsbtodb(fs, addr) + (off >> VBLKSHIFT) * DBPERVBLK;
+ vboff = off & VBLKMASK;
+ n = sblksize(fs, size, lbn) - (off & ~VBLKMASK);
+ if (n > VBLKSIZE)
+ n = VBLKSIZE;
+ if (blkmap != vbaddr) {
+ if (dskread(blkbuf, vbaddr, n >> DEV_BSHIFT, fd))
+ return -1;
+ blkmap = vbaddr;
+ }
+ n -= vboff;
+ if (n > nb)
+ n = nb;
+ memcpy(s, blkbuf + vboff, n);
+ s += n;
+ fd->offset += n;
+ nb -= n;
+ }
+ return nbyte;
}
static __inline int fsfind(const char *name, ino_t * ino, fileDescriptor *fd) {
- char buf[DEV_BSIZE];
- struct dirent *d;
- char *s;
- ssize_t n;
+ char buf[DEV_BSIZE];
+ struct dirent *d;
+ char *s;
+ ssize_t n;
- fd->offset = 0;
- while ((n = fsread(*ino, buf, DEV_BSIZE, fd)) > 0)
- for (s = buf; s < buf + DEV_BSIZE;) {
- d = (void *) s;
- if (!strcmp(name, d->d_name)) {
- *ino = d->d_fileno;
- return d->d_type;
- }
- s += d->d_reclen;
- }
- //if (n != -1 && ls)
- //kprintf("\n");
- return 0;
+ fd->offset = 0;
+ while ((n = fsread(*ino, buf, DEV_BSIZE, fd)) > 0)
+ for (s = buf; s < buf + DEV_BSIZE;) {
+ d = (void *) s;
+ if (!strcmp(name, d->d_name)) {
+ *ino = d->d_fileno;
+ return d->d_type;
+ }
+ s += d->d_reclen;
+ }
+
+ return 0;
}
static ino_t lookup(const char *path, fileDescriptor *fd) {
- char name[MAXNAMLEN + 1];
- const char *s;
- ino_t ino;
- ssize_t n;
- int dt;
+ char name[MAXNAMLEN + 1];
+ const char *s;
+ ino_t ino;
+ ssize_t n;
+ int dt;
- ino = ROOTINO;
- dt = DT_DIR;
- name[0] = '/';
- name[1] = '\0';
- for (;;) {
- if (*path == '/')
- path++;
- if (!*path)
- break;
- for (s = path; *s && *s != '/'; s++)
- ;
- if ((n = s - path) > MAXNAMLEN)
- return 0;
- //ls = *path == '?' && n == 1 && !*s;
- memcpy(name, path, n);
- name[n] = 0;
- if (dt != DT_DIR) {
- kprintf("%s: not a directory.\n", name);
- return (0);
- }
- if ((dt = fsfind(name, &ino, fd)) <= 0)
- break;
- path = s;
- }
+ ino = ROOTINO;
+ dt = DT_DIR;
+ name[0] = '/';
+ name[1] = '\0';
+ for (;;) {
+ if (*path == '/')
+ path++;
+ if (!*path)
+ break;
+ for (s = path; *s && *s != '/'; s++)
+ ;
+ if ((n = s - path) > MAXNAMLEN)
+ return 0;
+ //ls = *path == '?' && n == 1 && !*s;
+ memcpy(name, path, n);
+ name[n] = 0;
+ if (dt != DT_DIR) {
+ kprintf("%s: not a directory.\n", name);
+ return (0);
+ }
+ if ((dt = fsfind(name, &ino, fd)) <= 0)
+ break;
+ path = s;
+ }
- return dt == DT_REG ? ino : 0;
+ return dt == DT_REG ? ino : 0;
}
static int ufs_openFile(const char *file, fileDescriptor *fd) {
- char tmp[2];
- int ino = 0;
- fd->dmadat = (struct dmadat *) kmalloc(sizeof(struct dmadat));
- ino = lookup(file, fd);
- fd->offset = 0x0;
- fd->ino = ino;
- if (ino == 0x0) {
- return (-1);
- }
+ char tmp[2];
+ int ino = 0;
+ fd->dmadat = (struct dmadat *) kmalloc(sizeof(struct dmadat));
+ ino = lookup(file, fd);
+ fd->offset = 0x0;
+ fd->ino = ino;
+ if (ino == 0x0) {
+ return (-1);
+ }
- /* Quick Hack for file size */
- fsread(fd->ino, &tmp, 1, fd);
- fd->offset = 0;
- /* Return */
- fd->perms = 0x1;
- return (0x1);
+ /* Quick Hack for file size */
+ fsread(fd->ino, &tmp, 1, fd);
+ fd->offset = 0;
+ /* Return */
+ fd->perms = 0x1;
+ return (0x1);
}
int ufs_readFile(fileDescriptor *fd, char *data, uInt32 offset, long size) {
- return (fsread(fd->ino, data, size, fd));
+ return (fsread(fd->ino, data, size, fd));
}
int ufs_writeFile(fileDescriptor *fd, char *data, uInt32 offset, long size) {
- kprintf("Writing :)\n");
- return (0x0);
+ kprintf("Writing :)\n");
+ return (0x0);
}
/*****************************************************************************************
@@ -296,32 +302,32 @@
*****************************************************************************************/
int ufs_initialize(struct vfs_mountPoint *mp) {
- /* Return */
- return (0x1);
+ /* Return */
+ return (0x1);
}
int ufs_init() {
- /* Build our ufs struct */
- struct fileSystem ufs = { NULL, /* prev */
- NULL, /* next */
- (void *) ufs_initialize, /* vfsInitFS */
- (void *) ufs_readFile, /* vfsRead */
- (void *) ufs_writeFile, /* vfsWrite */
- (void *) ufs_openFile, /* vfsOpenFile */
- NULL, /* vfsUnlink */
- NULL, /* vfsMakeDir */
- NULL, /* vfsRemDir */
- NULL, /* vfsSync */
- 0xAA, /* vfsType */
- }; /* UFS */
+ /* Build our ufs struct */
+ struct fileSystem ufs = { NULL, /* prev */
+ NULL, /* next */
+ (void *) ufs_initialize, /* vfsInitFS */
+ (void *) ufs_readFile, /* vfsRead */
+ (void *) ufs_writeFile, /* vfsWrite */
+ (void *) ufs_openFile, /* vfsOpenFile */
+ NULL, /* vfsUnlink */
+ NULL, /* vfsMakeDir */
+ NULL, /* vfsRemDir */
+ NULL, /* vfsSync */
+ 0xAA, /* vfsType */
+ }; /* UFS */
- if (vfsRegisterFS(ufs) != 0x0) {
- kpanic("Unable To Enable UFS");
- return (0x1);
- }
- //dmadat = (struct dmadat *)kmalloc(sizeof(struct dmadat));
- /* Return */
- return (0x0);
+ if (vfsRegisterFS(ufs) != 0x0) {
+ kpanic("Unable To Enable UFS");
+ return (0x1);
+ }
+ //dmadat = (struct dmadat *)kmalloc(sizeof(struct dmadat));
+ /* Return */
+ return (0x0);
}
/***
diff --git a/sys/fs/vfs/stat.c b/sys/fs/vfs/stat.c
index 026c797..3403547 100644
--- a/sys/fs/vfs/stat.c
+++ b/sys/fs/vfs/stat.c
@@ -8,7 +8,7 @@
//NOTE: Should we verify that the memory is writable?
kprintf("SYS_STAT {%s}", path);
-
+/*
switch (flags) {
case STAT_LSTAT:
error = namei(path, NULL, STAT_NO_FOLLOW, &inode);
@@ -30,15 +30,27 @@
error = -1;
break;
}
+*/
+ fileDescriptor *fd = fopen(path, "r");
- sb->st_dev = 0x5E;
- sb->st_ino = 0x3003;
- sb->st_mode = 0x41FF;
- sb->st_nlink = 0x2;
- sb->st_uid = 0x0;
- sb->st_gid = 0x0;
- sb->st_rdev = 0x7FF3;
- sb->st_size = 0xFFFFEB70;
+ if (fd == 0) {
+ error -1;
+ }
+ else {
+ sb->st_dev = 0xDEADBEEF;
+ sb->st_ino = fd->ino;
+ sb->st_mode = fd->inode.ufs2->di_mode;
+ sb->st_nlink = fd->inode.ufs2->di_nlink;
+ sb->st_uid = fd->inode.ufs2->di_uid;
+ sb->st_gid = fd->inode.ufs2->di_gid;
+ sb->st_rdev = 0xBEEFDEAD;
+ sb->st_size = fd->inode.ufs2->di_size;
+ sb->st_atime = fd->inode.ufs2->di_atime;
+ sb->st_mtime = fd->inode.ufs2->di_mtime;
+ sb->st_ctime = fd->inode.ufs2->di_ctime;
+ kprintf("LSTAT(%i): st_ino 0x%X, st_mode: 0x%X, st_uid %i, st_gid %i, st_size: 0x%X", error, sb->st_ino, sb->st_mode, sb->st_uid, sb->st_gid, sb->st_size);
+ fclose(fd);
+ }
return(error);
}
diff --git a/sys/include/vfs/file.h b/sys/include/vfs/file.h
index 4d4df02..149ef73 100644
--- a/sys/include/vfs/file.h
+++ b/sys/include/vfs/file.h
@@ -53,26 +53,30 @@
struct fileDescriptorStruct *prev;
struct fileDescriptorStruct *next;
struct vfs_mountPoint *mp;
- uInt16 status;
- uInt16 mode;
- uInt32 offset;
- uInt32 size;
- uInt16 length;
- uInt32 start;
+ uint16_t status;
+ uint16_t mode;
+ uint32_t offset;
+ uint32_t size;
+ uint16_t length;
+ uint32_t start;
char fileName[512];
char *buffer;
- uInt32 ino;
+ uint32_t ino;
struct cacheNode *cacheNode;
- uInt32 perms;
+ uint32_t perms;
struct dmadat *dmadat;
int dsk_meta;
- uInt32 resid;
+ uint32_t resid;
+ union {
+ struct ufs1_dinode ufs1;
+ struct ufs2_dinode ufs2;
+ } inode;
} fileDescriptor;
typedef struct userFileDescriptorStruct {
struct fileDescriptorStruct *fd;
- uInt32 fdSize;
+ uint32_t fdSize;
} userFileDescriptor;
extern fileDescriptor *fdTable;