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. -- Robert Millan <GPLv2> I know my rights; I want my phone call! <DRM> What use is a phone call… if you are unable to speak? (as seen on /.) _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel