Skip to content

Commit f541dab

Browse files
committed
Use a fixed array instead of a list for sound drivers
1 parent 54bdcd7 commit f541dab

26 files changed

+87
-98
lines changed

src/main.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
#include <windows.h>
4646
#endif
4747

48-
static struct sound_driver *sound;
48+
static const struct sound_driver *sound;
4949
static unsigned int foreground_in, foreground_out;
5050
static int refresh_status;
5151

@@ -269,8 +269,6 @@ int main(int argc, char **argv)
269269
srand(tv.tv_usec);
270270
#endif
271271

272-
init_sound_drivers();
273-
274272
memset(&opt, 0, sizeof (struct options));
275273
memset(&control, 0, sizeof (struct control));
276274

src/options.c

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,8 @@
1717

1818
#include "common.h"
1919
#include "sound.h"
20-
#include "list.h"
2120
#include "xmp_version.h"
2221

23-
extern struct list_head sound_driver_list;
24-
2522
enum {
2623
OPT_FX9BUG = 0x105,
2724
OPT_PROBEONLY,
@@ -51,22 +48,22 @@ struct player_mode pmode[] = {
5148

5249
static void usage(char *s, struct options *options)
5350
{
54-
struct list_head *head;
55-
struct sound_driver *sd;
51+
const struct sound_driver *sd;
5652
struct player_mode *pm;
5753
const char *const *hlp;
54+
int i;
5855

5956
printf("Usage: %s [options] [modules]\n", s);
6057

6158
printf("\nAvailable drivers:\n");
6259

63-
list_for_each(head, &sound_driver_list) {
64-
sd = list_entry(head, struct sound_driver, list);
60+
for (i = 0; sound_driver_list[i] != NULL; i++) {
61+
sd = sound_driver_list[i];
6562
printf(" %s (%s)\n", sd->id, sd->description);
6663
}
6764

68-
list_for_each(head, &sound_driver_list) {
69-
sd = list_entry(head, struct sound_driver, list);
65+
for (i = 0; sound_driver_list[i] != NULL; i++) {
66+
sd = sound_driver_list[i];
7067
if (sd->help)
7168
printf("\n%s options:\n", sd->description);
7269
for (hlp = sd->help; hlp && *hlp; hlp += 2)

src/sound.c

Lines changed: 33 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -10,93 +10,86 @@
1010
#include <string.h>
1111
#include "sound.h"
1212

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[] = {
2214
#ifdef SOUND_AHI
23-
register_sound_driver(&sound_ahi);
15+
&sound_ahi,
2416
#endif
2517
#ifdef SOUND_BEOS
26-
register_sound_driver(&sound_beos);
18+
&sound_beos,
2719
#endif
2820
#ifdef SOUND_SNDIO
29-
register_sound_driver(&sound_sndio);
21+
&sound_sndio,
3022
#endif
3123
#ifdef SOUND_NETBSD
32-
register_sound_driver(&sound_netbsd);
24+
&sound_netbsd,
3325
#endif
3426
#ifdef SOUND_BSD
35-
register_sound_driver(&sound_bsd);
27+
&sound_bsd,
3628
#endif
3729
#ifdef SOUND_SOLARIS
38-
register_sound_driver(&sound_solaris);
30+
&sound_solaris,
3931
#endif
4032
#ifdef SOUND_SGI
41-
register_sound_driver(&sound_sgi);
33+
&sound_sgi,
4234
#endif
4335
#ifdef SOUND_HPUX
44-
register_sound_driver(&sound_hpux);
36+
&sound_hpux,
4537
#endif
4638
#ifdef SOUND_AIX
47-
register_sound_driver(&sound_aix);
39+
&sound_aix,
4840
#endif
4941
#ifdef SOUND_COREAUDIO
50-
register_sound_driver(&sound_coreaudio);
42+
&sound_coreaudio,
5143
#endif
5244
#ifdef SOUND_OS2DART
53-
register_sound_driver(&sound_os2dart);
45+
&sound_os2dart,
5446
#endif
5547
#ifdef SOUND_WIN32
56-
register_sound_driver(&sound_win32);
48+
&sound_win32,
5749
#endif
5850
#ifdef SOUND_PULSEAUDIO
59-
register_sound_driver(&sound_pulseaudio);
51+
&sound_pulseaudio,
6052
#endif
6153
#ifdef SOUND_ALSA
62-
register_sound_driver(&sound_alsa);
54+
&sound_alsa,
6355
#endif
6456
#ifdef SOUND_ALSA05
65-
register_sound_driver(&sound_alsa05);
57+
&sound_alsa05,
6658
#endif
6759
#ifdef SOUND_OSS
68-
register_sound_driver(&sound_oss);
60+
&sound_oss,
6961
#endif
7062
#ifdef SOUND_QNX
71-
register_sound_driver(&sound_qnx);
63+
&sound_qnx,
7264
#endif
7365
#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+
};
8174

82-
struct sound_driver *select_sound_driver(struct options *options)
75+
const struct sound_driver *select_sound_driver(struct options *options)
8376
{
84-
struct list_head *head;
85-
struct sound_driver *sd;
77+
const struct sound_driver *sd;
8678
const char *pref = options->driver_id;
79+
int i;
8780

8881
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];
9184
if (strcmp(sd->id, pref) == 0) {
9285
if (sd->init(options) == 0) {
9386
return sd;
9487
}
9588
}
9689
}
9790
} 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];
10093
/* Probing */
10194
if (sd->init(options) == 0) {
10295
/* found */

src/sound.h

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
#include <stdio.h>
55

66
#include "common.h"
7-
#include "list.h"
87

98
struct sound_driver {
109
const char *id;
@@ -16,31 +15,32 @@ struct sound_driver {
1615
void (*flush)(void);
1716
void (*pause)(void);
1817
void (*resume)(void);
19-
struct list_head list;
2018
};
2119

22-
extern struct sound_driver sound_null;
23-
extern struct sound_driver sound_wav;
24-
extern struct sound_driver sound_aiff;
25-
extern struct sound_driver sound_file;
26-
extern struct sound_driver sound_qnx;
27-
extern struct sound_driver sound_alsa05;
28-
extern struct sound_driver sound_oss;
29-
extern struct sound_driver sound_alsa;
30-
extern struct sound_driver sound_os2dart;
31-
extern struct sound_driver sound_win32;
32-
extern struct sound_driver sound_pulseaudio;
33-
extern struct sound_driver sound_coreaudio;
34-
extern struct sound_driver sound_hpux;
35-
extern struct sound_driver sound_sndio;
36-
extern struct sound_driver sound_sgi;
37-
extern struct sound_driver sound_solaris;
38-
extern struct sound_driver sound_netbsd;
39-
extern struct sound_driver sound_bsd;
40-
extern struct sound_driver sound_beos;
41-
extern struct sound_driver sound_aix;
42-
extern struct sound_driver sound_ahi;
43-
extern struct sound_driver sound_sb;
20+
extern const struct sound_driver sound_null;
21+
extern const struct sound_driver sound_wav;
22+
extern const struct sound_driver sound_aiff;
23+
extern const struct sound_driver sound_file;
24+
extern const struct sound_driver sound_qnx;
25+
extern const struct sound_driver sound_alsa05;
26+
extern struct sound_driver sound_oss;
27+
extern const struct sound_driver sound_alsa;
28+
extern const struct sound_driver sound_os2dart;
29+
extern const struct sound_driver sound_win32;
30+
extern const struct sound_driver sound_pulseaudio;
31+
extern const struct sound_driver sound_coreaudio;
32+
extern const struct sound_driver sound_hpux;
33+
extern const struct sound_driver sound_sndio;
34+
extern const struct sound_driver sound_sgi;
35+
extern const struct sound_driver sound_solaris;
36+
extern const struct sound_driver sound_netbsd;
37+
extern const struct sound_driver sound_bsd;
38+
extern const struct sound_driver sound_beos;
39+
extern const struct sound_driver sound_aix;
40+
extern const struct sound_driver sound_ahi;
41+
extern const struct sound_driver sound_sb;
42+
43+
extern const struct sound_driver *const sound_driver_list[];
4444

4545
#define parm_init(p) { char *token; for (; *(p); (p)++) { \
4646
char s[80]; strncpy(s, *(p), 79); s[79] = 0; \
@@ -64,7 +64,7 @@ static inline int is_big_endian(void) {
6464
}
6565

6666
void init_sound_drivers(void);
67-
struct sound_driver *select_sound_driver(struct options *);
67+
const struct sound_driver *select_sound_driver(struct options *);
6868
void convert_endian(unsigned char *, int);
6969

7070
#endif

src/sound_ahi.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ static void onpause(void) {
137137
static void onresume(void) {
138138
}
139139

140-
struct sound_driver sound_ahi = {
140+
const struct sound_driver sound_ahi = {
141141
"ahi",
142142
"Amiga AHI audio",
143143
NULL,

src/sound_aiff.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ static void onresume(void)
152152
{
153153
}
154154

155-
struct sound_driver sound_aiff = {
155+
const struct sound_driver sound_aiff = {
156156
"aiff",
157157
"AIFF writer",
158158
NULL,

src/sound_aix.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ static const char *const help[] = {
124124
NULL
125125
};
126126

127-
struct sound_driver sound_bsd = {
127+
const struct sound_driver sound_bsd = {
128128
"aix",
129129
"AIX PCM audio",
130130
help,

src/sound_alsa.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ static const char *const help[] = {
116116
NULL
117117
};
118118

119-
struct sound_driver sound_alsa = {
119+
const struct sound_driver sound_alsa = {
120120
"alsa",
121121
"ALSA PCM audio",
122122
help,

src/sound_alsa05.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ static const char *const help[] = {
200200
NULL
201201
};
202202

203-
struct sound_driver sound_alsa05 = {
203+
const struct sound_driver sound_alsa05 = {
204204
"alsa05", /* driver ID */
205205
"ALSA 0.5 PCM audio", /* driver description */
206206
help, /* help */

src/sound_beos.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ static void flush(void);
4242
static void onpause(void);
4343
static void onresume(void);
4444

45-
struct sound_driver sound_beos = {
45+
const struct sound_driver sound_beos = {
4646
"beos",
4747
"BeOS PCM audio",
4848
help,

0 commit comments

Comments
 (0)