summaryrefslogtreecommitdiff
path: root/audio/gnome-media/files/patch-gmix_gmix.c
blob: d306c14e282df0dc465c98f0329eb200868586e4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
--- gmix/gmix.c.orig	Sun Mar 16 16:09:01 2003
+++ gmix/gmix.c	Sun Mar 16 16:13:09 2003
@@ -591,6 +591,11 @@
 	/* Masks for the channel data - OSS blows compared to ALSA */
 	int recmask, recsrc, stereodee;
 
+	/* FreeBSD device name detection */
+	FILE *sndstat;
+	char line[256];
+	char *devname, *p;
+
 	/*
 	 * create new device configureation
 	 */
@@ -659,7 +665,26 @@
 	} 
 #else
 	new_device->card_name = g_strdup_printf ("OSS-%d-%d", num + 1, num + 1);
-	g_snprintf (new_device->info.name, 31, "Card %d", num+1);
+	/* get soundcard name from /dev/sndstat on FreeBSD */
+	sndstat = fopen("/dev/sndstat", "r");
+	if (!sndstat)
+		g_snprintf (new_device->info.name, 31, "Card %d", num+1);
+	else {
+		while (fgets (line, 255, sndstat)) {
+			if (!strncmp (line, "pcm", 3) && (atoi (&line[3]) == num))
+			{
+				devname = line;
+				while (*devname++ != '<')
+					;
+				p = devname;
+				while (*p != '>')
+					p++;
+				*p = '\0';
+				g_snprintf (new_device->info.name, 31, devname);
+			}
+		}
+		fclose(sndstat);
+	}
 #endif
 	/* 
 	 * several bitmasks describing the mixer