From: Andrzej Zaborowski Date: Mon, 7 Jun 2010 10:08:23 +0000 (+0200) Subject: stkutil: Use static buf in stk_pdu_from_response X-Git-Tag: 0.23~40 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ef408ae1a65be6986c3468e9319be4c3a7028c61;p=platform%2Fupstream%2Fofono.git stkutil: Use static buf in stk_pdu_from_response --- diff --git a/src/stkutil.c b/src/stkutil.c index 82d4e84..14958a8 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -3980,14 +3980,15 @@ static gboolean build_local_info(struct stk_tlv_builder *builder, return FALSE; } -unsigned int stk_pdu_from_response(const struct stk_response *response, - unsigned char *pdu, unsigned int size) +const unsigned char *stk_pdu_from_response(const struct stk_response *response, + unsigned int *out_length) { struct stk_tlv_builder builder; gboolean ok = TRUE; unsigned char tag; + static unsigned char pdu[512]; - stk_tlv_builder_init(&builder, pdu, size); + stk_tlv_builder_init(&builder, pdu, sizeof(pdu)); /* * Encode command details, they come in order with @@ -3996,19 +3997,19 @@ unsigned int stk_pdu_from_response(const struct stk_response *response, */ tag = STK_DATA_OBJECT_TYPE_COMMAND_DETAILS; if (stk_tlv_builder_open_container(&builder, TRUE, tag, FALSE) == FALSE) - return 0; + return NULL; if (stk_tlv_builder_append_byte(&builder, response->number) == FALSE) - return 0; + return NULL; if (stk_tlv_builder_append_byte(&builder, response->type) == FALSE) - return 0; + return NULL; if (stk_tlv_builder_append_byte(&builder, response->qualifier) == FALSE) - return 0; + return NULL; if (stk_tlv_builder_close_container(&builder) == FALSE) - return 0; + return NULL; /* TS 102 223 section 6.8 states: * "For all COMPREHENSION-TLV objects with Min = N, the terminal @@ -4022,19 +4023,19 @@ unsigned int stk_pdu_from_response(const struct stk_response *response, */ tag = STK_DATA_OBJECT_TYPE_DEVICE_IDENTITIES; if (stk_tlv_builder_open_container(&builder, TRUE, tag, FALSE) == FALSE) - return 0; + return NULL; if (stk_tlv_builder_append_byte(&builder, response->src) == FALSE) - return 0; + return NULL; if (stk_tlv_builder_append_byte(&builder, response->dst) == FALSE) - return 0; + return NULL; if (stk_tlv_builder_close_container(&builder) == FALSE) - return 0; + return NULL; if (build_dataobj_result(&builder, &response->result, TRUE) != TRUE) - return 0; + return NULL; switch (response->type) { case STK_COMMAND_TYPE_DISPLAY_TEXT: @@ -4105,11 +4106,14 @@ unsigned int stk_pdu_from_response(const struct stk_response *response, case STK_COMMAND_TYPE_LAUNCH_BROWSER: break; default: - return 0; + return NULL; }; if (ok != TRUE) - return 0; + return NULL; + + if (out_length) + *out_length = stk_tlv_builder_get_length(&builder); - return stk_tlv_builder_get_length(&builder); + return pdu; } diff --git a/src/stkutil.h b/src/stkutil.h index cc5801c..7dd0d6c 100644 --- a/src/stkutil.h +++ b/src/stkutil.h @@ -1176,6 +1176,5 @@ struct stk_command *stk_command_new_from_pdu(const unsigned char *pdu, unsigned int len); void stk_command_free(struct stk_command *command); -/* Returns # of bytes written or zero on error */ -unsigned int stk_pdu_from_response(const struct stk_response *response, - unsigned char *pdu, unsigned int size); +const unsigned char *stk_pdu_from_response(const struct stk_response *response, + unsigned int *out_length); diff --git a/unit/test-stkutil.c b/unit/test-stkutil.c index fb354bd..eb50d17 100644 --- a/unit/test-stkutil.c +++ b/unit/test-stkutil.c @@ -13949,13 +13949,18 @@ struct terminal_response_test { static void test_terminal_response_encoding(gconstpointer data) { const struct terminal_response_test *test = data; - unsigned char buf[512]; - unsigned int len; + const unsigned char *pdu; + unsigned int pdu_len; - len = stk_pdu_from_response(&test->response, buf, sizeof(buf)); + pdu = stk_pdu_from_response(&test->response, &pdu_len); + + if (test->pdu) + g_assert(pdu); + else + g_assert(pdu == NULL); - g_assert(len == test->pdu_len); - g_assert(memcmp(buf, test->pdu, len) == 0); + g_assert(pdu_len == test->pdu_len); + g_assert(memcmp(pdu, test->pdu, pdu_len) == 0); } static const unsigned char display_text_response_111[] = {