mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
fmt: fix fmt_s32_dec() and fmt_s64_dec() sign bit handling
"val = -val" causes UB for INTMIN, thus explicitly cast to unsigned.
This commit is contained in:
parent
e65a017f19
commit
3b76a2c2be
@ -265,25 +265,33 @@ size_t fmt_u16_dec(char *out, uint16_t val)
|
||||
size_t fmt_s64_dec(char *out, int64_t val)
|
||||
{
|
||||
unsigned negative = (val < 0);
|
||||
uint64_t sval;
|
||||
if (negative) {
|
||||
if (out) {
|
||||
*out++ = '-';
|
||||
}
|
||||
val = -val;
|
||||
sval = -(uint64_t)(val);
|
||||
}
|
||||
return fmt_u64_dec(out, val) + negative;
|
||||
else {
|
||||
sval = +(uint64_t)(val);
|
||||
}
|
||||
return fmt_u64_dec(out, sval) + negative;
|
||||
}
|
||||
|
||||
size_t fmt_s32_dec(char *out, int32_t val)
|
||||
{
|
||||
unsigned negative = (val < 0);
|
||||
uint32_t sval;
|
||||
if (negative) {
|
||||
if (out) {
|
||||
*out++ = '-';
|
||||
}
|
||||
val = -val;
|
||||
sval = -((uint32_t)(val));
|
||||
}
|
||||
return fmt_u32_dec(out, val) + negative;
|
||||
else {
|
||||
sval = +((uint32_t)(val));
|
||||
}
|
||||
return fmt_u32_dec(out, sval) + negative;
|
||||
}
|
||||
|
||||
size_t fmt_s16_dec(char *out, int16_t val)
|
||||
|
Loading…
Reference in New Issue
Block a user