diff --git a/src/sys/devfs/devfs.c b/src/sys/devfs/devfs.c index c1924f3..a8dc91e 100644 --- a/src/sys/devfs/devfs.c +++ b/src/sys/devfs/devfs.c @@ -69,14 +69,15 @@ This format will be changing down the road */ static int devfs_open(char *file,struct file *fd) { - struct devfs_info *fsInfo = fd->mp->fsInfo; - struct devfs_devices *tmpDev = 0x0; - struct device_node *device = 0x0; + struct devfs_info *fsInfo = fd->mp->fsInfo; + struct devfs_devices *tmpDev = 0x0; + struct device_node *device = 0x0; + struct devfs_obj *devfsObj = 0x0; spinLock(&devfsSpinLock); if (strcmp(file,"/") == 0x0) { - fd->fd->start = -1; + devfsObj->start = -1; fd->size = devfs_len; spinUnlock(&devfsSpinLock); return(0x1); @@ -88,8 +89,10 @@ switch ((fd->mode & 0x3)) { case 0: case 1: + devfsObj = (struct devfs_obj *)kmalloc(sizeof(struct devfs_obj)); + fd->fsObj = devfsObj; device = device_find(tmpDev->devMajor,tmpDev->devMinor); - (void *)fd->fd->start = tmpDev; + (void *)devfsObj->start = tmpDev; fd->size = device->devInfo->size; break; default: @@ -115,8 +118,11 @@ int i = 0x0,x = 0x0; uInt32 sectors = 0x0; uInt16 diff = 0x0; - struct device_node *device = 0x0; - struct devfs_devices *tmpDev = (void *)fd->fd->start; + struct device_node *device = 0x0; + struct devfs_obj *devfsObj = fd->fsObj; + struct devfs_devices *tmpDev = 0x0; + + tmpDev = (void *)devfsObj->start; if (tmpDev == -1) { kprintf("Hi Ubie [%i]!!!\n", size); @@ -160,7 +166,9 @@ static int devfs_write(struct file *fd,char *data,long offset,long size) { int i = 0x0,x = 0x0; struct device_node *device = 0x0; - struct devfs_devices *tmpDev = (void *)fd->fd->start; + struct devfs_devices *tmpDev = 0x0; + struct devfs_obj *devfsObj = fd->fsObj; + tmpDev = (void *)devfsObj->start; device = device_find(tmpDev->devMajor,tmpDev->devMinor); for (i=0x0;i<((size+511)/512);i++) { diff --git a/src/sys/include/devfs/devfs.h b/src/sys/include/devfs/devfs.h index 6cb028a..d2bb4f1 100644 --- a/src/sys/include/devfs/devfs.h +++ b/src/sys/include/devfs/devfs.h @@ -46,6 +46,11 @@ struct devfs_devices *deviceList; }; +struct devfs_obj { + uInt16 length; + uInt32 start; + }; + int devfs_init(); int devfs_makeNode(char *name,uInt8 type,uInt16 major,uInt16 minor); /* @@ -59,6 +64,9 @@ /*** $Log$ + Revision 1.1.1.1 2007/01/17 03:31:52 reddawg + UbixOS + Revision 1.1.1.1 2006/06/01 12:46:13 reddawg ubix2 diff --git a/src/sys/include/sys/kern_descrip.h b/src/sys/include/sys/kern_descrip.h index 260de8b..243c902 100644 --- a/src/sys/include/sys/kern_descrip.h +++ b/src/sys/include/sys/kern_descrip.h @@ -100,7 +100,6 @@ int f_flag; char *buffer; char path[1024]; - fileDescriptor *fd; void *fsObj; }; diff --git a/src/sys/include/ufs/ufs.h b/src/sys/include/ufs/ufs.h index 6b3d6a5..4a409f2 100644 --- a/src/sys/include/ufs/ufs.h +++ b/src/sys/include/ufs/ufs.h @@ -290,6 +290,13 @@ int32_t fs_magic; /* magic number */ }; +struct ufs_obj { + u_int32_t ino; + struct cacheNode *cacheNode; + struct dmadat *dmadat; + int dsk_meta; + u_int32_t resid; + }; int ufs_init(); int ufs_initialize(); diff --git a/src/sys/ufs/ffs.c b/src/sys/ufs/ffs.c index cf4395a..9f6aec0 100644 --- a/src/sys/ufs/ffs.c +++ b/src/sys/ufs/ffs.c @@ -11,8 +11,9 @@ int ffs_read(struct file *fd,char *data,uInt32 offset,long size) { struct fs *fs; + struct ufs_obj *ufsObj = fd->fsObj; - fs = (struct fs *)fd->fd->dmadat->sbbuf; + fs = (struct fs *)ufsObj->dmadat->sbbuf; if (offset < fd->size && offset >= fs->fs_maxfilesize) { //return (EOVERFLOW); diff --git a/src/sys/ufs/ufs.c b/src/sys/ufs/ufs.c index 6dca4e3..a2c8f95 100644 --- a/src/sys/ufs/ufs.c +++ b/src/sys/ufs/ufs.c @@ -92,17 +92,17 @@ ufs2_daddr_t addr, vbaddr; static ufs2_daddr_t blkmap, indmap; u_int u; + struct ufs_obj *ufsObj = fd->fsObj; - - blkbuf = fd->fd->dmadat->blkbuf; - indbuf = fd->fd->dmadat->indbuf; - fs = (struct fs *)fd->fd->dmadat->sbbuf; + blkbuf = ufsObj->dmadat->blkbuf; + indbuf = ufsObj->dmadat->indbuf; + fs = (struct fs *)ufsObj->dmadat->sbbuf; #ifdef DEBUG kprintf("fsread!\n"); #endif - if (!fd->fd->dsk_meta) { + if (!ufsObj->dsk_meta) { inomap = 0; for (n = 0; sblock_try[n] != -1; n++) { if (dskread(fs, sblock_try[n] / DEV_BSIZE, 16,fd)) @@ -127,7 +127,7 @@ kprintf("Not ufs\n"); return -1; } - fd->fd->dsk_meta++; + ufsObj->dsk_meta++; } if (!inode) { @@ -287,16 +287,21 @@ static int ufs_openFile(const char *file,struct file *fd) { char tmp[2]; int ino = 0; - fd->fd->dmadat = (struct dmadat *)kmalloc(sizeof(struct dmadat)); + struct ufs_obj *ufsObj = 0x0; + + ufsObj = (struct ufs_obj *)kmalloc(sizeof(struct ufs_obj)); + fd->fsObj = ufsObj; + + ufsObj->dmadat = (struct dmadat *)kmalloc(sizeof(struct dmadat)); ino = lookup(file,fd); fd->offset = 0x0; - fd->fd->ino = ino; + ufsObj->ino = ino; if (ino == 0x0) { return(-1); } /* Quick Hack for file size */ - fsread(fd->fd->ino,&tmp,1,fd); + fsread(ufsObj->ino,&tmp,1,fd); fd->offset = 0; /* Return */ fd->perms = 0x1; @@ -304,7 +309,8 @@ } int ufs_readFile(struct file *fd,char *data,uInt32 offset,long size) { - return(fsread(fd->fd->ino,data,size,fd)); + struct ufs_obj *ufsObj = fd->fsObj; + return(fsread(ufsObj->ino,data,size,fd)); } int ufs_writeFile(fileDescriptor *fd, char *data,uInt32 offset,long size) { diff --git a/src/sys/vfs/file.c b/src/sys/vfs/file.c index 7d32e04..b39831a 100644 --- a/src/sys/vfs/file.c +++ b/src/sys/vfs/file.c @@ -287,7 +287,7 @@ return(NULL); } - tmpFd->fd = (struct fileDescriptorStruct *)kmalloc(sizeof(struct fileDescriptorStruct)); + //tmpFd->fd = (struct fileDescriptorStruct *)kmalloc(sizeof(struct fileDescriptorStruct)); strcpy(fileName,file); diff --git a/src/sys/vfs/vfs_syscalls.c b/src/sys/vfs/vfs_syscalls.c index 9672a02..5abeef3 100644 --- a/src/sys/vfs/vfs_syscalls.c +++ b/src/sys/vfs/vfs_syscalls.c @@ -204,9 +204,9 @@ kprintf("BAD!\n"); while (1); } - + //BUG make fopen return 0 or -1 if error; fopen(nfp,uap->path,"r"); - if (nfp->fd == 0x0) + if (nfp == 0x0) td->td_retval[0] = -1; else td->td_retval[0] = index;