int main_reheader(int argc, char *argv[]) { bam_header_t *h; BGZF *in; if (argc != 3) { fprintf(stderr, "Usage: samtools reheader <in.header.sam> <in.bam>\n"); return 1; } { // read the header tamFile fph = sam_open(argv[1]); if (fph == 0) { fprintf(stderr, "[%s] fail to read the header from %s.\n", __func__, argv[1]); return 1; } h = sam_header_read(fph); sam_close(fph); } in = strcmp(argv[2], "-")? bam_open(argv[2], "r") : bam_dopen(fileno(stdin), "r"); if (in == 0) { fprintf(stderr, "[%s] fail to open file %s.\n", __func__, argv[2]); return 1; } bam_reheader(in, h, fileno(stdout)); bgzf_close(in); return 0; }
int main_reheader(int argc, char *argv[]) { int inplace = 0, r, add_PG = 1, c; bam_hdr_t *h; samFile *in; char *arg_list = stringify_argv(argc+1, argv-1); static const struct option lopts[] = { {"help", no_argument, NULL, 'h'}, {"in-place", no_argument, NULL, 'i'}, {"no-PG", no_argument, NULL, 'P'}, {NULL, 0, NULL, 0} }; while ((c = getopt_long(argc, argv, "hiP", lopts, NULL)) >= 0) { switch (c) { case 'P': add_PG = 0; break; case 'i': inplace = 1; break; case 'h': usage(stdout, 0); break; default: fprintf(stderr, "Invalid option '%c'\n", c); usage(stderr, 1); } } if (argc - optind != 2) usage(stderr, 1); { // read the header samFile *fph = sam_open(argv[optind], "r"); if (fph == 0) { fprintf(stderr, "[%s] fail to read the header from %s.\n", __func__, argv[optind]); return 1; } h = sam_hdr_read(fph); sam_close(fph); if (h == NULL) { fprintf(stderr, "[%s] failed to read the header for '%s'.\n", __func__, argv[1]); return 1; } } in = sam_open(argv[optind+1], inplace?"r+":"r"); if (in == 0) { fprintf(stderr, "[%s] fail to open file %s.\n", __func__, argv[optind+1]); return 1; } if (hts_get_format(in)->format == bam) { r = bam_reheader(in->fp.bgzf, h, fileno(stdout), arg_list, add_PG); } else { if (inplace) r = cram_reheader_inplace(in->fp.cram, h, arg_list, add_PG); else r = cram_reheader(in->fp.cram, h, arg_list, add_PG); } if (sam_close(in) != 0) r = -1; bam_hdr_destroy(h); if (arg_list) free(arg_list); return -r; }