ndef: Add records comparison helpers
authorOlivier Guiter <olivier.guiter@linux.intel.com>
Wed, 9 Jan 2013 14:15:10 +0000 (15:15 +0100)
committerSamuel Ortiz <sameo@linux.intel.com>
Wed, 9 Jan 2013 17:22:28 +0000 (18:22 +0100)
These functions propose to check ndef records for specific fields
like mime type or ID field in record header.

include/ndef.h
src/ndef.c

index cbcf0b0..d35dcfe 100644 (file)
@@ -65,4 +65,13 @@ near_ndef_prepare_smartposter_record(uint8_t uri_identifier,
                                        uint32_t uri_field_length,
                                        uint8_t *uri_field);
 
+near_bool_t near_ndef_record_cmp_id(struct near_ndef_record *rec1,
+                                               struct near_ndef_record *rec2);
+near_bool_t near_ndef_record_cmp_mime(struct near_ndef_record *rec1,
+                                               struct near_ndef_record *rec2);
+
+
+size_t near_ndef_data_length(struct near_ndef_record *data);
+uint8_t *near_ndef_data_ptr(struct near_ndef_record *data);
+
 #endif
index 3a62a7f..fa61548 100644 (file)
@@ -2252,6 +2252,80 @@ int __near_ndef_record_register(struct near_ndef_record *record, char *path)
        return 0;
 }
 
+/*
+ * These functions parse a specific type record (id or mime) to find the
+ * associated string.
+ */
+near_bool_t near_ndef_record_cmp_id(struct near_ndef_record *rec1,
+                                               struct near_ndef_record *rec2)
+{
+       DBG("");
+
+       if ((rec1 == NULL) || (rec2 == NULL))
+               return FALSE;
+
+       if ((rec1->header == NULL) || (rec2->header == NULL))
+               return FALSE;
+
+       /* usual checks */
+       if ((rec1->header->il_field == NULL) ||
+                       (rec2->header->il_field == NULL))
+               return FALSE;
+
+       if (memcmp(rec1->header->il_field, rec2->header->il_field,
+               (rec1->header->il_length) > (rec2->header->il_length)
+                                       ? (rec1->header->il_length) :
+                                       (rec2->header->il_length)) != 0)
+               return FALSE;
+
+       return TRUE;
+}
+
+near_bool_t near_ndef_record_cmp_mime(struct near_ndef_record *rec1,
+                                       struct near_ndef_record *rec2)
+{
+
+       DBG("");
+
+       if ((rec1 == NULL) || (rec2 == NULL))
+               return FALSE;
+
+       if ((rec1->header == NULL) || (rec2->header == NULL))
+               return FALSE;
+       /* usual checks */
+       if ((rec1->mime == NULL) || (rec2->mime == NULL))
+               return FALSE;
+
+       if ((rec1->mime->type == NULL) || (rec2->mime->type == NULL))
+               return FALSE;
+
+       if (strlen(rec1->mime->type) != strlen(rec2->mime->type))
+               return FALSE;
+
+       if ((g_strcmp0(rec1->mime->type, rec2->mime->type) != 0))
+               return FALSE;
+
+       return TRUE;
+}
+
+/* helper to get the record data length */
+size_t near_ndef_data_length(struct near_ndef_record *rec)
+{
+       if (rec == NULL)
+               return 0;
+       else
+               return rec->data_len;
+}
+
+/* helper to get the record data pointer */
+uint8_t *near_ndef_data_ptr(struct near_ndef_record *rec)
+{
+       if (rec == NULL)
+               return NULL;
+       else
+               return rec->data;
+}
+
 /**
  * @brief Parse message represented by bytes block
 GList *near_ndef_parse(uint8_t *ndef_data, size_t ndef_length,