1# Add post-recording fixup of length fields in wav header to reflect
2# correct file size when recording was stopped prematurely by the user.
3#PATCHOPTIONS: -p0
4--- bplaysrc/bplay.c.orig	2005-03-01 19:17:34.000000000 +0100
5+++ bplaysrc/bplay.c	2005-03-01 19:18:17.000000000 +0100
6@@ -297,14 +297,14 @@
7 			filetype = F_RAW;	/* Change to change default */
8 		switch(filetype)
9 		{
10+			wavhead header;
11+
12 		case F_WAV:
13 			/* Spit out header here... */
14 #ifndef LP2CD
15 			fprintf(stderr, "Writing MS WAV sound file");
16 #endif
17 			{
18-				wavhead header;
19-
20 				char *riff = "RIFF";
21 				char *wave = "WAVE";
22 				char *fmt = "fmt ";
23@@ -346,6 +346,25 @@
24 			initsems(0, 1);
25
26 			shmrec(thefd, bcount, 1);
27+
28+			/* Rewrite header with updated length fields now
29+			 * that we know the true file size. Writing is done
30+			 * in a separate process, so it's easiest to gather
31+			 * the number of bytes written from fstat(). [dk]
32+			 */
33+			if (filetype == F_WAV &&
34+			    lseek(thefd, 0, SEEK_SET) != -1) {
35+				struct stat st;
36+				if (fstat(thefd, &st) != -1) {
37+					header.length = cpu_to_le32(
38+						(u_int32_t) (st.st_size - 8));
39+					header.data_length = cpu_to_le32(
40+						(u_int32_t) (st.st_size -
41+							sizeof(header)));
42+					write(thefd, &header, sizeof(header));
43+				}
44+			}
45+
46 			break;
47 		case F_VOC:
48 			/* Spit out header here... */
49