diff options
Diffstat (limited to 'src/initrd.c')
-rw-r--r-- | src/initrd.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/initrd.c b/src/initrd.c index 37e3764..b8e8d09 100644 --- a/src/initrd.c +++ b/src/initrd.c @@ -90,6 +90,23 @@ initrd_file *initrd_getfileptr(const char *name) return 0; } +char *initrd_getnfile(unsigned int index) +{ + initrd_file *file = (initrd_file *)((uint8_t *)initrd_start + sizeof(initrd_header)); + uint32_t offset = sizeof(initrd_header); + + for (unsigned int i = 0; i < index; i++) { + uint32_t size = initrd_getsize(file) + sizeof(initrd_file); + offset += size; + file = (initrd_file *)((uint8_t *)file + size); + if (file->name[0] == '\n') + file = (initrd_file *)((uint32_t)file + 1); + } + if ((uint32_t)file >= (uint32_t)initrd_start + initrd_size) + return 0; + return file->name; +} + char *initrd_getfile(const char *name) { initrd_file *file = initrd_getfileptr(name); |