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