2011-12-22 01:30:48 +04:00
/*
2011-12-22 02:10:56 +04:00
* load kernel modules
2011-12-22 01:30:48 +04:00
*
* Copyright ( C ) 2011 Kay Sievers < kay . sievers @ vrfy . org >
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < http : //www.gnu.org/licenses/>.
*/
# include <stdio.h>
# include <stdlib.h>
# include <stdarg.h>
# include <unistd.h>
# include <string.h>
# include <errno.h>
# include <fcntl.h>
# include <sys/stat.h>
2011-12-23 07:50:33 +04:00
# include <sys/wait.h>
2011-12-22 01:30:48 +04:00
# include "udev.h"
2011-12-23 05:02:44 +04:00
static int builtin_kmod ( struct udev_device * dev , int argc , char * argv [ ] , bool test )
2011-12-22 01:30:48 +04:00
{
2011-12-23 05:02:44 +04:00
struct udev * udev = udev_device_get_udev ( dev ) ;
2011-12-23 07:50:33 +04:00
pid_t pid ;
char * m [ 5 ] ;
2011-12-23 05:02:44 +04:00
if ( argc < 3 ) {
err ( udev , " missing command + argument \n " ) ;
return EXIT_FAILURE ;
}
2011-12-23 07:50:33 +04:00
err ( udev , " '%s' the module '%s' (%i) \n " , argv [ 1 ] , argv [ 2 ] , argc ) ;
m [ 0 ] = " /sbin/modprobe " ;
m [ 1 ] = " -bv " ;
m [ 1 ] = argv [ 2 ] ;
m [ 2 ] = argv [ 3 ] ;
m [ 3 ] = NULL ;
pid = fork ( ) ;
switch ( pid ) {
case 0 :
execv ( m [ 0 ] , m ) ;
_exit ( 1 ) ;
case - 1 :
return EXIT_FAILURE ;
default :
waitpid ( pid , NULL , 0 ) ;
}
2011-12-22 01:30:48 +04:00
return EXIT_SUCCESS ;
}
2011-12-22 02:10:56 +04:00
static int builtin_kmod_load ( struct udev * udev )
{
2011-12-23 05:02:44 +04:00
info ( udev , " load module index \n " ) ;
2011-12-22 02:10:56 +04:00
return 0 ;
}
static int builtin_kmod_unload ( struct udev * udev )
{
2011-12-23 05:02:44 +04:00
info ( udev , " unload module index \n " ) ;
2011-12-22 02:10:56 +04:00
return 0 ;
}
2011-12-22 01:30:48 +04:00
const struct udev_builtin udev_builtin_kmod = {
. name = " kmod " ,
. cmd = builtin_kmod ,
2011-12-22 02:10:56 +04:00
. load = builtin_kmod_load ,
. unload = builtin_kmod_unload ,
2011-12-22 01:30:48 +04:00
. help = " kernel module loader " ,
. run_once = false ,
} ;