21#include "../SDL_internal.h"
25#if SDL_AUDIO_DRIVER_NETBSD || SDL_AUDIO_DRIVER_OSS || SDL_AUDIO_DRIVER_SUNAUDIO
36#if defined(__NETBSD__) || defined(__OPENBSD__)
37#define _PATH_DEV_DSP "/dev/audio"
39#define _PATH_DEV_DSP "/dev/dsp"
42#ifndef _PATH_DEV_DSP24
43#define _PATH_DEV_DSP24 "/dev/sound/dsp"
45#ifndef _PATH_DEV_AUDIO
46#define _PATH_DEV_AUDIO "/dev/audio"
50test_device(
const int iscapture,
const char *fname,
int flags,
int (*test) (
int fd))
53 if ((stat(fname, &sb) == 0) && (S_ISCHR(sb.st_mode))) {
54 const int audio_fd = open(fname,
flags, 0);
56 const int okay = test(audio_fd);
59 static size_t dummyhandle = 0;
75SDL_EnumUnixAudioDevices_Internal(
const int iscapture,
const int classic,
int (*test)(
int))
88 audiodev = _PATH_DEV_AUDIO;
93 if (((stat(
"/dev/sound", &sb) == 0) && S_ISDIR(sb.st_mode))
94 && ((stat(_PATH_DEV_DSP24, &sb) == 0)
95 && S_ISCHR(sb.st_mode))) {
96 audiodev = _PATH_DEV_DSP24;
98 audiodev = _PATH_DEV_DSP;
102 test_device(iscapture, audiodev,
flags, test);
104 if (
SDL_strlen(audiodev) < (
sizeof(audiopath) - 3)) {
106 while (instance <= 64) {
108 "%s%d", audiodev, instance);
110 test_device(iscapture, audiopath,
flags, test);
118 SDL_EnumUnixAudioDevices_Internal(
SDL_TRUE, classic, test);
119 SDL_EnumUnixAudioDevices_Internal(
SDL_FALSE, classic, test);
#define SDL_assert(condition)
void SDL_AddAudioDevice(const int iscapture, const char *name, void *handle)
#define OPEN_FLAGS_OUTPUT
void SDL_EnumUnixAudioDevices(const int classic, int(*test)(int))
#define SDL_arraysize(array)