From 87f8b3bc7c1967cef913de6b23bbdebb8f98d19e Mon Sep 17 00:00:00 2001 From: Max Krasnyansky Date: Mon, 25 Mar 2002 19:12:16 +0000 Subject: Fix static allocations. --- src/bluetooth.c | 45 +++++++++++++++++++++++---------------------- src/hci.c | 34 ++++++++++++++++++++++++++-------- 2 files changed, 49 insertions(+), 30 deletions(-) diff --git a/src/bluetooth.c b/src/bluetooth.c index b202f280..add25594 100644 --- a/src/bluetooth.c +++ b/src/bluetooth.c @@ -44,33 +44,34 @@ void baswap(bdaddr_t *dst, bdaddr_t *src) d[i] = s[5-i]; } -char * batostr(bdaddr_t *ba) +char *batostr(bdaddr_t *ba) { - static char str[2][18]; - static int i = 1; + char *str = malloc(18); + if (!str) + return NULL; - i ^= 1; - sprintf(str[i], "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X", + sprintf(str, "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X", ba->b[0], ba->b[1], ba->b[2], ba->b[3], ba->b[4], ba->b[5]); - return str[i]; + return str; } -bdaddr_t * strtoba(char *str) +bdaddr_t *strtoba(char *str) { - static unsigned char ba[2][sizeof(bdaddr_t)]; - static int i = 1; - register char *ptr = str; - register int x; - - i ^= 1; - for(x=0; x<6; x++){ - ba[i][x] = (uint8_t) strtol(ptr, NULL, 16); - if( x!=5 && !(ptr=strchr(ptr,':')) ) + char *ptr = str; + int i; + + uint8_t *ba = malloc(sizeof(bdaddr_t)); + if (!ba) + return NULL; + + for(i=0; i<6; i++){ + ba[i] = (uint8_t) strtol(ptr, NULL, 16); + if( i!=5 && !(ptr=strchr(ptr,':')) ) ptr = ":00:00:00:00:00"; ptr++; } - return (bdaddr_t *) ba[i]; + return (bdaddr_t *) ba; } int ba2str(bdaddr_t *ba, char *str) @@ -82,13 +83,13 @@ int ba2str(bdaddr_t *ba, char *str) int str2ba(char *str, bdaddr_t *ba) { - unsigned char *b = (void *) ba; + uint8_t *b = (void *) ba; char *ptr = str; - register int x; + int i; - for (x=0; x < 6; x++) { - b[x] = (uint8_t) strtol(ptr, NULL, 16); - if (x!=5 && !(ptr=strchr(ptr, ':'))) + for (i=0; i < 6; i++) { + b[i] = (uint8_t) strtol(ptr, NULL, 16); + if (i!=5 && !(ptr=strchr(ptr, ':'))) ptr = ":00:00:00:00:00"; ptr++; } diff --git a/src/hci.c b/src/hci.c index 3e1dd52e..fb7a2780 100644 --- a/src/hci.c +++ b/src/hci.c @@ -53,9 +53,12 @@ typedef struct { static char *hci_bit2str(hci_map *m, unsigned int val) { - static char str[50]; + char *str = malloc(50); char *ptr = str; + if (!str) + return NULL; + *ptr = 0; while (m->str) { if ((unsigned int) m->val & val) @@ -71,10 +74,10 @@ static int hci_str2bit(hci_map *map, char *str, unsigned int *val) hci_map *m; int set; + str = ptr = strdup(str); if (!str) return 0; - str = ptr = strdup(str); *val = set = 0; while ((t=strsep(&ptr, ","))) { @@ -92,9 +95,12 @@ static int hci_str2bit(hci_map *map, char *str, unsigned int *val) static char *hci_uint2str(hci_map *m, unsigned int val) { - static char str[50]; + char *str = malloc(50); char *ptr = str; + if (!str) + return NULL; + *ptr = 0; while (m->str) { if ((unsigned int) m->val == val) { @@ -161,10 +167,13 @@ hci_map dev_flags_map[] = { }; char *hci_dflagstostr(uint32_t flags) { - static char str[50]; + char *str = malloc(50); char *ptr = str; hci_map *m = dev_flags_map; + if (!str) + return NULL; + *ptr = 0; if (!hci_test_bit(HCI_UP, &flags)) @@ -230,13 +239,22 @@ hci_map link_mode_map[] = { }; char *hci_lmtostr(unsigned int lm) { - static char str[50]; + char *s, *str = malloc(50); + if (!str) + return NULL; - str[0] = 0; + *str = 0; if (!(lm & HCI_LM_MASTER)) strcpy(str, "SLAVE "); - strcat(str, hci_bit2str(link_mode_map, lm)); + s = hci_bit2str(link_mode_map, lm); + if (!s) { + free(str); + return NULL; + } + + strcat(str, s); + free(s); return str; } int hci_strtolm(char *str, unsigned int *val) @@ -706,7 +724,7 @@ int hci_read_local_version(int dd, struct hci_version *ver, int to) } ver->manufacturer = btohs(rp.manufacturer); - ver->hci_ver = rp.lmp_ver; + ver->hci_ver = rp.hci_ver; ver->hci_rev = btohs(rp.hci_rev); ver->lmp_ver = rp.lmp_ver; ver->lmp_subver = btohs(rp.lmp_subver); -- cgit