diff options
author | Denis Kenzior <denkenz@gmail.com> | 2010-05-24 11:07:30 -0500 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2010-05-25 16:52:51 -0500 |
commit | ea46bae631c831549914cdcf5bedc11a3b591180 (patch) | |
tree | 35be631c392001d2444e99ee2efe62538859940b /src/simutil.c | |
parent | fd8d7b8992c03329135639d04f05381845d4495b (diff) | |
download | ofono-ea46bae631c831549914cdcf5bedc11a3b591180.tar.bz2 |
simutil: Simplify ber_tlv builder set_length logic
Diffstat (limited to 'src/simutil.c')
-rw-r--r-- | src/simutil.c | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/src/simutil.c b/src/simutil.c index d7d38d55..2509cccd 100644 --- a/src/simutil.c +++ b/src/simutil.c @@ -566,22 +566,15 @@ gboolean ber_tlv_builder_next(struct ber_tlv_builder *builder, { if (builder->tag != 0xff) { ber_tlv_builder_write_header(builder); - builder->pos += MAX_BER_TLV_HEADER + builder->len; } - if (builder->pos + MAX_BER_TLV_HEADER > builder->max) + if (ber_tlv_builder_set_length(builder, 0) == FALSE) return FALSE; - if (builder->parent) - if (ber_tlv_builder_set_length(builder->parent, builder->pos + - MAX_BER_TLV_HEADER) == FALSE) - return FALSE; - builder->class = class; builder->encoding = encoding; builder->tag = new_tag; - builder->len = 0; return TRUE; } @@ -591,14 +584,13 @@ gboolean ber_tlv_builder_next(struct ber_tlv_builder *builder, gboolean ber_tlv_builder_set_length(struct ber_tlv_builder *builder, unsigned int new_len) { - if (builder->pos + MAX_BER_TLV_HEADER + new_len > builder->max) + unsigned int new_pos = builder->pos + MAX_BER_TLV_HEADER + new_len; + + if (new_pos > builder->max) return FALSE; if (builder->parent) - if (ber_tlv_builder_set_length(builder->parent, - builder->pos + MAX_BER_TLV_HEADER + - new_len) == FALSE) - return FALSE; + ber_tlv_builder_set_length(builder->parent, new_pos); builder->len = new_len; |