2005-04-27 07:59:47 +04:00
/*
* udev . c
*
* Userspace devfs
*
* Copyright ( C ) 2003 Greg Kroah - Hartman < greg @ kroah . com >
*
*
* 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 version 2 of the License .
*
* 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 , write to the Free Software Foundation , Inc . ,
* 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*
*/
# include <stdlib.h>
# include <string.h>
2003-04-10 21:53:46 +04:00
# include <stdio.h>
# include <fcntl.h>
# include <unistd.h>
# include <errno.h>
2005-04-27 07:59:47 +04:00
# include "udev.h"
# include "udev_version.h"
2003-07-17 12:24:51 +04:00
# include "namedev.h"
2003-10-15 10:20:53 +04:00
# include "udevdb.h"
2003-07-19 16:06:55 +04:00
# include "libsysfs/libsysfs.h"
2005-04-27 07:59:47 +04:00
static char * get_action ( void )
{
char * action ;
action = getenv ( " ACTION " ) ;
return action ;
}
static char * get_device ( void )
{
2003-07-19 16:06:55 +04:00
char * device ;
2005-04-27 07:59:47 +04:00
2003-07-19 16:06:55 +04:00
device = getenv ( " DEVPATH " ) ;
2005-04-27 07:59:47 +04:00
return device ;
}
2003-10-15 10:32:17 +04:00
char * * main_argv ;
char * * main_envp ;
int main ( int argc , char * * argv , char * * envp )
2005-04-27 07:59:47 +04:00
{
char * action ;
2003-04-10 21:53:46 +04:00
char * device ;
2003-07-21 07:48:48 +04:00
char * subsystem ;
2003-04-10 21:53:46 +04:00
int retval = - EINVAL ;
2005-04-27 07:59:47 +04:00
2003-10-15 10:32:17 +04:00
main_argv = argv ;
main_envp = envp ;
2003-10-16 10:51:27 +04:00
dbg ( " version %s " , UDEV_VERSION ) ;
2005-04-27 07:59:47 +04:00
if ( argc ! = 2 ) {
dbg ( " unknown number of arguments " ) ;
2003-04-10 21:53:46 +04:00
goto exit ;
2005-04-27 07:59:47 +04:00
}
2003-07-21 07:48:48 +04:00
subsystem = argv [ 1 ] ;
2003-07-19 16:06:55 +04:00
device = get_device ( ) ;
if ( ! device ) {
dbg ( " no device? " ) ;
goto exit ;
}
dbg ( " looking at %s " , device ) ;
2003-07-17 12:24:51 +04:00
2003-07-19 16:06:55 +04:00
/* we only care about class devices and block stuff */
if ( ! strstr ( device , " class " ) & &
! strstr ( device , " block " ) ) {
dbg ( " not block or class " ) ;
goto exit ;
}
2003-07-17 07:18:06 +04:00
2003-07-21 07:48:48 +04:00
/* but we don't care about net class devices */
if ( strcmp ( subsystem , " net " ) = = 0 ) {
dbg ( " don't care about net devices " ) ;
goto exit ;
}
2005-04-27 07:59:47 +04:00
action = get_action ( ) ;
if ( ! action ) {
dbg ( " no action? " ) ;
2003-04-10 21:53:46 +04:00
goto exit ;
2005-04-27 07:59:47 +04:00
}
2003-10-15 10:20:53 +04:00
/* initialize udev database */
retval = udevdb_init ( UDEVDB_DEFAULT ) ;
if ( retval ! = 0 ) {
dbg ( " Unable to initialize database. " ) ;
goto exit ;
}
2003-07-21 07:48:48 +04:00
/* initialize the naming deamon */
namedev_init ( ) ;
2003-04-10 22:02:32 +04:00
if ( strcmp ( action , " add " ) = = 0 )
2003-10-15 10:20:53 +04:00
retval = udev_add_device ( device , argv [ 1 ] ) ;
2003-04-10 21:53:46 +04:00
2003-10-15 10:20:53 +04:00
else if ( strcmp ( action , " remove " ) = = 0 )
retval = udev_remove_device ( device , argv [ 1 ] ) ;
2003-04-10 21:53:46 +04:00
2003-10-15 10:20:53 +04:00
else {
dbg ( " Unknown action: %s " , action ) ;
retval = - EINVAL ;
}
udevdb_exit ( ) ;
2003-04-10 21:53:46 +04:00
exit :
return retval ;
2005-04-27 07:59:47 +04:00
}