Skip to content

Commit 0600d74

Browse files
r08ertliubrunexgeek
authored andcommitted
Fix compile error of sign-conversion in gcc-9
1 parent 3700188 commit 0600d74

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

smbios.c

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,13 @@ static uint16_t read_uint16(struct ParserContext *context)
156156
}
157157

158158
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
159-
uint16_t value = context->ptr[0] | ((uint16_t)context->ptr[1] << 8);
159+
uint16_t low = (uint16_t)context->ptr[0];
160+
uint16_t high = (uint16_t)(context->ptr[1] << 8);
160161
#else
161-
uint16_t value = ((uint16_t)context->ptr[0] << 8) | context->ptr[1];
162+
uint16_t low = (uint16_t)context->ptr[1];
163+
uint16_t high = (uint16_t)(context->ptr[0] << 8);
162164
#endif
165+
uint16_t value = high | low;
163166

164167
context->ptr += 2;
165168
return value;
@@ -177,10 +180,11 @@ static uint32_t read_uint32(struct ParserContext *context)
177180
for (int i = 0; i < 4; ++i)
178181
{
179182
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
180-
value |= context->ptr[i] << (i * 8);
183+
uint32_t v = (uint32_t)(context->ptr[i] << (i * 8));
181184
#else
182-
value |= context->ptr[i] << ((3 - i) * 8);
185+
uint32_t v = (uint32_t)(context->ptr[i] << ((3 - i) * 8));
183186
#endif
187+
value |= v;
184188
}
185189
context->ptr += 4;
186190
return value;
@@ -198,10 +202,11 @@ static uint64_t read_uint64(struct ParserContext *context)
198202
for (int i = 0; i < 8; ++i)
199203
{
200204
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
201-
value |= context->ptr[i] << (i * 8);
205+
uint64_t v = (uint64_t)(context->ptr[i] << (i * 8));
202206
#else
203-
value |= context->ptr[i] << ((7 - i) * 8);
207+
uint64_t v = (uint64_t)(context->ptr[i] << ((7 - i) * 8));
204208
#endif
209+
value |= v;
205210
}
206211

207212
context->ptr += 8;

0 commit comments

Comments
 (0)