/[grub]/grub2/normal/command.c
ViewVC logotype

Diff of /grub2/normal/command.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.13 by marco_g, Mon Oct 24 10:23:46 2005 UTC revision 1.14 by marco_g, Sun Nov 6 22:19:59 2005 UTC
# Line 25  Line 25 
25  #include <grub/env.h>  #include <grub/env.h>
26  #include <grub/dl.h>  #include <grub/dl.h>
27  #include <grub/parser.h>  #include <grub/parser.h>
28    #include <grub/script.h>
29    
30  static grub_command_t grub_command_list;  static grub_command_t grub_command_list;
31    
# Line 193  grub_command_execute (char *cmdline, int Line 194  grub_command_execute (char *cmdline, int
194        return grub_cmdline_get (">", *s, GRUB_MAX_CMDLINE, 0, 1);        return grub_cmdline_get (">", *s, GRUB_MAX_CMDLINE, 0, 1);
195      }      }
196    
   grub_command_t cmd;  
197    grub_err_t ret = 0;    grub_err_t ret = 0;
198    char *pager;    char *pager;
199    int num;    struct grub_script *parsed_script;
   char **args;  
   struct grub_arg_list *state;  
   struct grub_arg_option *parser;  
   int maxargs = 0;  
   char **arglist;  
   int numargs;  
   
   if (grub_parser_split_cmdline (cmdline, cmdline_get, &num, &args))  
     return 0;  
     
   /* In case of an assignment set the environment accordingly instead  
      of calling a function.  */  
   if (num == 0 && grub_strchr (args[0], '='))  
     {  
       char *val;  
   
       if (! interactive)  
         grub_printf ("%s\n", cmdline);  
         
       val = grub_strchr (args[0], '=');  
       val[0] = 0;  
       grub_env_set (args[0], val + 1);  
       val[0] = '=';  
       return 0;  
     }  
     
   cmd = grub_command_find (args[0]);  
   if (! cmd)  
     return -1;  
   
   if (! (cmd->flags & GRUB_COMMAND_FLAG_NO_ECHO) && ! interactive)  
     grub_printf ("%s\n", cmdline);  
200        
201    /* Enable the pager if the environment pager is set to 1.  */    /* Enable the pager if the environment pager is set to 1.  */
202    if (interactive)    if (interactive)
# Line 237  grub_command_execute (char *cmdline, int Line 205  grub_command_execute (char *cmdline, int
205      pager = 0;      pager = 0;
206    if (pager && (! grub_strcmp (pager, "1")))    if (pager && (! grub_strcmp (pager, "1")))
207      grub_set_more (1);      grub_set_more (1);
208      
209    parser = (struct grub_arg_option *) cmd->options;    /* Parse the script.  */
210    while (parser && (parser++)->doc)    parsed_script = grub_script_parse (cmdline, cmdline_get);
211      maxargs++;  
212      if (parsed_script)
   state = grub_malloc (sizeof (struct grub_arg_list) * maxargs);  
   grub_memset (state, 0, sizeof (struct grub_arg_list) * maxargs);  
   if (! (cmd->flags & GRUB_COMMAND_FLAG_NO_ARG_PARSE))  
213      {      {
214        if (grub_arg_parse (cmd, num, &args[1], state, &arglist, &numargs))        /* Execute the command(s).  */
215          ret = (cmd->func) (state, numargs, arglist);        grub_script_execute (parsed_script);
216    
217          /* The parsed script was executed, throw it away.  */
218          grub_script_free (parsed_script);
219      }      }
   else  
     ret = (cmd->func) (state, num, &args[1]);  
     
   grub_free (state);  
220    
221    if (pager && (! grub_strcmp (pager, "1")))    if (pager && (! grub_strcmp (pager, "1")))
222      grub_set_more (0);      grub_set_more (0);
223      
   grub_free (args);  
224    return ret;    return ret;
225  }  }
226    

Legend:
Removed from v.1.13  
changed lines
  Added in v.1.14

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26