Skip to content

Commit c3a60e8

Browse files
author
Iain Bancarz
committed
Merge pull request #1 from daviesrob/0.5.10-mt_fixes
0.5.10 mt fixes
2 parents 52d4018 + 8348c29 commit c3a60e8

36 files changed

+820
-490
lines changed

Makefile

+39-32
Original file line numberDiff line numberDiff line change
@@ -54,38 +54,45 @@ clean:cleanlocal-recur
5454

5555
# DO NOT DELETE
5656

57-
bamlite.o: bamlite.h
58-
bntseq.o: bntseq.h main.h utils.h kseq.h
59-
bwape.o: bwtaln.h bwt.h stdaln.h kvec.h bntseq.h utils.h bwatpx.h kstring.h
60-
bwape.o: khash.h ksort.h
61-
bwape1.o: bwatpx.h bwtaln.h bwt.h stdaln.h bntseq.h kvec.h kstring.h khash.h
62-
bwape1.o: ksort.h
63-
bwape2.o: bwatpx.h bwtaln.h bwt.h stdaln.h bntseq.h kvec.h kstring.h
64-
bwape3.o: bwatpx.h bwtaln.h bwt.h stdaln.h bntseq.h kvec.h kstring.h
65-
bwape4.o: bwatpx.h bwtaln.h bwt.h stdaln.h bntseq.h kvec.h kstring.h
66-
bwapeio1.o: bwatpx.h bwtaln.h bwt.h stdaln.h bntseq.h kvec.h kstring.h
67-
bwapese1.o: bwatpx.h bwtaln.h bwt.h stdaln.h bntseq.h kvec.h kstring.h
68-
bwase.o: stdaln.h bwase.h bntseq.h bwt.h bwtaln.h utils.h kstring.h bwatpx.h
69-
bwase.o: kvec.h
70-
bwase1.o: bwatpx.h bwtaln.h bwt.h stdaln.h bntseq.h kvec.h kstring.h
71-
bwase4.o: bwatpx.h bwtaln.h bwt.h stdaln.h bntseq.h kvec.h kstring.h
72-
bwaseio1.o: bwatpx.h bwtaln.h bwt.h stdaln.h bntseq.h kvec.h kstring.h
73-
bwaseqio.o: bwtaln.h bwt.h stdaln.h utils.h bamlite.h kseq.h
74-
bwt.o: utils.h bwt.h
75-
bwt_lite.o: bwt_lite.h
76-
bwtaln.o: bwtaln.h bwt.h stdaln.h bwtgap.h utils.h
77-
bwtgap.o: bwtgap.h bwt.h bwtaln.h stdaln.h
57+
bamlite.o: bamlite.h utils.h
58+
bntseq.o: bntseq.h kseq.h main.h utils.h
59+
bwape.o: bntseq.h bwatpx.h bwt.h bwtaln.h khash.h ksort.h kstring.h kvec.h
60+
bwape.o: stdaln.h utils.h
61+
bwape1.o: bntseq.h bwatpx.h bwt.h bwtaln.h khash.h ksort.h kstring.h kvec.h
62+
bwape1.o: stdaln.h utils.h
63+
bwape2.o: bntseq.h bwatpx.h bwt.h bwtaln.h kstring.h kvec.h stdaln.h utils.h
64+
bwape3.o: bntseq.h bwatpx.h bwt.h bwtaln.h kstring.h kvec.h stdaln.h utils.h
65+
bwape4.o: bntseq.h bwatpx.h bwt.h bwtaln.h kstring.h kvec.h stdaln.h utils.h
66+
bwapeio1.o: bntseq.h bwatpx.h bwt.h bwtaln.h kstring.h kvec.h stdaln.h
67+
bwapeio1.o: utils.h
68+
bwapese1.o: bntseq.h bwatpx.h bwt.h bwtaln.h kstring.h kvec.h stdaln.h
69+
bwapese1.o: utils.h
70+
bwase.o: bntseq.h bwase.h bwatpx.h bwt.h bwtaln.h kstring.h kvec.h stdaln.h
71+
bwase.o: utils.h
72+
bwase1.o: bntseq.h bwatpx.h bwt.h bwtaln.h kstring.h kvec.h stdaln.h utils.h
73+
bwase4.o: bntseq.h bwatpx.h bwt.h bwtaln.h kstring.h kvec.h stdaln.h utils.h
74+
bwaseio1.o: bntseq.h bwatpx.h bwt.h bwtaln.h kstring.h kvec.h stdaln.h
75+
bwaseio1.o: utils.h
76+
bwaseqio.o: bamlite.h bwt.h bwtaln.h kseq.h stdaln.h utils.h
77+
bwatpx.o: bntseq.h bwt.h bwtaln.h kstring.h kvec.h stdaln.h utils.h
78+
bwt.o: bwt.h utils.h
79+
bwt_lite.o: bwt_lite.h utils.h
80+
bwtaln.o: bwt.h bwtaln.h bwtgap.h stdaln.h utils.h
81+
bwtgap.o: bwt.h bwtaln.h bwtgap.h stdaln.h utils.h
7882
bwtindex.o: bntseq.h bwt.h main.h utils.h
7983
bwtio.o: bwt.h utils.h
80-
bwtmisc.o: bntseq.h utils.h main.h bwt.h
81-
bwtsw2_aux.o: bntseq.h bwt_lite.h utils.h bwtsw2.h bwt.h stdaln.h kstring.h
82-
bwtsw2_aux.o: kseq.h ksort.h
83-
bwtsw2_chain.o: bwtsw2.h bntseq.h bwt_lite.h bwt.h ksort.h
84-
bwtsw2_core.o: bwt_lite.h bwtsw2.h bntseq.h bwt.h kvec.h khash.h ksort.h
85-
bwtsw2_main.o: bwt.h bwtsw2.h bntseq.h bwt_lite.h utils.h
86-
cs2nt.o: bwtaln.h bwt.h stdaln.h
87-
kstring.o: kstring.h
88-
main.o: main.h
89-
simple_dp.o: stdaln.h utils.h kseq.h
90-
stdaln.o: stdaln.h
84+
bwtmisc.o: bntseq.h bwt.h main.h utils.h
85+
bwtsw2.o: bntseq.h bwt.h bwt_lite.h
86+
bwtsw2_aux.o: bntseq.h bwt.h bwt_lite.h bwtsw2.h kseq.h ksort.h kstring.h
87+
bwtsw2_aux.o: stdaln.h utils.h
88+
bwtsw2_chain.o: bntseq.h bwt.h bwt_lite.h bwtsw2.h ksort.h utils.h
89+
bwtsw2_core.o: bntseq.h bwt.h bwt_lite.h bwtsw2.h khash.h ksort.h kvec.h
90+
bwtsw2_core.o: utils.h
91+
bwtsw2_main.o: bntseq.h bwt.h bwt_lite.h bwtsw2.h utils.h
92+
cs2nt.o: bwt.h bwtaln.h stdaln.h utils.h
93+
is.o: utils.h
94+
kstring.o: kstring.h utils.h
95+
main.o: main.h utils.h
96+
simple_dp.o: kseq.h stdaln.h utils.h
97+
stdaln.o: stdaln.h utils.h
9198
utils.o: utils.h

bamlite.c

+22-16
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include <ctype.h>
33
#include <string.h>
44
#include <stdio.h>
5+
#include "utils.h"
56
#include "bamlite.h"
67

78
/*********************
@@ -53,7 +54,7 @@ int bam_is_be;
5354
bam_header_t *bam_header_init()
5455
{
5556
bam_is_be = bam_is_big_endian();
56-
return (bam_header_t*)calloc(1, sizeof(bam_header_t));
57+
return (bam_header_t*)xcalloc(1, sizeof(bam_header_t));
5758
}
5859

5960
void bam_header_destroy(bam_header_t *header)
@@ -62,11 +63,11 @@ void bam_header_destroy(bam_header_t *header)
6263
if (header == 0) return;
6364
if (header->target_name) {
6465
for (i = 0; i < header->n_targets; ++i)
65-
free(header->target_name[i]);
66+
if (header->target_name[i]) free(header->target_name[i]);
67+
if (header->target_len) free(header->target_len);
6668
free(header->target_name);
67-
free(header->target_len);
6869
}
69-
free(header->text);
70+
if (header->text) free(header->text);
7071
free(header);
7172
}
7273

@@ -80,28 +81,33 @@ bam_header_t *bam_header_read(bamFile fp)
8081
magic_len = bam_read(fp, buf, 4);
8182
if (magic_len != 4 || strncmp(buf, "BAM\001", 4) != 0) {
8283
fprintf(stderr, "[bam_header_read] invalid BAM binary header (this is not a BAM file).\n");
83-
return 0;
84+
return NULL;
8485
}
8586
header = bam_header_init();
8687
// read plain text and the number of reference sequences
87-
bam_read(fp, &header->l_text, 4);
88+
if (bam_read(fp, &header->l_text, 4) != 4) goto fail;
8889
if (bam_is_be) bam_swap_endian_4p(&header->l_text);
89-
header->text = (char*)calloc(header->l_text + 1, 1);
90-
bam_read(fp, header->text, header->l_text);
91-
bam_read(fp, &header->n_targets, 4);
90+
header->text = (char*)xcalloc(header->l_text + 1, 1);
91+
if (bam_read(fp, header->text, header->l_text) != header->l_text) goto fail;
92+
if (bam_read(fp, &header->n_targets, 4) != 4) goto fail;
9293
if (bam_is_be) bam_swap_endian_4p(&header->n_targets);
9394
// read reference sequence names and lengths
94-
header->target_name = (char**)calloc(header->n_targets, sizeof(char*));
95-
header->target_len = (uint32_t*)calloc(header->n_targets, 4);
95+
header->target_name = (char**)xcalloc(header->n_targets, sizeof(char*));
96+
header->target_len = (uint32_t*)xcalloc(header->n_targets, 4);
9697
for (i = 0; i != header->n_targets; ++i) {
97-
bam_read(fp, &name_len, 4);
98+
if (bam_read(fp, &name_len, 4) != 4) goto fail;
9899
if (bam_is_be) bam_swap_endian_4p(&name_len);
99-
header->target_name[i] = (char*)calloc(name_len, 1);
100-
bam_read(fp, header->target_name[i], name_len);
101-
bam_read(fp, &header->target_len[i], 4);
100+
header->target_name[i] = (char*)xcalloc(name_len, 1);
101+
if (bam_read(fp, header->target_name[i], name_len) != name_len) {
102+
goto fail;
103+
}
104+
if (bam_read(fp, &header->target_len[i], 4) != 4) goto fail;
102105
if (bam_is_be) bam_swap_endian_4p(&header->target_len[i]);
103106
}
104107
return header;
108+
fail:
109+
bam_header_destroy(header);
110+
return NULL;
105111
}
106112

107113
static void swap_endian_data(const bam1_core_t *c, int data_len, uint8_t *data)
@@ -146,7 +152,7 @@ int bam_read1(bamFile fp, bam1_t *b)
146152
if (b->m_data < b->data_len) {
147153
b->m_data = b->data_len;
148154
kroundup32(b->m_data);
149-
b->data = (uint8_t*)realloc(b->data, b->m_data);
155+
b->data = (uint8_t*)xrealloc(b->data, b->m_data);
150156
}
151157
if (bam_read(fp, b->data, b->data_len) != b->data_len) return -4;
152158
b->l_aux = b->data_len - c->n_cigar * 4 - c->l_qname - c->l_qseq - (c->l_qseq+1)/2;

bamlite.h

+5-4
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33

44
#include <stdint.h>
55
#include <zlib.h>
6+
#include "utils.h"
67

78
typedef gzFile bamFile;
8-
#define bam_open(fn, mode) gzopen(fn, mode)
9+
#define bam_open(fn, mode) xzopen(fn, mode)
910
#define bam_dopen(fd, mode) gzdopen(fd, mode)
10-
#define bam_close(fp) gzclose(fp)
11-
#define bam_read(fp, buf, size) gzread(fp, buf, size)
11+
#define bam_close(fp) err_gzclose(fp)
12+
#define bam_read(fp, buf, size) err_gzread(fp, buf, size)
1213

1314
typedef struct {
1415
int32_t n_targets;
@@ -71,7 +72,7 @@ typedef struct {
7172
#define bam1_seqi(s, i) ((s)[(i)/2] >> 4*(1-(i)%2) & 0xf)
7273
#define bam1_aux(b) ((b)->data + (b)->core.n_cigar*4 + (b)->core.l_qname + (b)->core.l_qseq + ((b)->core.l_qseq + 1)/2)
7374

74-
#define bam_init1() ((bam1_t*)calloc(1, sizeof(bam1_t)))
75+
#define bam_init1() ((bam1_t*)xcalloc(1, sizeof(bam1_t)))
7576
#define bam_destroy1(b) do { \
7677
if (b) { free((b)->data); free(b); } \
7778
} while (0)

0 commit comments

Comments
 (0)