From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1JI6VE-0002eP-1h for mharc-grub-devel@gnu.org; Thu, 24 Jan 2008 13:08:40 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JI6VB-0002e3-UN for grub-devel@gnu.org; Thu, 24 Jan 2008 13:08:37 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JI6VA-0002dr-Pn for grub-devel@gnu.org; Thu, 24 Jan 2008 13:08:37 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JI6VA-0002do-NE for grub-devel@gnu.org; Thu, 24 Jan 2008 13:08:36 -0500 Received: from pne-smtpout4-sn1.fre.skanova.net ([81.228.11.168]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1JI6VA-0007KH-Bs for grub-devel@gnu.org; Thu, 24 Jan 2008 13:08:36 -0500 Received: from [127.0.0.1] (88.193.32.97) by pne-smtpout4-sn1.fre.skanova.net (7.3.129) id 474FD021002B50AF for grub-devel@gnu.org; Thu, 24 Jan 2008 19:08:11 +0100 Message-ID: <4798D42E.7030506@nic.fi> Date: Thu, 24 Jan 2008 20:08:46 +0200 From: =?UTF-8?B?VmVzYSBKw6TDpHNrZWzDpGluZW4=?= User-Agent: Thunderbird 2.0.0.9 (Windows/20071031) MIME-Version: 1.0 To: The development of GRUB 2 References: <94a0ccbc0801231500g752f72acodc37c733726d8919@mail.gmail.com> <20080124000544.GB32503@thorin> In-Reply-To: <20080124000544.GB32503@thorin> X-Enigmail-Version: 0.95.6 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-detected-kernel: by monty-python.gnu.org: Solaris 10 (beta) Subject: Re: /kern/file.c BUG 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: Thu, 24 Jan 2008 18:08:38 -0000 Robert Millan wrote: > On Wed, Jan 23, 2008 at 11:00:57PM +0000, Oleg Strikov wrote: >> Incorrect behavior of grub_file_open () function in e.g. loop context: >> >> char *file_names[] = >> { >> "(hd0,1)/file1", //file do not exist >> "(hd0,1)/file2" //file exist >> }; >> grub_file_t file; >> int i; >> for (i = 0; i < 2; i++) >> { >> file = grub_file_open (file_names[i]); >> if (file) {...} >> } >> >> There, we should get positive return in the second case (i == 1), but >> grub_file_open() returns 0. >> >> Using gdb i've found that this problem connected with incorrect errno check >> in /kern/file.c >> >> Let's look: >> >>> grub_file_t >>> grub_file_open (const char *name) >>> { >>> grub_device_t device; >>> grub_file_t file = 0; >>> char *device_name; >>> char *file_name; >>> device_name = grub_file_get_device_name (name); >>> if (grub_errno) >>> return 0; >> But, we DO NOT set grub_errno to 0 at the begining of the function, thats >> why next loop round it always returns 0 > > Fixed, thank you. Now you broke it ;) Previous behavior was working correctly. You have to handle errorcodes at some point and that means when error is handled it is zeroed (or GRUB_ERR_NONE). So code is in callee where that loop was.