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:
committed by
Ludovic Courtès
parent
c8797e81fb
commit
981af99928
@@ -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 ()
|
||||
|
||||
Reference in New Issue
Block a user