Am Donnerstag, den 14.08.2008, 00:39 +0200 schrieb Felix Zielcke:
> 
> This time dear Marco I didn't bother to read through the changelog, it
> might be still not perfect and I'm even tired now.

I should have better gone to bed instead of making quickly a patch for
this.
Well 2nd try now.
I forgot grub-fstest and I think I know now why you said `why' to one
entry ;)
And I forgot to change the copyright year to 2008 for the new shiny
util/err.c

2008-08-14  Felix Zielcke  <[EMAIL PROTECTED]>

        * include/grub/err.h (grub_error_stack_assert): New variable
        declaration.
        * kern/err.c (grub_error_stack_assert): Remove static.
        (grub_print_error): Disable it for [GRUB_UTIL] because ...
        * util/err.c: New file with grub_print_error () using fprintf 
        (stderr, ...).
        * conf/common.rmk: Add it for grub-probe.

Index: conf/common.rmk
===================================================================
--- conf/common.rmk	(Revision 1804)
+++ conf/common.rmk	(Arbeitskopie)
@@ -4,7 +4,7 @@
 sbin_UTILITIES += grub-probe
 util/grub-probe.c_DEPENDENCIES = grub_probe_init.h
 grub_probe_SOURCES = util/grub-probe.c	\
-	util/biosdisk.c	util/misc.c util/getroot.c		\
+	util/biosdisk.c	util/misc.c util/getroot.c util/err.c	\
 	kern/device.c kern/disk.c kern/err.c kern/misc.c	\
 	kern/parser.c kern/partition.c kern/file.c		\
 	\
@@ -23,7 +23,7 @@ endif
 
 # For grub-fstest.
 util/grub-fstest.c_DEPENDENCIES = grub_fstest_init.h
-grub_fstest_SOURCES = util/grub-fstest.c util/hostfs.c util/misc.c 	\
+grub_fstest_SOURCES = util/grub-fstest.c util/hostfs.c util/misc.c util/err.c	\
 	kern/file.c kern/device.c kern/disk.c kern/err.c kern/misc.c	\
 	disk/host.c disk/loopback.c  normal/arg.c normal/misc.c		\
 	io/gzio.c lib/hexdump.c commands/blocklist.c commands/ls.c \
Index: kern/err.c
===================================================================
--- kern/err.c	(Revision 1804)
+++ kern/err.c	(Arbeitskopie)
@@ -34,7 +34,7 @@ static struct
 } grub_error_stack_items[GRUB_ERROR_STACK_SIZE];
 
 static int grub_error_stack_pos;
-static int grub_error_stack_assert;
+int grub_error_stack_assert;
 
 grub_err_t
 grub_error (grub_err_t n, const char *fmt, ...)
@@ -112,7 +112,7 @@ grub_error_pop (void)
       return 0;
     }
 }
-
+#ifndef GRUB_UTIL
 void
 grub_print_error (void)
 {
@@ -132,3 +132,4 @@ grub_print_error (void)
       grub_error_stack_assert = 0;
     }
 }
+#endif
Index: include/grub/err.h
===================================================================
--- include/grub/err.h	(Revision 1804)
+++ include/grub/err.h	(Arbeitskopie)
@@ -58,6 +58,7 @@ grub_err_t;
 
 extern grub_err_t EXPORT_VAR(grub_errno);
 extern char EXPORT_VAR(grub_errmsg)[];
+extern int grub_error_stack_assert;
 
 grub_err_t EXPORT_FUNC(grub_error) (grub_err_t n, const char *fmt, ...);
 void EXPORT_FUNC(grub_fatal) (const char *fmt, ...) __attribute__ ((noreturn));
Index: util/err.c
===================================================================
--- util/err.c	(Revision 0)
+++ util/err.c	(Revision 0)
@@ -0,0 +1,41 @@
+/* err.c - util error printing routine */
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 2008  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 <stdio.h>
+#include <grub/err.h>
+
+void
+grub_print_error (void)
+{
+  /* Print error messages in reverse order. First print active error message
+     and then empty error stack.  */
+  do
+    {
+      if (grub_errno != GRUB_ERR_NONE)
+        fprintf (stderr, "error: %s\n", grub_errmsg);
+    }
+  while (grub_error_pop ());
+
+  /* If there was an assert while using error stack, report about it.  */
+  if (grub_error_stack_assert)
+    {
+      fprintf (stderr, "assert: error stack overflow detected!\n");
+      grub_error_stack_assert = 0;
+    }
+}
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to