@@ -3,7 +3,7 @@
#include "audio.h"
typedef struct {
- QEMUFile *f;
+ FILE *f;
int bytes;
char *path;
int freq;
@@ -40,12 +40,22 @@ static void wav_destroy (void *opaque)
le_store (rlen, rifflen, 4);
le_store (dlen, datalen, 4);
- qemu_fseek (wav->f, 4, SEEK_SET);
- qemu_put_buffer (wav->f, rlen, 4);
-
- qemu_fseek (wav->f, 32, SEEK_CUR);
- qemu_put_buffer (wav->f, dlen, 4);
- qemu_fclose (wav->f);
+ fseek (wav->f, 4, SEEK_SET);
+ if (fseek (wav->f, 4, SEEK_SET) == -1) {
+ printf ("wav_destroy: fseek error %s\n", strerror(errno));
+ }
+ if (fwrite (rlen, 1, 4, wav->f) != 4) {
+ printf ("wav_destroy: fwrite error writing rlen '%s'\n",
+ strerror(errno));
+ }
+ if (fseek (wav->f, 32, SEEK_CUR) == -1) {
+ printf ("wav_destroy: fseek error '%s'\n", strerror(errno));
+ }
+ if (fwrite (dlen, 1, 4, wav->f) != 4) {
+ printf ("wav_destroy: fwrite error writing dlen '%s'\n",
+ strerror(errno));
+ }
+ fclose (wav->f);
}
g_free (wav->path);
@@ -55,7 +65,10 @@ static void wav_capture (void *opaque, void *buf, int size)
{
WAVState *wav = opaque;
- qemu_put_buffer (wav->f, buf, size);
+ if (fwrite (buf, size, 1, wav->f) != 1) {
+ printf ("wav_capture: fwrite error '%s'\n",
+ strerror(errno));
+ }
wav->bytes += size;
}
@@ -130,7 +143,7 @@ int wav_start_capture (CaptureState *s, const char *path, int freq,
le_store (hdr + 28, freq << shift, 4);
le_store (hdr + 32, 1 << shift, 2);
- wav->f = qemu_fopen (path, "wb");
+ wav->f = fopen (path, "wb");
if (!wav->f) {
monitor_printf(mon, "Failed to open wave file `%s'\nReason: %s\n",
path, strerror (errno));
@@ -143,19 +156,26 @@ int wav_start_capture (CaptureState *s, const char *path, int freq,
wav->nchannels = nchannels;
wav->freq = freq;
- qemu_put_buffer (wav->f, hdr, sizeof (hdr));
+ if (fwrite (hdr, sizeof (hdr), 1, wav->f) != 1) {
+ monitor_printf (mon, "Failed to write header '%s'\n",
+ strerror(errno));
+ goto error_free;
+ }
cap = AUD_add_capture (&as, &ops, wav);
if (!cap) {
monitor_printf(mon, "Failed to add audio capture\n");
- g_free (wav->path);
- qemu_fclose (wav->f);
- g_free (wav);
- return -1;
+ goto error_free;
}
wav->cap = cap;
s->opaque = wav;
s->ops = wav_capture_ops;
return 0;
+
+error_free:
+ g_free (wav->path);
+ fclose (wav->f);
+ g_free (wav);
+ return -1;
}
QEMUFile * is only intended for migration nowadays. Using it for anything else just adds pain and a layer of buffers for no good reason. Signed-off-by: Juan Quintela <quintela@redhat.com> CC: malc <av1474@comtv.ru> --- audio/wavcapture.c | 48 ++++++++++++++++++++++++++++++++++-------------- 1 files changed, 34 insertions(+), 14 deletions(-)