From 0a61877702965dc375b3ad2b2d1cf0315703c22e Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 28 Oct 2008 20:39:09 +0100 Subject: input_stream: convert offset and size to the off_t data type size_t and long aren't 64 bit safe (i.e. files larger than 2 GB on a 32 bit OS). Use off_t instead, which is a 64 bit integer if compiled with large file support. --- src/decoder/mp3_plugin.c | 2 +- src/input_curl.c | 11 +++++------ src/input_file.c | 2 +- src/input_stream.c | 2 +- src/input_stream.h | 8 ++++---- 5 files changed, 12 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/decoder/mp3_plugin.c b/src/decoder/mp3_plugin.c index 68f786106..d4913c27d 100644 --- a/src/decoder/mp3_plugin.c +++ b/src/decoder/mp3_plugin.c @@ -673,7 +673,7 @@ static int decodeFirstFrame(mp3DecodeData * data, * Attempt to calulcate the length of the song from filesize */ { - size_t offset = data->inStream->offset; + off_t offset = data->inStream->offset; mad_timer_t duration = data->frame.header.duration; float frameTime = ((float)mad_timer_count(duration, MAD_UNITS_MILLISECONDS)) / 1000; diff --git a/src/input_curl.c b/src/input_curl.c index 9ac529a63..11473eab0 100644 --- a/src/input_curl.c +++ b/src/input_curl.c @@ -414,8 +414,7 @@ input_curl_send_request(struct input_curl *c) } static bool -input_curl_seek(struct input_stream *is, mpd_unused long offset, - mpd_unused int whence) +input_curl_seek(struct input_stream *is, off_t offset, int whence) { struct input_curl *c = is->data; bool ret; @@ -427,15 +426,15 @@ input_curl_seek(struct input_stream *is, mpd_unused long offset, switch (whence) { case SEEK_SET: - is->offset = (off_t)offset; + is->offset = offset; break; case SEEK_CUR: - is->offset += (off_t)offset; + is->offset += offset; break; case SEEK_END: - is->offset = (off_t)is->size + (off_t)offset; + is->offset = is->size + offset; break; default: @@ -456,7 +455,7 @@ input_curl_seek(struct input_stream *is, mpd_unused long offset, /* send the "Range" header */ if (is->offset > 0) { - c->range = g_strdup_printf("%ld-", is->offset); /* XXX 64 bit safety */ + c->range = g_strdup_printf("%lld-", (long long)is->offset); curl_easy_setopt(c->easy, CURLOPT_RANGE, c->range); } diff --git a/src/input_file.c b/src/input_file.c index 8ffe11395..dfb9a815d 100644 --- a/src/input_file.c +++ b/src/input_file.c @@ -52,7 +52,7 @@ input_file_open(struct input_stream *is, const char *filename) } static bool -input_file_seek(struct input_stream *is, long offset, int whence) +input_file_seek(struct input_stream *is, off_t offset, int whence) { if (fseek((FILE *) is->data, offset, whence) == 0) { is->offset = ftell((FILE *) is->data); diff --git a/src/input_stream.c b/src/input_stream.c index 30fb4b27e..e4f5626c6 100644 --- a/src/input_stream.c +++ b/src/input_stream.c @@ -76,7 +76,7 @@ input_stream_open(struct input_stream *is, char *url) } bool -input_stream_seek(struct input_stream *is, long offset, int whence) +input_stream_seek(struct input_stream *is, off_t offset, int whence) { return is->plugin->seek(is, offset, whence); } diff --git a/src/input_stream.h b/src/input_stream.h index 0f6a1f503..3787d9ce5 100644 --- a/src/input_stream.h +++ b/src/input_stream.h @@ -21,6 +21,7 @@ #include #include +#include struct input_stream; @@ -31,7 +32,7 @@ struct input_plugin { int (*buffer)(struct input_stream *is); size_t (*read)(struct input_stream *is, void *ptr, size_t size); bool (*eof)(struct input_stream *is); - bool (*seek)(struct input_stream *is, long offset, int whence); + bool (*seek)(struct input_stream *is, off_t offset, int whence); }; struct input_stream { @@ -41,8 +42,7 @@ struct input_stream { bool ready; int error; - long offset; - size_t size; + off_t size, offset; char *mime; void *data; @@ -60,7 +60,7 @@ bool input_stream_open(struct input_stream *is, char *url); bool -input_stream_seek(struct input_stream *is, long offset, int whence); +input_stream_seek(struct input_stream *is, off_t offset, int whence); void input_stream_close(struct input_stream *is); bool input_stream_eof(struct input_stream *is); -- cgit v1.2.3