head 1.2; access; symbols pkgsrc-2013Q2:1.2.0.54 pkgsrc-2013Q2-base:1.2 pkgsrc-2012Q4:1.2.0.52 pkgsrc-2012Q4-base:1.2 pkgsrc-2011Q4:1.2.0.50 pkgsrc-2011Q4-base:1.2 pkgsrc-2011Q2:1.2.0.48 pkgsrc-2011Q2-base:1.2 pkgsrc-2009Q4:1.2.0.46 pkgsrc-2009Q4-base:1.2 pkgsrc-2008Q4:1.2.0.44 pkgsrc-2008Q4-base:1.2 pkgsrc-2008Q3:1.2.0.42 pkgsrc-2008Q3-base:1.2 cube-native-xorg:1.2.0.40 cube-native-xorg-base:1.2 pkgsrc-2008Q2:1.2.0.38 pkgsrc-2008Q2-base:1.2 pkgsrc-2008Q1:1.2.0.36 pkgsrc-2008Q1-base:1.2 pkgsrc-2007Q4:1.2.0.34 pkgsrc-2007Q4-base:1.2 pkgsrc-2007Q3:1.2.0.32 pkgsrc-2007Q3-base:1.2 pkgsrc-2007Q2:1.2.0.30 pkgsrc-2007Q2-base:1.2 pkgsrc-2007Q1:1.2.0.28 pkgsrc-2007Q1-base:1.2 pkgsrc-2006Q4:1.2.0.26 pkgsrc-2006Q4-base:1.2 pkgsrc-2006Q3:1.2.0.24 pkgsrc-2006Q3-base:1.2 pkgsrc-2006Q2:1.2.0.22 pkgsrc-2006Q2-base:1.2 pkgsrc-2006Q1:1.2.0.20 pkgsrc-2006Q1-base:1.2 pkgsrc-2005Q4:1.2.0.18 pkgsrc-2005Q4-base:1.2 pkgsrc-2005Q3:1.2.0.16 pkgsrc-2005Q3-base:1.2 pkgsrc-2005Q2:1.2.0.14 pkgsrc-2005Q2-base:1.2 pkgsrc-2005Q1:1.2.0.12 pkgsrc-2005Q1-base:1.2 pkgsrc-2004Q4:1.2.0.10 pkgsrc-2004Q4-base:1.2 pkgsrc-2004Q3:1.2.0.8 pkgsrc-2004Q3-base:1.2 pkgsrc-2004Q2:1.2.0.6 pkgsrc-2004Q2-base:1.2 pkgsrc-2004Q1:1.2.0.4 pkgsrc-2004Q1-base:1.2 pkgsrc-2003Q4:1.2.0.2 pkgsrc-2003Q4-base:1.2 netbsd-1-6:1.1.0.6 netbsd-1-6-RELEASE-base:1.1 pkgviews:1.1.0.2 pkgviews-base:1.1; locks; strict; comment @# @; 1.2 date 2002.10.31.12.14.40; author dillo; state dead; branches; next 1.1; 1.1 date 2002.06.29.01.48.53; author kristerw; state Exp; branches; next ; desc @@ 1.2 log @remove patches no longer needed after last update @ text @$NetBSD: patch-ac,v 1.1 2002/06/29 01:48:53 kristerw Exp $ --- ux_audio_oss.c.orig Wed Nov 22 07:31:17 2000 +++ ux_audio_oss.c Sat Jun 29 03:25:37 2002 @@@@ -86,12 +86,37 @@@@ static void play_sound(int volume, int repeats) { struct sigaction sa; + int format = AFMT_U8; + int channels = 1; - dsp_fd = open("/dev/dsp", O_WRONLY); + dsp_fd = open(SOUND_DEV, O_WRONLY); if (dsp_fd < 0) { - perror("/dev/dsp"); + perror(SOUND_DEV); _exit(1); } + + /* This section of code fixes the nasty problem of samples + * being played with pops and scratches when used with a + * non-Linux system implementing OSS sound. + */ + if (ioctl(dsp_fd, SNDCTL_DSP_SETFMT, &format) == -1) { + perror(SOUND_DEV); + exit(1); + } + if (format != AFMT_U8) { + fprintf(stderr, "bad sound format\n"); + exit(1); + } + if (ioctl(dsp_fd, SNDCTL_DSP_CHANNELS, &channels) == -1) { + perror(SOUND_DEV); + exit(1); + } + if (channels != 1) { + fprintf(stderr, "bad channels\n"); + exit(1); + } + /* End sound fix from Torbjorn Andersson */ + ioctl(dsp_fd, SNDCTL_DSP_SPEED, &sample_rate); if (volume != 255) { @@@@ -177,6 +202,7 @@@@ char *filename; const char *basename, *dotpos; int namelen; + int read_length; if (sound_buffer != NULL && current_num == number) return; @@@@ -211,27 +237,38 @@@@ fgetc(samples); fgetc(samples); sound_length = fgetc(samples) << 8; sound_length |= fgetc(samples); + sound_buffer = NULL; + if (sound_length > 0) { sound_buffer = malloc(sound_length); - if (! sound_buffer) { + if (!sound_buffer) { perror("malloc"); return; } - - if (sound_length < 0 || - fread(sound_buffer, 1, sound_length, samples) < sound_length) { - if (feof(samples)) - fprintf(stderr, "%s: premature EOF\n", filename); - else { + read_length = fread(sound_buffer, 1, sound_length, samples); + if (read_length < sound_length) { + if (feof(samples)) { + /* + * One of the Sherlock samples trigger this for me, so let's make it + * a non-fatal error. + */ + sound_buffer = realloc(sound_buffer, read_length); + if (! sound_buffer) { + perror("realloc"); + return; + } + sound_length = read_length; + } else { errno = ferror(samples); perror(filename); - } free(sound_buffer); sound_buffer = NULL; } - + } + } current_num = number; }/* os_prepare_sample */ + static void sigchld_handler(int signal) { int status; @ 1.1 log @Correct sound support. Patch provided by David Griffith. Solves PR 14061. @ text @d1 1 a1 1 $NetBSD$ @