Exclude some lines for code coverage
[platform/core/api/package-manager.git] / src / package_manager_internal.c
index 03e86eb..c058f63 100644 (file)
@@ -19,6 +19,7 @@
 #include <fcntl.h>
 #include <sys/syscall.h>
 #include <unistd.h>
+#include <pthread.h>
 
 #include <package-manager.h>
 #include <pkgmgr-info.h>
@@ -38,6 +39,8 @@ typedef struct _foreach_pkg_context_ {
        void *user_data;
 } foreach_pkg_context_s;
 
+static pthread_mutex_t __mutex = PTHREAD_MUTEX_INITIALIZER;
+
 int check_privilege(privilege_type type)
 {
        cynara *p_cynara;
@@ -47,35 +50,45 @@ int check_privilege(privilege_type type)
        char uid[10];
        char *session;
        const char *privilege;
-       unsigned long pid = getpid();
-       unsigned long tid = gettid();
+       pid_t pid = getpid();
+       pid_t tid = gettid();
 
        if (pid == tid) {
                fd = open("/proc/self/attr/current", O_RDONLY);
        } else {
+               /* LCOV_EXCL_START */
                // Check current thread smack label.
                char path[256] = { 0 };
                pid = tid;
-               snprintf(path, sizeof(path), "/proc/%lu/attr/current", tid);
+               snprintf(path, sizeof(path), "/proc/%d/attr/current", tid);
                fd = open(path, O_RDONLY);
+               /* LCOV_EXCL_STOP */
        }
        if (fd < 0) {
+               /* LCOV_EXCL_START */
                LOGE("open failed: %d", errno);
                return PACKAGE_MANAGER_ERROR_IO_ERROR;
+               /* LCOV_EXCL_STOP */
        }
 
        ret = read(fd, subject_label, MAX_SMACK_LABEL_LEN);
        if (ret < 0) {
+               /* LCOV_EXCL_START */
                LOGE("read failed: %d", errno);
                close(fd);
                return PACKAGE_MANAGER_ERROR_IO_ERROR;
+               /* LCOV_EXCL_STOP */
        }
        close(fd);
 
+       pthread_mutex_lock(&__mutex);
        ret = cynara_initialize(&p_cynara, NULL);
        if (ret != CYNARA_API_SUCCESS) {
+               /* LCOV_EXCL_START */
                LOGE("init cynara failed: %d", ret);
+               pthread_mutex_unlock(&__mutex);
                return PACKAGE_MANAGER_ERROR_IO_ERROR;
+               /* LCOV_EXCL_STOP */
        }
 
        snprintf(uid, 10, "%d", getuid());
@@ -85,26 +98,33 @@ int check_privilege(privilege_type type)
        case PRIVILEGE_PACKAGE_MANAGER_INFO:
                privilege = "http://tizen.org/privilege/packagemanager.info";
                break;
+       /* LCOV_EXCL_START */
        case PRIVILEGE_PACKAGE_MANAGER_ADMIN:
                privilege = "http://tizen.org/privilege/packagemanager.admin";
                break;
+       /* LCOV_EXCL_STOP */
        case PRIVILEGE_PACKAGE_MANAGER_CACHE:
                privilege =
                        "http://tizen.org/privilege/packagemanager.clearcache";
                break;
+       /* LCOV_EXCL_START */
        default:
                privilege = NULL;
                break;
+       /* LCOV_EXCL_STOP */
        }
 
        ret = cynara_check(p_cynara, subject_label, session, uid, privilege);
 
        free(session);
        cynara_finish(p_cynara);
+       pthread_mutex_unlock(&__mutex);
 
        if (ret != CYNARA_API_ACCESS_ALLOWED) {
+               /* LCOV_EXCL_START */
                LOGE("cynara access check failed: %d", ret);
                return PACKAGE_MANAGER_ERROR_PERMISSION_DENIED;
+               /* LCOV_EXCL_STOP */
        }
 
        return PACKAGE_MANAGER_ERROR_NONE;
@@ -118,18 +138,22 @@ static const char *package_manager_error_to_string(package_manager_error_e
                return "NONE";
        case PACKAGE_MANAGER_ERROR_INVALID_PARAMETER:
                return "INVALID_PARAMETER";
+       /* LCOV_EXCL_START */
        case PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY:
                return "OUT_OF_MEMORY";
+       /* LCOV_EXCL_STOP */
        case PACKAGE_MANAGER_ERROR_IO_ERROR:
                return "IO_ERROR";
        case PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE:
                return "NO_SUCH_PACKAGE";
+       /* LCOV_EXCL_START */
        case PACKAGE_MANAGER_ERROR_PERMISSION_DENIED:
                return "PERMISSION_DENIED";
        case PACKAGE_MANAGER_ERROR_SYSTEM_ERROR:
                return "SEVERE_SYSTEM_ERROR";
        default:
                return "UNKNOWN";
+       /* LCOV_EXCL_STOP */
        }
 }
 
@@ -151,9 +175,11 @@ int package_manager_convert_internal_error(int internal_error)
                return PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY;
        case PKGMGR_R_EIO:
                return PACKAGE_MANAGER_ERROR_IO_ERROR;
+       /* LCOV_EXCL_START */
        default:
                _LOGE("Unexpected error");
                return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR;
+       /* LCOV_EXCL_STOP */
        }
 }
 
@@ -161,9 +187,11 @@ int package_manager_error(package_manager_error_e error,
                                 const char *function, const char *description)
 {
        if (description) {
+               /* LCOV_EXCL_START */
                _LOGE("[%s] %s(0x%08x) : %s", function,
                     package_manager_error_to_string(error), error,
                     description);
+               /* LCOV_EXCL_STOP */
        } else {
                _LOGE("[%s] %s(0x%08x)", function,
                     package_manager_error_to_string(error), error);
@@ -185,13 +213,17 @@ static int package_info_foreach_package_info_cb(const pkgmgrinfo_pkginfo_h handl
        int ret;
 
        if (handle == NULL || foreach_pkg_context == NULL) {
+               /* LCOV_EXCL_START */
                package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
                return PMINFO_R_EINVAL;
+               /* LCOV_EXCL_STOP */
        }
 
        ret = package_info_create_with_pkginfo(handle, &package_info);
        if (ret != PACKAGE_MANAGER_ERROR_NONE)
+               /* LCOV_EXCL_START */
                return package_manager_error(ret, __FUNCTION__, NULL);
+               /* LCOV_EXCL_STOP */
 
        r = foreach_pkg_context->callback(package_info, foreach_pkg_context->user_data);
 
@@ -214,7 +246,9 @@ int package_info_foreach_package_info(package_manager_package_info_cb callback,
        ret = pkgmgrinfo_pkginfo_get_list(package_info_foreach_package_info_cb, &foreach_pkg_context);
 
        if (ret < 0)
+               /* LCOV_EXCL_START */
                return PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE;
+               /* LCOV_EXCL_STOP */
 
        return PACKAGE_MANAGER_ERROR_NONE;
 }
@@ -233,7 +267,9 @@ int package_info_filter_foreach_package_info(pkgmgrinfo_pkginfo_filter_h handle,
        ret = pkgmgrinfo_pkginfo_filter_foreach_pkginfo(handle, package_info_foreach_package_info_cb, &foreach_pkg_context);
 
        if (ret < 0)
+               /* LCOV_EXCL_START */
                return PACKAGE_MANAGER_ERROR_IO_ERROR;
+               /* LCOV_EXCL_STOP */
 
        return PACKAGE_MANAGER_ERROR_NONE;
 }