diff options
author | Denis Kenzior <denkenz@gmail.com> | 2010-05-24 11:30:59 -0500 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2010-05-25 16:52:51 -0500 |
commit | ec8a6cbc43a81b8973f4238cd56645b3bb8246f3 (patch) | |
tree | a53794f60796fecb75c421d32e5ae76e87af0ad0 /src/simutil.c | |
parent | ea46bae631c831549914cdcf5bedc11a3b591180 (diff) | |
download | ofono-ec8a6cbc43a81b8973f4238cd56645b3bb8246f3.tar.bz2 |
simutil: Simplify ber_tlv_builder_optimize logic
Diffstat (limited to 'src/simutil.c')
-rw-r--r-- | src/simutil.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/simutil.c b/src/simutil.c index 2509cccd..c0c72f0a 100644 --- a/src/simutil.c +++ b/src/simutil.c @@ -631,20 +631,23 @@ gboolean ber_tlv_builder_recurse_comprehension(struct ber_tlv_builder *builder, } void ber_tlv_builder_optimize(struct ber_tlv_builder *builder, - unsigned char **pdu, unsigned int *len) + unsigned char **out_pdu, unsigned int *out_len) { + unsigned int len; + unsigned char *pdu; + ber_tlv_builder_write_header(builder); - if (pdu == NULL) - return; + len = builder->pos + MAX_BER_TLV_HEADER + builder->len; - *len = builder->pos + MAX_BER_TLV_HEADER + builder->len; - *pdu = builder->pdu; + for (pdu = builder->pdu; *pdu == 0xff; pdu++) + len--; - while (**pdu == 0xff) { - (*len)--; - (*pdu)++; - } + if (out_pdu) + *out_pdu = pdu; + + if (out_len) + *out_len = len; } gboolean comprehension_tlv_builder_init( |