malloc calls and ioctl calls to soundcard cause segfault
shawnwebb at softhome.net
shawnwebb at softhome.net
Wed Oct 13 18:50:51 PDT 2004
Thanks for pointing that out. The OSS documentation didn't go into detail
about what type of arg was needed for getospace, so I assumed int.
Dan Nelson writes:
> 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 at allantgroup.com
> _______________________________________________
> freebsd-hackers at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
More information about the freebsd-hackers
mailing list