Changeset: 64670d48b9af for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=64670d48b9af
Modified Files:
sql/backends/monet5/vaults/bam/bam_wrapper.c
Branch: Dec2016
Log Message:
No unaligned memory access.
diffs (106 lines):
diff --git a/sql/backends/monet5/vaults/bam/bam_wrapper.c
b/sql/backends/monet5/vaults/bam/bam_wrapper.c
--- a/sql/backends/monet5/vaults/bam/bam_wrapper.c
+++ b/sql/backends/monet5/vaults/bam/bam_wrapper.c
@@ -1613,13 +1613,16 @@ bam1_t2alignment(bam_wrapper * bw, lng v
a_out->cigar[1] = '\0';
} else {
uint32_t *cigar_bin = bam1_cigar(a_in);
+ uint32_t c;
int index = 0;
for (i = 0; i < a_in->core.n_cigar; ++i) {
+ /* work around unaligned access */
+ memcpy(&c, &cigar_bin[i], sizeof(c));
snprintf(&a_out->cigar[index],
a_out->cigar_size - index, "%u%c",
- cigar_bin[i] >> BAM_CIGAR_SHIFT,
- bam_cigar_opchr(cigar_bin[i]));
+ c >> BAM_CIGAR_SHIFT,
+ bam_cigar_opchr(c));
index += strlen(&a_out->cigar[index]);
}
}
@@ -1750,25 +1753,37 @@ write_aux_bam1_t(bam_wrapper * bw, bam1_
kputw(*(int8_t *) s, &aux_value_stream);
++s;
} else if (type == 'S') {
+ uint16_t u;
+ memcpy(&u, s, sizeof(uint16_t));
type_str[0] = 'i';
- kputw(*(uint16_t *) s, &aux_value_stream);
+ kputw(u, &aux_value_stream);
s += 2;
} else if (type == 's') {
+ int16_t i;
+ memcpy(&i, s, sizeof(int16_t));
type_str[0] = 'i';
- kputw(*(int16_t *) s, &aux_value_stream);
+ kputw(i, &aux_value_stream);
s += 2;
} else if (type == 'I') {
+ uint32_t u;
+ memcpy(&u, s, sizeof(uint32_t));
type_str[0] = 'i';
- kputuw(*(uint32_t *) s, &aux_value_stream);
+ kputuw(u, &aux_value_stream);
s += 4;
} else if (type == 'i') {
- kputw(*(int32_t *) s, &aux_value_stream);
+ int32_t i;
+ memcpy(&i, s, sizeof(int32_t));
+ kputw(i, &aux_value_stream);
s += 4;
} else if (type == 'f') {
- ksprintf(&aux_value_stream, "%g", *(float *) s);
+ float f;
+ memcpy(&f, s, sizeof(float));
+ ksprintf(&aux_value_stream, "%g", f);
s += 4;
} else if (type == 'd') {
- ksprintf(&aux_value_stream, "%lg", *(double *) s);
+ double d;
+ memcpy(&d, s, sizeof(double));
+ ksprintf(&aux_value_stream, "%lg", d);
s += 8;
} else if (type == 'Z' || type == 'H') {
while (*s) {
@@ -1794,24 +1809,29 @@ write_aux_bam1_t(bam_wrapper * bw, bam1_
&aux_value_stream);
++s;
} else if ('s' == sub_type) {
- kputw(*(int16_t *) s,
- &aux_value_stream);
+ int16_t i;
+ memcpy(&i, s, sizeof(int16_t));
+ kputw(i, &aux_value_stream);
s += 2;
} else if ('S' == sub_type) {
- kputw(*(uint16_t *) s,
- &aux_value_stream);
+ uint16_t u;
+ memcpy(&u, s, sizeof(uint16_t));
+ kputw(u, &aux_value_stream);
s += 2;
} else if ('i' == sub_type) {
- kputw(*(int32_t *) s,
- &aux_value_stream);
+ int32_t i;
+ memcpy(&i, s, sizeof(int32_t));
+ kputw(i, &aux_value_stream);
s += 4;
} else if ('I' == sub_type) {
- kputuw(*(uint32_t *) s,
- &aux_value_stream);
+ uint32_t u;
+ memcpy(&u, s, sizeof(uint32_t));
+ kputuw(u, &aux_value_stream);
s += 4;
} else if ('f' == sub_type) {
- ksprintf(&aux_value_stream, "%g",
- *(float *) s);
+ float f;
+ memcpy(&f, s, sizeof(float));
+ ksprintf(&aux_value_stream, "%g", f);
s += 4;
}
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list