Am Mittwoch, den 13.08.2008, 23:50 +0200 schrieb Robert Millan:
> If we can't do this in kern/err.c (although I really think it'd be simpler),
> adding a new util/err.c that can be used by grub-probe but not grub-mkimage
> would solve this.
Seems like I'm sometime really just too fast.
I should start to think more before I bother to change something :)
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.
But at least everything compiles now with that patch and yes I did
ran ./autogen.sh before ;)
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) [! GRUB_UTIL]: Disable it 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 \
\
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: 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 \
\
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) 2002,2005,2007 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
[email protected]
http://lists.gnu.org/mailman/listinfo/grub-devel