1
0
mirror of https://git.savannah.gnu.org/git/guix.git synced 2026-05-28 12:01:49 +02:00

syscalls: Add implementation of statfs for guile-static.

This is needed when bind mounting file systems from the initrd guile, or
else you get an error like this:
https://lists.gnu.org/archive/html/help-guix/2021-07/msg00050.html

* guix/build/syscalls.scm (statfs): Add implementation for calling from
guile-static.
* gnu/packages/patches/guile-3.0-linux-syscalls.patch,
gnu/packages/patches/guile-linux-syscalls.patch (statfs-raw): C Function to
support above.

Change-Id: Ibc8f1f27648add90639bd391aff8d61c6a23b884
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
Noah Evans
2024-12-26 14:28:35 -05:00
committed by Ludovic Courtès
parent c8797e81fb
commit 981af99928
3 changed files with 87 additions and 13 deletions
@@ -6,7 +6,7 @@ a statically-linked Guile in an initrd that doesn't have libc.so around.
diff --git a/libguile/posix.c b/libguile/posix.c
--- a/libguile/posix.c
+++ b/libguile/posix.c
@@ -2375,6 +2375,336 @@ scm_init_popen (void)
@@ -2375,6 +2375,368 @@ scm_init_popen (void)
}
#endif /* HAVE_START_CHILD */
@@ -339,6 +339,38 @@ diff --git a/libguile/posix.c b/libguile/posix.c
+}
+#undef FUNC_NAME
+#endif
+
+#include <sys/statfs.h>
+
+SCM_DEFINE (scm_statfs_raw, "statfs-raw", 1, 0, 0,
+ (SCM filesystem),
+ "Return a bytevector describing @var{filesystem}")
+#define FUNC_NAME s_scm_statfs_raw
+{
+ int err;
+ char *c_filesystem;
+ SCM bv;
+
+ c_filesystem = scm_to_locale_string (filesystem);
+
+ bv = scm_c_make_bytevector (sizeof (struct statfs));
+ struct statfs *bv_pointer = scm_to_pointer (scm_bytevector_to_pointer (bv, scm_from_int (0)));
+
+ err = statfs (c_filesystem, bv_pointer);
+ if (err != 0)
+ err = errno;
+
+ free (c_filesystem);
+
+ if (err != 0)
+ {
+ errno = err;
+ SCM_SYSERROR;
+ }
+
+ return bv;
+}
+#undef FUNC_NAME
+
void
scm_init_posix ()