diff options
Diffstat (limited to 'wsutil/sign_ext.h')
-rw-r--r-- | wsutil/sign_ext.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/wsutil/sign_ext.h b/wsutil/sign_ext.h index 26d590a693..4371cacde6 100644 --- a/wsutil/sign_ext.h +++ b/wsutil/sign_ext.h @@ -30,6 +30,11 @@ static inline guint32 ws_sign_ext32(guint32 val, int no_of_bits) { + g_assert (no_of_bits >= 0 && no_of_bits <= 32); + + if (no_of_bits == 0) + return val; + if (val & (1 << (no_of_bits-1))) val |= (-1 << no_of_bits); @@ -39,6 +44,11 @@ ws_sign_ext32(guint32 val, int no_of_bits) static inline guint64 ws_sign_ext64(guint64 val, int no_of_bits) { + g_assert (no_of_bits >= 0 && no_of_bits <= 64); + + if (no_of_bits == 0) + return val; + if (val & (G_GINT64_CONSTANT(1) << (no_of_bits-1))) val |= (G_GINT64_CONSTANT(-1) << no_of_bits); |