linux-modules: Correctly propagate error code from 'init_module'.

* gnu/packages/patches/guile-linux-syscalls.patch (scm_load_linux_module):
  Leave 'errno' unchanged when ERR != 0.
* gnu/build/linux-modules.scm (load-linux-module*): Check for the errno
  value of ARGS to determine whether the module was already loaded.
This commit is contained in:
Ludovic Courtès 2014-11-28 15:08:56 +01:00
parent 08b1990a93
commit 7c4885f0d7
2 changed files with 3 additions and 12 deletions

View File

@ -160,11 +160,7 @@ module name."
(lambda args (lambda args
;; If this module was already loaded and we're in modprobe style, ignore ;; If this module was already loaded and we're in modprobe style, ignore
;; the error. ;; the error.
(unless (and recursive? (= EEXIST (system-error-errno args)))
;; FIXME: Use errno once 'guile-linux-syscalls.patch' provides a useful
;; errno here.
(unless (and recursive?
(module-loaded? (string-drop-right (basename file) 3)))
(apply throw args))))) (apply throw args)))))
;;; linux-modules.scm ends here ;;; linux-modules.scm ends here

View File

@ -7,7 +7,7 @@ diff --git a/libguile/posix.c b/libguile/posix.c
index 324f21b..cbee94d 100644 index 324f21b..cbee94d 100644
--- a/libguile/posix.c --- a/libguile/posix.c
+++ b/libguile/posix.c +++ b/libguile/posix.c
@@ -2286,6 +2286,266 @@ scm_init_popen (void) @@ -2286,6 +2286,261 @@ scm_init_popen (void)
} }
#endif #endif
@ -84,12 +84,7 @@ index 324f21b..cbee94d 100644
+ free (c_options); + free (c_options);
+ +
+ if (err != 0) + if (err != 0)
+ { + SCM_SYSERROR;
+ /* XXX: `insmod' actually provides better translation of some of
+ the error codes. */
+ errno = err;
+ SCM_SYSERROR;
+ }
+ +
+ return SCM_UNSPECIFIED; + return SCM_UNSPECIFIED;
+} +}