rc_t CC KMain(int argc, char *argv[]) { static const char *help[] = { "--help", "-h", "-?", NULL }; static const char *vers[] = { "--version", "-V", NULL }; bool const has_help = has_arg(help, argc, argv); bool const has_vers = has_arg(vers, argc, argv); XMLLogger const *logger = NULL; int argfirst = 0; int arglast = 0; rc_t rc = 0; unsigned load = 0; if (has_help) { argc = 2; argv[1] = "--help"; return main_help_vers(argc, argv); } if (has_vers) { argc = 2; argv[1] = "--version"; return main_help_vers(argc, argv); } logger = make_logger(&argc, argv); memset(&G, 0, sizeof(G)); G.mode = mode_Archive; G.globalMode = mode_Archive; G.maxSeqLen = TableWriterRefSeq_MAX_SEQ_LEN; G.schemaPath = strdup(SCHEMAFILE); G.omit_aligned_reads = true; G.omit_reference_reads = true; G.minMapQual = 0; /* accept all */ G.tmpfs = strdup("/tmp"); G.cache_size = ((size_t)16) << 30; G.maxErrCount = 1000; G.minMatchCount = 10; set_pid(); for (arglast = 1; arglast < argc; ++arglast) { if (strcmp(argv[arglast], "--remap") == 0) { argv[arglast] = argv[0]; G.globalMode = mode_Remap; rc = main_1(arglast - argfirst, argv + argfirst, true, load); if (rc) break; G.mode = mode_Remap; argfirst = arglast; ++load; } } rc = main_1(arglast - argfirst, argv + argfirst, false, load); XMLLogger_Release(logger); cleanupGlobal(); 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[] ) { 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; }
LIB_EXPORT rc_t CC XMLLogger_Make2(const XMLLogger** self, KDirectory* dir, const char* logpath, const int fd) { rc_t rc = 0; XMLLogger* obj; KDirectory* my_dir = NULL; const uint32_t lopt = klogFmtTimestamp | klogFmtSeverity | klogFmtMessage | klogFmtAppName | klogFmtAppVersion | klogFmtReasonShort; const uint32_t sopt = kstsFmtTimestamp | kstsFmtMessage | kstsFmtAppName | kstsFmtAppVersion; KLogFmtFlagsSet(lopt); KLogLibFmtFlagsSet(lopt); KStsFmtFlagsSet(sopt); KStsLibFmtFlagsSet(sopt); obj = calloc(1, sizeof(*obj)); if( obj == NULL ) { rc = RC(rcApp, rcLog, rcAllocating, rcMemory, rcExhausted); } else if( fd < 0 && dir == NULL && (rc = KDirectoryNativeDir(&my_dir)) != 0 ) { } else if( fd >= 0 && (rc = KFileMakeFDFileWrite(&obj->file.file, false, fd)) != 0 ) { } else if( logpath != NULL && fd < 0 && (rc = KDirectoryCreateFile(dir ? dir : my_dir, &obj->file.file, false, 0644, kcmInit, "%s", logpath)) != 0 ) { } else { obj->file.pos = 0; obj->log.file = &obj->file; obj->log.fmt.formatter = KLogFmtWriterGet(); obj->log.fmt.data = KLogFmtDataGet(); obj->log.wrt.writer = KLogWriterGet(); obj->log.wrt.data = KLogDataGet(); obj->loglib.file = &obj->file; obj->loglib.fmt.formatter = KLogLibFmtWriterGet(); obj->loglib.fmt.data = KLogLibFmtDataGet(); obj->loglib.wrt.writer = KLogLibWriterGet(); obj->loglib.wrt.data = KLogLibDataGet(); obj->sts.file = &obj->file; obj->sts.fmt.formatter = KStsFmtWriterGet(); obj->sts.fmt.data = KStsFmtDataGet(); obj->sts.wrt.writer = KStsWriterGet(); obj->sts.wrt.data = KStsDataGet(); obj->stslib.file = &obj->file; obj->stslib.fmt.formatter = KStsLibFmtWriterGet(); obj->stslib.fmt.data = KStsLibFmtDataGet(); obj->stslib.wrt.writer = KStsLibWriterGet(); obj->stslib.wrt.data = KStsLibDataGet(); if( (rc = KLogFmtHandlerSet(LoaderXMLFormatter, lopt, &obj->log)) == 0 && (rc = KLogLibFmtHandlerSet(LoaderXMLFormatter, lopt, &obj->loglib)) == 0 && (rc = KStsFmtHandlerSet(LoaderXMLFormatter, sopt, &obj->sts)) == 0 && (rc = KStsLibFmtHandlerSet(LoaderXMLFormatter, sopt, &obj->stslib)) == 0 ) { /* make log valid XML */ if( obj->file.file != NULL ) { size_t num_writ = 0; rc = KFileWrite(obj->file.file, obj->file.pos, "<Log>\n", 6, &num_writ); obj->file.pos += num_writ; } } } KDirectoryRelease(my_dir); if( rc == 0 ) { *self = obj; if( fd >= 0 ) { DBG(("XML Log file set to handle %d\n", fd)); } else if( logpath != NULL) { DBG(("XML Log file set to %s\n", logpath)); } } else { XMLLogger_Release(obj); *self = NULL; } return rc; }
rc_t CC KMain ( int argc, char *argv [] ) { XMLLogger const *xlogger = NULL; Args * args; rc_t rc; bool any_failed = false; CheckCorruptConfig config = { -1.0, SA_TABLE_LOOKUP_LIMIT, -1.0, SEQ_TABLE_LOOKUP_LIMIT, PA_LONGER_SA_LIMIT, 0 }; KLogLevelSet(klogInfo); rc = ArgsMakeAndHandle (&args, argc, argv, 2, Options, sizeof (Options) / sizeof (Options[0]), XMLLogger_Args, XMLLogger_ArgsQty); if (rc) LOGERR (klogInt, rc, "failed to parse command line parameters"); else { rc = XMLLogger_Make(&xlogger, NULL, args); if (rc) LOGERR (klogInt, rc, "failed to make xml logger"); else { rc = parseArgs ( args, &config ); if (rc == 0) { uint32_t pcount; rc = ArgsParamCount ( args, &pcount ); if (rc) LOGERR (klogInt, rc, "ArgsParamCount() failed"); else { if ( pcount == 0 ) LOGMSG (klogErr, "no accessions were passed in"); else { for ( uint32_t i = 0; i < pcount; ++i ) { const char * accession; rc = ArgsParamValue ( args, i, (const void **)&accession ); if (rc) { PLOGERR (klogInt, (klogInt, rc, "failed to get $(PARAM_I) accession from command line", "PARAM_I=%d", i)); any_failed = true; } else { if (!checkAccession ( accession, &config )) any_failed = true; } } if (!any_failed) LOGMSG (klogInfo, "All accessions are good!"); } } } XMLLogger_Release(xlogger); } ArgsWhack ( args ); } return rc != 0 || any_failed ? 1 : 0; }
rc_t CC KMain (int argc, char * argv[]) { Args * args; rc_t rc; char *files[256]; int8_t defaultReadNumbers[256]; char *name_buffer = NULL; size_t next_name = 0; size_t nbsz = 0; char const *value; char *dummy; const XMLLogger* xml_logger = NULL; enum FASTQQualityFormat qualityFormat; bool ignoreSpotGroups; 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.maxErrPct = 5; G.acceptNoMatch = true; G.minMatchCount = 0; G.QualQuantizer="0"; 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_TMPFS, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, OPTION_TMPFS, 0, (const void **)&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_OUTPUT, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, OPTION_OUTPUT, 0, (const void **)&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 { rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcInsufficient); OUTMSG (("Output parameter required\n")); MiniUsage (args); break; } rc = ArgsOptionCount (args, OPTION_QCOMP, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, OPTION_QCOMP, 0, (const void **)&G.QualQuantizer); if (rc) break; } rc = ArgsOptionCount (args, OPTION_CACHE_SIZE, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, OPTION_CACHE_SIZE, 0, (const void **)&value); if (rc) break; G.cache_size = strtoul(value, &dummy, 0) * 1024UL * 1024UL; if (G.cache_size == 0 || G.cache_size == ULONG_MAX) { rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcIncorrect); OUTMSG (("cache-size: bad value\n")); MiniUsage (args); break; } } G.expectUnsorted = true; rc = ArgsOptionCount (args, OPTION_MAX_REC_COUNT, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, OPTION_MAX_REC_COUNT, 0, (const void **)&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, (const void **)&value); if (rc) break; G.maxErrCount = strtoul(value, &dummy, 0); } rc = ArgsOptionCount (args, OPTION_MAX_ERR_PCT, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, OPTION_MAX_ERR_PCT, 0, (const void **)&value); if (rc) break; G.maxErrPct = strtoul(value, &dummy, 0); } rc = ArgsOptionCount (args, OPTION_PLATFORM, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, OPTION_PLATFORM, 0, (const void **)&value); if (rc) break; G.platform = PlatformToId(value); if (G.platform == SRA_PLATFORM_UNDEFINED) { rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcIncorrect); (void)PLOGERR(klogErr, (klogErr, rc, "Invalid platform $(v)", "v=%s", value)); break; } } else G.platform = SRA_PLATFORM_UNDEFINED; rc = ArgsOptionCount (args, OPTION_QUALITY, &pcount); if (rc) break; if (pcount == 1) { rc = ArgsOptionValue (args, OPTION_QUALITY, 0, (const void **)&value); if (rc) break; if (strcmp(value, "PHRED_33") == 0) qualityFormat = FASTQphred33; else if (strcmp(value, "PHRED_64") == 0) qualityFormat = FASTQphred64; else if (strcmp(value, "LOGODDS") == 0) qualityFormat = FASTQlogodds; else { rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcIncorrect); (void)PLOGERR(klogErr, (klogErr, rc, "Invalid quality encoding $(v)", "v=%s", value)); break; } } else qualityFormat = 0; rc = ArgsOptionCount (args, OPTION_IGNORE_ILLUMINA_TAGS, &pcount); if (rc) break; ignoreSpotGroups = pcount > 0; rc = ArgsParamCount (args, &pcount); if (rc) break; if (pcount == 0) { rc = RC(rcApp, rcArgv, rcAccessing, rcParam, rcInsufficient); MiniUsage (args); break; } else if (pcount > sizeof(files)/sizeof(files[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(files)/sizeof(files[0])))); break; } else { size_t need = G.inpath ? (strlen(G.inpath) + 1) * pcount : 0; unsigned i; for (i = 0; i < pcount; ++i) { rc = ArgsParamValue(args, i, (const void **)&value); if (rc) break; need += strlen(value) + 1; } nbsz = need; } name_buffer = malloc(nbsz); if (name_buffer == NULL) { rc = RC(rcApp, rcArgv, rcAccessing, rcMemory, rcExhausted); break; } rc = ArgsParamCount (args, &pcount); if (rc == 0) { unsigned i; for (i = 0; i < pcount; ++i) { rc = ArgsParamValue(args, i, (const void **)&value); if (rc) break; defaultReadNumbers[i] = 0; files[i] = 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], &G, pcount, (char const **)files, qualityFormat, defaultReadNumbers, ignoreSpotGroups); break; } free(name_buffer); 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; }