From c48eabffbe6dc192dedad73c86616ba26f7ed6d3 Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Sat, 19 Mar 2022 12:10:58 -0400 Subject: Use filesystem I/O block size in src/riff.c --- src/riff.c | 50 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/src/riff.c b/src/riff.c index fb895b6..d50ed60 100644 --- a/src/riff.c +++ b/src/riff.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -10,7 +11,9 @@ struct _xas_riff { const char *file; int fd; - size_t size; + + size_t size, + blksize; xas_audio_format format; }; @@ -73,6 +76,7 @@ static xas_riff *new_file(const char *path, xas_audio_format format, int flags) { xas_riff *riff; + struct stat st; if ((riff = malloc(sizeof(*riff))) == NULL) { goto error_malloc_riff; @@ -84,8 +88,13 @@ static xas_riff *new_file(const char *path, goto error_open; } - riff->file = path; - riff->size = 0; + if (fstat(riff->fd, &st) < 0) { + goto error_fstat; + } + + riff->file = path; + riff->size = 0; + riff->blksize = st.st_blksize; riff->format.channels = format.channels; riff->format.sample_size = format.sample_size; @@ -98,6 +107,7 @@ static xas_riff *new_file(const char *path, return riff; error_header_write: +error_fstat: close(riff->fd); error_open: @@ -189,15 +199,21 @@ static xas_riff *open_fd(int fd) { xas_riff *riff; xas_riff_wave_header header; + struct stat st; ssize_t readlen; + if (fstat(fd, &st) < 0) { + goto error_fstat; + } + if ((riff = malloc(sizeof(*riff))) == NULL) { goto error_malloc_riff; } - riff->file = NULL; - riff->fd = fd; - riff->size = 0; + riff->file = NULL; + riff->fd = fd; + riff->size = 0; + riff->blksize = st.st_blksize; riff->format.channels = 0; riff->format.sample_size = 0; @@ -225,6 +241,7 @@ error_read: free(riff); error_malloc_riff: +error_fstat: return NULL; } @@ -232,6 +249,7 @@ static xas_riff *open_file(const char *path, int flags) { xas_riff *riff; xas_riff_wave_header header; + struct stat st; ssize_t readlen; if ((riff = malloc(sizeof(*riff))) == NULL) { @@ -244,8 +262,13 @@ static xas_riff *open_file(const char *path, int flags) { goto error_open; } - riff->file = path; - riff->size = 0; + if (fstat(riff->fd, &st) < 0) { + goto error_fstat; + } + + riff->file = path; + riff->size = 0; + riff->blksize = st.st_blksize; riff->format.channels = 0; riff->format.sample_size = 0; @@ -275,6 +298,7 @@ error_wave_header_parse: error_wave_header_short: error_read: error_lseek: +error_fstat: close(riff->fd); error_open: @@ -348,7 +372,7 @@ xas_audio_stream *xas_riff_new_file(const char *path, if ((stream = xas_audio_stream_new_sink((xas_audio_drain)audio_drain, (xas_audio_cleanup)close_file, format, - 4096, + riff->blksize, riff)) == NULL) { goto error_audio_stream_new_sink; } @@ -356,7 +380,7 @@ xas_audio_stream *xas_riff_new_file(const char *path, if ((stream = xas_audio_stream_new_source((xas_audio_fill)audio_fill, (xas_audio_cleanup)close_file, format, - 4096, + riff->blksize, riff)) == NULL) { goto error_audio_stream_new_sink; } @@ -383,7 +407,7 @@ xas_audio_stream *xas_riff_open_file(const char *path, int flags) { if ((stream = xas_audio_stream_new_sink((xas_audio_drain)audio_drain, (xas_audio_cleanup)close_file, riff->format, - 4096, + riff->blksize, riff)) == NULL) { goto error_audio_stream_new_sink; } @@ -391,7 +415,7 @@ xas_audio_stream *xas_riff_open_file(const char *path, int flags) { if ((stream = xas_audio_stream_new_source((xas_audio_fill)audio_fill, (xas_audio_cleanup)close_file, riff->format, - 4096, + riff->blksize, riff)) == NULL) { goto error_audio_stream_new_sink; } @@ -417,7 +441,7 @@ xas_audio_stream *xas_riff_open_fd(int fd) { if ((stream = xas_audio_stream_new_source((xas_audio_fill)audio_fill, (xas_audio_cleanup)close_file, riff->format, - 4096, + riff->blksize, riff)) == NULL) { goto error_audio_stream_new_sink; } -- cgit v1.2.3