On 24/09/15 19:50, Robert Millan wrote:
El 24/09/15 a les 20:21, Antti Kantee ha escrit:
On 24/09/15 18:15, Robert Millan wrote:
Also, if you want to use just ossaudio on Hurd, wouldn't it be better
to use the in-(rump-)kernel ossaudio compat translator
(sys/compat/ossaudio)?
There's a big problem with using sys/compat/ossaudio on non-NetBSD:
since
it is built in the kernel tree, it includes the NetBSD version of
<sys/soundcard.h>
and also other headers like <sys/audioio.h> and <sys/ioccom.h>.
No, it does *not* include NetBSD <sys/soundcard.h>. The entire point
of the module is to not use it(!)
Sorry I used the wrong wording, what I meant to say is that it expects
ioctl parameters
using a different ABI than the one provided by system soundcard.h.
My understanding is that using compat/ossaudio to support userland OSS
applications
on non-NetBSD systems would require writing an intermediate layer to do
the ABI
translation. And performing a few minor adjustments to libossaudio is
much easier
than writing an ABI conversion layer :-)
The premise for using libossaudio is that you are calling
rump_sys_ioctl() (= ABI minus ioctl params). libossaudio mangles the
ioctl params before the ioctl() call ("explicitly"). compat/ossaudio
mangles the params after the call but before passing them
("implicitly"). Apart from where the ioctl parameters are translated
there is no [fundamental] difference between libossaudio and
compat/ossaudio.
Let me put it this way: the sys/soundcard.h that libossaudio installs
redefines ioctl so that it catches the ioctl calls before they go hit
the kernel. How does that work with a stock soundcard.h from somewhere
else? Is there some indirection in your stack somewhere that I'm not
aware of?
The reason I'm trying to find alternate solutions is that I find
manually sprinkling ifdefs into the switch quite ugly and fragile and
would rather see a cleaner solution. Another way to work around that
problem is figure out how to use some sort of translator before the
switch so that the primary code path doesn't get polluted with ifdefs
... or to find someone who's not bothered by ifdefs to commit your patch :/