summaryrefslogtreecommitdiff
path: root/usr.bin/aucat/headers.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/aucat/headers.c')
-rw-r--r--usr.bin/aucat/headers.c22
1 files changed, 8 insertions, 14 deletions
diff --git a/usr.bin/aucat/headers.c b/usr.bin/aucat/headers.c
index e9a8ed256dc..7859e29a436 100644
--- a/usr.bin/aucat/headers.c
+++ b/usr.bin/aucat/headers.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: headers.c,v 1.10 2010/01/10 21:47:41 ratchov Exp $ */
+/* $OpenBSD: headers.c,v 1.11 2010/04/03 17:40:33 ratchov Exp $ */
/*
* Copyright (c) 2008 Alexandre Ratchov <alex@caoua.org>
*
@@ -129,7 +129,7 @@ wav_readfmt(int fd, unsigned csize, struct aparams *par, short **map)
}
int
-wav_readhdr(int fd, struct aparams *par, off_t *datasz, short **map)
+wav_readhdr(int fd, struct aparams *par, off_t *startpos, off_t *datasz, short **map)
{
struct wavriff riff;
struct wavchunk chunk;
@@ -161,6 +161,7 @@ wav_readhdr(int fd, struct aparams *par, off_t *datasz, short **map)
return 0;
fmt_done = 1;
} else if (memcmp(chunk.id, wav_id_data, 4) == 0) {
+ *startpos = pos;
*datasz = csize;
break;
} else {
@@ -186,10 +187,12 @@ wav_readhdr(int fd, struct aparams *par, off_t *datasz, short **map)
return 1;
}
+/*
+ * Write header and seek to start position
+ */
int
-wav_writehdr(int fd, struct aparams *par)
+wav_writehdr(int fd, struct aparams *par, off_t *startpos, off_t datasz)
{
- off_t datasz;
unsigned nch = par->cmax - par->cmin + 1;
struct {
struct wavriff riff;
@@ -198,16 +201,6 @@ wav_writehdr(int fd, struct aparams *par)
struct wavchunk data_hdr;
} hdr;
- datasz = lseek(fd, 0, SEEK_CUR);
- if (datasz < 0) {
- warn("wav_writehdr: lseek(end)");
- return 0;
- }
- if (datasz >= sizeof(hdr))
- datasz -= sizeof(hdr);
- else
- datasz = 0;
-
/*
* Check that encoding is supported by .wav file format.
*/
@@ -253,5 +246,6 @@ wav_writehdr(int fd, struct aparams *par)
warn("wav_writehdr: write");
return 0;
}
+ *startpos = sizeof(hdr);
return 1;
}