freebsd-ports/audio/gnomemedia/files/patch-ad
Jacques Vidrine 7bfa022f21 Patch audio device scanning so that it doesn't quit when it fails
to open an audio device with ENXIO (Device not configured).  This
is likely needed on systems using the pcm sound driver.
1999-03-09 03:07:01 +00:00

74 lines
1.7 KiB
Text

--- gmix/gmix.c.orig Sun Feb 21 12:10:17 1999
+++ gmix/gmix.c Mon Mar 8 20:41:05 1999
@@ -94,6 +94,17 @@
/*
* All, that is known about a mixer-device
*/
+
+#if !defined(OPEN_SOUND_SYSTEM)
+typedef struct mixer_info
+{
+ char id[16];
+ char name[32];
+ int modify_counter;
+ int fillers[10];
+} mixer_info;
+#endif
+
typedef struct device_info {
int fd;
mixer_info info;
@@ -272,11 +283,7 @@
/*
* open the mixer-device
*/
- if (num==0) {
- sprintf(device_name, "/dev/mixer");
- } else {
- sprintf(device_name, "/dev/mixer%i", num);
- }
+ sprintf(device_name, "/dev/mixer%i", num);
new_device->fd=open(device_name, O_RDWR, 0);
if (new_device->fd<0) {
free(new_device);
@@ -291,6 +298,8 @@
fprintf(stderr, "Warning: This version of gmix was compiled with a different version of\nsoundcard.h.\n");
}
#endif
+
+#if defined(OPEN_SOUND_SYSTEM)
/*
* mixer-name
*/
@@ -301,6 +310,11 @@
}
if(!isalpha(new_device->info.name[0]))
g_snprintf(new_device->info.name, 31, "Card %d", num+1);
+#else
+ g_snprintf(new_device->info.id, 15, "mixer%d", num);
+ g_snprintf(new_device->info.name, 31, "Sound Card %d", num+1);
+ new_device->info.modify_counter=0;
+#endif
/*
* several bitmasks describing the mixer
*/
@@ -386,15 +400,16 @@
{
int cnt;
device_info *new_device;
- cnt=0; devices=NULL;
+ cnt=0; num_mixers=0; devices=NULL;
do {
new_device=open_device(cnt++);
if (new_device) {
new_device->channels=make_channels(new_device);
devices=g_list_append(devices, new_device);
+ num_mixers++;
}
- } while (new_device);
- num_mixers=cnt-1;
+ } while ((errno == EACCES) || (errno == EINVAL) || (errno == ENXIO) \
+ || new_device);
}
void free_one_device(gpointer a, gpointer b)