aboutsummaryrefslogtreecommitdiffstats
path: root/src/charon/encoding/generator.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/charon/encoding/generator.c')
-rw-r--r--src/charon/encoding/generator.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/charon/encoding/generator.c b/src/charon/encoding/generator.c
index 847fda49f..07db45f1b 100644
--- a/src/charon/encoding/generator.c
+++ b/src/charon/encoding/generator.c
@@ -381,11 +381,14 @@ static void generate_u_int_type (private_generator_t *this,encoding_type_t int_t
/* get value of attribute format flag */
u_int8_t attribute_format_flag = *(this->out_position) & 0x80;
/* get attribute type value as 16 bit integer*/
- u_int16_t int16_val = htons(*((u_int16_t*)(this->data_struct + offset)));
- /* last bit must be unset */
- int16_val = int16_val & 0xFF7F;
-
- int16_val = int16_val | attribute_format_flag;
+ u_int16_t int16_val = *((u_int16_t*)(this->data_struct + offset));
+ /* unset most significant bit */
+ int16_val &= 0x7FFF;
+ if (attribute_format_flag)
+ {
+ int16_val |= 0x8000;
+ }
+ int16_val = htons(int16_val);
DBG3(DBG_ENC, " => %d", int16_val);
/* write bytes to buffer (set bit is overwritten)*/
this->write_bytes_to_buffer(this,&int16_val,sizeof(u_int16_t));