diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
index eb0ba32..fbcecf6 100644
--- a/.settings/language.settings.xml
+++ b/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/src/sys/fs/ufs/ufs.c b/src/sys/fs/ufs/ufs.c
index 7903538..7b2c29b 100644
--- a/src/sys/fs/ufs/ufs.c
+++ b/src/sys/fs/ufs/ufs.c
@@ -25,8 +25,9 @@
$Id: ufs.c 102 2016-01-12 03:59:34Z reddawg $
-*****************************************************************************************/
+ *****************************************************************************************/
+#include
#include
#include
#include
@@ -35,23 +36,22 @@
#include
#include
-#define VBLKSHIFT 12
-#define VBLKSIZE (1 << VBLKSHIFT)
-#define VBLKMASK (VBLKSIZE - 1)
-#define DBPERVBLK (VBLKSIZE / DEV_BSIZE)
+#define VBLKSHIFT 12
+#define VBLKSIZE (1 << VBLKSHIFT)
+#define VBLKMASK (VBLKSIZE - 1)
+#define DBPERVBLK (VBLKSIZE / DEV_BSIZE)
#define INDIRPERVBLK(fs) (NINDIR(fs) / ((fs)->fs_bsize >> VBLKSHIFT))
-#define IPERVBLK(fs) (INOPB(fs) / ((fs)->fs_bsize >> VBLKSHIFT))
-#define INOPB(fs) ((fs)->fs_inopb)
+#define IPERVBLK(fs) (INOPB(fs) / ((fs)->fs_bsize >> VBLKSHIFT))
+#define INOPB(fs) ((fs)->fs_inopb)
#define INO_TO_VBA(fs, ipervblk, x) \
(fsbtodb(fs, cgimin(fs, ino_to_cg(fs, x))) + \
(((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, u_int64_t block, size_t count, fileDescriptor *fd) {
+ fd->mp->device->devInfo->read(fd->mp->device->devInfo->info, buf, block, count);
+ return (0x0);
+}
//struct dmadat {
// char blkbuf[VBLKSIZE]; /* filesystem blocks */
@@ -73,269 +73,256 @@
#define DIP(field) fs->fs_magic == FS_UFS1_MAGIC ? dp1.field : dp2.field
#endif
+static ssize_t fsread(ino_t inode, void *buf, size_t nbyte, fileDescriptor *fd) {
+ #ifndef UFS2_ONLY
+ static struct ufs1_dinode dp1;
+ #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;
-static ssize_t fsread(ino_t inode, void *buf, size_t nbyte,fileDescriptor *fd) {
-#ifndef UFS2_ONLY
- static struct ufs1_dinode dp1;
-#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;
+ 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])
+ (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])
+ 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;
-kprintf("Finding SuperBlock: [%i - %i]\n",sblock_try[n], sblock_try[n] / DEV_BSIZE);
- }
- if (sblock_try[n] == -1) {
- kprintf("Not ufs\n");
- return -1;
- }
- fd->dsk_meta++;
- }
+ ) && fs->fs_bsize <= MAXBSIZE && fs->fs_bsize >= sizeof(struct fs))
+ break;
+ kprintf("Finding SuperBlock: [0x%X][%i - %i]\n", 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 (!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];
#elif defined(UFS2_ONLY)
- dp2 = ((struct ufs2_dinode *)blkbuf)[n];
+ dp2 = ((struct ufs2_dinode *)blkbuf)[n];
#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];
+ else
+ dp2 = ((struct ufs2_dinode *) blkbuf)[n];
#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;
+ 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;
+}
+static ino_t lookup(const char *path, fileDescriptor *fd) {
+ char name[MAXNAMLEN + 1];
+ const char *s;
+ ino_t ino;
+ ssize_t n;
+ int dt;
-static __inline int fsfind(const char *name, ino_t * ino,fileDescriptor *fd) {
- char buf[DEV_BSIZE];
- struct dirent *d;
- char *s;
- ssize_t n;
+ 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;
+ }
- 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;
- }
-
-
-static ino_t lookup(const char *path,fileDescriptor *fd) {
- 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;
- }
-
-
- 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));
- }
+int ufs_readFile(fileDescriptor *fd, char *data, uInt32 offset, long size) {
+ return (fsread(fd->ino, data, size, fd));
+}
-int ufs_writeFile(fileDescriptor *fd, char *data,uInt32 offset,long size) {
- kprintf("Writing :)\n");
- return(0x0);
- }
+int ufs_writeFile(fileDescriptor *fd, char *data, uInt32 offset, long size) {
+ kprintf("Writing :)\n");
+ return (0x0);
+}
/*****************************************************************************************
-Function: int ufs_initialize()
+ Function: int ufs_initialize()
-Description: This will initialize a mount point it loads the BAT and Caches the rootDir
+ Description: This will initialize a mount point it loads the BAT and Caches the rootDir
-Notes:
+ Notes:
-*****************************************************************************************/
+ *****************************************************************************************/
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);
+}
/***
END