X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=git-compat-util.h;h=c1bcb001a51324ebcb66bfb0a695e20ff366df02;hb=10e8d68820db9c7b6412d5a553a93fd200388f30;hp=0f856747e578f176dae1ab3ab900a64062fb9292;hpb=97bfeb34df1aa8a1cf232278624a5a5c924ee380;p=git.git diff --git a/git-compat-util.h b/git-compat-util.h index 0f856747e..c1bcb001a 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -15,8 +15,9 @@ #define _XOPEN_SOURCE 600 /* glibc2 and AIX 5.3L need 500, OpenBSD needs 600 for S_ISLNK() */ #define _XOPEN_SOURCE_EXTENDED 1 /* AIX 5.3L needs this */ #endif -#define _GNU_SOURCE -#define _BSD_SOURCE +#define _ALL_SOURCE 1 +#define _GNU_SOURCE 1 +#define _BSD_SOURCE 1 #include #include @@ -45,7 +46,10 @@ #include #include #include +#include +#undef _ALL_SOURCE /* AIX 5.3L defines a struct list with _ALL_SOURCE. */ #include +#define _ALL_SOURCE 1 #ifndef NO_ICONV #include @@ -97,11 +101,20 @@ extern int git_munmap(void *start, size_t length); #else /* NO_MMAP */ #include -#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_PREAD +#define pread git_pread +extern ssize_t git_pread(int fd, void *buf, size_t count, off_t offset); +#endif #ifdef NO_SETENV #define setenv gitsetenv @@ -188,6 +201,21 @@ 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) { + if (!length) + return NULL; + 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;