Apply error-checking macro to CPlayListCtxPopup::Create. 05/38105/1 accepted/tizen/tv/20150414.013000 submit/tizen_tv/20150413.233545
authorKim Tae Soo <taesoo46.kim@samsung.com>
Mon, 13 Apr 2015 05:56:26 +0000 (14:56 +0900)
committerKim Tae Soo <taesoo46.kim@samsung.com>
Mon, 13 Apr 2015 05:56:26 +0000 (14:56 +0900)
Change-Id: Icac72ee20ef2d51d382aee59dc029e00b1c51dbb
Signed-off-by: Kim Tae Soo <taesoo46.kim@samsung.com>
src/views/PlayListCtxPopup.cpp
src/views/PlayListCtxPopup.h

index 123c989..be995e1 100644 (file)
@@ -17,6 +17,7 @@
 #include <Elementary.h>
 #include <Eina.h>
 #include <Ecore.h>
+#include <AppCommon.h>
 #include "i18n.h"
 #include "define.h"
 #include "dbg.h"
@@ -76,75 +77,82 @@ void CPlayListCtxPopup::t_OnBtnClicked(Evas_Object* obj, void* ev)
 }
 
 
-bool CPlayListCtxPopup::Create(Evas_Object* base, const SCallback* callback, Eina_List *playList)
+bool CPlayListCtxPopup::m_SetBtnString(Eina_List *playlistList)
 {
-       Eina_List *l = NULL;
-       SCtxtPlaylistItem *item = NULL;
-       int i;
-       void *obj = NULL;
-
-       m = new SPlayListCtxPopup;
-       if (!m) {
-               _ERR("Memory Alloc Failed!!");
-               return false;
-       }
-
-       m->listSize = eina_list_count(playList);
-       if (m->listSize == 0) {
-               _DBG("Playlist is empty.");
-               delete m;
-               m = NULL;
-               return false;
-       }
+       Eina_List *l;
+       SCtxtPlaylistItem *item;
+       void *obj;
+       int index = 0;
 
-       m->settingTexts = new char*[m->listSize];
-       m->btnIds = new char*[m->listSize];
-       m->dbIds = new int[m->listSize];
-
-       i = 0;
-       EINA_LIST_FOREACH(playList, l, obj) {
+       EINA_LIST_FOREACH(playlistList, l, obj) {
                item = (SCtxtPlaylistItem *)obj;
-               m->settingTexts[i] = new char[strlen(N_(item->name)) + 1];
-               m->btnIds[i] = new char[strlen(item->name) + 1];
-               m->dbIds[i] = item->id;
 
-               strcpy(m->settingTexts[i], N_(item->name));
-               strcpy(m->btnIds[i], item->name);
+               _CREATE_BEGIN{
+                       _CHECK(m->settingTexts[index] = new char[strlen(N_(item->name)) + 1])
+                       _CHECK(m->btnIds[index] = new char[strlen(item->name) + 1])
 
-               i++;
-       }
+                       _WHEN_SUCCESS{
+                               m->dbIds[index] = item->id;
+                               strcpy(m->settingTexts[index], N_(item->name));
+                               strcpy(m->btnIds[index], item->name);
+                       }
 
-       bool r = CCtxPopup::Create(base, callback, true);
-       if (r == false) {
-               _ERR("CCtxPopup::Create failed");
-               for (i = 0; i < m->listSize; i++) {
-                       delete[] m->settingTexts[i];
-                       delete[] m->btnIds[i];
-               }
+                       _CHECK_FAIL{ delete[] m->btnIds[index]; m->btnIds[index] = NULL; }
+                       _CHECK_FAIL{ delete[] m->settingTexts[index]; m->settingTexts[index] = NULL; }
+               } _CREATE_END_AND_CATCH{ return false; }
 
-               delete[] m->settingTexts;
-               delete[] m->btnIds;
-               delete[] m->dbIds;
-               delete m;
-               
-               m = NULL;
-               return false;
+               index++;
        }
 
        return true;
 }
 
 
-void CPlayListCtxPopup::Destroy(void)
+void CPlayListCtxPopup::m_DeleteBtnString(void)
 {
-       CCtxPopup::Destroy();
-
        int i;
-
        for (i = 0; i < m->listSize; i++) {
                delete[] m->settingTexts[i];
                delete[] m->btnIds[i];
        }
+}
+
+
+bool CPlayListCtxPopup::Create(Evas_Object* base, const SCallback* callback, Eina_List *playList)
+{
+       Eina_List *l = NULL;
+       SCtxtPlaylistItem *item = NULL;
+
+       _CREATE_BEGIN{
+               _CHECK(m = new SPlayListCtxPopup)
+               _CHECK(m->listSize = eina_list_count(playList))
+               _CHECK(m->settingTexts = new char*[m->listSize])
+               _COMMAND{ memset(m->settingTexts, NULL, m->listSize * sizeof(char*)); }
+               _CHECK(m->btnIds = new char*[m->listSize])
+               _COMMAND{ memset(m->btnIds, NULL, m->listSize * sizeof(char*)); }
+               _CHECK(m->dbIds = new int[m->listSize])
+               _COMMAND{ memset(m->dbIds, NULL, m->listSize * sizeof(int)); }
+               _CHECK(m_SetBtnString(playList))
+               _CHECK(CCtxPopup::Create(base, callback, true))
+
+               _CHECK_FAIL{ CCtxPopup::Destroy(); }
+               _CHECK_FAIL{ m_DeleteBtnString(); }
+               _CHECK_FAIL{ delete[] m->dbIds; }
+               _CHECK_FAIL{ delete[] m->btnIds; }
+               _CHECK_FAIL{ delete[] m->settingTexts; }
+               _CHECK_FAIL{}
+               _CHECK_FAIL{ delete m; m = NULL; }
+       } _CREATE_END_AND_CATCH{ return false; }
+
+       return true;
+}
+
+
+void CPlayListCtxPopup::Destroy(void)
+{
+       CCtxPopup::Destroy();
+
+       m_DeleteBtnString();
 
        delete[] m->settingTexts;
        delete[] m->btnIds;
index 29888d2..6b6a34f 100644 (file)
@@ -11,6 +11,10 @@ protected:
        virtual void t_OnConfiguration(void);
        virtual void t_OnBtnClicked(Evas_Object* obj, void* ev);
 
+private:
+       bool m_SetBtnString(Eina_List *playlistList);
+       void m_DeleteBtnString(void);
+
 public:
        CPlayListCtxPopup() : m(0) {}