aboutsummaryrefslogtreecommitdiff
path: root/main.h
diff options
context:
space:
mode:
authorFabian Groffen <grobian@gentoo.org>2019-11-17 15:22:11 +0100
committerFabian Groffen <grobian@gentoo.org>2019-11-17 15:22:11 +0100
commitff143361fe3b5eb7befefea5ab45440a6b8716db (patch)
treec3887665e66132d5f179f5a100d9f0bb824b9fc7 /main.h
parentlibq/xpak: try to seek to XPAKSTART in _xpak_open (diff)
downloadportage-utils-ff143361fe3b5eb7befefea5ab45440a6b8716db.tar.gz
portage-utils-ff143361fe3b5eb7befefea5ab45440a6b8716db.tar.bz2
portage-utils-ff143361fe3b5eb7befefea5ab45440a6b8716db.zip
main: ensure READ/WRITE_BE_INT32 operate on the expected bytes
we want to work on unsigned bytes such that we don't get sudden unintended operations due to negative value handling Signed-off-by: Fabian Groffen <grobian@gentoo.org>
Diffstat (limited to 'main.h')
-rw-r--r--main.h13
1 files changed, 8 insertions, 5 deletions
diff --git a/main.h b/main.h
index ad1467b..03c3bd2 100644
--- a/main.h
+++ b/main.h
@@ -56,13 +56,16 @@ extern const char *argv0;
#endif
#define READ_BE_INT32(P) \
- (((P)[0] << 24) | ((P)[1] << 16) | ((P)[2] << 8 ) | (P)[3])
+ ((((unsigned char *)(P))[0] << 24) | \
+ (((unsigned char *)(P))[1] << 16) | \
+ (((unsigned char *)(P))[2] << 8 ) | \
+ (((unsigned char *)(P))[3]))
#define WRITE_BE_INT32(P,I) \
{ \
- (P)[0] = (I & 0xff000000) >> 24; \
- (P)[1] = (I & 0x00ff0000) >> 16; \
- (P)[2] = (I & 0x0000ff00) >> 8; \
- (P)[3] = (I & 0x000000ff); \
+ ((unsigned char *)(P))[0] = (I & 0xff000000) >> 24; \
+ ((unsigned char *)(P))[1] = (I & 0x00ff0000) >> 16; \
+ ((unsigned char *)(P))[2] = (I & 0x0000ff00) >> 8; \
+ ((unsigned char *)(P))[3] = (I & 0x000000ff); \
}
/* Easy enough to glue to older versions */