case SYS_WRITE:
#if BITS < 64
- VFS_Write( Regs->Arg1, Regs->Arg2|((Uint64)Regs->Arg3<<32), (void*)Regs->Arg4 );
+ ret = VFS_Write( Regs->Arg1, Regs->Arg2|((Uint64)Regs->Arg3<<32), (void*)Regs->Arg4 );
#else
- VFS_Write( Regs->Arg1, Regs->Arg2, (void*)Regs->Arg3 );
+ ret = VFS_Write( Regs->Arg1, Regs->Arg2, (void*)Regs->Arg3 );
#endif
break;
case SYS_READ:
#if BITS < 64
- VFS_Read( Regs->Arg1, Regs->Arg2|((Uint64)Regs->Arg3<<32), (void*)Regs->Arg4 );
+ ret = VFS_Read( Regs->Arg1, Regs->Arg2|((Uint64)Regs->Arg3<<32), (void*)Regs->Arg4 );
#else
- VFS_Read( Regs->Arg1, Regs->Arg2, (void*)Regs->Arg3 );
+ ret = VFS_Read( Regs->Arg1, Regs->Arg2, (void*)Regs->Arg3 );
#endif
break;
// ==== PROTOTYPES ====\r
char *ReadCommandLine(int *Length);\r
void Parse_Args(char *str, char **dest);\r
+void CallCommand(char **Args);\r
void Command_Colour(int argc, char **argv);\r
void Command_Clear(int argc, char **argv);\r
void Command_Cd(int argc, char **argv);\r
#define BUILTIN_COUNT (sizeof(cBUILTINS)/sizeof(cBUILTINS[0]))\r
\r
// ==== LOCAL VARIABLES ====\r
+char **gasEnvironment;\r
char gsCommandBuffer[1024];\r
char *gsCurrentDirectory = NULL;\r
char gsTmpBuffer[1024];\r
char *sCommandStr;\r
char *saArgs[32];\r
int length = 0;\r
- int pid = -1;\r
int iArgCount = 0;\r
int bCached = 1;\r
- t_sysFInfo info;\r
+ \r
+ gasEnvironment = envp;\r
\r
Command_Clear(0, NULL);\r
\r
}\r
} \r
\r
- write(_stdout, 1, "\n");\r
write(_stdout, 22, "Acess Shell Version 3\n");\r
write(_stdout, 2, "\n");\r
for(;;)\r
}\r
\r
if(length != BUILTIN_COUNT) continue;\r
-
- // - Calling a file\r
- GeneratePath(saArgs[1], gsCurrentDirectory, gsTmpBuffer);\r
- // Use length in place of fp\r
- length = open(gsTmpBuffer, 0);\r
- // Check file existence\r
- if(length == -1) {\r
- Print("Unknown Command: `");Print(saArgs[1]);Print("'\n"); // Error Message\r
- continue;\r
- }\r
- // Check if the file is a directory\r
- finfo( length, &info, 0 );
- close( length );\r
- if(info.flags & FILEFLAG_DIRECTORY) {\r
- Print("`");Print(saArgs[1]); // Error Message\r
- Print("' is a directory.\n");\r
- continue;\r
- }\r
- // Load new executable\r
- pid = clone(CLONE_VM, 0);\r
- printf("pid = %i\n", pid);\r
- if(pid == 0) execve(gsTmpBuffer, &saArgs[1], envp);\r
- if(pid <= 0) {\r
- Print("Unablt to create process: `");Print(gsTmpBuffer);Print("'\n"); // Error Message
- //SysDebug("pid = %i\n", pid);\r
- }\r
- else {\r
- int status;\r
- waittid(pid, &status);\r
- }\r
+ \r
+ // Shall we?\r
+ CallCommand( &saArgs[1] );\r
}\r
}\r
\r
}\r
}\r
\r
+/**\r
+ * \fn void CallCommand(char **Args)\r
+ */\r
+void CallCommand(char **Args)\r
+{\r
+ t_sysFInfo info;\r
+ int pid = -1;\r
+ int fd = 0;\r
+ \r
+ \r
+ // - Calling a file\r
+ GeneratePath(Args[0], gsCurrentDirectory, gsTmpBuffer);\r
+ \r
+ \r
+ // Check file existence\r
+ fd = open(gsTmpBuffer, 0);\r
+ if(fd == -1) {\r
+ Print("Unknown Command: `");Print(Args[0]);Print("'\n"); // Error Message\r
+ return ;\r
+ }\r
+ \r
+ // Check if the file is a directory\r
+ finfo( fd, &info, 0 );\r
+ close( fd );\r
+ if(info.flags & FILEFLAG_DIRECTORY) {\r
+ Print("`");Print(gsTmpBuffer); // Error Message\r
+ Print("' is a directory.\n");\r
+ return ;\r
+ }\r
+ \r
+ // Create new process\r
+ pid = clone(CLONE_VM, 0);\r
+ // Start Task\r
+ if(pid == 0)\r
+ execve(gsTmpBuffer, Args, gasEnvironment);\r
+ if(pid <= 0) {\r
+ Print("Unablt to create process: `");Print(gsTmpBuffer);Print("'\n"); // Error Message\r
+ }\r
+ else {\r
+ int status;\r
+ waittid(pid, &status);\r
+ }\r
+}\r
+\r
/**\r
* \fn void Command_Colour(int argc, char **argv)\r
* \brief \r