summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Björklund <anders@psqr.se>2016-11-13 16:52:55 +0100
committerJoel Rosdahl <joel@rosdahl.net>2017-02-12 14:57:13 +0100
commit62128c135427193ba09f84508bce039231d88c67 (patch)
tree285cb6d90bdc1f04ddca58afae87deb4d3215636
parentf1ac8e7dd2f818a6d29d5f38e944cac93288ee80 (diff)
downloadccache-62128c135427193ba09f84508bce039231d88c67.tar.gz
Undefined: avoid shift warning in manifest
manifest.c:264:46: runtime error: left shift of 72057594037927935 by 8 places cannot be represented in type 'long int'
-rw-r--r--manifest.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/manifest.c b/manifest.c
index 28ee35d5..7c019e18 100644
--- a/manifest.c
+++ b/manifest.c
@@ -165,15 +165,16 @@ free_manifest(struct manifest *mf)
#define READ_INT(size, var) \
do { \
- (var) = 0; \
+ uint64_t u_ = 0; \
for (size_t i_ = 0; i_ < (size); i_++) { \
int ch_ = gzgetc(f); \
if (ch_ == EOF) { \
goto error; \
} \
- (var) <<= 8; \
- (var) |= ch_ & 0xFF; \
+ u_ <<= 8; \
+ u_ |= ch_ & 0xFF; \
} \
+ (var) = u_; \
} while (false)
#define READ_STR(var) \
@@ -289,10 +290,11 @@ error:
#define WRITE_INT(size, var) \
do { \
+ uint64_t u_ = (var); \
uint8_t ch_; \
size_t i_; \
for (i_ = 0; i_ < (size); i_++) { \
- ch_ = ((var) >> (8 * ((size) - i_ - 1))); \
+ ch_ = (u_ >> (8 * ((size) - i_ - 1))); \
if (gzputc(f, ch_) == EOF) { \
goto error; \
} \