From ac7e52d84df955bab7845f4b52a43bf228946fc9 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 25 Oct 2010 14:29:30 -0400 Subject: [PATCH] Make evbuffer_add_file take ev_off_t, not off_t This change has no effect on non-windows platforms, since those either define off_t to 64-bits, or allow you to decide whether it should be 64-bits yourself via some LARGEFILE-like macro. On Windows, however, off_t is always 32-bit, so it's a bad choice for "file size" or "file offset" values. Instead, I'm adding an ev_off_t type, and using it in the one place where we used off_t to mean "the size of a file" or "an offset into a file" in the API. This breaks ABI compatibility on Windows. --- buffer.c | 4 ++-- include/event2/buffer.h | 4 ++-- include/event2/util.h | 6 ++++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/buffer.c b/buffer.c index 497b8b5a..eb2d84b2 100644 --- a/buffer.c +++ b/buffer.c @@ -2642,7 +2642,7 @@ done: */ int evbuffer_add_file(struct evbuffer *outbuf, int fd, - off_t offset, off_t length) + ev_off_t offset, ev_off_t length) { #if defined(USE_SENDFILE) || defined(_EVENT_HAVE_MMAP) struct evbuffer_chain *chain; @@ -2738,7 +2738,7 @@ evbuffer_add_file(struct evbuffer *outbuf, int fd, return (-1); #ifdef WIN32 -#define lseek _lseek +#define lseek _lseeki64 #endif if (lseek(fd, offset, SEEK_SET) == -1) { evbuffer_free(tmp); diff --git a/include/event2/buffer.h b/include/event2/buffer.h index b5feefae..d6538071 100644 --- a/include/event2/buffer.h +++ b/include/event2/buffer.h @@ -375,8 +375,8 @@ int evbuffer_add_reference(struct evbuffer *outbuf, @return 0 if successful, or -1 if an error occurred */ -int evbuffer_add_file(struct evbuffer *output, int fd, off_t offset, - off_t length); +int evbuffer_add_file(struct evbuffer *output, int fd, ev_off_t offset, + ev_off_t length); /** Append a formatted string to the end of an evbuffer. diff --git a/include/event2/util.h b/include/event2/util.h index 7e21410d..11807784 100644 --- a/include/event2/util.h +++ b/include/event2/util.h @@ -161,6 +161,12 @@ extern "C" { #define ev_ssize_t ssize_t #endif +#ifdef WIN32 +#define ev_off_t ev_int64_t +#else +#define ev_off_t off_t +#endif + /* Limits for integer types. We're making two assumptions here: -- 2.40.0