All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] stk: Constraint the appearance of empty item
@ 2010-05-31 11:13 Yang Gu
  2010-05-31 11:13 ` [PATCH 2/2] stktest: Add negative cases for setup menu Yang Gu
  2010-06-01 19:12 ` [PATCH 1/2] stk: Constraint the appearance of empty item Denis Kenzior
  0 siblings, 2 replies; 3+ messages in thread
From: Yang Gu @ 2010-05-31 11:13 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 2401 bytes --]

If empty item turns out, it must be the only item in the list.
So the following situations are deemed as invalid:
1. Two empty items
2. Valid item + empty item
3. empty + valid item
---
 src/stkutil.c |   40 ++++++++++++++++++++++++++++------------
 1 files changed, 28 insertions(+), 12 deletions(-)

diff --git a/src/stkutil.c b/src/stkutil.c
index 2ca5c6a..a31ae20 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -2014,6 +2014,12 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)
 	}
 }
 
+static void destroy_stk_item(struct stk_item *item)
+{
+	g_free(item->text);
+	g_free(item);
+}
+
 static gboolean parse_item_list(struct comprehension_tlv_iter *iter,
 				void *data)
 {
@@ -2022,21 +2028,40 @@ static gboolean parse_item_list(struct comprehension_tlv_iter *iter,
 	struct comprehension_tlv_iter iter_old;
 	struct stk_item item;
 	GSList *list = NULL;
+	unsigned int count = 0;
+	gboolean has_empty = FALSE;
 
 	do {
 		comprehension_tlv_iter_copy(iter, &iter_old);
 		memset(&item, 0, sizeof(item));
+		count++;
+
+		if (parse_dataobj_item(iter, &item) == TRUE) {
+			if (item.id == 0) {
+				has_empty = TRUE;
+				continue;
+			}
 
-		if (parse_dataobj_item(iter, &item) == TRUE)
 			list = g_slist_prepend(list,
 						g_memdup(&item, sizeof(item)));
+		}
 	} while (comprehension_tlv_iter_next(iter) == TRUE &&
 			comprehension_tlv_iter_get_tag(iter) == tag);
 
 	comprehension_tlv_iter_copy(&iter_old, iter);
-	*out = g_slist_reverse(list);
 
-	return TRUE;
+	if (!has_empty) {
+		*out = g_slist_reverse(list);
+		return TRUE;
+	}
+
+	if (count == 1)
+		return TRUE;
+
+	g_slist_foreach(list, (GFunc)destroy_stk_item, NULL);
+	g_slist_free(list);
+	return FALSE;
+
 }
 
 static gboolean parse_provisioning_list(struct comprehension_tlv_iter *iter,
@@ -2342,12 +2367,6 @@ static gboolean parse_poll_interval(struct stk_command *command,
 	return TRUE;
 }
 
-static void destroy_stk_item(struct stk_item *item)
-{
-	g_free(item->text);
-	g_free(item);
-}
-
 static void destroy_setup_menu(struct stk_command *command)
 {
 	g_free(command->setup_menu.alpha_id);
@@ -2392,9 +2411,6 @@ static gboolean parse_setup_menu(struct stk_command *command,
 	if (ret == FALSE)
 		return FALSE;
 
-	if (obj->items == NULL)
-		return FALSE;
-
 	return TRUE;
 }
 
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-06-01 19:12 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-05-31 11:13 [PATCH 1/2] stk: Constraint the appearance of empty item Yang Gu
2010-05-31 11:13 ` [PATCH 2/2] stktest: Add negative cases for setup menu Yang Gu
2010-06-01 19:12 ` [PATCH 1/2] stk: Constraint the appearance of empty item Denis Kenzior

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.