Handle lseek errors in WAV output driver

Signed-off-by: Claudio Matsuoka <cmatsuoka@gmail.com>
master
Claudio Matsuoka 11 years ago
parent f37447228f
commit 269a6c1310
  1. 10
      src/sound_aiff.c
  2. 10
      src/sound_wav.c

@ -120,22 +120,18 @@ static void play(void *b, int len)
static void deinit(void)
{
unsigned long tmp;
if (size > 54) {
if (lseek(fd, 4, SEEK_SET) == 4) { /* FORM chunk size */
tmp = size - 8;
write32b(fd, tmp);
write32b(fd, size - 8);
}
if (lseek(fd, 22, SEEK_SET) == 22) { /* COMM frames */
tmp = (size - 54) / (bits / 8) / channels;
unsigned long tmp = (size - 54) / (bits / 8) / channels;
write32b(fd, tmp);
}
if (lseek(fd, 42, SEEK_SET) == 42) { /* SSND chunk size */
tmp = size - 48; /* minus header + 8 */
write32b(fd, tmp);
write32b(fd, size - 48); /* minus header + 8 */
}
}

@ -136,11 +136,13 @@ static void play(void *b, int len)
static void deinit(void)
{
lseek(fd, 40, SEEK_SET);
write_32l(fd, size);
if (lseek(fd, 40, SEEK_SET) == 40) {
write_32l(fd, size);
}
lseek(fd, 4, SEEK_SET);
write_32l(fd, size + 40);
if (lseek(fd, 4, SEEK_SET) == 4) {
write_32l(fd, size + 40);
}
if (fd > 0) {
close(fd);

Loading…
Cancel
Save