Fix bug for side-effect 02/184002/2
authorInkyun Kil <inkyun.kil@samsung.com>
Fri, 13 Jul 2018 02:46:28 +0000 (11:46 +0900)
committerInkyun Kil <inkyun.kil@samsung.com>
Fri, 13 Jul 2018 05:11:50 +0000 (14:11 +0900)
- Fix side effect about the patch 'Move some codes from library to
alarm-manager'. The period is not INEXACT in versions prior to 2.4

Change-Id: Ifa47a0c42f8526f5cc25ca03b755576eebdad4e6
Signed-off-by: Inkyun Kil <inkyun.kil@samsung.com>
src/alarm-lib.c

index 0e597a7..b84d9bb 100755 (executable)
@@ -397,6 +397,31 @@ static int __sub_init()
        return ALARMMGR_RESULT_SUCCESS;
 }
 
+static int __compare_api_version(int *result, uid_t uid)
+{
+       int ret = 0;
+       pkgmgrinfo_pkginfo_h pkginfo = NULL;
+       char pkgid[512] = {0, };
+       char *pkg_version;
+
+       if (aul_app_get_pkgid_bypid_for_uid(getpid(), pkgid, sizeof(pkgid), uid) != AUL_R_OK) {
+               ALARM_MGR_EXCEPTION_PRINT("aul_app_get_pkgid_bypid() is failed. PID %d may not be app.", getpid());
+       } else {
+               ret = pkgmgrinfo_pkginfo_get_usr_pkginfo(pkgid, uid, &pkginfo);
+               if (ret != PMINFO_R_OK) {
+                       ALARM_MGR_EXCEPTION_PRINT("Failed to get pkginfo\n");
+               } else {
+                       ret = pkgmgrinfo_pkginfo_get_api_version(pkginfo, &pkg_version);
+                       if (ret != PMINFO_R_OK)
+                               ALARM_MGR_EXCEPTION_PRINT("Failed to check api version [%d]\n", ret);
+
+                       *result = strverscmp(pkg_version, "2.4");
+                       pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo);
+               }
+       }
+       return ret;
+}
+
 EXPORT_API int alarmmgr_init(const char *appid)
 {
        SECURE_LOGD("Enter");
@@ -1013,6 +1038,7 @@ EXPORT_API int alarmmgr_add_alarm_appsvc(int alarm_type, time_t trigger_at_time,
                alarm_id_t *alarm_id)
 {
        int error_code = 0;
+       int result = 0;
        struct timeval current_time;
        struct tm duetime_tm;
        alarm_info_t alarm_info;
@@ -1081,7 +1107,15 @@ EXPORT_API int alarmmgr_add_alarm_appsvc(int alarm_type, time_t trigger_at_time,
        alarm_info.start.min = duetime_tm.tm_min;
        alarm_info.start.sec = duetime_tm.tm_sec;
 
-       if ((alarm_info.alarm_type & ALARM_TYPE_INEXACT) && interval < MIN_INEXACT_INTERVAL)
+       if (__compare_api_version(&result, getuid()) < 0)
+               return ERR_ALARM_SYSTEM_FAIL;
+
+       if (result < 0) {
+               if (alarm_info.alarm_type & ALARM_TYPE_INEXACT)
+                       alarm_info.alarm_type ^= ALARM_TYPE_INEXACT;
+       }
+
+       if ((alarm_type & ALARM_TYPE_INEXACT) && interval < MIN_INEXACT_INTERVAL)
                interval = MIN_INEXACT_INTERVAL;
 
        if (interval <= 0) {