21 #include "../SDL_internal.h" 25 #if SDL_AUDIO_DRIVER_NETBSD || SDL_AUDIO_DRIVER_OSS || SDL_AUDIO_DRIVER_SUNAUDIO 28 #include <sys/types.h> 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" 50 test_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;
75 SDL_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);
void SDL_EnumUnixAudioDevices(const int classic, int(*test)(int))
#define OPEN_FLAGS_OUTPUT
#define SDL_assert(condition)
#define SDL_arraysize(array)
void SDL_AddAudioDevice(const int iscapture, const char *name, void *handle)