@ -18,6 +18,7 @@
# include "qemu/config-file.h"
# include "qemu/config-file.h"
# include "qemu/readline.h"
# include "qemu/readline.h"
# include "qapi/qmp/qstring.h"
# include "qapi/qmp/qstring.h"
# include "qom/object_interfaces.h"
# include "sysemu/block-backend.h"
# include "sysemu/block-backend.h"
# include "block/block_int.h"
# include "block/block_int.h"
# include "trace/control.h"
# include "trace/control.h"
@ -200,6 +201,8 @@ static void usage(const char *name)
" Usage: %s [-h] [-V] [-rsnm] [-f FMT] [-c STRING] ... [file] \n "
" Usage: %s [-h] [-V] [-rsnm] [-f FMT] [-c STRING] ... [file] \n "
" QEMU Disk exerciser \n "
" QEMU Disk exerciser \n "
" \n "
" \n "
" --object OBJECTDEF define an object such as 'secret' for \n "
" passwords and/or encryption keys \n "
" -c, --cmd STRING execute command with its arguments \n "
" -c, --cmd STRING execute command with its arguments \n "
" from the given string \n "
" from the given string \n "
" -f, --format FMT specifies the block driver to use \n "
" -f, --format FMT specifies the block driver to use \n "
@ -361,6 +364,20 @@ static void reenable_tty_echo(void)
qemu_set_tty_echo ( STDIN_FILENO , true ) ;
qemu_set_tty_echo ( STDIN_FILENO , true ) ;
}
}
enum {
OPTION_OBJECT = 256 ,
} ;
static QemuOptsList qemu_object_opts = {
. name = " object " ,
. implied_opt_name = " qom-type " ,
. head = QTAILQ_HEAD_INITIALIZER ( qemu_object_opts . head ) ,
. desc = {
{ }
} ,
} ;
int main ( int argc , char * * argv )
int main ( int argc , char * * argv )
{
{
int readonly = 0 ;
int readonly = 0 ;
@ -379,6 +396,7 @@ int main(int argc, char **argv)
{ " discard " , 1 , NULL , ' d ' } ,
{ " discard " , 1 , NULL , ' d ' } ,
{ " cache " , 1 , NULL , ' t ' } ,
{ " cache " , 1 , NULL , ' t ' } ,
{ " trace " , 1 , NULL , ' T ' } ,
{ " trace " , 1 , NULL , ' T ' } ,
{ " object " , 1 , NULL , OPTION_OBJECT } ,
{ NULL , 0 , NULL , 0 }
{ NULL , 0 , NULL , 0 }
} ;
} ;
int c ;
int c ;
@ -395,6 +413,7 @@ int main(int argc, char **argv)
qemu_init_exec_dir ( argv [ 0 ] ) ;
qemu_init_exec_dir ( argv [ 0 ] ) ;
module_call_init ( MODULE_INIT_QOM ) ;
module_call_init ( MODULE_INIT_QOM ) ;
qemu_add_opts ( & qemu_object_opts ) ;
bdrv_init ( ) ;
bdrv_init ( ) ;
while ( ( c = getopt_long ( argc , argv , sopt , lopt , & opt_index ) ) ! = - 1 ) {
while ( ( c = getopt_long ( argc , argv , sopt , lopt , & opt_index ) ) ! = - 1 ) {
@ -446,6 +465,14 @@ int main(int argc, char **argv)
case ' h ' :
case ' h ' :
usage ( progname ) ;
usage ( progname ) ;
exit ( 0 ) ;
exit ( 0 ) ;
case OPTION_OBJECT : {
QemuOpts * qopts = NULL ;
qopts = qemu_opts_parse_noisily ( & qemu_object_opts ,
optarg , true ) ;
if ( ! qopts ) {
exit ( 1 ) ;
}
} break ;
default :
default :
usage ( progname ) ;
usage ( progname ) ;
exit ( 1 ) ;
exit ( 1 ) ;
@ -462,6 +489,13 @@ int main(int argc, char **argv)
exit ( 1 ) ;
exit ( 1 ) ;
}
}
if ( qemu_opts_foreach ( & qemu_object_opts ,
user_creatable_add_opts_foreach ,
NULL , & local_error ) ) {
error_report_err ( local_error ) ;
exit ( 1 ) ;
}
/* initialize commands */
/* initialize commands */
qemuio_add_command ( & quit_cmd ) ;
qemuio_add_command ( & quit_cmd ) ;
qemuio_add_command ( & open_cmd ) ;
qemuio_add_command ( & open_cmd ) ;