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