Refactor macro usage within CheckProperDrop::checkThreads() 37/220737/2
authorKonrad Lipinski <k.lipinski2@samsung.com>
Thu, 19 Dec 2019 14:44:33 +0000 (15:44 +0100)
committerKonrad Lipinski <k.lipinski2@samsung.com>
Thu, 30 Jan 2020 12:14:02 +0000 (13:14 +0100)
Change-Id: Iadef9bacd076a666d8a527e79165b01cf2daf544

src/client/check-proper-drop.cpp

index ccb0b6888a0d9b155e7f67d960d612107d35c272..69dd12801cb8cb27f532da2b51e129e8f8bba6c5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Copyright (c) 2015-2019 Samsung Electronics Co., Ltd All Rights Reserved
+ *  Copyright (c) 2015-2020 Samsung Electronics Co., Ltd. All rights reserved
  *
  *  Contact: Rafal Krypa <r.krypa@samsung.com>
  *
@@ -65,27 +65,6 @@ void CheckProperDrop::getThreads()
 
 bool CheckProperDrop::checkThreads()
 {
-#define REPORT_THREAD_ERROR(TID, NAME, VAL1, VAL2) {                           \
-    LogError("Invalid value of " << (NAME) << " for thread " << (TID) << ". "  \
-        << "Process has " << (VAL1) << ", thread has " << (VAL2) << ". "       \
-        << "Application candidate process not prepared properly for launch. "  \
-        << (NAME) <<  " values should be same for all threads.");              \
-    return false;                                                              \
-}
-
-#define CHECK_THREAD_CRED_FIELD(P, T, FIELD) {                                 \
-    int pval = (P)->FIELD, tval = (T)->FIELD;                                  \
-    if (pval != tval)                                                          \
-        REPORT_THREAD_ERROR((T)->tid, #FIELD, pval, tval);                     \
-}
-
-#define CHECK_THREAD_CRED_FIELD_LONG(P, T, FIELD) {                            \
-    long pval = (P)->FIELD, tval = (T)->FIELD;                                 \
-    if (pval != tval)                                                          \
-        REPORT_THREAD_ERROR((T)->tid, #FIELD, pval, tval);                     \
-}
-
-
     std::string smackProc = SmackLabels::getSmackLabelFromPid(m_pid);
 
     auto capProcPtr = makeUnique(cap_get_pid(m_pid), cap_free);
@@ -99,6 +78,15 @@ bool CheckProperDrop::checkThreads()
             "Unable to get capabilities for " << m_pid);
 
     for (const auto &thread : m_threads) {
+
+        #define REPORT_THREAD_ERROR(NAME, VAL1, VAL2) do {                                   \
+            LogError("Invalid value of " << (NAME) << " for thread " << thread->tid << ". "  \
+                << "Process has " << (VAL1) << ", thread has " << (VAL2) << ". "             \
+                << "Application candidate process not prepared properly for launch. "        \
+                << (NAME) <<  " values should be same for all threads.");                    \
+            return false;                                                                    \
+        } while (0)
+
         auto capThreadPtr = makeUnique(cap_get_pid(thread->tid), cap_free);
         if (!capThreadPtr)
             ThrowMsg(Exception::CapError,
@@ -109,40 +97,46 @@ bool CheckProperDrop::checkThreads()
             if (!capStrThreadPtr)
                 ThrowMsg(Exception::CapError, "Unable to get capabilities for " << thread->tid);
 
-            REPORT_THREAD_ERROR(thread->tid, "capabilities",
-                capProcStrPtr.get(), capStrThreadPtr.get());
+            REPORT_THREAD_ERROR("capabilities", capProcStrPtr.get(), capStrThreadPtr.get());
         }
 
         std::string smackThread = SmackLabels::getSmackLabelFromPid(thread->tid);
         if (smackProc != smackThread)
-            REPORT_THREAD_ERROR(thread->tid, "Smack label",
-                smackProc, smackThread);
+            REPORT_THREAD_ERROR("Smack label", smackProc, smackThread);
 
         if (m_proc->supgid && thread->supgid) {
             if (strcmp(m_proc->supgid, thread->supgid))
-                REPORT_THREAD_ERROR(thread->tid, "Supplementary groups",
-                    m_proc->supgid, thread->supgid);
+                REPORT_THREAD_ERROR("Supplementary groups", m_proc->supgid, thread->supgid);
         } else {
             if (m_proc->supgid != thread->supgid)
-                REPORT_THREAD_ERROR(thread->tid, "Supplementary groups",
-                m_proc->supgid ? m_proc->supgid : "<NULL>",
-                thread->supgid ? thread->supgid : "<NULL>");
+                REPORT_THREAD_ERROR("Supplementary groups",
+                                    m_proc->supgid ? m_proc->supgid : "<NULL>",
+                                    thread->supgid ? thread->supgid : "<NULL>");
         }
 
-        CHECK_THREAD_CRED_FIELD(m_proc, thread, euid);
-        CHECK_THREAD_CRED_FIELD(m_proc, thread, egid);
-        CHECK_THREAD_CRED_FIELD(m_proc, thread, ruid);
-        CHECK_THREAD_CRED_FIELD(m_proc, thread, rgid);
-        CHECK_THREAD_CRED_FIELD(m_proc, thread, suid);
-        CHECK_THREAD_CRED_FIELD(m_proc, thread, sgid);
-        CHECK_THREAD_CRED_FIELD(m_proc, thread, fuid);
-        CHECK_THREAD_CRED_FIELD(m_proc, thread, fgid);
-        CHECK_THREAD_CRED_FIELD_LONG(m_proc, thread, ns[IPCNS]);
-        CHECK_THREAD_CRED_FIELD_LONG(m_proc, thread, ns[MNTNS]);
-        CHECK_THREAD_CRED_FIELD_LONG(m_proc, thread, ns[NETNS]);
-        CHECK_THREAD_CRED_FIELD_LONG(m_proc, thread, ns[PIDNS]);
-        CHECK_THREAD_CRED_FIELD_LONG(m_proc, thread, ns[USERNS]);
-        CHECK_THREAD_CRED_FIELD_LONG(m_proc, thread, ns[UTSNS]);
+        #define CHECK_THREAD_CRED_FIELD(FIELD) do {                 \
+            const auto pval = m_proc->FIELD, tval = thread->FIELD;  \
+            if (pval != tval)                                       \
+                REPORT_THREAD_ERROR(#FIELD, pval, tval);            \
+        } while (0)
+
+        CHECK_THREAD_CRED_FIELD(euid);
+        CHECK_THREAD_CRED_FIELD(egid);
+        CHECK_THREAD_CRED_FIELD(ruid);
+        CHECK_THREAD_CRED_FIELD(rgid);
+        CHECK_THREAD_CRED_FIELD(suid);
+        CHECK_THREAD_CRED_FIELD(sgid);
+        CHECK_THREAD_CRED_FIELD(fuid);
+        CHECK_THREAD_CRED_FIELD(fgid);
+        CHECK_THREAD_CRED_FIELD(ns[IPCNS]);
+        CHECK_THREAD_CRED_FIELD(ns[MNTNS]);
+        CHECK_THREAD_CRED_FIELD(ns[NETNS]);
+        CHECK_THREAD_CRED_FIELD(ns[PIDNS]);
+        CHECK_THREAD_CRED_FIELD(ns[USERNS]);
+        CHECK_THREAD_CRED_FIELD(ns[UTSNS]);
+
+        #undef CHECK_THREAD_CRED_FIELD
+        #undef REPORT_THREAD_ERROR
     }
 
     return true;