]> granicus.if.org Git - libevent/commitdiff
Make evbuffer_add_file take ev_off_t, not off_t
authorNick Mathewson <nickm@torproject.org>
Mon, 25 Oct 2010 18:29:30 +0000 (14:29 -0400)
committerNick Mathewson <nickm@torproject.org>
Mon, 25 Oct 2010 18:29:30 +0000 (14:29 -0400)
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
include/event2/buffer.h
include/event2/util.h

index 497b8b5a583cc5b8753ace63e0c892eb3c6bf7fe..eb2d84b24174b608c0c63b2932eb9ecfc50fe9e2 100644 (file)
--- 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);
index b5feefaec16fee7ea823e94430be4331df314292..d6538071622166b40d4f15e63bd0e802773ed1c0 100644 (file)
@@ -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.
index 7e21410d7d201568789ad9851216e4ff16b7665d..1180778497c05cb8f1ac1bbd197c273caaf541e8 100644 (file)
@@ -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: