diff options
| author | Michal Idziorek <m.i@gmx.at> | 2014-11-23 23:26:26 +0100 |
|---|---|---|
| committer | Michal Idziorek <m.i@gmx.at> | 2014-11-23 23:26:26 +0100 |
| commit | ec0ba7bc40854eab6a1cdb41364f41f9c11407e1 (patch) | |
| tree | 88f3896c70ac32bc1b70dcd7ebddbbe595c6608f /kernel/syscalls.c | |
| parent | 50300fa573bf2bc00f9732e812d54ab77cf03dd7 (diff) | |
foolshell and syscalls improvememets
Diffstat (limited to 'kernel/syscalls.c')
| -rw-r--r-- | kernel/syscalls.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/kernel/syscalls.c b/kernel/syscalls.c index 401a5aa..e4cb6cc 100644 --- a/kernel/syscalls.c +++ b/kernel/syscalls.c @@ -158,9 +158,12 @@ int syscall_readdir(const char *name,fs_dirent *dirs,int max) int syscall_execve(char *name, char **argv, char **env) { #ifdef LOG_SYSCALLS - log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"execve (name=0x%08X, argvs=0x%08X, env=0x%08X)", name,argv,env); + log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"execve (name=0x%08X(%s), argvs=0x%08X, env=0x%08X)", name,name,argv,env); #endif + int inode_nr=ext2_filename_to_inode(EXT2_RAM_ADDRESS,name); + if(inode_nr<1)return -1; + char arg1[100]; char arg2[100]; @@ -173,15 +176,15 @@ int syscall_execve(char *name, char **argv, char **env) if(argv!=NULL) { - while(argv[argc+1]!=NULL) + while(argv[argc]!=NULL) { //log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"arg at 0x%08X: %s", argv[argc],argv[argc]); int i=-1; do{ i++; - argvcopy[argc][i]=argv[argc+1][i]; - }while(argv[argc+1][i]!=0); + argvcopy[argc][i]=argv[argc][i]; + }while(argv[argc][i]!=0); argc++; } @@ -193,7 +196,7 @@ int syscall_execve(char *name, char **argv, char **env) //load binary ext2_check(EXT2_RAM_ADDRESS); - ext2_inode_content(EXT2_RAM_ADDRESS,name,0x800000,0x100000); + ext2_inode_content(EXT2_RAM_ADDRESS,inode_nr,0x800000,0x100000); Elf32_Ehdr *elf; elf=0x800000; @@ -276,6 +279,7 @@ int syscall_execve(char *name, char **argv, char **env) } // argv / argc + //asm("mov $0xf00000,%esp"); // set stack pointer asm("push %0" :: "r" (argvcopy)); asm("push %0" :: "r" (argc)); @@ -345,7 +349,7 @@ int syscall_exit(int ret, int none1, int none2) #endif static char *argv[]={"shell","--silent",NULL}; - syscall_execve(15,argv,0); // start shell + syscall_execve("/bin/foolshell",argv,0); // start shell } |
