2017-09-14 17:40:40 +00:00
/*
File autogenerated by gengetopt version 2.22 .6
generated with the following command :
2019-03-14 22:24:23 +00:00
/ usr / bin / gengetopt - - file - name = egk - tool - cmdline - - output - dir = .
2017-09-14 17:40:40 +00:00
The developers of gengetopt consider the fixed text that goes in all
gengetopt output files to be in the public domain :
we make no copyright claims on it .
*/
/* If we use autoconf. */
# ifdef HAVE_CONFIG_H
# include "config.h"
# endif
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# ifndef FIX_UNUSED
# define FIX_UNUSED(X) (void) (X) /* avoid warnings for unused params */
# endif
2019-03-14 22:24:23 +00:00
# include <getopt.h>
2017-09-14 17:40:40 +00:00
# include "egk-tool-cmdline.h"
const char * gengetopt_args_info_purpose = " " ;
const char * gengetopt_args_info_usage = " Usage: egk-tool [OPTIONS]... " ;
const char * gengetopt_args_info_versiontext = " " ;
const char * gengetopt_args_info_description = " " ;
const char * gengetopt_args_info_help [ ] = {
2018-12-05 00:38:54 +00:00
" -h, --help Print help and exit " ,
" -V, --version Print version and exit " ,
" -r, --reader=STRING Number of the reader to use. By default, the first \n reader with a present card is used. If the arguement \n is an ATR, the reader with a matching card will be \n chosen. " ,
" -v, --verbose Use (several times) to be more verbose " ,
2017-09-14 17:40:40 +00:00
" \n Health Care Application (HCA): " ,
2018-12-05 00:38:54 +00:00
" --pd Show 'Persönliche Versicherungsdaten' (XML) \n (default=off) " ,
" --vd Show 'Allgemeine Versicherungsdaten' (XML) \n (default=off) " ,
" --gvd Show 'Geschützte Versicherungsdaten' (XML) \n (default=off) " ,
" --vsd-status Show 'Versichertenstammdaten-Status' (default=off) " ,
2018-05-21 18:57:13 +00:00
" \n Report bugs to https://github.com/OpenSC/OpenSC/issues \n \n Written by Frank Morgner <frankmorgner@gmail.com> " ,
2017-09-14 17:40:40 +00:00
0
} ;
typedef enum { ARG_NO
, ARG_FLAG
2018-12-05 00:38:54 +00:00
, ARG_STRING
2017-09-14 17:40:40 +00:00
} cmdline_parser_arg_type ;
static
void clear_given ( struct gengetopt_args_info * args_info ) ;
static
void clear_args ( struct gengetopt_args_info * args_info ) ;
static int
cmdline_parser_internal ( int argc , char * * argv , struct gengetopt_args_info * args_info ,
struct cmdline_parser_params * params , const char * additional_error ) ;
static int
cmdline_parser_required2 ( struct gengetopt_args_info * args_info , const char * prog_name , const char * additional_error ) ;
static char *
gengetopt_strdup ( const char * s ) ;
static
void clear_given ( struct gengetopt_args_info * args_info )
{
args_info - > help_given = 0 ;
args_info - > version_given = 0 ;
args_info - > reader_given = 0 ;
args_info - > verbose_given = 0 ;
args_info - > pd_given = 0 ;
args_info - > vd_given = 0 ;
args_info - > gvd_given = 0 ;
args_info - > vsd_status_given = 0 ;
}
static
void clear_args ( struct gengetopt_args_info * args_info )
{
FIX_UNUSED ( args_info ) ;
2018-12-05 00:38:54 +00:00
args_info - > reader_arg = NULL ;
2017-09-14 17:40:40 +00:00
args_info - > reader_orig = NULL ;
args_info - > pd_flag = 0 ;
args_info - > vd_flag = 0 ;
args_info - > gvd_flag = 0 ;
args_info - > vsd_status_flag = 0 ;
}
static
void init_args_info ( struct gengetopt_args_info * args_info )
{
args_info - > help_help = gengetopt_args_info_help [ 0 ] ;
args_info - > version_help = gengetopt_args_info_help [ 1 ] ;
args_info - > reader_help = gengetopt_args_info_help [ 2 ] ;
args_info - > verbose_help = gengetopt_args_info_help [ 3 ] ;
args_info - > verbose_min = 0 ;
args_info - > verbose_max = 0 ;
args_info - > pd_help = gengetopt_args_info_help [ 5 ] ;
args_info - > vd_help = gengetopt_args_info_help [ 6 ] ;
args_info - > gvd_help = gengetopt_args_info_help [ 7 ] ;
args_info - > vsd_status_help = gengetopt_args_info_help [ 8 ] ;
}
void
cmdline_parser_print_version ( void )
{
printf ( " %s %s \n " ,
( strlen ( CMDLINE_PARSER_PACKAGE_NAME ) ? CMDLINE_PARSER_PACKAGE_NAME : CMDLINE_PARSER_PACKAGE ) ,
CMDLINE_PARSER_VERSION ) ;
if ( strlen ( gengetopt_args_info_versiontext ) > 0 )
printf ( " \n %s \n " , gengetopt_args_info_versiontext ) ;
}
static void print_help_common ( void ) {
cmdline_parser_print_version ( ) ;
if ( strlen ( gengetopt_args_info_purpose ) > 0 )
printf ( " \n %s \n " , gengetopt_args_info_purpose ) ;
if ( strlen ( gengetopt_args_info_usage ) > 0 )
printf ( " \n %s \n " , gengetopt_args_info_usage ) ;
printf ( " \n " ) ;
if ( strlen ( gengetopt_args_info_description ) > 0 )
printf ( " %s \n \n " , gengetopt_args_info_description ) ;
}
void
cmdline_parser_print_help ( void )
{
int i = 0 ;
print_help_common ( ) ;
while ( gengetopt_args_info_help [ i ] )
printf ( " %s \n " , gengetopt_args_info_help [ i + + ] ) ;
}
void
cmdline_parser_init ( struct gengetopt_args_info * args_info )
{
clear_given ( args_info ) ;
clear_args ( args_info ) ;
init_args_info ( args_info ) ;
}
void
cmdline_parser_params_init ( struct cmdline_parser_params * params )
{
if ( params )
{
params - > override = 0 ;
params - > initialize = 1 ;
params - > check_required = 1 ;
params - > check_ambiguity = 0 ;
params - > print_errors = 1 ;
}
}
struct cmdline_parser_params *
cmdline_parser_params_create ( void )
{
struct cmdline_parser_params * params =
( struct cmdline_parser_params * ) malloc ( sizeof ( struct cmdline_parser_params ) ) ;
cmdline_parser_params_init ( params ) ;
return params ;
}
static void
free_string_field ( char * * s )
{
if ( * s )
{
free ( * s ) ;
* s = 0 ;
}
}
static void
cmdline_parser_release ( struct gengetopt_args_info * args_info )
{
2018-12-05 00:38:54 +00:00
free_string_field ( & ( args_info - > reader_arg ) ) ;
2017-09-14 17:40:40 +00:00
free_string_field ( & ( args_info - > reader_orig ) ) ;
clear_given ( args_info ) ;
}
static void
write_into_file ( FILE * outfile , const char * opt , const char * arg , const char * values [ ] )
{
FIX_UNUSED ( values ) ;
if ( arg ) {
fprintf ( outfile , " %s= \" %s \" \n " , opt , arg ) ;
} else {
fprintf ( outfile , " %s \n " , opt ) ;
}
}
static void
write_multiple_into_file ( FILE * outfile , int len , const char * opt , char * * arg , const char * values [ ] )
{
int i ;
for ( i = 0 ; i < len ; + + i )
write_into_file ( outfile , opt , ( arg ? arg [ i ] : 0 ) , values ) ;
}
int
cmdline_parser_dump ( FILE * outfile , struct gengetopt_args_info * args_info )
{
int i = 0 ;
if ( ! outfile )
{
fprintf ( stderr , " %s: cannot dump options to stream \n " , CMDLINE_PARSER_PACKAGE ) ;
return EXIT_FAILURE ;
}
if ( args_info - > help_given )
write_into_file ( outfile , " help " , 0 , 0 ) ;
if ( args_info - > version_given )
write_into_file ( outfile , " version " , 0 , 0 ) ;
if ( args_info - > reader_given )
write_into_file ( outfile , " reader " , args_info - > reader_orig , 0 ) ;
write_multiple_into_file ( outfile , args_info - > verbose_given , " verbose " , 0 , 0 ) ;
if ( args_info - > pd_given )
write_into_file ( outfile , " pd " , 0 , 0 ) ;
if ( args_info - > vd_given )
write_into_file ( outfile , " vd " , 0 , 0 ) ;
if ( args_info - > gvd_given )
write_into_file ( outfile , " gvd " , 0 , 0 ) ;
if ( args_info - > vsd_status_given )
write_into_file ( outfile , " vsd-status " , 0 , 0 ) ;
i = EXIT_SUCCESS ;
return i ;
}
int
cmdline_parser_file_save ( const char * filename , struct gengetopt_args_info * args_info )
{
FILE * outfile ;
int i = 0 ;
outfile = fopen ( filename , " w " ) ;
if ( ! outfile )
{
fprintf ( stderr , " %s: cannot open file for writing: %s \n " , CMDLINE_PARSER_PACKAGE , filename ) ;
return EXIT_FAILURE ;
}
i = cmdline_parser_dump ( outfile , args_info ) ;
fclose ( outfile ) ;
return i ;
}
void
cmdline_parser_free ( struct gengetopt_args_info * args_info )
{
cmdline_parser_release ( args_info ) ;
}
/** @brief replacement of strdup, which is not standard */
char *
gengetopt_strdup ( const char * s )
{
char * result = 0 ;
if ( ! s )
return result ;
result = ( char * ) malloc ( strlen ( s ) + 1 ) ;
if ( result = = ( char * ) 0 )
return ( char * ) 0 ;
strcpy ( result , s ) ;
return result ;
}
static int
check_multiple_option_occurrences ( const char * prog_name , unsigned int option_given , unsigned int min , unsigned int max , const char * option_desc ) ;
int
check_multiple_option_occurrences ( const char * prog_name , unsigned int option_given , unsigned int min , unsigned int max , const char * option_desc )
{
int error_occurred = 0 ;
if ( option_given & & ( min > 0 | | max > 0 ) )
{
if ( min > 0 & & max > 0 )
{
if ( min = = max )
{
/* specific occurrences */
if ( option_given ! = ( unsigned int ) min )
{
fprintf ( stderr , " %s: %s option occurrences must be %d \n " ,
prog_name , option_desc , min ) ;
error_occurred = 1 ;
}
}
else if ( option_given < ( unsigned int ) min
| | option_given > ( unsigned int ) max )
{
/* range occurrences */
fprintf ( stderr , " %s: %s option occurrences must be between %d and %d \n " ,
prog_name , option_desc , min , max ) ;
error_occurred = 1 ;
}
}
else if ( min > 0 )
{
/* at least check */
if ( option_given < min )
{
fprintf ( stderr , " %s: %s option occurrences must be at least %d \n " ,
prog_name , option_desc , min ) ;
error_occurred = 1 ;
}
}
else if ( max > 0 )
{
/* at most check */
if ( option_given > max )
{
fprintf ( stderr , " %s: %s option occurrences must be at most %d \n " ,
prog_name , option_desc , max ) ;
error_occurred = 1 ;
}
}
}
return error_occurred ;
}
int
cmdline_parser ( int argc , char * * argv , struct gengetopt_args_info * args_info )
{
return cmdline_parser2 ( argc , argv , args_info , 0 , 1 , 1 ) ;
}
int
cmdline_parser_ext ( int argc , char * * argv , struct gengetopt_args_info * args_info ,
struct cmdline_parser_params * params )
{
int result ;
result = cmdline_parser_internal ( argc , argv , args_info , params , 0 ) ;
if ( result = = EXIT_FAILURE )
{
cmdline_parser_free ( args_info ) ;
exit ( EXIT_FAILURE ) ;
}
return result ;
}
int
cmdline_parser2 ( int argc , char * * argv , struct gengetopt_args_info * args_info , int override , int initialize , int check_required )
{
int result ;
struct cmdline_parser_params params ;
params . override = override ;
params . initialize = initialize ;
params . check_required = check_required ;
params . check_ambiguity = 0 ;
params . print_errors = 1 ;
result = cmdline_parser_internal ( argc , argv , args_info , & params , 0 ) ;
if ( result = = EXIT_FAILURE )
{
cmdline_parser_free ( args_info ) ;
exit ( EXIT_FAILURE ) ;
}
return result ;
}
int
cmdline_parser_required ( struct gengetopt_args_info * args_info , const char * prog_name )
{
int result = EXIT_SUCCESS ;
if ( cmdline_parser_required2 ( args_info , prog_name , 0 ) > 0 )
result = EXIT_FAILURE ;
if ( result = = EXIT_FAILURE )
{
cmdline_parser_free ( args_info ) ;
exit ( EXIT_FAILURE ) ;
}
return result ;
}
int
cmdline_parser_required2 ( struct gengetopt_args_info * args_info , const char * prog_name , const char * additional_error )
{
int error_occurred = 0 ;
FIX_UNUSED ( additional_error ) ;
/* checks for required options */
if ( check_multiple_option_occurrences ( prog_name , args_info - > verbose_given , args_info - > verbose_min , args_info - > verbose_max , " '--verbose' ('-v') " ) )
error_occurred = 1 ;
/* checks for dependences among options */
return error_occurred ;
}
static char * package_name = 0 ;
/**
* @ brief updates an option
* @ param field the generic pointer to the field to update
* @ param orig_field the pointer to the orig field
* @ param field_given the pointer to the number of occurrence of this option
* @ param prev_given the pointer to the number of occurrence already seen
* @ param value the argument for this option ( if null no arg was specified )
* @ param possible_values the possible values for this option ( if specified )
* @ param default_value the default value ( in case the option only accepts fixed values )
* @ param arg_type the type of this option
* @ param check_ambiguity @ see cmdline_parser_params . check_ambiguity
* @ param override @ see cmdline_parser_params . override
* @ param no_free whether to free a possible previous value
* @ param multiple_option whether this is a multiple option
* @ param long_opt the corresponding long option
* @ param short_opt the corresponding short option ( or ' - ' if none )
* @ param additional_error possible further error specification
*/
static
int update_arg ( void * field , char * * orig_field ,
unsigned int * field_given , unsigned int * prev_given ,
char * value , const char * possible_values [ ] ,
const char * default_value ,
cmdline_parser_arg_type arg_type ,
int check_ambiguity , int override ,
int no_free , int multiple_option ,
const char * long_opt , char short_opt ,
const char * additional_error )
{
char * stop_char = 0 ;
const char * val = value ;
int found ;
2018-12-05 00:38:54 +00:00
char * * string_field ;
2017-09-14 17:40:40 +00:00
FIX_UNUSED ( field ) ;
stop_char = 0 ;
found = 0 ;
if ( ! multiple_option & & prev_given & & ( * prev_given | | ( check_ambiguity & & * field_given ) ) )
{
if ( short_opt ! = ' - ' )
fprintf ( stderr , " %s: `--%s' (`-%c') option given more than once%s \n " ,
package_name , long_opt , short_opt ,
( additional_error ? additional_error : " " ) ) ;
else
fprintf ( stderr , " %s: `--%s' option given more than once%s \n " ,
package_name , long_opt ,
( additional_error ? additional_error : " " ) ) ;
return 1 ; /* failure */
}
FIX_UNUSED ( default_value ) ;
if ( field_given & & * field_given & & ! override )
return 0 ;
if ( prev_given )
( * prev_given ) + + ;
if ( field_given )
( * field_given ) + + ;
if ( possible_values )
val = possible_values [ found ] ;
switch ( arg_type ) {
case ARG_FLAG :
* ( ( int * ) field ) = ! * ( ( int * ) field ) ;
break ;
2018-12-05 00:38:54 +00:00
case ARG_STRING :
if ( val ) {
string_field = ( char * * ) field ;
if ( ! no_free & & * string_field )
free ( * string_field ) ; /* free previous string */
* string_field = gengetopt_strdup ( val ) ;
}
2017-09-14 17:40:40 +00:00
break ;
default :
break ;
} ;
/* store the original value */
switch ( arg_type ) {
case ARG_NO :
case ARG_FLAG :
break ;
default :
if ( value & & orig_field ) {
if ( no_free ) {
* orig_field = value ;
} else {
if ( * orig_field )
free ( * orig_field ) ; /* free previous string */
* orig_field = gengetopt_strdup ( value ) ;
}
}
} ;
return 0 ; /* OK */
}
int
cmdline_parser_internal (
int argc , char * * argv , struct gengetopt_args_info * args_info ,
struct cmdline_parser_params * params , const char * additional_error )
{
int c ; /* Character of the parsed option. */
int error_occurred = 0 ;
struct gengetopt_args_info local_args_info ;
int override ;
int initialize ;
int check_required ;
int check_ambiguity ;
package_name = argv [ 0 ] ;
override = params - > override ;
initialize = params - > initialize ;
check_required = params - > check_required ;
check_ambiguity = params - > check_ambiguity ;
if ( initialize )
cmdline_parser_init ( args_info ) ;
cmdline_parser_init ( & local_args_info ) ;
optarg = 0 ;
optind = 0 ;
opterr = params - > print_errors ;
optopt = ' ? ' ;
while ( 1 )
{
int option_index = 0 ;
static struct option long_options [ ] = {
{ " help " , 0 , NULL , ' h ' } ,
{ " version " , 0 , NULL , ' V ' } ,
{ " reader " , 1 , NULL , ' r ' } ,
{ " verbose " , 0 , NULL , ' v ' } ,
{ " pd " , 0 , NULL , 0 } ,
{ " vd " , 0 , NULL , 0 } ,
{ " gvd " , 0 , NULL , 0 } ,
{ " vsd-status " , 0 , NULL , 0 } ,
{ 0 , 0 , 0 , 0 }
} ;
2019-03-14 22:24:23 +00:00
c = getopt_long ( argc , argv , " hVr:v " , long_options , & option_index ) ;
2017-09-14 17:40:40 +00:00
if ( c = = - 1 ) break ; /* Exit from `while (1)' loop. */
switch ( c )
{
case ' h ' : /* Print help and exit. */
cmdline_parser_print_help ( ) ;
cmdline_parser_free ( & local_args_info ) ;
exit ( EXIT_SUCCESS ) ;
case ' V ' : /* Print version and exit. */
cmdline_parser_print_version ( ) ;
cmdline_parser_free ( & local_args_info ) ;
exit ( EXIT_SUCCESS ) ;
2018-12-05 00:38:54 +00:00
case ' r ' : /* Number of the reader to use. By default, the first reader with a present card is used. If the arguement is an ATR, the reader with a matching card will be chosen.. */
2017-09-14 17:40:40 +00:00
if ( update_arg ( ( void * ) & ( args_info - > reader_arg ) ,
& ( args_info - > reader_orig ) , & ( args_info - > reader_given ) ,
2018-12-05 00:38:54 +00:00
& ( local_args_info . reader_given ) , optarg , 0 , 0 , ARG_STRING ,
2017-09-14 17:40:40 +00:00
check_ambiguity , override , 0 , 0 ,
" reader " , ' r ' ,
additional_error ) )
goto failure ;
break ;
case ' v ' : /* Use (several times) to be more verbose. */
local_args_info . verbose_given + + ;
break ;
case 0 : /* Long option with no short option */
/* Show 'Persönliche Versicherungsdaten' (XML). */
if ( strcmp ( long_options [ option_index ] . name , " pd " ) = = 0 )
{
if ( update_arg ( ( void * ) & ( args_info - > pd_flag ) , 0 , & ( args_info - > pd_given ) ,
& ( local_args_info . pd_given ) , optarg , 0 , 0 , ARG_FLAG ,
check_ambiguity , override , 1 , 0 , " pd " , ' - ' ,
additional_error ) )
goto failure ;
}
/* Show 'Allgemeine Versicherungsdaten' (XML). */
else if ( strcmp ( long_options [ option_index ] . name , " vd " ) = = 0 )
{
if ( update_arg ( ( void * ) & ( args_info - > vd_flag ) , 0 , & ( args_info - > vd_given ) ,
& ( local_args_info . vd_given ) , optarg , 0 , 0 , ARG_FLAG ,
check_ambiguity , override , 1 , 0 , " vd " , ' - ' ,
additional_error ) )
goto failure ;
}
/* Show 'Geschützte Versicherungsdaten' (XML). */
else if ( strcmp ( long_options [ option_index ] . name , " gvd " ) = = 0 )
{
if ( update_arg ( ( void * ) & ( args_info - > gvd_flag ) , 0 , & ( args_info - > gvd_given ) ,
& ( local_args_info . gvd_given ) , optarg , 0 , 0 , ARG_FLAG ,
check_ambiguity , override , 1 , 0 , " gvd " , ' - ' ,
additional_error ) )
goto failure ;
}
/* Show 'Versichertenstammdaten-Status'. */
else if ( strcmp ( long_options [ option_index ] . name , " vsd-status " ) = = 0 )
{
if ( update_arg ( ( void * ) & ( args_info - > vsd_status_flag ) , 0 , & ( args_info - > vsd_status_given ) ,
& ( local_args_info . vsd_status_given ) , optarg , 0 , 0 , ARG_FLAG ,
check_ambiguity , override , 1 , 0 , " vsd-status " , ' - ' ,
additional_error ) )
goto failure ;
}
break ;
case ' ? ' : /* Invalid option. */
/* `getopt_long' already printed an error message. */
goto failure ;
default : /* bug: option not considered. */
fprintf ( stderr , " %s: option unknown: %c%s \n " , CMDLINE_PARSER_PACKAGE , c , ( additional_error ? additional_error : " " ) ) ;
abort ( ) ;
} /* switch */
} /* while */
args_info - > verbose_given + = local_args_info . verbose_given ;
local_args_info . verbose_given = 0 ;
if ( check_required )
{
error_occurred + = cmdline_parser_required2 ( args_info , argv [ 0 ] , additional_error ) ;
}
cmdline_parser_release ( & local_args_info ) ;
if ( error_occurred )
return ( EXIT_FAILURE ) ;
return 0 ;
failure :
cmdline_parser_release ( & local_args_info ) ;
return ( EXIT_FAILURE ) ;
}