git-svnimport: fix edge revisions double importing
[gitweb.git] / git-compat-util.h
index 0f856747e578f176dae1ab3ab900a64062fb9292..e023bf141363d87abfef358134e484ea85f32a15 100644 (file)
@@ -97,11 +97,15 @@ extern int git_munmap(void *start, size_t length);
 #else /* NO_MMAP */
 
 #include <sys/mman.h>
-#define DEFAULT_PACKED_GIT_WINDOW_SIZE (32 * 1024 * 1024)
+#define DEFAULT_PACKED_GIT_WINDOW_SIZE \
+       (sizeof(void*) >= 8 \
+               ?  1 * 1024 * 1024 * 1024 \
+               : 32 * 1024 * 1024)
 
 #endif /* NO_MMAP */
 
-#define DEFAULT_PACKED_GIT_LIMIT (256 * 1024 * 1024)
+#define DEFAULT_PACKED_GIT_LIMIT \
+       ((1024L * 1024L) * (sizeof(void*) >= 8 ? 8192 : 256))
 
 #ifdef NO_SETENV
 #define setenv gitsetenv
@@ -188,6 +192,19 @@ static inline void *xcalloc(size_t nmemb, size_t size)
        return ret;
 }
 
+static inline void *xmmap(void *start, size_t length,
+       int prot, int flags, int fd, off_t offset)
+{
+       void *ret = mmap(start, length, prot, flags, fd, offset);
+       if (ret == MAP_FAILED) {
+               release_pack_memory(length);
+               ret = mmap(start, length, prot, flags, fd, offset);
+               if (ret == MAP_FAILED)
+                       die("Out of memory? mmap failed: %s", strerror(errno));
+       }
+       return ret;
+}
+
 static inline ssize_t xread(int fd, void *buf, size_t len)
 {
        ssize_t nr;