libsel4muslcsys: transition to new libcpio API
diff --git a/libsel4muslcsys/include/muslcsys/io.h b/libsel4muslcsys/include/muslcsys/io.h
index b0ef79d..192c71a 100644
--- a/libsel4muslcsys/include/muslcsys/io.h
+++ b/libsel4muslcsys/include/muslcsys/io.h
@@ -54,5 +54,7 @@
 get_fd_struct(int fd);
 
 /* install a cpio interface to use with open */
-typedef void *(*muslcsys_cpio_get_file_fn_t)(void *cpio_symbol, const char *name, unsigned long *size);
-void muslcsys_install_cpio_interface(void *cpio_symbol, muslcsys_cpio_get_file_fn_t fn);
+typedef void *(*muslcsys_cpio_get_file_fn_t)(void *cpio_symbol, unsigned long len,
+        const char *name, unsigned long *size);
+void muslcsys_install_cpio_interface(void *cpio_symbol, unsigned long cpio_len,
+        muslcsys_cpio_get_file_fn_t fn);
diff --git a/libsel4muslcsys/src/sys_io.c b/libsel4muslcsys/src/sys_io.c
index 801576a..cf42634 100644
--- a/libsel4muslcsys/src/sys_io.c
+++ b/libsel4muslcsys/src/sys_io.c
@@ -41,6 +41,7 @@
 #define FREE_FD_TABLE_SIZE(x) (sizeof(int) * ((x) - FIRST_USER_FD))
 
 static void *cpio_archive_symbol;
+static unsigned long cpio_archive_len;
 static muslcsys_cpio_get_file_fn_t cpio_get_file_impl;
 
 /* We need to wrap this in the config to prevent linker errors */
@@ -196,9 +197,9 @@
     long unsigned int size;
     char *file = NULL;
     if (cpio_get_file_impl && cpio_archive_symbol) {
-        file = cpio_get_file_impl(cpio_archive_symbol, pathname, &size);
+        file = cpio_get_file_impl(cpio_archive_symbol, cpio_archive_len, pathname, &size);
         if (!file && strncmp(pathname, "./", 2) == 0) {
-            file = cpio_get_file_impl(cpio_archive_symbol, pathname + 2, &size);
+            file = cpio_get_file_impl(cpio_archive_symbol, cpio_archive_len, pathname + 2, &size);
         }
     }
     if (!file) {
@@ -539,7 +540,9 @@
     return -EACCES;
 }
 
-void muslcsys_install_cpio_interface(void *cpio_symbol, muslcsys_cpio_get_file_fn_t fn) {
+void muslcsys_install_cpio_interface(void *cpio_symbol, unsigned long cpio_len,
+        muslcsys_cpio_get_file_fn_t fn) {
     cpio_archive_symbol = cpio_symbol;
+    cpio_archive_len = cpio_len;
     cpio_get_file_impl = fn;
 }
diff --git a/libsel4muslcsys/src/vsyscall.c b/libsel4muslcsys/src/vsyscall.c
index 9cf0470..20ab216 100644
--- a/libsel4muslcsys/src/vsyscall.c
+++ b/libsel4muslcsys/src/vsyscall.c
@@ -226,8 +226,10 @@
 /* If we have a default CPIO file interface defined in the config then install it here */
 #ifdef CONFIG_LIB_SEL4_MUSLC_SYS_CPIO_FS
 extern char _cpio_archive[];
+extern char _cpio_archive_end[];
 static void CONSTRUCTOR(CONSTRUCTOR_MIN_PRIORITY) install_default_cpio(void) {
-    muslcsys_install_cpio_interface(_cpio_archive, cpio_get_file);
+    unsigned long cpio_len = _cpio_archive_end - _cpio_archive;
+    muslcsys_install_cpio_interface(_cpio_archive, cpio_len, cpio_get_file);
 }
 #endif