diff --git a/sys/fs/ufs/ufs.c b/sys/fs/ufs/ufs.c index e91b2cf..94f6bf9 100644 --- a/sys/fs/ufs/ufs.c +++ b/sys/fs/ufs/ufs.c @@ -137,11 +137,11 @@ #else if (fs->fs_magic == FS_UFS1_MAGIC) { dp1 = ((struct ufs1_dinode *) blkbuf)[n]; - memcpy(fd->inode.ufs1, dp1, sizeof(struct ufs1_dinode)); + memcpy(&fd->inode.u.ufs1_i, &dp1, sizeof(struct ufs1_dinode)); } else{ dp2 = ((struct ufs2_dinode *) blkbuf)[n]; - memcpy(fd->inode.ufs2, dp2, sizeof(struct ufs2_dinode)); + memcpy(&fd->inode.u.ufs2_i, &dp2, sizeof(struct ufs2_dinode)); } #endif inomap = inode; @@ -260,7 +260,7 @@ break; path = s; } - + return ino; return dt == DT_REG ? ino : 0; } diff --git a/sys/fs/vfs/file.c b/sys/fs/vfs/file.c index 70f454c..8a7a19c 100644 --- a/sys/fs/vfs/file.c +++ b/sys/fs/vfs/file.c @@ -26,8 +26,8 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include #include +#include #include #include #include diff --git a/sys/fs/vfs/namei.c b/sys/fs/vfs/namei.c index 15ed3c7..396fddf 100644 --- a/sys/fs/vfs/namei.c +++ b/sys/fs/vfs/namei.c @@ -29,6 +29,7 @@ #include #include #include +#include int follow_link(struct inode * dir, struct inode * inode, int flag, int mode, struct inode ** res_inode) { @@ -77,11 +78,11 @@ perm = permission(dir, MAY_EXEC); if (len == 2 && name[0] == '.' && name[1] == '.') { +#ifdef _IGNORE if (dir == _current->root) { *result = dir; return 0; } - else if ((sb = dir->i_sb) && (dir == sb->s_mounted)) { sb = dir->i_sb; iput(dir); @@ -90,6 +91,7 @@ return -ENOENT; dir->i_count++; } +#endif } if (!dir->i_op || !dir->i_op->lookup) { @@ -119,10 +121,12 @@ *res_inode = NULL; +#ifdef _IGNORE if (!base) { base = _current->pwd; base->i_count++; } +#endif if (!base) { kprintf("BASE == NULL"); @@ -130,7 +134,9 @@ if ((c = *pathname) == '/') { iput(base); +#ifdef _IGNORE base = _current->root; +#endif pathname++; base->i_count++; } diff --git a/sys/fs/vfs/stat.c b/sys/fs/vfs/stat.c index 61bec34..86e4755 100644 --- a/sys/fs/vfs/stat.c +++ b/sys/fs/vfs/stat.c @@ -27,8 +27,9 @@ */ #include +#include #include -#include +#include int sys_stat(char *path, struct stat *sb, int flags) { int error = 0; @@ -59,7 +60,8 @@ break; } */ - fileDescriptor *fd = fopen(path, "r"); + fileDescriptor *fd = fopen(path, "rb"); + kprintf("FD: 0x%X", fd); if (fd == 0) { error = -1; @@ -67,15 +69,15 @@ 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_mode = fd->inode.u.ufs2_i.di_mode; + sb->st_nlink = fd->inode.u.ufs2_i.di_nlink; + sb->st_uid = fd->inode.u.ufs2_i.di_uid; + sb->st_gid = fd->inode.u.ufs2_i.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; + sb->st_size = fd->inode.u.ufs2_i.di_size; + sb->st_atime = fd->inode.u.ufs2_i.di_atime; + sb->st_mtime = fd->inode.u.ufs2_i.di_mtime; + sb->st_ctime = fd->inode.u.ufs2_i.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); } diff --git a/sys/fs/vfs/vfs.c b/sys/fs/vfs/vfs.c index dcd50fd..a74963f 100644 --- a/sys/fs/vfs/vfs.c +++ b/sys/fs/vfs/vfs.c @@ -165,6 +165,42 @@ return (error); } +int sys_openat(struct thread *td, struct sys_openat_args *args) { + int error = 0x0; + int index = 0x0; + struct file *nfp = 0x0; + + error = falloc(td,&nfp,&index); + + if (error) + return(error); + + strcpy(nfp->path, args->path); + + nfp->fd = fopen(args->path,"r"); + + if (nfp->fd == 0x0) { + td->td_retval[0] = -1; + } + else { + for (index = 0; index < 256;index++) { + if (td->o_files[index] == 0x0) { + td->o_files[index] = nfp->fd; + td->td_retval[0] = index;//nfp->fd->ino;//MrOlsen 2018index; + break; + } + else { + td->td_retval[0] = -1;//nfp->fd->ino;//MrOlsen 2018index; + } + } + } + + kprintf("path: %s:%i ", args->path, index); + + return (error); + } + + /* HACK */ int fstatfs(struct thread *td, struct fstatfs_args *args) { int error = 0x0; diff --git a/sys/i386/systemtask.c b/sys/i386/systemtask.c index f563cdf..f8f111e 100644 --- a/sys/i386/systemtask.c +++ b/sys/i386/systemtask.c @@ -104,11 +104,19 @@ we free the pages for the process and then free the task */ tmpTask = sched_getDelTask(); +<<<<<<< HEAD if (tmpTask != 0x0) { if (tmpTask->imageFd != 0x0) fclose(tmpTask->imageFd); vmm_freeProcessPages(tmpTask->id); kfree(tmpTask); +======= + if ( tmpTask != 0x0 ) { + if ( tmpTask->files[0] != 0x0 ) + fclose( tmpTask->files[0] ); + vmm_freeProcessPages( tmpTask->id ); + kfree( tmpTask ); +>>>>>>> branch 'master' of http://Git.BrainChurts.com:8080/git/MrOlsen/UbixOS.git } videoBuffer[0] = systemVitals->sysTicks; sched_yield(); diff --git a/sys/include/sys/sysproto.h b/sys/include/sys/sysproto.h index 0f75759..42df622 100644 --- a/sys/include/sys/sysproto.h +++ b/sys/include/sys/sysproto.h @@ -466,6 +466,14 @@ char nbyte_r_[PADR_(size_t)]; }; +struct sys_openat_args { + char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)]; + char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)]; + char flag_l_[PADL_(int)]; int flag; char flag_r_[PADR_(int)]; + char mode_l_[PADL_(__mode_t)]; __mode_t mode; char mode_r_[PADR_(__mode_t)]; +}; + + //Func Defs int sys_invalid(struct thread *, void *); int sys_exit(struct thread *, struct sys_exit_args *); @@ -505,6 +513,7 @@ int mprotect(struct thread *td, struct mprotect_args *uap); int sys_lstat(struct thread *td, struct sys_lstat_args *); +int sys_openat(struct thread *td, struct sys_openat_args *); #endif diff --git a/sys/include/ubixos/sched.h b/sys/include/ubixos/sched.h index 7ad269c..f9d7a2d 100644 --- a/sys/include/ubixos/sched.h +++ b/sys/include/ubixos/sched.h @@ -30,12 +30,11 @@ #define _UBIXOS_SCHED_H #include -#include +#include #include #include #include -#include #define NO_GROUP -1 #define NR_GROUPS 32 diff --git a/sys/include/ubixos/wait.h b/sys/include/ubixos/wait.h index 277cbb9..6b00444 100644 --- a/sys/include/ubixos/wait.h +++ b/sys/include/ubixos/wait.h @@ -29,7 +29,8 @@ #ifndef _UBIXOS_WAIT_H #define _UBIXOS_WAIT_H -#include + +struct kTask_t; struct wait_queue { struct kTask_t *task; diff --git a/sys/include/ufs/ufs.h b/sys/include/ufs/ufs.h index e17c93c..8667d28 100644 --- a/sys/include/ufs/ufs.h +++ b/sys/include/ufs/ufs.h @@ -31,7 +31,6 @@ #define _UFS_H #include -#include #include #define DT_REG 8 diff --git a/sys/include/vfs/file.h b/sys/include/vfs/file.h index 55a7a7d..a19db24 100644 --- a/sys/include/vfs/file.h +++ b/sys/include/vfs/file.h @@ -33,7 +33,9 @@ #include #include +#include #include +#include /* HACK */ int getchar(); @@ -46,6 +48,8 @@ #define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */ #define DEV_BSIZE (1< +#include + +#include +#include +#include + +struct inode { + __dev_t i_dev; + unsigned long i_ino; + __mode_t i_mode; + __nlink_t i_nlink; + uid_t i_uid; + gid_t i_gid; + __dev_t i_rdev; + off_t i_size; + time_t i_atime; + time_t i_mtime; + time_t i_ctime; + unsigned long i_blksize; + unsigned long i_blocks; + struct semaphore i_sem; + struct inode_operations * i_op; + struct super_block * i_sb; + struct wait_queue * i_wait; + struct file_lock * i_flock; + struct vm_area_struct * i_mmap; + struct inode * i_next, *i_prev; + struct inode * i_hash_next, *i_hash_prev; + struct inode * i_bound_to, *i_bound_by; + struct inode * i_mount; + struct socket * i_socket; + unsigned short i_count; + unsigned short i_flags; + unsigned char i_lock; + unsigned char i_dirt; + unsigned char i_pipe; + unsigned char i_seek; + unsigned char i_update; + union { + struct pipe_inode_info pipe_i; + struct msdos_inode_info msdos_i; + struct ufs1_dinode ufs1_i; + struct ufs2_dinode ufs2_i; + } u; +}; + + +#endif diff --git a/sys/include/vfs/vfs.h b/sys/include/vfs/vfs.h index a375976..9926d31 100644 --- a/sys/include/vfs/vfs.h +++ b/sys/include/vfs/vfs.h @@ -40,8 +40,6 @@ #define MAY_WRITE 2 #define MAY_READ 4 -#define MAX_OFILES 256 - #define maxFd 32 #define fdAvail 1 #define fdOpen 2 @@ -95,10 +93,6 @@ int vfsRegisterFS(struct fileSystem); struct fileSystem *vfs_findFS(int); -#include -#include -#include - struct super_operations { void (*read_inode)(struct inode *); int (*notify_change)(int flags, struct inode *); @@ -126,48 +120,10 @@ struct wait_queue * s_wait; union { struct msdos_sb_info msdos_sb; +/* struct fs ufs1_sb; struct fs ufs2_sb; - } u; -}; - -struct inode { - __dev_t i_dev; - unsigned long i_ino; - __mode_t i_mode; - __nlink_t i_nlink; - uid_t i_uid; - gid_t i_gid; - __dev_t i_rdev; - off_t i_size; - time_t i_atime; - time_t i_mtime; - time_t i_ctime; - unsigned long i_blksize; - unsigned long i_blocks; - struct semaphore i_sem; - struct inode_operations * i_op; - struct super_block * i_sb; - struct wait_queue * i_wait; - struct file_lock * i_flock; - struct vm_area_struct * i_mmap; - struct inode * i_next, *i_prev; - struct inode * i_hash_next, *i_hash_prev; - struct inode * i_bound_to, *i_bound_by; - struct inode * i_mount; - struct socket * i_socket; - unsigned short i_count; - unsigned short i_flags; - unsigned char i_lock; - unsigned char i_dirt; - unsigned char i_pipe; - unsigned char i_seek; - unsigned char i_update; - union { - struct pipe_inode_info pipe_i; - struct msdos_inode_info msdos_i; - struct ufs1_dinode ufs1_i; - struct ufs2_dinode ufs2_i; +*/ } u; }; diff --git a/sys/kernel/access.c b/sys/kernel/access.c index ab9eda6..0f60ee6 100644 --- a/sys/kernel/access.c +++ b/sys/kernel/access.c @@ -80,6 +80,7 @@ if (grp == _current->egid) return 1; +<<<<<<< HEAD for (i = 0; i < NGROUPS; i++) { if (_current->groups[i] == NOGROUP) break; @@ -87,4 +88,13 @@ return 1; } return 0; +======= + for (i = 0; i < NR_GROUPS; i++) { + if (_current->groups[i] == NO_GROUP) + break; + if (_current->groups[i] == grp) + return 1; + } + return 0; +>>>>>>> branch 'master' of http://Git.BrainChurts.com:8080/git/MrOlsen/UbixOS.git } diff --git a/sys/kernel/kern_sysctl.c b/sys/kernel/kern_sysctl.c index 5c010e8..58e7d2e 100644 --- a/sys/kernel/kern_sysctl.c +++ b/sys/kernel/kern_sysctl.c @@ -190,10 +190,19 @@ endTask(_current->id); } +<<<<<<< HEAD if ((uint32_t) uap->oldlenp < tmpCtl->val_len) memcpy(uap->old, tmpCtl->value, (uInt32) uap->oldlenp); +======= + if ( (uint32_t) uap->oldlenp < tmpCtl->val_len ) + memcpy( uap->oldp, tmpCtl->value, (uInt32) uap->oldlenp ); +>>>>>>> branch 'master' of http://Git.BrainChurts.com:8080/git/MrOlsen/UbixOS.git else +<<<<<<< HEAD memcpy(uap->old, tmpCtl->value, tmpCtl->val_len); +======= + memcpy( uap->oldp, tmpCtl->value, tmpCtl->val_len ); +>>>>>>> branch 'master' of http://Git.BrainChurts.com:8080/git/MrOlsen/UbixOS.git td->td_retval[0] = 0x0; diff --git a/sys/kernel/syscalls.c b/sys/kernel/syscalls.c index 9286f8e..086a157 100644 --- a/sys/kernel/syscalls.c +++ b/sys/kernel/syscalls.c @@ -220,7 +220,7 @@ { 0, "No Call", sys_invalid, SYSCALL_VALID }, /* 186 - Invalid */ { 0, "No Call", sys_invalid, SYSCALL_VALID }, /* 187 - Invalid */ { 0, "No Call", sys_invalid, SYSCALL_VALID }, /* 188 - Invalid */ - { 0, "No Call", sys_invalid, SYSCALL_VALID }, /* 189 - Invalid */ + { ARG_COUNT(sys_lstat_args), "LSTAT", (sys_call_t *) sys_lstat, SYSCALL_VALID }, /* 189 - sys_fstat */ { ARG_COUNT(sys_lstat_args), "LSTAT", (sys_call_t *) sys_lstat, SYSCALL_VALID }, /* 190 - sys_lstat */ { 0, "No Call", sys_invalid, SYSCALL_VALID }, /* 191 - Invalid */ { 0, "No Call", sys_invalid, SYSCALL_VALID }, /* 192 - Invalid */ @@ -530,7 +530,7 @@ { 0, "No Call", sys_invalid, SYSCALL_VALID }, /* 356 - Invalid */ { 0, "No Call", sys_invalid, SYSCALL_VALID }, /* 357 - Invalid */ { 0, "No Call", sys_invalid, SYSCALL_VALID }, /* 358 - Invalid */ - { 0, "No Call", sys_invalid, SYSCALL_VALID }, /* 359 - Invalid */ + { ARG_COUNT(sys_openat_args), "SYS_openat", sys_openat, SYSCALL_VALID }, /* 499 - sys_openat */ { 0, "No Call", sys_invalid, SYSCALL_VALID }, /* 350 - Invalid */ { 0, "No Call", sys_invalid, SYSCALL_VALID }, /* 351 - Invalid */ { 0, "No Call", sys_invalid, SYSCALL_VALID }, /* 352 - Invalid */ diff --git a/sys/vmm/getfreevirtualpage.c b/sys/vmm/getfreevirtualpage.c index e20a802..1182aa0 100644 --- a/sys/vmm/getfreevirtualpage.c +++ b/sys/vmm/getfreevirtualpage.c @@ -59,12 +59,20 @@ if (_current->oInfo.vmStart <= 0x100000) kpanic("Invalid vmStart\n"); + kprintf("type: %i ", type); + type = 0; + /* Get Our Starting Address */ if (type == VM_THRD) { start_page = (uint32_t) (_current->td.vm_daddr + ctob(_current->td.vm_dsize)); } +<<<<<<< HEAD else if (type == VM_TASK) { //kprintf("vmStart"); +======= + else if ( type == VM_TASK ) { + kprintf("vmStart"); +>>>>>>> branch 'master' of http://Git.BrainChurts.com:8080/git/MrOlsen/UbixOS.git start_page = _current->oInfo.vmStart; } else @@ -81,8 +89,13 @@ /* * Lets Start Allocating Pages */ +<<<<<<< HEAD for (counter = 0; counter < count; counter++) { +======= + kprintf("Count: %i ", count); + for ( counter = 0; counter < count; counter++ ) { +>>>>>>> branch 'master' of http://Git.BrainChurts.com:8080/git/MrOlsen/UbixOS.git /* Locate Initial Page Table */ pdI = ((start_page + (counter * 0x1000)) / 0x400000); diff --git a/sys/vmm/vmm_mmap.c b/sys/vmm/vmm_mmap.c index f42b57a..eba19eb 100644 --- a/sys/vmm/vmm_mmap.c +++ b/sys/vmm/vmm_mmap.c @@ -172,13 +172,13 @@ return (0x0); //vmm_getFreeVirtualPage(_current->id, round_page( uap->len ) / 0x1000, VM_THRD)); } else { - kprintf("uap->flags: [0x%X]\n", uap->flags); + //kprintf("uap->flags: [0x%X]\n", uap->flags); kprintf("uap->addr: [0x%X]\n", uap->addr); kprintf("uap->len: [0x%X]\n", uap->len); - kprintf("uap->prot: [0x%X]\n", uap->prot); + //kprintf("uap->prot: [0x%X]\n", uap->prot); kprintf("uap->fd: [%i]\n", uap->fd); - kprintf("uap->pad: [0x%X]\n", uap->pad); - kprintf("uap->pos: [0x%X]\n", uap->pos); + //kprintf("uap->pad: [0x%X]\n", uap->pad); + //kprintf("uap->pos: [0x%X]\n", uap->pos); //K_PANIC("NOT YET\n"); getfd(td, &fd, uap->fd); tmp = (char *) vmm_getFreeVirtualPage(_current->id, round_page(uap->len) / 0x1000, VM_TASK);