From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1KTOzu-0004uM-1C for mharc-grub-devel@gnu.org; Wed, 13 Aug 2008 18:39:18 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KTOzs-0004u5-6A for grub-devel@gnu.org; Wed, 13 Aug 2008 18:39:16 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KTOzr-0004tn-8t for grub-devel@gnu.org; Wed, 13 Aug 2008 18:39:15 -0400 Received: from [199.232.76.173] (port=50694 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KTOzr-0004ti-0e for grub-devel@gnu.org; Wed, 13 Aug 2008 18:39:15 -0400 Received: from moutng.kundenserver.de ([212.227.126.171]:59397) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KTOzq-0005Av-GX for grub-devel@gnu.org; Wed, 13 Aug 2008 18:39:14 -0400 Received: from [85.180.9.187] (e180009187.adsl.alicedsl.de [85.180.9.187]) by mrelayeu.kundenserver.de (node=mrelayeu5) with ESMTP (Nemesis) id 0ML25U-1KTOzo46QY-00074u; Thu, 14 Aug 2008 00:39:13 +0200 From: Felix Zielcke To: The development of GRUB 2 In-Reply-To: <20080813215023.GA23069@thorin> References: <1218558487.19045.8.camel@fz.local> <1218558734.19045.10.camel@fz.local> <87fxp9di59.fsf@xs4all.nl> <20080812224041.GB3141@thorin> <1218606980.4008.9.camel@fz.local> <87abfhb60p.fsf@xs4all.nl> <1218659496.25595.7.camel@fz.local> <20080813215023.GA23069@thorin> Content-Type: multipart/mixed; boundary="=-aEq8Nvp3YDDYBPZjHZkX" Date: Thu, 14 Aug 2008 00:39:16 +0200 Message-Id: <1218667156.4010.5.camel@fz.local> Mime-Version: 1.0 X-Mailer: Evolution 2.22.3.1 X-Provags-ID: V01U2FsdGVkX1+w2rTmEhQz4lv6eBKreYWDbo/DSHZPNzPUju0 GnVFgOUy5RnbRM4iVRY1WX7yZQ5GKzE3J0I7i2wBTaABukxRVF npdfJTTdcrfgEHvo/92gmXwm5zrBjVM X-detected-kernel: by monty-python.gnu.org: Linux 2.6? (barebone, rare!) Subject: Re: [PATCH] kern/err.c + disk/raid.c error handling fixes X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Aug 2008 22:39:16 -0000 --=-aEq8Nvp3YDDYBPZjHZkX Content-Type: text/plain Content-Transfer-Encoding: 7bit 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 * 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. --=-aEq8Nvp3YDDYBPZjHZkX Content-Disposition: attachment; filename=util_err.diff Content-Type: text/x-patch; name=util_err.diff; charset=UTF-8 Content-Transfer-Encoding: 7bit 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 . + */ + +#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; + } +} --=-aEq8Nvp3YDDYBPZjHZkX--