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 .
+ */
+
+#include
+#include
+
+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;
+ }
+}