static rc_t get_max_remove( const Args * args, uint64_t * max_rem ) { uint32_t count; rc_t rc = ArgsOptionCount( args, OPTION_MAXREM, &count ); if ( rc != 0 ) { PLOGERR( klogErr, ( klogErr, rc, "ArgsOptionCount( $(option) ) failed in $(func)", "option=%s,func=%s", OPTION_MAXREM, __func__ ) ); } else if ( count > 0 ) { const char * s = NULL; rc = ArgsOptionValue( args, OPTION_MAXREM, 0, &s ); if ( rc != 0 ) { PLOGERR( klogErr, ( klogErr, rc, "ArgsOptionValue( $(option), 0 ) failed in $(func)", "option=%s,func=%s", OPTION_MAXREM, __func__ ) ); } else if ( s != NULL ) { char *endp; *max_rem = strtou64( s, &endp, 10 ); } } return rc; }
static rc_t cg_dump_get_uint32t_option( Args * args, const char * name, uint32_t * value, bool * found ) { uint32_t count; rc_t rc = ArgsOptionCount( args, name, &count ); if ( rc != 0 ) { (void)PLOGERR( klogErr, ( klogErr, rc, "cannot detect count of $(name) option", "name=%s", name ) ); } else { *found = ( count > 0 ); } if ( rc == 0 && ( *found ) ) { const char * s; rc = ArgsOptionValue( args, name, 0, &s ); if ( rc != 0 ) { (void)PLOGERR( klogErr, ( klogErr, rc, "cannot detect value of $(name) option", "name=%s", name ) ); } else { *value = atoi( s ); } } return rc; }
rc_t get_ro( Args * args, const char * name, const int32_t ** RO, uint32_t * ro_count ) { rc_t rc = ArgsOptionCount( args, name, ro_count ); *RO = NULL; if ( ( rc == 0 )&&( *ro_count > 0 ) ) { *RO = calloc( sizeof **RO, *ro_count ); if ( *RO == NULL ) rc = RC( rcApp, rcNoTarg, rcConstructing, rcMemory, rcExhausted ); else { uint32_t i; for ( i = 0; i < *ro_count && rc == 0; ++i ) { const char * s; rc = ArgsOptionValue( args, name, i, &s ); if ( rc == 0 ) { ((int32_t*)(*RO))[i] = atoi( s ); } } } } return rc; }
rc_t init_ref_regions( BSTree * tree, Args * args ) { uint32_t count; rc_t rc; BSTreeInit( tree ); rc = ArgsOptionCount( args, OPTION_REF, &count ); if ( rc != 0 ) { LOGERR( klogInt, rc, "ArgsOptionCount() failed" ); } else { uint32_t i; for ( i = 0; i < count && rc == 0; ++i ) { const char * s; rc = ArgsOptionValue( args, OPTION_REF, i, &s ); if ( rc != 0 ) LOGERR( klogInt, rc, "ArgsOptionValue() failed" ); else rc = parse_and_add_region( tree, s ); } } return rc; }
static rc_t gather_matepair_distances( Args * args, samdump_opts * opts ) { uint32_t count; rc_t rc = ArgsOptionCount( args, OPT_MATE_DIST, &count ); if ( rc != 0 ) { (void)PLOGERR( klogErr, ( klogErr, rc, "error counting comandline option '$(t)'", "t=%s", OPT_REGION ) ); } else if ( count > 0 ) { uint32_t i; VectorInit( &opts->mp_dist, 0, 10 ); for ( i = 0; i < count && rc == 0; ++i ) { const char * s; rc = ArgsOptionValue( args, OPT_MATE_DIST, i, &s ); if ( rc != 0 ) { (void)PLOGERR( klogErr, ( klogErr, rc, "error retrieving comandline option '$(t)'", "t=%s", OPT_MATE_DIST ) ); } else rc = parse_and_add_matepair_dist( &opts->mp_dist, s ); } opts->use_matepair_filter = ( VectorLength( &opts->mp_dist ) > 0 ); } return rc; }
static rc_t gather_region_options( Args * args, samdump_opts * opts ) { uint32_t count; rc_t rc = ArgsOptionCount( args, OPT_REGION, &count ); if ( rc != 0 ) { (void)PLOGERR( klogErr, ( klogErr, rc, "error counting comandline option '$(t)'", "t=%s", OPT_REGION ) ); } else if ( count > 0 ) { uint32_t i; BSTreeInit( &opts->regions ); for ( i = 0; i < count && rc == 0; ++i ) { const char * s; rc = ArgsOptionValue( args, OPT_REGION, i, &s ); if ( rc != 0 ) { (void)PLOGERR( klogErr, ( klogErr, rc, "error retrieving comandline option '$(t)'", "t=%s", OPT_REGION ) ); } else rc = parse_and_add_region( &opts->regions, s ); } if ( rc == 0 ) { check_ref_regions( &opts->regions ); opts->region_count = count_ref_regions( &opts->regions ); } } return rc; }
static KRepCategory get_repo_select( const Args * args, const char * name ) { KRepCategory res = krepBadCategory; uint32_t count; rc_t rc = ArgsOptionCount( args, name, &count ); if ( rc != 0 ) { PLOGERR( klogErr, ( klogErr, rc, "ArgsOptionCount() failed in $(func)", "func=%s", __func__ ) ); } else if ( count > 0 ) { const char * s = NULL; rc = ArgsOptionValue( args, name, 0, &s ); if ( rc == 0 && s != NULL ) { if ( string_cmp_1 ( s, "user" ) ) res = krepUserCategory; else if ( string_cmp_1 ( s, "site" ) ) res = krepSiteCategory; else if ( string_cmp_1 ( s, "rem" ) ) res = krepRemoteCategory; } } return res; }
static uint64_t ArgsGetOptU64 ( Args *self, const ctx_t *ctx, const char *optname, uint32_t *count ) { rc_t rc; uint64_t val = 0; uint32_t dummy; if ( count == NULL ) count = & dummy; rc = ArgsOptionCount ( self, optname, count ); if ( rc == 0 && * count != 0 ) { const char *str; rc = ArgsOptionValue ( self, optname, 0, & str ); if ( rc != 0 ) INTERNAL_ERROR ( rc, "failed to retrieve '%s' parameter", optname ); else { char *end; val = strtou64 ( str, & end, 0 ); if ( end [ 0 ] != 0 ) { rc = RC ( rcExe, rcArgv, rcParsing, rcParam, rcIncorrect ); ERROR ( rc, "bad '%s' parameter: '%s'", optname, str ); } } } return val; }
static rc_t getArgValue(Args *const args, char const *name, int index, char const **result) { void const *value; rc_t const rc = ArgsOptionValue(args, name, index, &value); if (rc) return rc; free((void *)*result); *result = strdup(value); assert(*result); return 0; }
static rc_t get_str_option( const Args * args, const char * option_name, const char ** dst, const char * default_value ) { uint32_t count; rc_t rc = ArgsOptionCount( args, option_name, &count ); if ( ( rc == 0 )&&( count > 0 ) ) rc = ArgsOptionValue( args, option_name, 0, (const void **)dst ); else (*dst) = string_dup_measure ( default_value, NULL ); return rc; }
static const char* get_str_option( const Args *my_args, const char *name ) { const char* res = NULL; uint32_t count; rc_t rc = ArgsOptionCount( my_args, name, &count ); if ( ( rc == 0 )&&( count > 0 ) ) { ArgsOptionValue( my_args, name, 0, (const void **)&res ); } return res; }
LIB_EXPORT rc_t CC XMLLogger_Make(const XMLLogger** cself, KDirectory* dir, const Args *args) { rc_t rc = 0; const char* path = NULL, *sfd = NULL; int fd = -1; uint32_t count; if( (rc = ArgsOptionCount(args, XMLLogger_Args[eopt_file].name, &count)) != 0 || count > 1 ) { rc = rc ? rc : RC(rcApp, rcArgv, rcParsing, rcParam, rcExcessive); } else if( count > 0 && (rc = ArgsOptionValue(args, XMLLogger_Args[eopt_file].name, 0, (const void **)&path)) != 0 ) { } else if( (rc = ArgsOptionCount(args, XMLLogger_Args[eopt_fd].name, &count)) != 0 || count > 1 ) { rc = rc ? rc : RC(rcApp, rcArgv, rcParsing, rcParam, rcExcessive); } else if( count > 0 && (rc = ArgsOptionValue(args, XMLLogger_Args[eopt_fd].name, 0, (const void **)&sfd)) != 0 ) { } else { do { long val = 0; char* end = NULL; if( sfd != NULL ) { if( path != NULL ) { rc = RC(rcApp, rcArgv, rcParsing, rcParam, rcExcessive); break; } errno = 0; val = strtol(sfd, &end, 10); if( errno != 0 || sfd == end || *end != '\0' || val < 0 || val > INT_MAX ) { rc = RC(rcApp, rcArgv, rcReading, rcParam, rcInvalid); break; } fd = val; } rc = XMLLogger_Make2(cself, dir, path, fd); } while( false ); } return rc; }
static uint32_t get_uint32_option( const Args *my_args, const char *name, const uint32_t def ) { uint32_t count, res = def; rc_t rc = ArgsOptionCount( my_args, name, &count ); if ( ( rc == 0 )&&( count > 0 ) ) { const char *s; rc = ArgsOptionValue( my_args, name, 0, &s ); if ( rc == 0 ) res = strtoul( s, NULL, 10 ); } return res; }
static void append_str_options( const Args *my_args, const char *name, VNamelist *dst ) { uint32_t count; rc_t rc = ArgsOptionCount( my_args, name, &count ); if ( ( rc == 0 )&&( count > 0 ) ) { uint32_t idx; for ( idx=0; idx<count; ++idx ) { const char* s; if ( ArgsOptionValue( my_args, name, idx, (const void **)&s ) == 0 ) VNamelistAppend( dst, s ); } } }
static const char *ArgsGetOptStr ( Args *self, const ctx_t *ctx, const char *optname, uint32_t *count ) { rc_t rc; const char *val = NULL; uint32_t dummy; if ( count == NULL ) count = & dummy; rc = ArgsOptionCount ( self, optname, count ); if ( rc == 0 && * count != 0 ) { rc = ArgsOptionValue ( self, optname, 0, & val ); if ( rc != 0 ) INTERNAL_ERROR ( rc, "failed to retrieve '%s' parameter", optname ); } return val; }
rc_t get_str_option( const Args *args, const char *name, const char ** res ) { uint32_t count; rc_t rc = ArgsOptionCount( args, name, &count ); *res = NULL; if ( rc != 0 ) LOGERR( klogInt, rc, "ArgsOptionCount() failed" ); else { if ( count > 0 ) { rc = ArgsOptionValue( args, name, 0, res ); if ( rc != 0 ) { LOGERR( klogInt, rc, "ArgsOptionValue() failed" ); } } } return rc; }
static rc_t get_str_option( Args * args, const char * name, const char ** s ) { uint32_t count; rc_t rc = ArgsOptionCount( args, name, &count ); *s = NULL; if ( rc != 0 ) { (void)PLOGERR( klogErr, ( klogErr, rc, "error counting comandline option '$(t)'", "t=%s", name ) ); } else if ( count > 0 ) { rc = ArgsOptionValue( args, name, 0, s ); if ( rc != 0 ) { (void)PLOGERR( klogErr, ( klogErr, rc, "error retrieving comandline option '$(t)'", "t=%s", name ) ); } } return rc; }
rc_t get_uint32_array( const Args *args, const char *name, uint32_t *res, uint32_t *count ) { uint32_t max = *count; rc_t rc = ArgsOptionCount( args, name, count ); if ( rc != 0 ) LOGERR( klogInt, rc, "ArgsOptionCount() failed" ); else { uint32_t i; if ( *count > max ) *count = max; for ( i = 0; i < *count && rc == 0; ++ i ) { const char * s; rc = ArgsOptionValue( args, name, i, &s ); if ( rc == 0 ) *(res++) = atoi( s ); } } return rc; }
rc_t get_slices( const Args * args, const char *option, Vector * slices ) { uint32_t count, i; rc_t rc = ArgsOptionCount( args, option, &count ); for ( i = 0; i < count && rc == 0; ++i ) { const char * value; rc = ArgsOptionValue( args, option, i, ( const void ** )&value ); if ( rc == 0 && value != NULL ) { String S; StringInitCString( &S, value ); { slice * s = make_slice_from_str( &S ); rc = VectorAppend( slices, NULL, s ); if ( rc != 0 ) release_slice( s ); } } } return rc; }
rc_t CC Args_parse_inf_file( Args * args, const char * file_option ) { uint32_t count; rc_t rc = ArgsOptionCount( args, file_option, &count ); if ( rc != 0 ) LOGERR( klogInt, rc, "ArgsOptionCount() failed" ); else if ( count > 0 ) { uint32_t count2 = 0; do { uint32_t idx; for ( idx = count2; idx < count && rc == 0; ++idx ) { const char *filename; rc = ArgsOptionValue( args, file_option, idx, (const void **)&filename ); if ( rc != 0 ) LOGERR( klogInt, rc, "ArgsOptionValue() failed" ); else if ( filename != NULL ) { int argc; char ** argv; rc = Args_tokenize_file_into_argv( filename, &argc, &argv ); if ( rc == 0 && argv != NULL && argc > 0 ) { rc = ArgsParse ( args, argc, argv ); Args_free_token_argv( argc, argv ); } } } count2 = count; rc = ArgsOptionCount( args, file_option, &count ); if ( rc != 0 ) LOGERR( klogInt, rc, "ArgsOptionCount() failed" ); } while ( rc == 0 && count > count2 ); } return rc; }
static rc_t get_user_repo_name( const Args * args, const char ** name ) { uint32_t count; rc_t rc = ArgsOptionCount( args, OPTION_URNAME, &count ); if ( rc != 0 ) { PLOGERR( klogErr, ( klogErr, rc, "ArgsOptionCount( $(option) ) failed in $(func)", "option=%s,func=%s", OPTION_URNAME, __func__ ) ); } else if ( count > 0 ) { const char * s = NULL; rc = ArgsOptionValue( args, OPTION_URNAME, 0, &s ); if ( rc != 0 ) { PLOGERR( klogErr, ( klogErr, rc, "ArgsOptionValue( $(option), 0 ) failed in $(func)", "option=%s,func=%s", OPTION_URNAME, __func__ ) ); } else if ( s != NULL ) *name = string_dup_measure ( s, NULL ); } return rc; }
rc_t CC KMain (int argc, char * argv[]) { Args * args; rc_t rc; unsigned n_aligned = 0; unsigned n_unalgnd = 0; char *aligned[256]; char *unalgnd[256]; char *name_buffer = NULL; unsigned next_name = 0; unsigned nbsz = 0; char const *value; char *dummy; const XMLLogger* xml_logger = NULL; memset(&G, 0, sizeof(G)); G.mode = mode_Archive; G.maxSeqLen = TableWriterRefSeq_MAX_SEQ_LEN; G.schemaPath = SCHEMAFILE; G.omit_aligned_reads = true; G.omit_reference_reads = true; G.minMapQual = 0; /* accept all */ G.tmpfs = "/tmp"; #if _ARCH_BITS == 32 G.cache_size = ( size_t ) 1 << 30; #else G.cache_size = ( size_t ) 10 << 30; #endif G.maxErrCount = 1000; G.minMatchCount = 10; set_pid(); rc = ArgsMakeAndHandle (&args, argc, argv, 2, Options, sizeof Options / sizeof (OptDef), XMLLogger_Args, XMLLogger_ArgsQty); while (rc == 0) { uint32_t pcount; if( (rc = XMLLogger_Make(&xml_logger, NULL, args)) != 0 ) { break; } rc = ArgsOptionCount(args, option_only_verify, &pcount); if (rc) break; G.onlyVerifyReferences = (pcount > 0); rc = ArgsOptionCount(args, option_no_verify, &pcount); if (rc) break; G.noVerifyReferences = (pcount > 0); rc = ArgsOptionCount(args, option_use_qual, &pcount); if (rc) break; G.useQUAL = (pcount > 0); rc = ArgsOptionCount(args, option_ref_config, &pcount); if (rc) break; G.limit2config = (pcount > 0); rc = ArgsOptionCount(args, OPTION_REF_FILE, &pcount); if (rc) break; G.refFiles = calloc(pcount + 1, sizeof(*(G.refFiles))); if( !G.refFiles ) { rc = RC(rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted); break; } while(pcount-- > 0) { rc = ArgsOptionValue(args, OPTION_REF_FILE, pcount, &G.refFiles[pcount]); if (rc) break; } rc = ArgsOptionCount (args, OPTION_TMPFS, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, OPTION_TMPFS, 0, &G.tmpfs); if (rc) break; } else if (pcount > 1) { rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive); OUTMSG (("Single parameter required\n")); MiniUsage (args); break; } rc = ArgsOptionCount (args, OPTION_INPUT, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, OPTION_INPUT, 0, &G.inpath); if (rc) break; } else if (pcount > 1) { rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive); OUTMSG (("Single input parameter required\n")); MiniUsage (args); break; } rc = ArgsOptionCount (args, option_ref_filter, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, option_ref_filter, 0, &G.refFilter); if (rc) break; } else if (pcount > 1) { rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive); OUTMSG (("Single parameter required\n")); MiniUsage (args); break; } rc = ArgsOptionCount (args, OPTION_CONFIG, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, OPTION_CONFIG, 0, &G.refXRefPath); if (rc) break; } else if (pcount > 1) { rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive); OUTMSG (("Single input parameter required\n")); MiniUsage (args); break; } rc = ArgsOptionCount (args, OPTION_OUTPUT, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, OPTION_OUTPUT, 0, &G.outpath); if (rc) break; } else if (pcount > 1) { rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive); OUTMSG (("Single output parameter required\n")); MiniUsage (args); break; } else if (!G.onlyVerifyReferences) { rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcInsufficient); OUTMSG (("Output parameter required\n")); MiniUsage (args); break; } rc = ArgsOptionCount (args, OPTION_MINMAPQ, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, OPTION_MINMAPQ, 0, &value); if (rc) break; G.minMapQual = strtoul(value, &dummy, 0); } rc = ArgsOptionCount (args, OPTION_QCOMP, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, OPTION_QCOMP, 0, &G.QualQuantizer); if (rc) break; } rc = ArgsOptionCount (args, option_edit_aligned_qual, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, option_edit_aligned_qual, 0, &value); if (rc) break; G.alignedQualValue = strtoul(value, &dummy, 0); if (G.alignedQualValue == 0) { rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcIncorrect); OUTMSG (("edit-aligned-qual: bad value\n")); MiniUsage (args); break; } G.editAlignedQual = true; } rc = ArgsOptionCount (args, OPTION_CACHE_SIZE, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, OPTION_CACHE_SIZE, 0, &value); if (rc) break; G.cache_size = strtoul(value, &dummy, 0) * 1024UL * 1024UL; if (G.cache_size == 0) { rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcIncorrect); OUTMSG (("cache-size: bad value\n")); MiniUsage (args); break; } } rc = ArgsOptionCount (args, OPTION_MAX_WARN_DUP_FLAG, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, OPTION_MAX_WARN_DUP_FLAG, 0, &value); if (rc) break; G.maxWarnCount_DupConflict = strtoul(value, &dummy, 0); } rc = ArgsOptionCount (args, option_unsorted, &pcount); if (rc) break; G.expectUnsorted = pcount > 0; rc = ArgsOptionCount (args, OPTION_MAX_REC_COUNT, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, OPTION_MAX_REC_COUNT, 0, &value); if (rc) break; G.maxAlignCount = strtoul(value, &dummy, 0); } rc = ArgsOptionCount (args, OPTION_MAX_ERR_COUNT, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, OPTION_MAX_ERR_COUNT, 0, &value); if (rc) break; G.maxErrCount = strtoul(value, &dummy, 0); } rc = ArgsOptionCount (args, OPTION_MIN_MATCH, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, OPTION_MIN_MATCH, 0, &value); if (rc) break; G.minMatchCount = strtoul(value, &dummy, 0); } rc = ArgsOptionCount (args, OPTION_ACCEPT_DUP, &pcount); if (rc) break; G.acceptBadDups = pcount > 0; rc = ArgsOptionCount (args, OPTION_ACCEPT_NOMATCH, &pcount); if (rc) break; G.acceptNoMatch = pcount > 0; rc = ArgsOptionCount (args, option_keep_mismatch_qual, &pcount); if (rc) break; G.keepMismatchQual = pcount > 0; rc = ArgsOptionCount (args, OPTION_NO_CS, &pcount); if (rc) break; G.noColorSpace = pcount > 0; rc = ArgsOptionCount (args, OPTION_NO_SECONDARY, &pcount); if (rc) break; G.noSecondary = pcount > 0; rc = ArgsOptionCount (args, OPTION_TI, &pcount); if (rc) break; G.hasTI = pcount > 0; rc = ArgsOptionCount (args, OPTION_ACCEPT_HARD_CLIP, &pcount); if (rc) break; G.acceptHardClip = pcount > 0; rc = ArgsOptionCount (args, OPTION_NOMATCH_LOG, &pcount); if (rc) break; if (pcount == 1) { KDirectory *dir; rc = ArgsOptionValue (args, OPTION_NOMATCH_LOG, 0, &value); if (rc) break; rc = KDirectoryNativeDir(&dir); if (rc) break; rc = KDirectoryCreateFile(dir, &G.noMatchLog, 0, 0664, kcmInit, value); KDirectoryRelease(dir); if (rc) break; } rc = ArgsOptionCount (args, OPTION_HEADER, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, OPTION_HEADER, 0, &value); if (rc) break; rc = LoadHeader(&G.headerText, value, G.inpath); if (rc) break; } rc = ArgsParamCount (args, &pcount); if (rc) break; if (pcount == 0) { rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcInsufficient); MiniUsage (args); break; } else if (pcount > sizeof(aligned)/sizeof(aligned[0])) { rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive); (void)PLOGERR(klogErr, (klogErr, rc, "$(count) input files is too many, $(max) is the limit", "count=%u,max=%u", (unsigned)pcount, (unsigned)(sizeof(aligned)/sizeof(aligned[0])))); break; } else { unsigned need = G.inpath ? (strlen(G.inpath) + 1) * pcount : 0; unsigned i; for (i = 0; i < pcount; ++i) { rc = ArgsParamValue(args, i, &value); if (rc) break; need += strlen(value) + 1; } nbsz = need; } rc = ArgsOptionCount (args, OPTION_UNALIGNED, &pcount); if (rc) break; if (pcount > 0) { unsigned need = G.inpath ? (strlen(G.inpath) + 1) * pcount : 0; unsigned i; for (i = 0; i < pcount; ++i) { rc = ArgsOptionValue(args, OPTION_UNALIGNED, i, &value); if (rc) break; need += strlen(value) + 1; } if (rc) break; nbsz += need; } name_buffer = malloc(nbsz); if (name_buffer == NULL) { rc = RC(rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted); break; } rc = ArgsOptionCount (args, OPTION_UNALIGNED, &pcount); if (rc == 0) { unsigned i; for (i = 0; i < pcount; ++i) { rc = ArgsOptionValue(args, OPTION_UNALIGNED, i, &value); if (rc) break; unalgnd[n_unalgnd++] = name_buffer + next_name; rc = PathWithBasePath(name_buffer + next_name, nbsz - next_name, value, G.inpath); if (rc) break; next_name += strlen(name_buffer + next_name) + 1; } if (rc) break; } else break; rc = ArgsParamCount (args, &pcount); if (rc == 0) { unsigned i; for (i = 0; i < pcount; ++i) { rc = ArgsParamValue(args, i, &value); if (rc) break; aligned[n_aligned++] = name_buffer + next_name; rc = PathWithBasePath(name_buffer + next_name, nbsz - next_name, value, G.inpath); if (rc) break; next_name += strlen(name_buffer + next_name) + 1; } } else break; rc = run(argv[0], n_aligned, (char const **)aligned, n_unalgnd, (char const **)unalgnd); break; } free(name_buffer); free((void *)G.headerText); free(G.refFiles); value = G.outpath ? strrchr(G.outpath, '/') : "/???"; if( value == NULL ) { value = G.outpath; } else { value++; } if (rc) { (void)PLOGERR(klogErr, (klogErr, rc, "load failed", "severity=total,status=failure,accession=%s,errors=%u", value, G.errCount)); } else { (void)PLOGMSG(klogInfo, (klogInfo, "loaded", "severity=total,status=success,accession=%s,errors=%u", value, G.errCount)); } ArgsWhack(args); XMLLogger_Release(xml_logger); return rc; }
rc_t CC KMain ( int argc, char *argv [] ) { Args * args; rc_t rc; rc = ArgsMakeAndHandle (&args, argc, argv, 1, MyOptions, sizeof MyOptions / sizeof (OptDef)); if (rc) LOGERR (klogInt, rc, "failed to parse arguments"); else { do { KDyld *dl; uint32_t num_libs; rc = ArgsParamCount (args, &num_libs); if (rc) { LOGERR ( klogInt, rc, "Failure to count parameters" ); break; } if (num_libs == 0) { rc = MiniUsage(args); break; } /* create loader */ rc = KDyldMake (&dl); if (rc) { LOGERR ( klogInt, rc, "failed to create dynamic loader" ); break; } else { do { KDlset *libs; const char * path; uint32_t ix; uint32_t num_paths; rc = ArgsOptionCount (args, OPTION_LOAD, &num_paths); if (rc) { LOGERR (klogInt, rc, "failed to count paths"); break; } for (ix = 0; ix < num_paths; ix++) { rc = ArgsOptionValue (args, OPTION_LOAD, ix, (const void **)&path); if (rc) { LOGERR (klogInt, rc, "failed to access a path option"); break; } testld_update_libpath (dl, path); } if (rc) break; /* append contents of LD_LIBRARY_PATH */ path = getenv ( "LD_LIBRARY_PATH" ); if (path) testld_update_libpath (dl, path); /* create libset */ rc = KDyldMakeSet (dl, & libs); if (rc) { LOGERR (klogInt, rc, "failed to create dl library set"); break; } else { /* test it */ for (ix = 0; ix < num_libs; ++ ix ) { rc = ArgsParamValue (args, ix, (const void **)&path); if (rc) break; testld_load_library (dl, libs, path); } KDlsetRelease ( libs ); } } while (0); KDyldRelease ( dl ); } } while (0); ArgsWhack (args); } return rc; }
rc_t CC KMain ( int argc, char *argv[] ) { rc_t rc = 0; Args * args; rc = ArgsMakeStandardOptions (&args); if (rc == 0) { do { uint32_t pcount; rc = ArgsAddOptionArray (args, MyOptions, sizeof MyOptions / sizeof (OptDef)); if (rc) break; rc = ArgsParse (args, argc, argv); if (rc) break; /* quirky way default path is generated means this comes * before standard argument handling */ rc = ArgsOptionCount (args, OPTION_TABLE, &pcount); if (rc) break; if (pcount == 0) { static char * default_name = "RowWriteTestOutTable"; char * user; user = getenv ("USER"); if (user) snprintf (tablePath, sizeof (tablePath), "/home/%s/%s", user, default_name); else strncpy (tablePath, default_name, sizeof (tablePath)); } else { const char * pc; ArgsOptionValue (args, OPTION_TABLE, 0, &pc); strncpy (tablePath, pc, sizeof (tablePath)); } rc = ArgsHandleStandardOptions (args); if (rc) break; rc = ArgsParamCount (args, &pcount); if (rc) break; if (pcount) { const char * pc; rc = ArgsArgvValue (args, 0, &pc); if (rc) break; rc = RC (rcExe, rcNoTarg, rcParsing, rcParam, rcExcessive); PLOGERR (klogFatal, (klogFatal, rc, "$(P) takes no parameters", PLOG_S(P), pc)); break; } rc = ArgsOptionCount (args, OPTION_ROW, &pcount); if (rc == 0) { uint64_t row_count; if (pcount) { const char * pc; rc = ArgsOptionValue (args, OPTION_ROW, 0, &pc); if (rc) break; row_count = AsciiToU32 (pc, NULL, NULL); } else row_count = ROWS; rc = run (tablePath, row_count); } } while (0); ArgsWhack (args); } return rc; }
rc_t CC KMain ( int argc, char *argv [] ) { Args *args; rc_t rc; do { uint32_t paramc; bool requireAmd64 = false; uint64_t requireRam = 0; rc = ArgsMakeAndHandle ( & args, argc, argv, 1, Options, sizeof Options / sizeof (OptDef) ); if ( rc != 0 ) { LogErr ( klogErr, rc, "failed to parse arguments" ); break; } // TODO: cehck if we need it rc = ArgsParamCount ( args, & paramc ); if ( rc != 0 ) { LogErr ( klogInt, rc, "failed to obtain param count" ); break; } { // OPTION_AMD64 rc = ArgsOptionCount( args, OPTION_AMD64, & paramc ); if ( rc ) { LOGERR( klogErr, rc, "Failure to get '" OPTION_AMD64 "' argument" ); break; } if ( paramc ) { requireAmd64 = true; } } { // OPTION_RAM rc = ArgsOptionCount ( args, OPTION_RAM, & paramc ); if ( rc ) { LOGERR ( klogErr, rc, "Failure to get '" OPTION_RAM "' argument" ); break; } if ( paramc ) { const char* dummy = NULL; rc = ArgsOptionValue(args, OPTION_RAM, 0, (const void **)&dummy); if ( rc ) { LOGERR(klogErr, rc, "Failure to get '" OPTION_RAM "' argument"); break; } rc = sscanf(dummy, "%llu", &requireRam); if ( rc != 1) { LOGMSG(klogErr, "Failure to parse '" OPTION_RAM "' argument value"); break; } } } { rc = KAppCheckEnvironment(requireAmd64, requireRam); if (rc != 0 ) printf("Invalid environment\n"); else printf("Enviroment is fine!\n"); } } while (false); ArgsWhack ( args ); return rc; }
rc_t CC KMain( int argc, char *argv [] ) { Args * args; rc_t rc = ArgsMakeAndHandle( &args, argc, argv, 1, options, sizeof options / sizeof options [ 0 ] ); if ( rc == 0 ) { try { NGS_Pileup::Settings settings; uint32_t pcount; rc = ArgsOptionCount ( args, OPTION_REF, &pcount ); if ( pcount > 1 ) { throw ngs :: ErrorMsg ( "multiple positions are not supported at this point" ); } if ( pcount == 1 ) { const void * value; rc = ArgsOptionValue ( args, OPTION_REF, 0, & value ); if ( rc != 0 ) { throw ngs :: ErrorMsg ( "ArgsOptionValue (" OPTION_REF ") failed" ); } settings . AddReference ( static_cast <char const*> (value) ); } rc = ArgsParamCount ( args, &pcount ); if ( rc == 0 ) { if ( pcount > 1 ) { throw ngs :: ErrorMsg ( "multiple accessions are not supported at this point" ); } settings . output = & std::cout; void const *value; rc = ArgsParamValue ( args, 0, &value ); if ( rc == 0 ) { settings . AddInput ( static_cast <char const*> (value) ); NGS_Pileup ( settings ) . Run (); } else { throw ngs :: ErrorMsg ( "ArgsParamValue failed" ); } } } catch (ngs :: ErrorMsg& ex) { std :: cerr << "Program aborted: " << ex.what() << std::endl; exit ( -1 ); } ArgsWhack( args ); } return 0; }
rc_t CC KMain (int argc, char * argv[]) { Args * args; uint32_t pcount; rc_t rc = ArgsMakeAndHandle (&args, argc, argv, 1, Options, sizeof Options / sizeof (OptDef)); if ( rc == 0 ) { rc = ArgsParamCount (args, &pcount); if ( rc == 0 ) { if ( pcount != 0 ) { rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcExcessive); MiniUsage (args); } else { const KStream *std_in; rc = KStreamMakeStdIn ( & std_in ); if ( rc == 0 ) { KStream* buffered; rc = KStreamMakeBuffered ( &buffered, std_in, 0 /*input-only*/, 0 /*use default size*/ ); if ( rc == 0 ) { GeneralLoader loader ( *buffered ); rc = ArgsOptionCount (args, OPTION_INCLUDE_PATHS, &pcount); if ( rc == 0 ) { for ( uint32_t i = 0 ; i < pcount; ++i ) { const char* value; rc = ArgsOptionValue (args, OPTION_INCLUDE_PATHS, i, &value); if ( rc != 0 ) { break; } loader . AddSchemaIncludePath ( value ); } } rc = ArgsOptionCount (args, OPTION_SCHEMAS, &pcount); if ( rc == 0 ) { for ( uint32_t i = 0 ; i < pcount; ++i ) { const char* value; rc = ArgsOptionValue (args, OPTION_SCHEMAS, i, &value); if ( rc != 0 ) { break; } loader . AddSchemaFile( value ); } } rc = ArgsOptionCount (args, OPTION_TARGET, &pcount); if ( rc == 0 && pcount == 1 ) { const char* value; rc = ArgsOptionValue (args, OPTION_TARGET, 0, &value); if ( rc == 0 ) { loader . SetTargetOverride ( value ); } } if ( rc == 0 ) { rc = loader . Run(); } KStreamRelease ( buffered ); } KStreamRelease ( std_in ); } } } } if ( rc != 0) { LOGERR ( klogErr, rc, "load failed" ); } ArgsWhack(args); return rc; }
rc_t CC KMain( int argc, char* argv[] ) { rc_t rc = 0; Args* args = NULL; const char* errmsg = NULL, *refseq_chunk = NULL, *min_mapq = NULL, *cluster_size = NULL; const XMLLogger* xml_logger = NULL; SParam params; memset(¶ms, 0, sizeof(params)); params.schema = "align/align.vschema"; params.argv0 = argv[0]; if( (rc = ArgsMakeAndHandle(&args, argc, argv, 2, MainArgs, MainArgsQty, XMLLogger_Args, XMLLogger_ArgsQty)) == 0 ) { uint32_t count; if( (rc = ArgsParamCount (args, &count)) != 0 || count != 0 ) { rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive); ArgsParamValue(args, 0, &errmsg); } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_Output].name, &count)) != 0 || count != 1 ) { rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, count ? rcExcessive : rcInsufficient); errmsg = MainArgs[eopt_Output].name; } else if( (rc = ArgsOptionValue(args, MainArgs[eopt_Output].name, 0, ¶ms.out)) != 0 ) { errmsg = MainArgs[eopt_Output].name; } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_MapInput].name, &count)) != 0 || count != 1 ) { rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, count ? rcExcessive : rcInsufficient); errmsg = MainArgs[eopt_MapInput].name; } else if( (rc = ArgsOptionValue(args, MainArgs[eopt_MapInput].name, 0, ¶ms.map_path)) != 0 ) { errmsg = MainArgs[eopt_MapInput].name; } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_Schema].name, &count)) != 0 || count > 1 ) { rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, count ? rcExcessive : rcInsufficient); errmsg = MainArgs[eopt_Schema].name; } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_Schema].name, 0, ¶ms.schema)) != 0 ) { errmsg = MainArgs[eopt_Schema].name; } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_AsmInput].name, &count)) != 0 || count > 1 ) { rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive); errmsg = MainArgs[eopt_AsmInput].name; } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_AsmInput].name, 0, ¶ms.asm_path)) != 0 ) { errmsg = MainArgs[eopt_AsmInput].name; } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_RefSeqConfig].name, &count)) != 0 || count > 1 ) { rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive); errmsg = MainArgs[eopt_RefSeqConfig].name; } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_RefSeqConfig].name, 0, ¶ms.refseqcfg)) != 0 ) { errmsg = MainArgs[eopt_RefSeqConfig].name; } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_RefSeqPath].name, &count)) != 0 || count > 1 ) { rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive); errmsg = MainArgs[eopt_RefSeqPath].name; } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_RefSeqPath].name, 0, ¶ms.refseqpath)) != 0 ) { errmsg = MainArgs[eopt_RefSeqPath].name; } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_Library].name, &count)) != 0 || count > 1 ) { rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive); errmsg = MainArgs[eopt_Library].name; } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_Library].name, 0, ¶ms.library)) != 0 ) { errmsg = MainArgs[eopt_Library].name; } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_RefSeqChunk].name, &count)) != 0 || count > 1 ) { rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive); errmsg = MainArgs[eopt_RefSeqChunk].name; } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_RefSeqChunk].name, 0, &refseq_chunk)) != 0 ) { errmsg = MainArgs[eopt_RefSeqChunk].name; } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_Force].name, ¶ms.force)) != 0 ) { errmsg = MainArgs[eopt_Force].name; } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_ForceRef].name, ¶ms.force_refw)) != 0 ) { errmsg = MainArgs[eopt_ForceRef].name; } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_ForceRead].name, ¶ms.force_readw)) != 0 ) { errmsg = MainArgs[eopt_ForceRead].name; } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_noReadAhead].name, ¶ms.no_read_ahead)) != 0 ) { errmsg = MainArgs[eopt_noReadAhead].name; } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_NoSpotGroup].name, ¶ms.no_spot_group)) != 0 ) { errmsg = MainArgs[eopt_NoSpotGroup].name; } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_No2nd_ary].name, ¶ms.min_mapq)) != 0 ) { errmsg = MainArgs[eopt_No2nd_ary].name; } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_QualQuantization].name, &count)) != 0 || count > 1 ) { rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive); errmsg = MainArgs[eopt_QualQuantization].name; } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_QualQuantization].name, 0, ¶ms.qual_quant)) != 0 ) { errmsg = MainArgs[eopt_QualQuantization].name; } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_MinMapQ].name, &count)) != 0 || count > 1 ) { rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive); errmsg = MainArgs[eopt_MinMapQ].name; } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_MinMapQ].name, 0, &min_mapq)) != 0 ) { errmsg = MainArgs[eopt_MinMapQ].name; } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_ClusterSize].name, &count)) != 0 || count > 1 ) { rc = rc ? rc : RC(rcExe, rcArgv, rcParsing, rcParam, rcExcessive); errmsg = MainArgs[eopt_ClusterSize].name; } else if( count > 0 && (rc = ArgsOptionValue(args, MainArgs[eopt_ClusterSize].name, 0, &cluster_size)) != 0 ) { errmsg = MainArgs[eopt_ClusterSize].name; } else if( (rc = ArgsOptionCount(args, MainArgs[eopt_SingleMate].name, ¶ms.single_mate)) != 0 ) { errmsg = MainArgs[eopt_SingleMate].name; } else { do { long val = 0; char* end = NULL; uint32_t count; if( (rc = ArgsOptionCount(args, MainArgs[eopt_RefFile].name, &count)) != 0 ) { break; } else { params.refFiles = calloc(count + 1, sizeof(*(params.refFiles))); if( params.refFiles == NULL ) { rc = RC(rcApp, rcArgv, rcReading, rcMemory, rcExhausted); break; } while(rc == 0 && count-- > 0) { rc = ArgsOptionValue(args, MainArgs[eopt_RefFile].name, count, ¶ms.refFiles[count]); } } if( refseq_chunk != NULL ) { errno = 0; val = strtol(refseq_chunk, &end, 10); if( errno != 0 || refseq_chunk == end || *end != '\0' || val < 0 || val > UINT32_MAX ) { rc = RC(rcExe, rcArgv, rcReading, rcParam, rcInvalid); break; } params.refseq_chunk = val; } if( params.min_mapq > 0 ) { params.min_mapq = ~0; } else if( min_mapq != NULL ) { errno = 0; val = strtol(min_mapq, &end, 10); if( errno != 0 || min_mapq == end || *end != '\0' || val < 0 || val > 255 ) { rc = RC(rcExe, rcArgv, rcReading, rcParam, rcInvalid); break; } params.min_mapq = val; } if ( cluster_size ) params.cluster_size = atoi( cluster_size ); else params.cluster_size = 0; rc = KDirectoryNativeDir( ¶ms.input_dir ); if ( rc != 0 ) errmsg = "current directory"; else { rc = XMLLogger_Make( &xml_logger, params.input_dir, args ); if ( rc != 0 ) errmsg = "XML logging"; else rc = Load( ¶ms ); } } while( false ); KDirectoryRelease( params.input_dir ); } } /* find accession as last part of path for internal XML logging */ refseq_chunk = params.out ? strrchr(params.out, '/') : "/???"; if( refseq_chunk ++ == NULL ) refseq_chunk = params.out; if( argc < 2 ) MiniUsage(args); else if( rc != 0 ) { if( errmsg ) { MiniUsage(args); LOGERR(klogErr, rc, errmsg); } else { PLOGERR(klogErr, (klogErr, rc, "load failed: $(reason_short)", "severity=total,status=failure,accession=%s", refseq_chunk)); } } else { PLOGMSG(klogInfo, (klogInfo, "loaded", "severity=total,status=success,accession=%s", refseq_chunk)); } ArgsWhack(args); XMLLogger_Release(xml_logger); return rc; }
static rc_t ParamsConstruct(int argc, char* argv[], Params* prm) { rc_t rc = 0; Args* args = NULL; int count = 0; assert(argc && argv && prm); memset(prm, 0, sizeof *prm); args = prm->args; do { uint32_t pcount = 0; rc = ArgsMakeAndHandle(&args, argc, argv, 1, Options, sizeof Options / sizeof (OptDef)); if (rc) { LOGERR(klogErr, rc, "While calling ArgsMakeAndHandle"); break; } prm->args = args; rc = ArgsParamCount(args, &prm->argsParamCnt); if (rc) { LOGERR(klogErr, rc, "Failure to get query parameter[s]"); break; } if (prm->argsParamCnt > 0) { prm->modeShowCfg = true; ++count; } prm->xml = true; rc = ArgsOptionCount(args, OPTION_OUT, &pcount); if (rc) { LOGERR(klogErr, rc, "Failure to get '" OPTION_OUT "' argument"); break; } if (pcount) { const char* dummy = NULL; rc = ArgsOptionValue(args, OPTION_OUT, 0, &dummy); if (rc) { LOGERR(klogErr, rc, "Failure to get '" OPTION_OUT "' argument"); break; } if (!strcmp(dummy, "n")) { prm->xml = false; } else if (strcmp(dummy, "x")) { rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid); LOGERR(klogErr, rc, "Bad " OPTION_OUT " value"); break; } } rc = ArgsOptionCount(args, OPTION_CFG, &pcount); if (rc) { LOGERR(klogErr, rc, "Failure to get '" OPTION_CFG "' argument"); break; } if (pcount) { if (!prm->modeShowCfg) { prm->modeShowCfg = true; ++count; } } rc = ArgsOptionCount(args, OPTION_ENV, &pcount); if (rc) { LOGERR(klogErr, rc, "Failure to get '" OPTION_ENV "' argument"); break; } if (pcount) { prm->modeShowEnv = true; ++count; } rc = ArgsOptionCount(args, OPTION_FIL, &pcount); if (rc) { LOGERR(klogErr, rc, "Failure to get '" OPTION_FIL "' argument"); break; } if (pcount) { prm->modeShowFiles = true; ++count; } rc = ArgsOptionCount(args, OPTION_IMP, &pcount); if (rc) { LOGERR(klogErr, rc, "Failure to get '" OPTION_IMP "' argument"); break; } if (pcount) { rc = ArgsOptionValue(args, OPTION_IMP, 0, &prm->ngc); if (rc) { LOGERR(klogErr, rc, "Failure to get '" OPTION_IMP "' argument"); break; } } rc = ArgsOptionCount(args, OPTION_MOD, &pcount); if (rc) { LOGERR(klogErr, rc, "Failure to get '" OPTION_MOD "' argument"); break; } if (pcount) { prm->modeShowModules = true; ++count; } #if 0 rc = ArgsOptionCount(args, OPTION_NEW, &pcount); if (rc) { LOGERR(klogErr, rc, "Failure to get '" OPTION_NEW "' argument"); break; } if (pcount) { prm->modeCreate = true; ++count; } #endif rc = ArgsOptionCount(args, OPTION_DIR, &pcount); if (rc) { LOGERR(klogErr, rc, "Failure to get '" OPTION_DIR "' argument"); break; } if (pcount) { prm->modeShowLoadPath = true; ++count; } rc = ArgsOptionCount(args, OPTION_SET, &pcount); if (rc) { LOGERR(klogErr, rc, "Failure to get '" OPTION_SET "' argument"); break; } if (pcount) { rc = ArgsOptionValue(args, OPTION_SET, 0, &prm->setValue); if (rc == 0) { const char* p = strchr(prm->setValue, '='); if (p == NULL || *(p + 1) == '\0') { rc = RC(rcExe, rcArgv, rcParsing, rcParam, rcInvalid); LOGERR(klogErr, rc, "Bad " OPTION_SET " value"); break; } prm->modeSetNode = true; prm->modeCreate = prm->modeShowCfg = prm->modeShowEnv = prm->modeShowFiles = prm->modeShowLoadPath = prm->modeShowModules = false; count = 1; } } rc = ArgsOptionCount(args, OPTION_ALL, &pcount); if (rc) { LOGERR(klogErr, rc, "Failure to get '" OPTION_ALL "' argument"); break; } if (pcount || ( !prm->modeShowCfg && ! prm->modeShowLoadPath && !prm->modeShowEnv && !prm->modeShowFiles && !prm->modeShowModules && !prm->modeCreate && !prm->modeSetNode && !prm->ngc)) /* show all by default */ { prm->modeShowCfg = prm->modeShowEnv = prm->modeShowFiles = true; #ifndef _STATIC prm->modeShowModules = true; #endif count += 2; } if (count > 1) { prm->showMultiple = true; } } while (false); return rc; }
rc_t CC KMain ( int argc, char *argv [] ) { Args * args; rc_t rc; rc = ArgsMakeAndHandle (&args, argc, argv, 1, Options, sizeof Options / sizeof (OptDef)); if (rc == 0) { uint32_t pcount; const char * pc; const char * directory; const char * archive; do { op_mode mode; uint32_t ix; BSTreeInit (&pnames); rc = ArgsParamCount (args, &pcount); if (rc) break; for (ix = 0; ix < pcount; ++ix) { rc = ArgsParamValue (args, ix, (const void **)&pc); if (rc) break; rc = pnamesInsert (pc); if (rc) { PLOGERR (klogInt, (klogInt, rc, "failure to process filter parameter [%s]", pc)); break; } } if (rc) break; rc = ArgsOptionCount (args, OPTION_ALIGN, &pcount); if (rc) break; if (pcount == 0) pc = NULL; else { rc = ArgsOptionValue (args, OPTION_ALIGN, 0, (const void **)&pc); if (rc) break; } alignment = get_alignment (pc); if (alignment == sraAlignInvalid) { rc = RC (rcExe, rcArgv, rcParsing, rcParam, rcInvalid); PLOGERR (klogFatal, (klogFatal, rc, "Parameter for alignment [$(A)] is invalid: must be a power of two bytes", PLOG_S(A), pc)); break; } rc = ArgsOptionCount (args, OPTION_LONGLIST, &pcount); if (rc) break; long_list = (pcount != 0); rc = ArgsOptionCount (args, OPTION_FORCE, &pcount); if (rc) break; force = (pcount != 0); mode = OM_NONE; rc = ArgsOptionCount (args, OPTION_DIRECTORY, &pcount); if (rc) break; if (pcount) { rc = ArgsOptionValue (args, OPTION_DIRECTORY, 0, (const void **)&directory); if (rc) break; } else directory = NULL; rc = ArgsOptionCount (args, OPTION_CREATE, &pcount); if (rc) break; if (pcount) { rc = ArgsOptionValue (args, OPTION_CREATE, 0, (const void **)&archive); if (rc) break; mode = OM_CREATE; } rc = ArgsOptionCount (args, OPTION_TEST, &pcount); if (rc) break; if (pcount) { if (mode == OM_NONE) { mode = OM_TEST; rc = ArgsOptionValue (args, OPTION_TEST, 0, (const void **)&archive); if (rc) break; } else mode = OM_ERROR; } rc = ArgsOptionCount (args, OPTION_LIST, &pcount); if (rc) break; if (pcount) { if (mode == OM_NONE) { mode = OM_TEST; rc = ArgsOptionValue (args, OPTION_LIST, 0, (const void **)&archive); if (rc) break; } else mode = OM_ERROR; } rc = ArgsOptionCount (args, OPTION_EXTRACT, &pcount); if (rc) break; if (pcount) { if (mode == OM_NONE) { mode = OM_EXTRACT; rc = ArgsOptionValue (args, OPTION_EXTRACT, 0, (const void **)&archive); if (rc) break; } else mode = OM_ERROR; } if (mode == OM_NONE) { MiniUsage(args); rc = RC(rcApp, rcArgv, rcParsing, rcParam, rcInsufficient); break; } /* ----- * Mount the native filesystem as root */ rc = KDirectoryNativeDir (&kdir); if (rc != 0) { LOGMSG (klogFatal, "Failed to open native KDirectory"); } else { switch (mode) { default: /* OM_NONE presumably */ /* assert (mode == OM_NONE); */ /* rc = RC (rcExe, rcNoTarg, rcParsing, rcParam, rcEmpty); */ /* LOGERR (klogFatal, rc, "Must provide a single operating mode and archive: Create, Test (list) or eXtract"); */ pc = NULL; break; case OM_ERROR: rc = RC (rcExe, rcNoTarg, rcParsing, rcParam, rcAmbiguous); LOGERR (klogFatal, rc, "Must provide a single operating mode and archive: Create, Test (list) or eXtract"); break; case OM_CREATE: STSMSG (2, ("Create Mode %s %s", archive, directory)); if (directory == NULL) { rc = RC (rcExe, rcNoTarg, rcParsing, rcParam, rcNull); LOGERR (klogFatal, rc, "Must provide a directory for create mode"); } else rc = run_kar_create (archive, directory); break; case OM_TEST: STSMSG (2, ("Test Mode %s", archive)); rc = run_kar_test (archive); break; case OM_EXTRACT: STSMSG (2, ("Extract Mode %s %s", archive, directory)); if (directory == NULL) { rc = RC (rcExe, rcNoTarg, rcParsing, rcParam, rcNull); LOGERR (klogFatal, rc, "Must provide a directory for extract mode"); } else rc = run_kar_extract (archive, directory); break; } KDirectoryRelease (kdir); } } while (0); ArgsWhack (args); } if (rc) LOGERR (klogWarn, rc, "Failure exiting kar"); else STSMSG (1, ("Success: Exiting kar\n")); return rc; }