+2011-11-25 Vladimir Serbinenko <phcoder@gmail.com>
+
+ * grub-core/fs/cpio.c (grub_cpio_dir): Handle subdirs correctly.
+
2011-11-16 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/dl.c (grub_dl_load_segments): Fix alignment handling.
{
struct grub_cpio_data *data;
grub_disk_addr_t ofs;
- char *prev, *name, *path;
+ char *prev, *name, *path, *ptr;
grub_size_t len;
int symlinknest = 0;
path = grub_strdup (path_in + 1);
if (!path)
return grub_errno;
+ for (ptr = path + grub_strlen (path) - 1; ptr >= path && *ptr == '/'; ptr--)
+ *ptr = 0;
grub_dl_ref (my_mod);
char *p, *n;
n = name + len;
- if (*n == '/')
+ while (*n == '/')
n++;
- p = grub_strchr (name + len, '/');
+ p = grub_strchr (n, '/');
if (p)
*p = 0;
- if (((!prev) || (grub_strcmp (prev, name) != 0)) && name[len] != 0)
+ if (((!prev) || (grub_strcmp (prev, n) != 0)) && *n != 0)
{
struct grub_dirhook_info info;
grub_memset (&info, 0, sizeof (info));
info.mtime = mtime;
info.mtimeset = 1;
- hook (name + len, &info);
+ hook (n, &info);
grub_free (prev);
prev = name;
}