Пример #1
0
void execute_forking(char **subcmd) {
	char *cmd = subcmd[0];
	char **args = &subcmd[1];
	if (strcmp(cmd, "echo") == 0) {
		echo(args);
	} else if ((strcmp(cmd, "etime") == 0) || (strcmp(cmd, "limits") == 0) || 
																((strcmp(cmd, "&")) == 0)) {
		execute_external(subcmd[1],&subcmd[1]);
	} else {
		execute_external(cmd, subcmd);
	}
}
Пример #2
0
/*int execute_subcmd(char **subcmd){
	int retval,redirection_type;
	char *cmd = subcmd[0];
	char **args = &subcmd[1];
	//Handle Redirection here
	redirection_type = check_redirection(args);
	if( redirection_type == 3)
		printf("Invalid Redirection operation\n");
	else if(redirection_type == 0)
	{//No Redirection
		if (strcmp(cmd, "exit") == 0) {
			retval = exit_shell();
		} else if (strcmp(cmd, "cd") == 0) {
			retval = cd(args[0]);
		} else if (strcmp(cmd, "echo") == 0) {
			retval = echo(args);
		} else if (strcmp(cmd, "etime") == 0) {
			retval = etime(args);
		} else if (strcmp(cmd, "limits") == 0) {
			retval = limits(args);
		} else {
			retval = execute_external(cmd, subcmd);
		}
	}
	else
		handle_redirection(subcmd,redirection_type);
	return retval;
}*/
int execute_subcmd(char **subcmd) {
	int retval;
	if ((retval = execute_non_forking(subcmd)) == 2) {
		execute_external(subcmd[0], subcmd);
	}
	return retval;
}
Пример #3
0
BOOL parse_cmd(char *cmd)
{
  unsigned int i, rc;
  int Argc;                // argument count
  #define MAXARGS 32
  char *Argv[MAXARGS];      // argument pointers
  char *pszTemp;

  if (strlen(cmd)==0)
  {
    return FALSE;
  }

  if (strlen(cmd)==2)
    if (cmd[1]==':')
    {
      if (QueryDriveReady(cmd[0]-'a'+1))
        DosSetDefaultDisk(cmd[0]-'a'+1);
      return FALSE;
    }

  while (( *cmd == ' ' ) || ( *cmd == '\t' ))
          cmd++;

  // loop through arguments
  for ( Argc = 0; (( Argc < MAXARGS ) && ( *cmd )); Argc++ )  {

          pszTemp = cmd;              // save start of argument

          while ( isdelim( *cmd ) == 0 ) {
                  if ( *cmd )
                          cmd++;
          }

          // check flag for terminators
          if (Argc == 0) { // '\0' after program name only
                  if (( *cmd != '\0' ))
                          *cmd++ = '\0';
          }

          // update the Argv pointer
          Argv[ Argc ] = pszTemp;
          log("Argv[%d]=%s\n", Argc, pszTemp);

          // skip delimiters for Argv[2] onwards
          while (( *cmd ) && ( isdelim( *cmd )))
                  cmd++;
  }

  while (*cmd && isdelim(*cmd))
    cmd--;

  // change the first trailing delimiter to '\0'
  cmd++;
  *cmd = '\0'; /* second NULL terminator */

  Argv[Argc] = NULL;
  log("Argv[%d]=%s\n", Argc, 0);

  if (!strcmp(Argv[0], "exit"))
  {
    return TRUE;
  }

  for (i = 0; commands[i]; i ++)
  {
    if (!strcmp(Argv[0], commands[i]->cmdname))
    {
      (*(commands[i]->func))(Argc, Argv);
      return FALSE;
    }
  }

  //log("argc=%d\n", Argc);

  //for (i = 0; i < Argc; i++)
  //  log("argv[%d]=%s\n", i, Argv[i]);

  execute_external(Argc, Argv);

  return FALSE;
}