Code

add experimental 64bit off_t workaround
authorLennart Poettering <lennart@poettering.net>
Wed, 1 Mar 2006 21:22:57 +0000 (21:22 +0000)
committerLennart Poettering <lennart@poettering.net>
Wed, 1 Mar 2006 21:22:57 +0000 (21:22 +0000)
git-svn-id: file:///home/lennart/svn/public/fusedav/trunk@23 e35a362c-bbd6-0310-a59f-a4efcb1729c4

src/filecache.c

index 5f81f1453afadbc5918173f608b17d8f35e496e0..f64f69e7e516b82d272fa24e2120ed25e1878960 100644 (file)
@@ -30,6 +30,8 @@
 #include <unistd.h>
 #include <assert.h>
 #include <pthread.h>
+#include <inttypes.h>
+#include <limits.h>
 
 #include <ne_props.h>
 #include <ne_uri.h>
@@ -230,8 +232,24 @@ fail:
     return NULL;
 }
 
+#ifdef FIXNEON64
+
+/* We assume that off_t is 64 bit, neon assumes it is 32 bit wide. we
+ * need to work around this somehow */
+
+typedef struct {
+    uint32_t start, end, total;
+} ne_content_range64;
+
+#endif
+
 static int load_up_to_unlocked(struct file_info *fi, off_t l) {
+
+#ifdef FIXNEON64
+    ne_content_range64 range;
+#else
     ne_content_range range;
+#endif
     ne_session *session;
 
     assert(fi);
@@ -247,14 +265,22 @@ static int load_up_to_unlocked(struct file_info *fi, off_t l) {
     if (l <= fi->present)
         return 0;
 
-    if (lseek(fi->fd, fi->present, SEEK_SET) != fi->present)
+#ifdef FIXNEON64
+    if (l > UINT_MAX) {
+        /* neon doesn't support 64bit ne_get_range right now */
+        errno = EIO;
         return -1;
+    }
+#endif
 
+    if (lseek(fi->fd, fi->present, SEEK_SET) != fi->present)
+        return -1;
+    
     range.start = fi->present;
     range.end = l-1;
     range.total = 0;
     
-    if (ne_get_range(session, fi->filename, &range, fi->fd) != NE_OK) {
+    if (ne_get_range(session, fi->filename, (ne_content_range*) &range, fi->fd) != NE_OK) {
         fprintf(stderr, "GET failed: %s\n", ne_get_error(session));
         errno = ENOENT;
         return -1;