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