From: Nick Mathewson Date: Mon, 25 Oct 2010 18:29:30 +0000 (-0400) Subject: Make evbuffer_add_file take ev_off_t, not off_t X-Git-Tag: release-2.0.9-rc~56 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ac7e52d84df955bab7845f4b52a43bf228946fc9;p=libevent 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. --- 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: