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:
		
							parent
							
								
									08b1990a93
								
							
						
					
					
						commit
						7c4885f0d7
					
				
					 2 changed files with 3 additions and 12 deletions
				
			
		|  | @ -160,11 +160,7 @@ module name." | |||
|     (lambda args | ||||
|       ;; If this module was already loaded and we're in modprobe style, ignore | ||||
|       ;; the error. | ||||
| 
 | ||||
|       ;; FIXME: Use errno once 'guile-linux-syscalls.patch' provides a useful | ||||
|       ;; errno here. | ||||
|       (unless (and recursive? | ||||
|                    (module-loaded? (string-drop-right (basename file) 3))) | ||||
|       (unless (and recursive? (= EEXIST (system-error-errno args))) | ||||
|         (apply throw args))))) | ||||
| 
 | ||||
| ;;; linux-modules.scm ends here | ||||
|  |  | |||
|  | @ -7,7 +7,7 @@ diff --git a/libguile/posix.c b/libguile/posix.c | |||
| index 324f21b..cbee94d 100644
 | ||||
| --- a/libguile/posix.c
 | ||||
| +++ b/libguile/posix.c
 | ||||
| @@ -2286,6 +2286,266 @@ scm_init_popen (void)
 | ||||
| @@ -2286,6 +2286,261 @@ scm_init_popen (void)
 | ||||
|  } | ||||
|  #endif | ||||
|   | ||||
|  | @ -84,12 +84,7 @@ index 324f21b..cbee94d 100644 | |||
| +  free (c_options);
 | ||||
| +
 | ||||
| +  if (err != 0)
 | ||||
| +    {
 | ||||
| +      /* XXX: `insmod' actually provides better translation of some of
 | ||||
| +	 the error codes.  */
 | ||||
| +      errno = err;
 | ||||
| +      SCM_SYSERROR;
 | ||||
| +    }
 | ||||
| +    SCM_SYSERROR;
 | ||||
| +
 | ||||
| +  return SCM_UNSPECIFIED;
 | ||||
| +}
 | ||||
|  |  | |||
		Reference in a new issue