Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Rast <trast@student.ethz.ch>2010-07-28 20:36:31 +0400
committerJunio C Hamano <gitster@pobox.com>2010-07-29 01:08:44 +0400
commit46be82dfd0850d7e96b1401a81a396e0cd0e0527 (patch)
tree6ddd92ec94b8f03bbb4c78edae68e552678cbb09 /git-compat-util.h
parentdc49cd769b5fa6b7e0114b051c34a849828a7603 (diff)
xsize_t: check whether we lose bits
Attempting to mmap (via git-add or similar) a file larger than 4GB on 32-bit Linux systems results in a repository that has only the file modulo 4GB stored, because of truncation of the off_t file size to a size_t for mmap. When xsize_t was introduced to handle this truncation in dc49cd7 (Cast 64 bit off_t to 32 bit size_t, 2007-03-06), Shawn even pointed out that it should detect when such a cutoff happens. Make it so. Signed-off-by: Thomas Rast <trast@student.ethz.ch> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'git-compat-util.h')
-rw-r--r--git-compat-util.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/git-compat-util.h b/git-compat-util.h
index 7534db1267..513d2d7aee 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -260,6 +260,8 @@ static inline ssize_t xwrite(int fd, const void *buf, size_t len)
static inline size_t xsize_t(off_t len)
{
+ if (len > (size_t) len)
+ die("Cannot handle files this big");
return (size_t)len;
}