Date: Wed, 13 Oct 2004 16:00:29 -0500 From: Dan Nelson <dnelson@allantgroup.com> To: Shawn Webb <shawnwebb@softhome.net> Cc: freebsd-hackers@freebsd.org Subject: Re: malloc calls and ioctl calls to soundcard cause segfault Message-ID: <20041013210029.GA88757@dan.emsphone.com> In-Reply-To: <001201c4b224$fcd68320$65cfe404@shawns> References: <001201c4b224$fcd68320$65cfe404@shawns>
index | next in thread | previous in thread | raw e-mail
In the last episode (Oct 14), Shawn Webb said:
> I've got to rewrite the source due to hard disk problems, so I'll just put
> it in this email:
>
> arg = FORMAT;
> if (ioctl(fd, SNDCTL_DSP_SETFMT, &arg) < 0)
> {
> perror("ioctl setfmt");
> exit(1);
> }
>
> if (ioctl(fd, SNDCTL_DSP_GETOSPACE, &arg) < 0)
> {
> perror("ioctl getospace");
> exit(1);
> }
SNDCTL_DSP_GETOSPACE takes a pointer to an "audio_buf_info" type, so
you actually asked it to write sizeof(audio_buf_info) bytes to the
location of the "arg" variable, which is... (drumroll)
on the stack :)
Create another variable "audio_buf_info info;" above main, and change
that call to "if (ioctl(fd, SNDCTL_DSP_GETOSPACE, &info) < 0)" and your
program will run fine.
--
Dan Nelson
dnelson@allantgroup.com
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20041013210029.GA88757>
