aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@nokia.com>2011-01-21 04:40:11 +0200
committerJohan Hedberg <johan.hedberg@nokia.com>2011-01-21 05:02:19 +0200
commit1522d6568002afa27ee7a3280b3166f7ecb02f06 (patch)
tree12e1a8f9da42f59e0078de6113228e5031e024c2 /src
parent80caa32b6f0c0a774c8334295ee71b658acff630 (diff)
downloadbluez-1522d6568002afa27ee7a3280b3166f7ecb02f06.tar.gz
Use an unsigned integer for representing the PIN length
The value 0 is not allowed by the HCI spec so it can be used to denote "not applicable" or "unknown". Also, the management interface will use an unsigned integer for the PIN length so mirroring that in the core daemon code makes sense. This patch also takes care of handling previously stored -1 values and converts them to 0 whenever they are detected.
Diffstat (limited to 'src')
-rw-r--r--src/adapter.c6
-rw-r--r--src/adapter.h2
-rw-r--r--src/event.c2
-rw-r--r--src/event.h2
-rw-r--r--src/storage.c2
5 files changed, 10 insertions, 4 deletions
diff --git a/src/adapter.c b/src/adapter.c
index ab4791c6..3f128844 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -1975,6 +1975,7 @@ static struct link_key_info *get_key_info(const char *addr, const char *value)
{
struct link_key_info *info;
char tmp[3];
+ long int l;
int i;
if (strlen(value) < 36) {
@@ -1997,7 +1998,10 @@ static struct link_key_info *get_key_info(const char *addr, const char *value)
info->type = (uint8_t) strtol(tmp, NULL, 10);
memcpy(tmp, value + 35, 2);
- info->pin_len = strtol(tmp, NULL, 10);
+ l = strtol(tmp, NULL, 10);
+ if (l < 0)
+ l = 0;
+ info->pin_len = l;
return info;
}
diff --git a/src/adapter.h b/src/adapter.h
index b66be9a8..83965692 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -69,7 +69,7 @@ struct link_key_info {
bdaddr_t bdaddr;
unsigned char key[16];
uint8_t type;
- int pin_len;
+ uint8_t pin_len;
};
struct remote_dev_info {
diff --git a/src/event.c b/src/event.c
index 5d0bf6d0..00b9ad7e 100644
--- a/src/event.c
+++ b/src/event.c
@@ -695,7 +695,7 @@ proceed:
int btd_event_link_key_notify(bdaddr_t *local, bdaddr_t *peer,
uint8_t *key, uint8_t key_type,
- int pin_length, uint8_t old_key_type)
+ uint8_t pin_length, uint8_t old_key_type)
{
struct btd_device *device;
struct btd_adapter *adapter;
diff --git a/src/event.h b/src/event.h
index 66dd279c..941902a9 100644
--- a/src/event.h
+++ b/src/event.h
@@ -45,4 +45,4 @@ int btd_event_user_passkey(bdaddr_t *sba, bdaddr_t *dba);
int btd_event_user_notify(bdaddr_t *sba, bdaddr_t *dba, uint32_t passkey);
int btd_event_link_key_notify(bdaddr_t *local, bdaddr_t *peer,
uint8_t *key, uint8_t key_type,
- int pin_length, uint8_t old_key_type);
+ uint8_t pin_length, uint8_t old_key_type);
diff --git a/src/storage.c b/src/storage.c
index 1c6ced48..35e1ba29 100644
--- a/src/storage.c
+++ b/src/storage.c
@@ -676,6 +676,8 @@ int read_pin_length(bdaddr_t *local, bdaddr_t *peer)
}
len = atoi(str + 35);
+ if (len < 0)
+ len = 0;
free(str);