diff options
author | Thomas Rast <trast@student.ethz.ch> | 2010-07-28 18:36:31 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2010-07-28 14:08:44 -0700 |
commit | 46be82dfd0850d7e96b1401a81a396e0cd0e0527 (patch) | |
tree | 6ddd92ec94b8f03bbb4c78edae68e552678cbb09 /git-compat-util.h | |
parent | Cast 64 bit off_t to 32 bit size_t (diff) | |
download | tgif-46be82dfd0850d7e96b1401a81a396e0cd0e0527.tar.xz |
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.h | 2 |
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; } |