me
/
guix
Archived
1
0
Fork 0

gnu: guile-static: Add bindings for `reboot'.

* gnu/packages/patches/guile-linux-syscalls.patch: Add `scm_reboot'.
master
Ludovic Courtès 2013-02-16 00:29:43 +01:00
parent e7d2c60809
commit 9322c6822f
1 changed files with 44 additions and 2 deletions

View File

@ -1,10 +1,13 @@
This patch adds bindings to Linux syscalls for which glibc has symbols. This patch adds bindings to Linux syscalls for which glibc has symbols.
Using the FFI would have been nice, but that's not an option when using
a statically-linked Guile in an initrd that doesn't have libc.so around.
diff --git a/libguile/posix.c b/libguile/posix.c diff --git a/libguile/posix.c b/libguile/posix.c
index 324f21b..ace5211 100644 index 324f21b..cbee94d 100644
--- a/libguile/posix.c --- a/libguile/posix.c
+++ b/libguile/posix.c +++ b/libguile/posix.c
@@ -2286,6 +2286,227 @@ scm_init_popen (void) @@ -2286,6 +2286,266 @@ scm_init_popen (void)
} }
#endif #endif
@ -92,6 +95,45 @@ index 324f21b..ace5211 100644
+} +}
+#undef FUNC_NAME +#undef FUNC_NAME
+ +
+/* Rebooting, halting, and all that. */
+
+#include <sys/reboot.h>
+
+SCM_VARIABLE_INIT (flag_RB_AUTOBOOT, "RB_AUTOBOOT",
+ scm_from_int (RB_AUTOBOOT));
+SCM_VARIABLE_INIT (flag_RB_HALT_SYSTEM, "RB_HALT_SYSTEM",
+ scm_from_int (RB_HALT_SYSTEM));
+SCM_VARIABLE_INIT (flag_RB_ENABLE_CAD, "RB_ENABLE_CAD",
+ scm_from_int (RB_ENABLE_CAD));
+SCM_VARIABLE_INIT (flag_RB_DISABLE_CAD, "RB_DISABLE_CAD",
+ scm_from_int (RB_DISABLE_CAD));
+SCM_VARIABLE_INIT (flag_RB_POWER_OFF, "RB_POWER_OFF",
+ scm_from_int (RB_POWER_OFF));
+SCM_VARIABLE_INIT (flag_RB_SW_SUSPEND, "RB_SW_SUSPEND",
+ scm_from_int (RB_SW_SUSPEND));
+SCM_VARIABLE_INIT (flag_RB_KEXEC, "RB_KEXEC",
+ scm_from_int (RB_KEXEC));
+
+SCM_DEFINE (scm_reboot, "reboot", 0, 1, 0,
+ (SCM command),
+ "Reboot the system. @var{command} must be one of the @code{RB_} "
+ "constants; if omitted, @var{RB_AUTOBOOT} is used, thus "
+ "performing a hard reset.")
+#define FUNC_NAME s_scm_reboot
+{
+ int c_command;
+
+ if (SCM_UNBNDP (command))
+ c_command = RB_AUTOBOOT;
+ else
+ c_command = scm_to_int (command);
+
+ reboot (c_command);
+
+ return SCM_UNSPECIFIED; /* likely unreached */
+}
+#undef FUNC_NAME
+
+/* Linux network interfaces. See <linux/if.h>. */ +/* Linux network interfaces. See <linux/if.h>. */
+ +
+#include <linux/if.h> +#include <linux/if.h>