diff --git a/ChangeLog b/ChangeLog index a40deb780..ce683bbb0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2010-10-16 Robert Millan + + * grub-core/kern/emu/misc.c + (grub_make_system_path_relative_to_its_root): Fix premature return + when processing non-root ZFS filesystems. + 2010-10-15 Robert Millan * util/grub.d/10_linux.in (list): Expand "vmlinu[zx]" instances to diff --git a/grub-core/kern/emu/misc.c b/grub-core/kern/emu/misc.c index d8db3be9d..cfc143bf9 100644 --- a/grub-core/kern/emu/misc.c +++ b/grub-core/kern/emu/misc.c @@ -406,21 +406,7 @@ grub_make_system_path_relative_to_its_root (const char *path) /* buf is another filesystem; we found it. */ if (st.st_dev != num) - { - /* offset == 0 means path given is the mount point. - This works around special-casing of "/" in Un*x. This function never - prints trailing slashes (so that its output can be appended a slash - unconditionally). Each slash in is considered a preceding slash, and - therefore the root directory is an empty string. */ - if (offset == 0) - { - free (buf); - free (buf2); - return xstrdup (""); - } - else - break; - } + break; offset = p - buf; /* offset == 1 means root directory. */ @@ -448,7 +434,10 @@ grub_make_system_path_relative_to_its_root (const char *path) } #endif - /* Remove trailing slashes, return empty string if root directory. */ + /* This works around special-casing of "/" in Un*x. This function never + prints trailing slashes (so that its output can be appended a slash + unconditionally). Each slash in it is considered a preceding slash, + and therefore the root directory is an empty string. */ len = strlen (buf3); while (len > 0 && buf3[len - 1] == '/') {