|
10 | 10 | #include <string.h> |
11 | 11 | #include "sound.h" |
12 | 12 |
|
13 | | -LIST_HEAD(sound_driver_list); |
14 | | - |
15 | | -static void register_sound_driver(struct sound_driver *sd) |
16 | | -{ |
17 | | - list_add_tail(&sd->list, &sound_driver_list); |
18 | | -} |
19 | | - |
20 | | -void init_sound_drivers(void) |
21 | | -{ |
| 13 | +const struct sound_driver *const sound_driver_list[] = { |
22 | 14 | #ifdef SOUND_AHI |
23 | | - register_sound_driver(&sound_ahi); |
| 15 | + &sound_ahi, |
24 | 16 | #endif |
25 | 17 | #ifdef SOUND_BEOS |
26 | | - register_sound_driver(&sound_beos); |
| 18 | + &sound_beos, |
27 | 19 | #endif |
28 | 20 | #ifdef SOUND_SNDIO |
29 | | - register_sound_driver(&sound_sndio); |
| 21 | + &sound_sndio, |
30 | 22 | #endif |
31 | 23 | #ifdef SOUND_NETBSD |
32 | | - register_sound_driver(&sound_netbsd); |
| 24 | + &sound_netbsd, |
33 | 25 | #endif |
34 | 26 | #ifdef SOUND_BSD |
35 | | - register_sound_driver(&sound_bsd); |
| 27 | + &sound_bsd, |
36 | 28 | #endif |
37 | 29 | #ifdef SOUND_SOLARIS |
38 | | - register_sound_driver(&sound_solaris); |
| 30 | + &sound_solaris, |
39 | 31 | #endif |
40 | 32 | #ifdef SOUND_SGI |
41 | | - register_sound_driver(&sound_sgi); |
| 33 | + &sound_sgi, |
42 | 34 | #endif |
43 | 35 | #ifdef SOUND_HPUX |
44 | | - register_sound_driver(&sound_hpux); |
| 36 | + &sound_hpux, |
45 | 37 | #endif |
46 | 38 | #ifdef SOUND_AIX |
47 | | - register_sound_driver(&sound_aix); |
| 39 | + &sound_aix, |
48 | 40 | #endif |
49 | 41 | #ifdef SOUND_COREAUDIO |
50 | | - register_sound_driver(&sound_coreaudio); |
| 42 | + &sound_coreaudio, |
51 | 43 | #endif |
52 | 44 | #ifdef SOUND_OS2DART |
53 | | - register_sound_driver(&sound_os2dart); |
| 45 | + &sound_os2dart, |
54 | 46 | #endif |
55 | 47 | #ifdef SOUND_WIN32 |
56 | | - register_sound_driver(&sound_win32); |
| 48 | + &sound_win32, |
57 | 49 | #endif |
58 | 50 | #ifdef SOUND_PULSEAUDIO |
59 | | - register_sound_driver(&sound_pulseaudio); |
| 51 | + &sound_pulseaudio, |
60 | 52 | #endif |
61 | 53 | #ifdef SOUND_ALSA |
62 | | - register_sound_driver(&sound_alsa); |
| 54 | + &sound_alsa, |
63 | 55 | #endif |
64 | 56 | #ifdef SOUND_ALSA05 |
65 | | - register_sound_driver(&sound_alsa05); |
| 57 | + &sound_alsa05, |
66 | 58 | #endif |
67 | 59 | #ifdef SOUND_OSS |
68 | | - register_sound_driver(&sound_oss); |
| 60 | + &sound_oss, |
69 | 61 | #endif |
70 | 62 | #ifdef SOUND_QNX |
71 | | - register_sound_driver(&sound_qnx); |
| 63 | + &sound_qnx, |
72 | 64 | #endif |
73 | 65 | #ifdef SOUND_SB |
74 | | - register_sound_driver(&sound_sb); |
75 | | -#endif |
76 | | - register_sound_driver(&sound_wav); |
77 | | - register_sound_driver(&sound_aiff); |
78 | | - register_sound_driver(&sound_file); |
79 | | - register_sound_driver(&sound_null); |
80 | | -} |
| 66 | + &sound_sb, |
| 67 | +#endif |
| 68 | + &sound_wav, |
| 69 | + &sound_aiff, |
| 70 | + &sound_file, |
| 71 | + &sound_null, |
| 72 | + NULL |
| 73 | +}; |
81 | 74 |
|
82 | | -struct sound_driver *select_sound_driver(struct options *options) |
| 75 | +const struct sound_driver *select_sound_driver(struct options *options) |
83 | 76 | { |
84 | | - struct list_head *head; |
85 | | - struct sound_driver *sd; |
| 77 | + const struct sound_driver *sd; |
86 | 78 | const char *pref = options->driver_id; |
| 79 | + int i; |
87 | 80 |
|
88 | 81 | if (pref) { |
89 | | - list_for_each(head, &sound_driver_list) { |
90 | | - sd = list_entry(head, struct sound_driver, list); |
| 82 | + for (i = 0; sound_driver_list[i] != NULL; i++) { |
| 83 | + sd = sound_driver_list[i]; |
91 | 84 | if (strcmp(sd->id, pref) == 0) { |
92 | 85 | if (sd->init(options) == 0) { |
93 | 86 | return sd; |
94 | 87 | } |
95 | 88 | } |
96 | 89 | } |
97 | 90 | } else { |
98 | | - list_for_each(head, &sound_driver_list) { |
99 | | - sd = list_entry(head, struct sound_driver, list); |
| 91 | + for (i = 0; sound_driver_list[i] != NULL; i++) { |
| 92 | + sd = sound_driver_list[i]; |
100 | 93 | /* Probing */ |
101 | 94 | if (sd->init(options) == 0) { |
102 | 95 | /* found */ |
|
0 commit comments