]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Implement time command.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 27 Jun 2011 10:31:37 +0000 (12:31 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Mon, 27 Jun 2011 10:31:37 +0000 (12:31 +0200)
* grub-core/Makefile.core.def (time): New module.
* grub-core/commands/time.c: New file.
* grub-core/script/parser.y: Remove "time" keyword.
* grub-core/script/yylex.l: Likewise.

ChangeLog
grub-core/Makefile.core.def
grub-core/commands/time.c [new file with mode: 0644]
grub-core/script/parser.y
grub-core/script/yylex.l

index 866e2ccaf48f946fb143428793bf3d5416dd857c..4cdbc2b157209a212d6984cd6d588c5d93fdc92f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2011-06-27  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       Implement time command.
+
+       * grub-core/Makefile.core.def (time): New module.
+       * grub-core/commands/time.c: New file.
+       * grub-core/script/parser.y: Remove "time" keyword.
+       * grub-core/script/yylex.l: Likewise.
+
 2011-06-27  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * include/grub/loader.h (grub_loader_unregister_preboot_hook): Export.
index 7a0536b978fbcad6a93f17b53e69fda5ff74412c..b10c16d55aab6ae805d7b7eb54933b2508d22d23 100644 (file)
@@ -1641,3 +1641,8 @@ module = {
   common = commands/keylayouts.c;
   enable = videomodules;
 };
+
+module = {
+  name = time;
+  common = commands/time.c;
+};
diff --git a/grub-core/commands/time.c b/grub-core/commands/time.c
new file mode 100644 (file)
index 0000000..6874959
--- /dev/null
@@ -0,0 +1,68 @@
+/* echo.c - Command to display a line of text  */
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2011  Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <grub/time.h>
+#include <grub/misc.h>
+#include <grub/dl.h>
+#include <grub/command.h>
+#include <grub/i18n.h>
+
+GRUB_MOD_LICENSE ("GPLv3+");
+
+
+static grub_err_t
+grub_cmd_time (grub_command_t ctxt __attribute__ ((unused)),
+              int argc, char **args)
+{
+  grub_command_t cmd;
+  grub_uint32_t start;
+  grub_uint32_t end;
+
+  if (argc == 0)
+    return grub_error (GRUB_ERR_BAD_ARGUMENT, "command expected");
+
+  cmd = grub_command_find (args[0]);
+
+  if (!cmd)
+    return grub_error (GRUB_ERR_UNKNOWN_COMMAND, "Unknown command `%s'\n",
+                      args[0]);
+
+  start = grub_get_time_ms ();
+  (cmd->func) (cmd, argc - 1, &args[1]);
+  end = grub_get_time_ms ();
+
+  grub_printf ("Elapsed time: %d.%03d seconds \n", (end - start) / 1000,
+              (end - start) % 1000);
+
+  return grub_errno;
+}
+
+static grub_command_t cmd;
+\f
+GRUB_MOD_INIT(time)
+{
+  cmd = grub_register_command ("time", grub_cmd_time,
+                             N_("COMMAND [ARGS]"),
+                              N_("Measure time used by COMMAND"));
+}
+
+GRUB_MOD_FINI(time)
+{
+  grub_unregister_command (cmd);
+}
index 683b3ac4b98528f3956b6b23b50fc4220af8fa76..cc20b54797e0655335fb8645527a2606647d004d 100644 (file)
@@ -74,7 +74,6 @@
 %token <arg> GRUB_PARSER_TOKEN_THEN      "then"
 %token <arg> GRUB_PARSER_TOKEN_UNTIL     "until"
 %token <arg> GRUB_PARSER_TOKEN_WHILE     "while"
-%token <arg> GRUB_PARSER_TOKEN_TIME      "time"
 %token <arg> GRUB_PARSER_TOKEN_FUNCTION  "function"
 %token <arg> GRUB_PARSER_TOKEN_NAME      "name"
 %token <arg> GRUB_PARSER_TOKEN_WORD      "word"
@@ -147,7 +146,6 @@ argument : "case"      { $$ = grub_script_add_arglist (state, 0, $1); }
          | "until"     { $$ = grub_script_add_arglist (state, 0, $1); }
          | "while"     { $$ = grub_script_add_arglist (state, 0, $1); }
          | "function"  { $$ = grub_script_add_arglist (state, 0, $1); }
-         | "time"      { $$ = grub_script_add_arglist (state, 0, $1); }
          | word { $$ = $1; }
 ;
 
index 96f57dbe669371c00c2f2c49dabe6a4262199857..7195a880dc4b381f28b59721e73a672ce134566c 100644 (file)
@@ -161,7 +161,6 @@ MULTILINE       {WORD}?((\"{DQCHR}*)|(\'{SQCHR}*)|(\\\n))
 "}"             { RECORD; return GRUB_PARSER_TOKEN_RBR;       }
 "[["            { RECORD; return GRUB_PARSER_TOKEN_RSQBR2;    }
 "]]"            { RECORD; return GRUB_PARSER_TOKEN_LSQBR2;    }
-"time"          { RECORD; return GRUB_PARSER_TOKEN_TIME;      }
 "case"          { RECORD; return GRUB_PARSER_TOKEN_CASE;      }
 "do"            { RECORD; return GRUB_PARSER_TOKEN_DO;        }
 "done"          { RECORD; return GRUB_PARSER_TOKEN_DONE;      }