OSDN Git Service

Simplify eir_parse_uuid* functions
authorFrédéric Danis <frederic.danis@linux.intel.com>
Thu, 20 Oct 2011 12:53:04 +0000 (14:53 +0200)
committerJohan Hedberg <johan.hedberg@intel.com>
Fri, 21 Oct 2011 08:02:35 +0000 (11:02 +0300)
src/eir.c

index f188031..4e7c028 100644 (file)
--- a/src/eir.c
+++ b/src/eir.c
@@ -59,43 +59,33 @@ void eir_data_free(struct eir_data *eir)
        eir->name = NULL;
 }
 
-static void eir_parse_uuid16(struct eir_data *eir, uint8_t *data, uint8_t len)
+static void eir_parse_uuid16(struct eir_data *eir, void *data, uint8_t len)
 {
-       uint8_t *uuid_ptr = data;
+       uint16_t *uuid16 = data;
        uuid_t service;
        char *uuid_str;
        unsigned int i;
-       uint16_t val16;
 
        service.type = SDP_UUID16;
-       for (i = 0; i < len / 2; i++) {
-               val16 = uuid_ptr[1];
-               val16 = (val16 << 8) + uuid_ptr[0];
-               service.value.uuid16 = val16;
+       for (i = 0; i < len / 2; i++, uuid16++) {
+               service.value.uuid16 = btohs(bt_get_unaligned(uuid16));
                uuid_str = bt_uuid2string(&service);
                eir->services = g_slist_append(eir->services, uuid_str);
-               uuid_ptr += 2;
        }
 }
 
-static void eir_parse_uuid32(struct eir_data *eir, uint8_t *data, uint8_t len)
+static void eir_parse_uuid32(struct eir_data *eir, void *data, uint8_t len)
 {
-       uint8_t *uuid_ptr = data;
+       uint32_t *uuid32 = data;
        uuid_t service;
        char *uuid_str;
        unsigned int i;
-       uint32_t val32;
-       int k;
 
        service.type = SDP_UUID32;
-       for (i = 0; i < len / 4; i++) {
-               val32 = uuid_ptr[3];
-               for (k = 2; k >= 0; k--)
-                       val32 = (val32 << 8) + uuid_ptr[k];
-               service.value.uuid32 = val32;
+       for (i = 0; i < len / 4; i++, uuid32++) {
+               service.value.uuid32 = btohl(bt_get_unaligned(uuid32));
                uuid_str = bt_uuid2string(&service);
                eir->services = g_slist_append(eir->services, uuid_str);
-               uuid_ptr += 4;
        }
 }
 
@@ -164,12 +154,14 @@ int eir_parse(struct eir_data *eir, uint8_t *eir_data)
 
                case EIR_NAME_SHORT:
                case EIR_NAME_COMPLETE:
-                       if (g_utf8_validate((char *) &eir_data[2],
+                       if (!g_utf8_validate((char *) &eir_data[2],
                                                        field_len - 1, NULL))
-                               eir->name = g_strndup((char *) &eir_data[2],
+                               break;
+
+                       g_free(eir->name);
+
+                       eir->name = g_strndup((char *) &eir_data[2],
                                                                field_len - 1);
-                       else
-                               eir->name = g_strdup("");
                        eir->name_complete = eir_data[1] == EIR_NAME_COMPLETE;
                        break;
                }