2006-08-19 01:17:18 +04:00
/*
2008-01-30 17:00:02 +03:00
* Copyright ( C ) 2001 - 2004 Sistina Software , Inc . All rights reserved .
2009-02-23 01:11:58 +03:00
* Copyright ( C ) 2004 - 2009 Red Hat , Inc . All rights reserved .
2006-08-19 01:17:18 +04:00
*
* This file is part of LVM2 .
*
* This copyrighted material is made available to anyone wishing to use ,
* modify , copy , or redistribute it subject to the terms and conditions
2007-08-21 00:55:30 +04:00
* of the GNU Lesser General Public License v .2 .1 .
2006-08-19 01:17:18 +04:00
*
2007-08-21 00:55:30 +04:00
* You should have received a copy of the GNU Lesser General Public License
2006-08-19 01:17:18 +04:00
* along with this program ; if not , write to the Free Software Foundation ,
2016-01-21 13:49:46 +03:00
* Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA
2006-08-19 01:17:18 +04:00
*/
# include "tools.h"
2015-07-06 19:30:18 +03:00
2006-08-19 01:17:18 +04:00
# include "lvm2cmdline.h"
# include "label.h"
2007-01-16 21:06:12 +03:00
# include "memlock.h"
2006-08-19 01:17:18 +04:00
# include "lvm2cmd.h"
# include <signal.h>
# include <sys/stat.h>
# include <time.h>
# include <sys/resource.h>
2008-12-18 08:27:17 +03:00
void * cmdlib_lvm2_init ( unsigned static_compile )
2006-08-19 01:17:18 +04:00
{
struct cmd_context * cmd ;
lvm_register_commands ( ) ;
2008-12-18 08:27:17 +03:00
init_is_static ( static_compile ) ;
2015-07-30 11:34:10 +03:00
if ( ! ( cmd = init_lvm ( 1 , 1 ) ) )
2006-08-19 01:17:18 +04:00
return NULL ;
return ( void * ) cmd ;
}
int lvm2_run ( void * handle , const char * cmdline )
{
int argc , ret , oneoff = 0 ;
char * args [ MAX_ARGS ] , * * argv , * cmdcopy = NULL ;
struct cmd_context * cmd ;
argv = args ;
if ( ! handle ) {
oneoff = 1 ;
if ( ! ( handle = lvm2_init ( ) ) ) {
log_error ( " Handle initialisation failed. " ) ;
return ECMD_FAILED ;
}
}
cmd = ( struct cmd_context * ) handle ;
cmd - > argv = argv ;
if ( ! ( cmdcopy = dm_strdup ( cmdline ) ) ) {
log_error ( " Cmdline copy failed. " ) ;
ret = ECMD_FAILED ;
goto out ;
}
if ( lvm_split ( cmdcopy , & argc , argv , MAX_ARGS ) = = MAX_ARGS ) {
log_error ( " Too many arguments. Limit is %d. " , MAX_ARGS ) ;
ret = EINVALID_CMD_LINE ;
goto out ;
}
if ( ! argc ) {
log_error ( " No command supplied " ) ;
ret = EINVALID_CMD_LINE ;
goto out ;
}
2007-01-08 17:24:20 +03:00
/* FIXME Temporary - move to libdevmapper */
2008-06-23 13:27:45 +04:00
ret = ECMD_PROCESSED ;
2015-10-22 11:44:38 +03:00
if ( ! strcmp ( cmdline , " _memlock_inc " ) ) {
2010-03-05 17:48:33 +03:00
memlock_inc_daemon ( cmd ) ;
2015-10-22 11:44:38 +03:00
} else if ( ! strcmp ( cmdline , " _memlock_dec " ) )
2010-03-05 17:48:33 +03:00
memlock_dec_daemon ( cmd ) ;
2007-01-08 17:24:20 +03:00
else
ret = lvm_run_command ( cmd , argc , argv ) ;
2006-08-19 01:17:18 +04:00
out :
dm_free ( cmdcopy ) ;
if ( oneoff )
lvm2_exit ( handle ) ;
return ret ;
}
2011-10-19 12:46:26 +04:00
void lvm2_disable_dmeventd_monitoring ( void * handle ) {
init_dmeventd_monitor ( DMEVENTD_MONITOR_IGNORE ) ;
2015-10-23 11:48:01 +03:00
init_ignore_suspended_devices ( 1 ) ;
init_disable_dmeventd_monitoring ( 1 ) ; /* Lock settings */
2011-10-19 12:46:26 +04:00
}
2006-08-19 01:17:18 +04:00
void lvm2_log_level ( void * handle , int level )
{
struct cmd_context * cmd = ( struct cmd_context * ) handle ;
cmd - > default_settings . verbose = level - VERBOSE_BASE_LEVEL ;
}
void lvm2_log_fn ( lvm2_log_fn_t log_fn )
{
init_log_fn ( log_fn ) ;
}
void lvm2_exit ( void * handle )
{
struct cmd_context * cmd = ( struct cmd_context * ) handle ;
lvm_fin ( cmd ) ;
}