From 6f37034ed0f196229dad2797fa8a9328583d0194 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sun, 12 May 2024 13:56:45 -0300 Subject: [PATCH] initrd: fix prefixes --- kernel-src/fs/initrd.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/kernel-src/fs/initrd.c b/kernel-src/fs/initrd.c index dc5a8b4a..c796d4ea 100644 --- a/kernel-src/fs/initrd.c +++ b/kernel-src/fs/initrd.c @@ -38,7 +38,7 @@ typedef struct { } tarheader_t; typedef struct { - char name[256]; + char name[257]; mode_t mode; gid_t gid; uid_t uid; @@ -68,14 +68,16 @@ static void buildentry(tarentry_t *entry, void *addr) { char *namecpyptr = entry->name; // name has a prefix - if (header->name[99]) { + if (header->prefix[0]) { size_t len = header->prefix[154] ? 155 : strlen(header->prefix); memcpy(namecpyptr, header->prefix, len); namecpyptr += len; + *namecpyptr++ = '/'; } size_t namelen = header->name[99] ? 99 : strlen(header->name); memcpy(namecpyptr, header->name, namelen); - entry->name[namelen] = '\0'; + namecpyptr += namelen; + *namecpyptr = '\0'; entry->mode = convert(header->mode, 7); entry->uid = convert(header->uid, 7);