grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: /kern/file.c BUG


From: Vesa Jääskeläinen
Subject: Re: /kern/file.c BUG
Date: Thu, 24 Jan 2008 20:08:46 +0200
User-agent: Thunderbird 2.0.0.9 (Windows/20071031)

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.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]