ussd: Rework ussd_request

- Only allocate variables which are needed
- Make sure buffers are big enough
- converted is a simple string, no need to use fancy printf magic
This commit is contained in:
Denis Kenzior 2010-09-14 21:55:31 -05:00
parent 82e6ddfd4b
commit f6a4d4a5ce
1 changed files with 9 additions and 8 deletions

View File

@ -184,11 +184,7 @@ static void at_ussd_request(struct ofono_ussd *ussd, int dcs,
{
struct ussd_data *data = ofono_ussd_get_data(ussd);
struct cb_data *cbd = cb_data_new(cb, user_data);
char buf[256];
unsigned char unpacked_buf[182];
char coded_buf[160];
char *converted;
long written;
char buf[512];
enum sms_charset charset;
if (!cbd)
@ -201,6 +197,9 @@ static void at_ussd_request(struct ofono_ussd *ussd, int dcs,
goto error;
if (charset == SMS_CHARSET_7BIT) {
unsigned char unpacked_buf[182];
long written;
unpack_7bit_own_buf(pdu, len, 0, TRUE, sizeof(unpacked_buf),
&written, 0, unpacked_buf);
@ -210,12 +209,14 @@ static void at_ussd_request(struct ofono_ussd *ussd, int dcs,
snprintf(buf, sizeof(buf), "AT+CUSD=1,\"%.*s\",%d",
(int) written, unpacked_buf, dcs);
} else {
converted = encode_hex_own_buf(pdu, len, 0, coded_buf);
char coded_buf[321];
char *converted = encode_hex_own_buf(pdu, len, 0, coded_buf);
if (!converted)
goto error;
snprintf(buf, sizeof(buf), "AT+CUSD=1,\"%.*s\",%d",
strlen(converted), converted, dcs);
snprintf(buf, sizeof(buf), "AT+CUSD=1,\"%s\",%d",
converted, dcs);
}
if (data->vendor == OFONO_VENDOR_QUALCOMM_MSM) {