From 5008027ff92f1b5ed762132d480f23df1088dfdd Mon Sep 17 00:00:00 2001 From: On behalf of John Marshall Date: Mon, 27 Sep 2010 12:19:06 +0000 Subject: [PATCH] Abort if merge -h's INH.SAM cannot be opened, just as we abort if any of the IN#.BAM input files cannot be opened. Also propagate any error indication returned by bam_merge_core() to samtools merge's exit status. --- bam_sort.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/bam_sort.c b/bam_sort.c index 4745be6..c992a68 100644 --- a/bam_sort.c +++ b/bam_sort.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -89,11 +90,12 @@ int bam_merge_core(int by_qname, const char *out, const char *headers, int n, ch if (headers) { tamFile fpheaders = sam_open(headers); if (fpheaders == 0) { - fprintf(stderr, "[bam_merge_core] Cannot open file `%s'. Continue anyway.\n", headers); - } else { - hheaders = sam_header_read(fpheaders); - sam_close(fpheaders); + const char *message = strerror(errno); + fprintf(stderr, "[bam_merge_core] cannot open '%s': %s\n", headers, message); + return -1; } + hheaders = sam_header_read(fpheaders); + sam_close(fpheaders); } g_is_by_qname = by_qname; @@ -229,7 +231,7 @@ int bam_merge_core(int by_qname, const char *out, const char *headers, int n, ch int bam_merge(int argc, char *argv[]) { - int c, is_by_qname = 0, flag = 0; + int c, is_by_qname = 0, flag = 0, ret = 0; char *fn_headers = NULL, *reg = 0; while ((c = getopt(argc, argv, "h:nruR:")) >= 0) { @@ -254,10 +256,10 @@ int bam_merge(int argc, char *argv[]) fprintf(stderr, " the header dictionary in merging.\n\n"); return 1; } - bam_merge_core(is_by_qname, argv[optind], fn_headers, argc - optind - 1, argv + optind + 1, flag, reg); + if (bam_merge_core(is_by_qname, argv[optind], fn_headers, argc - optind - 1, argv + optind + 1, flag, reg) < 0) ret = 1; free(reg); free(fn_headers); - return 0; + return ret; } typedef bam1_t *bam1_p; -- 2.39.2