aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-10-28 20:39:09 +0100
committerMax Kellermann <max@duempel.org>2008-10-28 20:39:09 +0100
commit0a61877702965dc375b3ad2b2d1cf0315703c22e (patch)
tree9c4ed9b5ae32a1b00eab1b84b08f0100be4e3aa1
parent016d996131d560db6d72476ae29c74df84746fff (diff)
downloadmpd-0a61877702965dc375b3ad2b2d1cf0315703c22e.tar.gz
mpd-0a61877702965dc375b3ad2b2d1cf0315703c22e.tar.xz
mpd-0a61877702965dc375b3ad2b2d1cf0315703c22e.zip
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.
-rw-r--r--src/decoder/mp3_plugin.c2
-rw-r--r--src/input_curl.c11
-rw-r--r--src/input_file.c2
-rw-r--r--src/input_stream.c2
-rw-r--r--src/input_stream.h8
5 files changed, 12 insertions, 13 deletions
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 <stddef.h>
#include <stdbool.h>
+#include <sys/types.h>
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);