diff options
Diffstat (limited to 'audio/xmp/patches/patch-am')
-rw-r--r-- | audio/xmp/patches/patch-am | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/audio/xmp/patches/patch-am b/audio/xmp/patches/patch-am new file mode 100644 index 00000000000..cb750c22ba1 --- /dev/null +++ b/audio/xmp/patches/patch-am @@ -0,0 +1,155 @@ +$NetBSD: patch-am,v 1.1 2006/06/30 12:54:38 tron Exp $ + +--- src/loaders/mdl_load.c.orig 2000-12-29 18:08:33.000000000 +0000 ++++ src/loaders/mdl_load.c 2006-06-30 12:57:09.000000000 +0100 +@@ -35,6 +35,35 @@ + static struct mdl_envelope *v_env; + static struct mdl_envelope *p_env; + ++static void * ++get_uint16_le(void *p, uint16_t *x16) ++{ ++ uint8_t *bp; ++ ++ bp = p; ++ *x16 = bp[0] | (bp[1] << 8); ++ return bp + sizeof(uint16); ++} ++ ++static void * ++get_uint16_le_int(void *p, int *ip) ++{ ++ uint8_t *bp; ++ ++ bp = p; ++ *ip = bp[0] | (bp[1] << 8); ++ return bp + sizeof(uint16); ++} ++ ++static void * ++get_uint32_le_int(void *p, int *ip) ++{ ++ uint8_t *bp; ++ ++ bp = p; ++ *ip = bp[0] | (bp[1] << 8) | (bp[2] << 16) | (bp[3] << 24); ++ return bp + sizeof(uint32); ++} + + /* Effects 1-6 (note effects) can only be entered in the first effect + * column, G-L (volume-effects) only in the second column. +@@ -130,7 +159,8 @@ + unsigned int x; + + if (i == 0) { +- b = *((uint32 *)(*buf))++; ++ (void)memcpy(&b, *buf, sizeof(b)); ++ *buf += sizeof(b); + n = 32; + return 0; + } +@@ -268,8 +298,7 @@ + + buffer += 16; /* Skip pattern name */ + for (j = 0; j < chn; j++) { +- x16 = *((uint16 *)buffer)++; +- L_ENDIAN16 (x16); ++ buffer = get_uint16_le(buffer, &x16); + xxp[i]->info[j].index = x16; + } + if (V (0)) +@@ -297,8 +326,7 @@ + xxp[i]->rows = 64; + + for (j = 0; j < 32; j++) { +- x16 = *((uint16 *)buffer)++; +- L_ENDIAN16 (x16); ++ buffer = get_uint16_le(buffer, &x16); + if (j < xxh->chn) + xxp[i]->info[j].index = x16; + } +@@ -315,7 +343,8 @@ + int i, j, k, row, len; + struct xxm_track *track; + +- xxh->trk = *((uint16 *) buffer)++ + 1; ++ buffer = get_uint16_le_int(buffer, &xxh->trk); ++ xxh->trk++; + + if (V (0)) + report ("Stored tracks : %d ", xxh->trk); +@@ -330,7 +359,7 @@ + + for (i = 1; i < xxh->trk; i++) { + /* Length of the track in bytes */ +- len = *((uint16 *) buffer)++; ++ buffer = get_uint16_le_int(buffer, &len); + + memset (track, 0, sizeof (struct xxm_track) + + sizeof (struct xxm_event) * 256); +@@ -449,7 +478,7 @@ + xxih[i].rls = *(uint16 *)buffer; + L_ENDIAN32 (xxih[i].rls); + } +- ((uint16 *)buffer)++; ++ buffer += sizeof(uint16); + + xxi[i][j].vra = *buffer++; + xxi[i][j].vde = *buffer++; +@@ -498,15 +527,12 @@ + buffer += 32; /* Sample name */ + buffer += 8; /* Sample filename */ + +- c2spd[i] = *((uint32 *)buffer)++; ++ (void)memcpy(&c2spd[i], buffer, sizeof(c2spd[i])); ++ buffer += sizeof(c2spd[i]); + +- xxs[i].len = *((uint32 *)buffer)++; +- xxs[i].lps = *((uint32 *)buffer)++; +- xxs[i].lpe = *((uint32 *)buffer)++; +- +- L_ENDIAN32 (xxs[i].len); +- L_ENDIAN32 (xxs[i].lps); +- L_ENDIAN32 (xxs[i].lpe); ++ buffer = get_uint32_le_int(buffer, &xxs[i].len); ++ buffer = get_uint32_le_int(buffer, &xxs[i].lps); ++ buffer = get_uint32_le_int(buffer, &xxs[i].lpe); + + xxs[i].flg = xxs[i].lpe > 0 ? WAVE_LOOPING : 0; + xxs[i].lpe = xxs[i].lps + xxs[i].lpe; +@@ -579,16 +605,11 @@ + buffer += 32; /* Sample name */ + buffer += 8; /* Sample filename */ + +- c2spd[i] = *((uint16 *)buffer)++; +- L_ENDIAN16 (c2spd[i]); ++ buffer = get_uint16_le_int(buffer, &c2spd[i]); + +- xxs[i].len = *((uint32 *)buffer)++; +- xxs[i].lps = *((uint32 *)buffer)++; +- xxs[i].lpe = *((uint32 *)buffer)++; +- +- L_ENDIAN32 (xxs[i].len); +- L_ENDIAN32 (xxs[i].lps); +- L_ENDIAN32 (xxs[i].lpe); ++ buffer = get_uint32_le_int(buffer, &xxs[i].len); ++ buffer = get_uint32_le_int(buffer, &xxs[i].lps); ++ buffer = get_uint32_le_int(buffer, &xxs[i].lpe); + + xxs[i].flg = xxs[i].lpe > 0 ? WAVE_LOOPING : 0; + xxs[i].lpe = xxs[i].lps + xxs[i].lpe; +@@ -648,12 +669,12 @@ + buffer += xxs[i].len; + break; + case 1: +- len = *((uint32 *)buffer)++; ++ buffer = get_uint32_le_int(buffer, &len); + unpack_sample8 (smpbuf, buffer, xxs[i].len); + buffer += len; + break; + case 2: +- len = *((uint32 *)buffer)++; ++ buffer = get_uint32_le_int(buffer, &len); + unpack_sample16 ((uint16 *)smpbuf, buffer, xxs[i].len >> 1); + buffer += len; + break; |