diff options
| -rw-r--r-- | src/bluetooth.c | 45 | ||||
| -rw-r--r-- | 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++;  	} @@ -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);  | 
