virtual int get_arguments(int argc, char** argv, char** env) { int err = 0; if (argc > (optind)) { for (int argind = optind; argind < argc; ++argind) { if ((err = on_argument(argv[argind], argind-optind, argc, argv, env))) { break; } } } return err; }
rc_t foreach_argument( Args * args, KDirectory *dir, bool div_by_spotgrp, bool * empty, rc_t ( CC * on_argument ) ( const char * path, const char * spot_group, void * data ), void * data ) { uint32_t count; rc_t rc = ArgsParamCount( args, &count ); if ( rc != 0 ) { LOGERR( klogInt, rc, "ArgsParamCount() failed" ); } else { uint32_t idx; if ( empty != NULL ) { *empty = ( count == 0 ); } for ( idx = 0; idx < count && rc == 0; ++idx ) { const char *param = NULL; rc = ArgsParamValue( args, idx, ¶m ); if ( rc != 0 ) { LOGERR( klogInt, rc, "ArgsParamvalue() failed" ); } else { char * path = NULL; char * spot_group = NULL; rc = split_argument_into_path_and_readgroup( param, &path, &spot_group ); if ( rc == 0 && path != NULL ) { /* in case there is no spotgroup-override from the commandline AND the option to divide by spot-group is set, let spot_group point to an empty string ---> divide by original spot-group! */ if ( spot_group == NULL && div_by_spotgrp ) { spot_group = calloc( 1, 1 ); } #if TOOLS_USE_SRAPATH != 0 if ( !is_this_a_filesystem_path( path ) ) { rc = resolve_accession( dir, &path ); } #endif if ( rc == 0 ) { rc = on_argument( path, spot_group, data ); } free( path ); if ( spot_group != NULL ) free( spot_group ); } } } } return rc; }